@talrace/ngx-noder 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +7 -1
- package/esm2022/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.mjs +2 -2
- package/esm2022/lib/editor/content/helpers/link.helper.mjs +6 -0
- package/esm2022/lib/editor/display/layers/text.layer.mjs +7 -8
- package/esm2022/lib/editor/execution/edit.session.mjs +18 -5
- package/esm2022/lib/editor/execution/editor.mjs +4 -3
- package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +42 -1
- package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +38 -20
- package/esm2022/lib/editor/operations/operations-helper.helper.mjs +16 -8
- package/esm2022/lib/models/generated/link.model.mjs +1 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/talrace-ngx-noder.mjs +139 -51
- package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
- package/lib/editor/content/helpers/link.helper.d.ts +4 -0
- package/lib/editor/display/layers/text.layer.d.ts +1 -1
- package/lib/editor/execution/edit.session.d.ts +1 -0
- package/lib/editor/execution/helpers/format-style.helper.d.ts +2 -0
- package/lib/editor/operations/helpers/link-operations.helper.d.ts +2 -1
- package/lib/models/generated/link.model.d.ts +3 -1
- package/package.json +8 -8
- package/public-api.d.ts +1 -0
- package/src/styles.scss +0 -1
- package/src/scss/_fonts.scss +0 -3
|
@@ -40,9 +40,15 @@ export class AddLinkDialogComponent {
|
|
|
40
40
|
if (this.form.invalid) {
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
|
+
if (this.form.controls.text.value) {
|
|
44
|
+
this.form.controls.text.setValue(this.form.controls.text.value.trim());
|
|
45
|
+
}
|
|
43
46
|
if (!this.form.controls.text.value) {
|
|
44
47
|
this.form.controls.text.setValue(this.form.controls.link.value);
|
|
45
48
|
}
|
|
49
|
+
if (!this.form.controls.link.value.startsWith('http')) {
|
|
50
|
+
this.form.controls.link.setValue('http://' + this.form.controls.link.value);
|
|
51
|
+
}
|
|
46
52
|
this.dialogRef.close({ text: this.form.controls.text.value, link: this.form.controls.link.value });
|
|
47
53
|
}
|
|
48
54
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddLinkDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -64,4 +70,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
64
70
|
type: HostListener,
|
|
65
71
|
args: ['keydown.enter']
|
|
66
72
|
}] } });
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWxpbmstZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2FwYXJ0LWNvbXBvbmVudHMvYWRkLWxpbmstZGlhbG9nL2FkZC1saW5rLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9hcGFydC1jb21wb25lbnRzL2FkZC1saW5rLWRpYWxvZy9hZGQtbGluay1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF1QyxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBZ0IsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7QUFFdkQsTUFBTSxPQUFPLG9CQUFvQjtJQU83QixZQUFtQixNQUFzQztRQUNyRCxJQUFJLE1BQU0sRUFBRTtZQUNSLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQy9C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dGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dNb2R1bGUsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcblxuaW1wb3J0IHsgVmFsaWRhdGlvbkhlbHBlciB9IGZyb20gJy4vdmFsaWRhdGlvbi5oZWxwZXInO1xuXG5leHBvcnQgY2xhc3MgQWRkTGlua0RpYWxvZ09wdGlvbnMge1xuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICAgIHB1YmxpYyB0ZXh0OiBzdHJpbmc7XG4gICAgcHVibGljIHRleHRQbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIHB1YmxpYyBsaW5rOiBzdHJpbmc7XG4gICAgcHVibGljIGxpbmtQbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZpZWxkcz86IFBhcnRpYWw8QWRkTGlua0RpYWxvZ09wdGlvbnM+KSB7XG4gICAgICAgIGlmIChmaWVsZHMpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgZmllbGRzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdERpYWxvZ01vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gICAgc2VsZWN0b3I6ICdhcHAtbm9kLWFkZC1saW5rLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICdhZGQtbGluay1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydhZGQtbGluay1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBZGRMaW5rRGlhbG9nQ29tcG9uZW50IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5vZGVyLW1vZGFsJykgbW9kYWwgPSB0cnVlO1xuXG4gICAgZm9ybTogRm9ybUdyb3VwPHsgdGV4dDogRm9ybUNvbnRyb2w8c3RyaW5nPjsgbGluazogRm9ybUNvbnRyb2w8c3RyaW5nPiB9PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QWRkTGlua0RpYWxvZ0NvbXBvbmVudD4sXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogQWRkTGlua0RpYWxvZ09wdGlvbnMsXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXG4gICAgKSB7XG4gICAgICAgIGRpYWxvZ1JlZi5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIHRleHQ6IFtkYXRhLnRleHRdLFxuICAgICAgICAgICAgbGluazogW2RhdGEubGluaywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRpb25IZWxwZXIudXJsVmFsaWRhdG9yXV1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lc2MnKVxuICAgIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lbnRlcicpXG4gICAgb25BcHBseSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzLnRleHQudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy50ZXh0LnNldFZhbHVlKHRoaXMuZm9ybS5jb250cm9scy50ZXh0LnZhbHVlLnRyaW0oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5jb250cm9scy50ZXh0LnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMudGV4dC5zZXRWYWx1ZSh0aGlzLmZvcm0uY29udHJvbHMubGluay52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZm9ybS5jb250cm9scy5saW5rLnZhbHVlLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmxpbmsuc2V0VmFsdWUoJ2h0dHA6Ly8nICsgdGhpcy5mb3JtLmNvbnRyb2xzLmxpbmsudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoeyB0ZXh0OiB0aGlzLmZvcm0uY29udHJvbHMudGV4dC52YWx1ZSwgbGluazogdGhpcy5mb3JtLmNvbnRyb2xzLmxpbmsudmFsdWUgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBtYXQtZGlhbG9nLXRpdGxlPnt7IGRhdGEudGl0bGUgfX08L2Rpdj5cbjxkaXZcbiAgICBtYXQtZGlhbG9nLWNvbnRlbnRcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBkYXRhLnRleHRQbGFjZWhvbGRlciB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5jb250cm9scy50ZXh0XCIgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IGRhdGEubGlua1BsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtLmNvbnRyb2xzLmxpbmtcIlxuICAgICAgICAgICAgcmVxdWlyZWQgLz5cbiAgICAgICAgPG1hdC1lcnJvcj5UaGUge3sgZGF0YS5saW5rUGxhY2Vob2xkZXIgfX0gaXMgcmVxdWlyZWQuPC9tYXQtZXJyb3I+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICBmb250U2V0PVwibm9kZXItaWNvblwiXG4gICAgICAgICAgICBmb250SWNvbj1cImljb24tY2FuY2VsLXRoaW5cIiAvPlxuICAgICAgICBDYW5jZWxcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIGNsYXNzPVwiYXBwbHktYnRuXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiXG4gICAgICAgIChjbGljayk9XCJvbkFwcGx5KClcIj5cbiAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICBmb250U2V0PVwibm9kZXItaWNvblwiXG4gICAgICAgICAgICBmb250SWNvbj1cImljb24tZG9uZS10aGluXCIgLz5cbiAgICAgICAgQXBwbHlcbiAgICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
|
|
@@ -61,11 +61,11 @@ export class EditorMobileToolbarComponent extends ToolbarActionsComponent {
|
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
63
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditorMobileToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CustomIconService }, { token: i2.EditorService }, { token: i0.Injector }, { token: i3.ToolbarCoreService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
64
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: EditorMobileToolbarComponent, selector: "app-nod-editor-mobile-toolbar", outputs: { openFileFromDisk: "openFileFromDisk", createDocument: "createDocument", saveAs: "saveAs", rename: "rename", delete: "delete", insertPageBreak: "insertPageBreak", textFormat: "textFormat" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"{ mode: toolbarCoreService.mode$ | async, isViewOnly: editorService.isViewOnly$ | async } as data\">\n <div class=\"menu-action\">\n <button\n *ngIf=\"data.mode === editorToolbarMode.Base; else back\"\n mat-button\n id=\"editor-mobile-toolbar-sandwich\"\n (click)=\"toolbarCoreService.openBurgerMenu()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-sandwich\" />\n </button>\n <ng-template #back>\n <div class=\"back-container\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-back\"\n (click)=\"toolbarCoreService.back()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-back\" />\n </button>\n <div class=\"back-title\">{{ toolbarCoreService.backTitle }}</div>\n </div>\n </ng-template>\n </div>\n <div\n *ngIf=\"styles && !data.isViewOnly && actionsMenuMods.includes(data.mode)\"\n class=\"actions\">\n <app-nod-undo-redo\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\" />\n <div class=\"separator\"></div>\n <div\n class=\"main-actions\"\n [ngSwitch]=\"data.mode\">\n <ng-container *ngSwitchCase=\"editorToolbarMode.Base\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-text-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.TextFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-text\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-style-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.StyleFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-combined\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-align-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.AlignFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\" />\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.TextFormat\">\n <app-nod-font\n [isDisabled]=\"data.isViewOnly\"\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n <div class=\"separator\"></div>\n <app-nod-font-size\n [isDisabled]=\"data.isViewOnly\"\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.StyleFormat\">\n <app-nod-font-style\n [isDisabled]=\"data.isViewOnly\"\n [bold]=\"styles.bold\"\n [italic]=\"styles.italic\"\n [underline]=\"styles.underline\"\n (toggleBold)=\"onApplyBold($event)\"\n (toggleItalic)=\"onApplyItalic($event)\"\n (toggleUnderline)=\"onApplyUnderline($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.AlignFormat\">\n <app-nod-format\n [isDisabled]=\"data.isViewOnly\"\n [alignment]=\"styles.alignment\"\n (selectAlignment)=\"onApplyAlignment($event)\" />\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: ["button.mdc-button{min-width:28px;min-height:28px;height:28px;padding:0;margin:0 4px}button.mdc-button mat-icon{font-size:24px;height:24px;width:24px;margin:0}:host::ng-deep{display:flex;position:relative;width:100%;height:32px}:host::ng-deep mat-button-toggle,:host::ng-deep .mat-button-toggle-button{height:32px;width:32px;border-radius:4px}:host::ng-deep mat-button-toggle mat-icon,:host::ng-deep .mat-button-toggle-button mat-icon{font-size:24px;height:24px;width:24px;border-radius:4px}:host::ng-deep mat-button-toggle .mat-button-toggle-label-content,:host::ng-deep .mat-button-toggle-button .mat-button-toggle-label-content{padding:0 2px}.menu-action{z-index:1}.actions{display:flex;position:absolute;align-items:center;justify-content:center;width:100%;height:100%}.main-actions{display:flex;align-items:center;height:100%}.separator{border-left:1px solid;opacity:.1;height:100%;margin:0 8px}app-nod-font{max-width:142px}.back-container{display:flex}.back-title{font-size:14px;font-weight:400;padding-left:10px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i5.FontComponent, selector: "app-nod-font", inputs: ["isDisabled", "styles"], outputs: ["selectFont"] }, { kind: "component", type: i6.FontSizeComponent, selector: "app-nod-font-size", inputs: ["isDisabled", "fontSize"], outputs: ["selectFontSize"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.FontStyleComponent, selector: "app-nod-font-style", inputs: ["isDisabled", "bold", "italic", "underline", "fontColor", "highlightColor"], outputs: ["toggleBold", "toggleItalic", "toggleUnderline", "selectFontColor", "selectHighlightColor"] }, { kind: "component", type: i10.FormatComponent, selector: "app-nod-format", inputs: ["isDisabled", "alignment"], outputs: ["selectAlignment"] }, { kind: "component", type: i11.UndoRedoComponent, selector: "app-nod-undo-redo", inputs: ["canUndo", "canRedo"], outputs: ["undo", "redo"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
64
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: EditorMobileToolbarComponent, selector: "app-nod-editor-mobile-toolbar", outputs: { openFileFromDisk: "openFileFromDisk", createDocument: "createDocument", saveAs: "saveAs", rename: "rename", delete: "delete", insertPageBreak: "insertPageBreak", textFormat: "textFormat" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"{ mode: toolbarCoreService.mode$ | async, isViewOnly: editorService.isViewOnly$ | async } as data\">\n <div class=\"menu-action\">\n <button\n *ngIf=\"data.mode === editorToolbarMode.Base; else back\"\n mat-button\n id=\"editor-mobile-toolbar-sandwich\"\n (click)=\"toolbarCoreService.openBurgerMenu()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-sandwich\" />\n </button>\n <ng-template #back>\n <div class=\"back-container\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-back\"\n (click)=\"toolbarCoreService.back()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-back\" />\n </button>\n <div class=\"back-title\">{{ toolbarCoreService.backTitle }}</div>\n </div>\n </ng-template>\n </div>\n <div\n *ngIf=\"styles && !data.isViewOnly && actionsMenuMods.includes(data.mode)\"\n class=\"actions\">\n <app-nod-undo-redo\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\" />\n <div class=\"separator\"></div>\n <div\n class=\"main-actions\"\n [ngSwitch]=\"data.mode\">\n <ng-container *ngSwitchCase=\"editorToolbarMode.Base\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-text-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.TextFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-text\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-style-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.StyleFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-combined\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-align-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.AlignFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\" />\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.TextFormat\">\n <app-nod-font\n [isDisabled]=\"data.isViewOnly\"\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n <div class=\"separator\"></div>\n <app-nod-font-size\n [isDisabled]=\"data.isViewOnly\"\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.StyleFormat\">\n <app-nod-font-style\n [isDisabled]=\"data.isViewOnly\"\n [bold]=\"styles.bold\"\n [italic]=\"styles.italic\"\n [underline]=\"styles.underline\"\n (toggleBold)=\"onApplyBold($event)\"\n (toggleItalic)=\"onApplyItalic($event)\"\n (toggleUnderline)=\"onApplyUnderline($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.AlignFormat\">\n <app-nod-format\n [isDisabled]=\"data.isViewOnly\"\n [alignment]=\"styles.alignment\"\n (selectAlignment)=\"onApplyAlignment($event)\" />\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: ["button.mdc-button{min-width:28px;min-height:28px;height:28px;padding:0;margin:0 4px}button.mdc-button mat-icon{font-size:24px;height:24px;width:24px;margin:0}:host::ng-deep{display:flex;position:relative;width:100%;height:32px}:host::ng-deep mat-button-toggle,:host::ng-deep .mat-button-toggle-button{height:32px;width:32px;border-radius:4px}:host::ng-deep mat-button-toggle mat-icon,:host::ng-deep .mat-button-toggle-button mat-icon{font-size:24px;height:24px;width:24px;border-radius:4px}:host::ng-deep mat-button-toggle .mat-button-toggle-label-content,:host::ng-deep .mat-button-toggle-button .mat-button-toggle-label-content{padding:0 2px}.menu-action{display:flex;align-items:center;z-index:1}.actions{display:flex;position:absolute;align-items:center;justify-content:center;width:100%;height:100%}.main-actions{display:flex;align-items:center;height:100%}.separator{border-left:1px solid;opacity:.1;height:100%;margin:0 8px}app-nod-font{max-width:142px}.back-container{display:flex}.back-title{font-size:14px;font-weight:400;padding-left:10px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i5.FontComponent, selector: "app-nod-font", inputs: ["isDisabled", "styles"], outputs: ["selectFont"] }, { kind: "component", type: i6.FontSizeComponent, selector: "app-nod-font-size", inputs: ["isDisabled", "fontSize"], outputs: ["selectFontSize"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.FontStyleComponent, selector: "app-nod-font-style", inputs: ["isDisabled", "bold", "italic", "underline", "fontColor", "highlightColor"], outputs: ["toggleBold", "toggleItalic", "toggleUnderline", "selectFontColor", "selectHighlightColor"] }, { kind: "component", type: i10.FormatComponent, selector: "app-nod-format", inputs: ["isDisabled", "alignment"], outputs: ["selectAlignment"] }, { kind: "component", type: i11.UndoRedoComponent, selector: "app-nod-undo-redo", inputs: ["canUndo", "canRedo"], outputs: ["undo", "redo"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
65
65
|
}
|
|
66
66
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditorMobileToolbarComponent, decorators: [{
|
|
67
67
|
type: Component,
|
|
68
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-editor-mobile-toolbar', template: "<ng-container *ngIf=\"{ mode: toolbarCoreService.mode$ | async, isViewOnly: editorService.isViewOnly$ | async } as data\">\n <div class=\"menu-action\">\n <button\n *ngIf=\"data.mode === editorToolbarMode.Base; else back\"\n mat-button\n id=\"editor-mobile-toolbar-sandwich\"\n (click)=\"toolbarCoreService.openBurgerMenu()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-sandwich\" />\n </button>\n <ng-template #back>\n <div class=\"back-container\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-back\"\n (click)=\"toolbarCoreService.back()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-back\" />\n </button>\n <div class=\"back-title\">{{ toolbarCoreService.backTitle }}</div>\n </div>\n </ng-template>\n </div>\n <div\n *ngIf=\"styles && !data.isViewOnly && actionsMenuMods.includes(data.mode)\"\n class=\"actions\">\n <app-nod-undo-redo\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\" />\n <div class=\"separator\"></div>\n <div\n class=\"main-actions\"\n [ngSwitch]=\"data.mode\">\n <ng-container *ngSwitchCase=\"editorToolbarMode.Base\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-text-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.TextFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-text\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-style-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.StyleFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-combined\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-align-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.AlignFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\" />\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.TextFormat\">\n <app-nod-font\n [isDisabled]=\"data.isViewOnly\"\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n <div class=\"separator\"></div>\n <app-nod-font-size\n [isDisabled]=\"data.isViewOnly\"\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.StyleFormat\">\n <app-nod-font-style\n [isDisabled]=\"data.isViewOnly\"\n [bold]=\"styles.bold\"\n [italic]=\"styles.italic\"\n [underline]=\"styles.underline\"\n (toggleBold)=\"onApplyBold($event)\"\n (toggleItalic)=\"onApplyItalic($event)\"\n (toggleUnderline)=\"onApplyUnderline($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.AlignFormat\">\n <app-nod-format\n [isDisabled]=\"data.isViewOnly\"\n [alignment]=\"styles.alignment\"\n (selectAlignment)=\"onApplyAlignment($event)\" />\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: ["button.mdc-button{min-width:28px;min-height:28px;height:28px;padding:0;margin:0 4px}button.mdc-button mat-icon{font-size:24px;height:24px;width:24px;margin:0}:host::ng-deep{display:flex;position:relative;width:100%;height:32px}:host::ng-deep mat-button-toggle,:host::ng-deep .mat-button-toggle-button{height:32px;width:32px;border-radius:4px}:host::ng-deep mat-button-toggle mat-icon,:host::ng-deep .mat-button-toggle-button mat-icon{font-size:24px;height:24px;width:24px;border-radius:4px}:host::ng-deep mat-button-toggle .mat-button-toggle-label-content,:host::ng-deep .mat-button-toggle-button .mat-button-toggle-label-content{padding:0 2px}.menu-action{z-index:1}.actions{display:flex;position:absolute;align-items:center;justify-content:center;width:100%;height:100%}.main-actions{display:flex;align-items:center;height:100%}.separator{border-left:1px solid;opacity:.1;height:100%;margin:0 8px}app-nod-font{max-width:142px}.back-container{display:flex}.back-title{font-size:14px;font-weight:400;padding-left:10px}\n"] }]
|
|
68
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-editor-mobile-toolbar', template: "<ng-container *ngIf=\"{ mode: toolbarCoreService.mode$ | async, isViewOnly: editorService.isViewOnly$ | async } as data\">\n <div class=\"menu-action\">\n <button\n *ngIf=\"data.mode === editorToolbarMode.Base; else back\"\n mat-button\n id=\"editor-mobile-toolbar-sandwich\"\n (click)=\"toolbarCoreService.openBurgerMenu()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-sandwich\" />\n </button>\n <ng-template #back>\n <div class=\"back-container\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-back\"\n (click)=\"toolbarCoreService.back()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-back\" />\n </button>\n <div class=\"back-title\">{{ toolbarCoreService.backTitle }}</div>\n </div>\n </ng-template>\n </div>\n <div\n *ngIf=\"styles && !data.isViewOnly && actionsMenuMods.includes(data.mode)\"\n class=\"actions\">\n <app-nod-undo-redo\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\" />\n <div class=\"separator\"></div>\n <div\n class=\"main-actions\"\n [ngSwitch]=\"data.mode\">\n <ng-container *ngSwitchCase=\"editorToolbarMode.Base\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-text-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.TextFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-text\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-style-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.StyleFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-combined\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-align-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.AlignFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\" />\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.TextFormat\">\n <app-nod-font\n [isDisabled]=\"data.isViewOnly\"\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n <div class=\"separator\"></div>\n <app-nod-font-size\n [isDisabled]=\"data.isViewOnly\"\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.StyleFormat\">\n <app-nod-font-style\n [isDisabled]=\"data.isViewOnly\"\n [bold]=\"styles.bold\"\n [italic]=\"styles.italic\"\n [underline]=\"styles.underline\"\n (toggleBold)=\"onApplyBold($event)\"\n (toggleItalic)=\"onApplyItalic($event)\"\n (toggleUnderline)=\"onApplyUnderline($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.AlignFormat\">\n <app-nod-format\n [isDisabled]=\"data.isViewOnly\"\n [alignment]=\"styles.alignment\"\n (selectAlignment)=\"onApplyAlignment($event)\" />\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: ["button.mdc-button{min-width:28px;min-height:28px;height:28px;padding:0;margin:0 4px}button.mdc-button mat-icon{font-size:24px;height:24px;width:24px;margin:0}:host::ng-deep{display:flex;position:relative;width:100%;height:32px}:host::ng-deep mat-button-toggle,:host::ng-deep .mat-button-toggle-button{height:32px;width:32px;border-radius:4px}:host::ng-deep mat-button-toggle mat-icon,:host::ng-deep .mat-button-toggle-button mat-icon{font-size:24px;height:24px;width:24px;border-radius:4px}:host::ng-deep mat-button-toggle .mat-button-toggle-label-content,:host::ng-deep .mat-button-toggle-button .mat-button-toggle-label-content{padding:0 2px}.menu-action{display:flex;align-items:center;z-index:1}.actions{display:flex;position:absolute;align-items:center;justify-content:center;width:100%;height:100%}.main-actions{display:flex;align-items:center;height:100%}.separator{border-left:1px solid;opacity:.1;height:100%;margin:0 8px}app-nod-font{max-width:142px}.back-container{display:flex}.back-title{font-size:14px;font-weight:400;padding-left:10px}\n"] }]
|
|
69
69
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.CustomIconService }, { type: i2.EditorService }, { type: i0.Injector }, { type: i3.ToolbarCoreService }], propDecorators: { openFileFromDisk: [{
|
|
70
70
|
type: Output
|
|
71
71
|
}], createDocument: [{
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export class LinkHelper {
|
|
2
|
+
static sliceSection(links, startIndex, endIndex) {
|
|
3
|
+
return links.filter(x => x.startIndex >= startIndex && x.endIndex <= endIndex);
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvY29udGVudC9oZWxwZXJzL2xpbmsuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxVQUFVO0lBQ25CLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBa0IsRUFBRSxVQUFrQixFQUFFLFFBQWdCO1FBQ3hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUM7SUFDbkYsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGlua01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9saW5rLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIExpbmtIZWxwZXIge1xuICAgIHN0YXRpYyBzbGljZVNlY3Rpb24obGlua3M6IExpbmtNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiBMaW5rTW9kZWxbXSB7XG4gICAgICAgIHJldHVybiBsaW5rcy5maWx0ZXIoeCA9PiB4LnN0YXJ0SW5kZXggPj0gc3RhcnRJbmRleCAmJiB4LmVuZEluZGV4IDw9IGVuZEluZGV4KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -177,15 +177,14 @@ export class TextLayer {
|
|
|
177
177
|
parent.appendChild(linesContainerElement);
|
|
178
178
|
const startIndex = this.session.displayData.positionToIndex({ row, column: 0 });
|
|
179
179
|
const endIndex = this.session.displayData.positionToIndex({ row: row + 1, column: 0 }) - 1;
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
...format,
|
|
184
|
-
content: this.session.model.content.substring(format.startIndex, format.endIndex + 1)
|
|
180
|
+
const combinedFormats = FormatStyleHelper.combineSection(this.session.model.formats, this.session.model.links, startIndex, endIndex).map(x => new FormatExtModel({
|
|
181
|
+
...x,
|
|
182
|
+
content: this.session.model.content.substring(x.startIndex, x.endIndex + 1)
|
|
185
183
|
}));
|
|
184
|
+
const splits = this.session.displayData.paragraphs[row].nextLineIndexes;
|
|
186
185
|
if (splits?.length) {
|
|
187
186
|
const distance = new DistanceModel({ start: startIndex, end: endIndex });
|
|
188
|
-
this.renderingHelper.renderContentWrappedLine({ currentElement: this.element, parentNode: linesContainerElement }, splits, paragraphSettings,
|
|
187
|
+
this.renderingHelper.renderContentWrappedLine({ currentElement: this.element, parentNode: linesContainerElement }, splits, paragraphSettings, combinedFormats, distance, this.session.customContentService, this.session.customComponents, this.session.generalProperties.scalingRatio, this.session.model.breaks);
|
|
189
188
|
}
|
|
190
189
|
else {
|
|
191
190
|
const numberingOffsetLeft = paragraphSettings.numberingData.numberingId === null
|
|
@@ -194,8 +193,8 @@ export class TextLayer {
|
|
|
194
193
|
const lastLineEl = this.renderingHelper.createLineElement(paragraphSettings.textLinesInfo[0], numberingOffsetLeft, this.session.generalProperties.scalingRatio);
|
|
195
194
|
linesContainerElement.appendChild(lastLineEl);
|
|
196
195
|
const rowDistance = new DistanceModel({ start: startIndex, end: endIndex });
|
|
197
|
-
this.renderingHelper.renderContentSimpleLine({ currentElement: this.element, parentNode: lastLineEl },
|
|
196
|
+
this.renderingHelper.renderContentSimpleLine({ currentElement: this.element, parentNode: lastLineEl }, combinedFormats, rowDistance, this.session.customContentService, this.session.customComponents, this.session.model.breaks);
|
|
198
197
|
}
|
|
199
198
|
}
|
|
200
199
|
}
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5sYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L2xheWVycy90ZXh0LmxheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxNQUFNLE9BQU8sU0FBUztJQVdsQixZQUNJLGFBQTBCLEVBQ2hCLE9BQW9CLEVBQ3RCLGFBQTRCLEVBQzVCLGtCQUFrQixlQUFlO1FBRi9CLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQWtCO1FBUjdDLGlCQUFZLEdBQXVCLEVBQUUsQ0FBQztRQUV0QyxvQkFBZSxHQUFrQixJQUFJLENBQUM7UUE4UDlCLDZCQUF3QixHQUFHLENBQUMsS0FBaUQsRUFBRSxFQUFFO1lBQ3JGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFD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SUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQzlDLENBQUM7WUFDRixxQkFBcUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQ3hDLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUN4RCxVQUFVLEVBQ1YsV0FBVyxFQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDNUIsQ0FBQztTQUNMO0lBQ0wsQ0FBQztDQUtKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ2VsbCB9IGZyb20gJy4uL2NlbGwuaW50ZXJmYWNlJztcbmltcG9ydCB7IERpc3RhbmNlTW9kZWwgfSBmcm9tICcuLi8uLi9leGVjdXRpb24vZGlzdGFuY2UubW9kZWwnO1xuaW1wb3J0IHsgRG9tSGVscGVyIH0gZnJvbSAnLi4vLi4vZXhlY3V0aW9uL2hlbHBlcnMvZG9tLmhlbHBlcic7XG5pbXBvcnQgeyBFZGdlRWxlbWVudE1vZGVsIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9lZGdlcy9lZGdlLWVsZW1lbnQubW9kZWwnO1xuaW1wb3J0IHsgRWRnZVR5cGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VkZ2VzL2VkZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEVkaXRTZXNzaW9uIH0gZnJvbSAnLi4vLi4vZXhlY3V0aW9uL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybWF0RXh0TW9kZWwgfSBmcm9tICcuLi8uLi9jb250ZW50L2Rpc3BsYXktZGF0YS9mb3JtYXQtZXh0Lm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdFN0eWxlSGVscGVyIH0gZnJvbSAnLi4vLi4vZXhlY3V0aW9uL2hlbHBlcnMvZm9ybWF0LXN0eWxlLmhlbHBlcic7XG5pbXBvcnQgeyBJTGF5ZXJDb25maWcgfSBmcm9tICcuL2xheWVyLmNvbmZpZyc7XG5pbXBvcnQgeyBMaW5lcyB9IGZyb20gJy4uLy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2xpbmVzJztcbmltcG9ydCB7IE5vZGVyRWRnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFnZVR5cGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VkZ2VzL3BhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBhcmFncmFwaEhlbHBlciB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9oZWxwZXJzL3BhcmFncmFwaC5oZWxwZXInO1xuaW1wb3J0IHsgUmVuZGVyaW5nSGVscGVyIH0gZnJvbSAnLi4vcmVuZGVyaW5nLmhlbHBlcic7XG5cbmV4cG9ydCBjbGFzcyBUZXh0TGF5ZXIge1xuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgbGluZXM6IExpbmVzO1xuXG4gICAgY29uZmlnOiBJTGF5ZXJDb25maWc7XG5cbiAgICBlZGdlRWxlbWVudHM6IEVkZ2VFbGVtZW50TW9kZWxbXSA9IFtdO1xuXG4gICAgZWRnZUVkaXRpbmdQYWdlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwYXJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICAgICAgcHJvdGVjdGVkIHNlc3Npb246IEVkaXRTZXNzaW9uLFxuICAgICAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyaW5nSGVscGVyID0gUmVuZGVyaW5nSGVscGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gJ25vZGVyLWxheWVyIG5vZGVyLXRleHQtbGF5ZXInO1xuICAgICAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5saW5lcyA9IG5ldyBMaW5lcyh0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5hZGRFdmVudExpc3RlbmVyKCdwYWdlc0NvdW50Q2hhbmdlZCcsIHRoaXMucGFnZXNDb3VudENoYW5nZWRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VXaWR0aH1weGA7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhZ2VzQ291bnRDaGFuZ2VkJywgdGhpcy5wYWdlc0NvdW50Q2hhbmdlZEhhbmRsZXIpO1xuICAgIH1cblxuICAgIHVwZGF0ZUVkZ2VzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtY29uZmlnLnNjcm9sbFRvcCk7XG4gICAgICAgIHdoaWxlICh0aGlzLmVkZ2VFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRFbCA9IHRoaXMuZWRnZUVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgRG9tSGVscGVyLnJlbW92ZUVsZW1lbnQocmVtb3ZlZEVsLmVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJQYWdlc0VkZ2VDb21wb25lbnRzKGNvbmZpZy5wYWdlcyk7XG4gICAgfVxuXG4gICAgZWRnZUVkaXRpbmdQYWdlVXBkYXRlZChwYWdlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRnZUVkaXRpbmdQYWdlID0gcGFnZTtcbiAgICAgICAgdGhpcy5yZW1vdmVFZGdlQ29tcG9uZW50cyhbcGFnZV0pO1xuICAgICAgICB0aGlzLnJlbmRlclBhZ2VzRWRnZUNvbXBvbmVudHMoW3BhZ2VdKTtcbiAgICB9XG5cbiAgICB1cGRhdGVFZGdlQnlMb2NhdGlvbih1cGRhdGVkUGFnZVR5cGU6IFBhZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtdGhpcy5jb25maWcuc2Nyb2xsVG9wKTtcbiAgICAgICAgbGV0IHBhZ2VzVG9SZW5kZXI6IG51bWJlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IGVkZ2VFbGVtZW50IG9mIHRoaXMuZWRnZUVsZW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoZWRnZUVsZW1lbnQucGFnZVR5cGUgIT09IHVwZGF0ZWRQYWdlVHlwZSB8fCBwYWdlc1RvUmVuZGVyLmluY2x1ZGVzKGVkZ2VFbGVtZW50LnBhZ2UpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhZ2VzVG9SZW5kZXIucHVzaChlZGdlRWxlbWVudC5wYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUVkZ2VDb21wb25lbnRzKHBhZ2VzVG9SZW5kZXIpO1xuICAgICAgICB0aGlzLnJlbmRlclBhZ2VzRWRnZUNvbXBvbmVudHMocGFnZXNUb1JlbmRlcik7XG4gICAgfVxuXG4gICAgdXBkYXRlTGluZXMoY29uZmlnOiBJTGF5ZXJDb25maWcpOiB2b2lkIHtcbiAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZSh0aGlzLmVsZW1lbnQsIDAsIC1jb25maWcuc2Nyb2xsVG9wKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHdoaWxlICh0aGlzLmxpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5saW5lcy5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGluZXMucHVzaCh0aGlzLnJlbmRlclRleHRQYXJhZ3JhcGgoY29uZmlnLmNvbnRlbnRSYW5nZSkpO1xuICAgIH1cblxuICAgIHNjcm9sbFBhZ2VzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtY29uZmlnLnNjcm9sbFRvcCk7XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlZFBhZ2VzID0gdGhpcy5jb25maWcucGFnZXMuZmlsdGVyKHggPT4gIWNvbmZpZy5wYWdlcy5pbmNsdWRlcyh4KSk7XG4gICAgICAgIHRoaXMucmVtb3ZlRWRnZUNvbXBvbmVudHMocmVtb3ZlZFBhZ2VzKTtcblxuICAgICAgICBjb25zdCBuZXdQYWdlcyA9IGNvbmZpZy5wYWdlcy5maWx0ZXIoeCA9PiAhdGhpcy5jb25maWcucGFnZXMuaW5jbHVkZXMoeCkpO1xuICAgICAgICB0aGlzLnJlbmRlclBhZ2VzRWRnZUNvbXBvbmVudHMobmV3UGFnZXMpO1xuICAgIH1cblxuICAgIHNjcm9sbExpbmVzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZENvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZSh0aGlzLmVsZW1lbnQsIDAsIC1jb25maWcuc2Nyb2xsVG9wKTtcblxuICAgICAgICBjb25zdCBvbGRMYXN0Um93ID0gb2xkQ29uZmlnID8gb2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5lbmQgOiAtMTtcblxuICAgICAgICBpZiAoIW9sZENvbmZpZyB8fCBvbGRMYXN0Um93IDwgY29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCB8fCBjb25maWcuY29udGVudFJhbmdlLmVuZCA8IG9sZENvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxpbmVzKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCA8IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHJvdyA9IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQgLSBvbGRDb25maWcuY29udGVudFJhbmdlLnN0YXJ0OyByb3cgPiAwOyByb3ctLSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGluZXMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbGRDb25maWcuY29udGVudFJhbmdlLmVuZCA+IGNvbmZpZy5jb250ZW50UmFuZ2UuZW5kKSB7XG4gICAgICAgICAgICBmb3IgKGxldCByb3cgPSBvbGRDb25maWcuY29udGVudFJhbmdlLmVuZCAtIGNvbmZpZy5jb250ZW50UmFuZ2UuZW5kOyByb3cgPiAwOyByb3ctLSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGluZXMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCA+IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5yZW5kZXJUZXh0UGFyYWdyYXBoKFxuICAgICAgICAgICAgICAgIG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQsIGVuZDogb2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCAtIDEgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLnVuc2hpZnQobGluZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZENvbmZpZy5jb250ZW50UmFuZ2UuZW5kIDwgY29uZmlnLmNvbnRlbnRSYW5nZS5lbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5yZW5kZXJUZXh0UGFyYWdyYXBoKFxuICAgICAgICAgICAgICAgIG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IG9sZENvbmZpZy5jb250ZW50UmFuZ2UuZW5kICsgMSwgZW5kOiBjb25maWcuY29udGVudFJhbmdlLmVuZCB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubGluZXMucHVzaChsaW5lcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RWRnZVBhcmFncmFwaFRvcCh0b3BPZmZzZXQ6IG51bWJlciwgcGFnZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoVG9wID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VzU3BhY2UgKyB0b3BPZmZzZXQ7XG4gICAgICAgIHJldHVybiBwYXJhZ3JhcGhUb3AgKyAocGFnZSAtIDEpICogKHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlSGVpZ2h0ICsgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VzU3BhY2UpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQYXJhZ3JhcGhUb3Aocm93OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldERpc3RhbmNlRnJvbVRvcChyb3cpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyUGFnZXNFZGdlQ29tcG9uZW50cyhwYWdlczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlzcGxheURhdGEgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGE7XG4gICAgICAgIGZvciAobGV0IHBhZ2Ugb2YgcGFnZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEJ5UGFnZShwYWdlLCBFZGdlVHlwZS5IZWFkZXIpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZ2V0Q29tcG9uZW50SGVpZ2h0KHBhZ2UsIEVkZ2VUeXBlLkhlYWRlcik7XG4gICAgICAgICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJFZGdlQ29tcG9uZW50KGhlYWRlciwgaGVhZGVySGVpZ2h0LCBwYWdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZm9vdGVyID0gdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZ2V0Q29tcG9uZW50QnlQYWdlKHBhZ2UsIEVkZ2VUeXBlLkZvb3Rlcik7XG4gICAgICAgICAgICBjb25zdCBmb290ZXJIZWlnaHQgPSB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5nZXRDb21wb25lbnRIZWlnaHQocGFnZSwgRWRnZVR5cGUuRm9vdGVyKTtcbiAgICAgICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3BPZmZzZXQgPSBkaXNwbGF5RGF0YS5wYWdlSGVpZ2h0IC0gZm9vdGVySGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRWRnZUNvbXBvbmVudChmb290ZXIsIGZvb3RlckhlaWdodCwgcGFnZSwgdG9wT2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyRWRnZUNvbXBvbmVudChlZGdlQ29tcG9uZW50OiBDb21wb25lbnRSZWY8Tm9kZXJFZGdlQ29tcG9uZW50PiwgZWRnZUhlaWdodDogbnVtYmVyLCBwYWdlOiBudW1iZXIsIHRvcE9mZnNldCA9IDApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gUmVuZGVyaW5nSGVscGVyLmNyZWF0ZURpdkNvbnRhaW5lcignbm9kZXItZWRnZS1ncm91cCcpO1xuICAgICAgICBsZXQgcGFyYWdyYXBoVG9wID0gdGhpcy5nZXRFZGdlUGFyYWdyYXBoVG9wKHRvcE9mZnNldCwgcGFnZSk7XG4gICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShjb250YWluZXIuc3R5bGUsICdoZWlnaHQnLCBgJHtlZGdlSGVpZ2h0fXB4YCk7XG4gICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShjb250YWluZXIuc3R5bGUsICd0b3AnLCBgJHtwYXJhZ3JhcGhUb3B9cHhgKTtcblxuICAgICAgICBjb25zdCBjb21wb25lbnRFbGVtZW50ID0gKGVkZ2VDb21wb25lbnQuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuZWRnZUVkaXRpbmdQYWdlID09PSBwYWdlKSB7XG4gICAgICAgICAgICBjb21wb25lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zZXNzaW9uLWlkJywgYCR7ZWRnZUNvbXBvbmVudC5pbnN0YW5jZS5zZXNzaW9uSWR9YCk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY29tcG9uZW50RWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIHRoaXMuZWRnZUVsZW1lbnRzLnB1c2gobmV3IEVkZ2VFbGVtZW50TW9kZWwoeyBwYWdlLCBlbGVtZW50OiBjb250YWluZXIsIHBhZ2VUeXBlOiBlZGdlQ29tcG9uZW50Lmluc3RhbmNlLm1vZGVsLnBhZ2VUeXBlIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudENvcHkgPSBjb21wb25lbnRFbGVtZW50LmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29tcG9uZW50Q29weS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vzc2lvbi1pZCcsIGAke2VkZ2VDb21wb25lbnQuaW5zdGFuY2Uuc2Vzc2lvbklkfWApO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY29tcG9uZW50Q29weSk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICB0aGlzLmVkZ2VFbGVtZW50cy5wdXNoKG5ldyBFZGdlRWxlbWVudE1vZGVsKHsgcGFnZSwgZWxlbWVudDogY29udGFpbmVyLCBwYWdlVHlwZTogZWRnZUNvbXBvbmVudC5pbnN0YW5jZS5tb2RlbC5wYWdlVHlwZSB9KSk7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5lZGdlRWxlbWVudENvcHlVcGRhdGVkKGNvbXBvbmVudENvcHksIHBhZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRWRnZUNvbXBvbmVudHMocmVtb3ZlZFBhZ2VzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgICAgICBsZXQgcmVtb3ZlSW5kZXggPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kSW5kZXgoeCA9PiByZW1vdmVkUGFnZXMuaW5jbHVkZXMoeC5wYWdlKSk7XG4gICAgICAgIHdoaWxlIChyZW1vdmVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRFbGVtZW50ID0gdGhpcy5lZGdlRWxlbWVudHNbcmVtb3ZlSW5kZXhdO1xuICAgICAgICAgICAgRG9tSGVscGVyLnJlbW92ZUVsZW1lbnQocmVtb3ZlZEVsZW1lbnQuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmVkZ2VFbGVtZW50cy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICAgICAgICAgICAgcmVtb3ZlSW5kZXggPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kSW5kZXgoeCA9PiByZW1vdmVkUGFnZXMuaW5jbHVkZXMoeC5wYWdlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclRleHRQYXJhZ3JhcGgocm93c0Rpc3RhbmNlOiBEaXN0YW5jZU1vZGVsKTogQ2VsbFtdIHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQ6IENlbGxbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCByb3cgPSByb3dzRGlzdGFuY2Uuc3RhcnQ7IHJvdyA8PSByb3dzRGlzdGFuY2UuZW5kOyByb3crKykge1xuICAgICAgICAgICAgY29uc3QgcGFyYWdyYXBoQ2VsbCA9IHRoaXMubGluZXMuY3JlYXRlQ2VsbChyb3cpO1xuICAgICAgICAgICAgcGFyYWdyYXBoQ2VsbC5lbGVtZW50LmNsYXNzTmFtZSA9ICdub2Rlci1saW5lLWdyb3VwJztcbiAgICAgICAgICAgIERvbUhlbHBlci5yZW1vdmVDaGlsZHJlbihwYXJhZ3JhcGhDZWxsLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgcGFyYWdyYXBoSGVpZ2h0ID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaEhlaWdodChyb3cpO1xuICAgICAgICAgICAgY29uc3QgcGFyYWdyYXBoVG9wID0gdGhpcy5nZXRQYXJhZ3JhcGhUb3Aocm93KTtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuc3R5bGUsICdoZWlnaHQnLCBgJHtwYXJhZ3JhcGhIZWlnaHR9cHhgKTtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuc3R5bGUsICd0b3AnLCBgJHtwYXJhZ3JhcGhUb3B9cHhgKTtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuc3R5bGUsICdwYWRkaW5nLWxlZnQnLCBgJHt0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFnZU1hcmdpbi5sZWZ0fXB4YCk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUocGFyYWdyYXBoQ2VsbC5lbGVtZW50LnN0eWxlLCAncGFkZGluZy1yaWdodCcsIGAke3RoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlTWFyZ2luLnJpZ2h0fXB4YCk7XG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhTZXR0aW5ncyA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhTZXR0aW5ncyhyb3cpO1xuICAgICAgICAgICAgaWYgKHBhcmFncmFwaFNldHRpbmdzPy5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyaW5nRWxlbWVudCA9IHRoaXMucmVuZGVyaW5nSGVscGVyLnJlbmRlck51bWJlcmluZ01hcmtlcihcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmdlbmVyYWxQcm9wZXJ0aWVzLnNjYWxpbmdSYXRpb1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbnVtYmVyaW5nRWxlbWVudC5jbGFzc05hbWUgPSAnbnVtYmVyaW5nTWFya2VyJztcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuYXBwZW5kQ2hpbGQobnVtYmVyaW5nRWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyVGV4dExpbmVzKHBhcmFncmFwaENlbGwuZWxlbWVudCwgcm93KTtcbiAgICAgICAgICAgIGZyYWdtZW50LnB1c2gocGFyYWdyYXBoQ2VsbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJUZXh0TGluZXMocGFyZW50OiBOb2RlLCByb3c6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBsaW5lc0NvbnRhaW5lckVsZW1lbnQgPSB0aGlzLnJlbmRlcmluZ0hlbHBlci5jcmVhdGVEaXZDb250YWluZXIoJ2xpbmVzLWNvbnRhaW5lcicpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhTZXR0aW5ncyA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhTZXR0aW5ncyhyb3cpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhIZWlnaHQgPSBQYXJhZ3JhcGhIZWxwZXIuZ2V0UGFyYWdyYXBoSGVpZ2h0KHBhcmFncmFwaFNldHRpbmdzLnRleHRMaW5lc0luZm8pO1xuICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUobGluZXNDb250YWluZXJFbGVtZW50LnN0eWxlLCAnaGVpZ2h0JywgYCR7cGFyYWdyYXBoSGVpZ2h0fXB4YCk7XG4gICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChsaW5lc0NvbnRhaW5lckVsZW1lbnQpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucG9zaXRpb25Ub0luZGV4KHsgcm93LCBjb2x1bW46IDAgfSk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBvc2l0aW9uVG9JbmRleCh7IHJvdzogcm93ICsgMSwgY29sdW1uOiAwIH0pIC0gMTtcbiAgICAgICAgY29uc3QgZm9ybWF0cyA9IEZvcm1hdFN0eWxlSGVscGVyLmdldEZvcm1hdHNBdFJhbmdlKHRoaXMuc2Vzc2lvbi5tb2RlbC5mb3JtYXRzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHNwbGl0cyA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzW3Jvd10ubmV4dExpbmVJbmRleGVzO1xuICAgICAgICBjb25zdCBmb3JtYXRzRXh0ID0gZm9ybWF0cy5tYXAoXG4gICAgICAgICAgICBmb3JtYXQgPT5cbiAgICAgICAgICAgICAgICBuZXcgRm9ybWF0RXh0TW9kZWwoe1xuICAgICAgICAgICAgICAgICAgICAuLi5mb3JtYXQsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuc2Vzc2lvbi5tb2RlbC5jb250ZW50LnN1YnN0cmluZyhmb3JtYXQuc3RhcnRJbmRleCwgZm9ybWF0LmVuZEluZGV4ICsgMSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBpZiAoc3BsaXRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogc3RhcnRJbmRleCwgZW5kOiBlbmRJbmRleCB9KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyaW5nSGVscGVyLnJlbmRlckNvbnRlbnRXcmFwcGVkTGluZShcbiAgICAgICAgICAgICAgICB7IGN1cnJlbnRFbGVtZW50OiB0aGlzLmVsZW1lbnQsIHBhcmVudE5vZGU6IGxpbmVzQ29udGFpbmVyRWxlbWVudCB9LFxuICAgICAgICAgICAgICAgIHNwbGl0cyxcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICBmb3JtYXRzRXh0LFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMuc2NhbGluZ1JhdGlvLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5tb2RlbC5icmVha3NcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJpbmdPZmZzZXRMZWZ0ID1cbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IHBhcmFncmFwaFNldHRpbmdzLm51bWJlcmluZ0RhdGEud2lkdGggKyBwYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLnBhZGRpbmdMZWZ0O1xuICAgICAgICAgICAgY29uc3QgbGFzdExpbmVFbCA9IHRoaXMucmVuZGVyaW5nSGVscGVyLmNyZWF0ZUxpbmVFbGVtZW50KFxuICAgICAgICAgICAgICAgIHBhcmFncmFwaFNldHRpbmdzLnRleHRMaW5lc0luZm9bMF0sXG4gICAgICAgICAgICAgICAgbnVtYmVyaW5nT2Zmc2V0TGVmdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMuc2NhbGluZ1JhdGlvXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGluZXNDb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGxhc3RMaW5lRWwpO1xuICAgICAgICAgICAgY29uc3Qgcm93RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBzdGFydEluZGV4LCBlbmQ6IGVuZEluZGV4IH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmdIZWxwZXIucmVuZGVyQ29udGVudFNpbXBsZUxpbmUoXG4gICAgICAgICAgICAgICAgeyBjdXJyZW50RWxlbWVudDogdGhpcy5lbGVtZW50LCBwYXJlbnROb2RlOiBsYXN0TGluZUVsIH0sXG4gICAgICAgICAgICAgICAgZm9ybWF0c0V4dCxcbiAgICAgICAgICAgICAgICByb3dEaXN0YW5jZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm1vZGVsLmJyZWFrc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcGFnZXNDb3VudENoYW5nZWRIYW5kbGVyID0gKGV2ZW50OiB7IHBhZ2VzQ291bnQ6IG51bWJlcjsgcGFnZUhlaWdodDogbnVtYmVyIH0pID0+IHtcbiAgICAgICAgdGhpcy5saW5lcy5zZXRTaXplcyhldmVudC5wYWdlc0NvdW50LCBldmVudC5wYWdlSGVpZ2h0KTtcbiAgICB9O1xufVxuIl19
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5sYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L2xheWVycy90ZXh0LmxheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxNQUFNLE9BQU8sU0FBUztJQVdsQixZQUNJLGFBQTBCLEVBQ2hCLE9BQW9CLEVBQ3RCLGFBQTRCLEVBQzVCLGtCQUFrQixlQUFlO1FBRi9CLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQWtCO1FBUjdDLGlCQUFZLEdBQXVCLEVBQUUsQ0FBQztRQUV0QyxvQkFBZSxHQUFrQixJQUFJLENBQUM7UUFrUTlCLDZCQUF3QixHQUFHLENBQUMsS0FBaUQsRUFBRSxFQUFFO1lBQ3JGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFD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bUIsRUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQzlDLENBQUM7WUFDRixxQkFBcUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQ3hDLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUN4RCxlQUFlLEVBQ2YsV0FBVyxFQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDNUIsQ0FBQztTQUNMO0lBQ0wsQ0FBQztDQUtKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ2VsbCB9IGZyb20gJy4uL2NlbGwuaW50ZXJmYWNlJztcbmltcG9ydCB7IERpc3RhbmNlTW9kZWwgfSBmcm9tICcuLi8uLi9leGVjdXRpb24vZGlzdGFuY2UubW9kZWwnO1xuaW1wb3J0IHsgRG9tSGVscGVyIH0gZnJvbSAnLi4vLi4vZXhlY3V0aW9uL2hlbHBlcnMvZG9tLmhlbHBlcic7XG5pbXBvcnQgeyBFZGdlRWxlbWVudE1vZGVsIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9lZGdlcy9lZGdlLWVsZW1lbnQubW9kZWwnO1xuaW1wb3J0IHsgRWRnZVR5cGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VkZ2VzL2VkZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmFjdGlvbi9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgRm9ybWF0RXh0TW9kZWwgfSBmcm9tICcuLi8uLi9jb250ZW50L2Rpc3BsYXktZGF0YS9mb3JtYXQtZXh0Lm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdFN0eWxlSGVscGVyIH0gZnJvbSAnLi4vLi4vZXhlY3V0aW9uL2hlbHBlcnMvZm9ybWF0LXN0eWxlLmhlbHBlcic7XG5pbXBvcnQgeyBJTGF5ZXJDb25maWcgfSBmcm9tICcuL2xheWVyLmNvbmZpZyc7XG5pbXBvcnQgeyBMaW5lcyB9IGZyb20gJy4uLy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2xpbmVzJztcbmltcG9ydCB7IE5vZGVyRWRnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFnZVR5cGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VkZ2VzL3BhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBhcmFncmFwaEhlbHBlciB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9oZWxwZXJzL3BhcmFncmFwaC5oZWxwZXInO1xuaW1wb3J0IHsgUmVuZGVyaW5nSGVscGVyIH0gZnJvbSAnLi4vcmVuZGVyaW5nLmhlbHBlcic7XG5cbmV4cG9ydCBjbGFzcyBUZXh0TGF5ZXIge1xuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgbGluZXM6IExpbmVzO1xuXG4gICAgY29uZmlnOiBJTGF5ZXJDb25maWc7XG5cbiAgICBlZGdlRWxlbWVudHM6IEVkZ2VFbGVtZW50TW9kZWxbXSA9IFtdO1xuXG4gICAgZWRnZUVkaXRpbmdQYWdlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwYXJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICAgICAgcHJvdGVjdGVkIHNlc3Npb246IEVkaXRTZXNzaW9uLFxuICAgICAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyaW5nSGVscGVyID0gUmVuZGVyaW5nSGVscGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gJ25vZGVyLWxheWVyIG5vZGVyLXRleHQtbGF5ZXInO1xuICAgICAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5saW5lcyA9IG5ldyBMaW5lcyh0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5hZGRFdmVudExpc3RlbmVyKCdwYWdlc0NvdW50Q2hhbmdlZCcsIHRoaXMucGFnZXNDb3VudENoYW5nZWRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VXaWR0aH1weGA7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhZ2VzQ291bnRDaGFuZ2VkJywgdGhpcy5wYWdlc0NvdW50Q2hhbmdlZEhhbmRsZXIpO1xuICAgIH1cblxuICAgIHVwZGF0ZUVkZ2VzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtY29uZmlnLnNjcm9sbFRvcCk7XG4gICAgICAgIHdoaWxlICh0aGlzLmVkZ2VFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRFbCA9IHRoaXMuZWRnZUVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgRG9tSGVscGVyLnJlbW92ZUVsZW1lbnQocmVtb3ZlZEVsLmVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJQYWdlc0VkZ2VDb21wb25lbnRzKGNvbmZpZy5wYWdlcyk7XG4gICAgfVxuXG4gICAgZWRnZUVkaXRpbmdQYWdlVXBkYXRlZChwYWdlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRnZUVkaXRpbmdQYWdlID0gcGFnZTtcbiAgICAgICAgdGhpcy5yZW1vdmVFZGdlQ29tcG9uZW50cyhbcGFnZV0pO1xuICAgICAgICB0aGlzLnJlbmRlclBhZ2VzRWRnZUNvbXBvbmVudHMoW3BhZ2VdKTtcbiAgICB9XG5cbiAgICB1cGRhdGVFZGdlQnlMb2NhdGlvbih1cGRhdGVkUGFnZVR5cGU6IFBhZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtdGhpcy5jb25maWcuc2Nyb2xsVG9wKTtcbiAgICAgICAgbGV0IHBhZ2VzVG9SZW5kZXI6IG51bWJlcltdID0gW107XG4gICAgICAgIGZvciAobGV0IGVkZ2VFbGVtZW50IG9mIHRoaXMuZWRnZUVsZW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoZWRnZUVsZW1lbnQucGFnZVR5cGUgIT09IHVwZGF0ZWRQYWdlVHlwZSB8fCBwYWdlc1RvUmVuZGVyLmluY2x1ZGVzKGVkZ2VFbGVtZW50LnBhZ2UpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhZ2VzVG9SZW5kZXIucHVzaChlZGdlRWxlbWVudC5wYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUVkZ2VDb21wb25lbnRzKHBhZ2VzVG9SZW5kZXIpO1xuICAgICAgICB0aGlzLnJlbmRlclBhZ2VzRWRnZUNvbXBvbmVudHMocGFnZXNUb1JlbmRlcik7XG4gICAgfVxuXG4gICAgdXBkYXRlTGluZXMoY29uZmlnOiBJTGF5ZXJDb25maWcpOiB2b2lkIHtcbiAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZSh0aGlzLmVsZW1lbnQsIDAsIC1jb25maWcuc2Nyb2xsVG9wKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHdoaWxlICh0aGlzLmxpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5saW5lcy5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGluZXMucHVzaCh0aGlzLnJlbmRlclRleHRQYXJhZ3JhcGgoY29uZmlnLmNvbnRlbnRSYW5nZSkpO1xuICAgIH1cblxuICAgIHNjcm9sbFBhZ2VzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtY29uZmlnLnNjcm9sbFRvcCk7XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlZFBhZ2VzID0gdGhpcy5jb25maWcucGFnZXMuZmlsdGVyKHggPT4gIWNvbmZpZy5wYWdlcy5pbmNsdWRlcyh4KSk7XG4gICAgICAgIHRoaXMucmVtb3ZlRWRnZUNvbXBvbmVudHMocmVtb3ZlZFBhZ2VzKTtcblxuICAgICAgICBjb25zdCBuZXdQYWdlcyA9IGNvbmZpZy5wYWdlcy5maWx0ZXIoeCA9PiAhdGhpcy5jb25maWcucGFnZXMuaW5jbHVkZXMoeCkpO1xuICAgICAgICB0aGlzLnJlbmRlclBhZ2VzRWRnZUNvbXBvbmVudHMobmV3UGFnZXMpO1xuICAgIH1cblxuICAgIHNjcm9sbExpbmVzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZENvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZSh0aGlzLmVsZW1lbnQsIDAsIC1jb25maWcuc2Nyb2xsVG9wKTtcblxuICAgICAgICBjb25zdCBvbGRMYXN0Um93ID0gb2xkQ29uZmlnID8gb2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5lbmQgOiAtMTtcblxuICAgICAgICBpZiAoIW9sZENvbmZpZyB8fCBvbGRMYXN0Um93IDwgY29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCB8fCBjb25maWcuY29udGVudFJhbmdlLmVuZCA8IG9sZENvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxpbmVzKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCA8IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHJvdyA9IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQgLSBvbGRDb25maWcuY29udGVudFJhbmdlLnN0YXJ0OyByb3cgPiAwOyByb3ctLSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGluZXMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbGRDb25maWcuY29udGVudFJhbmdlLmVuZCA+IGNvbmZpZy5jb250ZW50UmFuZ2UuZW5kKSB7XG4gICAgICAgICAgICBmb3IgKGxldCByb3cgPSBvbGRDb25maWcuY29udGVudFJhbmdlLmVuZCAtIGNvbmZpZy5jb250ZW50UmFuZ2UuZW5kOyByb3cgPiAwOyByb3ctLSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGluZXMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCA+IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5yZW5kZXJUZXh0UGFyYWdyYXBoKFxuICAgICAgICAgICAgICAgIG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQsIGVuZDogb2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCAtIDEgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLnVuc2hpZnQobGluZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZENvbmZpZy5jb250ZW50UmFuZ2UuZW5kIDwgY29uZmlnLmNvbnRlbnRSYW5nZS5lbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5yZW5kZXJUZXh0UGFyYWdyYXBoKFxuICAgICAgICAgICAgICAgIG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IG9sZENvbmZpZy5jb250ZW50UmFuZ2UuZW5kICsgMSwgZW5kOiBjb25maWcuY29udGVudFJhbmdlLmVuZCB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubGluZXMucHVzaChsaW5lcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RWRnZVBhcmFncmFwaFRvcCh0b3BPZmZzZXQ6IG51bWJlciwgcGFnZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoVG9wID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VzU3BhY2UgKyB0b3BPZmZzZXQ7XG4gICAgICAgIHJldHVybiBwYXJhZ3JhcGhUb3AgKyAocGFnZSAtIDEpICogKHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlSGVpZ2h0ICsgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VzU3BhY2UpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQYXJhZ3JhcGhUb3Aocm93OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldERpc3RhbmNlRnJvbVRvcChyb3cpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyUGFnZXNFZGdlQ29tcG9uZW50cyhwYWdlczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlzcGxheURhdGEgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGE7XG4gICAgICAgIGZvciAobGV0IHBhZ2Ugb2YgcGFnZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEJ5UGFnZShwYWdlLCBFZGdlVHlwZS5IZWFkZXIpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZ2V0Q29tcG9uZW50SGVpZ2h0KHBhZ2UsIEVkZ2VUeXBlLkhlYWRlcik7XG4gICAgICAgICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJFZGdlQ29tcG9uZW50KGhlYWRlciwgaGVhZGVySGVpZ2h0LCBwYWdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZm9vdGVyID0gdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZ2V0Q29tcG9uZW50QnlQYWdlKHBhZ2UsIEVkZ2VUeXBlLkZvb3Rlcik7XG4gICAgICAgICAgICBjb25zdCBmb290ZXJIZWlnaHQgPSB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5nZXRDb21wb25lbnRIZWlnaHQocGFnZSwgRWRnZVR5cGUuRm9vdGVyKTtcbiAgICAgICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3BPZmZzZXQgPSBkaXNwbGF5RGF0YS5wYWdlSGVpZ2h0IC0gZm9vdGVySGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRWRnZUNvbXBvbmVudChmb290ZXIsIGZvb3RlckhlaWdodCwgcGFnZSwgdG9wT2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyRWRnZUNvbXBvbmVudChlZGdlQ29tcG9uZW50OiBDb21wb25lbnRSZWY8Tm9kZXJFZGdlQ29tcG9uZW50PiwgZWRnZUhlaWdodDogbnVtYmVyLCBwYWdlOiBudW1iZXIsIHRvcE9mZnNldCA9IDApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gUmVuZGVyaW5nSGVscGVyLmNyZWF0ZURpdkNvbnRhaW5lcignbm9kZXItZWRnZS1ncm91cCcpO1xuICAgICAgICBsZXQgcGFyYWdyYXBoVG9wID0gdGhpcy5nZXRFZGdlUGFyYWdyYXBoVG9wKHRvcE9mZnNldCwgcGFnZSk7XG4gICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShjb250YWluZXIuc3R5bGUsICdoZWlnaHQnLCBgJHtlZGdlSGVpZ2h0fXB4YCk7XG4gICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShjb250YWluZXIuc3R5bGUsICd0b3AnLCBgJHtwYXJhZ3JhcGhUb3B9cHhgKTtcblxuICAgICAgICBjb25zdCBjb21wb25lbnRFbGVtZW50ID0gKGVkZ2VDb21wb25lbnQuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuZWRnZUVkaXRpbmdQYWdlID09PSBwYWdlKSB7XG4gICAgICAgICAgICBjb21wb25lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zZXNzaW9uLWlkJywgYCR7ZWRnZUNvbXBvbmVudC5pbnN0YW5jZS5zZXNzaW9uSWR9YCk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY29tcG9uZW50RWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIHRoaXMuZWRnZUVsZW1lbnRzLnB1c2gobmV3IEVkZ2VFbGVtZW50TW9kZWwoeyBwYWdlLCBlbGVtZW50OiBjb250YWluZXIsIHBhZ2VUeXBlOiBlZGdlQ29tcG9uZW50Lmluc3RhbmNlLm1vZGVsLnBhZ2VUeXBlIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudENvcHkgPSBjb21wb25lbnRFbGVtZW50LmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29tcG9uZW50Q29weS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vzc2lvbi1pZCcsIGAke2VkZ2VDb21wb25lbnQuaW5zdGFuY2Uuc2Vzc2lvbklkfWApO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY29tcG9uZW50Q29weSk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICB0aGlzLmVkZ2VFbGVtZW50cy5wdXNoKG5ldyBFZGdlRWxlbWVudE1vZGVsKHsgcGFnZSwgZWxlbWVudDogY29udGFpbmVyLCBwYWdlVHlwZTogZWRnZUNvbXBvbmVudC5pbnN0YW5jZS5tb2RlbC5wYWdlVHlwZSB9KSk7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5lZGdlRWxlbWVudENvcHlVcGRhdGVkKGNvbXBvbmVudENvcHksIHBhZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRWRnZUNvbXBvbmVudHMocmVtb3ZlZFBhZ2VzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgICAgICBsZXQgcmVtb3ZlSW5kZXggPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kSW5kZXgoeCA9PiByZW1vdmVkUGFnZXMuaW5jbHVkZXMoeC5wYWdlKSk7XG4gICAgICAgIHdoaWxlIChyZW1vdmVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRFbGVtZW50ID0gdGhpcy5lZGdlRWxlbWVudHNbcmVtb3ZlSW5kZXhdO1xuICAgICAgICAgICAgRG9tSGVscGVyLnJlbW92ZUVsZW1lbnQocmVtb3ZlZEVsZW1lbnQuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmVkZ2VFbGVtZW50cy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICAgICAgICAgICAgcmVtb3ZlSW5kZXggPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kSW5kZXgoeCA9PiByZW1vdmVkUGFnZXMuaW5jbHVkZXMoeC5wYWdlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclRleHRQYXJhZ3JhcGgocm93c0Rpc3RhbmNlOiBEaXN0YW5jZU1vZGVsKTogQ2VsbFtdIHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQ6IENlbGxbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCByb3cgPSByb3dzRGlzdGFuY2Uuc3RhcnQ7IHJvdyA8PSByb3dzRGlzdGFuY2UuZW5kOyByb3crKykge1xuICAgICAgICAgICAgY29uc3QgcGFyYWdyYXBoQ2VsbCA9IHRoaXMubGluZXMuY3JlYXRlQ2VsbChyb3cpO1xuICAgICAgICAgICAgcGFyYWdyYXBoQ2VsbC5lbGVtZW50LmNsYXNzTmFtZSA9ICdub2Rlci1saW5lLWdyb3VwJztcbiAgICAgICAgICAgIERvbUhlbHBlci5yZW1vdmVDaGlsZHJlbihwYXJhZ3JhcGhDZWxsLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgcGFyYWdyYXBoSGVpZ2h0ID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaEhlaWdodChyb3cpO1xuICAgICAgICAgICAgY29uc3QgcGFyYWdyYXBoVG9wID0gdGhpcy5nZXRQYXJhZ3JhcGhUb3Aocm93KTtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuc3R5bGUsICdoZWlnaHQnLCBgJHtwYXJhZ3JhcGhIZWlnaHR9cHhgKTtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuc3R5bGUsICd0b3AnLCBgJHtwYXJhZ3JhcGhUb3B9cHhgKTtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuc3R5bGUsICdwYWRkaW5nLWxlZnQnLCBgJHt0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFnZU1hcmdpbi5sZWZ0fXB4YCk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUocGFyYWdyYXBoQ2VsbC5lbGVtZW50LnN0eWxlLCAncGFkZGluZy1yaWdodCcsIGAke3RoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlTWFyZ2luLnJpZ2h0fXB4YCk7XG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhTZXR0aW5ncyA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhTZXR0aW5ncyhyb3cpO1xuICAgICAgICAgICAgaWYgKHBhcmFncmFwaFNldHRpbmdzPy5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyaW5nRWxlbWVudCA9IHRoaXMucmVuZGVyaW5nSGVscGVyLnJlbmRlck51bWJlcmluZ01hcmtlcihcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmdlbmVyYWxQcm9wZXJ0aWVzLnNjYWxpbmdSYXRpb1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbnVtYmVyaW5nRWxlbWVudC5jbGFzc05hbWUgPSAnbnVtYmVyaW5nTWFya2VyJztcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuYXBwZW5kQ2hpbGQobnVtYmVyaW5nRWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyVGV4dExpbmVzKHBhcmFncmFwaENlbGwuZWxlbWVudCwgcm93KTtcbiAgICAgICAgICAgIGZyYWdtZW50LnB1c2gocGFyYWdyYXBoQ2VsbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJUZXh0TGluZXMocGFyZW50OiBOb2RlLCByb3c6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBsaW5lc0NvbnRhaW5lckVsZW1lbnQgPSB0aGlzLnJlbmRlcmluZ0hlbHBlci5jcmVhdGVEaXZDb250YWluZXIoJ2xpbmVzLWNvbnRhaW5lcicpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhTZXR0aW5ncyA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhTZXR0aW5ncyhyb3cpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhIZWlnaHQgPSBQYXJhZ3JhcGhIZWxwZXIuZ2V0UGFyYWdyYXBoSGVpZ2h0KHBhcmFncmFwaFNldHRpbmdzLnRleHRMaW5lc0luZm8pO1xuICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUobGluZXNDb250YWluZXJFbGVtZW50LnN0eWxlLCAnaGVpZ2h0JywgYCR7cGFyYWdyYXBoSGVpZ2h0fXB4YCk7XG4gICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChsaW5lc0NvbnRhaW5lckVsZW1lbnQpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucG9zaXRpb25Ub0luZGV4KHsgcm93LCBjb2x1bW46IDAgfSk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBvc2l0aW9uVG9JbmRleCh7IHJvdzogcm93ICsgMSwgY29sdW1uOiAwIH0pIC0gMTtcbiAgICAgICAgY29uc3QgY29tYmluZWRGb3JtYXRzID0gRm9ybWF0U3R5bGVIZWxwZXIuY29tYmluZVNlY3Rpb24oXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ubW9kZWwuZm9ybWF0cyxcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5tb2RlbC5saW5rcyxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBlbmRJbmRleFxuICAgICAgICApLm1hcChcbiAgICAgICAgICAgIHggPT5cbiAgICAgICAgICAgICAgICBuZXcgRm9ybWF0RXh0TW9kZWwoe1xuICAgICAgICAgICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLnNlc3Npb24ubW9kZWwuY29udGVudC5zdWJzdHJpbmcoeC5zdGFydEluZGV4LCB4LmVuZEluZGV4ICsgMSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzcGxpdHMgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBoc1tyb3ddLm5leHRMaW5lSW5kZXhlcztcbiAgICAgICAgaWYgKHNwbGl0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IHN0YXJ0SW5kZXgsIGVuZDogZW5kSW5kZXggfSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmluZ0hlbHBlci5yZW5kZXJDb250ZW50V3JhcHBlZExpbmUoXG4gICAgICAgICAgICAgICAgeyBjdXJyZW50RWxlbWVudDogdGhpcy5lbGVtZW50LCBwYXJlbnROb2RlOiBsaW5lc0NvbnRhaW5lckVsZW1lbnQgfSxcbiAgICAgICAgICAgICAgICBzcGxpdHMsXG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgY29tYmluZWRGb3JtYXRzLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMuc2NhbGluZ1JhdGlvLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5tb2RlbC5icmVha3NcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJpbmdPZmZzZXRMZWZ0ID1cbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IHBhcmFncmFwaFNldHRpbmdzLm51bWJlcmluZ0RhdGEud2lkdGggKyBwYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLnBhZGRpbmdMZWZ0O1xuICAgICAgICAgICAgY29uc3QgbGFzdExpbmVFbCA9IHRoaXMucmVuZGVyaW5nSGVscGVyLmNyZWF0ZUxpbmVFbGVtZW50KFxuICAgICAgICAgICAgICAgIHBhcmFncmFwaFNldHRpbmdzLnRleHRMaW5lc0luZm9bMF0sXG4gICAgICAgICAgICAgICAgbnVtYmVyaW5nT2Zmc2V0TGVmdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMuc2NhbGluZ1JhdGlvXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGluZXNDb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGxhc3RMaW5lRWwpO1xuICAgICAgICAgICAgY29uc3Qgcm93RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBzdGFydEluZGV4LCBlbmQ6IGVuZEluZGV4IH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmdIZWxwZXIucmVuZGVyQ29udGVudFNpbXBsZUxpbmUoXG4gICAgICAgICAgICAgICAgeyBjdXJyZW50RWxlbWVudDogdGhpcy5lbGVtZW50LCBwYXJlbnROb2RlOiBsYXN0TGluZUVsIH0sXG4gICAgICAgICAgICAgICAgY29tYmluZWRGb3JtYXRzLFxuICAgICAgICAgICAgICAgIHJvd0Rpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ubW9kZWwuYnJlYWtzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYWdlc0NvdW50Q2hhbmdlZEhhbmRsZXIgPSAoZXZlbnQ6IHsgcGFnZXNDb3VudDogbnVtYmVyOyBwYWdlSGVpZ2h0OiBudW1iZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLmxpbmVzLnNldFNpemVzKGV2ZW50LnBhZ2VzQ291bnQsIGV2ZW50LnBhZ2VIZWlnaHQpO1xuICAgIH07XG59XG4iXX0=
|