@skyux/text-editor 9.0.0-alpha.8 → 9.0.0-beta.0
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/documentation.json +377 -490
- package/esm2022/lib/modules/shared/sky-text-editor-resources.module.mjs +4 -2
- package/esm2022/lib/modules/text-editor/menubar/text-editor-menubar.component.mjs +37 -26
- package/esm2022/lib/modules/text-editor/text-editor.component.mjs +40 -33
- package/esm2022/lib/modules/text-editor/text-editor.module.mjs +5 -81
- package/esm2022/lib/modules/text-editor/toolbar/text-editor-toolbar.component.mjs +51 -37
- package/esm2022/lib/modules/text-editor/url-modal/text-editor-url-modal.component.mjs +36 -21
- package/fesm2022/skyux-text-editor.mjs +226 -254
- package/fesm2022/skyux-text-editor.mjs.map +1 -1
- package/lib/modules/text-editor/menubar/text-editor-menubar.component.d.ts +2 -5
- package/lib/modules/text-editor/text-editor.component.d.ts +5 -9
- package/lib/modules/text-editor/text-editor.module.d.ts +1 -16
- package/lib/modules/text-editor/toolbar/text-editor-toolbar.component.d.ts +2 -5
- package/lib/modules/text-editor/url-modal/text-editor-url-modal.component.d.ts +2 -4
- package/package.json +12 -12
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* istanbul ignore file */
|
|
1
2
|
/**
|
|
2
3
|
* NOTICE: DO NOT MODIFY THIS FILE!
|
|
3
4
|
* The contents of this file were automatically generated by
|
|
@@ -5,7 +6,7 @@
|
|
|
5
6
|
* To update this file, simply rerun the command.
|
|
6
7
|
*/
|
|
7
8
|
import { NgModule } from '@angular/core';
|
|
8
|
-
import { SKY_LIB_RESOURCES_PROVIDERS, SkyI18nModule, getLibStringForLocale, } from '@skyux/i18n';
|
|
9
|
+
import { SKY_LIB_RESOURCES_PROVIDERS, SkyI18nModule, SkyLibResourcesService, getLibStringForLocale, } from '@skyux/i18n';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
const RESOURCES = {
|
|
11
12
|
'EN-US': {
|
|
@@ -71,6 +72,7 @@ const RESOURCES = {
|
|
|
71
72
|
skyux_text_editor_url_modal_cancel_button_label: { message: 'Cancel' },
|
|
72
73
|
},
|
|
73
74
|
};
|
|
75
|
+
SkyLibResourcesService.addResources(RESOURCES);
|
|
74
76
|
export class SkyTextEditorResourcesProvider {
|
|
75
77
|
getString(localeInfo, name) {
|
|
76
78
|
return getLibStringForLocale(RESOURCES, localeInfo.locale, name);
|
|
@@ -103,4 +105,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
|
103
105
|
],
|
|
104
106
|
}]
|
|
105
107
|
}] });
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5LXRleHQtZWRpdG9yLXJlc291cmNlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3NoYXJlZC9za3ktdGV4dC1lZGl0b3ItcmVzb3VyY2VzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFFMUI7Ozs7O0dBS0c7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCwyQkFBMkIsRUFFM0IsYUFBYSxFQUdiLHNCQUFzQixFQUN0QixxQkFBcUIsR0FDdEIsTUFBTSxhQUFhLENBQUM7O0FBRXJCLE1BQU0sU0FBUyxHQUEwQztJQUN2RCxPQUFPLEVBQUU7UUFDUCwrQ0FBK0MsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7UUFDcEUsc0RBQXNELEVBQUU7WUFDdEQsT0FBTyxFQUFFLFFBQVE7U0FDbEI7UUFDRCxpREFBaUQsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7UUFDeEUsd0RBQXdELEVBQUU7WUFDeEQsT0FBTyxFQUFFLFFBQVE7U0FDbEI7UUFDRCxvREFBb0QsRUFBRTtZQUNwRCxPQUFPLEVBQUUsV0FBVztTQUNyQjtRQUNELDJEQUEyRCxFQUFFO1lBQzNELE9BQU8sRUFBRSxRQUFRO1NBQ2xCO1FBQ0Qsd0RBQXdELEVBQUU7WUFDeEQsT0FBTyxFQUFFLGVBQWU7U0FDekI7UUFDRCwyREFBMkQsRUFBRTtZQUMzRCxPQUFPLEVBQUUsa0JBQWtCO1NBQzVCO1FBQ0QsNkNBQTZDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ2xFLG9EQUFvRCxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtRQUMzRSw2Q0FBNkMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7UUFDbEUsb0RBQW9ELEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO1FBQzNFLDRDQUE0QyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtRQUNoRSxtREFBbUQsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7UUFDMUUsNkNBQTZDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ2xFLG9EQUFvRCxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtRQUMzRSw4Q0FBOEMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7UUFDcEUscURBQXFELEVBQUU7WUFDckQsT0FBTyxFQUFFLFFBQVE7U0FDbEI7UUFDRCxtREFBbUQsRUFBRTtZQUNuRCxPQUFPLEVBQUUsWUFBWTtTQUN0QjtRQUNELDBEQUEwRCxFQUFFO1lBQzFELE9BQU8sRUFBRSxRQUFRO1NBQ2xCO1FBQ0Qsb0RBQW9ELEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQ3pFLHNEQUFzRCxFQUFFO1lBQ3RELE9BQU8sRUFBRSxRQUFRO1NBQ2xCO1FBQ0Qsc0RBQXNELEVBQUU7WUFDdEQsT0FBTyxFQUFFLG9CQUFvQjtTQUM5QjtRQUNELHdDQUF3QyxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRTtRQUNwRSxxQ0FBcUMsRUFBRTtZQUNyQyxPQUFPLEVBQUUseUJBQXlCO1NBQ25DO1FBQ0Qsc0NBQXNDLEVBQUU7WUFDdEMsT0FBTyxFQUFFLHVCQUF1QjtTQUNqQztRQUNELGdEQUFnRCxFQUFFO1lBQ2hELE9BQU8sRUFBRSxnQkFBZ0I7U0FDMUI7UUFDRCw0Q0FBNEMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUU7UUFDdkUsdUNBQXVDLEVBQUUsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFO1FBQ3JFLHlDQUF5QyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRTtRQUN0RSw2Q0FBNkMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7UUFDbEUsK0NBQStDLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO0tBQ3ZFO0NBQ0YsQ0FBQztBQUVGLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUUvQyxNQUFNLE9BQU8sOEJBQThCO0lBQ2xDLFNBQVMsQ0FDZCxVQUE0QixFQUM1QixJQUFZO1FBRVosT0FBTyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQVdILE1BQU0sT0FBTyw0QkFBNEI7OEdBQTVCLDRCQUE0QjsrR0FBNUIsNEJBQTRCLFlBVDdCLGFBQWE7K0dBU1osNEJBQTRCLGFBUjVCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLDJCQUEyQjtnQkFDcEMsUUFBUSxFQUFFLDhCQUE4QjtnQkFDeEMsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLFlBUFMsYUFBYTs7MkZBU1osNEJBQTRCO2tCQVZ4QyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztvQkFDeEIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSwyQkFBMkI7NEJBQ3BDLFFBQVEsRUFBRSw4QkFBOEI7NEJBQ3hDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cblxuLyoqXG4gKiBOT1RJQ0U6IERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFIVxuICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSB3ZXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5XG4gKiB0aGUgJ25nIGdlbmVyYXRlIEBza3l1eC9pMThuOmxpYi1yZXNvdXJjZXMtbW9kdWxlIGxpYi9tb2R1bGVzL3NoYXJlZC9za3ktdGV4dC1lZGl0b3InIHNjaGVtYXRpYy5cbiAqIFRvIHVwZGF0ZSB0aGlzIGZpbGUsIHNpbXBseSByZXJ1biB0aGUgY29tbWFuZC5cbiAqL1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNLWV9MSUJfUkVTT1VSQ0VTX1BST1ZJREVSUyxcbiAgU2t5QXBwTG9jYWxlSW5mbyxcbiAgU2t5STE4bk1vZHVsZSxcbiAgU2t5TGliUmVzb3VyY2VzLFxuICBTa3lMaWJSZXNvdXJjZXNQcm92aWRlcixcbiAgU2t5TGliUmVzb3VyY2VzU2VydmljZSxcbiAgZ2V0TGliU3RyaW5nRm9yTG9jYWxlLFxufSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmNvbnN0IFJFU09VUkNFUzogeyBbbG9jYWxlOiBzdHJpbmddOiBTa3lMaWJSZXNvdXJjZXMgfSA9IHtcbiAgJ0VOLVVTJzoge1xuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9ib2xkX2xhYmVsOiB7IG1lc3NhZ2U6ICdCb2xkJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl9ib2xkX2tleV9zaG9ydGN1dDoge1xuICAgICAgbWVzc2FnZTogJ0N0cmwrQicsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25faXRhbGljX2xhYmVsOiB7IG1lc3NhZ2U6ICdJdGFsaWMnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZm9ybWF0X21lbnVfYWN0aW9uX2l0YWxpY19rZXlfc2hvcnRjdXQ6IHtcbiAgICAgIG1lc3NhZ2U6ICdDdHJsK0knLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZm9ybWF0X21lbnVfYWN0aW9uX3VuZGVybGluZV9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ1VuZGVybGluZScsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25fdW5kZXJsaW5lX2tleV9zaG9ydGN1dDoge1xuICAgICAgbWVzc2FnZTogJ0N0cmwrVScsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9mb3JtYXRfbWVudV9hY3Rpb25fc3RyaWtldGhyb3VnaF9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ1N0cmlrZXRocm91Z2gnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZm9ybWF0X21lbnVfYWN0aW9uX2NsZWFyX2Zvcm1hdHRpbmdfbGFiZWw6IHtcbiAgICAgIG1lc3NhZ2U6ICdDbGVhciBmb3JtYXR0aW5nJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fdW5kb19sYWJlbDogeyBtZXNzYWdlOiAnVW5kbycgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3VuZG9fa2V5X3Nob3J0Y3V0OiB7IG1lc3NhZ2U6ICdDdHJsK1onIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9yZWRvX2xhYmVsOiB7IG1lc3NhZ2U6ICdSZWRvJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fcmVkb19rZXlfc2hvcnRjdXQ6IHsgbWVzc2FnZTogJ0N0cmwrWScgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX2N1dF9sYWJlbDogeyBtZXNzYWdlOiAnQ3V0JyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fY3V0X2tleV9zaG9ydGN1dDogeyBtZXNzYWdlOiAnQ3RybCtYJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fY29weV9sYWJlbDogeyBtZXNzYWdlOiAnQ29weScgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX2NvcHlfa2V5X3Nob3J0Y3V0OiB7IG1lc3NhZ2U6ICdDdHJsK0MnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9wYXN0ZV9sYWJlbDogeyBtZXNzYWdlOiAnUGFzdGUnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9wYXN0ZV9rZXlfc2hvcnRjdXQ6IHtcbiAgICAgIG1lc3NhZ2U6ICdDdHJsK1YnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfZWRpdF9tZW51X2FjdGlvbl9zZWxlY3RfYWxsX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnU2VsZWN0IGFsbCcsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uX3NlbGVjdF9hbGxfa2V5X3Nob3J0Y3V0OiB7XG4gICAgICBtZXNzYWdlOiAnQ3RybCtBJyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX21lbnViYXJfZHJvcGRvd25fYnV0dG9uX2VkaXRfbGFiZWw6IHsgbWVzc2FnZTogJ0VkaXQnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfbWVudWJhcl9kcm9wZG93bl9idXR0b25fZm9ybWF0X2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnRm9ybWF0JyxcbiAgICB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX21lbnViYXJfZHJvcGRvd25fYnV0dG9uX2luc2VydF9sYWJlbDoge1xuICAgICAgbWVzc2FnZTogJ0luc2VydCBtZXJnZSBmaWVsZCcsXG4gICAgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfaGVhZGVyX2xhYmVsOiB7IG1lc3NhZ2U6ICdDcmVhdGUgbGluaycgfSxcbiAgICBza3l1eF90ZXh0X2VkaXRvcl91cmxfbW9kYWxfdXJsX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnRW50ZXIgYSBVUkwgdG8gbGluayB0bzonLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX29wZW5fbGFiZWw6IHtcbiAgICAgIG1lc3NhZ2U6ICdXaGVyZSBzaG91bGQgaXQgb3Blbj8nLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2N1cnJlbnRfb3B0aW9uX2xhYmVsOiB7XG4gICAgICBtZXNzYWdlOiAnQ3VycmVudCB3aW5kb3cnLFxuICAgIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX25ld19vcHRpb25fbGFiZWw6IHsgbWVzc2FnZTogJ05ldyB3aW5kb3cnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX2VtYWlsX2xhYmVsOiB7IG1lc3NhZ2U6ICdFbWFpbCBhZGRyZXNzJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9zdWJqZWN0X2xhYmVsOiB7IG1lc3NhZ2U6ICdTdWJqZWN0IGxpbmUnIH0sXG4gICAgc2t5dXhfdGV4dF9lZGl0b3JfdXJsX21vZGFsX3NhdmVfYnV0dG9uX2xhYmVsOiB7IG1lc3NhZ2U6ICdTYXZlJyB9LFxuICAgIHNreXV4X3RleHRfZWRpdG9yX3VybF9tb2RhbF9jYW5jZWxfYnV0dG9uX2xhYmVsOiB7IG1lc3NhZ2U6ICdDYW5jZWwnIH0sXG4gIH0sXG59O1xuXG5Ta3lMaWJSZXNvdXJjZXNTZXJ2aWNlLmFkZFJlc291cmNlcyhSRVNPVVJDRVMpO1xuXG5leHBvcnQgY2xhc3MgU2t5VGV4dEVkaXRvclJlc291cmNlc1Byb3ZpZGVyIGltcGxlbWVudHMgU2t5TGliUmVzb3VyY2VzUHJvdmlkZXIge1xuICBwdWJsaWMgZ2V0U3RyaW5nKFxuICAgIGxvY2FsZUluZm86IFNreUFwcExvY2FsZUluZm8sXG4gICAgbmFtZTogc3RyaW5nXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGdldExpYlN0cmluZ0ZvckxvY2FsZShSRVNPVVJDRVMsIGxvY2FsZUluZm8ubG9jYWxlLCBuYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcG9ydCBpbnRvIGFueSBjb21wb25lbnQgbGlicmFyeSBtb2R1bGUgdGhhdCBuZWVkcyB0byB1c2UgcmVzb3VyY2Ugc3RyaW5ncy5cbiAqL1xuQE5nTW9kdWxlKHtcbiAgZXhwb3J0czogW1NreUkxOG5Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBTS1lfTElCX1JFU09VUkNFU19QUk9WSURFUlMsXG4gICAgICB1c2VDbGFzczogU2t5VGV4dEVkaXRvclJlc291cmNlc1Byb3ZpZGVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5VGV4dEVkaXRvclJlc291cmNlc01vZHVsZSB7fVxuIl19
|
|
@@ -1,22 +1,40 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, inject, } from '@angular/core';
|
|
3
|
+
import { SkyLibResourcesService } from '@skyux/i18n';
|
|
4
|
+
import { SkyToolbarModule } from '@skyux/layout';
|
|
5
|
+
import { SkyDropdownMessageType, SkyDropdownModule, } from '@skyux/popovers';
|
|
6
|
+
import { SkyThemeModule } from '@skyux/theme';
|
|
3
7
|
import he from 'he';
|
|
4
8
|
import { Subject } from 'rxjs';
|
|
5
9
|
import { take, takeUntil } from 'rxjs/operators';
|
|
6
10
|
import { SkyFormsUtility } from '../../shared/forms-utility';
|
|
11
|
+
import { SkyTextEditorResourcesModule } from '../../shared/sky-text-editor-resources.module';
|
|
12
|
+
import { SkyTextEditorAdapterService } from '../services/text-editor-adapter.service';
|
|
7
13
|
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "
|
|
9
|
-
import * as i2 from "@skyux/
|
|
10
|
-
import * as i3 from "@
|
|
11
|
-
import * as i4 from "@skyux/
|
|
12
|
-
import * as i5 from "@skyux/
|
|
13
|
-
import * as i6 from "@skyux/layout";
|
|
14
|
+
import * as i1 from "@angular/common";
|
|
15
|
+
import * as i2 from "@skyux/popovers";
|
|
16
|
+
import * as i3 from "@skyux/i18n";
|
|
17
|
+
import * as i4 from "@skyux/theme";
|
|
18
|
+
import * as i5 from "@skyux/layout";
|
|
14
19
|
const FORMAT_MENU_ACTION = 'skyux_text_editor_format_menu_action_';
|
|
15
20
|
const EDIT_MENU_ACTION = 'skyux_text_editor_edit_menu_action_';
|
|
16
21
|
/**
|
|
17
22
|
* @internal
|
|
18
23
|
*/
|
|
19
24
|
export class SkyTextEditorMenubarComponent {
|
|
25
|
+
constructor() {
|
|
26
|
+
this.editorFocusStream = new Subject();
|
|
27
|
+
this.menus = [];
|
|
28
|
+
this.mergeFields = [];
|
|
29
|
+
this.#_disabled = false;
|
|
30
|
+
this.editDropdownStream = new Subject();
|
|
31
|
+
this.formatDropdownStream = new Subject();
|
|
32
|
+
this.mergeFieldDropdownStream = new Subject();
|
|
33
|
+
this.#ngUnsubscribe = new Subject();
|
|
34
|
+
this.#adapterService = inject(SkyTextEditorAdapterService);
|
|
35
|
+
this.#changeDetector = inject(ChangeDetectorRef);
|
|
36
|
+
this.#resources = inject(SkyLibResourcesService);
|
|
37
|
+
}
|
|
20
38
|
set disabled(value) {
|
|
21
39
|
const coercedValue = SkyFormsUtility.coerceBooleanProperty(value);
|
|
22
40
|
if (coercedValue !== this.disabled) {
|
|
@@ -32,19 +50,6 @@ export class SkyTextEditorMenubarComponent {
|
|
|
32
50
|
#adapterService;
|
|
33
51
|
#changeDetector;
|
|
34
52
|
#resources;
|
|
35
|
-
constructor(adapterService, changeDetector, resources) {
|
|
36
|
-
this.editorFocusStream = new Subject();
|
|
37
|
-
this.menus = [];
|
|
38
|
-
this.mergeFields = [];
|
|
39
|
-
this.#_disabled = false;
|
|
40
|
-
this.editDropdownStream = new Subject();
|
|
41
|
-
this.formatDropdownStream = new Subject();
|
|
42
|
-
this.mergeFieldDropdownStream = new Subject();
|
|
43
|
-
this.#ngUnsubscribe = new Subject();
|
|
44
|
-
this.#adapterService = adapterService;
|
|
45
|
-
this.#changeDetector = changeDetector;
|
|
46
|
-
this.#resources = resources;
|
|
47
|
-
}
|
|
48
53
|
ngOnInit() {
|
|
49
54
|
this.editorFocusStream
|
|
50
55
|
.pipe(takeUntil(this.#ngUnsubscribe))
|
|
@@ -179,13 +184,19 @@ export class SkyTextEditorMenubarComponent {
|
|
|
179
184
|
}
|
|
180
185
|
this.execCommand('removeFormat');
|
|
181
186
|
}
|
|
182
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyTextEditorMenubarComponent, deps: [
|
|
183
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SkyTextEditorMenubarComponent, selector: "sky-text-editor-menubar", inputs: { editorFocusStream: "editorFocusStream", menus: "menus", mergeFields: "mergeFields", disabled: "disabled" }, ngImport: i0, template: "<sky-toolbar-item\n *ngFor=\"let menu of menus\"\n class=\"sky-text-editor-menu\"\n [ngClass]=\"'sky-text-editor-menu-' + menu\"\n>\n <ng-container [ngSwitch]=\"menu\">\n <ng-container *ngSwitchCase=\"'edit'\">\n <sky-dropdown\n label=\"Edit menu\"\n [disabled]=\"disabled\"\n [messageStream]=\"editDropdownStream\"\n >\n <sky-dropdown-button>\n {{\n 'skyux_text_editor_menubar_dropdown_button_edit_label'\n | skyLibResources\n }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let editItem of editItems\">\n <button\n *ngIf=\"!editItem.isDivider\"\n type=\"button\"\n (click)=\"editItem?.function()\"\n >\n {{ editItem.label }}\n <div\n *ngIf=\"editItem.keyShortcut\"\n class=\"sky-text-editor-menu-key-shortcut\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'modern',\n 'sky-deemphasized': 'default'\n }\"\n >\n {{ editItem.keyShortcut }}\n </div>\n </button>\n <div\n *ngIf=\"editItem.isDivider\"\n class=\"sky-text-editor-dropdown-item-divider\"\n role=\"divider\"\n ></div>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n <ng-container *ngSwitchCase=\"'format'\">\n <sky-dropdown\n label=\"Format menu\"\n [disabled]=\"disabled\"\n [messageStream]=\"formatDropdownStream\"\n >\n <sky-dropdown-button>\n {{\n 'skyux_text_editor_menubar_dropdown_button_format_label'\n | skyLibResources\n }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let formatItem of formatItems\">\n <button\n *ngIf=\"!formatItem.isDivider\"\n type=\"button\"\n (click)=\"formatItem?.function()\"\n >\n {{ formatItem.label }}\n <div\n *ngIf=\"formatItem.keyShortcut\"\n class=\"sky-text-editor-menu-key-shortcut\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'modern',\n 'sky-deemphasized': 'default'\n }\"\n >\n {{ formatItem.keyShortcut }}\n </div>\n </button>\n <div\n *ngIf=\"formatItem.isDivider\"\n class=\"sky-text-editor-dropdown-item-divider\"\n role=\"divider\"\n ></div>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n <ng-container *ngSwitchCase=\"'merge-field'\">\n <sky-dropdown\n *ngIf=\"mergeFields && mergeFields.length > 0\"\n label=\"Insert merge field\"\n [disabled]=\"disabled\"\n [messageStream]=\"mergeFieldDropdownStream\"\n >\n <sky-dropdown-button>\n {{\n 'skyux_text_editor_menubar_dropdown_button_insert_label'\n | skyLibResources\n }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let mergeField of mergeFields\">\n <button type=\"button\" (click)=\"insertMergeField(mergeField)\">\n {{ mergeField.name }}\n </button>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n </ng-container>\n</sky-toolbar-item>\n", styles: [".sky-text-editor-dropdown-item-divider{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,.1);cursor:default;filter:none}.sky-text-editor-menu-key-shortcut{float:right;margin-left:15px}\n"], dependencies: [{ kind: "directive", type:
|
|
187
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyTextEditorMenubarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
188
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SkyTextEditorMenubarComponent, isStandalone: true, selector: "sky-text-editor-menubar", inputs: { editorFocusStream: "editorFocusStream", menus: "menus", mergeFields: "mergeFields", disabled: "disabled" }, ngImport: i0, template: "<sky-toolbar-item\n *ngFor=\"let menu of menus\"\n class=\"sky-text-editor-menu\"\n [ngClass]=\"'sky-text-editor-menu-' + menu\"\n>\n <ng-container [ngSwitch]=\"menu\">\n <ng-container *ngSwitchCase=\"'edit'\">\n <sky-dropdown\n label=\"Edit menu\"\n [disabled]=\"disabled\"\n [messageStream]=\"editDropdownStream\"\n >\n <sky-dropdown-button>\n {{\n 'skyux_text_editor_menubar_dropdown_button_edit_label'\n | skyLibResources\n }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let editItem of editItems\">\n <button\n *ngIf=\"!editItem.isDivider\"\n type=\"button\"\n (click)=\"editItem?.function()\"\n >\n {{ editItem.label }}\n <div\n *ngIf=\"editItem.keyShortcut\"\n class=\"sky-text-editor-menu-key-shortcut\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'modern',\n 'sky-deemphasized': 'default'\n }\"\n >\n {{ editItem.keyShortcut }}\n </div>\n </button>\n <div\n *ngIf=\"editItem.isDivider\"\n class=\"sky-text-editor-dropdown-item-divider\"\n role=\"divider\"\n ></div>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n <ng-container *ngSwitchCase=\"'format'\">\n <sky-dropdown\n label=\"Format menu\"\n [disabled]=\"disabled\"\n [messageStream]=\"formatDropdownStream\"\n >\n <sky-dropdown-button>\n {{\n 'skyux_text_editor_menubar_dropdown_button_format_label'\n | skyLibResources\n }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let formatItem of formatItems\">\n <button\n *ngIf=\"!formatItem.isDivider\"\n type=\"button\"\n (click)=\"formatItem?.function()\"\n >\n {{ formatItem.label }}\n <div\n *ngIf=\"formatItem.keyShortcut\"\n class=\"sky-text-editor-menu-key-shortcut\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'modern',\n 'sky-deemphasized': 'default'\n }\"\n >\n {{ formatItem.keyShortcut }}\n </div>\n </button>\n <div\n *ngIf=\"formatItem.isDivider\"\n class=\"sky-text-editor-dropdown-item-divider\"\n role=\"divider\"\n ></div>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n <ng-container *ngSwitchCase=\"'merge-field'\">\n <sky-dropdown\n *ngIf=\"mergeFields && mergeFields.length > 0\"\n label=\"Insert merge field\"\n [disabled]=\"disabled\"\n [messageStream]=\"mergeFieldDropdownStream\"\n >\n <sky-dropdown-button>\n {{\n 'skyux_text_editor_menubar_dropdown_button_insert_label'\n | skyLibResources\n }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let mergeField of mergeFields\">\n <button type=\"button\" (click)=\"insertMergeField(mergeField)\">\n {{ mergeField.name }}\n </button>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n </ng-container>\n</sky-toolbar-item>\n", styles: [".sky-text-editor-dropdown-item-divider{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,.1);cursor:default;filter:none}.sky-text-editor-menu-key-shortcut{float:right;margin-left:15px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: SkyDropdownModule }, { kind: "component", type: i2.λ2, selector: "sky-dropdown-button" }, { kind: "component", type: i2.λ3, selector: "sky-dropdown", inputs: ["buttonStyle", "buttonType", "disabled", "dismissOnBlur", "label", "horizontalAlignment", "messageStream", "title", "trigger"] }, { kind: "component", type: i2.λ1, selector: "sky-dropdown-item", inputs: ["ariaRole"] }, { kind: "component", type: i2.λ4, selector: "sky-dropdown-menu", inputs: ["ariaLabelledBy", "ariaRole", "useNativeFocus"], outputs: ["menuChanges"] }, { kind: "ngmodule", type: SkyTextEditorResourcesModule }, { kind: "pipe", type: i3.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "ngmodule", type: SkyThemeModule }, { kind: "directive", type: i4.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "ngmodule", type: SkyToolbarModule }, { kind: "component", type: i5.λ39, selector: "sky-toolbar-item" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
184
189
|
}
|
|
185
190
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyTextEditorMenubarComponent, decorators: [{
|
|
186
191
|
type: Component,
|
|
187
|
-
args: [{ selector: 'sky-text-editor-menubar', changeDetection: ChangeDetectionStrategy.OnPush,
|
|
188
|
-
|
|
192
|
+
args: [{ standalone: true, selector: 'sky-text-editor-menubar', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
193
|
+
CommonModule,
|
|
194
|
+
SkyDropdownModule,
|
|
195
|
+
SkyTextEditorResourcesModule,
|
|
196
|
+
SkyThemeModule,
|
|
197
|
+
SkyToolbarModule,
|
|
198
|
+
], template: "<sky-toolbar-item\n *ngFor=\"let menu of menus\"\n class=\"sky-text-editor-menu\"\n [ngClass]=\"'sky-text-editor-menu-' + menu\"\n>\n <ng-container [ngSwitch]=\"menu\">\n <ng-container *ngSwitchCase=\"'edit'\">\n <sky-dropdown\n label=\"Edit menu\"\n [disabled]=\"disabled\"\n [messageStream]=\"editDropdownStream\"\n >\n <sky-dropdown-button>\n {{\n 'skyux_text_editor_menubar_dropdown_button_edit_label'\n | skyLibResources\n }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let editItem of editItems\">\n <button\n *ngIf=\"!editItem.isDivider\"\n type=\"button\"\n (click)=\"editItem?.function()\"\n >\n {{ editItem.label }}\n <div\n *ngIf=\"editItem.keyShortcut\"\n class=\"sky-text-editor-menu-key-shortcut\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'modern',\n 'sky-deemphasized': 'default'\n }\"\n >\n {{ editItem.keyShortcut }}\n </div>\n </button>\n <div\n *ngIf=\"editItem.isDivider\"\n class=\"sky-text-editor-dropdown-item-divider\"\n role=\"divider\"\n ></div>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n <ng-container *ngSwitchCase=\"'format'\">\n <sky-dropdown\n label=\"Format menu\"\n [disabled]=\"disabled\"\n [messageStream]=\"formatDropdownStream\"\n >\n <sky-dropdown-button>\n {{\n 'skyux_text_editor_menubar_dropdown_button_format_label'\n | skyLibResources\n }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let formatItem of formatItems\">\n <button\n *ngIf=\"!formatItem.isDivider\"\n type=\"button\"\n (click)=\"formatItem?.function()\"\n >\n {{ formatItem.label }}\n <div\n *ngIf=\"formatItem.keyShortcut\"\n class=\"sky-text-editor-menu-key-shortcut\"\n [skyThemeClass]=\"{\n 'sky-font-deemphasized': 'modern',\n 'sky-deemphasized': 'default'\n }\"\n >\n {{ formatItem.keyShortcut }}\n </div>\n </button>\n <div\n *ngIf=\"formatItem.isDivider\"\n class=\"sky-text-editor-dropdown-item-divider\"\n role=\"divider\"\n ></div>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n <ng-container *ngSwitchCase=\"'merge-field'\">\n <sky-dropdown\n *ngIf=\"mergeFields && mergeFields.length > 0\"\n label=\"Insert merge field\"\n [disabled]=\"disabled\"\n [messageStream]=\"mergeFieldDropdownStream\"\n >\n <sky-dropdown-button>\n {{\n 'skyux_text_editor_menubar_dropdown_button_insert_label'\n | skyLibResources\n }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let mergeField of mergeFields\">\n <button type=\"button\" (click)=\"insertMergeField(mergeField)\">\n {{ mergeField.name }}\n </button>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </ng-container>\n </ng-container>\n</sky-toolbar-item>\n", styles: [".sky-text-editor-dropdown-item-divider{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,.1);cursor:default;filter:none}.sky-text-editor-menu-key-shortcut{float:right;margin-left:15px}\n"] }]
|
|
199
|
+
}], propDecorators: { editorFocusStream: [{
|
|
189
200
|
type: Input
|
|
190
201
|
}], menus: [{
|
|
191
202
|
type: Input
|
|
@@ -194,4 +205,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
|
194
205
|
}], disabled: [{
|
|
195
206
|
type: Input
|
|
196
207
|
}] } });
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFzQixzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7OztBQUs3RCxNQUFNLGtCQUFrQixHQUFHLHVDQUF1QyxDQUFDO0FBQ25FLE1BQU0sZ0JBQWdCLEdBQUcscUNBQXFDLENBQUM7QUFFL0Q7O0dBRUc7QUFPSCxNQUFNLE9BQU8sNkJBQTZCO0lBVXhDLElBQ1csUUFBUSxDQUFDLEtBQWM7UUFDaEMsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLElBQUksWUFBWSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxZ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QkFBeUIsbUJBR2xCLHVCQUF1QixDQUFDLE1BQU07dUxBSXhDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFJQyxLQUFLO3NCQURYLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJSyxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuaW1wb3J0IHsgU2t5RHJvcGRvd25NZXNzYWdlLCBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlIH0gZnJvbSAnQHNreXV4L3BvcG92ZXJzJztcblxuaW1wb3J0IGhlIGZyb20gJ2hlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5Rm9ybXNVdGlsaXR5IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zLXV0aWxpdHknO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGV4dC1lZGl0b3ItYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JNZW51VHlwZSB9IGZyb20gJy4uL3R5cGVzL21lbnUtdHlwZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZCB9IGZyb20gJy4uL3R5cGVzL3RleHQtZWRpdG9yLW1lcmdlLWZpZWxkJztcblxuY29uc3QgRk9STUFUX01FTlVfQUNUSU9OID0gJ3NreXV4X3RleHRfZWRpdG9yX2Zvcm1hdF9tZW51X2FjdGlvbl8nO1xuY29uc3QgRURJVF9NRU5VX0FDVElPTiA9ICdza3l1eF90ZXh0X2VkaXRvcl9lZGl0X21lbnVfYWN0aW9uXyc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10ZXh0LWVkaXRvci1tZW51YmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHQtZWRpdG9yLW1lbnViYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZXh0LWVkaXRvci1tZW51YmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yTWVudWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIGVkaXRvckZvY3VzU3RyZWFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWVudXM6IFNreVRleHRFZGl0b3JNZW51VHlwZVtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1lcmdlRmllbGRzOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZFtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvZXJjZWRWYWx1ZSA9IFNreUZvcm1zVXRpbGl0eS5jb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIGlmIChjb2VyY2VkVmFsdWUgIT09IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuI19kaXNhYmxlZCA9IGNvZXJjZWRWYWx1ZTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gICNfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgZWRpdERyb3Bkb3duU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5RHJvcGRvd25NZXNzYWdlPigpO1xuXG4gIHB1YmxpYyBlZGl0SXRlbXM6XG4gICAgfCB7XG4gICAgICAgIGZ1bmN0aW9uPzogKCkgPT4gdm9pZDtcbiAgICAgICAgaXNEaXZpZGVyPzogYm9vbGVhbjtcbiAgICAgICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgICAgIGtleVNob3J0Y3V0Pzogc3RyaW5nO1xuICAgICAgfVtdXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGZvcm1hdERyb3Bkb3duU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5RHJvcGRvd25NZXNzYWdlPigpO1xuXG4gIHB1YmxpYyBmb3JtYXRJdGVtczpcbiAgICB8IHtcbiAgICAgICAgZnVuY3Rpb24/OiAoKSA9PiB2b2lkO1xuICAgICAgICBpc0RpdmlkZXI/OiBib29sZWFuO1xuICAgICAgICBsYWJlbD86IHN0cmluZztcbiAgICAgICAga2V5U2hvcnRjdXQ/OiBzdHJpbmc7XG4gICAgICB9W11cbiAgICB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgbWVyZ2VGaWVsZERyb3Bkb3duU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5RHJvcGRvd25NZXNzYWdlPigpO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgI2FkYXB0ZXJTZXJ2aWNlOiBTa3lUZXh0RWRpdG9yQWRhcHRlclNlcnZpY2U7XG4gICNjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICNyZXNvdXJjZXM6IFNreUxpYlJlc291cmNlc1NlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYWRhcHRlclNlcnZpY2U6IFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSxcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcmVzb3VyY2VzOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlID0gYWRhcHRlclNlcnZpY2U7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB0aGlzLiNyZXNvdXJjZXMgPSByZXNvdXJjZXM7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JGb2N1c1N0cmVhbVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd25zKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuI3Jlc291cmNlc1xuICAgICAgLmdldFN0cmluZ3Moe1xuICAgICAgICBib2xkOiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAnYm9sZF9sYWJlbCcsXG4gICAgICAgIGJvbGRTaG9ydDogRk9STUFUX01FTlVfQUNUSU9OICsgJ2JvbGRfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgaXRhbGljOiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAnaXRhbGljX2xhYmVsJyxcbiAgICAgICAgaXRhbGljU2hvcnQ6IEZPUk1BVF9NRU5VX0FDVElPTiArICdpdGFsaWNfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgdW5kZXJsaW5lOiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAndW5kZXJsaW5lX2xhYmVsJyxcbiAgICAgICAgdW5kZXJsaW5lU2hvcnQ6IEZPUk1BVF9NRU5VX0FDVElPTiArICd1bmRlcmxpbmVfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgc3RyaWtldGhyb3VnaDogRk9STUFUX01FTlVfQUNUSU9OICsgJ3N0cmlrZXRocm91Z2hfbGFiZWwnLFxuICAgICAgICBjbGVhckZvcm1hdHRpbmc6IEZPUk1BVF9NRU5VX0FDVElPTiArICdjbGVhcl9mb3JtYXR0aW5nX2xhYmVsJyxcbiAgICAgICAgdW5kbzogRURJVF9NRU5VX0FDVElPTiArICd1bmRvX2xhYmVsJyxcbiAgICAgICAgdW5kb1Nob3J0OiBFRElUX01FTlVfQUNUSU9OICsgJ3VuZG9fa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgcmVkbzogRURJVF9NRU5VX0FDVElPTiArICdyZWRvX2xhYmVsJyxcbiAgICAgICAgcmVkb1Nob3J0OiBFRElUX01FTlVfQUNUSU9OICsgJ3JlZG9fa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgY3V0OiBFRElUX01FTlVfQUNUSU9OICsgJ2N1dF9sYWJlbCcsXG4gICAgICAgIGN1dFNob3J0OiBFRElUX01FTlVfQUNUSU9OICsgJ2N1dF9rZXlfc2hvcnRjdXQnLFxuICAgICAgICBjb3B5OiBFRElUX01FTlVfQUNUSU9OICsgJ2NvcHlfbGFiZWwnLFxuICAgICAgICBjb3B5U2hvcnQ6IEVESVRfTUVOVV9BQ1RJT04gKyAnY29weV9rZXlfc2hvcnRjdXQnLFxuICAgICAgICBwYXN0ZTogRURJVF9NRU5VX0FDVElPTiArICdwYXN0ZV9sYWJlbCcsXG4gICAgICAgIHBhc3RlU2hvcnQ6IEVESVRfTUVOVV9BQ1RJT04gKyAncGFzdGVfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgc2VsZWN0QWxsOiBFRElUX01FTlVfQUNUSU9OICsgJ3NlbGVjdF9hbGxfbGFiZWwnLFxuICAgICAgICBzZWxlY3RBbGxTaG9ydDogRURJVF9NRU5VX0FDVElPTiArICdzZWxlY3RfYWxsX2tleV9zaG9ydGN1dCcsXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFrZSgxKSwgdGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgocmVzb3VyY2VzKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybWF0SXRlbXMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ2JvbGQnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuYm9sZCxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMuYm9sZFNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ2l0YWxpYycpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5pdGFsaWMsXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLml0YWxpY1Nob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3VuZGVybGluZScpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy51bmRlcmxpbmUsXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLnVuZGVybGluZVNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3N0cmlrZXRocm91Z2gnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuc3RyaWtldGhyb3VnaCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlzRGl2aWRlcjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKSA9PiB0aGlzLiNjbGVhckZvcm1hdCgpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5jbGVhckZvcm1hdHRpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5lZGl0SXRlbXMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3VuZG8nKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMudW5kbyxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMudW5kb1Nob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3JlZG8nKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMucmVkbyxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMucmVkb1Nob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaXNEaXZpZGVyOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ2N1dCcpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5jdXQsXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLmN1dFNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ2NvcHknKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuY29weSxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMuY29weVNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3Bhc3RlJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLnBhc3RlLFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy5wYXN0ZVNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaXNEaXZpZGVyOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5zZWxlY3RBbGwsXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLnNlbGVjdEFsbFNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZXhlY0NvbW1hbmQoY29tbWFuZDogc3RyaW5nLCB2YWx1ZSA9ICcnKTogdm9pZCB7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZXhlY0NvbW1hbmQoe1xuICAgICAgY29tbWFuZDogY29tbWFuZCxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnRNZXJnZUZpZWxkKGZpZWxkOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY0NvbW1hbmQoXG4gICAgICAnaW5zZXJ0SFRNTCcsXG4gICAgICAnPGltZyBzdHlsZT1cImRpc3BsYXk6IGlubGluZTsgY3Vyc29yOiBncmFiO1wiIGRhdGEtZmllbGRpZD1cIicgK1xuICAgICAgICBoZS5lc2NhcGUoZmllbGQuaWQpICtcbiAgICAgICAgJ1wiIGRhdGEtZmllbGRkaXNwbGF5PVwiJyArXG4gICAgICAgIGhlLmVzY2FwZShmaWVsZC5uYW1lKSArXG4gICAgICAgICdcIiBzcmM9XCInICtcbiAgICAgICAgKGZpZWxkLnByZXZpZXdJbWFnZVVybCB8fFxuICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldE1lcmdlRmllbGREYXRhVVJJKGZpZWxkLm5hbWUpKSArXG4gICAgICAgICdcIj4nXG4gICAgKTtcbiAgfVxuXG4gICNjbG9zZURyb3Bkb3ducygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXREcm9wZG93blN0cmVhbS5uZXh0KHsgdHlwZTogU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSB9KTtcbiAgICB0aGlzLmZvcm1hdERyb3Bkb3duU3RyZWFtLm5leHQoeyB0eXBlOiBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkNsb3NlIH0pO1xuICAgIHRoaXMubWVyZ2VGaWVsZERyb3Bkb3duU3RyZWFtLm5leHQoeyB0eXBlOiBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkNsb3NlIH0pO1xuICB9XG5cbiAgI2NsZWFyRm9ybWF0KCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLiNhZGFwdGVyU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoXG4gICAgICBjdXJyZW50U2VsZWN0aW9uICYmXG4gICAgICBjdXJyZW50U2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwICYmXG4gICAgICBjdXJyZW50U2VsZWN0aW9uLmdldFJhbmdlQXQoMCkudG9TdHJpbmcoKS5sZW5ndGggPD0gMFxuICAgICkge1xuICAgICAgdGhpcy5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJyk7XG4gICAgfVxuICAgIHRoaXMuZXhlY0NvbW1hbmQoJ3JlbW92ZUZvcm1hdCcpO1xuICB9XG59XG4iLCI8c2t5LXRvb2xiYXItaXRlbVxuICAqbmdGb3I9XCJsZXQgbWVudSBvZiBtZW51c1wiXG4gIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLW1lbnVcIlxuICBbbmdDbGFzc109XCInc2t5LXRleHQtZWRpdG9yLW1lbnUtJyArIG1lbnVcIlxuPlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJtZW51XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2VkaXQnXCI+XG4gICAgICA8c2t5LWRyb3Bkb3duXG4gICAgICAgIGxhYmVsPVwiRWRpdCBtZW51XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW21lc3NhZ2VTdHJlYW1dPVwiZWRpdERyb3Bkb3duU3RyZWFtXCJcbiAgICAgID5cbiAgICAgICAgPHNreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdza3l1eF90ZXh0X2VkaXRvcl9tZW51YmFyX2Ryb3Bkb3duX2J1dHRvbl9lZGl0X2xhYmVsJ1xuICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgIH19XG4gICAgICAgIDwvc2t5LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgPHNreS1kcm9wZG93bi1tZW51PlxuICAgICAgICAgIDxza3ktZHJvcGRvd24taXRlbSAqbmdGb3I9XCJsZXQgZWRpdEl0ZW0gb2YgZWRpdEl0ZW1zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWVkaXRJdGVtLmlzRGl2aWRlclwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdEl0ZW0/LmZ1bmN0aW9uKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBlZGl0SXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJlZGl0SXRlbS5rZXlTaG9ydGN1dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItbWVudS1rZXktc2hvcnRjdXRcIlxuICAgICAgICAgICAgICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICdza3ktZm9udC1kZWVtcGhhc2l6ZWQnOiAnbW9kZXJuJyxcbiAgICAgICAgICAgICAgICAgICdza3ktZGVlbXBoYXNpemVkJzogJ2RlZmF1bHQnXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBlZGl0SXRlbS5rZXlTaG9ydGN1dCB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cImVkaXRJdGVtLmlzRGl2aWRlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWRyb3Bkb3duLWl0ZW0tZGl2aWRlclwiXG4gICAgICAgICAgICAgIHJvbGU9XCJkaXZpZGVyXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgPC9za3ktZHJvcGRvd24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Zvcm1hdCdcIj5cbiAgICAgIDxza3ktZHJvcGRvd25cbiAgICAgICAgbGFiZWw9XCJGb3JtYXQgbWVudVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFttZXNzYWdlU3RyZWFtXT1cImZvcm1hdERyb3Bkb3duU3RyZWFtXCJcbiAgICAgID5cbiAgICAgICAgPHNreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdza3l1eF90ZXh0X2VkaXRvcl9tZW51YmFyX2Ryb3Bkb3duX2J1dHRvbl9mb3JtYXRfbGFiZWwnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgfX1cbiAgICAgICAgPC9za3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICA8c2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgPHNreS1kcm9wZG93bi1pdGVtICpuZ0Zvcj1cImxldCBmb3JtYXRJdGVtIG9mIGZvcm1hdEl0ZW1zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWZvcm1hdEl0ZW0uaXNEaXZpZGVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXRJdGVtPy5mdW5jdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgZm9ybWF0SXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtYXRJdGVtLmtleVNob3J0Y3V0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci1tZW51LWtleS1zaG9ydGN1dFwiXG4gICAgICAgICAgICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ3NreS1mb250LWRlZW1waGFzaXplZCc6ICdtb2Rlcm4nLFxuICAgICAgICAgICAgICAgICAgJ3NreS1kZWVtcGhhc2l6ZWQnOiAnZGVmYXVsdCdcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGZvcm1hdEl0ZW0ua2V5U2hvcnRjdXQgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtYXRJdGVtLmlzRGl2aWRlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWRyb3Bkb3duLWl0ZW0tZGl2aWRlclwiXG4gICAgICAgICAgICAgIHJvbGU9XCJkaXZpZGVyXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgPC9za3ktZHJvcGRvd24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21lcmdlLWZpZWxkJ1wiPlxuICAgICAgPHNreS1kcm9wZG93blxuICAgICAgICAqbmdJZj1cIm1lcmdlRmllbGRzICYmIG1lcmdlRmllbGRzLmxlbmd0aCA+IDBcIlxuICAgICAgICBsYWJlbD1cIkluc2VydCBtZXJnZSBmaWVsZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFttZXNzYWdlU3RyZWFtXT1cIm1lcmdlRmllbGREcm9wZG93blN0cmVhbVwiXG4gICAgICA+XG4gICAgICAgIDxza3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICAnc2t5dXhfdGV4dF9lZGl0b3JfbWVudWJhcl9kcm9wZG93bl9idXR0b25faW5zZXJ0X2xhYmVsJ1xuICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgIH19XG4gICAgICAgIDwvc2t5LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgPHNreS1kcm9wZG93bi1tZW51PlxuICAgICAgICAgIDxza3ktZHJvcGRvd24taXRlbSAqbmdGb3I9XCJsZXQgbWVyZ2VGaWVsZCBvZiBtZXJnZUZpZWxkc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImluc2VydE1lcmdlRmllbGQobWVyZ2VGaWVsZClcIj5cbiAgICAgICAgICAgICAge3sgbWVyZ2VGaWVsZC5uYW1lIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgPC9za3ktZHJvcGRvd24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9za3ktdG9vbGJhci1pdGVtPlxuIl19
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGV4dC1lZGl0b3Ivc3JjL2xpYi9tb2R1bGVzL3RleHQtZWRpdG9yL21lbnViYXIvdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDN0YsT0FBTyxF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QUFnQixDQUFDLFVBQVUsR0FBRyxDQUFDO1lBQy9CLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUNyRDtZQUNBLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDL0I7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7OEdBdk1VLDZCQUE2QjtrR0FBN0IsNkJBQTZCLHlNQ2pEMUMsZ3FIQThHQSx3VERwRUksWUFBWSx5aEJBQ1osaUJBQWlCLDBoQkFDakIsNEJBQTRCLHVHQUM1QixjQUFjLG1JQUNkLGdCQUFnQjs7MkZBR1AsNkJBQTZCO2tCQWR6QyxTQUFTO2lDQUNJLElBQUksWUFDTix5QkFBeUIsbUJBR2xCLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLDRCQUE0Qjt3QkFDNUIsY0FBYzt3QkFDZCxnQkFBZ0I7cUJBQ2pCOzhCQUlNLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFJQyxLQUFLO3NCQURYLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJSyxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuaW1wb3J0IHsgU2t5VG9vbGJhck1vZHVsZSB9IGZyb20gJ0Bza3l1eC9sYXlvdXQnO1xuaW1wb3J0IHtcbiAgU2t5RHJvcGRvd25NZXNzYWdlLFxuICBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLFxuICBTa3lEcm9wZG93bk1vZHVsZSxcbn0gZnJvbSAnQHNreXV4L3BvcG92ZXJzJztcbmltcG9ydCB7IFNreVRoZW1lTW9kdWxlIH0gZnJvbSAnQHNreXV4L3RoZW1lJztcblxuaW1wb3J0IGhlIGZyb20gJ2hlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5Rm9ybXNVdGlsaXR5IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zLXV0aWxpdHknO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclJlc291cmNlc01vZHVsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9za3ktdGV4dC1lZGl0b3ItcmVzb3VyY2VzLm1vZHVsZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvck1lbnVUeXBlIH0gZnJvbSAnLi4vdHlwZXMvbWVudS10eXBlJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JNZXJnZUZpZWxkIH0gZnJvbSAnLi4vdHlwZXMvdGV4dC1lZGl0b3ItbWVyZ2UtZmllbGQnO1xuXG5jb25zdCBGT1JNQVRfTUVOVV9BQ1RJT04gPSAnc2t5dXhfdGV4dF9lZGl0b3JfZm9ybWF0X21lbnVfYWN0aW9uXyc7XG5jb25zdCBFRElUX01FTlVfQUNUSU9OID0gJ3NreXV4X3RleHRfZWRpdG9yX2VkaXRfbWVudV9hY3Rpb25fJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnc2t5LXRleHQtZWRpdG9yLW1lbnViYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1lZGl0b3ItbWVudWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQtZWRpdG9yLW1lbnViYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgU2t5RHJvcGRvd25Nb2R1bGUsXG4gICAgU2t5VGV4dEVkaXRvclJlc291cmNlc01vZHVsZSxcbiAgICBTa3lUaGVtZU1vZHVsZSxcbiAgICBTa3lUb29sYmFyTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yTWVudWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIGVkaXRvckZvY3VzU3RyZWFtID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWVudXM6IFNreVRleHRFZGl0b3JNZW51VHlwZVtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1lcmdlRmllbGRzOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZFtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvZXJjZWRWYWx1ZSA9IFNreUZvcm1zVXRpbGl0eS5jb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIGlmIChjb2VyY2VkVmFsdWUgIT09IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuI19kaXNhYmxlZCA9IGNvZXJjZWRWYWx1ZTtcbiAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gICNfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgZWRpdERyb3Bkb3duU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5RHJvcGRvd25NZXNzYWdlPigpO1xuXG4gIHB1YmxpYyBlZGl0SXRlbXM6XG4gICAgfCB7XG4gICAgICAgIGZ1bmN0aW9uPzogKCkgPT4gdm9pZDtcbiAgICAgICAgaXNEaXZpZGVyPzogYm9vbGVhbjtcbiAgICAgICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgICAgIGtleVNob3J0Y3V0Pzogc3RyaW5nO1xuICAgICAgfVtdXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGZvcm1hdERyb3Bkb3duU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5RHJvcGRvd25NZXNzYWdlPigpO1xuXG4gIHB1YmxpYyBmb3JtYXRJdGVtczpcbiAgICB8IHtcbiAgICAgICAgZnVuY3Rpb24/OiAoKSA9PiB2b2lkO1xuICAgICAgICBpc0RpdmlkZXI/OiBib29sZWFuO1xuICAgICAgICBsYWJlbD86IHN0cmluZztcbiAgICAgICAga2V5U2hvcnRjdXQ/OiBzdHJpbmc7XG4gICAgICB9W11cbiAgICB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgbWVyZ2VGaWVsZERyb3Bkb3duU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5RHJvcGRvd25NZXNzYWdlPigpO1xuXG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICByZWFkb25seSAjYWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2NoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcmVhZG9ubHkgI3Jlc291cmNlcyA9IGluamVjdChTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JGb2N1c1N0cmVhbVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2Nsb3NlRHJvcGRvd25zKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuI3Jlc291cmNlc1xuICAgICAgLmdldFN0cmluZ3Moe1xuICAgICAgICBib2xkOiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAnYm9sZF9sYWJlbCcsXG4gICAgICAgIGJvbGRTaG9ydDogRk9STUFUX01FTlVfQUNUSU9OICsgJ2JvbGRfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgaXRhbGljOiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAnaXRhbGljX2xhYmVsJyxcbiAgICAgICAgaXRhbGljU2hvcnQ6IEZPUk1BVF9NRU5VX0FDVElPTiArICdpdGFsaWNfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgdW5kZXJsaW5lOiBGT1JNQVRfTUVOVV9BQ1RJT04gKyAndW5kZXJsaW5lX2xhYmVsJyxcbiAgICAgICAgdW5kZXJsaW5lU2hvcnQ6IEZPUk1BVF9NRU5VX0FDVElPTiArICd1bmRlcmxpbmVfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgc3RyaWtldGhyb3VnaDogRk9STUFUX01FTlVfQUNUSU9OICsgJ3N0cmlrZXRocm91Z2hfbGFiZWwnLFxuICAgICAgICBjbGVhckZvcm1hdHRpbmc6IEZPUk1BVF9NRU5VX0FDVElPTiArICdjbGVhcl9mb3JtYXR0aW5nX2xhYmVsJyxcbiAgICAgICAgdW5kbzogRURJVF9NRU5VX0FDVElPTiArICd1bmRvX2xhYmVsJyxcbiAgICAgICAgdW5kb1Nob3J0OiBFRElUX01FTlVfQUNUSU9OICsgJ3VuZG9fa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgcmVkbzogRURJVF9NRU5VX0FDVElPTiArICdyZWRvX2xhYmVsJyxcbiAgICAgICAgcmVkb1Nob3J0OiBFRElUX01FTlVfQUNUSU9OICsgJ3JlZG9fa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgY3V0OiBFRElUX01FTlVfQUNUSU9OICsgJ2N1dF9sYWJlbCcsXG4gICAgICAgIGN1dFNob3J0OiBFRElUX01FTlVfQUNUSU9OICsgJ2N1dF9rZXlfc2hvcnRjdXQnLFxuICAgICAgICBjb3B5OiBFRElUX01FTlVfQUNUSU9OICsgJ2NvcHlfbGFiZWwnLFxuICAgICAgICBjb3B5U2hvcnQ6IEVESVRfTUVOVV9BQ1RJT04gKyAnY29weV9rZXlfc2hvcnRjdXQnLFxuICAgICAgICBwYXN0ZTogRURJVF9NRU5VX0FDVElPTiArICdwYXN0ZV9sYWJlbCcsXG4gICAgICAgIHBhc3RlU2hvcnQ6IEVESVRfTUVOVV9BQ1RJT04gKyAncGFzdGVfa2V5X3Nob3J0Y3V0JyxcbiAgICAgICAgc2VsZWN0QWxsOiBFRElUX01FTlVfQUNUSU9OICsgJ3NlbGVjdF9hbGxfbGFiZWwnLFxuICAgICAgICBzZWxlY3RBbGxTaG9ydDogRURJVF9NRU5VX0FDVElPTiArICdzZWxlY3RfYWxsX2tleV9zaG9ydGN1dCcsXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFrZSgxKSwgdGFrZVVudGlsKHRoaXMuI25nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgocmVzb3VyY2VzKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybWF0SXRlbXMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ2JvbGQnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuYm9sZCxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMuYm9sZFNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ2l0YWxpYycpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5pdGFsaWMsXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLml0YWxpY1Nob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3VuZGVybGluZScpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy51bmRlcmxpbmUsXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLnVuZGVybGluZVNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3N0cmlrZXRocm91Z2gnKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuc3RyaWtldGhyb3VnaCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlzRGl2aWRlcjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAoKSA9PiB0aGlzLiNjbGVhckZvcm1hdCgpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5jbGVhckZvcm1hdHRpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5lZGl0SXRlbXMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3VuZG8nKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMudW5kbyxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMudW5kb1Nob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3JlZG8nKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMucmVkbyxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMucmVkb1Nob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaXNEaXZpZGVyOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ2N1dCcpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5jdXQsXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLmN1dFNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ2NvcHknKSxcbiAgICAgICAgICAgIGxhYmVsOiByZXNvdXJjZXMuY29weSxcbiAgICAgICAgICAgIGtleVNob3J0Y3V0OiByZXNvdXJjZXMuY29weVNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3Bhc3RlJyksXG4gICAgICAgICAgICBsYWJlbDogcmVzb3VyY2VzLnBhc3RlLFxuICAgICAgICAgICAga2V5U2hvcnRjdXQ6IHJlc291cmNlcy5wYXN0ZVNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaXNEaXZpZGVyOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246ICgpID0+IHRoaXMuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcpLFxuICAgICAgICAgICAgbGFiZWw6IHJlc291cmNlcy5zZWxlY3RBbGwsXG4gICAgICAgICAgICBrZXlTaG9ydGN1dDogcmVzb3VyY2VzLnNlbGVjdEFsbFNob3J0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZXhlY0NvbW1hbmQoY29tbWFuZDogc3RyaW5nLCB2YWx1ZSA9ICcnKTogdm9pZCB7XG4gICAgdGhpcy4jYWRhcHRlclNlcnZpY2UuZXhlY0NvbW1hbmQoe1xuICAgICAgY29tbWFuZDogY29tbWFuZCxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnRNZXJnZUZpZWxkKGZpZWxkOiBTa3lUZXh0RWRpdG9yTWVyZ2VGaWVsZCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY0NvbW1hbmQoXG4gICAgICAnaW5zZXJ0SFRNTCcsXG4gICAgICAnPGltZyBzdHlsZT1cImRpc3BsYXk6IGlubGluZTsgY3Vyc29yOiBncmFiO1wiIGRhdGEtZmllbGRpZD1cIicgK1xuICAgICAgICBoZS5lc2NhcGUoZmllbGQuaWQpICtcbiAgICAgICAgJ1wiIGRhdGEtZmllbGRkaXNwbGF5PVwiJyArXG4gICAgICAgIGhlLmVzY2FwZShmaWVsZC5uYW1lKSArXG4gICAgICAgICdcIiBzcmM9XCInICtcbiAgICAgICAgKGZpZWxkLnByZXZpZXdJbWFnZVVybCB8fFxuICAgICAgICAgIHRoaXMuI2FkYXB0ZXJTZXJ2aWNlLmdldE1lcmdlRmllbGREYXRhVVJJKGZpZWxkLm5hbWUpKSArXG4gICAgICAgICdcIj4nXG4gICAgKTtcbiAgfVxuXG4gICNjbG9zZURyb3Bkb3ducygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXREcm9wZG93blN0cmVhbS5uZXh0KHsgdHlwZTogU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSB9KTtcbiAgICB0aGlzLmZvcm1hdERyb3Bkb3duU3RyZWFtLm5leHQoeyB0eXBlOiBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkNsb3NlIH0pO1xuICAgIHRoaXMubWVyZ2VGaWVsZERyb3Bkb3duU3RyZWFtLm5leHQoeyB0eXBlOiBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkNsb3NlIH0pO1xuICB9XG5cbiAgI2NsZWFyRm9ybWF0KCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLiNhZGFwdGVyU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoXG4gICAgICBjdXJyZW50U2VsZWN0aW9uICYmXG4gICAgICBjdXJyZW50U2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwICYmXG4gICAgICBjdXJyZW50U2VsZWN0aW9uLmdldFJhbmdlQXQoMCkudG9TdHJpbmcoKS5sZW5ndGggPD0gMFxuICAgICkge1xuICAgICAgdGhpcy5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJyk7XG4gICAgfVxuICAgIHRoaXMuZXhlY0NvbW1hbmQoJ3JlbW92ZUZvcm1hdCcpO1xuICB9XG59XG4iLCI8c2t5LXRvb2xiYXItaXRlbVxuICAqbmdGb3I9XCJsZXQgbWVudSBvZiBtZW51c1wiXG4gIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLW1lbnVcIlxuICBbbmdDbGFzc109XCInc2t5LXRleHQtZWRpdG9yLW1lbnUtJyArIG1lbnVcIlxuPlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJtZW51XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2VkaXQnXCI+XG4gICAgICA8c2t5LWRyb3Bkb3duXG4gICAgICAgIGxhYmVsPVwiRWRpdCBtZW51XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW21lc3NhZ2VTdHJlYW1dPVwiZWRpdERyb3Bkb3duU3RyZWFtXCJcbiAgICAgID5cbiAgICAgICAgPHNreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdza3l1eF90ZXh0X2VkaXRvcl9tZW51YmFyX2Ryb3Bkb3duX2J1dHRvbl9lZGl0X2xhYmVsJ1xuICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgIH19XG4gICAgICAgIDwvc2t5LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgPHNreS1kcm9wZG93bi1tZW51PlxuICAgICAgICAgIDxza3ktZHJvcGRvd24taXRlbSAqbmdGb3I9XCJsZXQgZWRpdEl0ZW0gb2YgZWRpdEl0ZW1zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWVkaXRJdGVtLmlzRGl2aWRlclwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdEl0ZW0/LmZ1bmN0aW9uKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBlZGl0SXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJlZGl0SXRlbS5rZXlTaG9ydGN1dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktdGV4dC1lZGl0b3ItbWVudS1rZXktc2hvcnRjdXRcIlxuICAgICAgICAgICAgICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICdza3ktZm9udC1kZWVtcGhhc2l6ZWQnOiAnbW9kZXJuJyxcbiAgICAgICAgICAgICAgICAgICdza3ktZGVlbXBoYXNpemVkJzogJ2RlZmF1bHQnXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBlZGl0SXRlbS5rZXlTaG9ydGN1dCB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cImVkaXRJdGVtLmlzRGl2aWRlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWRyb3Bkb3duLWl0ZW0tZGl2aWRlclwiXG4gICAgICAgICAgICAgIHJvbGU9XCJkaXZpZGVyXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgPC9za3ktZHJvcGRvd24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Zvcm1hdCdcIj5cbiAgICAgIDxza3ktZHJvcGRvd25cbiAgICAgICAgbGFiZWw9XCJGb3JtYXQgbWVudVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFttZXNzYWdlU3RyZWFtXT1cImZvcm1hdERyb3Bkb3duU3RyZWFtXCJcbiAgICAgID5cbiAgICAgICAgPHNreS1kcm9wZG93bi1idXR0b24+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdza3l1eF90ZXh0X2VkaXRvcl9tZW51YmFyX2Ryb3Bkb3duX2J1dHRvbl9mb3JtYXRfbGFiZWwnXG4gICAgICAgICAgICAgIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgfX1cbiAgICAgICAgPC9za3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICA8c2t5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgPHNreS1kcm9wZG93bi1pdGVtICpuZ0Zvcj1cImxldCBmb3JtYXRJdGVtIG9mIGZvcm1hdEl0ZW1zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWZvcm1hdEl0ZW0uaXNEaXZpZGVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXRJdGVtPy5mdW5jdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgZm9ybWF0SXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtYXRJdGVtLmtleVNob3J0Y3V0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNreS10ZXh0LWVkaXRvci1tZW51LWtleS1zaG9ydGN1dFwiXG4gICAgICAgICAgICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ3NreS1mb250LWRlZW1waGFzaXplZCc6ICdtb2Rlcm4nLFxuICAgICAgICAgICAgICAgICAgJ3NreS1kZWVtcGhhc2l6ZWQnOiAnZGVmYXVsdCdcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGZvcm1hdEl0ZW0ua2V5U2hvcnRjdXQgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtYXRJdGVtLmlzRGl2aWRlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2t5LXRleHQtZWRpdG9yLWRyb3Bkb3duLWl0ZW0tZGl2aWRlclwiXG4gICAgICAgICAgICAgIHJvbGU9XCJkaXZpZGVyXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgPC9za3ktZHJvcGRvd24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21lcmdlLWZpZWxkJ1wiPlxuICAgICAgPHNreS1kcm9wZG93blxuICAgICAgICAqbmdJZj1cIm1lcmdlRmllbGRzICYmIG1lcmdlRmllbGRzLmxlbmd0aCA+IDBcIlxuICAgICAgICBsYWJlbD1cIkluc2VydCBtZXJnZSBmaWVsZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFttZXNzYWdlU3RyZWFtXT1cIm1lcmdlRmllbGREcm9wZG93blN0cmVhbVwiXG4gICAgICA+XG4gICAgICAgIDxza3ktZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICAnc2t5dXhfdGV4dF9lZGl0b3JfbWVudWJhcl9kcm9wZG93bl9idXR0b25faW5zZXJ0X2xhYmVsJ1xuICAgICAgICAgICAgICB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgIH19XG4gICAgICAgIDwvc2t5LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgPHNreS1kcm9wZG93bi1tZW51PlxuICAgICAgICAgIDxza3ktZHJvcGRvd24taXRlbSAqbmdGb3I9XCJsZXQgbWVyZ2VGaWVsZCBvZiBtZXJnZUZpZWxkc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImluc2VydE1lcmdlRmllbGQobWVyZ2VGaWVsZClcIj5cbiAgICAgICAgICAgICAge3sgbWVyZ2VGaWVsZC5uYW1lIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3NreS1kcm9wZG93bi1pdGVtPlxuICAgICAgICA8L3NreS1kcm9wZG93bi1tZW51PlxuICAgICAgPC9za3ktZHJvcGRvd24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9za3ktdG9vbGJhci1pdGVtPlxuIl19
|