@huntsman-cancer-institute/navigation 17.9.3 → 17.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/components/badge.component.mjs +4 -4
- package/esm2022/components/brand-nav.component.mjs +4 -4
- package/esm2022/components/div-nav.component.mjs +4 -4
- package/esm2022/components/li-dd-nav.component.mjs +4 -4
- package/esm2022/components/li-exp-nav.component.mjs +4 -4
- package/esm2022/components/li-nav.component.mjs +4 -4
- package/esm2022/components/nav.component.mjs +4 -4
- package/esm2022/components/search-list/search-list-controller.component.mjs +6 -6
- package/esm2022/components/search-list/search-list.component.mjs +4 -4
- package/esm2022/components/search-tree/search-tree-controller.component.mjs +4 -4
- package/esm2022/components/search-tree/search-tree.component.mjs +4 -4
- package/esm2022/components/template.component.mjs +4 -4
- package/esm2022/components/ul-nav.component.mjs +4 -4
- package/esm2022/directives/ri-ripple-effect.directive.mjs +4 -4
- package/esm2022/directives/top-margin.directive.mjs +4 -4
- package/esm2022/impl/app-footer.component.mjs +4 -4
- package/esm2022/impl/app-header.component.mjs +4 -4
- package/esm2022/impl/sidebar.component.mjs +4 -4
- package/esm2022/navigation.module.mjs +5 -5
- package/esm2022/services/navigation-global.service.mjs +4 -4
- package/esm2022/services/navigation.service.mjs +4 -4
- package/fesm2022/huntsman-cancer-institute-navigation.mjs +67 -67
- package/fesm2022/huntsman-cancer-institute-navigation.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -570,11 +570,11 @@ export class NavComponent {
|
|
|
570
570
|
this.changeDetectorRef.detectChanges();
|
|
571
571
|
}
|
|
572
572
|
}
|
|
573
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
574
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
573
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i1.NavigationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
574
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NavComponent, selector: "hci-nav", inputs: { config: "config", id: ["navId", "id"], isRoot: "isRoot", type: "type", title: "title", rootClass: "rootClass", roleName: "roleName", authenticatedKey: "authenticatedKey", notAuthenticatedKey: "notAuthenticatedKey", inputChildren: ["children", "inputChildren"], isCCR: "isCCR" }, usesOnChanges: true, ngImport: i0, template: `
|
|
575
575
|
`, isInline: true }); }
|
|
576
576
|
}
|
|
577
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
577
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NavComponent, decorators: [{
|
|
578
578
|
type: Component,
|
|
579
579
|
args: [{
|
|
580
580
|
template: `
|
|
@@ -606,4 +606,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
606
606
|
}], isCCR: [{
|
|
607
607
|
type: Input
|
|
608
608
|
}] } });
|
|
609
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25hdmlnYXRpb24vc3JjL2NvbXBvbmVudHMvbmF2LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBU1QsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQUVqRTs7Ozs7OztHQU9HO0FBU0gsTUFBTSxPQUFPLFlBQVk7SUF1RHZCLFlBQVksVUFBc0IsRUFBRSxRQUFtQixFQUFFLFFBQWtDLEVBQUUsaUJBQW9DLEVBQUUsaUJBQW9DO1FBckQ5SixXQUFNLEdBQVE7WUFDckIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRU8sV0FBTSxHQUFZLEtBQUssQ0FBQztRQUt4QixxQkFBZ0IsR0FBVyxPQUFPLENBQUM7UUFDbkMsd0JBQW1CLEdBQVcsV0FBVyxDQUFDO1FBQ2hDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQ3BDLFVBQUssR0FBWSxLQUFLLENBQUM7UUFDaEM7Ozs7V0FJRztRQUNILGFBQVEsR0FBbUIsRUFBRSxDQUFDO1FBVTlCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTdCOzs7V0FHRztRQUNILGlCQUFZLEdBQWdCLElBQUksR0FBRyxFQUFVLENBQUM7UUFFOUM7Ozs7OztXQU1HO1FBQ0ssZUFBVSxHQUF5QixJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQU90RSxrQkFBYSxHQUFpQixJQUFJLFlB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QUFDO1lBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQzs4R0FscEJVLFlBQVk7a0dBQVosWUFBWSxxV0FMbkI7T0FDQzs7MkZBSU0sWUFBWTtrQkFSeEIsU0FBUzttQkFDUjtvQkFDRSxRQUFRLEVBQ047T0FDQztvQkFDSCxRQUFRLEVBQUUsU0FBUztpQkFDcEI7OE1BSVEsTUFBTTtzQkFBZCxLQUFLO2dCQUdVLEVBQUU7c0JBQWpCLEtBQUs7dUJBQUMsT0FBTztnQkFDTCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDYSxhQUFhO3NCQUEvQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1IsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZSxcclxuICBUeXBlLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgVmlld1JlZixcclxuICBPbkluaXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIENvbXBvbmVudFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtSb2xlRW50aXR5fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXNlclwiO1xyXG5pbXBvcnQge0NvbXBvbmVudEluamVjdG9yfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXRpbHNcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgdGhhdCBhbGwgbmF2aWdhdGlvbiBjb21wb25lbnRzIGV4dGVuZCBmcm9tLiAgVGhpcyBpbmNsdWRlcyBvdGhlciBzdGFuZGFsb25lIG1vZHVsZXMgc3VjaFxyXG4gKiBhcyBhIGhlYWRlciBvciBzaWRlYmFyLiAgSXQgY29udGFpbnMgY29tbW9uIHByb3BlcnRpZXMsIGNvbmZpZ3VyYXRpb24gdG9vbHMsIGFuZCBmdW5jdGlvbnMgdG8gYWRkL2luc2VydCBvdGhlclxyXG4gKiBOYXZDb21wb25lbnRzLlxyXG4gKiBUaGUgY29uZmlnIHByb3BlcnR5IGlzIGFueSBvYmplY3QgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0aGF0IHNwZWNpZmllcyBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBDb21tb25cclxuICogcHJvcGVydGllcyBpbmNsdWRlIGlkLCB0aXRsZSwgcm9vdENsYXNzIGFuZCByb2xlTmFtZS4gIEV4dGVuZGluZyBjbGFzc2VzIG1heSBoYXZlIHRoZWlyIG93biBwcm9wZXJ0aWVzIHN1Y2ggYXMgZXh0cmFcclxuICogY3NzIGNsYXNzZXMuXHJcbiAqL1xyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgICBgXHJcbiAgICAgIGAsXHJcbiAgICBzZWxlY3RvcjogXCJoY2ktbmF2XCJcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIE5hdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBjb25maWc6IGFueSA9IHtcclxuICAgIHJlbmRlcmVkOiB0cnVlXHJcbiAgfTtcclxuICBASW5wdXQoXCJuYXZJZFwiKSBpZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHR5cGU6IFR5cGU8YW55PiB8IHN0cmluZztcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJvb3RDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJvbGVOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXV0aGVudGljYXRlZEtleTogc3RyaW5nID0gXCJBVVRIQ1wiO1xyXG4gIEBJbnB1dCgpIG5vdEF1dGhlbnRpY2F0ZWRLZXk6IHN0cmluZyA9IFwiTk9UX0FVVEhDXCI7XHJcbiAgQElucHV0KFwiY2hpbGRyZW5cIikgaW5wdXRDaGlsZHJlbjogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBpc0NDUjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGFsbCBjb21wb25lbnQgaW5zdGFuY2VzIG9mIGNoaWxkcmVuLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB3ZSB0cnkgdG8gcmVuZGVyIGV2ZXJ5dGhpbmcgaW4gdGhlXHJcbiAgICogY2hpbGRyZW4gYXJyYXkuICBIb3dldmVyLCBpZiByb2xlcyBhcmUgbm90IG1ldCwgc29tZSBjaGlsZHJlbiBtYXkgbm90IGJlIHJlbmRlcmVkIHNvIG5vIGNvbXBvbmVudCBpbnN0YW5jZSB3aWxsXHJcbiAgICogZXhpc3QgZm9yIHRoZW0uXHJcbiAgICovXHJcbiAgY2hpbGRyZW46IE5hdkNvbXBvbmVudFtdID0gW107XHJcblxyXG4gIHR5cGVOYW1lOiBzdHJpbmc7XHJcblxyXG4gIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XHJcbiAgcmVuZGVyZXI6IFJlbmRlcmVyMjtcclxuICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyO1xyXG4gIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZTtcclxuICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWY7XHJcblxyXG4gIGFmdGVyVmlld0luaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBIHNldCBvZiBjb250YWluZXIgbmFtZXMuICBTb21lIGNvbXBvbmVudHMgbWF5IG5vdCBkZWZpbmUgYSBjb250YWluZXIgd2hpbGUgb3RoZXJzIGp1c3QgaGF2ZVxyXG4gICAqIG9uZSAoYSBcImRlZmF1bHRcIiBjb250YWluZXIpLlxyXG4gICAqL1xyXG4gIGNvbnRhaW5lclNldDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBtYXAgb2YgSURzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZpZXdSZWYuICBXaGVuIHdlIGR5bmFtaWNhbGx5IGluamVjdCBhIG5ldyBjb21wb25lbnQsIHdlIGZpcnN0IHB1bGwgdGhlIGNyZWF0ZWRcclxuICAgKiBDb21wb25lbnRSZWYgYW5kIGZyb20gdGhlcmUgaXRzIFZpZXdSZWYuICBXZSBuZWVkIHRoZSBWaWV3UmVmIHRvIGRldGVybWluZSB0aGUgY29tcG9uZW50J3MgcG9zaXRpb24gaW4gdGhlXHJcbiAgICogVmlld0NvbnRhaW5lclJlZi4gIFdpdGggYSBzZXQgb2YgVmlld1JlZnMsIHdlIGNhbiBkZXRhY2ggdGhlbSBmcm9tIHRoZSBjb250YWluZXIgYW5kIHJlLWFkZCB0aGVtIGluIGEgZGlmZmVyZW50IG9yZGVyXHJcbiAgICogYmFzZWQgb24gdGhlIGNvbXBvbmVudCdzIHNvcnRPcmRlciAod2hpY2ggaXMgYmFzZWQgb24gdGhlIHBvc2l0aW9uIGluIHRoZSBjaGlsZHJlbiBhcnJheS4gIFRoaXMgbWFwIHByb3ZpZGVzIHRoZVxyXG4gICAqIGNvbXBvbmVudCB0byB2aWV3IHJlbGF0aW9uc2hpcC5cclxuICAgKi9cclxuICBwcml2YXRlIHZpZXdSZWZNYXA6IE1hcDxzdHJpbmcsIFZpZXdSZWY+ID0gbmV3IE1hcDxzdHJpbmcsIFZpZXdSZWY+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50LiAgV2hlbiBhIGNoaWxkIGlzIGFkZGVkLCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGlzIGF1dG9tYXRpY2FsbHkgc2V0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyZW50OiBOYXZDb21wb25lbnQ7XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XHJcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgICB0aGlzLnJlc29sdmVyID0gcmVzb2x2ZXI7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmF2aWdhdGlvblNlcnZpY2U7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmID0gY2hhbmdlRGV0ZWN0b3JSZWY7XHJcblxyXG4gICAgdGhpcy5jb250YWluZXJTZXQuYWRkKFwiZGVmYXVsdFwiKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNSb290KSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRVc2VyUm9sZXMoKS5zdWJzY3JpYmUoKHVzZXJSb2xlczogUm9sZUVudGl0eVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiVXNlciBSb2xlcyBjaGFuZ2VkLiAgUmVmcmVzaCBjaGlsZHJlbi5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVmcmVzaENoaWxkcmVuKCk7XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50Lm5nQWZ0ZXJWaWV3SW5pdFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFmdGVyVmlld0luaXQgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGVja0luaXRpYWxpemVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBjb25maWcgaXMgYm91bmQgYnkgaW5wdXQsIHJlc2V0IHRoZSBjb25maWcgd2hlbiBpdCBjaGFuZ2VzLiAgQW4gaW1wb3J0YW50IG5vdGUsIGlmIGFueXRoaW5nIGluIHRoZSBjb25maWcgd2FzXHJcbiAgICogdXBkYXRlZCBieSB1cGRhdGVDb25maWcgb25seSwgdGhlbiB0aG9zZSBvcHRpb25zIHdpbGwgYmUgbG9zdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7e1twOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2V9fSBjaGFuZ2VzXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbcHJvcE5hbWU6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIm5nT25DaGFuZ2VzOlwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhjaGFuZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBjaGFuZ2Ugb2YgT2JqZWN0LmtleXMoY2hhbmdlcykpIHtcclxuICAgICAgaWYgKGNoYW5nZSAhPT0gXCJjb25maWdcIikge1xyXG4gICAgICAgIHRoaXNbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2UgPT09IFwiaW5wdXRDaGlsZHJlblwiKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1tcImNoaWxkcmVuXCJdID0gY2hhbmdlc1tjaGFuZ2VdLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb25maWdbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbXCJjb25maWdcIl0pIHtcclxuICAgICAgdGhpcy5zZXRDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzW1wiaWRcIl0pIHtcclxuICAgICAgdGhpcy5zZXRJZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbXCJyb290Q2xhc3NcIl0pIHtcclxuICAgICAgdGhpcy5zZXRSb290Q2xhc3MoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzW1wiaW5wdXRDaGlsZHJlblwiXSkge1xyXG4gICAgICB0aGlzLnNldENoaWxkcmVuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0YWNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0luaXRpYWxpemVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5wb3N0SW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9zdEluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBnZXROYXZpZ2F0aW9uU2VydmljZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFsbCBjaGlsZHJlbi5cclxuICAgKi9cclxuICBjbGVhcigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQuY2xlYXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlKHRoaXMuY2hpbGRyZW5baV0sIGkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICBsZXQgaXNSZW5kZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLnJlbmRlcmVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaXNSZW5kZXJlZCA9IHRoaXMuY29uZmlnLnJlbmRlcmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGNoaWxkcmVuIGFuZCBzZWVzIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIHJlbmRlcmluZyBzdGF0dXMuICBJZiBhIHBlcm1pc3Npb24gZ29lcyBhd2F5LCBhIGNvbXBvbmVudCB0aGF0XHJcbiAgICogaXMgY3VycmVudGx5IHJlbmRlcmVkIG1pZ2h0IG5lZWQgdG8gYmUgcmVtb3ZlZC4gIFJlY3Vyc2l2ZWx5IG1vdmUgdGhyb3VnaCB0aGUgdHJlZSBvZiBjaGlsZHJlbi5cclxuICAgKi9cclxuICByZWZyZXNoQ2hpbGRyZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5jaGlsZHJlbikge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwicmVmcmVzaENoaWxkcmVuOiBcIiArIGkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlbmRlciA9IHRoaXMuY2FuUmVuZGVyKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldKTtcclxuXHJcbiAgICAgICAgbGV0IGlzUmVuZGVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW5baV0ucmVuZGVyZWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgaXNSZW5kZXJlZCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnJlbmRlcmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlbmRlciAmJiAhaXNSZW5kZXJlZCkge1xyXG4gICAgICAgICAgdGhpcy5hZGQodGhpcy5jb25maWcuY2hpbGRyZW5baV0sIGkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXJlbmRlciAmJiBpc1JlbmRlcmVkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZSh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXSwgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVjdXJzaXZlbHkgY2hlY2sgY2hpbGRyZW5cclxuICAgIGZvciAobGV0IGNvbXBvbmVudCBvZiB0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgIGNvbXBvbmVudC5yZWZyZXNoQ2hpbGRyZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvcnRDb250YWluZXJzKCk7XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2luZyB0aGUgc29ydE9yZGVyIHByb3BlcnR5IG9mIGVhY2ggY29tcG9uZW50LCBkZXRhY2ggZWFjaCBWaWV3UmVmIGZyb20gdGhlIGNvbnRhaW5lciwgYW5kIHJlLWF0dGFjaCBiYXNlZFxyXG4gICAqIG9uIHRoZSBzb3J0T3JkZXIuXHJcbiAgICovXHJcbiAgc29ydENvbnRhaW5lcnMoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU29ydCB0aGUgY2hpbGRyZW4uICBJdCBkb2Vzbid0IG1hdHRlciB0aGF0IHRoaXMgbGlzdCBtYXkgY29udGFpbiBjaGlsZHJlbiBpbiBtdWx0aXBsZSBjb250YWluZXJzLlxyXG4gICAgbGV0IHNvcnRlZENoaWxkcmVuID0gdGhpcy5jb25maWcuY2hpbGRyZW4uc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGEuc29ydE9yZGVyIDwgYi5zb3J0T3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYS5zb3J0T3JkZXIgPiBiLnNvcnRPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKGxldCBjb250YWluZXJOYW1lIG9mIHRoaXMuY29udGFpbmVyU2V0KSB7XHJcbiAgICAgIGxldCBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYgPSB0aGlzLmdldENvbnRhaW5lcihjb250YWluZXJOYW1lKTtcclxuXHJcbiAgICAgIGlmICghY29udGFpbmVyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKCFzb3J0ZWRDaGlsZHJlbltpXS5pZCkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzb3J0ZWRDaGlsZHJlbltpXS5jb250YWluZXIgIT09IGNvbnRhaW5lck5hbWUpIHtcclxuICAgICAgICAgIC8vIENoaWxkcmVuIGlzIGEgbGlzdCBwb3NzaWJseSBzcGFubmluZyBtdWx0aXBsZSBjb250YWluZXJzLiAgU2tpcCBpZiBub3Qgb24gdGhlIGN1cnJlbnQgY29udGFpbmVyLlxyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWV3UmVmTWFwLmdldChzb3J0ZWRDaGlsZHJlbltpXS5pZCkpIHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwic29ydENoaWxkcmVuOiBpOiBcIiArIGkgKyBcIiwgaWQ6IFwiICsgc29ydGVkQ2hpbGRyZW5baV0uaWQgKyBcIiwgZGVzdHJveWVkOiBcIiArIHRoaXMudmlld1JlZk1hcC5nZXQoc29ydGVkQ2hpbGRyZW5baV0uaWQpLmRlc3Ryb3llZCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLnZpZXdSZWZNYXAuZ2V0KHNvcnRlZENoaWxkcmVuW2ldLmlkKS5kZXN0cm95ZWQpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLmluc2VydCh0aGlzLnZpZXdSZWZNYXAuZ2V0KHNvcnRlZENoaWxkcmVuW2ldLmlkKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdSZWZNYXAuZGVsZXRlKHNvcnRlZENoaWxkcmVuW2ldLmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIGNvbXBvbmVudCBieSBpZCBmcm9tIGl0cyBwYXJlbnQgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudENvbmZpZ1xyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqL1xyXG4gIHJlbW92ZShjb21wb25lbnRDb25maWc6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5jaGlsZHJlbiB8fCAhdGhpcy5jb25maWcuY2hpbGRyZW5baW5kZXhdKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIk5hdkNvbXBvbmVudDogQ2hpbGQgXCIgKyBpbmRleCArIFwiIGRvZXMgbm90IGV4aXN0IG9uIFwiICsgdGhpcy5jb25maWcuaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQucmVtb3ZlOiBcIiArIGNvbXBvbmVudENvbmZpZy5pZCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHJlbmRlcmVkQ2hpbGQ6IE5hdkNvbXBvbmVudCA9IHRoaXMuZ2V0Q2hpbGQoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuW2ldLmlkKTtcclxuICAgICAgICBpZiAocmVuZGVyZWRDaGlsZCkge1xyXG4gICAgICAgICAgcmVuZGVyZWRDaGlsZC5yZW1vdmUoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuW2ldLCBpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcuY29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnRhaW5lciA9IHRoaXMuZ2V0Q29udGFpbmVyKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGFpbmVyID0gdGhpcy5nZXRDb250YWluZXIoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZpZXdSZWZNYXAuZ2V0KGNvbXBvbmVudENvbmZpZy5pZCkpIHtcclxuICAgICAgY29udGFpbmVyLnJlbW92ZShjb250YWluZXIuaW5kZXhPZih0aGlzLnZpZXdSZWZNYXAuZ2V0KGNvbXBvbmVudENvbmZpZy5pZCkpKTtcclxuICAgICAgdGhpcy52aWV3UmVmTWFwLmRlbGV0ZShjb21wb25lbnRDb25maWcuaWQpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50Q29uZmlnLnJlbmRlcmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpbmRleF0ucmVuZGVyZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNoaWxkKGNvbXBvbmVudENvbmZpZy5pZCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVCeUlkKGlkOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LnJlbW92ZUJ5SWQ6IFwiICsgaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5pZCA9PSBpZCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlKHRoaXMuY2hpbGRyZW5baV0sIGkpO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZW1vdmVCeUlkOiBJRCBcIiArIGlkICsgXCIgbm90IGZvdW5kLlwiKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGNvbXBvbmVudCBjYW4gYmUgcmVuZGVyZWQgYmFzZWQgb24gdXNlciByb2xlcy4gIEEgcm9sZSBjYW4gYmUgYW55IHN0cmluZywgYnV0IHRoZXJlIGFyZSBoYXJkY29kZWRcclxuICAgKiByb2xlcyBOT1RfQVVUSEMgYW5kIEFVVEhDLiAgSWYgbm8gcm9sZU5hbWUgaXMgc3BlY2lmaWVkLCB0aGUgY29tcG9uZW50IGlzIGFsd2F5cyByZW5kZXJlZC4gIElmIHRoZSByb2xlTmFtZSBpc1xyXG4gICAqIE5PVF9BVVRIQywgdGhlIGNvbXBvbmVudCB3aWxsIG9ubHkgYmUgcmVuZGVyZWQgaWYgdGhlcmUgaXMgbm8gYXV0aGVudGljYXRlZCB1c2VyLiAgSWYgdGhlIHJvbGVOYW1lIGlzIEFVVEhDLCB0aGVcclxuICAgKiBjb21wb25lbnQgd2lsbCBiZSByZW5kZXJlZCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLiAgSWYgdGhlIHJvbGVOYW1lIGlzIGFueSBzdHJpbmcgYW5kIG1hdGNoZXMgYSB1c2VyJ3Mgcm9sZSxcclxuICAgKiB0aGVuIHRoZSBjb21wb25lbnQgd2lsbCBiZSByZW5kZXJlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBjYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGxldCByZW5kZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUpIHtcclxuICAgICAgcmVuZGVyID0gZmFsc2U7XHJcbiAgICAgIGxldCB1c2VyUm9sZXM6IFJvbGVFbnRpdHlbXSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0VXNlclJvbGVzKCkuZ2V0VmFsdWUoKTtcclxuXHJcbiAgICAgIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUgPT09IHRoaXMubm90QXV0aGVudGljYXRlZEtleSAmJiAhdXNlclJvbGVzKSB7XHJcbiAgICAgICAgcmVuZGVyID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUgPT09IHRoaXMuYXV0aGVudGljYXRlZEtleSAmJiB1c2VyUm9sZXMpIHtcclxuICAgICAgICByZW5kZXIgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHVzZXJSb2xlcyAmJiB1c2VyUm9sZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlbmRlciA9IHVzZXJSb2xlcy5zb21lKChyb2xlOiBSb2xlRW50aXR5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcm9sZS5Sb2xlTmFtZSA9PT0gY29tcG9uZW50Q29uZmlnLnJvbGVOYW1lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlbmRlcjtcclxuICB9XHJcblxyXG4gIGdldENoaWxkKGlkOiBzdHJpbmcpOiBOYXZDb21wb25lbnQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2hpbGQoaWQ6IHN0cmluZykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBubyBpbmRleCBpcyBzcGVjaWZpZWQsIGFkZCB0aGUgY29tcG9uZW50IHRvIHRoZSBjaGlsZHJlbi4gIEluIGFsbCBjYXNlcywgc2VlIGlmIHRoZSBjb21wb25lbnQgY2FuIGJlIHJlbmRlcmVkLlxyXG4gICAqIElmIHNvLCBjYWxsIGFkZENvbXBvbmVudCB0byBoYW5kbGUgdGhlIGluamVjdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcGFyYW0gaW5kZXhcclxuICAgKi9cclxuICBhZGQoY29tcG9uZW50Q29uZmlnOiBhbnksIGluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIk5hdkNvbXBvbmVudC5hZGQ6IFwiICsgaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcudHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wb25lbnQgbXVzdCBzcGVjaWZ5IGEgJ3R5cGUnIChlLmcuIFVsTmF2Q29tcG9uZW50KS5cIik7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW4pIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbmRleCA9IDA7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4ucHVzaChjb21wb25lbnRDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNhblJlbmRlcihjb21wb25lbnRDb25maWcpKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29tcG9uZW50KGNvbXBvbmVudENvbmZpZywgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5qZWN0cyB0aGUgY29tcG9uZW50IGRlc2NyaWJlZCBieSB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgaW4gdG8gdGhlIHZpZXcgYW5kIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudC5cclxuICAgKiBJZiBubyBjb250YWluZXIgaXMgc3BlY2lmaWVkLCBpbmplY3QgaW4gdG8gdGhlIFwiZGVmYXVsdFwiIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcGFyYW0gaW5kZXhcclxuICAgKi9cclxuICBhZGRDb21wb25lbnQoY29tcG9uZW50Q29uZmlnOiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChjb21wb25lbnRDb25maWcudHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wb25lbnQgbXVzdCBzcGVjaWZ5IGEgJ3R5cGUnIChlLmcuIFVsTmF2Q29tcG9uZW50KS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb21wb25lbnRDb25maWcuY29udGFpbmVyID0gXCJkZWZhdWx0XCI7XHJcbiAgICB9XHJcbiAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmID0gdGhpcy5nZXRDb250YWluZXIoY29tcG9uZW50Q29uZmlnLmNvbnRhaW5lcik7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQuYWRkQ29tcG9uZW50OiB0bzogXCIgKyBjb21wb25lbnRDb25maWcuY29udGFpbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29tcG9uZW50UmVmID0gQ29tcG9uZW50SW5qZWN0b3IuZ2V0Q29tcG9uZW50UmVmKHRoaXMucmVzb2x2ZXIsIGNvbnRhaW5lciwgY29tcG9uZW50Q29uZmlnLnR5cGUpO1xyXG4gICAgbGV0IGNvbXBvbmVudEluc3RhbmNlID0gPE5hdkNvbXBvbmVudD5jb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcblxyXG4gICAgdGhpcy5jb25maWcuY2hpbGRyZW5baW5kZXhdLnJlbmRlcmVkID0gdHJ1ZTtcclxuICAgIGNvbXBvbmVudENvbmZpZy5yZW5kZXJlZCA9IHRydWU7XHJcblxyXG4gICAgbGV0IGlkOiBzdHJpbmcgPSBjb21wb25lbnRDb25maWcuaWQ7XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIGlkID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZE5hdkNvbXBvbmVudCgpO1xyXG4gICAgICBjb21wb25lbnRDb25maWcuaWQgPSBpZDtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRJbnN0YW5jZS5zZXRQYXJlbnQodGhpcyk7XHJcbiAgICAoPE5hdkNvbXBvbmVudD5jb21wb25lbnRJbnN0YW5jZSkuc2V0Q29uZmlnKGNvbXBvbmVudENvbmZpZyk7XHJcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY29tcG9uZW50SW5zdGFuY2UpO1xyXG4gICAgdGhpcy52aWV3UmVmTWFwLnNldChjb21wb25lbnRDb25maWcuaWQsIGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XHJcbiAgICAvL3RoaXMubmF2aWdhdGlvblNlcnZpY2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50Q29uZmlnLmlkLCBjb21wb25lbnRJbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICBpbnNlcnRBZnRlcihpZDogc3RyaW5nLCBjb21wb25lbnRDb25maWc6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy50eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIGluZGV4ID0gaSArIDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5kZXggPD0gdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoIC0gMSkge1xyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnNvcnRPcmRlciA9IHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnNvcnRPcmRlciArIDE7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjb21wb25lbnRDb25maWcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5kZXggPSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgIGNvbXBvbmVudENvbmZpZy5zb3J0T3JkZXIgPSBpbmRleDtcclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4ucHVzaChjb21wb25lbnRDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNhblJlbmRlcihjb21wb25lbnRDb25maWcpKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29tcG9uZW50KGNvbXBvbmVudENvbmZpZywgaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc29ydENvbnRhaW5lcnMoKTtcclxuICB9XHJcblxyXG4gIGluc2VydEJlZm9yZShpZDogc3RyaW5nLCBjb21wb25lbnRDb25maWc6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy50eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmRleCA8PSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW5baV0uc29ydE9yZGVyID0gdGhpcy5jb25maWcuY2hpbGRyZW5baV0uc29ydE9yZGVyICsgMTtcclxuICAgICAgfVxyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY29tcG9uZW50Q29uZmlnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZGV4ID0gdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnB1c2goY29tcG9uZW50Q29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnKSkge1xyXG4gICAgICB0aGlzLmFkZENvbXBvbmVudChjb21wb25lbnRDb25maWcsIGluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvcnRDb250YWluZXJzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNsYXNzZXMuICBUaGlzIGNsYXNzIGFuZCBzb21ldGhpbmcgbGlrZSBhIExpTmF2Q29tcG9uZW50IGRvbid0IGhhdmUgYW55IGNvbnRhaW5lcnNcclxuICAgKiBzbyBjb21wb25lbnRzIGNhbid0IGJlIGFkZGVkIHRvIHRoZW0uICBJbiBvdGhlciBjYXNlcywgdGhlIFVsTmF2Q29tcG9uZW50IGhhcyBhIHNpbmdsZSBjb250YWluZXIgc28gaXQgY2FuIGFsd2F5c1xyXG4gICAqIHJldHVybiB0aGF0IGNvbnRhaW5lciByZWdhcmRsZXNzIG9mIHRoZSBjb250YWluZXJOYW1lIHJlcXVlc3RlZCAoc2hvdWxkIGJlIFwiZGVmYXVsdFwiKS4gIEFueSBjb21wb25lbnQgc2hvdWxkIGhhdmVcclxuICAgKiBhIGNvbnRhaW5lciB0aGF0IGlzIHRoZSBcImRlZmF1bHRcIi4gIEZvciBleGFtcGxlLCBhIGhlYWRlciBjb21wb25lbnQgbWlnaHQgaGF2ZSBhIGNvbnRhaW5lciBmb3IgdGhlIGxlZnQgY29tcG9uZW50c1xyXG4gICAqIGFuZCBhIGNvbnRhaW5lciBmb3IgdGhlIHJpZ2h0IGNvbXBvbmVudHMuICBUaGUgbGVmdCBjb250YWluZXIgY2FuIGp1c3QgYmUgY2FsbGVkIFwiZGVmYXVsdFwiIGFuZCB0aGUgcmlnaHQgY29udGFpbmVyXHJcbiAgICogY291bGQgYmUgY2FsbGVkIFwicmlnaHRDb250YWluZXJcIi4gIElmIGEgY2hpbGQgY29tcG9uZW50IGRvZXNuJ3Qgc3BlY2lmeSBhIGNvbnRhaW5lciwgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb250YWluZXJcclxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gICAqL1xyXG4gIGdldENvbnRhaW5lcihjb250YWluZXI/OiBzdHJpbmcpOiBWaWV3Q29udGFpbmVyUmVmIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnQoaWQ6IHN0cmluZyk6IE5hdkNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDb21wb25lbnQoaWQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50QnlUeXBlKHR5cGU6IHN0cmluZyk6IE5hdkNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDb21wb25lbnRCeVR5cGUodHlwZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UGFyZW50KHBhcmVudDogTmF2Q29tcG9uZW50KSB7XHJcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQYXJlbnQoKTogTmF2Q29tcG9uZW50IHtcclxuICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcoY29uZmlnKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInNldENvbmZpZzogXCIgKyB0aGlzLmluaXRpYWxpemVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGlmIChjb25maWcucmVuZGVyZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbmZpZy5yZW5kZXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWcgPSB7XHJcbiAgICAgICAgcmVuZGVyZWQ6IHRydWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdG8gYmUgZXh0ZW5kZWQgYnkgb3RoZXIgY2xhc3Nlcy4gIFRoZSBjaGlsZHJlbiBzaG91bGQgY2FsbCBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKS4gIFRoaXMgc2V0cyB0aGVcclxuICAgKiBjb21tb24gcHJvcGVydGllcyBvZiB0aGUgTmF2Q29tcG9uZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcclxuICAgIGlmIChjb25maWcudHlwZSkge1xyXG4gICAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnR5cGUpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdGhpcy50eXBlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFRoZSBjb21wb25lbnRUeXBlIGRlY29yYXRvciB3YXMgY3JlYXRlZCBmb3IgdWdsaWZpY2F0aW9uLiBVc2UgaXQhXHJcbiAgICAgIGVsc2UgaWYgKHRoaXMudHlwZVtcImNvbXBvbmVudFR5cGVcIl0pIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdGhpcy50eXBlW1wiY29tcG9uZW50VHlwZVwiXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gKDxUeXBlPGFueT4+dGhpcy50eXBlKS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5pZCkge1xyXG4gICAgICB0aGlzLmlkID0gY29uZmlnLmlkO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pZCkge1xyXG4gICAgICB0aGlzLmlkID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZE5hdkNvbXBvbmVudCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRJZCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzUm9vdCkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnNldFJvb3RDb21wb25lbnQodGhpcy5pZCwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQudXBkYXRlQ29uZmlnOiBcIiArIHRoaXMuaWQgKyBcIjogXCIgKyB0aGlzLmluaXRpYWxpemVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLmF1dGhlbnRpY2F0ZWRLZXkpIHtcclxuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLmF1dGhlbnRpY2F0ZWRLZXk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLm5vdEF1dGhlbnRpY2F0ZWRLZXkpIHtcclxuICAgICAgdGhpcy5ub3RBdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLm5vdEF1dGhlbnRpY2F0ZWRLZXk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnJvbGVOYW1lKSB7XHJcbiAgICAgIHRoaXMucm9sZU5hbWUgPSBjb25maWcucm9sZU5hbWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnRpdGxlKSB7XHJcbiAgICAgIHRoaXMudGl0bGUgPSBjb25maWcudGl0bGU7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnJvb3RDbGFzcykge1xyXG4gICAgICB0aGlzLnJvb3RDbGFzcyA9IGNvbmZpZy5yb290Q2xhc3M7XHJcbiAgICAgIHRoaXMuc2V0Um9vdENsYXNzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLmNoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRDaGlsZHJlbiA9IGNvbmZpZy5jaGlsZHJlbjtcclxuICAgICAgdGhpcy5zZXRDaGlsZHJlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LnVwZGF0ZUNvbmZpZzogXCIgKyAodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKSArIFwiLCBcIiArIHRoaXMuaWQgKyBcIiwgXCIgKyB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMuaWQsIHRoaXMpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiaWRcIiwgdGhpcy5pZCk7XHJcbiAgfVxyXG5cclxuICBzZXRSb290Q2xhc3MoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yb290Q2xhc3MpIHtcclxuICAgICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gdGhpcy5yb290Q2xhc3Muc3BsaXQoXCIgXCIpO1xyXG4gICAgICBmb3IgKGxldCByb290Q2xhc3Mgb2YgY2xhc3Nlcykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHJvb3RDbGFzcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldENoaWxkcmVuKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgPSBpO1xyXG4gICAgICB0aGlzLmFkZCh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXSwgaSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgaWYgKCEoPFZpZXdSZWY+dGhpcy5jaGFuZ2VEZXRlY3RvclJlZikuZGVzdHJveWVkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
609
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25hdmlnYXRpb24vc3JjL2NvbXBvbmVudHMvbmF2LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBU1QsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQUVqRTs7Ozs7OztHQU9HO0FBU0gsTUFBTSxPQUFPLFlBQVk7SUF1RHZCLFlBQVksVUFBc0IsRUFBRSxRQUFtQixFQUFFLFFBQWtDLEVBQUUsaUJBQW9DLEVBQUUsaUJBQW9DO1FBckQ5SixXQUFNLEdBQVE7WUFDckIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRU8sV0FBTSxHQUFZLEtBQUssQ0FBQztRQUt4QixxQkFBZ0IsR0FBVyxPQUFPLENBQUM7UUFDbkMsd0JBQW1CLEdBQVcsV0FBVyxDQUFDO1FBQ2hDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQ3BDLFVBQUssR0FBWSxLQUFLLENBQUM7UUFDaEM7Ozs7V0FJRztRQUNILGFBQVEsR0FBbUIsRUFBRSxDQUFDO1FBVTlCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTdCOzs7V0FHRztRQUNILGlCQUFZLEdBQWdCLElBQUksR0FBRyxFQUFVLENBQUM7UUFFOUM7Ozs7OztXQU1HO1FBQ0ssZUFBVSxHQUF5QixJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQU90RSxrQkFBYSxHQUFpQixJQUFJLFlB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QUFDO1lBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQzsrR0FscEJVLFlBQVk7bUdBQVosWUFBWSxxV0FMbkI7T0FDQzs7NEZBSU0sWUFBWTtrQkFSeEIsU0FBUzttQkFDUjtvQkFDRSxRQUFRLEVBQ047T0FDQztvQkFDSCxRQUFRLEVBQUUsU0FBUztpQkFDcEI7OE1BSVEsTUFBTTtzQkFBZCxLQUFLO2dCQUdVLEVBQUU7c0JBQWpCLEtBQUs7dUJBQUMsT0FBTztnQkFDTCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDYSxhQUFhO3NCQUEvQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1IsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZSxcclxuICBUeXBlLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgVmlld1JlZixcclxuICBPbkluaXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIENvbXBvbmVudFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtSb2xlRW50aXR5fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXNlclwiO1xyXG5pbXBvcnQge0NvbXBvbmVudEluamVjdG9yfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXRpbHNcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgdGhhdCBhbGwgbmF2aWdhdGlvbiBjb21wb25lbnRzIGV4dGVuZCBmcm9tLiAgVGhpcyBpbmNsdWRlcyBvdGhlciBzdGFuZGFsb25lIG1vZHVsZXMgc3VjaFxyXG4gKiBhcyBhIGhlYWRlciBvciBzaWRlYmFyLiAgSXQgY29udGFpbnMgY29tbW9uIHByb3BlcnRpZXMsIGNvbmZpZ3VyYXRpb24gdG9vbHMsIGFuZCBmdW5jdGlvbnMgdG8gYWRkL2luc2VydCBvdGhlclxyXG4gKiBOYXZDb21wb25lbnRzLlxyXG4gKiBUaGUgY29uZmlnIHByb3BlcnR5IGlzIGFueSBvYmplY3QgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0aGF0IHNwZWNpZmllcyBjb25maWd1cmF0aW9uIG9wdGlvbnMuICBDb21tb25cclxuICogcHJvcGVydGllcyBpbmNsdWRlIGlkLCB0aXRsZSwgcm9vdENsYXNzIGFuZCByb2xlTmFtZS4gIEV4dGVuZGluZyBjbGFzc2VzIG1heSBoYXZlIHRoZWlyIG93biBwcm9wZXJ0aWVzIHN1Y2ggYXMgZXh0cmFcclxuICogY3NzIGNsYXNzZXMuXHJcbiAqL1xyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgICBgXHJcbiAgICAgIGAsXHJcbiAgICBzZWxlY3RvcjogXCJoY2ktbmF2XCJcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIE5hdkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBjb25maWc6IGFueSA9IHtcclxuICAgIHJlbmRlcmVkOiB0cnVlXHJcbiAgfTtcclxuICBASW5wdXQoXCJuYXZJZFwiKSBpZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlzUm9vdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHR5cGU6IFR5cGU8YW55PiB8IHN0cmluZztcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJvb3RDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJvbGVOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXV0aGVudGljYXRlZEtleTogc3RyaW5nID0gXCJBVVRIQ1wiO1xyXG4gIEBJbnB1dCgpIG5vdEF1dGhlbnRpY2F0ZWRLZXk6IHN0cmluZyA9IFwiTk9UX0FVVEhDXCI7XHJcbiAgQElucHV0KFwiY2hpbGRyZW5cIikgaW5wdXRDaGlsZHJlbjogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBpc0NDUjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIGFsbCBjb21wb25lbnQgaW5zdGFuY2VzIG9mIGNoaWxkcmVuLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB3ZSB0cnkgdG8gcmVuZGVyIGV2ZXJ5dGhpbmcgaW4gdGhlXHJcbiAgICogY2hpbGRyZW4gYXJyYXkuICBIb3dldmVyLCBpZiByb2xlcyBhcmUgbm90IG1ldCwgc29tZSBjaGlsZHJlbiBtYXkgbm90IGJlIHJlbmRlcmVkIHNvIG5vIGNvbXBvbmVudCBpbnN0YW5jZSB3aWxsXHJcbiAgICogZXhpc3QgZm9yIHRoZW0uXHJcbiAgICovXHJcbiAgY2hpbGRyZW46IE5hdkNvbXBvbmVudFtdID0gW107XHJcblxyXG4gIHR5cGVOYW1lOiBzdHJpbmc7XHJcblxyXG4gIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XHJcbiAgcmVuZGVyZXI6IFJlbmRlcmVyMjtcclxuICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyO1xyXG4gIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZTtcclxuICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWY7XHJcblxyXG4gIGFmdGVyVmlld0luaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBIHNldCBvZiBjb250YWluZXIgbmFtZXMuICBTb21lIGNvbXBvbmVudHMgbWF5IG5vdCBkZWZpbmUgYSBjb250YWluZXIgd2hpbGUgb3RoZXJzIGp1c3QgaGF2ZVxyXG4gICAqIG9uZSAoYSBcImRlZmF1bHRcIiBjb250YWluZXIpLlxyXG4gICAqL1xyXG4gIGNvbnRhaW5lclNldDogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBtYXAgb2YgSURzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZpZXdSZWYuICBXaGVuIHdlIGR5bmFtaWNhbGx5IGluamVjdCBhIG5ldyBjb21wb25lbnQsIHdlIGZpcnN0IHB1bGwgdGhlIGNyZWF0ZWRcclxuICAgKiBDb21wb25lbnRSZWYgYW5kIGZyb20gdGhlcmUgaXRzIFZpZXdSZWYuICBXZSBuZWVkIHRoZSBWaWV3UmVmIHRvIGRldGVybWluZSB0aGUgY29tcG9uZW50J3MgcG9zaXRpb24gaW4gdGhlXHJcbiAgICogVmlld0NvbnRhaW5lclJlZi4gIFdpdGggYSBzZXQgb2YgVmlld1JlZnMsIHdlIGNhbiBkZXRhY2ggdGhlbSBmcm9tIHRoZSBjb250YWluZXIgYW5kIHJlLWFkZCB0aGVtIGluIGEgZGlmZmVyZW50IG9yZGVyXHJcbiAgICogYmFzZWQgb24gdGhlIGNvbXBvbmVudCdzIHNvcnRPcmRlciAod2hpY2ggaXMgYmFzZWQgb24gdGhlIHBvc2l0aW9uIGluIHRoZSBjaGlsZHJlbiBhcnJheS4gIFRoaXMgbWFwIHByb3ZpZGVzIHRoZVxyXG4gICAqIGNvbXBvbmVudCB0byB2aWV3IHJlbGF0aW9uc2hpcC5cclxuICAgKi9cclxuICBwcml2YXRlIHZpZXdSZWZNYXA6IE1hcDxzdHJpbmcsIFZpZXdSZWY+ID0gbmV3IE1hcDxzdHJpbmcsIFZpZXdSZWY+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50LiAgV2hlbiBhIGNoaWxkIGlzIGFkZGVkLCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGlzIGF1dG9tYXRpY2FsbHkgc2V0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyZW50OiBOYXZDb21wb25lbnQ7XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XHJcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgICB0aGlzLnJlc29sdmVyID0gcmVzb2x2ZXI7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmF2aWdhdGlvblNlcnZpY2U7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmID0gY2hhbmdlRGV0ZWN0b3JSZWY7XHJcblxyXG4gICAgdGhpcy5jb250YWluZXJTZXQuYWRkKFwiZGVmYXVsdFwiKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNSb290KSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRVc2VyUm9sZXMoKS5zdWJzY3JpYmUoKHVzZXJSb2xlczogUm9sZUVudGl0eVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiVXNlciBSb2xlcyBjaGFuZ2VkLiAgUmVmcmVzaCBjaGlsZHJlbi5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVmcmVzaENoaWxkcmVuKCk7XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50Lm5nQWZ0ZXJWaWV3SW5pdFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFmdGVyVmlld0luaXQgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGVja0luaXRpYWxpemVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBjb25maWcgaXMgYm91bmQgYnkgaW5wdXQsIHJlc2V0IHRoZSBjb25maWcgd2hlbiBpdCBjaGFuZ2VzLiAgQW4gaW1wb3J0YW50IG5vdGUsIGlmIGFueXRoaW5nIGluIHRoZSBjb25maWcgd2FzXHJcbiAgICogdXBkYXRlZCBieSB1cGRhdGVDb25maWcgb25seSwgdGhlbiB0aG9zZSBvcHRpb25zIHdpbGwgYmUgbG9zdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7e1twOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2V9fSBjaGFuZ2VzXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbcHJvcE5hbWU6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIm5nT25DaGFuZ2VzOlwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhjaGFuZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBjaGFuZ2Ugb2YgT2JqZWN0LmtleXMoY2hhbmdlcykpIHtcclxuICAgICAgaWYgKGNoYW5nZSAhPT0gXCJjb25maWdcIikge1xyXG4gICAgICAgIHRoaXNbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2UgPT09IFwiaW5wdXRDaGlsZHJlblwiKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1tcImNoaWxkcmVuXCJdID0gY2hhbmdlc1tjaGFuZ2VdLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb25maWdbY2hhbmdlXSA9IGNoYW5nZXNbY2hhbmdlXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbXCJjb25maWdcIl0pIHtcclxuICAgICAgdGhpcy5zZXRDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzW1wiaWRcIl0pIHtcclxuICAgICAgdGhpcy5zZXRJZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbXCJyb290Q2xhc3NcIl0pIHtcclxuICAgICAgdGhpcy5zZXRSb290Q2xhc3MoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzW1wiaW5wdXRDaGlsZHJlblwiXSkge1xyXG4gICAgICB0aGlzLnNldENoaWxkcmVuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0YWNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0luaXRpYWxpemVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5wb3N0SW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9zdEluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBnZXROYXZpZ2F0aW9uU2VydmljZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFsbCBjaGlsZHJlbi5cclxuICAgKi9cclxuICBjbGVhcigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQuY2xlYXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlKHRoaXMuY2hpbGRyZW5baV0sIGkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICBsZXQgaXNSZW5kZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLnJlbmRlcmVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaXNSZW5kZXJlZCA9IHRoaXMuY29uZmlnLnJlbmRlcmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGNoaWxkcmVuIGFuZCBzZWVzIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIHJlbmRlcmluZyBzdGF0dXMuICBJZiBhIHBlcm1pc3Npb24gZ29lcyBhd2F5LCBhIGNvbXBvbmVudCB0aGF0XHJcbiAgICogaXMgY3VycmVudGx5IHJlbmRlcmVkIG1pZ2h0IG5lZWQgdG8gYmUgcmVtb3ZlZC4gIFJlY3Vyc2l2ZWx5IG1vdmUgdGhyb3VnaCB0aGUgdHJlZSBvZiBjaGlsZHJlbi5cclxuICAgKi9cclxuICByZWZyZXNoQ2hpbGRyZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5jaGlsZHJlbikge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwicmVmcmVzaENoaWxkcmVuOiBcIiArIGkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlbmRlciA9IHRoaXMuY2FuUmVuZGVyKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldKTtcclxuXHJcbiAgICAgICAgbGV0IGlzUmVuZGVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW5baV0ucmVuZGVyZWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgaXNSZW5kZXJlZCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnJlbmRlcmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlbmRlciAmJiAhaXNSZW5kZXJlZCkge1xyXG4gICAgICAgICAgdGhpcy5hZGQodGhpcy5jb25maWcuY2hpbGRyZW5baV0sIGkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXJlbmRlciAmJiBpc1JlbmRlcmVkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZSh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXSwgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVjdXJzaXZlbHkgY2hlY2sgY2hpbGRyZW5cclxuICAgIGZvciAobGV0IGNvbXBvbmVudCBvZiB0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgIGNvbXBvbmVudC5yZWZyZXNoQ2hpbGRyZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvcnRDb250YWluZXJzKCk7XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2luZyB0aGUgc29ydE9yZGVyIHByb3BlcnR5IG9mIGVhY2ggY29tcG9uZW50LCBkZXRhY2ggZWFjaCBWaWV3UmVmIGZyb20gdGhlIGNvbnRhaW5lciwgYW5kIHJlLWF0dGFjaCBiYXNlZFxyXG4gICAqIG9uIHRoZSBzb3J0T3JkZXIuXHJcbiAgICovXHJcbiAgc29ydENvbnRhaW5lcnMoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU29ydCB0aGUgY2hpbGRyZW4uICBJdCBkb2Vzbid0IG1hdHRlciB0aGF0IHRoaXMgbGlzdCBtYXkgY29udGFpbiBjaGlsZHJlbiBpbiBtdWx0aXBsZSBjb250YWluZXJzLlxyXG4gICAgbGV0IHNvcnRlZENoaWxkcmVuID0gdGhpcy5jb25maWcuY2hpbGRyZW4uc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGEuc29ydE9yZGVyIDwgYi5zb3J0T3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH0gZWxzZSBpZiAoYS5zb3J0T3JkZXIgPiBiLnNvcnRPcmRlcikge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKGxldCBjb250YWluZXJOYW1lIG9mIHRoaXMuY29udGFpbmVyU2V0KSB7XHJcbiAgICAgIGxldCBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYgPSB0aGlzLmdldENvbnRhaW5lcihjb250YWluZXJOYW1lKTtcclxuXHJcbiAgICAgIGlmICghY29udGFpbmVyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKCFzb3J0ZWRDaGlsZHJlbltpXS5pZCkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzb3J0ZWRDaGlsZHJlbltpXS5jb250YWluZXIgIT09IGNvbnRhaW5lck5hbWUpIHtcclxuICAgICAgICAgIC8vIENoaWxkcmVuIGlzIGEgbGlzdCBwb3NzaWJseSBzcGFubmluZyBtdWx0aXBsZSBjb250YWluZXJzLiAgU2tpcCBpZiBub3Qgb24gdGhlIGN1cnJlbnQgY29udGFpbmVyLlxyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWV3UmVmTWFwLmdldChzb3J0ZWRDaGlsZHJlbltpXS5pZCkpIHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwic29ydENoaWxkcmVuOiBpOiBcIiArIGkgKyBcIiwgaWQ6IFwiICsgc29ydGVkQ2hpbGRyZW5baV0uaWQgKyBcIiwgZGVzdHJveWVkOiBcIiArIHRoaXMudmlld1JlZk1hcC5nZXQoc29ydGVkQ2hpbGRyZW5baV0uaWQpLmRlc3Ryb3llZCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLnZpZXdSZWZNYXAuZ2V0KHNvcnRlZENoaWxkcmVuW2ldLmlkKS5kZXN0cm95ZWQpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLmluc2VydCh0aGlzLnZpZXdSZWZNYXAuZ2V0KHNvcnRlZENoaWxkcmVuW2ldLmlkKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdSZWZNYXAuZGVsZXRlKHNvcnRlZENoaWxkcmVuW2ldLmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIGNvbXBvbmVudCBieSBpZCBmcm9tIGl0cyBwYXJlbnQgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudENvbmZpZ1xyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqL1xyXG4gIHJlbW92ZShjb21wb25lbnRDb25maWc6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5jaGlsZHJlbiB8fCAhdGhpcy5jb25maWcuY2hpbGRyZW5baW5kZXhdKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIk5hdkNvbXBvbmVudDogQ2hpbGQgXCIgKyBpbmRleCArIFwiIGRvZXMgbm90IGV4aXN0IG9uIFwiICsgdGhpcy5jb25maWcuaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQucmVtb3ZlOiBcIiArIGNvbXBvbmVudENvbmZpZy5pZCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHJlbmRlcmVkQ2hpbGQ6IE5hdkNvbXBvbmVudCA9IHRoaXMuZ2V0Q2hpbGQoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuW2ldLmlkKTtcclxuICAgICAgICBpZiAocmVuZGVyZWRDaGlsZCkge1xyXG4gICAgICAgICAgcmVuZGVyZWRDaGlsZC5yZW1vdmUoY29tcG9uZW50Q29uZmlnLmNoaWxkcmVuW2ldLCBpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcuY29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnRhaW5lciA9IHRoaXMuZ2V0Q29udGFpbmVyKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29udGFpbmVyID0gdGhpcy5nZXRDb250YWluZXIoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZpZXdSZWZNYXAuZ2V0KGNvbXBvbmVudENvbmZpZy5pZCkpIHtcclxuICAgICAgY29udGFpbmVyLnJlbW92ZShjb250YWluZXIuaW5kZXhPZih0aGlzLnZpZXdSZWZNYXAuZ2V0KGNvbXBvbmVudENvbmZpZy5pZCkpKTtcclxuICAgICAgdGhpcy52aWV3UmVmTWFwLmRlbGV0ZShjb21wb25lbnRDb25maWcuaWQpO1xyXG4gICAgfVxyXG4gICAgY29tcG9uZW50Q29uZmlnLnJlbmRlcmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpbmRleF0ucmVuZGVyZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNoaWxkKGNvbXBvbmVudENvbmZpZy5pZCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVCeUlkKGlkOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LnJlbW92ZUJ5SWQ6IFwiICsgaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZHJlbltpXS5pZCA9PSBpZCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlKHRoaXMuY2hpbGRyZW5baV0sIGkpO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZW1vdmVCeUlkOiBJRCBcIiArIGlkICsgXCIgbm90IGZvdW5kLlwiKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGNvbXBvbmVudCBjYW4gYmUgcmVuZGVyZWQgYmFzZWQgb24gdXNlciByb2xlcy4gIEEgcm9sZSBjYW4gYmUgYW55IHN0cmluZywgYnV0IHRoZXJlIGFyZSBoYXJkY29kZWRcclxuICAgKiByb2xlcyBOT1RfQVVUSEMgYW5kIEFVVEhDLiAgSWYgbm8gcm9sZU5hbWUgaXMgc3BlY2lmaWVkLCB0aGUgY29tcG9uZW50IGlzIGFsd2F5cyByZW5kZXJlZC4gIElmIHRoZSByb2xlTmFtZSBpc1xyXG4gICAqIE5PVF9BVVRIQywgdGhlIGNvbXBvbmVudCB3aWxsIG9ubHkgYmUgcmVuZGVyZWQgaWYgdGhlcmUgaXMgbm8gYXV0aGVudGljYXRlZCB1c2VyLiAgSWYgdGhlIHJvbGVOYW1lIGlzIEFVVEhDLCB0aGVcclxuICAgKiBjb21wb25lbnQgd2lsbCBiZSByZW5kZXJlZCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLiAgSWYgdGhlIHJvbGVOYW1lIGlzIGFueSBzdHJpbmcgYW5kIG1hdGNoZXMgYSB1c2VyJ3Mgcm9sZSxcclxuICAgKiB0aGVuIHRoZSBjb21wb25lbnQgd2lsbCBiZSByZW5kZXJlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBjYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGxldCByZW5kZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUpIHtcclxuICAgICAgcmVuZGVyID0gZmFsc2U7XHJcbiAgICAgIGxldCB1c2VyUm9sZXM6IFJvbGVFbnRpdHlbXSA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0VXNlclJvbGVzKCkuZ2V0VmFsdWUoKTtcclxuXHJcbiAgICAgIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUgPT09IHRoaXMubm90QXV0aGVudGljYXRlZEtleSAmJiAhdXNlclJvbGVzKSB7XHJcbiAgICAgICAgcmVuZGVyID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjb21wb25lbnRDb25maWcucm9sZU5hbWUgPT09IHRoaXMuYXV0aGVudGljYXRlZEtleSAmJiB1c2VyUm9sZXMpIHtcclxuICAgICAgICByZW5kZXIgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHVzZXJSb2xlcyAmJiB1c2VyUm9sZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlbmRlciA9IHVzZXJSb2xlcy5zb21lKChyb2xlOiBSb2xlRW50aXR5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcm9sZS5Sb2xlTmFtZSA9PT0gY29tcG9uZW50Q29uZmlnLnJvbGVOYW1lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlbmRlcjtcclxuICB9XHJcblxyXG4gIGdldENoaWxkKGlkOiBzdHJpbmcpOiBOYXZDb21wb25lbnQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2hpbGQoaWQ6IHN0cmluZykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBubyBpbmRleCBpcyBzcGVjaWZpZWQsIGFkZCB0aGUgY29tcG9uZW50IHRvIHRoZSBjaGlsZHJlbi4gIEluIGFsbCBjYXNlcywgc2VlIGlmIHRoZSBjb21wb25lbnQgY2FuIGJlIHJlbmRlcmVkLlxyXG4gICAqIElmIHNvLCBjYWxsIGFkZENvbXBvbmVudCB0byBoYW5kbGUgdGhlIGluamVjdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcGFyYW0gaW5kZXhcclxuICAgKi9cclxuICBhZGQoY29tcG9uZW50Q29uZmlnOiBhbnksIGluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIk5hdkNvbXBvbmVudC5hZGQ6IFwiICsgaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21wb25lbnRDb25maWcudHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wb25lbnQgbXVzdCBzcGVjaWZ5IGEgJ3R5cGUnIChlLmcuIFVsTmF2Q29tcG9uZW50KS5cIik7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5jb25maWcuY2hpbGRyZW4pIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbmRleCA9IDA7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4ucHVzaChjb21wb25lbnRDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNhblJlbmRlcihjb21wb25lbnRDb25maWcpKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29tcG9uZW50KGNvbXBvbmVudENvbmZpZywgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5qZWN0cyB0aGUgY29tcG9uZW50IGRlc2NyaWJlZCBieSB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgaW4gdG8gdGhlIHZpZXcgYW5kIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudC5cclxuICAgKiBJZiBubyBjb250YWluZXIgaXMgc3BlY2lmaWVkLCBpbmplY3QgaW4gdG8gdGhlIFwiZGVmYXVsdFwiIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRDb25maWdcclxuICAgKiBAcGFyYW0gaW5kZXhcclxuICAgKi9cclxuICBhZGRDb21wb25lbnQoY29tcG9uZW50Q29uZmlnOiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChjb21wb25lbnRDb25maWcudHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wb25lbnQgbXVzdCBzcGVjaWZ5IGEgJ3R5cGUnIChlLmcuIFVsTmF2Q29tcG9uZW50KS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy5jb250YWluZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb21wb25lbnRDb25maWcuY29udGFpbmVyID0gXCJkZWZhdWx0XCI7XHJcbiAgICB9XHJcbiAgICBsZXQgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmID0gdGhpcy5nZXRDb250YWluZXIoY29tcG9uZW50Q29uZmlnLmNvbnRhaW5lcik7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQuYWRkQ29tcG9uZW50OiB0bzogXCIgKyBjb21wb25lbnRDb25maWcuY29udGFpbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29tcG9uZW50UmVmID0gQ29tcG9uZW50SW5qZWN0b3IuZ2V0Q29tcG9uZW50UmVmKHRoaXMucmVzb2x2ZXIsIGNvbnRhaW5lciwgY29tcG9uZW50Q29uZmlnLnR5cGUpO1xyXG4gICAgbGV0IGNvbXBvbmVudEluc3RhbmNlID0gPE5hdkNvbXBvbmVudD5jb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcblxyXG4gICAgdGhpcy5jb25maWcuY2hpbGRyZW5baW5kZXhdLnJlbmRlcmVkID0gdHJ1ZTtcclxuICAgIGNvbXBvbmVudENvbmZpZy5yZW5kZXJlZCA9IHRydWU7XHJcblxyXG4gICAgbGV0IGlkOiBzdHJpbmcgPSBjb21wb25lbnRDb25maWcuaWQ7XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIGlkID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZE5hdkNvbXBvbmVudCgpO1xyXG4gICAgICBjb21wb25lbnRDb25maWcuaWQgPSBpZDtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRJbnN0YW5jZS5zZXRQYXJlbnQodGhpcyk7XHJcbiAgICAoPE5hdkNvbXBvbmVudD5jb21wb25lbnRJbnN0YW5jZSkuc2V0Q29uZmlnKGNvbXBvbmVudENvbmZpZyk7XHJcbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY29tcG9uZW50SW5zdGFuY2UpO1xyXG4gICAgdGhpcy52aWV3UmVmTWFwLnNldChjb21wb25lbnRDb25maWcuaWQsIGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XHJcbiAgICAvL3RoaXMubmF2aWdhdGlvblNlcnZpY2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50Q29uZmlnLmlkLCBjb21wb25lbnRJbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICBpbnNlcnRBZnRlcihpZDogc3RyaW5nLCBjb21wb25lbnRDb25maWc6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy50eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIGluZGV4ID0gaSArIDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5kZXggPD0gdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoIC0gMSkge1xyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnNvcnRPcmRlciA9IHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLnNvcnRPcmRlciArIDE7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjb21wb25lbnRDb25maWcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5kZXggPSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgIGNvbXBvbmVudENvbmZpZy5zb3J0T3JkZXIgPSBpbmRleDtcclxuICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW4ucHVzaChjb21wb25lbnRDb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNhblJlbmRlcihjb21wb25lbnRDb25maWcpKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29tcG9uZW50KGNvbXBvbmVudENvbmZpZywgaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc29ydENvbnRhaW5lcnMoKTtcclxuICB9XHJcblxyXG4gIGluc2VydEJlZm9yZShpZDogc3RyaW5nLCBjb21wb25lbnRDb25maWc6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudENvbmZpZy50eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbXBvbmVudCBtdXN0IHNwZWNpZnkgYSAndHlwZScgKGUuZy4gVWxOYXZDb21wb25lbnQpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoaWxkcmVuW2ldLmlkID09PSBpZCkge1xyXG4gICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbmRleCA8PSB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHRoaXMuY29uZmlnLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY2hpbGRyZW5baV0uc29ydE9yZGVyID0gdGhpcy5jb25maWcuY2hpbGRyZW5baV0uc29ydE9yZGVyICsgMTtcclxuICAgICAgfVxyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY29tcG9uZW50Q29uZmlnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZGV4ID0gdGhpcy5jb25maWcuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICBjb21wb25lbnRDb25maWcuc29ydE9yZGVyID0gaW5kZXg7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNoaWxkcmVuLnB1c2goY29tcG9uZW50Q29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jYW5SZW5kZXIoY29tcG9uZW50Q29uZmlnKSkge1xyXG4gICAgICB0aGlzLmFkZENvbXBvbmVudChjb21wb25lbnRDb25maWcsIGluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNvcnRDb250YWluZXJzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRvIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNsYXNzZXMuICBUaGlzIGNsYXNzIGFuZCBzb21ldGhpbmcgbGlrZSBhIExpTmF2Q29tcG9uZW50IGRvbid0IGhhdmUgYW55IGNvbnRhaW5lcnNcclxuICAgKiBzbyBjb21wb25lbnRzIGNhbid0IGJlIGFkZGVkIHRvIHRoZW0uICBJbiBvdGhlciBjYXNlcywgdGhlIFVsTmF2Q29tcG9uZW50IGhhcyBhIHNpbmdsZSBjb250YWluZXIgc28gaXQgY2FuIGFsd2F5c1xyXG4gICAqIHJldHVybiB0aGF0IGNvbnRhaW5lciByZWdhcmRsZXNzIG9mIHRoZSBjb250YWluZXJOYW1lIHJlcXVlc3RlZCAoc2hvdWxkIGJlIFwiZGVmYXVsdFwiKS4gIEFueSBjb21wb25lbnQgc2hvdWxkIGhhdmVcclxuICAgKiBhIGNvbnRhaW5lciB0aGF0IGlzIHRoZSBcImRlZmF1bHRcIi4gIEZvciBleGFtcGxlLCBhIGhlYWRlciBjb21wb25lbnQgbWlnaHQgaGF2ZSBhIGNvbnRhaW5lciBmb3IgdGhlIGxlZnQgY29tcG9uZW50c1xyXG4gICAqIGFuZCBhIGNvbnRhaW5lciBmb3IgdGhlIHJpZ2h0IGNvbXBvbmVudHMuICBUaGUgbGVmdCBjb250YWluZXIgY2FuIGp1c3QgYmUgY2FsbGVkIFwiZGVmYXVsdFwiIGFuZCB0aGUgcmlnaHQgY29udGFpbmVyXHJcbiAgICogY291bGQgYmUgY2FsbGVkIFwicmlnaHRDb250YWluZXJcIi4gIElmIGEgY2hpbGQgY29tcG9uZW50IGRvZXNuJ3Qgc3BlY2lmeSBhIGNvbnRhaW5lciwgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb250YWluZXJcclxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gICAqL1xyXG4gIGdldENvbnRhaW5lcihjb250YWluZXI/OiBzdHJpbmcpOiBWaWV3Q29udGFpbmVyUmVmIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnQoaWQ6IHN0cmluZyk6IE5hdkNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDb21wb25lbnQoaWQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50QnlUeXBlKHR5cGU6IHN0cmluZyk6IE5hdkNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDb21wb25lbnRCeVR5cGUodHlwZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UGFyZW50KHBhcmVudDogTmF2Q29tcG9uZW50KSB7XHJcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQYXJlbnQoKTogTmF2Q29tcG9uZW50IHtcclxuICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcoY29uZmlnKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInNldENvbmZpZzogXCIgKyB0aGlzLmluaXRpYWxpemVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGlmIChjb25maWcucmVuZGVyZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbmZpZy5yZW5kZXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWcgPSB7XHJcbiAgICAgICAgcmVuZGVyZWQ6IHRydWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdG8gYmUgZXh0ZW5kZWQgYnkgb3RoZXIgY2xhc3Nlcy4gIFRoZSBjaGlsZHJlbiBzaG91bGQgY2FsbCBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKS4gIFRoaXMgc2V0cyB0aGVcclxuICAgKiBjb21tb24gcHJvcGVydGllcyBvZiB0aGUgTmF2Q29tcG9uZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcclxuICAgIGlmIChjb25maWcudHlwZSkge1xyXG4gICAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnR5cGUpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdGhpcy50eXBlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFRoZSBjb21wb25lbnRUeXBlIGRlY29yYXRvciB3YXMgY3JlYXRlZCBmb3IgdWdsaWZpY2F0aW9uLiBVc2UgaXQhXHJcbiAgICAgIGVsc2UgaWYgKHRoaXMudHlwZVtcImNvbXBvbmVudFR5cGVcIl0pIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gdGhpcy50eXBlW1wiY29tcG9uZW50VHlwZVwiXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnR5cGVOYW1lID0gKDxUeXBlPGFueT4+dGhpcy50eXBlKS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5pZCkge1xyXG4gICAgICB0aGlzLmlkID0gY29uZmlnLmlkO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pZCkge1xyXG4gICAgICB0aGlzLmlkID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZE5hdkNvbXBvbmVudCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRJZCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzUm9vdCkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnNldFJvb3RDb21wb25lbnQodGhpcy5pZCwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJOYXZDb21wb25lbnQudXBkYXRlQ29uZmlnOiBcIiArIHRoaXMuaWQgKyBcIjogXCIgKyB0aGlzLmluaXRpYWxpemVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLmF1dGhlbnRpY2F0ZWRLZXkpIHtcclxuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLmF1dGhlbnRpY2F0ZWRLZXk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLm5vdEF1dGhlbnRpY2F0ZWRLZXkpIHtcclxuICAgICAgdGhpcy5ub3RBdXRoZW50aWNhdGVkS2V5ID0gY29uZmlnLm5vdEF1dGhlbnRpY2F0ZWRLZXk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnJvbGVOYW1lKSB7XHJcbiAgICAgIHRoaXMucm9sZU5hbWUgPSBjb25maWcucm9sZU5hbWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnRpdGxlKSB7XHJcbiAgICAgIHRoaXMudGl0bGUgPSBjb25maWcudGl0bGU7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLnJvb3RDbGFzcykge1xyXG4gICAgICB0aGlzLnJvb3RDbGFzcyA9IGNvbmZpZy5yb290Q2xhc3M7XHJcbiAgICAgIHRoaXMuc2V0Um9vdENsYXNzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlnLmNoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRDaGlsZHJlbiA9IGNvbmZpZy5jaGlsZHJlbjtcclxuICAgICAgdGhpcy5zZXRDaGlsZHJlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiTmF2Q29tcG9uZW50LnVwZGF0ZUNvbmZpZzogXCIgKyAodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKSArIFwiLCBcIiArIHRoaXMuaWQgKyBcIiwgXCIgKyB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMuaWQsIHRoaXMpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiaWRcIiwgdGhpcy5pZCk7XHJcbiAgfVxyXG5cclxuICBzZXRSb290Q2xhc3MoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yb290Q2xhc3MpIHtcclxuICAgICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gdGhpcy5yb290Q2xhc3Muc3BsaXQoXCIgXCIpO1xyXG4gICAgICBmb3IgKGxldCByb290Q2xhc3Mgb2YgY2xhc3Nlcykge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHJvb3RDbGFzcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldENoaWxkcmVuKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmNvbmZpZy5jaGlsZHJlbltpXS5zb3J0T3JkZXIgPSBpO1xyXG4gICAgICB0aGlzLmFkZCh0aGlzLmNvbmZpZy5jaGlsZHJlbltpXSwgaSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgaWYgKCEoPFZpZXdSZWY+dGhpcy5jaGFuZ2VEZXRlY3RvclJlZikuZGVzdHJveWVkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|