@provoly/dashboard 0.21.3 → 0.21.5
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/assets/svgs/layers.svg +3 -2
- package/assets/svgs/legend.svg +14 -3
- package/dataset/style/_o-pry-dataset.scss +6 -9
- package/esm2022/dataset/components/dataset.component.mjs +3 -3
- package/esm2022/dataset/style/css.component.mjs +2 -2
- package/esm2022/lib/core/auth/geoAuth.service.mjs +29 -5
- package/esm2022/lib/core/components/select/select.component.mjs +13 -3
- package/esm2022/lib/core/components/share/group-share/group-share.component.mjs +14 -6
- package/esm2022/lib/core/components/snackbar/snackbar.service.mjs +8 -3
- package/esm2022/lib/core/i18n/en.translations.mjs +9 -2
- package/esm2022/lib/core/i18n/fr.translations.mjs +9 -3
- package/esm2022/lib/core/model/display-options.interface.mjs +24 -7
- package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
- package/esm2022/lib/core/store/field/field.interface.mjs +2 -1
- package/esm2022/lib/core/store/item/item.effects.mjs +2 -2
- package/esm2022/lib/core/store/search/search.reducer.mjs +2 -2
- package/esm2022/lib/dashboard/components/dashboard.component.mjs +3 -3
- package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widget-instanciator.component.mjs +12 -3
- package/esm2022/lib/dashboard/dashboard.module.mjs +5 -4
- package/esm2022/lib/dashboard/store/dashboard.actions.mjs +1 -1
- package/esm2022/lib/dashboard/store/dashboard.effects.mjs +14 -6
- package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +8 -2
- package/esm2022/lib/dashboard/store/manifest.service.mjs +4 -3
- package/esm2022/notification/components/notification/content/notification-content.component.mjs +12 -8
- package/esm2022/notification/components/notification/notification.component.mjs +2 -1
- package/esm2022/notification/style/css.component.mjs +2 -2
- package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +3 -3
- package/esm2022/presentation/components/presentation.component.mjs +17 -9
- package/esm2022/presentation/i18n/en.translations.mjs +2 -1
- package/esm2022/presentation/i18n/fr.translations.mjs +3 -2
- package/esm2022/presentation/style/css.component.mjs +2 -2
- package/esm2022/restitution/components/restitution/restitution.component.mjs +5 -5
- package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +3 -3
- package/esm2022/restitution/style/css.component.mjs +2 -2
- package/esm2022/toolbox/components/delete/delete.component.mjs +29 -0
- package/esm2022/toolbox/components/save-view/save-view.component.mjs +12 -6
- package/esm2022/toolbox/components/share/share.component.mjs +72 -0
- package/esm2022/toolbox/components/switch-to-edit-content/switch-to-edit-content.component.mjs +26 -0
- package/esm2022/toolbox/components/toolbox.component.mjs +3 -3
- package/esm2022/toolbox/public-api.mjs +4 -1
- package/esm2022/toolbox/toolbox.model.mjs +22 -2
- package/esm2022/toolbox/toolbox.module.mjs +16 -4
- package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +2 -2
- package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +27 -13
- package/esm2022/widgets/widget-map/component/widget-map.component.mjs +61 -22
- package/esm2022/widgets/widget-map/i18n/en.translations.mjs +5 -2
- package/esm2022/widgets/widget-map/i18n/fr.translations.mjs +5 -2
- package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +3 -2
- package/esm2022/widgets/widget-map/style/css.component.mjs +2 -2
- package/esm2022/widgets/widget-map/utils/cql-utils.class.mjs +16 -7
- package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +3 -2
- package/esm2022/widgets/widget-vega/component/widget-vega.component.mjs +2 -2
- package/fesm2022/provoly-dashboard-dataset.mjs +4 -4
- package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-notification.mjs +14 -9
- package/fesm2022/provoly-dashboard-notification.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +23 -13
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-restitution.mjs +8 -8
- package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-toolbox.mjs +145 -12
- package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +114 -47
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +138 -39
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/lib/core/auth/geoAuth.service.d.ts +5 -1
- package/lib/core/components/select/select.component.d.ts +2 -0
- package/lib/core/components/share/group-share/group-share.component.d.ts +2 -2
- package/lib/core/components/snackbar/snackbar.service.d.ts +2 -1
- package/lib/core/i18n/en.translations.d.ts +7 -0
- package/lib/core/i18n/fr.translations.d.ts +7 -1
- package/lib/core/model/display-options.interface.d.ts +3 -0
- package/lib/core/model/manifest.interface.d.ts +3 -1
- package/lib/core/store/field/field.interface.d.ts +1 -0
- package/lib/dashboard/components/widgets/widget-instanciator/widget-instanciator.component.d.ts +1 -0
- package/lib/dashboard/store/dashboard.actions.d.ts +3 -0
- package/lib/dashboard/store/dashboard.effects.d.ts +1 -1
- package/lib/dashboard/store/manifest.service.d.ts +2 -1
- package/notification/components/notification/content/notification-content.component.d.ts +4 -2
- package/notification/style/_m-notifications.scss +6 -7
- package/package.json +7 -7
- package/presentation/components/presentation.component.d.ts +4 -1
- package/presentation/i18n/en.translations.d.ts +1 -0
- package/presentation/i18n/fr.translations.d.ts +1 -0
- package/presentation/style/_o-pry-presentation.scss +0 -16
- package/restitution/components/restitution/restitution.component.d.ts +1 -1
- package/restitution/style/_o-restitution.scss +12 -42
- package/styles/components/_a-page-loader.scss +1 -1
- package/styles/components/_o-draggable-menu.scss +8 -0
- package/styles/components/_o-pry-stepper.scss +9 -10
- package/styles/components/_o-widget.scss +7 -3
- package/styles/layout/_o-manifest-layout.scss +20 -0
- package/styles-theme/components-theme/_o-widget.theme.scss +1 -1
- package/toolbox/components/delete/delete.component.d.ts +19 -0
- package/toolbox/components/save-view/save-view.component.d.ts +3 -2
- package/toolbox/components/share/share.component.d.ts +26 -0
- package/toolbox/components/switch-to-edit-content/switch-to-edit-content.component.d.ts +15 -0
- package/toolbox/public-api.d.ts +3 -0
- package/toolbox/toolbox.module.d.ts +12 -9
- package/widgets/widget-chart/component/widget-chart.component.d.ts +1 -1
- package/widgets/widget-map/component/widget-map-layer.service.d.ts +4 -3
- package/widgets/widget-map/component/widget-map.component.d.ts +8 -6
- package/widgets/widget-map/i18n/en.translations.d.ts +3 -0
- package/widgets/widget-map/i18n/fr.translations.d.ts +3 -0
- package/widgets/widget-map/style/_o-layer-legend.scss +43 -54
- package/widgets/widget-map/utils/cql-utils.class.d.ts +2 -2
- package/widgets/widget-map/utils/widget-map.utils.d.ts +2 -0
|
@@ -27,4 +27,5 @@ export const GeometricFieldTypes = [
|
|
|
27
27
|
FieldType.GEOMETRYCOLLECTION
|
|
28
28
|
];
|
|
29
29
|
export const NumericFieldTypes = [FieldType.INTEGER, FieldType.DECIMAL, FieldType.INSTANT, FieldType.LONG];
|
|
30
|
-
|
|
30
|
+
export const TextFieldTypes = [FieldType.STRING, FieldType.KEYWORD];
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2NvcmUvc3RvcmUvZmllbGQvZmllbGQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLFNBaUJYO0FBakJELFdBQVksU0FBUztJQUNuQiw4QkFBaUIsQ0FBQTtJQUNqQixnQ0FBbUIsQ0FBQTtJQUNuQixnQ0FBbUIsQ0FBQTtJQUNuQixnQ0FBbUIsQ0FBQTtJQUNuQixnQ0FBbUIsQ0FBQTtJQUNuQiwwQkFBYSxDQUFBO0lBQ2Isd0JBQVcsQ0FBQTtJQUNYLDRCQUFlLENBQUE7SUFDZixzQ0FBeUIsQ0FBQTtJQUN6QixnQ0FBbUIsQ0FBQTtJQUNuQiwwQ0FBNkIsQ0FBQTtJQUM3QixnQ0FBbUIsQ0FBQTtJQUNuQiwwQ0FBNkIsQ0FBQTtJQUM3QixzREFBeUMsQ0FBQTtJQUN6QyxtREFBNEIsQ0FBQTtJQUM1Qiw2QkFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBakJXLFNBQVMsS0FBVCxTQUFTLFFBaUJwQjtBQVNELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLFNBQVMsQ0FBQyxLQUFLO0lBQ2YsU0FBUyxDQUFDLFVBQVU7SUFDcEIsU0FBUyxDQUFDLElBQUk7SUFDZCxTQUFTLENBQUMsU0FBUztJQUNuQixTQUFTLENBQUMsT0FBTztJQUNqQixTQUFTLENBQUMsWUFBWTtJQUN0QixTQUFTLENBQUMsa0JBQWtCO0NBQ2pCLENBQUM7QUFFZCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQWEsQ0FBQztBQUN2SCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEZpZWxkVHlwZSB7XG4gIFNUUklORyA9ICdzdHJpbmcnLFxuICBLRVlXT1JEID0gJ2tleXdvcmQnLFxuICBJTlRFR0VSID0gJ2ludGVnZXInLFxuICBERUNJTUFMID0gJ2RlY2ltYWwnLFxuICBJTlNUQU5UID0gJ2luc3RhbnQnLFxuICBMT05HID0gJ2xvbmcnLFxuICBSQVcgPSAncmF3JyxcbiAgUE9JTlQgPSAnUG9pbnQnLFxuICBNVUxUSVBPSU5UID0gJ011bHRpUG9pbnQnLFxuICBMSU5FID0gJ0xpbmVTdHJpbmcnLFxuICBNVUxUSUxJTkUgPSAnTXVsdGlMaW5lU3RyaW5nJyxcbiAgUE9MWUdPTiA9ICdQb2x5Z29uJyxcbiAgTVVMVElQT0xZR09OID0gJ011bHRpUG9seWdvbicsXG4gIEdFT01FVFJZQ09MTEVDVElPTiA9ICdHZW9tZXRyeUNvbGxlY3Rpb24nLFxuICBPQ0xBU1MgPSAnbW9kw6hsZSBkZSBkb25uw6llcycsXG4gIERBVEFTRVQgPSAndGVzdCdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWVsZCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogRmllbGRUeXBlO1xuICBjcnM/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBHZW9tZXRyaWNGaWVsZFR5cGVzID0gW1xuICBGaWVsZFR5cGUuUE9JTlQsXG4gIEZpZWxkVHlwZS5NVUxUSVBPSU5ULFxuICBGaWVsZFR5cGUuTElORSxcbiAgRmllbGRUeXBlLk1VTFRJTElORSxcbiAgRmllbGRUeXBlLlBPTFlHT04sXG4gIEZpZWxkVHlwZS5NVUxUSVBPTFlHT04sXG4gIEZpZWxkVHlwZS5HRU9NRVRSWUNPTExFQ1RJT05cbl0gYXMgc3RyaW5nW107XG5cbmV4cG9ydCBjb25zdCBOdW1lcmljRmllbGRUeXBlcyA9IFtGaWVsZFR5cGUuSU5URUdFUiwgRmllbGRUeXBlLkRFQ0lNQUwsIEZpZWxkVHlwZS5JTlNUQU5ULCBGaWVsZFR5cGUuTE9OR10gYXMgc3RyaW5nW107XG5leHBvcnQgY29uc3QgVGV4dEZpZWxkVHlwZXMgPSBbRmllbGRUeXBlLlNUUklORywgRmllbGRUeXBlLktFWVdPUkRdIGFzIHN0cmluZ1tdO1xuIl19
|
|
@@ -24,7 +24,7 @@ export class ItemEffects {
|
|
|
24
24
|
])
|
|
25
25
|
.reduce((a, b) => [...a, ...b], [])), catchError((error) => [ItemActions.createFailure({ error })])))));
|
|
26
26
|
this.createSuccessWarning$ = createEffect(() => this.actions$.pipe(ofType(ItemActions.createSuccess), tap((action) => {
|
|
27
|
-
const actionClicked$ = this.snackBar.
|
|
27
|
+
const actionClicked$ = this.snackBar.notMitigatedOpen({
|
|
28
28
|
type: 'success',
|
|
29
29
|
message: this.translateService.instant('@pry.context.createObject.created'),
|
|
30
30
|
action: this.translateService.instant('@pry.context.createObject.details'),
|
|
@@ -41,4 +41,4 @@ export class ItemEffects {
|
|
|
41
41
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ItemEffects, decorators: [{
|
|
42
42
|
type: Injectable
|
|
43
43
|
}], ctorParameters: function () { return [{ type: i1.Actions }, { type: i2.ItemService }, { type: i3.Store }, { type: i4.PrySnackbarService }, { type: i5.PryI18nService }]; } });
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2NvcmUvc3RvcmUvaXRlbS9pdGVtLmVmZmVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVcsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBSTdDLE1BQU0sT0FBTyxXQUFXO0lBd0N0QixZQUNVLFFBQWlCLEVBQ2pCLE9BQW9CLEVBQ3BCLEtBQVksRUFDWixRQUE0QixFQUM1QixnQkFBZ0M7UUFKaEMsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWixhQUFRLEdBQVIsUUFBUSxDQUFvQjtRQUM1QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdCO1FBNUMxQyxZQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFDMUIsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ2pFLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDbkMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDakIsS0FBSzthQUNGLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDYixXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztTQUMxRCxDQUFDO2FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUN0QyxFQUNELFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzlELENBQ0YsQ0FDRixDQUNGLENBQUM7UUFFRiwwQkFBcUIsR0FBRyxZQUFZLENBQ2xDLEdBQUcsRUFBRSxDQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxFQUNqQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNiLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3BELElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDO2dCQUMzRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQztnQkFDMUUsT0FBTyxFQUFFLEtBQUs7YUFDZixDQUFDLENBQUM7WUFDSCxjQUFjLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsRUFDSCxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FDcEIsQ0FBQztJQVFDLENBQUM7K0dBOUNPLFdBQVc7bUhBQVgsV0FBVzs7NEZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbnMsIGNyZWF0ZUVmZmVjdCwgb2ZUeXBlIH0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1lcmdlTWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2Rhc2hib2FyZC9zdG9yZS9kYXNoYm9hcmQuYWN0aW9ucyc7XG5pbXBvcnQgeyBQcnlTbmFja2JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3NuYWNrYmFyL3NuYWNrYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJ5STE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZXh0TWVudVNlbGVjdG9ycyB9IGZyb20gJy4uL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuc2VsZWN0b3JzJztcbmltcG9ydCB7IEl0ZW1BY3Rpb25zIH0gZnJvbSAnLi9pdGVtLmFjdGlvbnMnO1xuaW1wb3J0IHsgSXRlbVNlcnZpY2UgfSBmcm9tICcuL2l0ZW0uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJdGVtRWZmZWN0cyB7XG4gIGNyZWF0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoSXRlbUFjdGlvbnMuY3JlYXRlKSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KENvbnRleHRNZW51U2VsZWN0b3JzLnJlc3VsdFNldCkpLFxuICAgICAgbWVyZ2VNYXAoKFthY3Rpb24sIHJlc3VsdFNldF0pID0+XG4gICAgICAgIHRoaXMuc2VydmljZS5jcmVhdGUoYWN0aW9uLml0ZW0pLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKGl0ZW1zKSA9PlxuICAgICAgICAgICAgaXRlbXNcbiAgICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gW1xuICAgICAgICAgICAgICAgIEl0ZW1BY3Rpb25zLmNyZWF0ZVN1Y2Nlc3MoeyBpZDogaXRlbS5pZCB9KSxcbiAgICAgICAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmFkZEl0ZW1Ub1Jlc3VsdFNldHMoeyBpdGVtLCByZXN1bHRTZXQgfSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgLnJlZHVjZSgoYSwgYikgPT4gWy4uLmEsIC4uLmJdLCBbXSlcbiAgICAgICAgICApLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiBbSXRlbUFjdGlvbnMuY3JlYXRlRmFpbHVyZSh7IGVycm9yIH0pXSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVTdWNjZXNzV2FybmluZyQgPSBjcmVhdGVFZmZlY3QoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgICAgb2ZUeXBlKEl0ZW1BY3Rpb25zLmNyZWF0ZVN1Y2Nlc3MpLFxuICAgICAgICB0YXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkNsaWNrZWQkID0gdGhpcy5zbmFja0Jhci5ub3RNaXRpZ2F0ZWRPcGVuKHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LmNvbnRleHQuY3JlYXRlT2JqZWN0LmNyZWF0ZWQnKSxcbiAgICAgICAgICAgIGFjdGlvbjogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0BwcnkuY29udGV4dC5jcmVhdGVPYmplY3QuZGV0YWlscycpLFxuICAgICAgICAgICAgdGltZW91dDogMTAwMDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhY3Rpb25DbGlja2VkJD8uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5kZXRhaWwoeyBpZHM6IFthY3Rpb24uaWRdIH0pKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgeyBkaXNwYXRjaDogZmFsc2UgfVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aW9ucyQ6IEFjdGlvbnMsXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBJdGVtU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBQcnlTbmFja2JhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZVxuICApIHt9XG59XG4iXX0=
|
|
@@ -9,7 +9,7 @@ export const initialSearchState = {
|
|
|
9
9
|
};
|
|
10
10
|
export const searchReducer = createReducer(initialSearchState, on(SearchActions.search, (state, action) => ({
|
|
11
11
|
...state,
|
|
12
|
-
searchLoading: [...new Set([...state.searchLoading, DEFAULT_NAMED_QUERY_ID])],
|
|
12
|
+
searchLoading: [...new Set([...state.searchLoading, action.id ?? DEFAULT_NAMED_QUERY_ID])],
|
|
13
13
|
payload: action.payload,
|
|
14
14
|
id: action.id
|
|
15
15
|
})), on(SearchActions.getDatasourceItems, (state, action) => ({
|
|
@@ -27,4 +27,4 @@ export const searchReducer = createReducer(initialSearchState, on(SearchActions.
|
|
|
27
27
|
? [...new Set([...state.searchLoading, ...action.datasources])]
|
|
28
28
|
: [...state.searchLoading.filter((id) => !action.datasources.includes(id))]
|
|
29
29
|
})));
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnJlZHVjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvY29yZS9zdG9yZS9zZWFyY2gvc2VhcmNoLnJlZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztBQVE5QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBZ0I7SUFDN0MsYUFBYSxFQUFFLEVBQUU7SUFDakIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsRUFBRSxFQUFFLFNBQVM7Q0FDZCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FDeEMsa0JBQWtCLEVBQ2xCLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQyxHQUFHLEtBQUs7SUFDUixhQUFhLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQzFGLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztJQUN2QixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7Q0FDZCxDQUFDLENBQUMsRUFDSCxFQUFFLENBQUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RCxHQUFHLEtBQUs7SUFDUixhQUFhLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2pFLENBQUMsQ0FBQyxFQUNILEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxHQUFHLEtBQUs7SUFDUixhQUFhLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLHNCQUFzQixDQUFDLENBQUMsQ0FBQztDQUNyRyxDQUFDLENBQUMsRUFDSCxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEQsR0FBRyxLQUFLO0lBQ1IsYUFBYSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7Q0FDckcsQ0FBQyxDQUFDLEVBQ0gsRUFBRSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckQsR0FBRyxLQUFLO0lBQ1IsYUFBYSxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ3pCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDOUUsQ0FBQyxDQUFDLENBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlZHVjZXIsIG9uIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCB9IGZyb20gJy4uLy4uL21vZGVsL3NlYXJjaC1tb25vLWNsYXNzLm1vZGVsJztcbmltcG9ydCB7IEZ1bGxUZXh0U2VhcmNoUGF5bG9hZCwgTXVsdGlDbGFzc1NlYXJjaFBheWxvYWQgfSBmcm9tICcuLi8uLi9tb2RlbC9zZWFyY2gtbXVsdGktY2xhc3MubW9kZWwnO1xuaW1wb3J0IHsgU2VhcmNoQWN0aW9ucyB9IGZyb20gJy4vc2VhcmNoLmFjdGlvbnMnO1xuaW1wb3J0IHsgREVGQVVMVF9OQU1FRF9RVUVSWV9JRCB9IGZyb20gJy4vc2VhcmNoLmNvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBzZWFyY2hGZWF0dXJlS2V5ID0gJ0Bwcnkvc2VhcmNoJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hTdGF0ZSB7XG4gIHNlYXJjaExvYWRpbmc6IHN0cmluZ1tdO1xuICBwYXlsb2FkPzogTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCB8IE11bHRpQ2xhc3NTZWFyY2hQYXlsb2FkIHwgRnVsbFRleHRTZWFyY2hQYXlsb2FkO1xuICBpZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGluaXRpYWxTZWFyY2hTdGF0ZTogU2VhcmNoU3RhdGUgPSB7XG4gIHNlYXJjaExvYWRpbmc6IFtdLFxuICBwYXlsb2FkOiB1bmRlZmluZWQsXG4gIGlkOiB1bmRlZmluZWRcbn07XG5cbmV4cG9ydCBjb25zdCBzZWFyY2hSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihcbiAgaW5pdGlhbFNlYXJjaFN0YXRlLFxuICBvbihTZWFyY2hBY3Rpb25zLnNlYXJjaCwgKHN0YXRlLCBhY3Rpb24pID0+ICh7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VhcmNoTG9hZGluZzogWy4uLm5ldyBTZXQoWy4uLnN0YXRlLnNlYXJjaExvYWRpbmcsIGFjdGlvbi5pZCA/PyBERUZBVUxUX05BTUVEX1FVRVJZX0lEXSldLFxuICAgIHBheWxvYWQ6IGFjdGlvbi5wYXlsb2FkLFxuICAgIGlkOiBhY3Rpb24uaWRcbiAgfSkpLFxuICBvbihTZWFyY2hBY3Rpb25zLmdldERhdGFzb3VyY2VJdGVtcywgKHN0YXRlLCBhY3Rpb24pID0+ICh7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VhcmNoTG9hZGluZzogWy4uLm5ldyBTZXQoWy4uLnN0YXRlLnNlYXJjaExvYWRpbmcsIGFjdGlvbi5pZF0pXVxuICB9KSksXG4gIG9uKFNlYXJjaEFjdGlvbnMuc2VhcmNoU3VjY2VzcywgKHN0YXRlLCBhY3Rpb24pID0+ICh7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VhcmNoTG9hZGluZzogWy4uLnN0YXRlLnNlYXJjaExvYWRpbmcuZmlsdGVyKChpZCkgPT4gaWQgIT09IChhY3Rpb24uaWQgPz8gREVGQVVMVF9OQU1FRF9RVUVSWV9JRCkpXVxuICB9KSksXG4gIG9uKFNlYXJjaEFjdGlvbnMuc2VhcmNoRmFpbHVyZSwgKHN0YXRlLCBhY3Rpb24pID0+ICh7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VhcmNoTG9hZGluZzogWy4uLnN0YXRlLnNlYXJjaExvYWRpbmcuZmlsdGVyKChpZCkgPT4gaWQgIT09IChhY3Rpb24uaWQgPz8gREVGQVVMVF9OQU1FRF9RVUVSWV9JRCkpXVxuICB9KSksXG4gIG9uKFNlYXJjaEFjdGlvbnMuc2V0U2VhcmNoTG9hZGluZywgKHN0YXRlLCBhY3Rpb24pID0+ICh7XG4gICAgLi4uc3RhdGUsXG4gICAgc2VhcmNoTG9hZGluZzogYWN0aW9uLnN0YXJ0XG4gICAgICA/IFsuLi5uZXcgU2V0KFsuLi5zdGF0ZS5zZWFyY2hMb2FkaW5nLCAuLi5hY3Rpb24uZGF0YXNvdXJjZXNdKV1cbiAgICAgIDogWy4uLnN0YXRlLnNlYXJjaExvYWRpbmcuZmlsdGVyKChpZCkgPT4gIWFjdGlvbi5kYXRhc291cmNlcy5pbmNsdWRlcyhpZCkpXVxuICB9KSlcbik7XG4iXX0=
|
|
@@ -547,11 +547,11 @@ export class DashboardComponent extends SubscriptionnerDirective {
|
|
|
547
547
|
return index + '-' + widgetManifest.type + '-' + JSON.stringify(widgetManifest.layout);
|
|
548
548
|
}
|
|
549
549
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
550
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DashboardComponent, selector: "pry-dashboard", inputs: { staticDashboard: "staticDashboard", CloseOnDragOut: "CloseOnDragOut", displayOptions: "displayOptions" }, outputs: { rowHeight: "rowHeight", rows: "rows" }, viewQueries: [{ propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }, { propertyName: "instanciators", predicate: WidgetInstanciatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"o-dashboard-grid\"\n [style.gridTemplateColumns]=\"gridTemplateColumns$ | async\"\n [style.gridTemplateRows]=\"gridTemplateRows$ | async\"\n [style.gridGap]=\"dashboardParams.gridGap + 'px'\"\n [style.padding]=\"'0 ' + dashboardParams.gridGap + 'px'\"\n #grid\n (mousemove)=\"movingMouse($event)\"\n (drop)=\"dropping($event)\"\n (dragover)=\"dragMove($event)\"\n (dragleave)=\"dragLeave($event)\"\n (dragenter)=\"dragEnter($event)\"\n>\n <ng-container\n *ngFor=\"\n let widgetManifest of (windowManifest$ | async)?.widgets || [];\n let widgetIndex = index;\n trackBy: trackWidgets\n \"\n >\n <div\n class=\"o-dashboard-widget\"\n [class.-edited]=\"modeEdition\"\n [style.gridColumn]=\"gridColumn(widgetManifest.layout)\"\n [style.gridRow]=\"gridRow(widgetManifest.layout)\"\n (drop)=\"droppingInWidget($event, widgetIndex)\"\n >\n <ng-container *ngIf=\"modeEdition\">\n <div class=\"resize nw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-nw')\">\n <pry-icon iconSvg=\"north_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize sw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-sw')\">\n <pry-icon iconSvg=\"south_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize ne-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-ne')\">\n <pry-icon iconSvg=\"north_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize se-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-se')\">\n <pry-icon iconSvg=\"south_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize delete\" (mousedown)=\"toggleRemoveConfirm($event, widgetIndex)\">\n <pry-icon iconSvg=\"close\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"move\" draggable=\"true\" (dragstart)=\"dragStart($event, widgetIndex)\">\n <div class=\"move-inside move-{{ widgetManifest.type }}\">\n <span>{{ widgetManifest.title ?? ('@pry.toolbox.' + widgetManifest.type | i18n) }}</span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!modeEdition\">\n <pry-widget-instanciator\n [staticManifest]=\"widgetManifest\"\n [widgetIndex]=\"widgetIndex\"\n ></pry-widget-instanciator>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container
|
|
550
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DashboardComponent, selector: "pry-dashboard", inputs: { staticDashboard: "staticDashboard", CloseOnDragOut: "CloseOnDragOut", displayOptions: "displayOptions" }, outputs: { rowHeight: "rowHeight", rows: "rows" }, viewQueries: [{ propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }, { propertyName: "instanciators", predicate: WidgetInstanciatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"o-dashboard-grid\"\n [style.gridTemplateColumns]=\"gridTemplateColumns$ | async\"\n [style.gridTemplateRows]=\"gridTemplateRows$ | async\"\n [style.gridGap]=\"dashboardParams.gridGap + 'px'\"\n [style.padding]=\"'0 ' + dashboardParams.gridGap + 'px'\"\n #grid\n (mousemove)=\"movingMouse($event)\"\n (drop)=\"dropping($event)\"\n (dragover)=\"dragMove($event)\"\n (dragleave)=\"dragLeave($event)\"\n (dragenter)=\"dragEnter($event)\"\n>\n <ng-container\n *ngFor=\"\n let widgetManifest of (windowManifest$ | async)?.widgets || [];\n let widgetIndex = index;\n trackBy: trackWidgets\n \"\n >\n <div\n class=\"o-dashboard-widget\"\n [class.-edited]=\"modeEdition\"\n [style.gridColumn]=\"gridColumn(widgetManifest.layout)\"\n [style.gridRow]=\"gridRow(widgetManifest.layout)\"\n (drop)=\"droppingInWidget($event, widgetIndex)\"\n >\n <ng-container *ngIf=\"modeEdition\">\n <div class=\"resize nw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-nw')\">\n <pry-icon iconSvg=\"north_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize sw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-sw')\">\n <pry-icon iconSvg=\"south_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize ne-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-ne')\">\n <pry-icon iconSvg=\"north_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize se-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-se')\">\n <pry-icon iconSvg=\"south_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize delete\" (mousedown)=\"toggleRemoveConfirm($event, widgetIndex)\">\n <pry-icon iconSvg=\"close\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"move\" draggable=\"true\" (dragstart)=\"dragStart($event, widgetIndex)\">\n <div class=\"move-inside move-{{ widgetManifest.type }}\">\n <span>{{ widgetManifest.title ?? ('@pry.toolbox.' + widgetManifest.type | i18n) }}</span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!modeEdition\">\n <pry-widget-instanciator\n [staticManifest]=\"widgetManifest\"\n [widgetIndex]=\"widgetIndex\"\n ></pry-widget-instanciator>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"{\n noWidgets: (nonFillerWidgets$ | async) === 0,\n globalLoading: loading$ | async,\n fetchLoading: (dataFetching$ | async)?.length ?? 1 > 0\n } as data\"\n >\n <ng-container *ngIf=\"data.noWidgets\">\n <div *ngIf=\"data.globalLoading; else notLoading\" class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <pry-icon\n iconSvg=\"loader\"\n class=\"no-widget__loading\"\n [alt]=\"'@pry.widget.target.loading' | i18n\"\n [width]=\"100\"\n [height]=\"100\"\n />\n <span class=\"no-widget__text\">{{ '@pry.widget.target.loading' | i18n }}...</span>\n </div>\n <ng-template #notLoading>\n <div class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <img\n class=\"no-widget__search\"\n src=\"../../../assets/svgs/pry_recherche.svg\"\n alt=\"{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }} {{ backgroundArea$ | async }}\"\n />\n <span class=\"no-widget__text\">{{\n (layout === DashboardGridLayout.MANUAL ? '@pry.widget.target.none_manual' : '@pry.widget.target.none_auto')\n | i18n\n }}</span>\n </div>\n </ng-template>\n </ng-container>\n <div\n class=\"a-page-loader backdrop\"\n [style.display]=\"data.fetchLoading && !data.globalLoading ? 'flex' : 'none'\"\n [style.width.px]=\"params.gridWidth\"\n [style.height.px]=\"params.gridHeight\"\n >\n <pry-icon\n iconSvg=\"loader\"\n class=\"no-widget__loading\"\n [alt]=\"'@pry.widget.target.loading' | i18n\"\n [width]=\"200\"\n [height]=\"200\"\n />\n <p>{{ '@pry.widget.target.loading' | i18n }}...</p>\n </div>\n </ng-container>\n</div>\n<pry-context-menu></pry-context-menu>\n\n<ng-template #templateModal>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelRemoveConfirm()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.WidgetInstanciatorComponent, selector: "pry-widget-instanciator", inputs: ["widgetIndex", "staticManifest", "standalone", "open$"], outputs: ["manifestModified"] }, { kind: "component", type: i6.ContextMenuComponent, selector: "pry-context-menu" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.I18nPipe, name: "i18n" }] }); }
|
|
551
551
|
}
|
|
552
552
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardComponent, decorators: [{
|
|
553
553
|
type: Component,
|
|
554
|
-
args: [{ selector: 'pry-dashboard', template: "<div\n class=\"o-dashboard-grid\"\n [style.gridTemplateColumns]=\"gridTemplateColumns$ | async\"\n [style.gridTemplateRows]=\"gridTemplateRows$ | async\"\n [style.gridGap]=\"dashboardParams.gridGap + 'px'\"\n [style.padding]=\"'0 ' + dashboardParams.gridGap + 'px'\"\n #grid\n (mousemove)=\"movingMouse($event)\"\n (drop)=\"dropping($event)\"\n (dragover)=\"dragMove($event)\"\n (dragleave)=\"dragLeave($event)\"\n (dragenter)=\"dragEnter($event)\"\n>\n <ng-container\n *ngFor=\"\n let widgetManifest of (windowManifest$ | async)?.widgets || [];\n let widgetIndex = index;\n trackBy: trackWidgets\n \"\n >\n <div\n class=\"o-dashboard-widget\"\n [class.-edited]=\"modeEdition\"\n [style.gridColumn]=\"gridColumn(widgetManifest.layout)\"\n [style.gridRow]=\"gridRow(widgetManifest.layout)\"\n (drop)=\"droppingInWidget($event, widgetIndex)\"\n >\n <ng-container *ngIf=\"modeEdition\">\n <div class=\"resize nw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-nw')\">\n <pry-icon iconSvg=\"north_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize sw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-sw')\">\n <pry-icon iconSvg=\"south_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize ne-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-ne')\">\n <pry-icon iconSvg=\"north_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize se-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-se')\">\n <pry-icon iconSvg=\"south_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize delete\" (mousedown)=\"toggleRemoveConfirm($event, widgetIndex)\">\n <pry-icon iconSvg=\"close\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"move\" draggable=\"true\" (dragstart)=\"dragStart($event, widgetIndex)\">\n <div class=\"move-inside move-{{ widgetManifest.type }}\">\n <span>{{ widgetManifest.title ?? ('@pry.toolbox.' + widgetManifest.type | i18n) }}</span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!modeEdition\">\n <pry-widget-instanciator\n [staticManifest]=\"widgetManifest\"\n [widgetIndex]=\"widgetIndex\"\n ></pry-widget-instanciator>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container
|
|
554
|
+
args: [{ selector: 'pry-dashboard', template: "<div\n class=\"o-dashboard-grid\"\n [style.gridTemplateColumns]=\"gridTemplateColumns$ | async\"\n [style.gridTemplateRows]=\"gridTemplateRows$ | async\"\n [style.gridGap]=\"dashboardParams.gridGap + 'px'\"\n [style.padding]=\"'0 ' + dashboardParams.gridGap + 'px'\"\n #grid\n (mousemove)=\"movingMouse($event)\"\n (drop)=\"dropping($event)\"\n (dragover)=\"dragMove($event)\"\n (dragleave)=\"dragLeave($event)\"\n (dragenter)=\"dragEnter($event)\"\n>\n <ng-container\n *ngFor=\"\n let widgetManifest of (windowManifest$ | async)?.widgets || [];\n let widgetIndex = index;\n trackBy: trackWidgets\n \"\n >\n <div\n class=\"o-dashboard-widget\"\n [class.-edited]=\"modeEdition\"\n [style.gridColumn]=\"gridColumn(widgetManifest.layout)\"\n [style.gridRow]=\"gridRow(widgetManifest.layout)\"\n (drop)=\"droppingInWidget($event, widgetIndex)\"\n >\n <ng-container *ngIf=\"modeEdition\">\n <div class=\"resize nw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-nw')\">\n <pry-icon iconSvg=\"north_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize sw-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-sw')\">\n <pry-icon iconSvg=\"south_west\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize ne-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-ne')\">\n <pry-icon iconSvg=\"north_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize se-resize\" (mousedown)=\"startResize($event, widgetIndex, 'resize-se')\">\n <pry-icon iconSvg=\"south_east\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"resize delete\" (mousedown)=\"toggleRemoveConfirm($event, widgetIndex)\">\n <pry-icon iconSvg=\"close\" [animation]=\"false\"></pry-icon>\n </div>\n <div class=\"move\" draggable=\"true\" (dragstart)=\"dragStart($event, widgetIndex)\">\n <div class=\"move-inside move-{{ widgetManifest.type }}\">\n <span>{{ widgetManifest.title ?? ('@pry.toolbox.' + widgetManifest.type | i18n) }}</span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!modeEdition\">\n <pry-widget-instanciator\n [staticManifest]=\"widgetManifest\"\n [widgetIndex]=\"widgetIndex\"\n ></pry-widget-instanciator>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"{\n noWidgets: (nonFillerWidgets$ | async) === 0,\n globalLoading: loading$ | async,\n fetchLoading: (dataFetching$ | async)?.length ?? 1 > 0\n } as data\"\n >\n <ng-container *ngIf=\"data.noWidgets\">\n <div *ngIf=\"data.globalLoading; else notLoading\" class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <pry-icon\n iconSvg=\"loader\"\n class=\"no-widget__loading\"\n [alt]=\"'@pry.widget.target.loading' | i18n\"\n [width]=\"100\"\n [height]=\"100\"\n />\n <span class=\"no-widget__text\">{{ '@pry.widget.target.loading' | i18n }}...</span>\n </div>\n <ng-template #notLoading>\n <div class=\"no-widget\" [style.grid-area]=\"backgroundArea$ | async\">\n <img\n class=\"no-widget__search\"\n src=\"../../../assets/svgs/pry_recherche.svg\"\n alt=\"{{\n (layout === DashboardGridLayout.MANUAL\n ? '@pry.widget.target.none_manual'\n : '@pry.widget.target.none_auto'\n ) | i18n\n }} {{ backgroundArea$ | async }}\"\n />\n <span class=\"no-widget__text\">{{\n (layout === DashboardGridLayout.MANUAL ? '@pry.widget.target.none_manual' : '@pry.widget.target.none_auto')\n | i18n\n }}</span>\n </div>\n </ng-template>\n </ng-container>\n <div\n class=\"a-page-loader backdrop\"\n [style.display]=\"data.fetchLoading && !data.globalLoading ? 'flex' : 'none'\"\n [style.width.px]=\"params.gridWidth\"\n [style.height.px]=\"params.gridHeight\"\n >\n <pry-icon\n iconSvg=\"loader\"\n class=\"no-widget__loading\"\n [alt]=\"'@pry.widget.target.loading' | i18n\"\n [width]=\"200\"\n [height]=\"200\"\n />\n <p>{{ '@pry.widget.target.loading' | i18n }}...</p>\n </div>\n </ng-container>\n</div>\n<pry-context-menu></pry-context-menu>\n\n<ng-template #templateModal>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"cancelRemoveConfirm()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n" }]
|
|
555
555
|
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }]; }, propDecorators: { templateModal: [{
|
|
556
556
|
type: ViewChild,
|
|
557
557
|
args: ['templateModal', { read: TemplateRef }]
|
|
@@ -572,4 +572,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
572
572
|
}], rows: [{
|
|
573
573
|
type: Output
|
|
574
574
|
}] } });
|
|
575
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvY29tcG9uZW50cy9kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2Rhc2hib2FyZC9jb21wb25lbnRzL2Rhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsRUFBRSxFQUNGLFNBQVMsRUFDVixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFFLE9BQU8sRUFDTCxtQkFBbUIsRUFJcEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3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QWtCO2tCQUo5QixTQUFTOytCQUNFLGVBQWU7aUpBWTBCLGFBQWE7c0JBQS9ELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFJTixhQUFhO3NCQUF2RCxZQUFZO3VCQUFDLDJCQUEyQjtnQkFRNUIsZUFBZTtzQkFBM0IsS0FBSztnQkFJRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRWEsT0FBTztzQkFBekIsU0FBUzt1QkFBQyxNQUFNO2dCQWdCUCxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7XG4gIGF1ZGl0VGltZSxcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBjb21iaW5lTGF0ZXN0V2l0aCxcbiAgZnJvbUV2ZW50LFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3dpdGNoTWFwXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERpc3BsYXlPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9kaXNwbGF5LW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIERhc2hib2FyZEdyaWRMYXlvdXQsXG4gIERhc2hib2FyZE1hbmlmZXN0LFxuICBXaWRnZXRMYXlvdXQsXG4gIFdpZGdldE1hbmlmZXN0XG59IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvbWFuaWZlc3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1JTUVfVFlQRV9SRVNVTFRTRVQgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL21pbWV0eXBlLXJlc3VsdHNldC5jb25zdGFudCc7XG5pbXBvcnQgeyBDYXRlZ29yeUFjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NhdGVnb3J5L2NhdGVnb3J5LmFjdGlvbnMnO1xuaW1wb3J0IHsgQ2xhc3NBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9jbGFzcy9jbGFzcy5hY3Rpb25zJztcbmltcG9ydCB7IENvbmZpZ0FjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NvbmZpZy9jb25maWcuYWN0aW9ucyc7XG5pbXBvcnQgeyBDb25maWdTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NvbmZpZy9jb25maWcuc2VsZWN0b3JzJztcbmltcG9ydCB7IERhdGFTb3VyY2VBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5hY3Rpb25zJztcbmltcG9ydCB7IEZpZWxkQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvZmllbGQvZmllbGQuYWN0aW9ucyc7XG5pbXBvcnQgeyBSZWxhdGlvblR5cGVzQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvcmVsYXRpb24tdHlwZXMvcmVsYXRpb24tdHlwZXMuYWN0aW9ucyc7XG5pbXBvcnQgeyBXaWRnZXRQbGFjZW1lbnRVdGlscyB9IGZyb20gJy4uL2NvbXBvbmVudHMvd2lkZ2V0cy93aWRnZXQtcGxhY2VtZW50L3dpZGdldC1wbGFjZW1lbnQudXRpbHMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQWN0aW9ucywgRGFzaGJvYXJkQ2VsbFBhcmFtcywgVmlld01vZGUgfSBmcm9tICcuLi9zdG9yZS9kYXNoYm9hcmQuYWN0aW9ucyc7XG5pbXBvcnQge1xuICBERUZBVUxUX0NPTFVNTlNfTlVNQkVSLFxuICBERUZBVUxUX0dBUF9QWCxcbiAgREVGQVVMVF9ST1dfSEVJR0hUX1BYLFxuICBERUZBVUxUX1JPV1NfTlVNQkVSXG59IGZyb20gJy4uL3N0b3JlL2Rhc2hib2FyZC5jb250YW50cyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRTZWxlY3RvcnMgfSBmcm9tICcuLi9zdG9yZS9kYXNoYm9hcmQuc2VsZWN0b3JzJztcbmltcG9ydCB7IHNvbHZlQ29sbGlzaW9ucyB9IGZyb20gJy4vc29sdmUtY29sbGlzaW9ucy5mdW5jdGlvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgfSBmcm9tICcuL3N1YnNjcmlwdGlvbm5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgV2lkZ2V0SW5zdGFuY2lhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXRzL3dpZGdldC1pbnN0YW5jaWF0b3Ivd2lkZ2V0LWluc3RhbmNpYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9zZWFyY2gvc2VhcmNoLnNlbGVjdG9ycyc7XG5cbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUID0gJ2FwcGxpY2F0aW9uL3dpZGdldC1tYW5pZmVzdCc7XG5leHBvcnQgY29uc3QgTUlNRV9UWVBFX1dJREdFVF9UWVBFID0gJ2FwcGxpY2F0aW9uL3dpZGdldC10eXBlLSc7XG5leHBvcnQgY29uc3QgTUlNRV9UWVBFX1dJREdFVF9TSVpFID0gJ2FwcGxpY2F0aW9uL3dpZGdldC1zaXplLSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1kYXNoYm9hcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBtYW5pZmVzdDogRGFzaGJvYXJkTWFuaWZlc3QgfCBudWxsID0gbnVsbDtcbiAgd2luZG93TWFuaWZlc3QkOiBPYnNlcnZhYmxlPERhc2hib2FyZE1hbmlmZXN0PjtcbiAgbW9kZUVkaXRpb24gPSBmYWxzZTtcbiAgbW9kZUVkaXRpb24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhY3Rpb25UeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHN0YXRpY0Rhc2hib2FyZCQ6IEJlaGF2aW9yU3ViamVjdDxEYXNoYm9hcmRNYW5pZmVzdCB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXNoYm9hcmRNYW5pZmVzdCB8IG51bGw+KG51bGwpO1xuICBzdGFja2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpbmRleEZvclJlbW92YWw6IG51bWJlciA9IC0xO1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZU1vZGFsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSB0ZW1wbGF0ZU1vZGFsITogVGVtcGxhdGVSZWY8YW55PjtcbiAgc2VwYXJhdG9ycyQ6IE9ic2VydmFibGU8V2lkZ2V0TGF5b3V0W10+O1xuICBub25GaWxsZXJXaWRnZXRzJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgQFZpZXdDaGlsZHJlbihXaWRnZXRJbnN0YW5jaWF0b3JDb21wb25lbnQpIGluc3RhbmNpYXRvcnM/OiBRdWVyeUxpc3Q8V2lkZ2V0SW5zdGFuY2lhdG9yQ29tcG9uZW50PjtcbiAgZGF0YUZldGNoaW5nJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIHBhcmFtczogRGFzaGJvYXJkQ2VsbFBhcmFtcyA9IHt9IGFzIERhc2hib2FyZENlbGxQYXJhbXM7XG5cbiAgZ2V0IHdpZGdldHNJbnN0YW5jZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2lhdG9ycz8ubWFwKChpbnN0YW5jaWF0b3IpID0+IGluc3RhbmNpYXRvci5pbnN0YW5jaWF0ZWRDb21wb25lbnQuaW5zdGFuY2UpID8/IFtdO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHN0YXRpY0Rhc2hib2FyZCh3aW5kb3c6IERhc2hib2FyZE1hbmlmZXN0KSB7XG4gICAgdGhpcy5zdGF0aWNEYXNoYm9hcmQkLm5leHQod2luZG93KTtcbiAgfVxuXG4gIEBJbnB1dCgpIENsb3NlT25EcmFnT3V0ID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzcGxheU9wdGlvbnM/OiBEaXNwbGF5T3B0aW9ucztcblxuICBAVmlld0NoaWxkKCdncmlkJykgZ3JpZFJlZiE6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgY2FuQ2FsY3VsYXRlVmlldyA9IGZhbHNlO1xuICB0YXJnZXRJbmRleGVzJDogT2JzZXJ2YWJsZTxudW1iZXJbXT47XG4gIGRhc2hib2FyZFBhcmFtczogRGFzaGJvYXJkQ2VsbFBhcmFtcyA9IHtcbiAgICBncmlkV2lkdGg6IDEsXG4gICAgZ3JpZEhlaWdodDogMSxcbiAgICBncmlkR2FwOiBERUZBVUxUX0dBUF9QWCxcbiAgICBjb2x1bW5zOiBERUZBVUxUX0NPTFVNTlNfTlVNQkVSLFxuICAgIGNlbGxXaWR0aDogMSxcbiAgICBjZWxsSGVpZ2h0OiBERUZBVUxUX1JPV19IRUlHSFRfUFgsXG4gICAgcm93czogREVGQVVMVF9ST1dTX05VTUJFUixcbiAgICBvZmZzZXRMZWZ0OiAwLFxuICAgIG9mZnNldFRvcDogMCxcbiAgICBtb2JpbGVNb2RlOiBmYWxzZVxuICB9O1xuICBwcml2YXRlIGJyZWFrcG9pbnQ6IG51bWJlciA9IDA7XG4gIEBPdXRwdXQoKSByb3dIZWlnaHQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdDogV2lkZ2V0TWFuaWZlc3QgfCBudWxsID0gbnVsbDtcbiAgaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdDogV2lkZ2V0TWFuaWZlc3RbXSA9IFtdO1xuICBtb3ZlOiB7XG4gICAgaW5pdGlhbFg6IG51bWJlcjtcbiAgICBpbml0aWFsWTogbnVtYmVyO1xuICAgIHByZXZpb3VzWDogbnVtYmVyO1xuICAgIHByZXZpb3VzWTogbnVtYmVyO1xuICB9ID0ge1xuICAgIGluaXRpYWxYOiAtMSxcbiAgICBpbml0aWFsWTogLTEsXG4gICAgcHJldmlvdXNYOiAtMSxcbiAgICBwcmV2aW91c1k6IC0xXG4gIH07XG4gIGdyaWRUZW1wbGF0ZVJvd3MkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIERhc2hib2FyZEdyaWRMYXlvdXQgPSBEYXNoYm9hcmRHcmlkTGF5b3V0O1xuICBsYXlvdXQ6IERhc2hib2FyZEdyaWRMYXlvdXQgPSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTDtcbiAgYmFja2dyb3VuZEFyZWEkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHByaXZhdGUgY29uZmlybVJlbW92ZVJlZj86IE92ZXJsYXlSZWY7XG4gIEFycmF5OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PiwgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LCBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMubG9hZGluZyk7XG4gICAgdGhpcy5kYXRhRmV0Y2hpbmckID0gdGhpcy5zdG9yZS5zZWxlY3QoU2VhcmNoU2VsZWN0b3JzLnNlYXJjaExvYWRpbmcpLnBpcGUoZGVsYXkoMTApKTtcbiAgICB0aGlzLm1vZGVFZGl0aW9uJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5kYXNoYm9hcmRFZGl0aW9uTW9kZSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubW9kZUVkaXRpb24kLnN1YnNjcmliZSgobW9kZSkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVFZGl0aW9uID0gbW9kZTtcbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckFjdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudGFyZ2V0SW5kZXhlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMudGFyZ2V0VGVuYW50c0luZGV4ZXMpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZGFzaGJvYXJkQ2VsbFBhcmFtcykuc3Vic2NyaWJlKChwYXJhbXMpID0+ICh0aGlzLmRhc2hib2FyZFBhcmFtcyA9IHBhcmFtcykpXG4gICAgKTtcbiAgICB0aGlzLndpbmRvd01hbmlmZXN0JCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy53aW5kb3dNYW5pZmVzdCkucGlwZShcbiAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMuc3RhdGljRGFzaGJvYXJkJCksXG4gICAgICBzd2l0Y2hNYXAoKFt3aW5kb3dNYW5pZmVzdCwgc3RhdGljRGFzaGJvYXJkXSkgPT4gKCFzdGF0aWNEYXNoYm9hcmQgPyBvZih3aW5kb3dNYW5pZmVzdCkgOiBvZihzdGF0aWNEYXNoYm9hcmQpKSksXG4gICAgICBtYXAoKF93TWFuaWZlc3QpID0+IHtcbiAgICAgICAgY29uc3Qgd01hbmlmZXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShfd01hbmlmZXN0KSk7XG4gICAgICAgIGlmICh3TWFuaWZlc3QuZ3JpZD8ubGF5b3V0ICYmIHdNYW5pZmVzdC5ncmlkLmxheW91dCAhPT0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUwpIHtcbiAgICAgICAgICAvLyBDb21wbGV0ZSB3aXRoIHBsYWNlaG9sZGVyc1xuICAgICAgICAgIGNvbnN0IHNpemUgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5wbGFjZXNGb3JMYXlvdXQod01hbmlmZXN0LmdyaWQubGF5b3V0KTtcbiAgICAgICAgICBjb25zdCBwbGFjZXMgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5wbGFjZW1lbnRPcHRpb25zKFxuICAgICAgICAgICAgeyB0eXBlOiAnZmlsbGVyJywgbGF5b3V0OiB7IHg6IDEsIHk6IDEsIHdpZHRoOiAxLCBoZWlnaHQ6IDEgfSB9LFxuICAgICAgICAgICAgd01hbmlmZXN0LmdyaWQubGF5b3V0LFxuICAgICAgICAgICAgd01hbmlmZXN0LmdyaWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCBhZGRlZCA9IHRydWU7XG4gICAgICAgICAgd2hpbGUgKHdNYW5pZmVzdC53aWRnZXRzLmxlbmd0aCA8IHNpemUgJiYgYWRkZWQpIHtcbiAgICAgICAgICAgIGFkZGVkID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBwb3RlbnRpYWwgPSB7IC4uLnBsYWNlc1tpXSwgb3B0aW9uczogeyBpbmRleDogaSB9IH07XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB3TWFuaWZlc3Qud2lkZ2V0c1xuICAgICAgICAgICAgICAgICAgLm1hcCgod2lkZ2V0OiBXaWRnZXRNYW5pZmVzdCkgPT4gV2lkZ2V0UGxhY2VtZW50VXRpbHMuYXJlRGlzam9pbnQod2lkZ2V0LCBwb3RlbnRpYWwpKVxuICAgICAgICAgICAgICAgICAgLnJlZHVjZSgoYTogYm9vbGVhbiwgYjogYm9vbGVhbikgPT4gYSAmJiBiLCB0cnVlKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB3TWFuaWZlc3Qud2lkZ2V0cy5wdXNoKHBvdGVudGlhbCk7XG4gICAgICAgICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3TWFuaWZlc3Q7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSlcbiAgICApO1xuICAgIHRoaXMubm9uRmlsbGVyV2lkZ2V0cyQgPSB0aGlzLndpbmRvd01hbmlmZXN0JC5waXBlKFxuICAgICAgbWFwKCh3TWFuaWZlc3QpID0+IHdNYW5pZmVzdC53aWRnZXRzLmZpbHRlcigodykgPT4gdy50eXBlICE9PSAnZmlsbGVyJykubGVuZ3RoKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zdGF0aWNEYXNoYm9hcmQkLnN1YnNjcmliZSgobWFuaWZlc3QpID0+IHtcbiAgICAgICAgaWYgKCEhbWFuaWZlc3QpIHtcbiAgICAgICAgICBjb25zdCBnZXREYXRhQWN0aW9ucyA9IChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgICAgICAgICAobWFuaWZlc3Qud2lkZ2V0cyA/PyAoW10gYXMgV2lkZ2V0TWFuaWZlc3RbXSkpXG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCBjXSwgW10gYXMgV2lkZ2V0TWFuaWZlc3RbXSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgod2lkTWFuaWZlc3QpID0+IHdpZE1hbmlmZXN0LmRhdGFzb3VyY2UpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdIGFzIChzdHJpbmcgfCBzdHJpbmdbXSlbXVxuICAgICAgICAgICAgKS5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi4oQXJyYXkuaXNBcnJheShjKSA/IGMgOiBbY10pXSwgW10pIGFzIHN0cmluZ1tdXG4gICAgICAgICAgKS5tYXAoKHJlc3VsdFNldCkgPT4gRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHsgaWQ6IHJlc3VsdFNldCB9KSk7XG5cbiAgICAgICAgICBnZXREYXRhQWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2goYWN0aW9uKSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLndpbmRvd01hbmlmZXN0JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuYXNzZXJ0UmVzdWx0U2V0cyh7fSkpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChGaWVsZEFjdGlvbnMubG9hZCgpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENsYXNzQWN0aW9ucy5sb2FkKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ2F0ZWdvcnlBY3Rpb25zLmxvYWQoKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmdldE1hcFN0eWxlcygpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmxvYWQoKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChSZWxhdGlvblR5cGVzQWN0aW9ucy5sb2FkKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5sb2FkQ3VzdG9taXphdGlvbigpKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgICAgLnBpcGUoYXVkaXRUaW1lKDEwMCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlVmlldygpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy53aW5kb3dNYW5pZmVzdCQsIHRoaXMubW9kZUVkaXRpb24kXSlcbiAgICAgICAgLnBpcGUoYXVkaXRUaW1lKDEwMCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlVmlldygpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ2tleWRvd24nKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKCRldmVudDogRXZlbnQpID0+ICRldmVudCBhcyBLZXlib2FyZEV2ZW50KSxcbiAgICAgICAgICBmaWx0ZXIoKCRldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gJGV2ZW50LmtleSA9PT0gJ0wnICYmICRldmVudC5jdHJsS2V5ICYmICRldmVudC5zaGlmdEtleSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7fSkpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ21vdXNldXAnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyQWN0aW9ucygpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy5icmVha3BvaW50KS5zdWJzY3JpYmUoKGJwKSA9PiB7XG4gICAgICAgIHRoaXMuYnJlYWtwb2ludCA9IGJwO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMud2luZG93TWFuaWZlc3QkLnN1YnNjcmliZSgobWFuaWZlc3QpID0+IHtcbiAgICAgICAgdGhpcy5tYW5pZmVzdCA9IG1hbmlmZXN0O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5ncmlkTGF5b3V0KS5zdWJzY3JpYmUoKGxheW91dCkgPT4ge1xuICAgICAgICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZ3JpZFRlbXBsYXRlUm93cyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpbmRvd01hbmlmZXN0JCwgdGhpcy5zdGFja2VkJF0pLnBpcGUoXG4gICAgICBtYXAoKFttYW5pZmVzdCwgc3RhY2tlZF0pID0+XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVSb3dzKFxuICAgICAgICAgIHN0YWNrZWQgJiYgdGhpcy5tYW5pZmVzdFxuICAgICAgICAgICAgPyB0aGlzLm1hbmlmZXN0Py53aWRnZXRzLm1hcCgod20pID0+IHdtLmxheW91dC5oZWlnaHQpLnJlZHVjZSgod20xLCB3bTIpID0+IHdtMSArIHdtMiwgMClcbiAgICAgICAgICAgIDogbWFuaWZlc3QuZ3JpZD8ucm93cyA/PyBERUZBVUxUX1JPV1NfTlVNQkVSXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW5zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2luZG93TWFuaWZlc3QkLCB0aGlzLnN0YWNrZWQkXSkucGlwZShcbiAgICAgIG1hcCgoW21hbmlmZXN0LCBzdGFja2VkXSkgPT4gdGhpcy5nZW5lcmF0ZUNvbHVtbnMoc3RhY2tlZCA/IDEgOiBtYW5pZmVzdC5ncmlkPy5jb2x1bW5zIHx8IERFRkFVTFRfQ09MVU1OU19OVU1CRVIpKVxuICAgICk7XG5cbiAgICB0aGlzLmJhY2tncm91bmRBcmVhJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2luZG93TWFuaWZlc3QkLCB0aGlzLnN0YWNrZWQkXSkucGlwZShcbiAgICAgIG1hcCgoW21hbmlmZXN0LCBzdGFja2VkXSkgPT5cbiAgICAgICAgIXN0YWNrZWRcbiAgICAgICAgICA/IGAzLzMvJHsobWFuaWZlc3QuZ3JpZD8ucm93cyA/PyBERUZBVUxUX1JPV1NfTlVNQkVSKSAtIDF9LyR7XG4gICAgICAgICAgICAgIChtYW5pZmVzdC5ncmlkPy5jb2x1bW5zID8/IERFRkFVTFRfQ09MVU1OU19OVU1CRVIpIC0gMVxuICAgICAgICAgICAgfWBcbiAgICAgICAgICA6IGAzLzEvJHsobWFuaWZlc3QuZ3JpZD8uY29sdW1ucyA/PyBERUZBVUxUX0NPTFVNTlNfTlVNQkVSKSAtIDF9LzFgXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc2VwYXJhdG9ycyQgPSB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5ncmlkTGF5b3V0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGF5b3V0KSA9PlxuICAgICAgICAgIGxheW91dCA9PT0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUxcbiAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgIDogV2lkZ2V0UGxhY2VtZW50VXRpbHMuZ2V0TGF5b3V0U2l6ZShsYXlvdXQsIHsgcm93czogMSwgY29sdW1uczogMSB9KVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZGlzcGxheU9wdGlvbnMpXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURpc3BsYXlPcHRpb25zKHsgbW9kZTogVmlld01vZGUuQ1VTVE9NLCBjdXN0b21EaXNwbGF5OiB0aGlzLmRpc3BsYXlPcHRpb25zIH0pXG4gICAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2FuQ2FsY3VsYXRlVmlldyA9IHRydWU7XG4gIH1cblxuICAvKioqXG4gICAqIE1hbmFnZSBkaXNwbGF5XG4gICAqL1xuXG4gIGNhbGN1bGF0ZVZpZXcoKSB7XG4gICAgaWYgKHRoaXMuY2FuQ2FsY3VsYXRlVmlldykge1xuICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgIHdoaWxlIChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA9PT0gMCAmJiAhIWVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBncmlkV2lkdGggPSAoPEhUTUxFbGVtZW50PmVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgY29uc3QgbW9iaWxlTW9kZSA9IGdyaWRXaWR0aCA8IHRoaXMuYnJlYWtwb2ludDtcbiAgICAgIHRoaXMuc3RhY2tlZCQubmV4dCh0aGlzLmRhc2hib2FyZFBhcmFtcy5tb2JpbGVNb2RlICYmICF0aGlzLm1vZGVFZGl0aW9uKTtcbiAgICAgIGNvbnN0IHJvd3MgPSAhdGhpcy5kaXNwbGF5SXNTdGFja2VkXG4gICAgICAgID8gKCEhdGhpcy5tYW5pZmVzdCAmJiAhIXRoaXMubWFuaWZlc3QuZ3JpZCAmJiB0aGlzLm1hbmlmZXN0LmdyaWQucm93cykgfHwgREVGQVVMVF9ST1dTX05VTUJFUlxuICAgICAgICA6IHRoaXMubWFuaWZlc3Q/LndpZGdldHMucmVkdWNlKChwOiBudW1iZXIsIGM6IFdpZGdldE1hbmlmZXN0KSA9PiBwICsgYy5sYXlvdXQuaGVpZ2h0LCAwKSA/PyAxO1xuXG4gICAgICB0aGlzLnBhcmFtcyA9IHtcbiAgICAgICAgZ3JpZFdpZHRoLFxuICAgICAgICAvLyBDYWxjdWxhdGUgaGVpZ2h0IHRvIHBhcmVudCB0aGUgcGFyZW50J3NcbiAgICAgICAgZ3JpZEhlaWdodDogZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsXG4gICAgICAgIGdyaWRHYXA6IDEsXG4gICAgICAgIGNvbHVtbnM6ICghIXRoaXMubWFuaWZlc3QgJiYgISF0aGlzLm1hbmlmZXN0LmdyaWQgJiYgdGhpcy5tYW5pZmVzdC5ncmlkLmNvbHVtbnMpIHx8IERFRkFVTFRfQ09MVU1OU19OVU1CRVIsXG4gICAgICAgIGNlbGxIZWlnaHQ6IDEsXG4gICAgICAgIHJvd3MsXG4gICAgICAgIGNlbGxXaWR0aDogMCxcbiAgICAgICAgb2Zmc2V0TGVmdDogdGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICAgICAgb2Zmc2V0VG9wOiB0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AsXG4gICAgICAgIG1vYmlsZU1vZGVcbiAgICAgIH07XG4gICAgICB0aGlzLnBhcmFtcy5ncmlkR2FwID1cbiAgICAgICAgdGhpcy5wYXJhbXMucm93cyAqIHRoaXMucGFyYW1zLmNlbGxIZWlnaHQgPCB0aGlzLnBhcmFtcy5ncmlkSGVpZ2h0XG4gICAgICAgICAgPyAhIXRoaXMubWFuaWZlc3QgJiYgISF0aGlzLm1hbmlmZXN0LmdyaWRcbiAgICAgICAgICAgID8gdGhpcy5tYW5pZmVzdC5ncmlkLmdhcCB8fCBERUZBVUxUX0dBUF9QWFxuICAgICAgICAgICAgOiBERUZBVUxUX0dBUF9QWFxuICAgICAgICAgIDogMDtcbiAgICAgIHRoaXMucGFyYW1zLmNlbGxIZWlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgKHRoaXMucGFyYW1zLmdyaWRIZWlnaHQgLSAodGhpcy5wYXJhbXMucm93cyAtIDEpICogdGhpcy5wYXJhbXMuZ3JpZEdhcCkgLyB0aGlzLnBhcmFtcy5yb3dzXG4gICAgICApO1xuICAgICAgdGhpcy5wYXJhbXMuY2VsbFdpZHRoID1cbiAgICAgICAgKHRoaXMucGFyYW1zLmdyaWRXaWR0aCAtICh0aGlzLnBhcmFtcy5jb2x1bW5zIC0gMSkgKiB0aGlzLnBhcmFtcy5ncmlkR2FwKSAvIHRoaXMucGFyYW1zLmNvbHVtbnM7XG5cbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEYXNoYm9hcmRQYXJhbXMoeyBwYXJhbXM6IHRoaXMucGFyYW1zIH0pKTtcblxuICAgICAgdGhpcy5yb3dzLm5leHQodGhpcy5wYXJhbXMucm93cyk7XG4gICAgICB0aGlzLnJvd0hlaWdodC5uZXh0KHRoaXMucGFyYW1zLmNlbGxIZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNwbGF5SXNTdGFja2VkKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrZWQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBncmlkQ29sdW1uKGxheW91dDogV2lkZ2V0TGF5b3V0KTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5SXNTdGFja2VkIHx8ICFsYXlvdXQpIHtcbiAgICAgIHJldHVybiAnMSAvIDEnO1xuICAgIH1cbiAgICBpZiAobGF5b3V0LndpZHRoID4gMSkge1xuICAgICAgcmV0dXJuIGAke01hdGgubWluKGxheW91dC54LCB0aGlzLmRhc2hib2FyZFBhcmFtcy5jb2x1bW5zIC0gbGF5b3V0LndpZHRoICsgMSl9IC8gJHtNYXRoLm1pbihcbiAgICAgICAgbGF5b3V0LnggKyBsYXlvdXQud2lkdGgsXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNvbHVtbnMgKyAxXG4gICAgICApfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtsYXlvdXQueH1gO1xuICAgIH1cbiAgfVxuXG4gIGdyaWRSb3cobGF5b3V0OiBXaWRnZXRMYXlvdXQpOiBzdHJpbmcge1xuICAgIGlmICghbGF5b3V0KSB7XG4gICAgICByZXR1cm4gJzEnO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNwbGF5SXNTdGFja2VkKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0hlaWdodCA9IHRoaXMubWFuaWZlc3Q/LndpZGdldHNcbiAgICAgICAgLmZpbHRlcigod206IFdpZGdldE1hbmlmZXN0KSA9PiAod20ubGF5b3V0LnkgPT09IGxheW91dC55ICYmIHdtLmxheW91dC54IDwgbGF5b3V0LngpIHx8IHdtLmxheW91dC55IDwgbGF5b3V0LnkpXG4gICAgICAgIC5yZWR1Y2UoKHA6IG51bWJlciwgYzogV2lkZ2V0TWFuaWZlc3QpID0+IHAgKyBjLmxheW91dC5oZWlnaHQsIDEpO1xuICAgICAgcmV0dXJuIGAke3ByZXZpb3VzSGVpZ2h0ID8/IDF9IC8gJHsocHJldmlvdXNIZWlnaHQgPz8gMSkgKyBsYXlvdXQuaGVpZ2h0fWA7XG4gICAgfVxuICAgIGlmIChsYXlvdXQuaGVpZ2h0ID4gMSkge1xuICAgICAgcmV0dXJuIGAke01hdGgubWF4KDEsIE1hdGgubWluKGxheW91dC55LCB0aGlzLmRhc2hib2FyZFBhcmFtcy5yb3dzIC0gbGF5b3V0LmhlaWdodCArIDEpKX0gLyAke01hdGgubWluKFxuICAgICAgICBsYXlvdXQueSArIGxheW91dC5oZWlnaHQsXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkUGFyYW1zLnJvd3MgKyAxXG4gICAgICApfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtsYXlvdXQueX1gO1xuICAgIH1cbiAgfVxuXG4gIGdlbmVyYXRlUm93cyhyb3dzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheShyb3dzKS5maWxsKCcxZnInKS5qb2luKCcgJyk7XG4gIH1cblxuICBnZW5lcmF0ZUNvbHVtbnMoY29sdW1uczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQXJyYXkoY29sdW1ucykuZmlsbCgnMWZyJykuam9pbignICcpO1xuICB9XG5cbiAgLyoqKlxuICAgKiBEaXJlY3QgYWN0aW9ucyBvbiB3aWRnZXRzXG4gICAqL1xuXG4gIHJlbW92ZShpOiBudW1iZXIpIHtcbiAgICBjb25zdCBsaXN0V2lkZ2V0TWFuaWZlc3RzID0gWy4uLih0aGlzLm1hbmlmZXN0IHx8IHsgd2lkZ2V0czogW10gfSkud2lkZ2V0c107XG4gICAgbGlzdFdpZGdldE1hbmlmZXN0cy5zcGxpY2UoaSwgMSkuZmlsdGVyKCh3aWRnZXQpID0+IHdpZGdldC50eXBlICE9PSAnZmlsbGVyJyk7XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEYXNoYm9hcmRNYW5pZmVzdCh7XG4gICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgLi4udGhpcy5tYW5pZmVzdCxcbiAgICAgICAgICB3aWRnZXRzOiBsaXN0V2lkZ2V0TWFuaWZlc3RzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG1vdmVJbk5ld1dpbmRvdyh3aWRnZXRJbmRleDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLm1vdmVXaWRnZXQoeyB3aWRnZXRJbmRleCwgdGFyZ2V0SW5kZXggfSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiBmYWxzZSB9KSk7XG4gIH1cblxuICBtYXhpbWl6ZSh3aWRnZXRJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLm1heGltaXplV2lkZ2V0KHsgd2lkZ2V0SW5kZXggfSkpO1xuICB9XG5cbiAgLyoqKlxuICAgKiBNYW5hZ2UgZHJhZyBuIGRyb3AsIG1vdmUsIHJlc2l6ZVxuICAgKi9cblxuICBwcmVwYXJlTW9kaWZpY2F0aW9uKCRldmVudDogTW91c2VFdmVudCwgaW5kZXhNYW5pZmVzdDogbnVtYmVyKSB7XG4gICAgdGhpcy5tb3ZlLmluaXRpYWxYID0gJGV2ZW50LmNsaWVudFg7XG4gICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gJGV2ZW50LmNsaWVudFk7XG4gICAgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgodGhpcy5tYW5pZmVzdCB8fCB7IHdpZGdldHM6IFtdIH0pLndpZGdldHMpKTtcbiAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPSB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3Quc3BsaWNlKGluZGV4TWFuaWZlc3QsIDEpWzBdO1xuICAgIC8vIGNvbnNvbGUubG9nKCdwcmVwYXJlJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuICB9XG5cbiAgc3RhcnRSZXNpemUoJGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleE1hbmlmZXN0OiBudW1iZXIsIGRpcmVjdGlvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3Rpb25UeXBlID0gZGlyZWN0aW9uO1xuICAgIHRoaXMucHJlcGFyZU1vZGlmaWNhdGlvbigkZXZlbnQsIGluZGV4TWFuaWZlc3QpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydCByZXNpemUnLCB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QsIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCk7XG4gIH1cblxuICBkcmFnU3RhcnQoJGV2ZW50OiBEcmFnRXZlbnQsIGluZGV4TWFuaWZlc3Q6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aW9uVHlwZSA9ICdtb3ZlJztcbiAgICB0aGlzLnByZXBhcmVNb2RpZmljYXRpb24oJGV2ZW50LCBpbmRleE1hbmlmZXN0KTtcbiAgICBEYXNoYm9hcmRDb21wb25lbnQuYWRkVHJhbnNmZXJNYW5pZmVzdE1ldGFkYXRhKCRldmVudCwgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID8/ICh7fSBhcyBXaWRnZXRNYW5pZmVzdCkpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydCBtb3ZlJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYWRkVHJhbnNmZXJNYW5pZmVzdE1ldGFkYXRhKCRldmVudDogRHJhZ0V2ZW50LCBtYW5pZmVzdDogV2lkZ2V0TWFuaWZlc3QpIHtcbiAgICBpZiAoISEkZXZlbnQgJiYgISEkZXZlbnQuZGF0YVRyYW5zZmVyICYmICEkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpKSB7XG4gICAgICAkZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCwgSlNPTi5zdHJpbmdpZnkobWFuaWZlc3QpKTtcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShNSU1FX1RZUEVfV0lER0VUX1RZUEUgKyBtYW5pZmVzdC50eXBlLCAndW51c2VkJyk7XG4gICAgICAvLyBQYXNzaW5nIHdpZGdldCBzaXplIGFzIGEgbWltZSB0eXBlLCBzbyB0aGF0IHdlIGNhbiBieXBhc3Mgc2VjdXJpdHkgZm9yIHBsYWNlaG9sZGVyIHNpemUgYXQgdGhlIGFycml2YWwgb2YgdGhlIGRyYWdcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShcbiAgICAgICAgTUlNRV9UWVBFX1dJREdFVF9TSVpFICsgYCR7bWFuaWZlc3QubGF5b3V0LndpZHRofS0ke21hbmlmZXN0LmxheW91dC5oZWlnaHR9YCxcbiAgICAgICAgJ3VzZWxlc3MnIC8vIGRhdGEgaXMgaW4gdGhlIG1pbWUgdHlwZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBkcmFnRW50ZXIoJGV2ZW50OiBEcmFnRXZlbnQsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCB0eXBlcyA9ICgkZXZlbnQuZGF0YVRyYW5zZmVyIHx8IHsgdHlwZXM6IFsnJ10gfSkudHlwZXM7XG5cbiAgICBpZiAodHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCkpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMuYWN0aW9uVHlwZSA9ICdtb3ZlJztcbiAgICB9XG4gIH1cblxuICBjaGVja0ZvckRyYWdFbnRlcigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCkge1xuICAgICAgLy8gY3JlYXRlIHBsYWNlaG9sZGVyIGFzIGEgZHJhZyBlbnRlcmVkIHRoZSBjb21wb25lbnQsIGdvIGludG8gZWRpdGlvbiBtb2RlIGFuZCBtb3ZlIGFjdGlvbiBpZiBpdCdzIGEgd2lkZ2V0IGJlaW5nIGRyYWdnZWRcbiAgICAgIGNvbnN0IHR5cGVzID0gKCgkZXZlbnQgYXMgRHJhZ0V2ZW50KS5kYXRhVHJhbnNmZXIgfHwgeyB0eXBlczogWycnXSB9KS50eXBlcztcbiAgICAgIGlmICh0eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgICB0aGlzLmFjdGlvblR5cGUgPSAnbW92ZSc7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiB0cnVlIH0pKTtcblxuICAgICAgICAvLyBPbiBkcmFnIGVudGVyLCB3ZSBvbmx5IGNhbiBwdXQgYSBwbGFjZWhvbGRlciwgc2luY2UgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhLXRyYW5zZmVyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxYID0gdGhpcy5kYXNoYm9hcmRQYXJhbXMub2Zmc2V0TGVmdDtcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gdGhpcy5kYXNoYm9hcmRQYXJhbXMub2Zmc2V0VG9wO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldFRhcmdldCgkZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID0ge1xuICAgICAgICAgIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gICAgICAgICAgbGF5b3V0OiB7IHg6IHRhcmdldD8ueCA/PyAwLCB5OiB0YXJnZXQ/LnkgPz8gMCwgd2lkdGg6IDEsIGhlaWdodDogMSB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzKSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjcmVhdGUgcGxhY2Vob2xkZXInLCB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QsIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCk7XG5cbiAgICAgICAgLy8gV2UgcGFzc2VkIHdpZGdldCBzaXplIGFzIGEgbWltZXR5cGUgc28gdGhhdCB3ZSBjYW4gc3RpbGwgcmVhZCBpdCB3aXRob3V0IHNlY3VyaXR5IGlzc3Vlc1xuICAgICAgICBjb25zdCB3aWRnZXRTaXplTWltZVR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfU0laRSkpO1xuICAgICAgICBpZiAoISF3aWRnZXRTaXplTWltZVR5cGUpIHtcbiAgICAgICAgICBjb25zdCBbXywgXzIsIHcsIGhdID0gd2lkZ2V0U2l6ZU1pbWVUeXBlLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC53aWR0aCA9IHBhcnNlSW50KHcsIDEwKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QubGF5b3V0LmhlaWdodCA9IHBhcnNlSW50KGgsIDEwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVc2UgZ3JpZCBzaXplXG4gICAgICAgICAgY29uc3QgbGF5b3V0ID0gV2lkZ2V0UGxhY2VtZW50VXRpbHMuZ2V0TGF5b3V0U2l6ZSh0aGlzLmxheW91dCwgdGhpcy5kYXNoYm9hcmRQYXJhbXMpW1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0Lmxlbmd0aFxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC53aWR0aCA9IGxheW91dC53aWR0aDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QubGF5b3V0LmhlaWdodCA9IGxheW91dC5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBwYXNzZWQgdGhlIHR5cGUgYXMgYSBoZWFkZXIgbmFtZSBzbyB0aGF0IHdlIGNhbiBzdGlsbCBhY2Nlc3MgaXQgd2l0aG91dCBzZWN1cml0eSBpc3N1ZXNcbiAgICAgICAgY29uc3Qgd2lkZ2V0VHlwZSA9IHR5cGVzLmZpbmQoKHR5cGUpID0+IHR5cGUuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9UWVBFKSk7XG4gICAgICAgIGlmICghIXdpZGdldFR5cGUpIHtcbiAgICAgICAgICBjb25zdCBbXywgXzIsIHR5cGVdID0gd2lkZ2V0VHlwZS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdC50eXBlID0gdHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc2V0IGluaXRpYWwgcG9zaXRpb24gZm9yIHRoZSBvbmUgd2UganVzdCBjYWxjdWxhdGVkLCBzbyB3ZSBjYW4gY29udGludWUgcHJvcGVybHkgbW92ZSB0aGUgd2lkZ2V0XG4gICAgICAgIHRoaXMubW92ZS5pbml0aWFsWCA9ICRldmVudC5wYWdlWDtcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gJGV2ZW50LnBhZ2VZO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRhcmdldCgkZXZlbnQ6IE1vdXNlRXZlbnQsIG9wdGltaXplID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRYID0gJGV2ZW50LnBhZ2VYIC0gdGhpcy5tb3ZlLmluaXRpYWxYO1xuICAgIGNvbnN0IGRZID0gJGV2ZW50LnBhZ2VZIC0gdGhpcy5tb3ZlLmluaXRpYWxZO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgeDpcbiAgICAgICAgZFggPT09IDBcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICgoZFggLyBNYXRoLmFicyhkWCkpICogKE1hdGguYWJzKGRYKSAtIDAuNSAqIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxXaWR0aCkpIC9cbiAgICAgICAgICAgICAgICAodGhpcy5kYXNoYm9hcmRQYXJhbXMuY2VsbFdpZHRoICsgdGhpcy5kYXNoYm9hcmRQYXJhbXMuZ3JpZEdhcClcbiAgICAgICAgICAgICksXG4gICAgICB5OlxuICAgICAgICBkWSA9PT0gMFxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgKChkWSAvIE1hdGguYWJzKGRZKSkgKiAoTWF0aC5hYnMoZFkpIC0gMC41ICogdGhpcy5kYXNoYm9hcmRQYXJhbXMuY2VsbEhlaWdodCkpIC9cbiAgICAgICAgICAgICAgICAodGhpcy5kYXNoYm9hcmRQYXJhbXMuY2VsbEhlaWdodCArIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmdyaWRHYXApXG4gICAgICAgICAgICApXG4gICAgfTtcblxuICAgIGlmICghb3B0aW1pemUgfHwgdGFyZ2V0LnggIT09IHRoaXMubW92ZS5wcmV2aW91c1ggfHwgdGFyZ2V0LnkgIT09IHRoaXMubW92ZS5wcmV2aW91c1kpIHtcbiAgICAgIHRoaXMubW92ZS5wcmV2aW91c1ggPSB0YXJnZXQueDtcbiAgICAgIHRoaXMubW92ZS5wcmV2aW91c1kgPSB0YXJnZXQueTtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBtb3ZpbmdNb3VzZSgkZXZlbnQ6IE1vdXNlRXZlbnQsIG9wdGltaXplID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLm1vZGVFZGl0aW9uICYmICEhdGhpcy5hY3Rpb25UeXBlKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldFRhcmdldCgkZXZlbnQsIG9wdGltaXplKTtcbiAgICAgIGlmICh0YXJnZXQgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jaGVja0ZvckRyYWdFbnRlcigkZXZlbnQpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVXaWRnZXQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCkpO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3Rpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSAncmVzaXplLW53JzpcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnggKyB0YXJnZXQueCA+IDAgJiYgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLSB0YXJnZXQueSA+IDApIHtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC54ICs9IHRhcmdldC54O1xuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnkgKz0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQud2lkdGggLT0gdGFyZ2V0Lng7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0IC09IHRhcmdldC55O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVzaXplLXN3JzpcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoIC0gdGFyZ2V0LnggPiAwKSB7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCAtPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgKz0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXNpemUtbmUnOlxuICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0IC0gdGFyZ2V0LnkgPiAwKSB7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueSArPSB0YXJnZXQueTtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLT0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXNpemUtc2UnOlxuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0ICs9IHRhcmdldC55O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbW92ZSc6XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWF4WCA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3Q/LmdyaWQ/LmNvbHVtbnMgPz8gREVGQVVMVF9DT0xVTU5TX05VTUJFUixcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5tYW5pZmVzdD8ud2lkZ2V0cyA/PyBbXSkubWFwKCh3KSA9PiB3LmxheW91dC53aWR0aCArIHcubGF5b3V0LngpXG4gICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoICtcbiAgICAgICAgICAgICAgMTtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCArIHRhcmdldC54LCBjdXJyZW50TWF4WCkpO1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWF4WSA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3Q/LmdyaWQ/LnJvd3MgPz8gREVGQVVMVF9ST1dTX05VTUJFUixcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5tYW5pZmVzdD8ud2lkZ2V0cyA/PyBbXSkubWFwKCh3KSA9PiB3LmxheW91dC5oZWlnaHQgKyB3LmxheW91dC55KVxuICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgK1xuICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC55ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY2FuZGlkYXRlV2lkZ2V0LmxheW91dC55ICsgdGFyZ2V0LnksIGN1cnJlbnRNYXhZKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEYXNoYm9hcmRNYW5pZmVzdCh7XG4gICAgICAgICAgICBtYW5pZmVzdDogc29sdmVDb2xsaXNpb25zKFxuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQsXG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCxcbiAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdCA/PyAoe30gYXMgRGFzaGJvYXJkTWFuaWZlc3QpXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkcmFnTW92ZSgkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMubW92aW5nTW91c2UoJGV2ZW50KTtcbiAgfVxuXG4gIGRyYWdMZWF2ZSgkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoJGV2ZW50LmN1cnJlbnRUYXJnZXQuY29udGFpbnMoJGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXMgPSAoJGV2ZW50LmRhdGFUcmFuc2ZlciB8fCB7IHR5cGVzOiBbJyddIH0pLnR5cGVzO1xuICAgIGlmICh0eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgLy8gQXMgdGhlIGRyYWcgaXMgbGVhdmluZyB0aGUgd2luZG93LCBkZWxldGUgdGhlIHdpZGdldCBmcm9tIGl0LCBhbmQgc3RvcCBlZGl0aW9uIG1vZGVcbiAgICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgICAgICAgIHdpZGdldHM6IHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZHJvcHBpbmcoJGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKCEhJGV2ZW50ICYmICEhJGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgaWYgKCRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCkpIHtcbiAgICAgICAgLy8gUmVhcnJhbmdlIGRyb3AgdG8gY29ycmVjdCBzaXplLCB0eXBlLCAuLi4sIGFzIGEgcGxhY2Vob2xkZXIgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIG1hbmlmZXN0IGJ5IGRyYWdlbnRlciBldmVudFxuICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXJNYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpXG4gICAgICAgICkgYXMgV2lkZ2V0TWFuaWZlc3Q7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID0ge1xuICAgICAgICAgIC4uLmRhdGFUcmFuc2Zlck1hbmlmZXN0LFxuICAgICAgICAgIGxheW91dDogdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0Py5sYXlvdXQgPz8gKHt9IGFzIFdpZGdldExheW91dClcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm1vdmluZ01vdXNlKCRldmVudCwgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHt9KSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJBY3Rpb25zKCkge1xuICAgIHRoaXMuYWN0aW9uVHlwZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1vdmUuaW5pdGlhbFggPSAwO1xuICAgIHRoaXMubW92ZS5pbml0aWFsWSA9IDA7XG4gICAgdGhpcy5tb3ZlLnByZXZpb3VzWCA9IC0xO1xuICAgIHRoaXMubW92ZS5wcmV2aW91c1kgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCA9IFtdO1xuICB9XG5cbiAgLyoqKlxuICAgKiBNYW5hZ2Ugb3RoZXIga2luZHMgb2YgZHJvcHMgKGluc2lkZSB3aWRnZXRzKVxuICAgKi9cbiAgZHJvcHBpbmdJbldpZGdldCgkZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGlmICgkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9SRVNVTFRTRVQpKSB7XG4gICAgICAgIGNvbnN0IGxpc3RXaWRnZXRNYW5pZmVzdHMgPSBbLi4uKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzXTtcblxuICAgICAgICBjb25zdCByZXN1bHRTZXROYW1lID0gJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKE1JTUVfVFlQRV9SRVNVTFRTRVQpO1xuICAgICAgICBjb25zdCBjdXJyZW50UmVzdWx0U2V0ID0gKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkobGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZSlcbiAgICAgICAgICAgID8gbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZVxuICAgICAgICAgICAgOiBbbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZV1cbiAgICAgICAgKSBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgY3VtdWxhdGl2ZSA9ICRldmVudC5zaGlmdEtleTtcbiAgICAgICAgY29uc3QgbmV3UmVzdWx0U2V0ID0gY3VtdWxhdGl2ZSA/IFsuLi5jdXJyZW50UmVzdWx0U2V0LCByZXN1bHRTZXROYW1lXSA6IHJlc3VsdFNldE5hbWU7XG5cbiAgICAgICAgbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0gPSB7XG4gICAgICAgICAgLi4ubGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0sXG4gICAgICAgICAgZGF0YXNvdXJjZTogbmV3UmVzdWx0U2V0XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgICAgICAgIHdpZGdldHM6IGxpc3RXaWRnZXRNYW5pZmVzdHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuYXNzZXJ0UmVzdWx0U2V0cyh7fSkpO1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVJlbW92ZUNvbmZpcm0oJGV2ZW50PzogTW91c2VFdmVudCwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlybVJlbW92ZVJlZikge1xuICAgICAgdGhpcy5pbmRleEZvclJlbW92YWwgPSBpbmRleCA/PyAtMTtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoXG4gICAgICAgIG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ28tbW9kYWwtd3JhcHBlciddLFxuICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCdcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuYWRkaW5nT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLW1vZGFsJyB9KSk7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoXykgPT4gdGhpcy50b2dnbGVSZW1vdmVDb25maXJtKCkpO1xuICAgICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmLmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50ZW1wbGF0ZU1vZGFsLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYuby1tb2RhbC13cmFwcGVyJykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgIGlmICghIXBhbmVsKSB7XG4gICAgICAgICAgcGFuZWwuc3R5bGUubGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoIC0gcGFuZWwuY2xpZW50V2lkdGgsICRldmVudC5jbGllbnRYIC0gMzApKSArICdweCc7XG4gICAgICAgICAgcGFuZWwuc3R5bGUudG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4od2luZG93LmlubmVySGVpZ2h0IC0gcGFuZWwuY2xpZW50SGVpZ2h0LCAkZXZlbnQuY2xpZW50WSAtIDEwKSkgKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSArICctbW9kYWwnIH0pKTtcbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtb3ZlKCkge1xuICAgIHRoaXMucmVtb3ZlKHRoaXMuaW5kZXhGb3JSZW1vdmFsKTtcbiAgICB0aGlzLmNhbmNlbFJlbW92ZUNvbmZpcm0oKTtcbiAgfVxuXG4gIGNhbmNlbFJlbW92ZUNvbmZpcm0oKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmNsb3NlT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLW1vZGFsJyB9KSk7XG4gICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmPy5kaXNwb3NlKCk7XG4gICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJhY2tXaWRnZXRzKGluZGV4OiBudW1iZXIsIHdpZGdldE1hbmlmZXN0OiBXaWRnZXRNYW5pZmVzdCkge1xuICAgIHJldHVybiBpbmRleCArICctJyArIHdpZGdldE1hbmlmZXN0LnR5cGUgKyAnLScgKyBKU09OLnN0cmluZ2lmeSh3aWRnZXRNYW5pZmVzdC5sYXlvdXQpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiby1kYXNoYm9hcmQtZ3JpZFwiXG4gIFtzdHlsZS5ncmlkVGVtcGxhdGVDb2x1bW5zXT1cImdyaWRUZW1wbGF0ZUNvbHVtbnMkIHwgYXN5bmNcIlxuICBbc3R5bGUuZ3JpZFRlbXBsYXRlUm93c109XCJncmlkVGVtcGxhdGVSb3dzJCB8IGFzeW5jXCJcbiAgW3N0eWxlLmdyaWRHYXBdPVwiZGFzaGJvYXJkUGFyYW1zLmdyaWRHYXAgKyAncHgnXCJcbiAgW3N0eWxlLnBhZGRpbmddPVwiJzAgJyArIGRhc2hib2FyZFBhcmFtcy5ncmlkR2FwICsgJ3B4J1wiXG4gICNncmlkXG4gIChtb3VzZW1vdmUpPVwibW92aW5nTW91c2UoJGV2ZW50KVwiXG4gIChkcm9wKT1cImRyb3BwaW5nKCRldmVudClcIlxuICAoZHJhZ292ZXIpPVwiZHJhZ01vdmUoJGV2ZW50KVwiXG4gIChkcmFnbGVhdmUpPVwiZHJhZ0xlYXZlKCRldmVudClcIlxuICAoZHJhZ2VudGVyKT1cImRyYWdFbnRlcigkZXZlbnQpXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj1cIlxuICAgICAgbGV0IHdpZGdldE1hbmlmZXN0IG9mICh3aW5kb3dNYW5pZmVzdCQgfCBhc3luYyk/LndpZGdldHMgfHwgW107XG4gICAgICBsZXQgd2lkZ2V0SW5kZXggPSBpbmRleDtcbiAgICAgIHRyYWNrQnk6IHRyYWNrV2lkZ2V0c1xuICAgIFwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm8tZGFzaGJvYXJkLXdpZGdldFwiXG4gICAgICBbY2xhc3MuLWVkaXRlZF09XCJtb2RlRWRpdGlvblwiXG4gICAgICBbc3R5bGUuZ3JpZENvbHVtbl09XCJncmlkQ29sdW1uKHdpZGdldE1hbmlmZXN0LmxheW91dClcIlxuICAgICAgW3N0eWxlLmdyaWRSb3ddPVwiZ3JpZFJvdyh3aWRnZXRNYW5pZmVzdC5sYXlvdXQpXCJcbiAgICAgIChkcm9wKT1cImRyb3BwaW5nSW5XaWRnZXQoJGV2ZW50LCB3aWRnZXRJbmRleClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlRWRpdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIG53LXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1udycpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJub3J0aF93ZXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIHN3LXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1zdycpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJzb3V0aF93ZXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIG5lLXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1uZScpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJub3J0aF9lYXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIHNlLXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1zZScpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJzb3V0aF9lYXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIGRlbGV0ZVwiIChtb3VzZWRvd24pPVwidG9nZ2xlUmVtb3ZlQ29uZmlybSgkZXZlbnQsIHdpZGdldEluZGV4KVwiPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbYW5pbWF0aW9uXT1cImZhbHNlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlXCIgZHJhZ2dhYmxlPVwidHJ1ZVwiIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KCRldmVudCwgd2lkZ2V0SW5kZXgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmUtaW5zaWRlIG1vdmUte3sgd2lkZ2V0TWFuaWZlc3QudHlwZSB9fVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgd2lkZ2V0TWFuaWZlc3QudGl0bGUgPz8gKCdAcHJ5LnRvb2xib3guJyArIHdpZGdldE1hbmlmZXN0LnR5cGUgfCBpMThuKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbW9kZUVkaXRpb25cIj5cbiAgICAgICAgPHByeS13aWRnZXQtaW5zdGFuY2lhdG9yXG4gICAgICAgICAgW3N0YXRpY01hbmlmZXN0XT1cIndpZGdldE1hbmlmZXN0XCJcbiAgICAgICAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgICAgICA+PC9wcnktd2lkZ2V0LWluc3RhbmNpYXRvcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKG5vbkZpbGxlcldpZGdldHMkIHwgYXN5bmMpID09PSAwXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmckIHwgYXN5bmM7IGVsc2Ugbm90TG9hZGluZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5vLXdpZGdldFwiIFtzdHlsZS5ncmlkLWFyZWFdPVwiYmFja2dyb3VuZEFyZWEkIHwgYXN5bmNcIj5cbiAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgaWNvblN2Zz1cImxvYWRlclwiXG4gICAgICAgICAgY2xhc3M9XCJuby13aWRnZXRfX2xvYWRpbmdcIlxuICAgICAgICAgIFthbHRdPVwiJ0Bwcnkud2lkZ2V0LnRhcmdldC5sb2FkaW5nJyB8IGkxOG5cIlxuICAgICAgICAgIFt3aWR0aF09XCIxMDBcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTAwXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuby13aWRnZXRfX3RleHRcIj57eyAnQHByeS53aWRnZXQudGFyZ2V0LmxvYWRpbmcnIHwgaTE4biB9fS4uLjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjbm90TG9hZGluZz5cbiAgICAgIDxkaXYgY2xhc3M9XCJuby13aWRnZXRcIiBbc3R5bGUuZ3JpZC1hcmVhXT1cImJhY2tncm91bmRBcmVhJCB8IGFzeW5jXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICBjbGFzcz1cIm5vLXdpZGdldF9fc2VhcmNoXCJcbiAgICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlLnN2Z1wiXG4gICAgICAgICAgYWx0PVwie3tcbiAgICAgICAgICAgIChsYXlvdXQgPT09IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMID8gJ0Bwcnkud2lkZ2V0LnRhcmdldC5ub25lX21hbnVhbCcgOiAnQHByeS53aWRnZXQudGFyZ2V0Lm5vbmVfYXV0bycpXG4gICAgICAgICAgICAgIHwgaTE4blxuICAgICAgICAgIH19IHt7IGJhY2tncm91bmRBcmVhJCB8IGFzeW5jIH19XCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuby13aWRnZXRfX3RleHRcIj57e1xuICAgICAgICAgIChsYXlvdXQgPT09IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMID8gJ0Bwcnkud2lkZ2V0LnRhcmdldC5ub25lX21hbnVhbCcgOiAnQHByeS53aWRnZXQudGFyZ2V0Lm5vbmVfYXV0bycpXG4gICAgICAgICAgICB8IGkxOG5cbiAgICAgICAgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYS1wYWdlLWxvYWRlciBiYWNrZHJvcFwiXG4gICAgW3N0eWxlLmRpc3BsYXldPVwiKGRhdGFGZXRjaGluZyQgfCBhc3luYyk/Lmxlbmd0aCA/PyAxID4gMCA/ICdmbGV4JyA6ICdub25lJ1wiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cInBhcmFtcy5ncmlkV2lkdGhcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicGFyYW1zLmdyaWRIZWlnaHRcIlxuICA+XG4gICAgPHByeS1pY29uXG4gICAgICBpY29uU3ZnPVwibG9hZGVyXCJcbiAgICAgIGNsYXNzPVwibm8td2lkZ2V0X19sb2FkaW5nXCJcbiAgICAgIFthbHRdPVwiJ0Bwcnkud2lkZ2V0LnRhcmdldC5sb2FkaW5nJyB8IGkxOG5cIlxuICAgICAgW3dpZHRoXT1cIjIwMFwiXG4gICAgICBbaGVpZ2h0XT1cIjIwMFwiXG4gICAgLz5cbiAgICA8cD57eyAnQHByeS53aWRnZXQudGFyZ2V0LmxvYWRpbmcnIHwgaTE4biB9fS4uLjwvcD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxwcnktY29udGV4dC1tZW51PjwvcHJ5LWNvbnRleHQtbWVudT5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU1vZGFsPlxuICA8ZGl2IGNsYXNzPVwiby1tb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLW1vZGFsX190b3BfX3RpdGxlXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImEtaDJcIiBpZD1cImRpYWxvZ190aXRsZVwiPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5tb2RhbFRpdGxlJyB8IGkxOG4gfX1cbiAgICAgICAgPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fY2xvc2VcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIiAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiIFtoZWlnaHRdPVwiMzVcIiBbd2lkdGhdPVwiMzVcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS50b29sYm94LmNsb3NlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsUmVtb3ZlQ29uZmlybSgpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QuY2xvc2UnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwiY29uZmlybVJlbW92ZSgpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiPlxuICAgICAgICB7eyAnQHByeS50b29sYm94Lm1hbmlmZXN0LnZhbGlkYXRlJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
575
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvY29tcG9uZW50cy9kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2Rhc2hib2FyZC9jb21wb25lbnRzL2Rhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsRUFBRSxFQUNGLFNBQVMsRUFDVixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFFLE9BQU8sRUFDTCxtQkFBbUIsRUFJcEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3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QWtCO2tCQUo5QixTQUFTOytCQUNFLGVBQWU7aUpBWTBCLGFBQWE7c0JBQS9ELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFJTixhQUFhO3NCQUF2RCxZQUFZO3VCQUFDLDJCQUEyQjtnQkFRNUIsZUFBZTtzQkFBM0IsS0FBSztnQkFJRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRWEsT0FBTztzQkFBekIsU0FBUzt1QkFBQyxNQUFNO2dCQWdCUCxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7XG4gIGF1ZGl0VGltZSxcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBjb21iaW5lTGF0ZXN0V2l0aCxcbiAgZnJvbUV2ZW50LFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3dpdGNoTWFwXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERpc3BsYXlPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC9kaXNwbGF5LW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIERhc2hib2FyZEdyaWRMYXlvdXQsXG4gIERhc2hib2FyZE1hbmlmZXN0LFxuICBXaWRnZXRMYXlvdXQsXG4gIFdpZGdldE1hbmlmZXN0XG59IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvbWFuaWZlc3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1JTUVfVFlQRV9SRVNVTFRTRVQgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL21pbWV0eXBlLXJlc3VsdHNldC5jb25zdGFudCc7XG5pbXBvcnQgeyBDYXRlZ29yeUFjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NhdGVnb3J5L2NhdGVnb3J5LmFjdGlvbnMnO1xuaW1wb3J0IHsgQ2xhc3NBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9jbGFzcy9jbGFzcy5hY3Rpb25zJztcbmltcG9ydCB7IENvbmZpZ0FjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NvbmZpZy9jb25maWcuYWN0aW9ucyc7XG5pbXBvcnQgeyBDb25maWdTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2NvbmZpZy9jb25maWcuc2VsZWN0b3JzJztcbmltcG9ydCB7IERhdGFTb3VyY2VBY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5hY3Rpb25zJztcbmltcG9ydCB7IEZpZWxkQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvZmllbGQvZmllbGQuYWN0aW9ucyc7XG5pbXBvcnQgeyBSZWxhdGlvblR5cGVzQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvcmVsYXRpb24tdHlwZXMvcmVsYXRpb24tdHlwZXMuYWN0aW9ucyc7XG5pbXBvcnQgeyBXaWRnZXRQbGFjZW1lbnRVdGlscyB9IGZyb20gJy4uL2NvbXBvbmVudHMvd2lkZ2V0cy93aWRnZXQtcGxhY2VtZW50L3dpZGdldC1wbGFjZW1lbnQudXRpbHMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQWN0aW9ucywgRGFzaGJvYXJkQ2VsbFBhcmFtcywgVmlld01vZGUgfSBmcm9tICcuLi9zdG9yZS9kYXNoYm9hcmQuYWN0aW9ucyc7XG5pbXBvcnQge1xuICBERUZBVUxUX0NPTFVNTlNfTlVNQkVSLFxuICBERUZBVUxUX0dBUF9QWCxcbiAgREVGQVVMVF9ST1dfSEVJR0hUX1BYLFxuICBERUZBVUxUX1JPV1NfTlVNQkVSXG59IGZyb20gJy4uL3N0b3JlL2Rhc2hib2FyZC5jb250YW50cyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRTZWxlY3RvcnMgfSBmcm9tICcuLi9zdG9yZS9kYXNoYm9hcmQuc2VsZWN0b3JzJztcbmltcG9ydCB7IHNvbHZlQ29sbGlzaW9ucyB9IGZyb20gJy4vc29sdmUtY29sbGlzaW9ucy5mdW5jdGlvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgfSBmcm9tICcuL3N1YnNjcmlwdGlvbm5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgV2lkZ2V0SW5zdGFuY2lhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi93aWRnZXRzL3dpZGdldC1pbnN0YW5jaWF0b3Ivd2lkZ2V0LWluc3RhbmNpYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9zZWFyY2gvc2VhcmNoLnNlbGVjdG9ycyc7XG5cbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUID0gJ2FwcGxpY2F0aW9uL3dpZGdldC1tYW5pZmVzdCc7XG5leHBvcnQgY29uc3QgTUlNRV9UWVBFX1dJREdFVF9UWVBFID0gJ2FwcGxpY2F0aW9uL3dpZGdldC10eXBlLSc7XG5leHBvcnQgY29uc3QgTUlNRV9UWVBFX1dJREdFVF9TSVpFID0gJ2FwcGxpY2F0aW9uL3dpZGdldC1zaXplLSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1kYXNoYm9hcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBtYW5pZmVzdDogRGFzaGJvYXJkTWFuaWZlc3QgfCBudWxsID0gbnVsbDtcbiAgd2luZG93TWFuaWZlc3QkOiBPYnNlcnZhYmxlPERhc2hib2FyZE1hbmlmZXN0PjtcbiAgbW9kZUVkaXRpb24gPSBmYWxzZTtcbiAgbW9kZUVkaXRpb24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBhY3Rpb25UeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHN0YXRpY0Rhc2hib2FyZCQ6IEJlaGF2aW9yU3ViamVjdDxEYXNoYm9hcmRNYW5pZmVzdCB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXNoYm9hcmRNYW5pZmVzdCB8IG51bGw+KG51bGwpO1xuICBzdGFja2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpbmRleEZvclJlbW92YWw6IG51bWJlciA9IC0xO1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZU1vZGFsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSB0ZW1wbGF0ZU1vZGFsITogVGVtcGxhdGVSZWY8YW55PjtcbiAgc2VwYXJhdG9ycyQ6IE9ic2VydmFibGU8V2lkZ2V0TGF5b3V0W10+O1xuICBub25GaWxsZXJXaWRnZXRzJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgQFZpZXdDaGlsZHJlbihXaWRnZXRJbnN0YW5jaWF0b3JDb21wb25lbnQpIGluc3RhbmNpYXRvcnM/OiBRdWVyeUxpc3Q8V2lkZ2V0SW5zdGFuY2lhdG9yQ29tcG9uZW50PjtcbiAgZGF0YUZldGNoaW5nJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIHBhcmFtczogRGFzaGJvYXJkQ2VsbFBhcmFtcyA9IHt9IGFzIERhc2hib2FyZENlbGxQYXJhbXM7XG5cbiAgZ2V0IHdpZGdldHNJbnN0YW5jZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2lhdG9ycz8ubWFwKChpbnN0YW5jaWF0b3IpID0+IGluc3RhbmNpYXRvci5pbnN0YW5jaWF0ZWRDb21wb25lbnQuaW5zdGFuY2UpID8/IFtdO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHN0YXRpY0Rhc2hib2FyZCh3aW5kb3c6IERhc2hib2FyZE1hbmlmZXN0KSB7XG4gICAgdGhpcy5zdGF0aWNEYXNoYm9hcmQkLm5leHQod2luZG93KTtcbiAgfVxuXG4gIEBJbnB1dCgpIENsb3NlT25EcmFnT3V0ID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzcGxheU9wdGlvbnM/OiBEaXNwbGF5T3B0aW9ucztcblxuICBAVmlld0NoaWxkKCdncmlkJykgZ3JpZFJlZiE6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgY2FuQ2FsY3VsYXRlVmlldyA9IGZhbHNlO1xuICB0YXJnZXRJbmRleGVzJDogT2JzZXJ2YWJsZTxudW1iZXJbXT47XG4gIGRhc2hib2FyZFBhcmFtczogRGFzaGJvYXJkQ2VsbFBhcmFtcyA9IHtcbiAgICBncmlkV2lkdGg6IDEsXG4gICAgZ3JpZEhlaWdodDogMSxcbiAgICBncmlkR2FwOiBERUZBVUxUX0dBUF9QWCxcbiAgICBjb2x1bW5zOiBERUZBVUxUX0NPTFVNTlNfTlVNQkVSLFxuICAgIGNlbGxXaWR0aDogMSxcbiAgICBjZWxsSGVpZ2h0OiBERUZBVUxUX1JPV19IRUlHSFRfUFgsXG4gICAgcm93czogREVGQVVMVF9ST1dTX05VTUJFUixcbiAgICBvZmZzZXRMZWZ0OiAwLFxuICAgIG9mZnNldFRvcDogMCxcbiAgICBtb2JpbGVNb2RlOiBmYWxzZVxuICB9O1xuICBwcml2YXRlIGJyZWFrcG9pbnQ6IG51bWJlciA9IDA7XG4gIEBPdXRwdXQoKSByb3dIZWlnaHQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdDogV2lkZ2V0TWFuaWZlc3QgfCBudWxsID0gbnVsbDtcbiAgaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdDogV2lkZ2V0TWFuaWZlc3RbXSA9IFtdO1xuICBtb3ZlOiB7XG4gICAgaW5pdGlhbFg6IG51bWJlcjtcbiAgICBpbml0aWFsWTogbnVtYmVyO1xuICAgIHByZXZpb3VzWDogbnVtYmVyO1xuICAgIHByZXZpb3VzWTogbnVtYmVyO1xuICB9ID0ge1xuICAgIGluaXRpYWxYOiAtMSxcbiAgICBpbml0aWFsWTogLTEsXG4gICAgcHJldmlvdXNYOiAtMSxcbiAgICBwcmV2aW91c1k6IC0xXG4gIH07XG4gIGdyaWRUZW1wbGF0ZVJvd3MkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIERhc2hib2FyZEdyaWRMYXlvdXQgPSBEYXNoYm9hcmRHcmlkTGF5b3V0O1xuICBsYXlvdXQ6IERhc2hib2FyZEdyaWRMYXlvdXQgPSBEYXNoYm9hcmRHcmlkTGF5b3V0Lk1BTlVBTDtcbiAgYmFja2dyb3VuZEFyZWEkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHByaXZhdGUgY29uZmlybVJlbW92ZVJlZj86IE92ZXJsYXlSZWY7XG4gIEFycmF5OiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PiwgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LCBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMubG9hZGluZyk7XG4gICAgdGhpcy5kYXRhRmV0Y2hpbmckID0gdGhpcy5zdG9yZS5zZWxlY3QoU2VhcmNoU2VsZWN0b3JzLnNlYXJjaExvYWRpbmcpLnBpcGUoZGVsYXkoMTApKTtcbiAgICB0aGlzLm1vZGVFZGl0aW9uJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5kYXNoYm9hcmRFZGl0aW9uTW9kZSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubW9kZUVkaXRpb24kLnN1YnNjcmliZSgobW9kZSkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVFZGl0aW9uID0gbW9kZTtcbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckFjdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudGFyZ2V0SW5kZXhlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMudGFyZ2V0VGVuYW50c0luZGV4ZXMpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZGFzaGJvYXJkQ2VsbFBhcmFtcykuc3Vic2NyaWJlKChwYXJhbXMpID0+ICh0aGlzLmRhc2hib2FyZFBhcmFtcyA9IHBhcmFtcykpXG4gICAgKTtcbiAgICB0aGlzLndpbmRvd01hbmlmZXN0JCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy53aW5kb3dNYW5pZmVzdCkucGlwZShcbiAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMuc3RhdGljRGFzaGJvYXJkJCksXG4gICAgICBzd2l0Y2hNYXAoKFt3aW5kb3dNYW5pZmVzdCwgc3RhdGljRGFzaGJvYXJkXSkgPT4gKCFzdGF0aWNEYXNoYm9hcmQgPyBvZih3aW5kb3dNYW5pZmVzdCkgOiBvZihzdGF0aWNEYXNoYm9hcmQpKSksXG4gICAgICBtYXAoKF93TWFuaWZlc3QpID0+IHtcbiAgICAgICAgY29uc3Qgd01hbmlmZXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShfd01hbmlmZXN0KSk7XG4gICAgICAgIGlmICh3TWFuaWZlc3QuZ3JpZD8ubGF5b3V0ICYmIHdNYW5pZmVzdC5ncmlkLmxheW91dCAhPT0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUwpIHtcbiAgICAgICAgICAvLyBDb21wbGV0ZSB3aXRoIHBsYWNlaG9sZGVyc1xuICAgICAgICAgIGNvbnN0IHNpemUgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5wbGFjZXNGb3JMYXlvdXQod01hbmlmZXN0LmdyaWQubGF5b3V0KTtcbiAgICAgICAgICBjb25zdCBwbGFjZXMgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5wbGFjZW1lbnRPcHRpb25zKFxuICAgICAgICAgICAgeyB0eXBlOiAnZmlsbGVyJywgbGF5b3V0OiB7IHg6IDEsIHk6IDEsIHdpZHRoOiAxLCBoZWlnaHQ6IDEgfSB9LFxuICAgICAgICAgICAgd01hbmlmZXN0LmdyaWQubGF5b3V0LFxuICAgICAgICAgICAgd01hbmlmZXN0LmdyaWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGxldCBhZGRlZCA9IHRydWU7XG4gICAgICAgICAgd2hpbGUgKHdNYW5pZmVzdC53aWRnZXRzLmxlbmd0aCA8IHNpemUgJiYgYWRkZWQpIHtcbiAgICAgICAgICAgIGFkZGVkID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBwb3RlbnRpYWwgPSB7IC4uLnBsYWNlc1tpXSwgb3B0aW9uczogeyBpbmRleDogaSB9IH07XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB3TWFuaWZlc3Qud2lkZ2V0c1xuICAgICAgICAgICAgICAgICAgLm1hcCgod2lkZ2V0OiBXaWRnZXRNYW5pZmVzdCkgPT4gV2lkZ2V0UGxhY2VtZW50VXRpbHMuYXJlRGlzam9pbnQod2lkZ2V0LCBwb3RlbnRpYWwpKVxuICAgICAgICAgICAgICAgICAgLnJlZHVjZSgoYTogYm9vbGVhbiwgYjogYm9vbGVhbikgPT4gYSAmJiBiLCB0cnVlKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB3TWFuaWZlc3Qud2lkZ2V0cy5wdXNoKHBvdGVudGlhbCk7XG4gICAgICAgICAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3TWFuaWZlc3Q7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBlcXVhbChwLCBjKSlcbiAgICApO1xuICAgIHRoaXMubm9uRmlsbGVyV2lkZ2V0cyQgPSB0aGlzLndpbmRvd01hbmlmZXN0JC5waXBlKFxuICAgICAgbWFwKCh3TWFuaWZlc3QpID0+IHdNYW5pZmVzdC53aWRnZXRzLmZpbHRlcigodykgPT4gdy50eXBlICE9PSAnZmlsbGVyJykubGVuZ3RoKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zdGF0aWNEYXNoYm9hcmQkLnN1YnNjcmliZSgobWFuaWZlc3QpID0+IHtcbiAgICAgICAgaWYgKCEhbWFuaWZlc3QpIHtcbiAgICAgICAgICBjb25zdCBnZXREYXRhQWN0aW9ucyA9IChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgICAgICAgICAobWFuaWZlc3Qud2lkZ2V0cyA/PyAoW10gYXMgV2lkZ2V0TWFuaWZlc3RbXSkpXG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCBjXSwgW10gYXMgV2lkZ2V0TWFuaWZlc3RbXSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgod2lkTWFuaWZlc3QpID0+IHdpZE1hbmlmZXN0LmRhdGFzb3VyY2UpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdIGFzIChzdHJpbmcgfCBzdHJpbmdbXSlbXVxuICAgICAgICAgICAgKS5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi4oQXJyYXkuaXNBcnJheShjKSA/IGMgOiBbY10pXSwgW10pIGFzIHN0cmluZ1tdXG4gICAgICAgICAgKS5tYXAoKHJlc3VsdFNldCkgPT4gRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHsgaWQ6IHJlc3VsdFNldCB9KSk7XG5cbiAgICAgICAgICBnZXREYXRhQWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2goYWN0aW9uKSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLndpbmRvd01hbmlmZXN0JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuYXNzZXJ0UmVzdWx0U2V0cyh7fSkpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChGaWVsZEFjdGlvbnMubG9hZCgpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENsYXNzQWN0aW9ucy5sb2FkKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ2F0ZWdvcnlBY3Rpb25zLmxvYWQoKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmdldE1hcFN0eWxlcygpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmxvYWQoKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChSZWxhdGlvblR5cGVzQWN0aW9ucy5sb2FkKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ29uZmlnQWN0aW9ucy5sb2FkQ3VzdG9taXphdGlvbigpKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgICAgLnBpcGUoYXVkaXRUaW1lKDEwMCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlVmlldygpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy53aW5kb3dNYW5pZmVzdCQsIHRoaXMubW9kZUVkaXRpb24kXSlcbiAgICAgICAgLnBpcGUoYXVkaXRUaW1lKDEwMCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlVmlldygpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ2tleWRvd24nKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKCRldmVudDogRXZlbnQpID0+ICRldmVudCBhcyBLZXlib2FyZEV2ZW50KSxcbiAgICAgICAgICBmaWx0ZXIoKCRldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gJGV2ZW50LmtleSA9PT0gJ0wnICYmICRldmVudC5jdHJsS2V5ICYmICRldmVudC5zaGlmdEtleSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7fSkpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ21vdXNldXAnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyQWN0aW9ucygpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy5icmVha3BvaW50KS5zdWJzY3JpYmUoKGJwKSA9PiB7XG4gICAgICAgIHRoaXMuYnJlYWtwb2ludCA9IGJwO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMud2luZG93TWFuaWZlc3QkLnN1YnNjcmliZSgobWFuaWZlc3QpID0+IHtcbiAgICAgICAgdGhpcy5tYW5pZmVzdCA9IG1hbmlmZXN0O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5ncmlkTGF5b3V0KS5zdWJzY3JpYmUoKGxheW91dCkgPT4ge1xuICAgICAgICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZ3JpZFRlbXBsYXRlUm93cyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpbmRvd01hbmlmZXN0JCwgdGhpcy5zdGFja2VkJF0pLnBpcGUoXG4gICAgICBtYXAoKFttYW5pZmVzdCwgc3RhY2tlZF0pID0+XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVSb3dzKFxuICAgICAgICAgIHN0YWNrZWQgJiYgdGhpcy5tYW5pZmVzdFxuICAgICAgICAgICAgPyB0aGlzLm1hbmlmZXN0Py53aWRnZXRzLm1hcCgod20pID0+IHdtLmxheW91dC5oZWlnaHQpLnJlZHVjZSgod20xLCB3bTIpID0+IHdtMSArIHdtMiwgMClcbiAgICAgICAgICAgIDogbWFuaWZlc3QuZ3JpZD8ucm93cyA/PyBERUZBVUxUX1JPV1NfTlVNQkVSXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW5zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2luZG93TWFuaWZlc3QkLCB0aGlzLnN0YWNrZWQkXSkucGlwZShcbiAgICAgIG1hcCgoW21hbmlmZXN0LCBzdGFja2VkXSkgPT4gdGhpcy5nZW5lcmF0ZUNvbHVtbnMoc3RhY2tlZCA/IDEgOiBtYW5pZmVzdC5ncmlkPy5jb2x1bW5zIHx8IERFRkFVTFRfQ09MVU1OU19OVU1CRVIpKVxuICAgICk7XG5cbiAgICB0aGlzLmJhY2tncm91bmRBcmVhJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2luZG93TWFuaWZlc3QkLCB0aGlzLnN0YWNrZWQkXSkucGlwZShcbiAgICAgIG1hcCgoW21hbmlmZXN0LCBzdGFja2VkXSkgPT5cbiAgICAgICAgIXN0YWNrZWRcbiAgICAgICAgICA/IGAzLzMvJHsobWFuaWZlc3QuZ3JpZD8ucm93cyA/PyBERUZBVUxUX1JPV1NfTlVNQkVSKSAtIDF9LyR7XG4gICAgICAgICAgICAgIChtYW5pZmVzdC5ncmlkPy5jb2x1bW5zID8/IERFRkFVTFRfQ09MVU1OU19OVU1CRVIpIC0gMVxuICAgICAgICAgICAgfWBcbiAgICAgICAgICA6IGAzLzEvJHsobWFuaWZlc3QuZ3JpZD8uY29sdW1ucyA/PyBERUZBVUxUX0NPTFVNTlNfTlVNQkVSKSAtIDF9LzFgXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc2VwYXJhdG9ycyQgPSB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5ncmlkTGF5b3V0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGF5b3V0KSA9PlxuICAgICAgICAgIGxheW91dCA9PT0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUxcbiAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgIDogV2lkZ2V0UGxhY2VtZW50VXRpbHMuZ2V0TGF5b3V0U2l6ZShsYXlvdXQsIHsgcm93czogMSwgY29sdW1uczogMSB9KVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZGlzcGxheU9wdGlvbnMpXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURpc3BsYXlPcHRpb25zKHsgbW9kZTogVmlld01vZGUuQ1VTVE9NLCBjdXN0b21EaXNwbGF5OiB0aGlzLmRpc3BsYXlPcHRpb25zIH0pXG4gICAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2FuQ2FsY3VsYXRlVmlldyA9IHRydWU7XG4gIH1cblxuICAvKioqXG4gICAqIE1hbmFnZSBkaXNwbGF5XG4gICAqL1xuXG4gIGNhbGN1bGF0ZVZpZXcoKSB7XG4gICAgaWYgKHRoaXMuY2FuQ2FsY3VsYXRlVmlldykge1xuICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgIHdoaWxlIChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA9PT0gMCAmJiAhIWVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBncmlkV2lkdGggPSAoPEhUTUxFbGVtZW50PmVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgY29uc3QgbW9iaWxlTW9kZSA9IGdyaWRXaWR0aCA8IHRoaXMuYnJlYWtwb2ludDtcbiAgICAgIHRoaXMuc3RhY2tlZCQubmV4dCh0aGlzLmRhc2hib2FyZFBhcmFtcy5tb2JpbGVNb2RlICYmICF0aGlzLm1vZGVFZGl0aW9uKTtcbiAgICAgIGNvbnN0IHJvd3MgPSAhdGhpcy5kaXNwbGF5SXNTdGFja2VkXG4gICAgICAgID8gKCEhdGhpcy5tYW5pZmVzdCAmJiAhIXRoaXMubWFuaWZlc3QuZ3JpZCAmJiB0aGlzLm1hbmlmZXN0LmdyaWQucm93cykgfHwgREVGQVVMVF9ST1dTX05VTUJFUlxuICAgICAgICA6IHRoaXMubWFuaWZlc3Q/LndpZGdldHMucmVkdWNlKChwOiBudW1iZXIsIGM6IFdpZGdldE1hbmlmZXN0KSA9PiBwICsgYy5sYXlvdXQuaGVpZ2h0LCAwKSA/PyAxO1xuXG4gICAgICB0aGlzLnBhcmFtcyA9IHtcbiAgICAgICAgZ3JpZFdpZHRoLFxuICAgICAgICAvLyBDYWxjdWxhdGUgaGVpZ2h0IHRvIHBhcmVudCB0aGUgcGFyZW50J3NcbiAgICAgICAgZ3JpZEhlaWdodDogZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsXG4gICAgICAgIGdyaWRHYXA6IDEsXG4gICAgICAgIGNvbHVtbnM6ICghIXRoaXMubWFuaWZlc3QgJiYgISF0aGlzLm1hbmlmZXN0LmdyaWQgJiYgdGhpcy5tYW5pZmVzdC5ncmlkLmNvbHVtbnMpIHx8IERFRkFVTFRfQ09MVU1OU19OVU1CRVIsXG4gICAgICAgIGNlbGxIZWlnaHQ6IDEsXG4gICAgICAgIHJvd3MsXG4gICAgICAgIGNlbGxXaWR0aDogMCxcbiAgICAgICAgb2Zmc2V0TGVmdDogdGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICAgICAgb2Zmc2V0VG9wOiB0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AsXG4gICAgICAgIG1vYmlsZU1vZGVcbiAgICAgIH07XG4gICAgICB0aGlzLnBhcmFtcy5ncmlkR2FwID1cbiAgICAgICAgdGhpcy5wYXJhbXMucm93cyAqIHRoaXMucGFyYW1zLmNlbGxIZWlnaHQgPCB0aGlzLnBhcmFtcy5ncmlkSGVpZ2h0XG4gICAgICAgICAgPyAhIXRoaXMubWFuaWZlc3QgJiYgISF0aGlzLm1hbmlmZXN0LmdyaWRcbiAgICAgICAgICAgID8gdGhpcy5tYW5pZmVzdC5ncmlkLmdhcCB8fCBERUZBVUxUX0dBUF9QWFxuICAgICAgICAgICAgOiBERUZBVUxUX0dBUF9QWFxuICAgICAgICAgIDogMDtcbiAgICAgIHRoaXMucGFyYW1zLmNlbGxIZWlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgKHRoaXMucGFyYW1zLmdyaWRIZWlnaHQgLSAodGhpcy5wYXJhbXMucm93cyAtIDEpICogdGhpcy5wYXJhbXMuZ3JpZEdhcCkgLyB0aGlzLnBhcmFtcy5yb3dzXG4gICAgICApO1xuICAgICAgdGhpcy5wYXJhbXMuY2VsbFdpZHRoID1cbiAgICAgICAgKHRoaXMucGFyYW1zLmdyaWRXaWR0aCAtICh0aGlzLnBhcmFtcy5jb2x1bW5zIC0gMSkgKiB0aGlzLnBhcmFtcy5ncmlkR2FwKSAvIHRoaXMucGFyYW1zLmNvbHVtbnM7XG5cbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEYXNoYm9hcmRQYXJhbXMoeyBwYXJhbXM6IHRoaXMucGFyYW1zIH0pKTtcblxuICAgICAgdGhpcy5yb3dzLm5leHQodGhpcy5wYXJhbXMucm93cyk7XG4gICAgICB0aGlzLnJvd0hlaWdodC5uZXh0KHRoaXMucGFyYW1zLmNlbGxIZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNwbGF5SXNTdGFja2VkKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrZWQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBncmlkQ29sdW1uKGxheW91dDogV2lkZ2V0TGF5b3V0KTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5SXNTdGFja2VkIHx8ICFsYXlvdXQpIHtcbiAgICAgIHJldHVybiAnMSAvIDEnO1xuICAgIH1cbiAgICBpZiAobGF5b3V0LndpZHRoID4gMSkge1xuICAgICAgcmV0dXJuIGAke01hdGgubWluKGxheW91dC54LCB0aGlzLmRhc2hib2FyZFBhcmFtcy5jb2x1bW5zIC0gbGF5b3V0LndpZHRoICsgMSl9IC8gJHtNYXRoLm1pbihcbiAgICAgICAgbGF5b3V0LnggKyBsYXlvdXQud2lkdGgsXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNvbHVtbnMgKyAxXG4gICAgICApfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtsYXlvdXQueH1gO1xuICAgIH1cbiAgfVxuXG4gIGdyaWRSb3cobGF5b3V0OiBXaWRnZXRMYXlvdXQpOiBzdHJpbmcge1xuICAgIGlmICghbGF5b3V0KSB7XG4gICAgICByZXR1cm4gJzEnO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNwbGF5SXNTdGFja2VkKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0hlaWdodCA9IHRoaXMubWFuaWZlc3Q/LndpZGdldHNcbiAgICAgICAgLmZpbHRlcigod206IFdpZGdldE1hbmlmZXN0KSA9PiAod20ubGF5b3V0LnkgPT09IGxheW91dC55ICYmIHdtLmxheW91dC54IDwgbGF5b3V0LngpIHx8IHdtLmxheW91dC55IDwgbGF5b3V0LnkpXG4gICAgICAgIC5yZWR1Y2UoKHA6IG51bWJlciwgYzogV2lkZ2V0TWFuaWZlc3QpID0+IHAgKyBjLmxheW91dC5oZWlnaHQsIDEpO1xuICAgICAgcmV0dXJuIGAke3ByZXZpb3VzSGVpZ2h0ID8/IDF9IC8gJHsocHJldmlvdXNIZWlnaHQgPz8gMSkgKyBsYXlvdXQuaGVpZ2h0fWA7XG4gICAgfVxuICAgIGlmIChsYXlvdXQuaGVpZ2h0ID4gMSkge1xuICAgICAgcmV0dXJuIGAke01hdGgubWF4KDEsIE1hdGgubWluKGxheW91dC55LCB0aGlzLmRhc2hib2FyZFBhcmFtcy5yb3dzIC0gbGF5b3V0LmhlaWdodCArIDEpKX0gLyAke01hdGgubWluKFxuICAgICAgICBsYXlvdXQueSArIGxheW91dC5oZWlnaHQsXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkUGFyYW1zLnJvd3MgKyAxXG4gICAgICApfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtsYXlvdXQueX1gO1xuICAgIH1cbiAgfVxuXG4gIGdlbmVyYXRlUm93cyhyb3dzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheShyb3dzKS5maWxsKCcxZnInKS5qb2luKCcgJyk7XG4gIH1cblxuICBnZW5lcmF0ZUNvbHVtbnMoY29sdW1uczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQXJyYXkoY29sdW1ucykuZmlsbCgnMWZyJykuam9pbignICcpO1xuICB9XG5cbiAgLyoqKlxuICAgKiBEaXJlY3QgYWN0aW9ucyBvbiB3aWRnZXRzXG4gICAqL1xuXG4gIHJlbW92ZShpOiBudW1iZXIpIHtcbiAgICBjb25zdCBsaXN0V2lkZ2V0TWFuaWZlc3RzID0gWy4uLih0aGlzLm1hbmlmZXN0IHx8IHsgd2lkZ2V0czogW10gfSkud2lkZ2V0c107XG4gICAgbGlzdFdpZGdldE1hbmlmZXN0cy5zcGxpY2UoaSwgMSkuZmlsdGVyKCh3aWRnZXQpID0+IHdpZGdldC50eXBlICE9PSAnZmlsbGVyJyk7XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEYXNoYm9hcmRNYW5pZmVzdCh7XG4gICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgLi4udGhpcy5tYW5pZmVzdCxcbiAgICAgICAgICB3aWRnZXRzOiBsaXN0V2lkZ2V0TWFuaWZlc3RzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG1vdmVJbk5ld1dpbmRvdyh3aWRnZXRJbmRleDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLm1vdmVXaWRnZXQoeyB3aWRnZXRJbmRleCwgdGFyZ2V0SW5kZXggfSkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiBmYWxzZSB9KSk7XG4gIH1cblxuICBtYXhpbWl6ZSh3aWRnZXRJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLm1heGltaXplV2lkZ2V0KHsgd2lkZ2V0SW5kZXggfSkpO1xuICB9XG5cbiAgLyoqKlxuICAgKiBNYW5hZ2UgZHJhZyBuIGRyb3AsIG1vdmUsIHJlc2l6ZVxuICAgKi9cblxuICBwcmVwYXJlTW9kaWZpY2F0aW9uKCRldmVudDogTW91c2VFdmVudCwgaW5kZXhNYW5pZmVzdDogbnVtYmVyKSB7XG4gICAgdGhpcy5tb3ZlLmluaXRpYWxYID0gJGV2ZW50LmNsaWVudFg7XG4gICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gJGV2ZW50LmNsaWVudFk7XG4gICAgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgodGhpcy5tYW5pZmVzdCB8fCB7IHdpZGdldHM6IFtdIH0pLndpZGdldHMpKTtcbiAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPSB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3Quc3BsaWNlKGluZGV4TWFuaWZlc3QsIDEpWzBdO1xuICAgIC8vIGNvbnNvbGUubG9nKCdwcmVwYXJlJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuICB9XG5cbiAgc3RhcnRSZXNpemUoJGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleE1hbmlmZXN0OiBudW1iZXIsIGRpcmVjdGlvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3Rpb25UeXBlID0gZGlyZWN0aW9uO1xuICAgIHRoaXMucHJlcGFyZU1vZGlmaWNhdGlvbigkZXZlbnQsIGluZGV4TWFuaWZlc3QpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydCByZXNpemUnLCB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QsIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCk7XG4gIH1cblxuICBkcmFnU3RhcnQoJGV2ZW50OiBEcmFnRXZlbnQsIGluZGV4TWFuaWZlc3Q6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aW9uVHlwZSA9ICdtb3ZlJztcbiAgICB0aGlzLnByZXBhcmVNb2RpZmljYXRpb24oJGV2ZW50LCBpbmRleE1hbmlmZXN0KTtcbiAgICBEYXNoYm9hcmRDb21wb25lbnQuYWRkVHJhbnNmZXJNYW5pZmVzdE1ldGFkYXRhKCRldmVudCwgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID8/ICh7fSBhcyBXaWRnZXRNYW5pZmVzdCkpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdGFydCBtb3ZlJywgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LCB0aGlzLmluaXRpYWxXaWRnZXRNYW5pZmVzdExpc3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYWRkVHJhbnNmZXJNYW5pZmVzdE1ldGFkYXRhKCRldmVudDogRHJhZ0V2ZW50LCBtYW5pZmVzdDogV2lkZ2V0TWFuaWZlc3QpIHtcbiAgICBpZiAoISEkZXZlbnQgJiYgISEkZXZlbnQuZGF0YVRyYW5zZmVyICYmICEkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpKSB7XG4gICAgICAkZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCwgSlNPTi5zdHJpbmdpZnkobWFuaWZlc3QpKTtcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShNSU1FX1RZUEVfV0lER0VUX1RZUEUgKyBtYW5pZmVzdC50eXBlLCAndW51c2VkJyk7XG4gICAgICAvLyBQYXNzaW5nIHdpZGdldCBzaXplIGFzIGEgbWltZSB0eXBlLCBzbyB0aGF0IHdlIGNhbiBieXBhc3Mgc2VjdXJpdHkgZm9yIHBsYWNlaG9sZGVyIHNpemUgYXQgdGhlIGFycml2YWwgb2YgdGhlIGRyYWdcbiAgICAgICRldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShcbiAgICAgICAgTUlNRV9UWVBFX1dJREdFVF9TSVpFICsgYCR7bWFuaWZlc3QubGF5b3V0LndpZHRofS0ke21hbmlmZXN0LmxheW91dC5oZWlnaHR9YCxcbiAgICAgICAgJ3VzZWxlc3MnIC8vIGRhdGEgaXMgaW4gdGhlIG1pbWUgdHlwZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBkcmFnRW50ZXIoJGV2ZW50OiBEcmFnRXZlbnQsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCB0eXBlcyA9ICgkZXZlbnQuZGF0YVRyYW5zZmVyIHx8IHsgdHlwZXM6IFsnJ10gfSkudHlwZXM7XG5cbiAgICBpZiAodHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCkpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiB0cnVlIH0pKTtcbiAgICAgIHRoaXMuYWN0aW9uVHlwZSA9ICdtb3ZlJztcbiAgICB9XG4gIH1cblxuICBjaGVja0ZvckRyYWdFbnRlcigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCkge1xuICAgICAgLy8gY3JlYXRlIHBsYWNlaG9sZGVyIGFzIGEgZHJhZyBlbnRlcmVkIHRoZSBjb21wb25lbnQsIGdvIGludG8gZWRpdGlvbiBtb2RlIGFuZCBtb3ZlIGFjdGlvbiBpZiBpdCdzIGEgd2lkZ2V0IGJlaW5nIGRyYWdnZWRcbiAgICAgIGNvbnN0IHR5cGVzID0gKCgkZXZlbnQgYXMgRHJhZ0V2ZW50KS5kYXRhVHJhbnNmZXIgfHwgeyB0eXBlczogWycnXSB9KS50eXBlcztcbiAgICAgIGlmICh0eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgICB0aGlzLmFjdGlvblR5cGUgPSAnbW92ZSc7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy50b2dnbGVFZGl0aW9uTW9kZSh7IGZvcmNlOiB0cnVlIH0pKTtcblxuICAgICAgICAvLyBPbiBkcmFnIGVudGVyLCB3ZSBvbmx5IGNhbiBwdXQgYSBwbGFjZWhvbGRlciwgc2luY2UgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhLXRyYW5zZmVyIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxYID0gdGhpcy5kYXNoYm9hcmRQYXJhbXMub2Zmc2V0TGVmdDtcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gdGhpcy5kYXNoYm9hcmRQYXJhbXMub2Zmc2V0VG9wO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldFRhcmdldCgkZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID0ge1xuICAgICAgICAgIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gICAgICAgICAgbGF5b3V0OiB7IHg6IHRhcmdldD8ueCA/PyAwLCB5OiB0YXJnZXQ/LnkgPz8gMCwgd2lkdGg6IDEsIGhlaWdodDogMSB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzKSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjcmVhdGUgcGxhY2Vob2xkZXInLCB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QsIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCk7XG5cbiAgICAgICAgLy8gV2UgcGFzc2VkIHdpZGdldCBzaXplIGFzIGEgbWltZXR5cGUgc28gdGhhdCB3ZSBjYW4gc3RpbGwgcmVhZCBpdCB3aXRob3V0IHNlY3VyaXR5IGlzc3Vlc1xuICAgICAgICBjb25zdCB3aWRnZXRTaXplTWltZVR5cGUgPSB0eXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmluY2x1ZGVzKE1JTUVfVFlQRV9XSURHRVRfU0laRSkpO1xuICAgICAgICBpZiAoISF3aWRnZXRTaXplTWltZVR5cGUpIHtcbiAgICAgICAgICBjb25zdCBbXywgXzIsIHcsIGhdID0gd2lkZ2V0U2l6ZU1pbWVUeXBlLnNwbGl0KCctJyk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC53aWR0aCA9IHBhcnNlSW50KHcsIDEwKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QubGF5b3V0LmhlaWdodCA9IHBhcnNlSW50KGgsIDEwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVc2UgZ3JpZCBzaXplXG4gICAgICAgICAgY29uc3QgbGF5b3V0ID0gV2lkZ2V0UGxhY2VtZW50VXRpbHMuZ2V0TGF5b3V0U2l6ZSh0aGlzLmxheW91dCwgdGhpcy5kYXNoYm9hcmRQYXJhbXMpW1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsV2lkZ2V0TWFuaWZlc3RMaXN0Lmxlbmd0aFxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0LmxheW91dC53aWR0aCA9IGxheW91dC53aWR0aDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QubGF5b3V0LmhlaWdodCA9IGxheW91dC5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBwYXNzZWQgdGhlIHR5cGUgYXMgYSBoZWFkZXIgbmFtZSBzbyB0aGF0IHdlIGNhbiBzdGlsbCBhY2Nlc3MgaXQgd2l0aG91dCBzZWN1cml0eSBpc3N1ZXNcbiAgICAgICAgY29uc3Qgd2lkZ2V0VHlwZSA9IHR5cGVzLmZpbmQoKHR5cGUpID0+IHR5cGUuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9UWVBFKSk7XG4gICAgICAgIGlmICghIXdpZGdldFR5cGUpIHtcbiAgICAgICAgICBjb25zdCBbXywgXzIsIHR5cGVdID0gd2lkZ2V0VHlwZS5zcGxpdCgnLScpO1xuICAgICAgICAgIHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdC50eXBlID0gdHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc2V0IGluaXRpYWwgcG9zaXRpb24gZm9yIHRoZSBvbmUgd2UganVzdCBjYWxjdWxhdGVkLCBzbyB3ZSBjYW4gY29udGludWUgcHJvcGVybHkgbW92ZSB0aGUgd2lkZ2V0XG4gICAgICAgIHRoaXMubW92ZS5pbml0aWFsWCA9ICRldmVudC5wYWdlWDtcbiAgICAgICAgdGhpcy5tb3ZlLmluaXRpYWxZID0gJGV2ZW50LnBhZ2VZO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRhcmdldCgkZXZlbnQ6IE1vdXNlRXZlbnQsIG9wdGltaXplID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRYID0gJGV2ZW50LnBhZ2VYIC0gdGhpcy5tb3ZlLmluaXRpYWxYO1xuICAgIGNvbnN0IGRZID0gJGV2ZW50LnBhZ2VZIC0gdGhpcy5tb3ZlLmluaXRpYWxZO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgeDpcbiAgICAgICAgZFggPT09IDBcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICgoZFggLyBNYXRoLmFicyhkWCkpICogKE1hdGguYWJzKGRYKSAtIDAuNSAqIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmNlbGxXaWR0aCkpIC9cbiAgICAgICAgICAgICAgICAodGhpcy5kYXNoYm9hcmRQYXJhbXMuY2VsbFdpZHRoICsgdGhpcy5kYXNoYm9hcmRQYXJhbXMuZ3JpZEdhcClcbiAgICAgICAgICAgICksXG4gICAgICB5OlxuICAgICAgICBkWSA9PT0gMFxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgKChkWSAvIE1hdGguYWJzKGRZKSkgKiAoTWF0aC5hYnMoZFkpIC0gMC41ICogdGhpcy5kYXNoYm9hcmRQYXJhbXMuY2VsbEhlaWdodCkpIC9cbiAgICAgICAgICAgICAgICAodGhpcy5kYXNoYm9hcmRQYXJhbXMuY2VsbEhlaWdodCArIHRoaXMuZGFzaGJvYXJkUGFyYW1zLmdyaWRHYXApXG4gICAgICAgICAgICApXG4gICAgfTtcblxuICAgIGlmICghb3B0aW1pemUgfHwgdGFyZ2V0LnggIT09IHRoaXMubW92ZS5wcmV2aW91c1ggfHwgdGFyZ2V0LnkgIT09IHRoaXMubW92ZS5wcmV2aW91c1kpIHtcbiAgICAgIHRoaXMubW92ZS5wcmV2aW91c1ggPSB0YXJnZXQueDtcbiAgICAgIHRoaXMubW92ZS5wcmV2aW91c1kgPSB0YXJnZXQueTtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBtb3ZpbmdNb3VzZSgkZXZlbnQ6IE1vdXNlRXZlbnQsIG9wdGltaXplID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLm1vZGVFZGl0aW9uICYmICEhdGhpcy5hY3Rpb25UeXBlKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmdldFRhcmdldCgkZXZlbnQsIG9wdGltaXplKTtcbiAgICAgIGlmICh0YXJnZXQgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jaGVja0ZvckRyYWdFbnRlcigkZXZlbnQpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVXaWRnZXQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudGx5TW9kaWZpZWRNYW5pZmVzdCkpO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3Rpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSAncmVzaXplLW53JzpcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnggKyB0YXJnZXQueCA+IDAgJiYgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLSB0YXJnZXQueSA+IDApIHtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC54ICs9IHRhcmdldC54O1xuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LnkgKz0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQud2lkdGggLT0gdGFyZ2V0Lng7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0IC09IHRhcmdldC55O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVzaXplLXN3JzpcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoIC0gdGFyZ2V0LnggPiAwKSB7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCAtPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgKz0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXNpemUtbmUnOlxuICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0IC0gdGFyZ2V0LnkgPiAwKSB7XG4gICAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueSArPSB0YXJnZXQueTtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgLT0gdGFyZ2V0Lnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyZXNpemUtc2UnOlxuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC53aWR0aCArPSB0YXJnZXQueDtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQuaGVpZ2h0ICs9IHRhcmdldC55O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbW92ZSc6XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWF4WCA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3Q/LmdyaWQ/LmNvbHVtbnMgPz8gREVGQVVMVF9DT0xVTU5TX05VTUJFUixcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5tYW5pZmVzdD8ud2lkZ2V0cyA/PyBbXSkubWFwKCh3KSA9PiB3LmxheW91dC53aWR0aCArIHcubGF5b3V0LngpXG4gICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQubGF5b3V0LndpZHRoICtcbiAgICAgICAgICAgICAgMTtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNhbmRpZGF0ZVdpZGdldC5sYXlvdXQueCArIHRhcmdldC54LCBjdXJyZW50TWF4WCkpO1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWF4WSA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIHRoaXMubWFuaWZlc3Q/LmdyaWQ/LnJvd3MgPz8gREVGQVVMVF9ST1dTX05VTUJFUixcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5tYW5pZmVzdD8ud2lkZ2V0cyA/PyBbXSkubWFwKCh3KSA9PiB3LmxheW91dC5oZWlnaHQgKyB3LmxheW91dC55KVxuICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC5oZWlnaHQgK1xuICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgY2FuZGlkYXRlV2lkZ2V0LmxheW91dC55ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY2FuZGlkYXRlV2lkZ2V0LmxheW91dC55ICsgdGFyZ2V0LnksIGN1cnJlbnRNYXhZKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEYXNoYm9hcmRNYW5pZmVzdCh7XG4gICAgICAgICAgICBtYW5pZmVzdDogc29sdmVDb2xsaXNpb25zKFxuICAgICAgICAgICAgICBjYW5kaWRhdGVXaWRnZXQsXG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCxcbiAgICAgICAgICAgICAgdGhpcy5tYW5pZmVzdCA/PyAoe30gYXMgRGFzaGJvYXJkTWFuaWZlc3QpXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkcmFnTW92ZSgkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMubW92aW5nTW91c2UoJGV2ZW50KTtcbiAgfVxuXG4gIGRyYWdMZWF2ZSgkZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoJGV2ZW50LmN1cnJlbnRUYXJnZXQuY29udGFpbnMoJGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXMgPSAoJGV2ZW50LmRhdGFUcmFuc2ZlciB8fCB7IHR5cGVzOiBbJyddIH0pLnR5cGVzO1xuICAgIGlmICh0eXBlcy5pbmNsdWRlcyhNSU1FX1RZUEVfV0lER0VUX01BTklGRVNUKSkge1xuICAgICAgLy8gQXMgdGhlIGRyYWcgaXMgbGVhdmluZyB0aGUgd2luZG93LCBkZWxldGUgdGhlIHdpZGdldCBmcm9tIGl0LCBhbmQgc3RvcCBlZGl0aW9uIG1vZGVcbiAgICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgICAgICAgIHdpZGdldHM6IHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZHJvcHBpbmcoJGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKCEhJGV2ZW50ICYmICEhJGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgaWYgKCRldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5jbHVkZXMoTUlNRV9UWVBFX1dJREdFVF9NQU5JRkVTVCkpIHtcbiAgICAgICAgLy8gUmVhcnJhbmdlIGRyb3AgdG8gY29ycmVjdCBzaXplLCB0eXBlLCAuLi4sIGFzIGEgcGxhY2Vob2xkZXIgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIG1hbmlmZXN0IGJ5IGRyYWdlbnRlciBldmVudFxuICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXJNYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKE1JTUVfVFlQRV9XSURHRVRfTUFOSUZFU1QpXG4gICAgICAgICkgYXMgV2lkZ2V0TWFuaWZlc3Q7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0ID0ge1xuICAgICAgICAgIC4uLmRhdGFUcmFuc2Zlck1hbmlmZXN0LFxuICAgICAgICAgIGxheW91dDogdGhpcy5jdXJyZW50bHlNb2RpZmllZE1hbmlmZXN0Py5sYXlvdXQgPz8gKHt9IGFzIFdpZGdldExheW91dClcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm1vdmluZ01vdXNlKCRldmVudCwgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzKHt9KSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2xlYXJBY3Rpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJBY3Rpb25zKCkge1xuICAgIHRoaXMuYWN0aW9uVHlwZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1vdmUuaW5pdGlhbFggPSAwO1xuICAgIHRoaXMubW92ZS5pbml0aWFsWSA9IDA7XG4gICAgdGhpcy5tb3ZlLnByZXZpb3VzWCA9IC0xO1xuICAgIHRoaXMubW92ZS5wcmV2aW91c1kgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnRseU1vZGlmaWVkTWFuaWZlc3QgPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbFdpZGdldE1hbmlmZXN0TGlzdCA9IFtdO1xuICB9XG5cbiAgLyoqKlxuICAgKiBNYW5hZ2Ugb3RoZXIga2luZHMgb2YgZHJvcHMgKGluc2lkZSB3aWRnZXRzKVxuICAgKi9cbiAgZHJvcHBpbmdJbldpZGdldCgkZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICghISRldmVudCAmJiAhISRldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGlmICgkZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluY2x1ZGVzKE1JTUVfVFlQRV9SRVNVTFRTRVQpKSB7XG4gICAgICAgIGNvbnN0IGxpc3RXaWRnZXRNYW5pZmVzdHMgPSBbLi4uKHRoaXMubWFuaWZlc3QgfHwgeyB3aWRnZXRzOiBbXSB9KS53aWRnZXRzXTtcblxuICAgICAgICBjb25zdCByZXN1bHRTZXROYW1lID0gJGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKE1JTUVfVFlQRV9SRVNVTFRTRVQpO1xuICAgICAgICBjb25zdCBjdXJyZW50UmVzdWx0U2V0ID0gKFxuICAgICAgICAgIEFycmF5LmlzQXJyYXkobGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZSlcbiAgICAgICAgICAgID8gbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZVxuICAgICAgICAgICAgOiBbbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0uZGF0YXNvdXJjZV1cbiAgICAgICAgKSBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgY3VtdWxhdGl2ZSA9ICRldmVudC5zaGlmdEtleTtcbiAgICAgICAgY29uc3QgbmV3UmVzdWx0U2V0ID0gY3VtdWxhdGl2ZSA/IFsuLi5jdXJyZW50UmVzdWx0U2V0LCByZXN1bHRTZXROYW1lXSA6IHJlc3VsdFNldE5hbWU7XG5cbiAgICAgICAgbGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0gPSB7XG4gICAgICAgICAgLi4ubGlzdFdpZGdldE1hbmlmZXN0c1tpbmRleF0sXG4gICAgICAgICAgZGF0YXNvdXJjZTogbmV3UmVzdWx0U2V0XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZURhc2hib2FyZE1hbmlmZXN0KHtcbiAgICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgICAgICAgIHdpZGdldHM6IGxpc3RXaWRnZXRNYW5pZmVzdHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuYXNzZXJ0UmVzdWx0U2V0cyh7fSkpO1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVJlbW92ZUNvbmZpcm0oJGV2ZW50PzogTW91c2VFdmVudCwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlybVJlbW92ZVJlZikge1xuICAgICAgdGhpcy5pbmRleEZvclJlbW92YWwgPSBpbmRleCA/PyAtMTtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoXG4gICAgICAgIG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ28tbW9kYWwtd3JhcHBlciddLFxuICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCdcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuYWRkaW5nT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLW1vZGFsJyB9KSk7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoXykgPT4gdGhpcy50b2dnbGVSZW1vdmVDb25maXJtKCkpO1xuICAgICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmLmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50ZW1wbGF0ZU1vZGFsLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYuby1tb2RhbC13cmFwcGVyJykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgIGlmICghIXBhbmVsKSB7XG4gICAgICAgICAgcGFuZWwuc3R5bGUubGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoIC0gcGFuZWwuY2xpZW50V2lkdGgsICRldmVudC5jbGllbnRYIC0gMzApKSArICdweCc7XG4gICAgICAgICAgcGFuZWwuc3R5bGUudG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4od2luZG93LmlubmVySGVpZ2h0IC0gcGFuZWwuY2xpZW50SGVpZ2h0LCAkZXZlbnQuY2xpZW50WSAtIDEwKSkgKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlybVJlbW92ZVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmNvbmZpcm1SZW1vdmVSZWYgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSArICctbW9kYWwnIH0pKTtcbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtb3ZlKCkge1xuICAgIHRoaXMucmVtb3ZlKHRoaXMuaW5kZXhGb3JSZW1vdmFsKTtcbiAgICB0aGlzLmNhbmNlbFJlbW92ZUNvbmZpcm0oKTtcbiAgfVxuXG4gIGNhbmNlbFJlbW92ZUNvbmZpcm0oKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDb25maWdBY3Rpb25zLmNsb3NlT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLW1vZGFsJyB9KSk7XG4gICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmPy5kaXNwb3NlKCk7XG4gICAgdGhpcy5jb25maXJtUmVtb3ZlUmVmID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJhY2tXaWRnZXRzKGluZGV4OiBudW1iZXIsIHdpZGdldE1hbmlmZXN0OiBXaWRnZXRNYW5pZmVzdCkge1xuICAgIHJldHVybiBpbmRleCArICctJyArIHdpZGdldE1hbmlmZXN0LnR5cGUgKyAnLScgKyBKU09OLnN0cmluZ2lmeSh3aWRnZXRNYW5pZmVzdC5sYXlvdXQpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiby1kYXNoYm9hcmQtZ3JpZFwiXG4gIFtzdHlsZS5ncmlkVGVtcGxhdGVDb2x1bW5zXT1cImdyaWRUZW1wbGF0ZUNvbHVtbnMkIHwgYXN5bmNcIlxuICBbc3R5bGUuZ3JpZFRlbXBsYXRlUm93c109XCJncmlkVGVtcGxhdGVSb3dzJCB8IGFzeW5jXCJcbiAgW3N0eWxlLmdyaWRHYXBdPVwiZGFzaGJvYXJkUGFyYW1zLmdyaWRHYXAgKyAncHgnXCJcbiAgW3N0eWxlLnBhZGRpbmddPVwiJzAgJyArIGRhc2hib2FyZFBhcmFtcy5ncmlkR2FwICsgJ3B4J1wiXG4gICNncmlkXG4gIChtb3VzZW1vdmUpPVwibW92aW5nTW91c2UoJGV2ZW50KVwiXG4gIChkcm9wKT1cImRyb3BwaW5nKCRldmVudClcIlxuICAoZHJhZ292ZXIpPVwiZHJhZ01vdmUoJGV2ZW50KVwiXG4gIChkcmFnbGVhdmUpPVwiZHJhZ0xlYXZlKCRldmVudClcIlxuICAoZHJhZ2VudGVyKT1cImRyYWdFbnRlcigkZXZlbnQpXCJcbj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj1cIlxuICAgICAgbGV0IHdpZGdldE1hbmlmZXN0IG9mICh3aW5kb3dNYW5pZmVzdCQgfCBhc3luYyk/LndpZGdldHMgfHwgW107XG4gICAgICBsZXQgd2lkZ2V0SW5kZXggPSBpbmRleDtcbiAgICAgIHRyYWNrQnk6IHRyYWNrV2lkZ2V0c1xuICAgIFwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm8tZGFzaGJvYXJkLXdpZGdldFwiXG4gICAgICBbY2xhc3MuLWVkaXRlZF09XCJtb2RlRWRpdGlvblwiXG4gICAgICBbc3R5bGUuZ3JpZENvbHVtbl09XCJncmlkQ29sdW1uKHdpZGdldE1hbmlmZXN0LmxheW91dClcIlxuICAgICAgW3N0eWxlLmdyaWRSb3ddPVwiZ3JpZFJvdyh3aWRnZXRNYW5pZmVzdC5sYXlvdXQpXCJcbiAgICAgIChkcm9wKT1cImRyb3BwaW5nSW5XaWRnZXQoJGV2ZW50LCB3aWRnZXRJbmRleClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlRWRpdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIG53LXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1udycpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJub3J0aF93ZXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIHN3LXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1zdycpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJzb3V0aF93ZXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIG5lLXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1uZScpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJub3J0aF9lYXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIHNlLXJlc2l6ZVwiIChtb3VzZWRvd24pPVwic3RhcnRSZXNpemUoJGV2ZW50LCB3aWRnZXRJbmRleCwgJ3Jlc2l6ZS1zZScpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJzb3V0aF9lYXN0XCIgW2FuaW1hdGlvbl09XCJmYWxzZVwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplIGRlbGV0ZVwiIChtb3VzZWRvd24pPVwidG9nZ2xlUmVtb3ZlQ29uZmlybSgkZXZlbnQsIHdpZGdldEluZGV4KVwiPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiY2xvc2VcIiBbYW5pbWF0aW9uXT1cImZhbHNlXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlXCIgZHJhZ2dhYmxlPVwidHJ1ZVwiIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KCRldmVudCwgd2lkZ2V0SW5kZXgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmUtaW5zaWRlIG1vdmUte3sgd2lkZ2V0TWFuaWZlc3QudHlwZSB9fVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgd2lkZ2V0TWFuaWZlc3QudGl0bGUgPz8gKCdAcHJ5LnRvb2xib3guJyArIHdpZGdldE1hbmlmZXN0LnR5cGUgfCBpMThuKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbW9kZUVkaXRpb25cIj5cbiAgICAgICAgPHByeS13aWRnZXQtaW5zdGFuY2lhdG9yXG4gICAgICAgICAgW3N0YXRpY01hbmlmZXN0XT1cIndpZGdldE1hbmlmZXN0XCJcbiAgICAgICAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgICAgICA+PC9wcnktd2lkZ2V0LWluc3RhbmNpYXRvcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJ7XG4gICAgICBub1dpZGdldHM6IChub25GaWxsZXJXaWRnZXRzJCB8IGFzeW5jKSA9PT0gMCxcbiAgICAgIGdsb2JhbExvYWRpbmc6IGxvYWRpbmckIHwgYXN5bmMsXG4gICAgICBmZXRjaExvYWRpbmc6IChkYXRhRmV0Y2hpbmckIHwgYXN5bmMpPy5sZW5ndGggPz8gMSA+IDBcbiAgICB9IGFzIGRhdGFcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEubm9XaWRnZXRzXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5nbG9iYWxMb2FkaW5nOyBlbHNlIG5vdExvYWRpbmdcIiBjbGFzcz1cIm5vLXdpZGdldFwiIFtzdHlsZS5ncmlkLWFyZWFdPVwiYmFja2dyb3VuZEFyZWEkIHwgYXN5bmNcIj5cbiAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgaWNvblN2Zz1cImxvYWRlclwiXG4gICAgICAgICAgY2xhc3M9XCJuby13aWRnZXRfX2xvYWRpbmdcIlxuICAgICAgICAgIFthbHRdPVwiJ0Bwcnkud2lkZ2V0LnRhcmdldC5sb2FkaW5nJyB8IGkxOG5cIlxuICAgICAgICAgIFt3aWR0aF09XCIxMDBcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMTAwXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuby13aWRnZXRfX3RleHRcIj57eyAnQHByeS53aWRnZXQudGFyZ2V0LmxvYWRpbmcnIHwgaTE4biB9fS4uLjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNub3RMb2FkaW5nPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibm8td2lkZ2V0XCIgW3N0eWxlLmdyaWQtYXJlYV09XCJiYWNrZ3JvdW5kQXJlYSQgfCBhc3luY1wiPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzPVwibm8td2lkZ2V0X19zZWFyY2hcIlxuICAgICAgICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZS5zdmdcIlxuICAgICAgICAgICAgYWx0PVwie3tcbiAgICAgICAgICAgICAgKGxheW91dCA9PT0gRGFzaGJvYXJkR3JpZExheW91dC5NQU5VQUxcbiAgICAgICAgICAgICAgICA/ICdAcHJ5LndpZGdldC50YXJnZXQubm9uZV9tYW51YWwnXG4gICAgICAgICAgICAgICAgOiAnQHByeS53aWRnZXQudGFyZ2V0Lm5vbmVfYXV0bydcbiAgICAgICAgICAgICAgKSB8IGkxOG5cbiAgICAgICAgICAgIH19IHt7IGJhY2tncm91bmRBcmVhJCB8IGFzeW5jIH19XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm8td2lkZ2V0X190ZXh0XCI+e3tcbiAgICAgICAgICAgIChsYXlvdXQgPT09IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMID8gJ0Bwcnkud2lkZ2V0LnRhcmdldC5ub25lX21hbnVhbCcgOiAnQHByeS53aWRnZXQudGFyZ2V0Lm5vbmVfYXV0bycpXG4gICAgICAgICAgICAgIHwgaTE4blxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJhLXBhZ2UtbG9hZGVyIGJhY2tkcm9wXCJcbiAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImRhdGEuZmV0Y2hMb2FkaW5nICYmICFkYXRhLmdsb2JhbExvYWRpbmcgPyAnZmxleCcgOiAnbm9uZSdcIlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInBhcmFtcy5ncmlkV2lkdGhcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJwYXJhbXMuZ3JpZEhlaWdodFwiXG4gICAgPlxuICAgICAgPHByeS1pY29uXG4gICAgICAgIGljb25Tdmc9XCJsb2FkZXJcIlxuICAgICAgICBjbGFzcz1cIm5vLXdpZGdldF9fbG9hZGluZ1wiXG4gICAgICAgIFthbHRdPVwiJ0Bwcnkud2lkZ2V0LnRhcmdldC5sb2FkaW5nJyB8IGkxOG5cIlxuICAgICAgICBbd2lkdGhdPVwiMjAwXCJcbiAgICAgICAgW2hlaWdodF09XCIyMDBcIlxuICAgICAgLz5cbiAgICAgIDxwPnt7ICdAcHJ5LndpZGdldC50YXJnZXQubG9hZGluZycgfCBpMThuIH19Li4uPC9wPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPHByeS1jb250ZXh0LW1lbnU+PC9wcnktY29udGV4dC1tZW51PlxuXG48bmctdGVtcGxhdGUgI3RlbXBsYXRlTW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJvLW1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm8tbW9kYWxfX3RvcF9fdGl0bGVcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiYS1oMlwiIGlkPVwiZGlhbG9nX3RpdGxlXCI+XG4gICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1vZGFsVGl0bGUnIHwgaTE4biB9fVxuICAgICAgICA8L2gyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1tb2RhbF9fdG9wX19jbG9zZVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiIChjbGljayk9XCJjYW5jZWxSZW1vdmVDb25maXJtKClcIj5cbiAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImNsb3NlXCIgW2hlaWdodF09XCIzNVwiIFt3aWR0aF09XCIzNVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LnRvb2xib3guY2xvc2UnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXBcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWxSZW1vdmVDb25maXJtKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIj5cbiAgICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC5jbG9zZScgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJjb25maXJtUmVtb3ZlKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QudmFsaWRhdGUnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|