@acorex/platform 18.2.0 → 18.2.2
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/common/lib/app/application.types.d.ts +18 -2
- package/common/lib/data/data.types.d.ts +1 -1
- package/common/lib/data/entity-storage-service.d.ts +1 -2
- package/common/lib/layout/component-slot/component-slot-loader.service.d.ts +2 -2
- package/common/lib/layout/component-slot/component-slot.types.d.ts +2 -1
- package/common/lib/layout/menu/index.d.ts +0 -1
- package/common/lib/layout/menu/menu.provider.d.ts +12 -5
- package/common/lib/layout/menu/menu.service.d.ts +8 -2
- package/common/lib/layout/menu/menu.types.d.ts +9 -6
- package/common/lib/settings/index.d.ts +2 -1
- package/common/lib/settings/setting-definition.provider.d.ts +19 -0
- package/common/lib/settings/settings.types.d.ts +42 -0
- package/common/lib/utils/index.d.ts +0 -1
- package/esm2022/common/lib/app/application.types.mjs +13 -1
- package/esm2022/common/lib/common.module.mjs +14 -16
- package/esm2022/common/lib/data/data.types.mjs +1 -1
- package/esm2022/common/lib/data/dexie-storage.service.mjs +2 -2
- package/esm2022/common/lib/data/entity-storage-service.mjs +5 -5
- package/esm2022/common/lib/layout/component-slot/component-slot-loader.service.mjs +6 -5
- package/esm2022/common/lib/layout/component-slot/component-slot.types.mjs +1 -1
- package/esm2022/common/lib/layout/menu/index.mjs +1 -2
- package/esm2022/common/lib/layout/menu/menu.provider.mjs +105 -28
- package/esm2022/common/lib/layout/menu/menu.service.mjs +42 -10
- package/esm2022/common/lib/layout/menu/menu.types.mjs +1 -1
- package/esm2022/common/lib/layout/theme/store/admin-layout.reducers.mjs +2 -1
- package/esm2022/common/lib/layout/theme/store/admin-layout.state.mjs +4 -4
- package/esm2022/common/lib/schema/widgets/checkbox/checkbox-widget-edit.component.mjs +2 -2
- package/esm2022/common/lib/schema/widgets/common-widget-filter/boolean-widget-filter.component.mjs +2 -2
- package/esm2022/common/lib/schema/widgets/common-widget-filter/number-widget-filter.component.mjs +2 -2
- package/esm2022/common/lib/schema/widgets/common-widget-filter/string-widget-filter.component.mjs +2 -2
- package/esm2022/common/lib/schema/widgets/common-widgets.module.mjs +22 -22
- package/esm2022/common/lib/schema/widgets/lookup/lookup-widget-filter.component.mjs +2 -2
- package/esm2022/common/lib/schema/widgets/password/change-password.component.mjs +2 -2
- package/esm2022/common/lib/schema/widgets/selection-list/selection-list-widget-edit.component.mjs +2 -2
- package/esm2022/common/lib/settings/index.mjs +3 -2
- package/esm2022/common/lib/settings/setting-definition.provider.mjs +229 -0
- package/esm2022/common/lib/settings/settings.types.mjs +7 -2
- package/esm2022/common/lib/utils/index.mjs +1 -2
- package/esm2022/common/lib/workflows/common.workflow.mjs +5 -3
- package/esm2022/layout/builder/lib/builder/builder.service.mjs +3 -2
- package/esm2022/layout/builder/lib/builder/datasource-provider.service.mjs +27 -0
- package/esm2022/layout/builder/lib/builder/index.mjs +2 -1
- package/esm2022/layout/builder/lib/builder/widget-catalog.mjs +2 -1
- package/esm2022/layout/builder/lib/builder/widget-renderer.component.directive.mjs +3 -9
- package/esm2022/layout/builder/lib/builder/widget-renderer.component.mjs +7 -5
- package/esm2022/layout/builder/lib/builder/widget.types.mjs +59 -6
- package/esm2022/layout/designer/lib/designer/components/board/board.component.mjs +66 -47
- package/esm2022/layout/designer/lib/designer/components/breadcrumbs/breadcrumbs.component.mjs +27 -32
- package/esm2022/layout/designer/lib/designer/components/drawers/data-sources/data-sources.component.mjs +5 -4
- package/esm2022/layout/designer/lib/designer/components/grid-drawer/grid-drawer.component.mjs +2 -2
- package/esm2022/layout/designer/lib/designer/components/header-menu/header-menu.component.mjs +35 -10
- package/esm2022/layout/designer/lib/designer/components/size-mode/view-size-toolbar.component.mjs +23 -23
- package/esm2022/layout/designer/lib/designer/components/widget-picker/widget-picker.component.mjs +3 -3
- package/esm2022/layout/designer/lib/designer/designer.component.mjs +10 -9
- package/esm2022/layout/designer/lib/designer/index.mjs +2 -1
- package/esm2022/layout/designer/lib/designer/shared/designer-connector.service.mjs +5 -5
- package/esm2022/layout/designer/lib/designer/shared/designer.service.mjs +158 -63
- package/esm2022/layout/designer/lib/designer/shared/designer.types.mjs +1 -1
- package/esm2022/layout/designer/lib/designer/shared/generic-commands.types.mjs +52 -0
- package/esm2022/layout/designer/lib/designer/shared/widget-designer-renderer.directive.mjs +35 -38
- package/esm2022/layout/designer/lib/preview/preview-viewer.component.mjs +12 -3
- package/esm2022/layout/designer/lib/preview/preview.component.mjs +3 -2
- package/esm2022/layout/designer/lib/property-viewer/widget-property-viewer.component.mjs +7 -6
- package/esm2022/layout/entity/lib/entity-detail-list.viewmodel.mjs +5 -7
- package/esm2022/layout/entity/lib/entity-master-create.viewmodel.mjs +3 -3
- package/esm2022/layout/entity/lib/entity-master-list.viewmodel.mjs +21 -18
- package/esm2022/layout/entity/lib/entity-master-single.viewmodel.mjs +8 -7
- package/esm2022/layout/entity/lib/entity.config.mjs +6 -6
- package/esm2022/layout/entity/lib/entity.service.mjs +18 -0
- package/esm2022/layout/entity/lib/entity.viewmodel.mjs +7 -5
- package/esm2022/layout/entity/lib/index.mjs +2 -1
- package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-column.component.mjs +10 -4
- package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-edit.component.mjs +42 -32
- package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.component.mjs +3 -3
- package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.viewmodel.mjs +20 -19
- package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.mjs +79 -40
- package/esm2022/layout/entity/lib/workflows/modify-section.workflow.mjs +2 -2
- package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.component.mjs +2 -2
- package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/entity-details-view.component.mjs +2 -2
- package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/entity-custom-view/entity-custom-view.component.mjs +1 -1
- package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-conditions/list-view-option-conditions.component.mjs +1 -1
- package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +6 -5
- package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.component.mjs +2 -2
- package/esm2022/layouts/lib/admin/entity-layout/workflows/create-entity.workflow.mjs +2 -2
- package/esm2022/layouts/lib/admin/entity-layout/workflows/modify-entity.workflow.mjs +2 -2
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.mjs +30 -10
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-create-view/entity-master-create-view.component.mjs +3 -3
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.mjs +9 -8
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/list-view-option-columns/list-view-option-columns.component.mjs +3 -3
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/list-view-option-sorting/list-view-option-sorting.component.mjs +24 -18
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-modify-view/entity-master-modify-view.component.mjs +3 -3
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.mjs +3 -3
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/overview/entity-single-overview.component.mjs +12 -10
- package/esm2022/themes/default/lib/layouts/root-layout/components/header/header.component.mjs +2 -2
- package/esm2022/themes/default/lib/layouts/root-layout/components/menu/root-menu.component.mjs +4 -3
- package/esm2022/themes/default/lib/layouts/root-layout/root-layout.component.mjs +2 -4
- package/esm2022/themes/default/lib/layouts/root-layout/root-layout.module.mjs +6 -1
- package/esm2022/themes/shared/lib/shared.module.mjs +25 -4
- package/esm2022/widgets/lib/properties/editors.props.mjs +4 -2
- package/esm2022/widgets/lib/properties/general.props.mjs +2 -2
- package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-designer.component.mjs +2 -2
- package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-edit.component.mjs +44 -20
- package/esm2022/widgets/lib/widgets/editors/contact/popup-component.mjs +1 -1
- package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.mjs +17 -15
- package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.mjs +7 -10
- package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.mjs +13 -6
- package/esm2022/widgets/lib/widgets/editors/link/link-widget-edit.component.mjs +1 -2
- package/esm2022/widgets/lib/widgets/editors/select/index.mjs +3 -3
- package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-edit.component.mjs +9 -20
- package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-view.component.mjs +20 -25
- package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-designer.component.mjs +35 -17
- package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.mjs +41 -19
- package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-view.component.mjs +24 -15
- package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget.config.mjs +4 -2
- package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-edit.component.mjs +14 -7
- package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-print.component.mjs +3 -3
- package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-view.component.mjs +29 -67
- package/esm2022/widgets/lib/widgets/layout/block/block-widget-designer.component.mjs +32 -17
- package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-designer.component.mjs +1 -22
- package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget-designer.component.mjs +3 -3
- package/esm2022/widgets/lib/widgets/layout/page/page-widget-designer.component.mjs +76 -78
- package/esm2022/widgets/lib/widgets/layout/page/page-widget.config.mjs +9 -9
- package/esm2022/widgets/lib/widgets/layout/template/template-picker/template-picker.component.mjs +120 -0
- package/esm2022/widgets/lib/widgets/layout/template/template-widget-edit.component.mjs +65 -24
- package/esm2022/widgets/lib/widgets/layout/template/template-widget-view.component.mjs +27 -7
- package/esm2022/widgets/lib/widgets/layout/template/template.provider.mjs +18 -1
- package/fesm2022/acorex-platform-auth.mjs +1 -1
- package/fesm2022/{acorex-platform-common-avatar-widget-edit.component-D4k52w2k.mjs → acorex-platform-common-avatar-widget-edit.component-vDhYokEG.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-avatar-widget-edit.component-D4k52w2k.mjs.map → acorex-platform-common-avatar-widget-edit.component-vDhYokEG.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-avatar-widget-view.component-Bbg1imZG.mjs → acorex-platform-common-avatar-widget-view.component-Dew3CVLm.mjs} +3 -4
- package/fesm2022/acorex-platform-common-avatar-widget-view.component-Dew3CVLm.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-boolean-widget-filter.component-CRFI7vNR.mjs → acorex-platform-common-boolean-widget-filter.component-BdE7WOK5.mjs} +4 -5
- package/fesm2022/{acorex-platform-common-boolean-widget-filter.component-CRFI7vNR.mjs.map → acorex-platform-common-boolean-widget-filter.component-BdE7WOK5.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-change-password.component-Djd4SeNv.mjs → acorex-platform-common-change-password.component-g_GEw3IZ.mjs} +4 -4
- package/fesm2022/{acorex-platform-common-change-password.component-Djd4SeNv.mjs.map → acorex-platform-common-change-password.component-g_GEw3IZ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-checkbox-widget-column.component-BCUcZiP_.mjs → acorex-platform-common-checkbox-widget-column.component-Bj5rjEk1.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-checkbox-widget-column.component-BCUcZiP_.mjs.map → acorex-platform-common-checkbox-widget-column.component-Bj5rjEk1.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-checkbox-widget-edit.component-GgWLpxV0.mjs → acorex-platform-common-checkbox-widget-edit.component-ChXbJsuG.mjs} +4 -5
- package/fesm2022/acorex-platform-common-checkbox-widget-edit.component-ChXbJsuG.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-checkbox-widget-view.component-KuRnDGoQ.mjs → acorex-platform-common-checkbox-widget-view.component-CbQwjE_u.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-checkbox-widget-view.component-KuRnDGoQ.mjs.map → acorex-platform-common-checkbox-widget-view.component-CbQwjE_u.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-dateTime-widget-column.component-DaXNK6e2.mjs → acorex-platform-common-dateTime-widget-column.component-QUYyDVw8.mjs} +3 -4
- package/fesm2022/acorex-platform-common-dateTime-widget-column.component-QUYyDVw8.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-dateTime-widget-edit.component-XOReyHZ-.mjs → acorex-platform-common-dateTime-widget-edit.component-CzLb3xnR.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-dateTime-widget-edit.component-XOReyHZ-.mjs.map → acorex-platform-common-dateTime-widget-edit.component-CzLb3xnR.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-dateTime-widget-filter.component-3PJx2C6G.mjs → acorex-platform-common-dateTime-widget-filter.component-DZRQ6yVk.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-dateTime-widget-filter.component-3PJx2C6G.mjs.map → acorex-platform-common-dateTime-widget-filter.component-DZRQ6yVk.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-dateTime-widget-view.component-BWTedYCf.mjs → acorex-platform-common-dateTime-widget-view.component-DxNwm_5m.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-dateTime-widget-view.component-BWTedYCf.mjs.map → acorex-platform-common-dateTime-widget-view.component-DxNwm_5m.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-email-widget-column.component-MySWR3RG.mjs → acorex-platform-common-email-widget-column.component-Cm-fhlNZ.mjs} +3 -4
- package/fesm2022/acorex-platform-common-email-widget-column.component-Cm-fhlNZ.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-email-widget-edit.component-DzqW3Ay6.mjs → acorex-platform-common-email-widget-edit.component-BfXFBLF6.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-email-widget-edit.component-DzqW3Ay6.mjs.map → acorex-platform-common-email-widget-edit.component-BfXFBLF6.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-email-widget-view.component-ikN6SIj0.mjs → acorex-platform-common-email-widget-view.component-ClRjKVy6.mjs} +2 -3
- package/fesm2022/{acorex-platform-common-email-widget-view.component-ikN6SIj0.mjs.map → acorex-platform-common-email-widget-view.component-ClRjKVy6.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-file-widget-column.component-GtbElxmS.mjs → acorex-platform-common-file-widget-column.component-B0v2rSWI.mjs} +2 -3
- package/fesm2022/acorex-platform-common-file-widget-column.component-B0v2rSWI.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-file-widget-edit.component-CPSsJviw.mjs → acorex-platform-common-file-widget-edit.component-DsIqehpt.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-file-widget-edit.component-CPSsJviw.mjs.map → acorex-platform-common-file-widget-edit.component-DsIqehpt.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-file-widget-filter.component-D-_WnxlE.mjs → acorex-platform-common-file-widget-filter.component-C3uBjqF-.mjs} +3 -4
- package/fesm2022/acorex-platform-common-file-widget-filter.component-C3uBjqF-.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-file-widget-view.component-BU8iWCVR.mjs → acorex-platform-common-file-widget-view.component-DTl_Rehd.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-file-widget-view.component-BU8iWCVR.mjs.map → acorex-platform-common-file-widget-view.component-DTl_Rehd.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-gallery-widget-edit.component-DMu9OW45.mjs → acorex-platform-common-gallery-widget-edit.component-DHeFVg5x.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-gallery-widget-edit.component-DMu9OW45.mjs.map → acorex-platform-common-gallery-widget-edit.component-DHeFVg5x.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-gallery-widget-filter.component-BNYgn0eK.mjs → acorex-platform-common-gallery-widget-filter.component-Di446i2c.mjs} +3 -4
- package/fesm2022/acorex-platform-common-gallery-widget-filter.component-Di446i2c.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-gallery-widget-view.component-D52gjNcJ.mjs → acorex-platform-common-gallery-widget-view.component-CkcRvfv-.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-gallery-widget-view.component-D52gjNcJ.mjs.map → acorex-platform-common-gallery-widget-view.component-CkcRvfv-.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-largetext-widget-edit.component-B7Hq-1ny.mjs → acorex-platform-common-largetext-widget-edit.component-D89AlBSm.mjs} +2 -3
- package/fesm2022/acorex-platform-common-largetext-widget-edit.component-D89AlBSm.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-lookup-widget-column.component-2ccF27nN.mjs → acorex-platform-common-lookup-widget-column.component-CB0ehp_y.mjs} +3 -4
- package/fesm2022/acorex-platform-common-lookup-widget-column.component-CB0ehp_y.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-lookup-widget-edit.component-Cn3yALld.mjs → acorex-platform-common-lookup-widget-edit.component-B0HQnsb8.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-lookup-widget-edit.component-Cn3yALld.mjs.map → acorex-platform-common-lookup-widget-edit.component-B0HQnsb8.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-lookup-widget-filter.component-NY-w7EgD.mjs → acorex-platform-common-lookup-widget-filter.component-Dxj_XEYV.mjs} +4 -5
- package/fesm2022/acorex-platform-common-lookup-widget-filter.component-Dxj_XEYV.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-lookup-widget-view.component-DjbS0xsx.mjs → acorex-platform-common-lookup-widget-view.component-BtO3feA9.mjs} +3 -4
- package/fesm2022/acorex-platform-common-lookup-widget-view.component-BtO3feA9.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-map-widget-edit.component-CHyEencO.mjs → acorex-platform-common-map-widget-edit.component-hXIZrhzg.mjs} +3 -4
- package/fesm2022/acorex-platform-common-map-widget-edit.component-hXIZrhzg.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-map-widget-view.component-BMK6QTKt.mjs → acorex-platform-common-map-widget-view.component-RgV-r8q6.mjs} +3 -4
- package/fesm2022/acorex-platform-common-map-widget-view.component-RgV-r8q6.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-messenger-widget-column.component-iVdgR19k.mjs → acorex-platform-common-messenger-widget-column.component-DGWQWuzM.mjs} +3 -4
- package/fesm2022/acorex-platform-common-messenger-widget-column.component-DGWQWuzM.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-messenger-widget-edit.component-BicSI2_5.mjs → acorex-platform-common-messenger-widget-edit.component-Blv1qL4e.mjs} +3 -4
- package/fesm2022/acorex-platform-common-messenger-widget-edit.component-Blv1qL4e.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-messenger-widget-view.component-DlSSOqrz.mjs → acorex-platform-common-messenger-widget-view.component-DEbnPggG.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-messenger-widget-view.component-DlSSOqrz.mjs.map → acorex-platform-common-messenger-widget-view.component-DEbnPggG.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-number-widget-edit.component-DlLjt4OQ.mjs → acorex-platform-common-number-widget-edit.component-gQCEBhPv.mjs} +3 -4
- package/fesm2022/acorex-platform-common-number-widget-edit.component-gQCEBhPv.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-number-widget-filter.component-DPZQomNX.mjs → acorex-platform-common-number-widget-filter.component-CvEw3awN.mjs} +4 -5
- package/fesm2022/acorex-platform-common-number-widget-filter.component-CvEw3awN.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-number-widget-view.component-BW1ftaLk.mjs → acorex-platform-common-number-widget-view.component-ROrdklif.mjs} +3 -4
- package/fesm2022/acorex-platform-common-number-widget-view.component-ROrdklif.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-password-widget-column.component-BZEavb7p.mjs → acorex-platform-common-password-widget-column.component-vXdE4UjM.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-password-widget-column.component-BZEavb7p.mjs.map → acorex-platform-common-password-widget-column.component-vXdE4UjM.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-password-widget-edit.component-De5r-L4i.mjs → acorex-platform-common-password-widget-edit.component-BCOoHtGl.mjs} +3 -4
- package/fesm2022/acorex-platform-common-password-widget-edit.component-BCOoHtGl.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-password-widget-view.component-Dw4xxdOT.mjs → acorex-platform-common-password-widget-view.component-rpjAeimk.mjs} +4 -5
- package/fesm2022/{acorex-platform-common-password-widget-view.component-Dw4xxdOT.mjs.map → acorex-platform-common-password-widget-view.component-rpjAeimk.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-phone-widget-column.component-BTbtfPty.mjs → acorex-platform-common-phone-widget-column.component-BbuUbPCu.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-phone-widget-column.component-BTbtfPty.mjs.map → acorex-platform-common-phone-widget-column.component-BbuUbPCu.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-phone-widget-edit.component-Ay4y8j_t.mjs → acorex-platform-common-phone-widget-edit.component-Bo_aOxfZ.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-phone-widget-edit.component-Ay4y8j_t.mjs.map → acorex-platform-common-phone-widget-edit.component-Bo_aOxfZ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-phone-widget-view.component-D4WqjjBP.mjs → acorex-platform-common-phone-widget-view.component-DDBCR_QY.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-phone-widget-view.component-D4WqjjBP.mjs.map → acorex-platform-common-phone-widget-view.component-DDBCR_QY.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-rich-text-widget-column.component-B5rev2NB.mjs → acorex-platform-common-rich-text-widget-column.component-BHiq7hdp.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-rich-text-widget-column.component-B5rev2NB.mjs.map → acorex-platform-common-rich-text-widget-column.component-BHiq7hdp.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-rich-text-widget-edit.component-BHBRQKhj.mjs → acorex-platform-common-rich-text-widget-edit.component-12odUyzb.mjs} +3 -4
- package/fesm2022/acorex-platform-common-rich-text-widget-edit.component-12odUyzb.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-rich-text-widget-view.component-0bIoY7Ws.mjs → acorex-platform-common-rich-text-widget-view.component-Xr0ohz5L.mjs} +3 -4
- package/fesm2022/acorex-platform-common-rich-text-widget-view.component-Xr0ohz5L.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-selection-list-widget-column.component-CzJWP4YT.mjs → acorex-platform-common-selection-list-widget-column.component-C2JikSdw.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-selection-list-widget-column.component-CzJWP4YT.mjs.map → acorex-platform-common-selection-list-widget-column.component-C2JikSdw.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-selection-list-widget-edit.component-DhYa6y65.mjs → acorex-platform-common-selection-list-widget-edit.component-C1QPfHCm.mjs} +4 -5
- package/fesm2022/acorex-platform-common-selection-list-widget-edit.component-C1QPfHCm.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-selection-list-widget-filter.component-B344MeXJ.mjs → acorex-platform-common-selection-list-widget-filter.component-DIgxHmqa.mjs} +3 -4
- package/fesm2022/acorex-platform-common-selection-list-widget-filter.component-DIgxHmqa.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-selection-list-widget-view.component-Czk5DzgK.mjs → acorex-platform-common-selection-list-widget-view.component-D-VQ4JNC.mjs} +3 -4
- package/fesm2022/acorex-platform-common-selection-list-widget-view.component-D-VQ4JNC.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-signature-pad-widget-edit.component-YSGjL25D.mjs → acorex-platform-common-signature-pad-widget-edit.component-BimaJ4_d.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-signature-pad-widget-edit.component-YSGjL25D.mjs.map → acorex-platform-common-signature-pad-widget-edit.component-BimaJ4_d.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-signature-pad-widget-view.component-D64btt99.mjs → acorex-platform-common-signature-pad-widget-view.component-USd0U707.mjs} +3 -4
- package/fesm2022/acorex-platform-common-signature-pad-widget-view.component-USd0U707.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-string-widget-filter.component-5wb1x5Fa.mjs → acorex-platform-common-string-widget-filter.component-wI9D-Ju5.mjs} +4 -5
- package/fesm2022/acorex-platform-common-string-widget-filter.component-wI9D-Ju5.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-text-widget-column.component-U-V3HD2V.mjs → acorex-platform-common-text-widget-column.component-Be7Nr0lJ.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-text-widget-column.component-U-V3HD2V.mjs.map → acorex-platform-common-text-widget-column.component-Be7Nr0lJ.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-text-widget-edit.component-BCs13zUr.mjs → acorex-platform-common-text-widget-edit.component-feJTTnye.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-text-widget-edit.component-BCs13zUr.mjs.map → acorex-platform-common-text-widget-edit.component-feJTTnye.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-text-widget-view.component-V1RkKuNZ.mjs → acorex-platform-common-text-widget-view.component-DsUAJ-md.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-text-widget-view.component-V1RkKuNZ.mjs.map → acorex-platform-common-text-widget-view.component-DsUAJ-md.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-toggle-widget-column.component-FqKLeAhY.mjs → acorex-platform-common-toggle-widget-column.component-BFwzsY4-.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-toggle-widget-column.component-FqKLeAhY.mjs.map → acorex-platform-common-toggle-widget-column.component-BFwzsY4-.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-common-toggle-widget-edit.component-DKSnFdTQ.mjs → acorex-platform-common-toggle-widget-edit.component-Cuf9_RrU.mjs} +3 -4
- package/fesm2022/acorex-platform-common-toggle-widget-edit.component-Cuf9_RrU.mjs.map +1 -0
- package/fesm2022/{acorex-platform-common-toggle-widget-view.component-BOYPRUCt.mjs → acorex-platform-common-toggle-widget-view.component-DYz6VTey.mjs} +3 -4
- package/fesm2022/{acorex-platform-common-toggle-widget-view.component-BOYPRUCt.mjs.map → acorex-platform-common-toggle-widget-view.component-DYz6VTey.mjs.map} +1 -1
- package/fesm2022/acorex-platform-common.mjs +515 -237
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +92 -17
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +424 -231
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +206 -134
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layouts-entity-create-view.component-CPGbLM4C.mjs → acorex-platform-layouts-entity-create-view.component-JsGlDx_S.mjs} +3 -3
- package/fesm2022/{acorex-platform-layouts-entity-create-view.component-CPGbLM4C.mjs.map → acorex-platform-layouts-entity-create-view.component-JsGlDx_S.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layouts-entity-import-view.component-CZpEcVi9.mjs → acorex-platform-layouts-entity-import-view.component-9FK_Iro9.mjs} +2 -2
- package/fesm2022/{acorex-platform-layouts-entity-import-view.component-CZpEcVi9.mjs.map → acorex-platform-layouts-entity-import-view.component-9FK_Iro9.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layouts-entity-modify-view.component-Bt4MLEou.mjs → acorex-platform-layouts-entity-modify-view.component-CNbc8ewu.mjs} +3 -3
- package/fesm2022/{acorex-platform-layouts-entity-modify-view.component-Bt4MLEou.mjs.map → acorex-platform-layouts-entity-modify-view.component-CNbc8ewu.mjs.map} +1 -1
- package/fesm2022/acorex-platform-layouts.mjs +14 -13
- package/fesm2022/acorex-platform-layouts.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-BJ7inoTB.mjs → acorex-platform-themes-default-entity-master-create-view.component-Cf5ttvrG.mjs} +7 -7
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-BJ7inoTB.mjs.map → acorex-platform-themes-default-entity-master-create-view.component-Cf5ttvrG.mjs.map} +1 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BLb_4pK5.mjs +306 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BLb_4pK5.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-CCvE7XiE.mjs +88 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-CCvE7XiE.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-CwrgQFY7.mjs +150 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-CwrgQFY7.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +49 -27
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared.mjs +23 -4
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-M_JuDPbt.mjs → acorex-platform-widgets-button-widget-designer.component-CPFA79Gx.mjs} +2 -2
- package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-M_JuDPbt.mjs.map → acorex-platform-widgets-button-widget-designer.component-CPFA79Gx.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-j1jG8pCr.mjs → acorex-platform-widgets-checkbox-widget-column.component-MInF2GVN.mjs} +2 -2
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-j1jG8pCr.mjs.map → acorex-platform-widgets-checkbox-widget-column.component-MInF2GVN.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-e9O9qFIf.mjs → acorex-platform-widgets-checkbox-widget-designer.component-B7Qv2aYx.mjs} +5 -5
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-e9O9qFIf.mjs.map → acorex-platform-widgets-checkbox-widget-designer.component-B7Qv2aYx.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-view.component-CDA7Jwov.mjs → acorex-platform-widgets-checkbox-widget-view.component-DP4kITs-.mjs} +2 -2
- package/fesm2022/{acorex-platform-widgets-checkbox-widget-view.component-CDA7Jwov.mjs.map → acorex-platform-widgets-checkbox-widget-view.component-DP4kITs-.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-widgets-color-box-widget-designer.component-Brsun0id.mjs → acorex-platform-widgets-color-box-widget-designer.component-uQBHAspe.mjs} +5 -5
- package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-uQBHAspe.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-contact-widget-filter.component-GTwK51nJ.mjs → acorex-platform-widgets-contact-widget-filter.component-DnQZon-E.mjs} +2 -2
- package/fesm2022/{acorex-platform-widgets-contact-widget-filter.component-GTwK51nJ.mjs.map → acorex-platform-widgets-contact-widget-filter.component-DnQZon-E.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-BL_EAwUs.mjs → acorex-platform-widgets-page-widget-designer.component-DOulAanE.mjs} +76 -78
- package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DOulAanE.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-rich-text-popup.component-RCdFIz45.mjs → acorex-platform-widgets-rich-text-popup.component-C8KmObPV.mjs} +2 -2
- package/fesm2022/{acorex-platform-widgets-rich-text-popup.component-RCdFIz45.mjs.map → acorex-platform-widgets-rich-text-popup.component-C8KmObPV.mjs.map} +1 -1
- package/fesm2022/acorex-platform-widgets-template-picker.component-DPlvwgbu.mjs +123 -0
- package/fesm2022/acorex-platform-widgets-template-picker.component-DPlvwgbu.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets-template-widget-edit.component-JlCVB-Aq.mjs +135 -0
- package/fesm2022/acorex-platform-widgets-template-widget-edit.component-JlCVB-Aq.mjs.map +1 -0
- package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-Bi9hlpvB.mjs → acorex-platform-widgets-text-block-widget-designer.component-BE6goaZc.mjs} +2 -2
- package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-Bi9hlpvB.mjs.map → acorex-platform-widgets-text-block-widget-designer.component-BE6goaZc.mjs.map} +1 -1
- package/fesm2022/acorex-platform-widgets.mjs +438 -385
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +1 -1
- package/layout/builder/lib/builder/datasource-provider.service.d.ts +24 -0
- package/layout/builder/lib/builder/index.d.ts +1 -0
- package/layout/builder/lib/builder/widget.types.d.ts +15 -9
- package/layout/designer/lib/designer/components/board/board.component.d.ts +8 -1
- package/layout/designer/lib/designer/components/drawers/data-sources/data-sources.component.d.ts +6 -4
- package/layout/designer/lib/designer/designer.component.d.ts +3 -2
- package/layout/designer/lib/designer/index.d.ts +1 -0
- package/layout/designer/lib/designer/shared/designer-connector.service.d.ts +10 -9
- package/layout/designer/lib/designer/shared/designer.service.d.ts +18 -5
- package/layout/designer/lib/designer/shared/designer.types.d.ts +0 -4
- package/layout/designer/lib/designer/shared/generic-commands.types.d.ts +9 -0
- package/layout/designer/lib/designer/shared/widget-designer-renderer.directive.d.ts +8 -5
- package/layout/designer/lib/preview/preview-viewer.component.d.ts +8 -1
- package/layout/designer/lib/property-viewer/widget-property-viewer.component.d.ts +8 -4
- package/layout/entity/lib/entity-detail-list.viewmodel.d.ts +2 -1
- package/layout/entity/lib/entity-master-create.viewmodel.d.ts +1 -1
- package/layout/entity/lib/entity-master-list.viewmodel.d.ts +2 -3
- package/layout/entity/lib/entity-master-single.viewmodel.d.ts +2 -1
- package/layout/entity/lib/entity-master-update.viewmodel.d.ts +1 -1
- package/layout/entity/lib/entity.config.d.ts +1 -1
- package/layout/entity/lib/entity.service.d.ts +7 -0
- package/layout/entity/lib/entity.viewmodel.d.ts +6 -4
- package/layout/entity/lib/index.d.ts +1 -0
- package/layout/entity/lib/widgets/lookup-widget/lookup-widget-edit.component.d.ts +14 -12
- package/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.viewmodel.d.ts +2 -2
- package/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.d.ts +13 -10
- package/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.d.ts +0 -1
- package/package.json +12 -12
- package/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.d.ts +4 -1
- package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/list-view-option-sorting/list-view-option-sorting.component.d.ts +1 -1
- package/themes/default/lib/layouts/root-layout/components/menu/root-menu.component.d.ts +8 -2
- package/themes/default/lib/layouts/root-layout/root-layout.component.d.ts +3 -6
- package/themes/default/lib/layouts/root-layout/root-layout.module.d.ts +14 -13
- package/themes/shared/lib/shared.module.d.ts +2 -1
- package/widgets/lib/widgets/editors/checkbox/checkbox-widget-edit.component.d.ts +2 -0
- package/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.d.ts +1 -3
- package/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.d.ts +1 -0
- package/widgets/lib/widgets/editors/select/index.d.ts +2 -2
- package/widgets/lib/widgets/editors/select/select-box-widget-edit.component.d.ts +3 -6
- package/widgets/lib/widgets/editors/select/select-box-widget-view.component.d.ts +2 -3
- package/widgets/lib/widgets/editors/selection-list/selection-list-widget-designer.component.d.ts +6 -7
- package/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.d.ts +5 -6
- package/widgets/lib/widgets/editors/selection-list/selection-list-widget-view.component.d.ts +3 -3
- package/widgets/lib/widgets/editors/toggle/toggle-widget-edit.component.d.ts +1 -2
- package/widgets/lib/widgets/editors/toggle/toggle-widget-print.component.d.ts +1 -1
- package/widgets/lib/widgets/editors/toggle/toggle-widget-view.component.d.ts +1 -1
- package/widgets/lib/widgets/layout/page/page-widget-designer.component.d.ts +8 -9
- package/widgets/lib/widgets/layout/template/template-picker/template-picker.component.d.ts +30 -0
- package/widgets/lib/widgets/layout/template/template-widget-edit.component.d.ts +3 -0
- package/widgets/lib/widgets/layout/template/template-widget-view.component.d.ts +1 -0
- package/widgets/lib/widgets/layout/template/template.provider.d.ts +3 -0
- package/common/lib/layout/menu/menu.loader.d.ts +0 -17
- package/common/lib/utils/router-util.service.d.ts +0 -12
- package/esm2022/common/lib/layout/menu/menu.loader.mjs +0 -39
- package/esm2022/common/lib/utils/router-util.service.mjs +0 -43
- package/fesm2022/acorex-platform-common-avatar-widget-view.component-Bbg1imZG.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-checkbox-widget-edit.component-GgWLpxV0.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-dateTime-widget-column.component-DaXNK6e2.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-email-widget-column.component-MySWR3RG.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-file-widget-column.component-GtbElxmS.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-file-widget-filter.component-D-_WnxlE.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-gallery-widget-filter.component-BNYgn0eK.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-largetext-widget-edit.component-B7Hq-1ny.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-lookup-widget-column.component-2ccF27nN.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-lookup-widget-filter.component-NY-w7EgD.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-lookup-widget-view.component-DjbS0xsx.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-map-widget-edit.component-CHyEencO.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-map-widget-view.component-BMK6QTKt.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-messenger-widget-column.component-iVdgR19k.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-messenger-widget-edit.component-BicSI2_5.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-number-widget-edit.component-DlLjt4OQ.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-number-widget-filter.component-DPZQomNX.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-number-widget-view.component-BW1ftaLk.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-password-widget-edit.component-De5r-L4i.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-rich-text-widget-edit.component-BHBRQKhj.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-rich-text-widget-view.component-0bIoY7Ws.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-selection-list-widget-edit.component-DhYa6y65.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-selection-list-widget-filter.component-B344MeXJ.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-selection-list-widget-view.component-Czk5DzgK.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-signature-pad-widget-view.component-D64btt99.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-string-widget-filter.component-5wb1x5Fa.mjs.map +0 -1
- package/fesm2022/acorex-platform-common-toggle-widget-edit.component-DKSnFdTQ.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BGKWaCth.mjs +0 -298
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BGKWaCth.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-B3phYOIw.mjs +0 -88
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-B3phYOIw.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BO_lAQc_.mjs +0 -150
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BO_lAQc_.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-Brsun0id.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-page-widget-designer.component-BL_EAwUs.mjs.map +0 -1
- package/fesm2022/acorex-platform-widgets-template-widget-edit.component-gvAh-gH1.mjs +0 -96
- package/fesm2022/acorex-platform-widgets-template-widget-edit.component-gvAh-gH1.mjs.map +0 -1
|
@@ -1,42 +1,57 @@
|
|
|
1
1
|
import { AXLoadingDialogService } from '@acorex/components/loading-dialog';
|
|
2
2
|
import { AXPopupService } from '@acorex/components/popup';
|
|
3
|
+
import { AXToastService } from '@acorex/components/toast';
|
|
3
4
|
import { AXFileService } from '@acorex/core/file';
|
|
4
5
|
import { AXPWidgetRegistryService, AXPWidgetsCatalog, } from '@acorex/platform/layout/builder';
|
|
5
|
-
import { computed, inject, Injectable, signal } from '@angular/core';
|
|
6
|
+
import { computed, effect, inject, Injectable, signal } from '@angular/core';
|
|
6
7
|
import { cloneDeep, get, merge, set, sortBy } from 'lodash-es';
|
|
7
8
|
import { Subject } from 'rxjs';
|
|
8
9
|
import { AddWidgetCommand, CommandManager, RemoveWidgetCommand, UpdateWidgetCommand } from './command';
|
|
9
|
-
import {
|
|
10
|
+
import { AXPDesignerConnector } from './designer-connector.service';
|
|
11
|
+
import { AXP_DESIGNER_ADD_WIDGET_MENU, AXP_DESIGNER_CLONE_MENU, AXP_DESIGNER_COPY_MENU, AXP_DESIGNER_CUT_MENU, AXP_DESIGNER_DELETE_WIDGET_MENU as AXP_DESIGNER_DELETE_WIDGET_MENU, AXP_DESIGNER_PASTE_MENU, AXP_DESIGNER_SAVE_AS_WIDGET_MENU, cloneWidgetMenu, } from './generic-commands.types';
|
|
10
12
|
import * as i0 from "@angular/core";
|
|
11
13
|
export class AXPDesignerService {
|
|
14
|
+
#ef;
|
|
12
15
|
constructor() {
|
|
13
16
|
this.popupService = inject(AXPopupService);
|
|
17
|
+
this.toastService = inject(AXToastService);
|
|
14
18
|
this.fileService = inject(AXFileService);
|
|
15
19
|
this.loadingService = inject(AXLoadingDialogService);
|
|
16
20
|
this.widgetRegisteryService = inject(AXPWidgetRegistryService);
|
|
21
|
+
this.connector = inject(AXPDesignerConnector);
|
|
17
22
|
this.channel = new BroadcastChannel('livePreviewChannel');
|
|
18
23
|
this.document = signal(this.createDoc());
|
|
19
24
|
this.currentPageIndex = signal(0);
|
|
20
25
|
this.currentPage = signal(this.document().children?.[0]);
|
|
21
26
|
this.commandManager = inject(CommandManager);
|
|
22
27
|
this.clipboard = signal(null);
|
|
23
|
-
|
|
28
|
+
//
|
|
29
|
+
this.canCutCopy = computed(() => this.selectedNode() != null && this.selectedNode()?.type != 'page-layout');
|
|
30
|
+
this.canDelete = computed(() => this.selectedNode() != null && this.selectedNode()?.type != 'page-layout');
|
|
31
|
+
this.canInsert = computed(() => this.selectedNode() != null && this.selectedNodeConfig().type == 'container');
|
|
24
32
|
this.canPaste = computed(() => this.clipboard() != null);
|
|
33
|
+
//
|
|
25
34
|
this.history = computed(() => this.commandManager.history());
|
|
26
35
|
this.canUndo = computed(() => this.commandManager.canUndo());
|
|
27
36
|
this.canRedo = computed(() => this.commandManager.canRedo());
|
|
37
|
+
//
|
|
38
|
+
this.canSave = computed(() => this.templateId() != null);
|
|
28
39
|
this.breadcrumbs = computed(() => {
|
|
29
40
|
return this.selectedNode() ? this.findBreadcrumbs(this.currentPage(), this.selectedNode()) ?? [] : [];
|
|
30
41
|
});
|
|
31
42
|
this.selectedNode = signal(null);
|
|
43
|
+
this.selectedNodeConfig = computed(() => get(this.selectedNode(), '__meta__.config'));
|
|
32
44
|
this._focusedNode = null;
|
|
33
45
|
this.focusedNode = () => this._focusedNode;
|
|
34
|
-
this.mode = signal(AXPDesignerModes.Design);
|
|
35
46
|
this.size = signal('xl');
|
|
36
47
|
this.onSelected = new Subject();
|
|
37
48
|
this.onRefresh = new Subject();
|
|
38
49
|
this.onUpdate = new Subject();
|
|
39
50
|
this.onFocused = new Subject();
|
|
51
|
+
this.templateId = signal(null);
|
|
52
|
+
this.#ef = effect(() => {
|
|
53
|
+
this.refresh({ widget: this.currentPage() });
|
|
54
|
+
}, { allowSignalWrites: true });
|
|
40
55
|
this.channelCallback = (message) => {
|
|
41
56
|
if (message.data.action == 'designer-preview-loaded') {
|
|
42
57
|
this.updatePreview();
|
|
@@ -92,7 +107,7 @@ export class AXPDesignerService {
|
|
|
92
107
|
// Return undefined if no match is found
|
|
93
108
|
return undefined;
|
|
94
109
|
}
|
|
95
|
-
async showPicker(currentNode) {
|
|
110
|
+
async showPicker(currentNode = this.selectedNode()) {
|
|
96
111
|
const com = await import('../components/widget-picker/widget-picker.component').then((c) => c.AXPDesignerWidgetPickerComponent);
|
|
97
112
|
const result = await this.popupService.open(com, {
|
|
98
113
|
title: 'Widget Gallery',
|
|
@@ -153,11 +168,11 @@ export class AXPDesignerService {
|
|
|
153
168
|
}
|
|
154
169
|
goToPage(index) {
|
|
155
170
|
this.currentPageIndex.set(index);
|
|
156
|
-
setTimeout(() => {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
});
|
|
171
|
+
//setTimeout(() => {
|
|
172
|
+
this.currentPage.set(this.document().children?.[this.currentPageIndex()]);
|
|
173
|
+
this.select({ widget: this.currentPage() });
|
|
174
|
+
//this.updatePreview();
|
|
175
|
+
//});
|
|
161
176
|
}
|
|
162
177
|
reRenderPage() {
|
|
163
178
|
this.currentPage.set({ ...this.currentPage() });
|
|
@@ -236,7 +251,7 @@ export class AXPDesignerService {
|
|
|
236
251
|
this.select({ widget: cloned });
|
|
237
252
|
return cloned;
|
|
238
253
|
}
|
|
239
|
-
removeWidget(node) {
|
|
254
|
+
removeWidget(node = this.selectedNode()) {
|
|
240
255
|
if (node.type === 'document-layout' ||
|
|
241
256
|
(node.type === 'page-layout' && (this.document().children?.length ?? 1) == 1)) {
|
|
242
257
|
console.error('Cannot remove the page node.');
|
|
@@ -318,15 +333,15 @@ export class AXPDesignerService {
|
|
|
318
333
|
return node;
|
|
319
334
|
}
|
|
320
335
|
copy(widget = this.selectedNode()) {
|
|
321
|
-
if (
|
|
322
|
-
|
|
323
|
-
|
|
336
|
+
if (this.canCutCopy()) {
|
|
337
|
+
this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy
|
|
338
|
+
}
|
|
324
339
|
}
|
|
325
340
|
cut(widget = this.selectedNode()) {
|
|
326
|
-
if (
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
341
|
+
if (this.canCutCopy()) {
|
|
342
|
+
this.copy(widget); // Copy the widget to the clipboard
|
|
343
|
+
this.removeWidget(widget); // Reuse the removeWidget method which should handle undo internally
|
|
344
|
+
}
|
|
330
345
|
}
|
|
331
346
|
clone(widget = this.selectedNode()) {
|
|
332
347
|
if (!widget)
|
|
@@ -371,8 +386,23 @@ export class AXPDesignerService {
|
|
|
371
386
|
this.select({ widget: newNode }); // Select the newly pasted node
|
|
372
387
|
});
|
|
373
388
|
}
|
|
374
|
-
|
|
375
|
-
|
|
389
|
+
async save() {
|
|
390
|
+
if (this.templateId()) {
|
|
391
|
+
const content = this.export();
|
|
392
|
+
await this.connector.save(this.templateId(), { json: content });
|
|
393
|
+
this.toastService.success('Your changes saved successfully');
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
this.downloadJson();
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
async saveAs(node = this.document()) {
|
|
400
|
+
const content = this.export(node);
|
|
401
|
+
await this.connector.saveAs({ json: content });
|
|
402
|
+
this.toastService.success('Your changes saved successfully');
|
|
403
|
+
}
|
|
404
|
+
export(node = this.document()) {
|
|
405
|
+
const json = this.removeMetaProp(node);
|
|
376
406
|
return JSON.stringify(json);
|
|
377
407
|
}
|
|
378
408
|
downloadJson() {
|
|
@@ -394,54 +424,69 @@ export class AXPDesignerService {
|
|
|
394
424
|
URL.revokeObjectURL(url);
|
|
395
425
|
document.body.removeChild(a);
|
|
396
426
|
}
|
|
427
|
+
async loadById(id) {
|
|
428
|
+
try {
|
|
429
|
+
const content = await this.connector.load(id);
|
|
430
|
+
this.templateId.set(id);
|
|
431
|
+
if (content) {
|
|
432
|
+
await this.loadByContent(content);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
catch (error) {
|
|
436
|
+
this.toastService.danger(error.message);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
397
439
|
async importJSon() {
|
|
398
440
|
const files = await this.fileService.choose({ multiple: false, accept: 'application/json' });
|
|
399
441
|
if (files && files.length) {
|
|
400
442
|
const file = files[0];
|
|
401
443
|
const content = await file.text();
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
444
|
+
await this.loadByContent(content);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
async loadByContent(content) {
|
|
448
|
+
const rootNode = JSON.parse(content);
|
|
449
|
+
const totalNode = this.countTotalNodes(rootNode);
|
|
450
|
+
const processedNodes = { count: 0 };
|
|
451
|
+
const button = {
|
|
452
|
+
text: 'Cancel',
|
|
453
|
+
autofocus: true,
|
|
454
|
+
color: 'primary',
|
|
455
|
+
onClick: (e) => {
|
|
456
|
+
dialog.close();
|
|
457
|
+
},
|
|
458
|
+
};
|
|
459
|
+
const dialog = this.loadingService.show({
|
|
460
|
+
mode: 'determinate',
|
|
461
|
+
title: 'Loading Content',
|
|
462
|
+
progressColor: 'primary',
|
|
463
|
+
text: 'Processing content',
|
|
464
|
+
status: `0 of ${totalNode}`,
|
|
465
|
+
buttons: [button],
|
|
466
|
+
});
|
|
467
|
+
try {
|
|
468
|
+
const root = await this.addMetaToNodes(rootNode, processedNodes, (count) => {
|
|
469
|
+
dialog.setProgressValue(Math.ceil((count / totalNode) * 100));
|
|
470
|
+
dialog.setProgressStatus(`${count} of ${totalNode}`);
|
|
420
471
|
});
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
catch (error) {
|
|
440
|
-
dialog.setProgressColor('danger');
|
|
441
|
-
dialog.setProgressText(error instanceof Error ? error.message : 'Cannot process json file');
|
|
442
|
-
button.text = 'Close';
|
|
443
|
-
button.color = 'danger';
|
|
444
|
-
}
|
|
472
|
+
const page = root.children?.[0];
|
|
473
|
+
this.document.set(root);
|
|
474
|
+
this.currentPage.set(page);
|
|
475
|
+
dialog.setProgressColor('success');
|
|
476
|
+
dialog.setProgressText('Content loaded successfully');
|
|
477
|
+
button.text = 'Okay';
|
|
478
|
+
button.color = 'success';
|
|
479
|
+
dialog.setProgressValue(100);
|
|
480
|
+
setTimeout(() => {
|
|
481
|
+
this.reRenderPage();
|
|
482
|
+
dialog.close();
|
|
483
|
+
}, 500);
|
|
484
|
+
}
|
|
485
|
+
catch (error) {
|
|
486
|
+
dialog.setProgressColor('danger');
|
|
487
|
+
dialog.setProgressText(error instanceof Error ? error.message : 'Cannot load content');
|
|
488
|
+
button.text = 'Close';
|
|
489
|
+
button.color = 'danger';
|
|
445
490
|
}
|
|
446
491
|
}
|
|
447
492
|
countTotalNodes(node) {
|
|
@@ -499,10 +544,60 @@ export class AXPDesignerService {
|
|
|
499
544
|
openPreviewWindow() {
|
|
500
545
|
window.open('/forms/preview', '_blank');
|
|
501
546
|
}
|
|
547
|
+
getContextMenuItems() {
|
|
548
|
+
const items = [];
|
|
549
|
+
//
|
|
550
|
+
if (this.canInsert()) {
|
|
551
|
+
items.push(cloneWidgetMenu(AXP_DESIGNER_ADD_WIDGET_MENU, {
|
|
552
|
+
disabled: !this.canInsert(), break: true
|
|
553
|
+
}));
|
|
554
|
+
}
|
|
555
|
+
//
|
|
556
|
+
items.push(cloneWidgetMenu(AXP_DESIGNER_CLONE_MENU, { disabled: !this.canCutCopy() }));
|
|
557
|
+
items.push(cloneWidgetMenu(AXP_DESIGNER_CUT_MENU, { disabled: !this.canCutCopy() }));
|
|
558
|
+
items.push(cloneWidgetMenu(AXP_DESIGNER_COPY_MENU, { disabled: !this.canCutCopy() }));
|
|
559
|
+
items.push(cloneWidgetMenu(AXP_DESIGNER_PASTE_MENU, { disabled: !this.canPaste(), break: true }));
|
|
560
|
+
//
|
|
561
|
+
items.push(cloneWidgetMenu(AXP_DESIGNER_DELETE_WIDGET_MENU, { disabled: !this.canDelete(), break: true }));
|
|
562
|
+
//
|
|
563
|
+
items.push(cloneWidgetMenu(AXP_DESIGNER_SAVE_AS_WIDGET_MENU));
|
|
564
|
+
return items;
|
|
565
|
+
}
|
|
566
|
+
executeCommand(name, data) {
|
|
567
|
+
switch (name) {
|
|
568
|
+
case AXP_DESIGNER_ADD_WIDGET_MENU.name: {
|
|
569
|
+
this.showPicker();
|
|
570
|
+
break;
|
|
571
|
+
}
|
|
572
|
+
//
|
|
573
|
+
case AXP_DESIGNER_DELETE_WIDGET_MENU.name: {
|
|
574
|
+
this.removeWidget();
|
|
575
|
+
break;
|
|
576
|
+
}
|
|
577
|
+
//
|
|
578
|
+
case AXP_DESIGNER_CLONE_MENU.name: {
|
|
579
|
+
this.clone();
|
|
580
|
+
break;
|
|
581
|
+
}
|
|
582
|
+
case AXP_DESIGNER_CUT_MENU.name: {
|
|
583
|
+
this.cut();
|
|
584
|
+
break;
|
|
585
|
+
}
|
|
586
|
+
case AXP_DESIGNER_COPY_MENU.name: {
|
|
587
|
+
this.copy();
|
|
588
|
+
break;
|
|
589
|
+
}
|
|
590
|
+
case AXP_DESIGNER_PASTE_MENU.name: {
|
|
591
|
+
this.paste();
|
|
592
|
+
break;
|
|
593
|
+
}
|
|
594
|
+
//
|
|
595
|
+
}
|
|
596
|
+
}
|
|
502
597
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
503
598
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService }); }
|
|
504
599
|
}
|
|
505
600
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService, decorators: [{
|
|
506
601
|
type: Injectable
|
|
507
602
|
}], ctorParameters: () => [] });
|
|
508
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2Rlc2lnbmVyL3NyYy9saWIvZGVzaWduZXIvc2hhcmVkL2Rlc2lnbmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE2QixzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUlMLHdCQUF3QixFQUN4QixpQkFBaUIsR0FDbEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2RyxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBb0RyRSxNQUFNLE9BQU8sa0JBQWtCO0lBd0M3QjtRQXZDUSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2hELDJCQUFzQixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FB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QUFJLEVBQUU7Z0JBQ3hCLGNBQWMsRUFBRSxJQUFJO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7OEdBdGpCVSxrQkFBa0I7a0hBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYTG9hZGluZ0RpYWxvZ0J1dHRvbkl0ZW0sIEFYTG9hZGluZ0RpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZy1kaWFsb2cnO1xuaW1wb3J0IHsgQVhQb3B1cFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHsgQVhGaWxlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9maWxlJztcbmltcG9ydCB7XG4gIEFYUFdpZGdldENvbXBvbmVudCxcbiAgQVhQV2lkZ2V0Q29uZmlnLFxuICBBWFBXaWRnZXROb2RlLFxuICBBWFBXaWRnZXRSZWdpc3RyeVNlcnZpY2UsXG4gIEFYUFdpZGdldHNDYXRhbG9nLFxufSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9idWlsZGVyJztcbmltcG9ydCB7IGNvbXB1dGVkLCBpbmplY3QsIEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBnZXQsIG1lcmdlLCBzZXQsIHNvcnRCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBZGRXaWRnZXRDb21tYW5kLCBDb21tYW5kTWFuYWdlciwgUmVtb3ZlV2lkZ2V0Q29tbWFuZCwgVXBkYXRlV2lkZ2V0Q29tbWFuZCB9IGZyb20gJy4vY29tbWFuZCc7XG5pbXBvcnQgeyBBWFBEZXNpZ25lck1vZGUsIEFYUERlc2lnbmVyTW9kZXMgfSBmcm9tICcuL2Rlc2lnbmVyLnR5cGVzJztcblxuZXhwb3J0IHR5cGUgQVhQRGVzaWduZXJQcmV2aWV3U2l6ZSA9ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCcgfCAneHhsJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lckZvY3VzQ29tbWFuZCB7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRGVzaWduZXJVcGRhdGVDb21tYW5kIHtcbiAgdmFsdWVzOiBhbnk7XG4gIHdpZGdldD86IEFYUFdpZGdldE5vZGUgfCBudWxsO1xuICBtb2RlOiAnaW5pdCcgfCAndXBkYXRlJztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRGVzaWduZXJVcGRhdGVFdmVudCB7XG4gIHZhbHVlczogYW55O1xuICB3aWRnZXQ6IEFYUFdpZGdldE5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRGVzaWduZXJTZWxlY3RDb21tYW5kIHtcbiAgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyUmVnaXN0ZXJDb21tYW5kIHtcbiAgaWQ6IG51bWJlcjtcbiAgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xuICBjb25maWc6IEFYUFdpZGdldENvbmZpZztcbiAgaW5zdGFuY2U6IEFYUFdpZGdldENvbXBvbmVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lclNlbGVjdEV2ZW50IHtcbiAgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyUmVmcmVzaENvbW1hbmQge1xuICB3aWRnZXQ6IEFYUFdpZGdldE5vZGU7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyUmVmcmVzaEV2ZW50IHtcbiAgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyQWRkTm9kZUNvbW1hbmQge1xuICB3aWRnZXQ6IEFYUFdpZGdldE5vZGU7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyQWRkTm9kZUV2ZW50IHtcbiAgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyRm9jdXNFdmVudCB7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZSB8IG51bGw7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWFBEZXNpZ25lclNlcnZpY2Uge1xuICBwcml2YXRlIHBvcHVwU2VydmljZSA9IGluamVjdChBWFBvcHVwU2VydmljZSk7XG4gIHByaXZhdGUgZmlsZVNlcnZpY2UgPSBpbmplY3QoQVhGaWxlU2VydmljZSk7XG4gIHByaXZhdGUgbG9hZGluZ1NlcnZpY2UgPSBpbmplY3QoQVhMb2FkaW5nRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgd2lkZ2V0UmVnaXN0ZXJ5U2VydmljZSA9IGluamVjdChBWFBXaWRnZXRSZWdpc3RyeVNlcnZpY2UpO1xuXG4gIHByaXZhdGUgY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKCdsaXZlUHJldmlld0NoYW5uZWwnKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnQgPSBzaWduYWwodGhpcy5jcmVhdGVEb2MoKSk7XG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50UGFnZUluZGV4ID0gc2lnbmFsKDApO1xuXG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50UGFnZSA9IHNpZ25hbCh0aGlzLmRvY3VtZW50KCkuY2hpbGRyZW4/LlswXSEpO1xuXG4gIHByaXZhdGUgY29tbWFuZE1hbmFnZXIgPSBpbmplY3QoQ29tbWFuZE1hbmFnZXIpO1xuXG4gIHByaXZhdGUgY2xpcGJvYXJkID0gc2lnbmFsPEFYUFdpZGdldE5vZGUgfCBudWxsPihudWxsKTtcbiAgcHVibGljIGNhbkN1dENvcHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkTm9kZSgpICE9IG51bGwgJiYgdGhpcy5zZWxlY3RlZE5vZGUoKT8ubmFtZSAhPSAncGFnZScpO1xuICBwdWJsaWMgY2FuUGFzdGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNsaXBib2FyZCgpICE9IG51bGwpO1xuXG4gIHB1YmxpYyByZWFkb25seSBoaXN0b3J5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21tYW5kTWFuYWdlci5oaXN0b3J5KCkpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2FuVW5kbyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tbWFuZE1hbmFnZXIuY2FuVW5kbygpKTtcbiAgcHVibGljIHJlYWRvbmx5IGNhblJlZG8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbW1hbmRNYW5hZ2VyLmNhblJlZG8oKSk7XG5cbiAgcHVibGljIGJyZWFkY3J1bWJzID0gY29tcHV0ZWQ8QVhQV2lkZ2V0Tm9kZVtdPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWROb2RlKCkgPyB0aGlzLmZpbmRCcmVhZGNydW1icyh0aGlzLmN1cnJlbnRQYWdlKCksIHRoaXMuc2VsZWN0ZWROb2RlKCkhKSA/PyBbXSA6IFtdO1xuICB9KTtcblxuICBwdWJsaWMgc2VsZWN0ZWROb2RlID0gc2lnbmFsPEFYUFdpZGdldE5vZGUgfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIF9mb2N1c2VkTm9kZTogQVhQV2lkZ2V0Tm9kZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgZm9jdXNlZE5vZGUgPSAoKSA9PiB0aGlzLl9mb2N1c2VkTm9kZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW9kZSA9IHNpZ25hbDxBWFBEZXNpZ25lck1vZGU+KEFYUERlc2lnbmVyTW9kZXMuRGVzaWduKTtcbiAgcHVibGljIHJlYWRvbmx5IHNpemUgPSBzaWduYWw8QVhQRGVzaWduZXJQcmV2aWV3U2l6ZT4oJ3hsJyk7XG5cbiAgcHVibGljIHJlYWRvbmx5IG9uU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxBWFBEZXNpZ25lclNlbGVjdEV2ZW50PigpO1xuICBwdWJsaWMgcmVhZG9ubHkgb25SZWZyZXNoID0gbmV3IFN1YmplY3Q8QVhQRGVzaWduZXJSZWZyZXNoRXZlbnQ+KCk7XG4gIHB1YmxpYyByZWFkb25seSBvblVwZGF0ZSA9IG5ldyBTdWJqZWN0PEFYUERlc2lnbmVyVXBkYXRlRXZlbnQ+KCk7XG4gIHB1YmxpYyByZWFkb25seSBvbkZvY3VzZWQgPSBuZXcgU3ViamVjdDxBWFBEZXNpZ25lckZvY3VzRXZlbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLmNoYW5uZWxDYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXIoY29tbWFuZDogQVhQRGVzaWduZXJSZWdpc3RlckNvbW1hbmQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogY29tbWFuZC53aWRnZXQgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0KGNvbW1hbmQ6IEFYUERlc2lnbmVyU2VsZWN0Q29tbWFuZCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWROb2RlLnNldChjb21tYW5kLndpZGdldCk7XG4gICAgdGhpcy5vblNlbGVjdGVkLm5leHQoY29tbWFuZCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlKGNvbW1hbmQ6IEFYUERlc2lnbmVyVXBkYXRlQ29tbWFuZCk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGUgPSBjb21tYW5kLndpZGdldCA/PyB0aGlzLnNlbGVjdGVkTm9kZSgpO1xuXG4gICAgaWYgKGNvbW1hbmQubW9kZSA9PSAndXBkYXRlJyAmJiBub2RlKSB7XG4gICAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyLmV4ZWN1dGVDb21tYW5kKG5ldyBVcGRhdGVXaWRnZXRDb21tYW5kKG5vZGUhLCBjb21tYW5kLnZhbHVlcywgbm9kZSEpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZE5vZGUudXBkYXRlKChjKSA9PiBtZXJnZShub2RlLCBjb21tYW5kLnZhbHVlcykpO1xuICAgIHRoaXMub25VcGRhdGUubmV4dCh7IHdpZGdldDogbm9kZSEsIHZhbHVlczogY29tbWFuZC52YWx1ZXMgfSk7XG4gICAgdGhpcy51cGRhdGVQcmV2aWV3KCk7XG4gIH1cblxuICBwdWJsaWMgZm9jdXMoY29tbWFuZDogQVhQRGVzaWduZXJGb2N1c0NvbW1hbmQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZm9jdXNlZE5vZGUgIT0gY29tbWFuZC53aWRnZXQpIHtcbiAgICAgIHRoaXMuX2ZvY3VzZWROb2RlID0gY29tbWFuZC53aWRnZXQ7XG4gICAgICB0aGlzLm9uRm9jdXNlZC5uZXh0KHsgd2lkZ2V0OiB0aGlzLl9mb2N1c2VkTm9kZSB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaChjb21tYW5kOiBBWFBEZXNpZ25lclJlZnJlc2hDb21tYW5kKSB7XG4gICAgdGhpcy5vblJlZnJlc2gubmV4dCh7IHdpZGdldDogY29tbWFuZC53aWRnZXQgfSk7XG4gICAgdGhpcy51cGRhdGVQcmV2aWV3KCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRCcmVhZGNydW1icyhcbiAgICBub2RlOiBBWFBXaWRnZXROb2RlLFxuICAgIHRhcmdldE5vZGU6IEFYUFdpZGdldE5vZGUsXG4gICAgYnJlYWRjcnVtYjogQVhQV2lkZ2V0Tm9kZVtdID0gW11cbiAgKTogQVhQV2lkZ2V0Tm9kZVtdIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBBZGQgdGhlIGN1cnJlbnQgbm9kZSB0byB0aGUgYnJlYWRjcnVtYiBwYXRoXG4gICAgY29uc3QgY3VycmVudEJyZWFkY3J1bWIgPSBbLi4uYnJlYWRjcnVtYiwgbm9kZV07XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBub2RlIGlzIHRoZSB0YXJnZXQgbm9kZVxuICAgIGlmIChub2RlID09PSB0YXJnZXROb2RlKSB7XG4gICAgICByZXR1cm4gY3VycmVudEJyZWFkY3J1bWI7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG5vZGUgaGFzIGNoaWxkcmVuLCByZWN1cnNpdmVseSBzZWFyY2ggdGhlbVxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kQnJlYWRjcnVtYnMoY2hpbGQsIHRhcmdldE5vZGUsIGN1cnJlbnRCcmVhZGNydW1iKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdW5kZWZpbmVkIGlmIG5vIG1hdGNoIGlzIGZvdW5kXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIHNob3dQaWNrZXIoY3VycmVudE5vZGU6IEFYUFdpZGdldE5vZGUpOiBQcm9taXNlPEFYUFdpZGdldE5vZGVbXT4ge1xuICAgIGNvbnN0IGNvbSA9IGF3YWl0IGltcG9ydCgnLi4vY29tcG9uZW50cy93aWRnZXQtcGlja2VyL3dpZGdldC1waWNrZXIuY29tcG9uZW50JykudGhlbihcbiAgICAgIChjKSA9PiBjLkFYUERlc2lnbmVyV2lkZ2V0UGlja2VyQ29tcG9uZW50XG4gICAgKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBvcHVwU2VydmljZS5vcGVuKGNvbSwge1xuICAgICAgdGl0bGU6ICdXaWRnZXQgR2FsbGVyeScsXG4gICAgICBzaXplOiAnbWQnLFxuICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHdpZGdldHM6IHNvcnRCeShcbiAgICAgICAgICB0aGlzLndpZGdldFJlZ2lzdGVyeVNlcnZpY2UuYWxsKCkuZmlsdGVyKChjKSA9PiBjLnZpc2libGUgIT0gZmFsc2UpLFxuICAgICAgICAgIChjKSA9PiBjLnRpdGxlXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IHdpZGdldHM6IEFYUFdpZGdldE5vZGVbXSA9IFtdO1xuICAgIGlmICgocmVzdWx0LmRhdGE/LndpZGdldHMgPz8gW10pLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSByZXN1bHQuZGF0YT8ud2lkZ2V0cyBhcyBBWFBXaWRnZXRDb25maWdbXTtcbiAgICAgIHNlbGVjdGVkLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgd2lkZ2V0cy5wdXNoKHRoaXMuYWRkV2lkZ2V0KGN1cnJlbnROb2RlLCB7IHR5cGU6IGMubmFtZSB9KSEpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB3aWRnZXRzO1xuICB9XG5cbiAgcHVibGljIG5ldygpIHtcbiAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyLmNsZWFyKCk7XG4gICAgdGhpcy5kb2N1bWVudC5zZXQodGhpcy5jcmVhdGVEb2MoKSk7XG4gICAgdGhpcy5jdXJyZW50UGFnZS5zZXQodGhpcy5kb2N1bWVudCgpLmNoaWxkcmVuPy5bMF0hKTtcbiAgICB0aGlzLnJlUmVuZGVyUGFnZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEb2MoKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgY29uc3QgZG9jOiBBWFBXaWRnZXROb2RlID0ge1xuICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cuZG9jdW1lbnQsXG4gICAgICBjaGlsZHJlbjogW3RoaXMuY3JlYXRlUGFnZSgpXSxcbiAgICAgIG5hbWU6ICdkb2N1bWVudCcsXG4gICAgfTtcbiAgICBzZXQoZG9jLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgcmV0dXJuIGRvYztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUGFnZSgpOiBBWFBXaWRnZXROb2RlIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLndpZGdldFJlZ2lzdGVyeVNlcnZpY2UucmVzb2x2ZSgncGFnZS1sYXlvdXQnKTtcblxuICAgIGNvbnN0IHBhZ2U6IEFYUFdpZGdldE5vZGUgPSB7XG4gICAgICB0eXBlOiAncGFnZS1sYXlvdXQnLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgbmFtZTogJ3BhZ2UtbGF5b3V0MScsXG4gICAgfTtcblxuICAgIHNldChwYWdlLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgc2V0KHBhZ2UsICdfX21ldGFfXy5jb25maWcnLCBjb25maWcpO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG5cbiAgcHVibGljIGFkZE5ld1BhZ2UoKSB7XG4gICAgdGhpcy5hZGRXaWRnZXQodGhpcy5kb2N1bWVudCgpLCB0aGlzLmNyZWF0ZVBhZ2UoKSk7XG4gICAgdGhpcy5nb1RvUGFnZSh0aGlzLmN1cnJlbnRQYWdlSW5kZXgoKSArIDEpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVBhZ2UoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmRvY3VtZW50KCkuY2hpbGRyZW4/LltpbmRleF0hO1xuICAgIHRoaXMucmVtb3ZlV2lkZ2V0KHBhZ2UpO1xuICAgIHRoaXMuZ29Ub1BhZ2UoaW5kZXggLSAxKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9uZVBhZ2UoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmRvY3VtZW50KCkuY2hpbGRyZW4/LltpbmRleF0hO1xuICAgIHRoaXMuY2xvbmUocGFnZSk7XG4gICAgdGhpcy5nb1RvUGFnZSgodGhpcy5kb2N1bWVudCgpLmNoaWxkcmVuPy5sZW5ndGggPz8gMSkgLSAxKTtcbiAgfVxuXG4gIHB1YmxpYyBnb1RvUGFnZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZUluZGV4LnNldChpbmRleCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnNldCh0aGlzLmRvY3VtZW50KCkuY2hpbGRyZW4/Llt0aGlzLmN1cnJlbnRQYWdlSW5kZXgoKV0hKTtcbiAgICAgIHRoaXMuc2VsZWN0KHsgd2lkZ2V0OiB0aGlzLmN1cnJlbnRQYWdlKCkgfSk7XG4gICAgICB0aGlzLnVwZGF0ZVByZXZpZXcoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVSZW5kZXJQYWdlKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KHsgLi4udGhpcy5jdXJyZW50UGFnZSgpIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoKHsgd2lkZ2V0OiB0aGlzLmN1cnJlbnRQYWdlKCkgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZmluZFdpZGdldEJ5SWQocm9vdDogQVhQV2lkZ2V0Tm9kZSwgaWQ6IHN0cmluZyk6IEFYUFdpZGdldE5vZGUgfCBudWxsIHtcbiAgICBpZiAoZ2V0KHJvb3QsICdfX21ldGFfXy5pZCcpID09PSBpZCkge1xuICAgICAgcmV0dXJuIHJvb3Q7IC8vIFJldHVybiB0aGUgcm9vdCBpZiBpdCBtYXRjaGVzIHRoZSBJRFxuICAgIH1cbiAgICBpZiAoIXJvb3QuY2hpbGRyZW4pIHJldHVybiBudWxsO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiByb290LmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZFdpZGdldEJ5SWQoY2hpbGQsIGlkKTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICByZXR1cm4gZm91bmQ7IC8vIFJldHVybiB0aGUgZm91bmQgY2hpbGRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDsgLy8gTm9kZSBub3QgZm91bmRcbiAgfVxuXG4gIHByaXZhdGUgZmluZFBhcmVudChpZDogc3RyaW5nLCBwYXJlbnQ6IEFYUFdpZGdldE5vZGUgPSB0aGlzLmN1cnJlbnRQYWdlKCkpOiBBWFBXaWRnZXROb2RlIHwgbnVsbCB7XG4gICAgaWYgKCFwYXJlbnQuY2hpbGRyZW4pIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHBhcmVudC5jaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gZ2V0KGNoaWxkLCAnX19tZXRhX18uaWQnKSA9PT0gaWQpKSB7XG4gICAgICByZXR1cm4gcGFyZW50OyAvLyBSZXR1cm4gdGhpcyBub2RlIGFzIGl0J3MgdGhlIHBhcmVudCBvZiB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBJRFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgcGFyZW50LmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBmb3VuZFBhcmVudCA9IHRoaXMuZmluZFBhcmVudChpZCwgY2hpbGQpO1xuICAgICAgaWYgKGZvdW5kUGFyZW50KSByZXR1cm4gZm91bmRQYXJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7IC8vIE5vIHBhcmVudCBmb3VuZFxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kTmVhcmVzdENvbnRhaW5lcihub2RlOiBBWFBXaWRnZXROb2RlLCBzZWFyY2hVcHdhcmQ6IGJvb2xlYW4gPSB0cnVlKTogQVhQV2lkZ2V0Tm9kZSB8IG51bGwge1xuICAgIGlmIChzZWFyY2hVcHdhcmQpIHtcbiAgICAgIGxldCBjdXJyZW50OiBBWFBXaWRnZXROb2RlIHwgbnVsbCA9IG5vZGU7XG4gICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLndpZGdldFJlZ2lzdGVyeVNlcnZpY2UucmVzb2x2ZShjdXJyZW50LnR5cGUpO1xuICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy50eXBlID09ICdjb250YWluZXInKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IHRoaXMuZmluZFBhcmVudChnZXQoY3VycmVudCwgJ19fbWV0YV9fLmlkJykhKTsgLy8gVXNlIGZpbmRQYXJlbnQgdG8gbmF2aWdhdGUgdXB3YXJkc1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWN1cnNpdmUgc2VhcmNoIHRvIGZpbmQgdGhlIGZpcnN0IGNvbnRhaW5lciBhbW9uZyBjaGlsZHJlblxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy53aWRnZXRSZWdpc3RlcnlTZXJ2aWNlLnJlc29sdmUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcudHlwZSA9PSAnY29udGFpbmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmb3VuZENvbnRhaW5lciA9IHRoaXMuZmluZE5lYXJlc3RDb250YWluZXIoY2hpbGQsIGZhbHNlKTsgLy8gQ29udGludWUgc2VhcmNoaW5nIGRvd253YXJkc1xuICAgICAgICAgIGlmIChmb3VuZENvbnRhaW5lcikgcmV0dXJuIGZvdW5kQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBjb250YWluZXIgZm91bmRcbiAgfVxuXG4gIGFkZFdpZGdldChjdXJyZW50Tm9kZTogQVhQV2lkZ2V0Tm9kZSwgbm9kZTogQVhQV2lkZ2V0Tm9kZSk6IEFYUFdpZGdldE5vZGUge1xuICAgIC8vXG4gICAgY29uc3QgY2xvbmVkID0gY2xvbmVEZWVwKG5vZGUpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMud2lkZ2V0UmVnaXN0ZXJ5U2VydmljZS5yZXNvbHZlKG5vZGUudHlwZSk7XG5cbiAgICAvL1xuICAgIHRoaXMuY29tbWFuZE1hbmFnZXIuZXhlY3V0ZUNvbW1hbmQobmV3IEFkZFdpZGdldENvbW1hbmQoY2xvbmVkLCBjdXJyZW50Tm9kZSwgY3VycmVudE5vZGUpKTtcbiAgICAvL1xuICAgIGNsb25lZC5uYW1lID0gdGhpcy5nZW5lcmF0ZVVuaXF1ZU5hbWUobm9kZS50eXBlKTtcbiAgICBzZXQoY2xvbmVkLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgc2V0KGNsb25lZCwgJ19fbWV0YV9fLmNvbmZpZycsIGNvbmZpZyk7XG4gICAgLy9cbiAgICB0aGlzLnJlUmVuZGVyUGFnZSgpO1xuICAgIC8vXG4gICAgdGhpcy5yZWZyZXNoKHsgd2lkZ2V0OiBjdXJyZW50Tm9kZSB9KTtcbiAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogY2xvbmVkIH0pO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlV2lkZ2V0KG5vZGU6IEFYUFdpZGdldE5vZGUpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBub2RlLnR5cGUgPT09ICdkb2N1bWVudC1sYXlvdXQnIHx8XG4gICAgICAobm9kZS50eXBlID09PSAncGFnZS1sYXlvdXQnICYmICh0aGlzLmRvY3VtZW50KCkuY2hpbGRyZW4/Lmxlbmd0aCA/PyAxKSA9PSAxKVxuICAgICkge1xuICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHJlbW92ZSB0aGUgcGFnZSBub2RlLicpO1xuICAgICAgcmV0dXJuOyAvLyBQcmV2ZW50IHJlbW92aW5nIHRoZSByb290IHBhZ2Ugbm9kZSBvciBkb2N1bWVudFxuICAgIH1cblxuICAgIGNvbnN0IG5vZGVJZFRvUmVtb3ZlID0gZ2V0KG5vZGUsICdfX21ldGFfXy5pZCcpO1xuICAgIGlmICghbm9kZUlkVG9SZW1vdmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgX19tZXRhX18uaWQgdG8gaWRlbnRpZnkgaXQgZm9yIHJlbW92YWwuJyk7XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgcGFyZW50IG9mIHRoZSBub2RlIHRvIHJlbW92ZSBpdFxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudChub2RlSWRUb1JlbW92ZSwgdGhpcy5kb2N1bWVudCgpKTtcbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgbm9kZSBub3QgZm91bmQuIFRoZSBub2RlIG1pZ2h0IGJlIHRoZSByb290IG5vZGUgb3IgZG9lcyBub3QgZXhpc3QuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGVkTm9kZSgpOyAvLyBDYXB0dXJlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSBiZWZvcmUgcmVtb3ZhbFxuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgUmVtb3ZlV2lkZ2V0Q29tbWFuZChub2RlLCBwYXJlbnQsIHByZXZpb3VzU2VsZWN0aW9uISk7XG4gICAgdGhpcy5jb21tYW5kTWFuYWdlci5leGVjdXRlQ29tbWFuZChjb21tYW5kKTtcblxuICAgIHRoaXMucmVmcmVzaCh7IHdpZGdldDogcGFyZW50IH0pOyAvLyBSZWZyZXNoIHRoZSBVSSB0byByZWZsZWN0IGNoYW5nZXNcbiAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogcGFyZW50IH0pOyAvLyBTZWxlY3QgdGhlIHBhcmVudCBub2RlIGFmdGVyIHJlbW92YWxcbiAgfVxuXG4gIG5hdmlnYXRlVG8oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY29tbWFuZE1hbmFnZXIuZ29Ub0NvbW1hbmQoaW5kZXgpO1xuICAgIHRoaXMucmVSZW5kZXJQYWdlKCk7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuY29tbWFuZE1hbmFnZXIuc2VsZWN0ZWROb2RlKCk7XG4gICAgdGhpcy5yZWZyZXNoKHsgd2lkZ2V0OiB0aGlzLmN1cnJlbnRQYWdlKCkgfSk7XG4gICAgdGhpcy5zZWxlY3QoeyB3aWRnZXQ6IGN1cnJlbnRTZWxlY3Rpb24hIH0pO1xuICB9XG5cbiAgcHVibGljIHJlZG8oKSB7XG4gICAgdGhpcy5jb21tYW5kTWFuYWdlci5yZWRvKCk7XG4gICAgdGhpcy5yZVJlbmRlclBhZ2UoKTtcbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy5jb21tYW5kTWFuYWdlci5zZWxlY3RlZE5vZGUoKTtcbiAgICB0aGlzLnJlZnJlc2goeyB3aWRnZXQ6IHRoaXMuY3VycmVudFBhZ2UoKSB9KTtcbiAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogY3VycmVudFNlbGVjdGlvbiEgfSk7XG4gIH1cblxuICBwdWJsaWMgdW5kbygpIHtcbiAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyLnVuZG8oKTtcbiAgICB0aGlzLnJlUmVuZGVyUGFnZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLmNvbW1hbmRNYW5hZ2VyLnNlbGVjdGVkTm9kZSgpO1xuICAgIHRoaXMucmVmcmVzaCh7IHdpZGdldDogdGhpcy5jdXJyZW50UGFnZSgpIH0pO1xuICAgIHRoaXMuc2VsZWN0KHsgd2lkZ2V0OiBjdXJyZW50U2VsZWN0aW9uISB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckhpc3RvcnkoKSB7XG4gICAgdGhpcy5jb21tYW5kTWFuYWdlci5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVNZXRhUHJvcChvYmo6IGFueSk6IGFueSB7XG4gICAgY29uc3Qgbm9kZU5hbWUgPSAnX19tZXRhX18nO1xuICAgIC8vIENoZWNrIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gdGhpcy5yZW1vdmVNZXRhUHJvcChpdGVtKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHtcbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdFxuICAgICAgbGV0IG5ld09iajogYW55ID0ge307XG4gICAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIC8vIE9ubHkgYWRkIHRoZSBrZXkgaWYgaXQncyBub3QgdGhlIG5vZGVOYW1lIHdlIHdhbnQgdG8gcmVtb3ZlXG4gICAgICAgIGlmIChrZXkgIT09IG5vZGVOYW1lKSB7XG4gICAgICAgICAgbmV3T2JqW2tleV0gPSB0aGlzLnJlbW92ZU1ldGFQcm9wKG9ialtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld09iajtcbiAgICB9XG4gICAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3Qgb3IgYXJyYXksIHJldHVybiBpdCBhcyBpc1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZE1ldGFUb05vZGVzKFxuICAgIG5vZGU6IEFYUFdpZGdldE5vZGUsXG4gICAgcHJvY2Vzc2VkTm9kZXM6IHsgY291bnQ6IG51bWJlciB9LFxuICAgIHByb2dyZXNzQ2FsbGJhY2s6IChwcm9jZXNzZWQ6IG51bWJlcikgPT4gdm9pZFxuICApOiBQcm9taXNlPEFYUFdpZGdldE5vZGU+IHtcbiAgICAvLyBBcHBseSB5b3VyIG1ldGEgbG9naWMgaGVyZVxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMud2lkZ2V0UmVnaXN0ZXJ5U2VydmljZS5yZXNvbHZlKG5vZGUudHlwZSk7XG4gICAgLy9cbiAgICBzZXQobm9kZSwgJ19fbWV0YV9fLmlkJywgdGhpcy5nZW5lcmF0ZVVuaXF1ZUlkKCkpO1xuICAgIHNldChub2RlLCAnX19tZXRhX18uY29uZmlnJywgY29uZmlnKTtcbiAgICAvL1xuICAgIC8vIEluY3JlbWVudCB0aGUgcHJvY2Vzc2VkIG5vZGUgY291bnQgYW5kIHVwZGF0ZSB0aGUgcHJvZ3Jlc3MgZGlhbG9nXG4gICAgcHJvY2Vzc2VkTm9kZXMuY291bnQrKztcbiAgICBwcm9ncmVzc0NhbGxiYWNrKHByb2Nlc3NlZE5vZGVzLmNvdW50KTtcbiAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGNoaWxkIG5vZGVzIHVzaW5nIFByb21pc2UuYWxsXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG5vZGUuY2hpbGRyZW4ubWFwKGFzeW5jIChjaGlsZCkgPT4gYXdhaXQgdGhpcy5hZGRNZXRhVG9Ob2RlcyhjaGlsZCwgcHJvY2Vzc2VkTm9kZXMsIHByb2dyZXNzQ2FsbGJhY2spKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBwdWJsaWMgY29weSh3aWRnZXQ6IEFYUFdpZGdldE5vZGUgfCBudWxsID0gdGhpcy5zZWxlY3RlZE5vZGUoKSk6IHZvaWQge1xuICAgIGlmICghd2lkZ2V0KSByZXR1cm47XG4gICAgdGhpcy5jbGlwYm9hcmQuc2V0KGNsb25lRGVlcCh3aWRnZXQpKTsgLy8gVXNlIGxvZGFzaCdzIGNsb25lRGVlcCB0byBlbnN1cmUgYSBkZWVwIGNvcHlcbiAgfVxuXG4gIHB1YmxpYyBjdXQod2lkZ2V0OiBBWFBXaWRnZXROb2RlIHwgbnVsbCA9IHRoaXMuc2VsZWN0ZWROb2RlKCkpOiB2b2lkIHtcbiAgICBpZiAoIXdpZGdldCkgcmV0dXJuO1xuICAgIHRoaXMuY29weSh3aWRnZXQpOyAvLyBDb3B5IHRoZSB3aWRnZXQgdG8gdGhlIGNsaXBib2FyZFxuICAgIHRoaXMucmVtb3ZlV2lkZ2V0KHdpZGdldCk7IC8vIFJldXNlIHRoZSByZW1vdmVXaWRnZXQgbWV0aG9kIHdoaWNoIHNob3VsZCBoYW5kbGUgdW5kbyBpbnRlcm5hbGx5XG4gIH1cblxuICBwdWJsaWMgY2xvbmUod2lkZ2V0OiBBWFBXaWRnZXROb2RlIHwgbnVsbCA9IHRoaXMuc2VsZWN0ZWROb2RlKCkpOiB2b2lkIHtcbiAgICBpZiAoIXdpZGdldCkgcmV0dXJuO1xuICAgIHRoaXMuY29weSh3aWRnZXQpOyAvLyBDb3B5IHRoZSB3aWRnZXQgdG8gdGhlIGNsaXBib2FyZFxuICAgIGlmICh3aWRnZXQudHlwZSA9PSAncGFnZS1sYXlvdXQnKSB7XG4gICAgICB0aGlzLnBhc3RlKHRoaXMuZG9jdW1lbnQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFzdGUod2lkZ2V0ISk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHBhc3RlKHBhcmVudE5vZGU6IEFYUFdpZGdldE5vZGUgPSB0aGlzLnNlbGVjdGVkTm9kZSgpID8/IHRoaXMuY3VycmVudFBhZ2UoKSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jbGlwYm9hcmQoKSB8fCAhdGhpcy5zZWxlY3RlZE5vZGUoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignQ2xpcGJvYXJkIGlzIGVtcHR5IG9yIG5vIG5vZGUgaXMgc2VsZWN0ZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld05vZGUgPSBjbG9uZURlZXAodGhpcy5jbGlwYm9hcmQoKSkhO1xuICAgIGNvbnN0IG5lYXJlc3RDb250YWluZXIgPSB0aGlzLmZpbmROZWFyZXN0Q29udGFpbmVyKHBhcmVudE5vZGUsIHRydWUpO1xuICAgIGlmICghbmVhcmVzdENvbnRhaW5lcikge1xuICAgICAgY29uc29sZS5lcnJvcignTm8gc3VpdGFibGUgY29udGFpbmVyIGZvdW5kLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvL1xuICAgIGlmICghbmVhcmVzdENvbnRhaW5lci5jaGlsZHJlbikge1xuICAgICAgbmVhcmVzdENvbnRhaW5lci5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbiAgICAvL1xuICAgIGNvbnN0IHNldE5hbWVJZCA9IChub2RlOiBBWFBXaWRnZXROb2RlKSA9PiB7XG4gICAgICBzZXQobm9kZSwgJ25hbWUnLCB0aGlzLmdlbmVyYXRlVW5pcXVlTmFtZShub2RlLnR5cGUpKTtcbiAgICAgIHNldChub2RlLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgICBub2RlLmNoaWxkcmVuPy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIHNldE5hbWVJZChuKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgc2V0TmFtZUlkKG5ld05vZGUpO1xuICAgIC8vXG4gICAgdGhpcy5jb21tYW5kTWFuYWdlci5leGVjdXRlQ29tbWFuZChuZXcgQWRkV2lkZ2V0Q29tbWFuZChuZXdOb2RlLCBuZWFyZXN0Q29udGFpbmVyLCBuZWFyZXN0Q29udGFpbmVyKSk7XG4gICAgLy9cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVmcmVzaCh7IHdpZGdldDogbmVhcmVzdENvbnRhaW5lciB9KTsgLy8gUmVmcmVzaCB0aGUgVUlcbiAgICAgIHRoaXMuc2VsZWN0KHsgd2lkZ2V0OiBuZXdOb2RlIH0pOyAvLyBTZWxlY3QgdGhlIG5ld2x5IHBhc3RlZCBub2RlXG4gICAgfSk7XG4gIH1cblxuICBleHBvcnQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBqc29uID0gdGhpcy5yZW1vdmVNZXRhUHJvcCh0aGlzLmRvY3VtZW50KCkpO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uKTtcbiAgfVxuXG4gIGRvd25sb2FkSnNvbigpIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBvYmplY3QgdG8gYSBKU09OIHN0cmluZ1xuICAgIGNvbnN0IGpzb25TdHIgPSB0aGlzLmV4cG9ydCgpO1xuXG4gICAgLy8gQ3JlYXRlIGEgYmxvYiBvYmplY3QgZnJvbSB0aGUgSlNPTiBzdHJpbmdcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2pzb25TdHJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcblxuICAgIC8vIENyZWF0ZSBhIFVSTCBmb3IgdGhlIGJsb2Igb2JqZWN0XG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSA8YT4gZWxlbWVudCB0byB0cmlnZ2VyIHRoZSBkb3dubG9hZFxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYS5ocmVmID0gdXJsO1xuICAgIGEuZG93bmxvYWQgPSAnZXhwb3J0Lmpzb24nO1xuXG4gICAgLy8gQXBwZW5kIHRoZSA8YT4gZWxlbWVudCB0byB0aGUgZG9jdW1lbnQgYm9keSAobmVjZXNzYXJ5IGZvciBzb21lIGJyb3dzZXJzKVxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG5cbiAgICAvLyBUcmlnZ2VyIHRoZSBkb3dubG9hZCBieSBjbGlja2luZyB0aGUgPGE+IGVsZW1lbnRcbiAgICBhLmNsaWNrKCk7XG4gICAgLy8gQ2xlYW4gdXAgYnkgcmV2b2tpbmcgdGhlIG9iamVjdCBVUkwgYW5kIHJlbW92aW5nIHRoZSA8YT4gZWxlbWVudFxuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0SlNvbigpIHtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMuZmlsZVNlcnZpY2UuY2hvb3NlKHsgbXVsdGlwbGU6IGZhbHNlLCBhY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbMF07XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZmlsZS50ZXh0KCk7XG4gICAgICBjb25zdCByb290Tm9kZSA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgQVhQV2lkZ2V0Tm9kZTtcbiAgICAgIGNvbnN0IHRvdGFsTm9kZSA9IHRoaXMuY291bnRUb3RhbE5vZGVzKHJvb3ROb2RlKTtcbiAgICAgIGNvbnN0IHByb2Nlc3NlZE5vZGVzID0geyBjb3VudDogMCB9O1xuXG4gICAgICBjb25zdCBidXR0b246IEFYTG9hZGluZ0RpYWxvZ0J1dHRvbkl0ZW0gPSB7XG4gICAgICAgIHRleHQ6ICdDYW5jZWwnLFxuICAgICAgICBhdXRvZm9jdXM6IHRydWUsXG4gICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgIG9uQ2xpY2s6IChlKSA9PiB7XG4gICAgICAgICAgZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5sb2FkaW5nU2VydmljZS5zaG93KHtcbiAgICAgICAgbW9kZTogJ2RldGVybWluYXRlJyxcbiAgICAgICAgdGl0bGU6ICdJbXBvcnQgSnNvbiBGaWxlJyxcbiAgICAgICAgcHJvZ3Jlc3NDb2xvcjogJ3ByaW1hcnknLFxuICAgICAgICB0ZXh0OiAnUHJvY2Vzc2luZyBqc29uIGZpbGUnLFxuICAgICAgICBzdGF0dXM6IGAwIG9mICR7dG90YWxOb2RlfWAsXG4gICAgICAgIGJ1dHRvbnM6IFtidXR0b25dLFxuICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBhd2FpdCB0aGlzLmFkZE1ldGFUb05vZGVzKHJvb3ROb2RlLCBwcm9jZXNzZWROb2RlcywgKGNvdW50KSA9PiB7XG4gICAgICAgICAgZGlhbG9nLnNldFByb2dyZXNzVmFsdWUoTWF0aC5jZWlsKChjb3VudCAvIHRvdGFsTm9kZSkgKiAxMDApKTtcbiAgICAgICAgICBkaWFsb2cuc2V0UHJvZ3Jlc3NTdGF0dXMoYCR7Y291bnR9IG9mICR7dG90YWxOb2RlfWApO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFnZSA9IHJvb3QuY2hpbGRyZW4/LlswXSE7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQuc2V0KHJvb3QpO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLnNldChwYWdlKTtcbiAgICAgICAgZGlhbG9nLnNldFByb2dyZXNzQ29sb3IoJ3N1Y2Nlc3MnKTtcbiAgICAgICAgZGlhbG9nLnNldFByb2dyZXNzVGV4dCgnSnNvbiBmaWxlIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgYnV0dG9uLnRleHQgPSAnT2theSc7XG4gICAgICAgIGJ1dHRvbi5jb2xvciA9ICdzdWNjZXNzJztcbiAgICAgICAgZGlhbG9nLnNldFByb2dyZXNzVmFsdWUoMTAwKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZVJlbmRlclBhZ2UoKTtcbiAgICAgICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc0NvbG9yKCdkYW5nZXInKTtcbiAgICAgICAgZGlhbG9nLnNldFByb2dyZXNzVGV4dChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdDYW5ub3QgcHJvY2VzcyBqc29uIGZpbGUnKTtcbiAgICAgICAgYnV0dG9uLnRleHQgPSAnQ2xvc2UnO1xuICAgICAgICBidXR0b24uY29sb3IgPSAnZGFuZ2VyJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvdW50VG90YWxOb2Rlcyhub2RlOiBBWFBXaWRnZXROb2RlKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAxOyAvLyBDb3VudCB0aGUgY3VycmVudCBub2RlXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBjb3VudCArPSBub2RlLmNoaWxkcmVuLnJlZHVjZSgoc3VtLCBjaGlsZCkgPT4gc3VtICsgdGhpcy5jb3VudFRvdGFsTm9kZXMoY2hpbGQpLCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVVuaXF1ZU5hbWUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gZm9sbG93IGNhbWVsQ2FzZSBjb252ZW50aW9uXG4gICAgY29uc3QgYmFzZU5hbWUgPSB0eXBlLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgdHlwZS5zbGljZSgxKTtcbiAgICBsZXQgaW5kZXggPSAxO1xuICAgIGxldCB1bmlxdWVOYW1lID0gYCR7YmFzZU5hbWV9JHtpbmRleH1gO1xuXG4gICAgLy8gR2F0aGVyIGFsbCBleGlzdGluZyBuYW1lcyB0byBjaGVjayBhZ2FpbnN0XG4gICAgY29uc3QgZXhpc3RpbmdOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHRoaXMuY29sbGVjdEFsbE5hbWVzKHRoaXMuZG9jdW1lbnQoKSwgZXhpc3RpbmdOYW1lcyk7XG5cbiAgICAvLyBJbmNyZW1lbnQgdGhlIGluZGV4IHVudGlsIGEgdW5pcXVlIG5hbWUgaXMgZm91bmRcbiAgICB3aGlsZSAoZXhpc3RpbmdOYW1lcy5oYXModW5pcXVlTmFtZSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgICB1bmlxdWVOYW1lID0gYCR7YmFzZU5hbWV9JHtpbmRleH1gO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlxdWVOYW1lO1xuICB9XG5cbiAgZ2VuZXJhdGVVbmlxdWVJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMTAsIDE4KTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdEFsbE5hbWVzKG5vZGU6IEFYUFdpZGdldE5vZGUsIG5hbWVzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xuICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgIG5hbWVzLmFkZChub2RlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuY29sbGVjdEFsbE5hbWVzKGNoaWxkLCBuYW1lcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZVByZXZpZXcoKSB7XG4gICAgdGhpcy5jaGFubmVsLnBvc3RNZXNzYWdlKHtcbiAgICAgIGFjdGlvbjogJ2Rlc2lnbmVyLXByZXZpZXcnLFxuICAgICAgZG9jdW1lbnQ6IHRoaXMucmVtb3ZlTWV0YVByb3AodGhpcy5kb2N1bWVudCgpKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvcGVuUHJldmlld0RpYWxvZygpIHtcbiAgICBjb25zdCBjb20gPSBhd2FpdCBpbXBvcnQoJy4uLy4uL3ByZXZpZXcvcHJldmlldy5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLkFYUExheW91dERlc2lnbmVyUHJldmlld0NvbXBvbmVudCk7XG4gICAgYXdhaXQgdGhpcy5wb3B1cFNlcnZpY2Uub3Blbihjb20sIHtcbiAgICAgIGhlYWRlcjogZmFsc2UsXG4gICAgICBzaXplOiAnZnVsbCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGluaXRpYWxTaXplOiB0aGlzLnNpemUoKSxcbiAgICAgICAgaXNEaWFsb2dXaW5kb3c6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9wZW5QcmV2aWV3V2luZG93KCkge1xuICAgIHdpbmRvdy5vcGVuKCcvZm9ybXMvcHJldmlldycsICdfYmxhbmsnKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbm5lbENhbGxiYWNrID0gKG1lc3NhZ2U6IE1lc3NhZ2VFdmVudDxhbnk+KSA9PiB7XG4gICAgaWYgKG1lc3NhZ2UuZGF0YS5hY3Rpb24gPT0gJ2Rlc2lnbmVyLXByZXZpZXctbG9hZGVkJykge1xuICAgICAgdGhpcy51cGRhdGVQcmV2aWV3KCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRhdGEuYWN0aW9uID09ICdvcGVuLXByZXZpZXctd2luZG93Jykge1xuICAgICAgdGhpcy5vcGVuUHJldmlld1dpbmRvdygpO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
603
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2Rlc2lnbmVyL3NyYy9saWIvZGVzaWduZXIvc2hhcmVkL2Rlc2lnbmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE2QixzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFJTCx3QkFBd0IsRUFDeEIsaUJBQWlCLEdBQ2xCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsK0JBQStCLElBQUksK0JBQStCLEVBQ2xFLHVCQUF1QixFQUN2QixnQ0FBZ0MsRUFDaEMsZUFBZSxHQUNoQixNQUFNLDBCQUEwQixDQUFD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Q0FBQztZQUNELEtBQUssdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNiLE1BQUs7WUFDUCxDQUFDO1lBQ0QsRUFBRTtRQUNKLENBQUM7SUFDSCxDQUFDOzhHQTNxQlUsa0JBQWtCO2tIQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWExvYWRpbmdEaWFsb2dCdXR0b25JdGVtLCBBWExvYWRpbmdEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xvYWRpbmctZGlhbG9nJztcbmltcG9ydCB7IEFYTWVudUl0ZW0gfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbWVudSc7XG5pbXBvcnQgeyBBWFBvcHVwU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3B1cCc7XG5pbXBvcnQgeyBBWFRvYXN0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b2FzdCc7XG5pbXBvcnQgeyBBWEZpbGVTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2ZpbGUnO1xuaW1wb3J0IHtcbiAgQVhQV2lkZ2V0Q29tcG9uZW50LFxuICBBWFBXaWRnZXRDb25maWcsXG4gIEFYUFdpZGdldE5vZGUsXG4gIEFYUFdpZGdldFJlZ2lzdHJ5U2VydmljZSxcbiAgQVhQV2lkZ2V0c0NhdGFsb2csXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0LCBtZXJnZSwgc2V0LCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWRkV2lkZ2V0Q29tbWFuZCwgQ29tbWFuZE1hbmFnZXIsIFJlbW92ZVdpZGdldENvbW1hbmQsIFVwZGF0ZVdpZGdldENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmQnO1xuaW1wb3J0IHsgQVhQRGVzaWduZXJDb25uZWN0b3IgfSBmcm9tICcuL2Rlc2lnbmVyLWNvbm5lY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFYUF9ERVNJR05FUl9BRERfV0lER0VUX01FTlUsXG4gIEFYUF9ERVNJR05FUl9DTE9ORV9NRU5VLFxuICBBWFBfREVTSUdORVJfQ09QWV9NRU5VLFxuICBBWFBfREVTSUdORVJfQ1VUX01FTlUsXG4gIEFYUF9ERVNJR05FUl9ERUxFVEVfV0lER0VUX01FTlUgYXMgQVhQX0RFU0lHTkVSX0RFTEVURV9XSURHRVRfTUVOVSxcbiAgQVhQX0RFU0lHTkVSX1BBU1RFX01FTlUsXG4gIEFYUF9ERVNJR05FUl9TQVZFX0FTX1dJREdFVF9NRU5VLFxuICBjbG9uZVdpZGdldE1lbnUsXG59IGZyb20gJy4vZ2VuZXJpYy1jb21tYW5kcy50eXBlcyc7XG5cbmV4cG9ydCB0eXBlIEFYUERlc2lnbmVyUHJldmlld1NpemUgPSAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgJ3h4bCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRGVzaWduZXJGb2N1c0NvbW1hbmQge1xuICB3aWRnZXQ6IEFYUFdpZGdldE5vZGUgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyVXBkYXRlQ29tbWFuZCB7XG4gIHZhbHVlczogYW55O1xuICB3aWRnZXQ/OiBBWFBXaWRnZXROb2RlIHwgbnVsbDtcbiAgbW9kZTogJ2luaXQnIHwgJ3VwZGF0ZSc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyVXBkYXRlRXZlbnQge1xuICB2YWx1ZXM6IGFueTtcbiAgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUERlc2lnbmVyU2VsZWN0Q29tbWFuZCB7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lclJlZ2lzdGVyQ29tbWFuZCB7XG4gIGlkOiBudW1iZXI7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbiAgY29uZmlnOiBBWFBXaWRnZXRDb25maWc7XG4gIGluc3RhbmNlOiBBWFBXaWRnZXRDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRGVzaWduZXJTZWxlY3RFdmVudCB7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lclJlZnJlc2hDb21tYW5kIHtcbiAgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lclJlZnJlc2hFdmVudCB7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lckFkZE5vZGVDb21tYW5kIHtcbiAgd2lkZ2V0OiBBWFBXaWRnZXROb2RlO1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lckFkZE5vZGVFdmVudCB7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEZXNpZ25lckZvY3VzRXZlbnQge1xuICB3aWRnZXQ6IEFYUFdpZGdldE5vZGUgfCBudWxsO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhQRGVzaWduZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwb3B1cFNlcnZpY2UgPSBpbmplY3QoQVhQb3B1cFNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0U2VydmljZSA9IGluamVjdChBWFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZmlsZVNlcnZpY2UgPSBpbmplY3QoQVhGaWxlU2VydmljZSk7XG4gIHByaXZhdGUgbG9hZGluZ1NlcnZpY2UgPSBpbmplY3QoQVhMb2FkaW5nRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgd2lkZ2V0UmVnaXN0ZXJ5U2VydmljZSA9IGluamVjdChBWFBXaWRnZXRSZWdpc3RyeVNlcnZpY2UpO1xuICBwcml2YXRlIGNvbm5lY3RvciA9IGluamVjdChBWFBEZXNpZ25lckNvbm5lY3Rvcik7XG5cbiAgcHJpdmF0ZSBjaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ2xpdmVQcmV2aWV3Q2hhbm5lbCcpO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudCA9IHNpZ25hbCh0aGlzLmNyZWF0ZURvYygpKTtcbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRQYWdlSW5kZXggPSBzaWduYWwoMCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRQYWdlID0gc2lnbmFsKHRoaXMuZG9jdW1lbnQoKS5jaGlsZHJlbj8uWzBdISk7XG5cbiAgcHJpdmF0ZSBjb21tYW5kTWFuYWdlciA9IGluamVjdChDb21tYW5kTWFuYWdlcik7XG5cbiAgcHJpdmF0ZSBjbGlwYm9hcmQgPSBzaWduYWw8QVhQV2lkZ2V0Tm9kZSB8IG51bGw+KG51bGwpO1xuXG4gIC8vXG4gIHB1YmxpYyBjYW5DdXRDb3B5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZE5vZGUoKSAhPSBudWxsICYmIHRoaXMuc2VsZWN0ZWROb2RlKCk/LnR5cGUgIT0gJ3BhZ2UtbGF5b3V0Jyk7XG4gIHB1YmxpYyBjYW5EZWxldGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkTm9kZSgpICE9IG51bGwgJiYgdGhpcy5zZWxlY3RlZE5vZGUoKT8udHlwZSAhPSAncGFnZS1sYXlvdXQnKTtcbiAgcHVibGljIGNhbkluc2VydCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWROb2RlKCkgIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkTm9kZUNvbmZpZygpLnR5cGUgPT0gJ2NvbnRhaW5lcicpO1xuICBwdWJsaWMgY2FuUGFzdGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNsaXBib2FyZCgpICE9IG51bGwpO1xuICAvL1xuICBwdWJsaWMgcmVhZG9ubHkgaGlzdG9yeSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tbWFuZE1hbmFnZXIuaGlzdG9yeSgpKTtcbiAgcHVibGljIHJlYWRvbmx5IGNhblVuZG8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbW1hbmRNYW5hZ2VyLmNhblVuZG8oKSk7XG4gIHB1YmxpYyByZWFkb25seSBjYW5SZWRvID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21tYW5kTWFuYWdlci5jYW5SZWRvKCkpO1xuICAvL1xuICBwdWJsaWMgcmVhZG9ubHkgY2FuU2F2ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudGVtcGxhdGVJZCgpICE9IG51bGwpO1xuXG4gIHB1YmxpYyBicmVhZGNydW1icyA9IGNvbXB1dGVkPEFYUFdpZGdldE5vZGVbXT4oKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTm9kZSgpID8gdGhpcy5maW5kQnJlYWRjcnVtYnModGhpcy5jdXJyZW50UGFnZSgpLCB0aGlzLnNlbGVjdGVkTm9kZSgpISkgPz8gW10gOiBbXTtcbiAgfSk7XG5cbiAgcHVibGljIHNlbGVjdGVkTm9kZSA9IHNpZ25hbDxBWFBXaWRnZXROb2RlIHwgbnVsbD4obnVsbCk7XG5cbiAgcHVibGljIHNlbGVjdGVkTm9kZUNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IGdldCh0aGlzLnNlbGVjdGVkTm9kZSgpLCAnX19tZXRhX18uY29uZmlnJykgYXMgYW55IGFzIEFYUFdpZGdldENvbmZpZyk7XG5cbiAgcHJpdmF0ZSBfZm9jdXNlZE5vZGU6IEFYUFdpZGdldE5vZGUgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGZvY3VzZWROb2RlID0gKCkgPT4gdGhpcy5fZm9jdXNlZE5vZGU7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNpemUgPSBzaWduYWw8QVhQRGVzaWduZXJQcmV2aWV3U2l6ZT4oJ3hsJyk7XG5cbiAgcHVibGljIHJlYWRvbmx5IG9uU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxBWFBEZXNpZ25lclNlbGVjdEV2ZW50PigpO1xuICBwdWJsaWMgcmVhZG9ubHkgb25SZWZyZXNoID0gbmV3IFN1YmplY3Q8QVhQRGVzaWduZXJSZWZyZXNoRXZlbnQ+KCk7XG4gIHB1YmxpYyByZWFkb25seSBvblVwZGF0ZSA9IG5ldyBTdWJqZWN0PEFYUERlc2lnbmVyVXBkYXRlRXZlbnQ+KCk7XG4gIHB1YmxpYyByZWFkb25seSBvbkZvY3VzZWQgPSBuZXcgU3ViamVjdDxBWFBEZXNpZ25lckZvY3VzRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gICNlZiA9IGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2goeyB3aWRnZXQ6IHRoaXMuY3VycmVudFBhZ2UoKSB9KTtcbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5jaGFubmVsQ2FsbGJhY2spO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyKGNvbW1hbmQ6IEFYUERlc2lnbmVyUmVnaXN0ZXJDb21tYW5kKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3QoeyB3aWRnZXQ6IGNvbW1hbmQud2lkZ2V0IH0pO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdChjb21tYW5kOiBBWFBEZXNpZ25lclNlbGVjdENvbW1hbmQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTm9kZS5zZXQoY29tbWFuZC53aWRnZXQpO1xuICAgIHRoaXMub25TZWxlY3RlZC5uZXh0KGNvbW1hbmQpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZShjb21tYW5kOiBBWFBEZXNpZ25lclVwZGF0ZUNvbW1hbmQpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlID0gY29tbWFuZC53aWRnZXQgPz8gdGhpcy5zZWxlY3RlZE5vZGUoKTtcblxuICAgIGlmIChjb21tYW5kLm1vZGUgPT0gJ3VwZGF0ZScgJiYgbm9kZSkge1xuICAgICAgdGhpcy5jb21tYW5kTWFuYWdlci5leGVjdXRlQ29tbWFuZChuZXcgVXBkYXRlV2lkZ2V0Q29tbWFuZChub2RlISwgY29tbWFuZC52YWx1ZXMsIG5vZGUhKSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWROb2RlLnVwZGF0ZSgoYykgPT4gbWVyZ2Uobm9kZSwgY29tbWFuZC52YWx1ZXMpKTtcbiAgICB0aGlzLm9uVXBkYXRlLm5leHQoeyB3aWRnZXQ6IG5vZGUhLCB2YWx1ZXM6IGNvbW1hbmQudmFsdWVzIH0pO1xuICAgIHRoaXMudXBkYXRlUHJldmlldygpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKGNvbW1hbmQ6IEFYUERlc2lnbmVyRm9jdXNDb21tYW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2ZvY3VzZWROb2RlICE9IGNvbW1hbmQud2lkZ2V0KSB7XG4gICAgICB0aGlzLl9mb2N1c2VkTm9kZSA9IGNvbW1hbmQud2lkZ2V0O1xuICAgICAgdGhpcy5vbkZvY3VzZWQubmV4dCh7IHdpZGdldDogdGhpcy5fZm9jdXNlZE5vZGUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZnJlc2goY29tbWFuZDogQVhQRGVzaWduZXJSZWZyZXNoQ29tbWFuZCkge1xuICAgIHRoaXMub25SZWZyZXNoLm5leHQoeyB3aWRnZXQ6IGNvbW1hbmQud2lkZ2V0IH0pO1xuICAgIHRoaXMudXBkYXRlUHJldmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQnJlYWRjcnVtYnMoXG4gICAgbm9kZTogQVhQV2lkZ2V0Tm9kZSxcbiAgICB0YXJnZXROb2RlOiBBWFBXaWRnZXROb2RlLFxuICAgIGJyZWFkY3J1bWI6IEFYUFdpZGdldE5vZGVbXSA9IFtdXG4gICk6IEFYUFdpZGdldE5vZGVbXSB8IHVuZGVmaW5lZCB7XG4gICAgLy8gQWRkIHRoZSBjdXJyZW50IG5vZGUgdG8gdGhlIGJyZWFkY3J1bWIgcGF0aFxuICAgIGNvbnN0IGN1cnJlbnRCcmVhZGNydW1iID0gWy4uLmJyZWFkY3J1bWIsIG5vZGVdO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgbm9kZSBpcyB0aGUgdGFyZ2V0IG5vZGVcbiAgICBpZiAobm9kZSA9PT0gdGFyZ2V0Tm9kZSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRCcmVhZGNydW1iO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBub2RlIGhhcyBjaGlsZHJlbiwgcmVjdXJzaXZlbHkgc2VhcmNoIHRoZW1cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZEJyZWFkY3J1bWJzKGNoaWxkLCB0YXJnZXROb2RlLCBjdXJyZW50QnJlYWRjcnVtYik7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHVuZGVmaW5lZCBpZiBubyBtYXRjaCBpcyBmb3VuZFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBhc3luYyBzaG93UGlja2VyKGN1cnJlbnROb2RlOiBBWFBXaWRnZXROb2RlID0gdGhpcy5zZWxlY3RlZE5vZGUoKSEpOiBQcm9taXNlPEFYUFdpZGdldE5vZGVbXT4ge1xuICAgIGNvbnN0IGNvbSA9IGF3YWl0IGltcG9ydCgnLi4vY29tcG9uZW50cy93aWRnZXQtcGlja2VyL3dpZGdldC1waWNrZXIuY29tcG9uZW50JykudGhlbihcbiAgICAgIChjKSA9PiBjLkFYUERlc2lnbmVyV2lkZ2V0UGlja2VyQ29tcG9uZW50XG4gICAgKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBvcHVwU2VydmljZS5vcGVuKGNvbSwge1xuICAgICAgdGl0bGU6ICdXaWRnZXQgR2FsbGVyeScsXG4gICAgICBzaXplOiAnbWQnLFxuICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHdpZGdldHM6IHNvcnRCeShcbiAgICAgICAgICB0aGlzLndpZGdldFJlZ2lzdGVyeVNlcnZpY2UuYWxsKCkuZmlsdGVyKChjKSA9PiBjLnZpc2libGUgIT0gZmFsc2UpLFxuICAgICAgICAgIChjKSA9PiBjLnRpdGxlXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IHdpZGdldHM6IEFYUFdpZGdldE5vZGVbXSA9IFtdO1xuICAgIGlmICgocmVzdWx0LmRhdGE/LndpZGdldHMgPz8gW10pLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSByZXN1bHQuZGF0YT8ud2lkZ2V0cyBhcyBBWFBXaWRnZXRDb25maWdbXTtcbiAgICAgIHNlbGVjdGVkLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgd2lkZ2V0cy5wdXNoKHRoaXMuYWRkV2lkZ2V0KGN1cnJlbnROb2RlLCB7IHR5cGU6IGMubmFtZSB9KSEpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB3aWRnZXRzO1xuICB9XG5cbiAgcHVibGljIG5ldygpIHtcbiAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyLmNsZWFyKCk7XG4gICAgdGhpcy5kb2N1bWVudC5zZXQodGhpcy5jcmVhdGVEb2MoKSk7XG4gICAgdGhpcy5jdXJyZW50UGFnZS5zZXQodGhpcy5kb2N1bWVudCgpLmNoaWxkcmVuPy5bMF0hKTtcbiAgICB0aGlzLnJlUmVuZGVyUGFnZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEb2MoKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgY29uc3QgZG9jOiBBWFBXaWRnZXROb2RlID0ge1xuICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cuZG9jdW1lbnQsXG4gICAgICBjaGlsZHJlbjogW3RoaXMuY3JlYXRlUGFnZSgpXSxcbiAgICAgIG5hbWU6ICdkb2N1bWVudCcsXG4gICAgfTtcbiAgICBzZXQoZG9jLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgcmV0dXJuIGRvYztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUGFnZSgpOiBBWFBXaWRnZXROb2RlIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLndpZGdldFJlZ2lzdGVyeVNlcnZpY2UucmVzb2x2ZSgncGFnZS1sYXlvdXQnKTtcblxuICAgIGNvbnN0IHBhZ2U6IEFYUFdpZGdldE5vZGUgPSB7XG4gICAgICB0eXBlOiAncGFnZS1sYXlvdXQnLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgbmFtZTogJ3BhZ2UtbGF5b3V0MScsXG4gICAgfTtcblxuICAgIHNldChwYWdlLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgc2V0KHBhZ2UsICdfX21ldGFfXy5jb25maWcnLCBjb25maWcpO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG5cbiAgcHVibGljIGFkZE5ld1BhZ2UoKSB7XG4gICAgdGhpcy5hZGRXaWRnZXQodGhpcy5kb2N1bWVudCgpLCB0aGlzLmNyZWF0ZVBhZ2UoKSk7XG4gICAgdGhpcy5nb1RvUGFnZSh0aGlzLmN1cnJlbnRQYWdlSW5kZXgoKSArIDEpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVBhZ2UoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmRvY3VtZW50KCkuY2hpbGRyZW4/LltpbmRleF0hO1xuICAgIHRoaXMucmVtb3ZlV2lkZ2V0KHBhZ2UpO1xuICAgIHRoaXMuZ29Ub1BhZ2UoaW5kZXggLSAxKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9uZVBhZ2UoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmRvY3VtZW50KCkuY2hpbGRyZW4/LltpbmRleF0hO1xuICAgIHRoaXMuY2xvbmUocGFnZSk7XG4gICAgdGhpcy5nb1RvUGFnZSgodGhpcy5kb2N1bWVudCgpLmNoaWxkcmVuPy5sZW5ndGggPz8gMSkgLSAxKTtcbiAgfVxuXG4gIHB1YmxpYyBnb1RvUGFnZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZUluZGV4LnNldChpbmRleCk7XG4gICAgLy9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlLnNldCh0aGlzLmRvY3VtZW50KCkuY2hpbGRyZW4/Llt0aGlzLmN1cnJlbnRQYWdlSW5kZXgoKV0hKTtcbiAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogdGhpcy5jdXJyZW50UGFnZSgpIH0pO1xuICAgIC8vdGhpcy51cGRhdGVQcmV2aWV3KCk7XG4gICAgLy99KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVSZW5kZXJQYWdlKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KHsgLi4udGhpcy5jdXJyZW50UGFnZSgpIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoKHsgd2lkZ2V0OiB0aGlzLmN1cnJlbnRQYWdlKCkgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZmluZFdpZGdldEJ5SWQocm9vdDogQVhQV2lkZ2V0Tm9kZSwgaWQ6IHN0cmluZyk6IEFYUFdpZGdldE5vZGUgfCBudWxsIHtcbiAgICBpZiAoZ2V0KHJvb3QsICdfX21ldGFfXy5pZCcpID09PSBpZCkge1xuICAgICAgcmV0dXJuIHJvb3Q7IC8vIFJldHVybiB0aGUgcm9vdCBpZiBpdCBtYXRjaGVzIHRoZSBJRFxuICAgIH1cbiAgICBpZiAoIXJvb3QuY2hpbGRyZW4pIHJldHVybiBudWxsO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiByb290LmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZFdpZGdldEJ5SWQoY2hpbGQsIGlkKTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICByZXR1cm4gZm91bmQ7IC8vIFJldHVybiB0aGUgZm91bmQgY2hpbGRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDsgLy8gTm9kZSBub3QgZm91bmRcbiAgfVxuXG4gIHByaXZhdGUgZmluZFBhcmVudChpZDogc3RyaW5nLCBwYXJlbnQ6IEFYUFdpZGdldE5vZGUgPSB0aGlzLmN1cnJlbnRQYWdlKCkpOiBBWFBXaWRnZXROb2RlIHwgbnVsbCB7XG4gICAgaWYgKCFwYXJlbnQuY2hpbGRyZW4pIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHBhcmVudC5jaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gZ2V0KGNoaWxkLCAnX19tZXRhX18uaWQnKSA9PT0gaWQpKSB7XG4gICAgICByZXR1cm4gcGFyZW50OyAvLyBSZXR1cm4gdGhpcyBub2RlIGFzIGl0J3MgdGhlIHBhcmVudCBvZiB0aGUgbm9kZSB3aXRoIHRoZSBnaXZlbiBJRFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgcGFyZW50LmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBmb3VuZFBhcmVudCA9IHRoaXMuZmluZFBhcmVudChpZCwgY2hpbGQpO1xuICAgICAgaWYgKGZvdW5kUGFyZW50KSByZXR1cm4gZm91bmRQYXJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7IC8vIE5vIHBhcmVudCBmb3VuZFxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kTmVhcmVzdENvbnRhaW5lcihub2RlOiBBWFBXaWRnZXROb2RlLCBzZWFyY2hVcHdhcmQ6IGJvb2xlYW4gPSB0cnVlKTogQVhQV2lkZ2V0Tm9kZSB8IG51bGwge1xuICAgIGlmIChzZWFyY2hVcHdhcmQpIHtcbiAgICAgIGxldCBjdXJyZW50OiBBWFBXaWRnZXROb2RlIHwgbnVsbCA9IG5vZGU7XG4gICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLndpZGdldFJlZ2lzdGVyeVNlcnZpY2UucmVzb2x2ZShjdXJyZW50LnR5cGUpO1xuICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy50eXBlID09ICdjb250YWluZXInKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IHRoaXMuZmluZFBhcmVudChnZXQoY3VycmVudCwgJ19fbWV0YV9fLmlkJykhKTsgLy8gVXNlIGZpbmRQYXJlbnQgdG8gbmF2aWdhdGUgdXB3YXJkc1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWN1cnNpdmUgc2VhcmNoIHRvIGZpbmQgdGhlIGZpcnN0IGNvbnRhaW5lciBhbW9uZyBjaGlsZHJlblxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy53aWRnZXRSZWdpc3RlcnlTZXJ2aWNlLnJlc29sdmUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcudHlwZSA9PSAnY29udGFpbmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmb3VuZENvbnRhaW5lciA9IHRoaXMuZmluZE5lYXJlc3RDb250YWluZXIoY2hpbGQsIGZhbHNlKTsgLy8gQ29udGludWUgc2VhcmNoaW5nIGRvd253YXJkc1xuICAgICAgICAgIGlmIChmb3VuZENvbnRhaW5lcikgcmV0dXJuIGZvdW5kQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiBubyBjb250YWluZXIgZm91bmRcbiAgfVxuXG4gIGFkZFdpZGdldChjdXJyZW50Tm9kZTogQVhQV2lkZ2V0Tm9kZSwgbm9kZTogQVhQV2lkZ2V0Tm9kZSk6IEFYUFdpZGdldE5vZGUge1xuICAgIC8vXG4gICAgY29uc3QgY2xvbmVkID0gY2xvbmVEZWVwKG5vZGUpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMud2lkZ2V0UmVnaXN0ZXJ5U2VydmljZS5yZXNvbHZlKG5vZGUudHlwZSk7XG5cbiAgICAvL1xuICAgIHRoaXMuY29tbWFuZE1hbmFnZXIuZXhlY3V0ZUNvbW1hbmQobmV3IEFkZFdpZGdldENvbW1hbmQoY2xvbmVkLCBjdXJyZW50Tm9kZSwgY3VycmVudE5vZGUpKTtcbiAgICAvL1xuICAgIGNsb25lZC5uYW1lID0gdGhpcy5nZW5lcmF0ZVVuaXF1ZU5hbWUobm9kZS50eXBlKTtcbiAgICBzZXQoY2xvbmVkLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgc2V0KGNsb25lZCwgJ19fbWV0YV9fLmNvbmZpZycsIGNvbmZpZyk7XG4gICAgLy9cbiAgICB0aGlzLnJlUmVuZGVyUGFnZSgpO1xuICAgIC8vXG4gICAgdGhpcy5yZWZyZXNoKHsgd2lkZ2V0OiBjdXJyZW50Tm9kZSB9KTtcbiAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogY2xvbmVkIH0pO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlV2lkZ2V0KG5vZGU6IEFYUFdpZGdldE5vZGUgPSB0aGlzLnNlbGVjdGVkTm9kZSgpISk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIG5vZGUudHlwZSA9PT0gJ2RvY3VtZW50LWxheW91dCcgfHxcbiAgICAgIChub2RlLnR5cGUgPT09ICdwYWdlLWxheW91dCcgJiYgKHRoaXMuZG9jdW1lbnQoKS5jaGlsZHJlbj8ubGVuZ3RoID8/IDEpID09IDEpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcmVtb3ZlIHRoZSBwYWdlIG5vZGUuJyk7XG4gICAgICByZXR1cm47IC8vIFByZXZlbnQgcmVtb3ZpbmcgdGhlIHJvb3QgcGFnZSBub2RlIG9yIGRvY3VtZW50XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZUlkVG9SZW1vdmUgPSBnZXQobm9kZSwgJ19fbWV0YV9fLmlkJyk7XG4gICAgaWYgKCFub2RlSWRUb1JlbW92ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBfX21ldGFfXy5pZCB0byBpZGVudGlmeSBpdCBmb3IgcmVtb3ZhbC4nKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBwYXJlbnQgb2YgdGhlIG5vZGUgdG8gcmVtb3ZlIGl0XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50KG5vZGVJZFRvUmVtb3ZlLCB0aGlzLmRvY3VtZW50KCkpO1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBub2RlIG5vdCBmb3VuZC4gVGhlIG5vZGUgbWlnaHQgYmUgdGhlIHJvb3Qgbm9kZSBvciBkb2VzIG5vdCBleGlzdC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0ZWROb2RlKCk7IC8vIENhcHR1cmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2RlIGJlZm9yZSByZW1vdmFsXG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBSZW1vdmVXaWRnZXRDb21tYW5kKG5vZGUsIHBhcmVudCwgcHJldmlvdXNTZWxlY3Rpb24hKTtcbiAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpO1xuXG4gICAgdGhpcy5yZWZyZXNoKHsgd2lkZ2V0OiBwYXJlbnQgfSk7IC8vIFJlZnJlc2ggdGhlIFVJIHRvIHJlZmxlY3QgY2hhbmdlc1xuICAgIHRoaXMuc2VsZWN0KHsgd2lkZ2V0OiBwYXJlbnQgfSk7IC8vIFNlbGVjdCB0aGUgcGFyZW50IG5vZGUgYWZ0ZXIgcmVtb3ZhbFxuICB9XG5cbiAgbmF2aWdhdGVUbyhpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jb21tYW5kTWFuYWdlci5nb1RvQ29tbWFuZChpbmRleCk7XG4gICAgdGhpcy5yZVJlbmRlclBhZ2UoKTtcbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy5jb21tYW5kTWFuYWdlci5zZWxlY3RlZE5vZGUoKTtcbiAgICB0aGlzLnJlZnJlc2goeyB3aWRnZXQ6IHRoaXMuY3VycmVudFBhZ2UoKSB9KTtcbiAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogY3VycmVudFNlbGVjdGlvbiEgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVkbygpIHtcbiAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyLnJlZG8oKTtcbiAgICB0aGlzLnJlUmVuZGVyUGFnZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLmNvbW1hbmRNYW5hZ2VyLnNlbGVjdGVkTm9kZSgpO1xuICAgIHRoaXMucmVmcmVzaCh7IHdpZGdldDogdGhpcy5jdXJyZW50UGFnZSgpIH0pO1xuICAgIHRoaXMuc2VsZWN0KHsgd2lkZ2V0OiBjdXJyZW50U2VsZWN0aW9uISB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1bmRvKCkge1xuICAgIHRoaXMuY29tbWFuZE1hbmFnZXIudW5kbygpO1xuICAgIHRoaXMucmVSZW5kZXJQYWdlKCk7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuY29tbWFuZE1hbmFnZXIuc2VsZWN0ZWROb2RlKCk7XG4gICAgdGhpcy5yZWZyZXNoKHsgd2lkZ2V0OiB0aGlzLmN1cnJlbnRQYWdlKCkgfSk7XG4gICAgdGhpcy5zZWxlY3QoeyB3aWRnZXQ6IGN1cnJlbnRTZWxlY3Rpb24hIH0pO1xuICB9XG5cbiAgcHVibGljIGNsZWFySGlzdG9yeSgpIHtcbiAgICB0aGlzLmNvbW1hbmRNYW5hZ2VyLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU1ldGFQcm9wKG9iajogYW55KTogYW55IHtcbiAgICBjb25zdCBub2RlTmFtZSA9ICdfX21ldGFfXyc7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIG9iamVjdCBpcyBhbiBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiB0aGlzLnJlbW92ZU1ldGFQcm9wKGl0ZW0pKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuICAgICAgLy8gQ3JlYXRlIGEgbmV3IG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICBsZXQgbmV3T2JqOiBhbnkgPSB7fTtcbiAgICAgIGZvciAobGV0IGtleSBpbiBvYmopIHtcbiAgICAgICAgLy8gT25seSBhZGQgdGhlIGtleSBpZiBpdCdzIG5vdCB0aGUgbm9kZU5hbWUgd2Ugd2FudCB0byByZW1vdmVcbiAgICAgICAgaWYgKGtleSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgICAgICBuZXdPYmpba2V5XSA9IHRoaXMucmVtb3ZlTWV0YVByb3Aob2JqW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3T2JqO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgdmFsdWUgaXMgbm90IGFuIG9iamVjdCBvciBhcnJheSwgcmV0dXJuIGl0IGFzIGlzXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkTWV0YVRvTm9kZXMoXG4gICAgbm9kZTogQVhQV2lkZ2V0Tm9kZSxcbiAgICBwcm9jZXNzZWROb2RlczogeyBjb3VudDogbnVtYmVyIH0sXG4gICAgcHJvZ3Jlc3NDYWxsYmFjazogKHByb2Nlc3NlZDogbnVtYmVyKSA9PiB2b2lkXG4gICk6IFByb21pc2U8QVhQV2lkZ2V0Tm9kZT4ge1xuICAgIC8vIEFwcGx5IHlvdXIgbWV0YSBsb2dpYyBoZXJlXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy53aWRnZXRSZWdpc3RlcnlTZXJ2aWNlLnJlc29sdmUobm9kZS50eXBlKTtcbiAgICAvL1xuICAgIHNldChub2RlLCAnX19tZXRhX18uaWQnLCB0aGlzLmdlbmVyYXRlVW5pcXVlSWQoKSk7XG4gICAgc2V0KG5vZGUsICdfX21ldGFfXy5jb25maWcnLCBjb25maWcpO1xuICAgIC8vXG4gICAgLy8gSW5jcmVtZW50IHRoZSBwcm9jZXNzZWQgbm9kZSBjb3VudCBhbmQgdXBkYXRlIHRoZSBwcm9ncmVzcyBkaWFsb2dcbiAgICBwcm9jZXNzZWROb2Rlcy5jb3VudCsrO1xuICAgIHByb2dyZXNzQ2FsbGJhY2socHJvY2Vzc2VkTm9kZXMuY291bnQpO1xuICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgY2hpbGQgbm9kZXMgdXNpbmcgUHJvbWlzZS5hbGxcbiAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgbm9kZS5jaGlsZHJlbi5tYXAoYXN5bmMgKGNoaWxkKSA9PiBhd2FpdCB0aGlzLmFkZE1ldGFUb05vZGVzKGNoaWxkLCBwcm9jZXNzZWROb2RlcywgcHJvZ3Jlc3NDYWxsYmFjaykpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHB1YmxpYyBjb3B5KHdpZGdldDogQVhQV2lkZ2V0Tm9kZSB8IG51bGwgPSB0aGlzLnNlbGVjdGVkTm9kZSgpKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FuQ3V0Q29weSgpKSB7XG4gICAgICB0aGlzLmNsaXBib2FyZC5zZXQoY2xvbmVEZWVwKHdpZGdldCkpOyAvLyBVc2UgbG9kYXNoJ3MgY2xvbmVEZWVwIHRvIGVuc3VyZSBhIGRlZXAgY29weVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjdXQod2lkZ2V0OiBBWFBXaWRnZXROb2RlIHwgbnVsbCA9IHRoaXMuc2VsZWN0ZWROb2RlKCkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYW5DdXRDb3B5KCkpIHtcbiAgICAgIHRoaXMuY29weSh3aWRnZXQpOyAvLyBDb3B5IHRoZSB3aWRnZXQgdG8gdGhlIGNsaXBib2FyZFxuICAgICAgdGhpcy5yZW1vdmVXaWRnZXQod2lkZ2V0ISk7IC8vIFJldXNlIHRoZSByZW1vdmVXaWRnZXQgbWV0aG9kIHdoaWNoIHNob3VsZCBoYW5kbGUgdW5kbyBpbnRlcm5hbGx5XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb25lKHdpZGdldDogQVhQV2lkZ2V0Tm9kZSB8IG51bGwgPSB0aGlzLnNlbGVjdGVkTm9kZSgpKTogdm9pZCB7XG4gICAgaWYgKCF3aWRnZXQpIHJldHVybjtcbiAgICB0aGlzLmNvcHkod2lkZ2V0KTsgLy8gQ29weSB0aGUgd2lkZ2V0IHRvIHRoZSBjbGlwYm9hcmRcbiAgICBpZiAod2lkZ2V0LnR5cGUgPT0gJ3BhZ2UtbGF5b3V0Jykge1xuICAgICAgdGhpcy5wYXN0ZSh0aGlzLmRvY3VtZW50KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhc3RlKHdpZGdldCEpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwYXN0ZShwYXJlbnROb2RlOiBBWFBXaWRnZXROb2RlID0gdGhpcy5zZWxlY3RlZE5vZGUoKSA/PyB0aGlzLmN1cnJlbnRQYWdlKCkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2xpcGJvYXJkKCkgfHwgIXRoaXMuc2VsZWN0ZWROb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NsaXBib2FyZCBpcyBlbXB0eSBvciBubyBub2RlIGlzIHNlbGVjdGVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdOb2RlID0gY2xvbmVEZWVwKHRoaXMuY2xpcGJvYXJkKCkpITtcbiAgICBjb25zdCBuZWFyZXN0Q29udGFpbmVyID0gdGhpcy5maW5kTmVhcmVzdENvbnRhaW5lcihwYXJlbnROb2RlLCB0cnVlKTtcbiAgICBpZiAoIW5lYXJlc3RDb250YWluZXIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHN1aXRhYmxlIGNvbnRhaW5lciBmb3VuZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy9cbiAgICBpZiAoIW5lYXJlc3RDb250YWluZXIuY2hpbGRyZW4pIHtcbiAgICAgIG5lYXJlc3RDb250YWluZXIuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG4gICAgLy9cbiAgICBjb25zdCBzZXROYW1lSWQgPSAobm9kZTogQVhQV2lkZ2V0Tm9kZSkgPT4ge1xuICAgICAgc2V0KG5vZGUsICduYW1lJywgdGhpcy5nZW5lcmF0ZVVuaXF1ZU5hbWUobm9kZS50eXBlKSk7XG4gICAgICBzZXQobm9kZSwgJ19fbWV0YV9fLmlkJywgdGhpcy5nZW5lcmF0ZVVuaXF1ZUlkKCkpO1xuICAgICAgbm9kZS5jaGlsZHJlbj8uZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBzZXROYW1lSWQobik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHNldE5hbWVJZChuZXdOb2RlKTtcbiAgICAvL1xuICAgIHRoaXMuY29tbWFuZE1hbmFnZXIuZXhlY3V0ZUNvbW1hbmQobmV3IEFkZFdpZGdldENvbW1hbmQobmV3Tm9kZSwgbmVhcmVzdENvbnRhaW5lciwgbmVhcmVzdENvbnRhaW5lcikpO1xuICAgIC8vXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2goeyB3aWRnZXQ6IG5lYXJlc3RDb250YWluZXIgfSk7IC8vIFJlZnJlc2ggdGhlIFVJXG4gICAgICB0aGlzLnNlbGVjdCh7IHdpZGdldDogbmV3Tm9kZSB9KTsgLy8gU2VsZWN0IHRoZSBuZXdseSBwYXN0ZWQgbm9kZVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpIHtcbiAgICBpZiAodGhpcy50ZW1wbGF0ZUlkKCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmV4cG9ydCgpO1xuICAgICAgYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2F2ZSh0aGlzLnRlbXBsYXRlSWQoKSEsIHsganNvbjogY29udGVudCB9KTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MoJ1lvdXIgY2hhbmdlcyBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb3dubG9hZEpzb24oKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlQXMobm9kZTogQVhQV2lkZ2V0Tm9kZSA9IHRoaXMuZG9jdW1lbnQoKSkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmV4cG9ydChub2RlKTtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zYXZlQXMoeyBqc29uOiBjb250ZW50IH0pO1xuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MoJ1lvdXIgY2hhbmdlcyBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgfVxuXG4gIGV4cG9ydChub2RlOiBBWFBXaWRnZXROb2RlID0gdGhpcy5kb2N1bWVudCgpKTogc3RyaW5nIHtcbiAgICBjb25zdCBqc29uID0gdGhpcy5yZW1vdmVNZXRhUHJvcChub2RlKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbik7XG4gIH1cblxuICBkb3dubG9hZEpzb24oKSB7XG4gICAgLy8gQ29udmVydCB0aGUgb2JqZWN0IHRvIGEgSlNPTiBzdHJpbmdcbiAgICBjb25zdCBqc29uU3RyID0gdGhpcy5leHBvcnQoKTtcblxuICAgIC8vIENyZWF0ZSBhIGJsb2Igb2JqZWN0IGZyb20gdGhlIEpTT04gc3RyaW5nXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtqc29uU3RyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XG5cbiAgICAvLyBDcmVhdGUgYSBVUkwgZm9yIHRoZSBibG9iIG9iamVjdFxuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cbiAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgPGE+IGVsZW1lbnQgdG8gdHJpZ2dlciB0aGUgZG93bmxvYWRcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGEuaHJlZiA9IHVybDtcbiAgICBhLmRvd25sb2FkID0gJ2V4cG9ydC5qc29uJztcblxuICAgIC8vIEFwcGVuZCB0aGUgPGE+IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50IGJvZHkgKG5lY2Vzc2FyeSBmb3Igc29tZSBicm93c2VycylcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuXG4gICAgLy8gVHJpZ2dlciB0aGUgZG93bmxvYWQgYnkgY2xpY2tpbmcgdGhlIDxhPiBlbGVtZW50XG4gICAgYS5jbGljaygpO1xuICAgIC8vIENsZWFuIHVwIGJ5IHJldm9raW5nIHRoZSBvYmplY3QgVVJMIGFuZCByZW1vdmluZyB0aGUgPGE+IGVsZW1lbnRcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRCeUlkKGlkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmxvYWQoaWQpO1xuICAgICAgdGhpcy50ZW1wbGF0ZUlkLnNldChpZCk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRCeUNvbnRlbnQoY29udGVudCEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcihlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbXBvcnRKU29uKCkge1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5maWxlU2VydmljZS5jaG9vc2UoeyBtdWx0aXBsZTogZmFsc2UsIGFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmaWxlLnRleHQoKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEJ5Q29udGVudChjb250ZW50KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkQnlDb250ZW50KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIGNvbnN0IHJvb3ROb2RlID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBBWFBXaWRnZXROb2RlO1xuICAgIGNvbnN0IHRvdGFsTm9kZSA9IHRoaXMuY291bnRUb3RhbE5vZGVzKHJvb3ROb2RlKTtcbiAgICBjb25zdCBwcm9jZXNzZWROb2RlcyA9IHsgY291bnQ6IDAgfTtcblxuICAgIGNvbnN0IGJ1dHRvbjogQVhMb2FkaW5nRGlhbG9nQnV0dG9uSXRlbSA9IHtcbiAgICAgIHRleHQ6ICdDYW5jZWwnLFxuICAgICAgYXV0b2ZvY3VzOiB0cnVlLFxuICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgIG9uQ2xpY2s6IChlKSA9PiB7XG4gICAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5sb2FkaW5nU2VydmljZS5zaG93KHtcbiAgICAgIG1vZGU6ICdkZXRlcm1pbmF0ZScsXG4gICAgICB0aXRsZTogJ0xvYWRpbmcgQ29udGVudCcsXG4gICAgICBwcm9ncmVzc0NvbG9yOiAncHJpbWFyeScsXG4gICAgICB0ZXh0OiAnUHJvY2Vzc2luZyBjb250ZW50JyxcbiAgICAgIHN0YXR1czogYDAgb2YgJHt0b3RhbE5vZGV9YCxcbiAgICAgIGJ1dHRvbnM6IFtidXR0b25dLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBhd2FpdCB0aGlzLmFkZE1ldGFUb05vZGVzKHJvb3ROb2RlLCBwcm9jZXNzZWROb2RlcywgKGNvdW50KSA9PiB7XG4gICAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc1ZhbHVlKE1hdGguY2VpbCgoY291bnQgLyB0b3RhbE5vZGUpICogMTAwKSk7XG4gICAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc1N0YXR1cyhgJHtjb3VudH0gb2YgJHt0b3RhbE5vZGV9YCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcGFnZSA9IHJvb3QuY2hpbGRyZW4/LlswXSE7XG4gICAgICB0aGlzLmRvY3VtZW50LnNldChyb290KTtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KHBhZ2UpO1xuXG4gICAgICBkaWFsb2cuc2V0UHJvZ3Jlc3NDb2xvcignc3VjY2VzcycpO1xuICAgICAgZGlhbG9nLnNldFByb2dyZXNzVGV4dCgnQ29udGVudCBsb2FkZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBidXR0b24udGV4dCA9ICdPa2F5JztcbiAgICAgIGJ1dHRvbi5jb2xvciA9ICdzdWNjZXNzJztcbiAgICAgIGRpYWxvZy5zZXRQcm9ncmVzc1ZhbHVlKDEwMCk7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlUmVuZGVyUGFnZSgpO1xuICAgICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICAgIH0sIDUwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgZGlhbG9nLnNldFByb2dyZXNzQ29sb3IoJ2RhbmdlcicpO1xuICAgICAgZGlhbG9nLnNldFByb2dyZXNzVGV4dChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdDYW5ub3QgbG9hZCBjb250ZW50Jyk7XG4gICAgICBidXR0b24udGV4dCA9ICdDbG9zZSc7XG4gICAgICBidXR0b24uY29sb3IgPSAnZGFuZ2VyJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvdW50VG90YWxOb2Rlcyhub2RlOiBBWFBXaWRnZXROb2RlKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAxOyAvLyBDb3VudCB0aGUgY3VycmVudCBub2RlXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBjb3VudCArPSBub2RlLmNoaWxkcmVuLnJlZHVjZSgoc3VtLCBjaGlsZCkgPT4gc3VtICsgdGhpcy5jb3VudFRvdGFsTm9kZXMoY2hpbGQpLCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVVuaXF1ZU5hbWUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBOb3JtYWxpemUgdGhlIHR5cGUgdG8gZm9sbG93IGNhbWVsQ2FzZSBjb252ZW50aW9uXG4gICAgY29uc3QgYmFzZU5hbWUgPSB0eXBlLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgdHlwZS5zbGljZSgxKTtcbiAgICBsZXQgaW5kZXggPSAxO1xuICAgIGxldCB1bmlxdWVOYW1lID0gYCR7YmFzZU5hbWV9JHtpbmRleH1gO1xuXG4gICAgLy8gR2F0aGVyIGFsbCBleGlzdGluZyBuYW1lcyB0byBjaGVjayBhZ2FpbnN0XG4gICAgY29uc3QgZXhpc3RpbmdOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHRoaXMuY29sbGVjdEFsbE5hbWVzKHRoaXMuZG9jdW1lbnQoKSwgZXhpc3RpbmdOYW1lcyk7XG5cbiAgICAvLyBJbmNyZW1lbnQgdGhlIGluZGV4IHVudGlsIGEgdW5pcXVlIG5hbWUgaXMgZm91bmRcbiAgICB3aGlsZSAoZXhpc3RpbmdOYW1lcy5oYXModW5pcXVlTmFtZSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgICB1bmlxdWVOYW1lID0gYCR7YmFzZU5hbWV9JHtpbmRleH1gO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlxdWVOYW1lO1xuICB9XG5cbiAgZ2VuZXJhdGVVbmlxdWVJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMTAsIDE4KTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdEFsbE5hbWVzKG5vZGU6IEFYUFdpZGdldE5vZGUsIG5hbWVzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xuICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgIG5hbWVzLmFkZChub2RlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuY29sbGVjdEFsbE5hbWVzKGNoaWxkLCBuYW1lcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZVByZXZpZXcoKSB7XG4gICAgdGhpcy5jaGFubmVsLnBvc3RNZXNzYWdlKHtcbiAgICAgIGFjdGlvbjogJ2Rlc2lnbmVyLXByZXZpZXcnLFxuICAgICAgZG9jdW1lbnQ6IHRoaXMucmVtb3ZlTWV0YVByb3AodGhpcy5kb2N1bWVudCgpKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvcGVuUHJldmlld0RpYWxvZygpIHtcbiAgICBjb25zdCBjb20gPSBhd2FpdCBpbXBvcnQoJy4uLy4uL3ByZXZpZXcvcHJldmlldy5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLkFYUExheW91dERlc2lnbmVyUHJldmlld0NvbXBvbmVudCk7XG4gICAgYXdhaXQgdGhpcy5wb3B1cFNlcnZpY2Uub3Blbihjb20sIHtcbiAgICAgIGhlYWRlcjogZmFsc2UsXG4gICAgICBzaXplOiAnZnVsbCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGluaXRpYWxTaXplOiB0aGlzLnNpemUoKSxcbiAgICAgICAgaXNEaWFsb2dXaW5kb3c6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9wZW5QcmV2aWV3V2luZG93KCkge1xuICAgIHdpbmRvdy5vcGVuKCcvZm9ybXMvcHJldmlldycsICdfYmxhbmsnKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbm5lbENhbGxiYWNrID0gKG1lc3NhZ2U6IE1lc3NhZ2VFdmVudDxhbnk+KSA9PiB7XG4gICAgaWYgKG1lc3NhZ2UuZGF0YS5hY3Rpb24gPT0gJ2Rlc2lnbmVyLXByZXZpZXctbG9hZGVkJykge1xuICAgICAgdGhpcy51cGRhdGVQcmV2aWV3KCk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRhdGEuYWN0aW9uID09ICdvcGVuLXByZXZpZXctd2luZG93Jykge1xuICAgICAgdGhpcy5vcGVuUHJldmlld1dpbmRvdygpO1xuICAgIH1cbiAgfTtcblxuICBnZXRDb250ZXh0TWVudUl0ZW1zKCk6IEFYTWVudUl0ZW1bXSB7XG4gICAgY29uc3QgaXRlbXM6IEFYTWVudUl0ZW1bXSA9IFtdO1xuICAgIC8vICAgICAgIFxuICAgIGlmICh0aGlzLmNhbkluc2VydCgpKSB7XG4gICAgICBpdGVtcy5wdXNoKGNsb25lV2lkZ2V0TWVudShBWFBfREVTSUdORVJfQUREX1dJREdFVF9NRU5VLCB7XG4gICAgICAgIGRpc2FibGVkOiAhdGhpcy5jYW5JbnNlcnQoKSwgYnJlYWs6IHRydWVcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgLy9cbiAgICBpdGVtcy5wdXNoKGNsb25lV2lkZ2V0TWVudShBWFBfREVTSUdORVJfQ0xPTkVfTUVOVSwgeyBkaXNhYmxlZDogIXRoaXMuY2FuQ3V0Q29weSgpIH0pKTtcbiAgICBpdGVtcy5wdXNoKGNsb25lV2lkZ2V0TWVudShBWFBfREVTSUdORVJfQ1VUX01FTlUsIHsgZGlzYWJsZWQ6ICF0aGlzLmNhbkN1dENvcHkoKSB9KSk7XG4gICAgaXRlbXMucHVzaChjbG9uZVdpZGdldE1lbnUoQVhQX0RFU0lHTkVSX0NPUFlfTUVOVSwgeyBkaXNhYmxlZDogIXRoaXMuY2FuQ3V0Q29weSgpIH0pKTtcbiAgICBpdGVtcy5wdXNoKGNsb25lV2lkZ2V0TWVudShBWFBfREVTSUdORVJfUEFTVEVfTUVOVSwgeyBkaXNhYmxlZDogIXRoaXMuY2FuUGFzdGUoKSwgYnJlYWs6IHRydWUgfSkpO1xuICAgIC8vXG4gICAgaXRlbXMucHVzaChjbG9uZVdpZGdldE1lbnUoQVhQX0RFU0lHTkVSX0RFTEVURV9XSURHRVRfTUVOVSwgeyBkaXNhYmxlZDogIXRoaXMuY2FuRGVsZXRlKCksIGJyZWFrOiB0cnVlIH0pKTtcbiAgICAvL1xuICAgIGl0ZW1zLnB1c2goY2xvbmVXaWRnZXRNZW51KEFYUF9ERVNJR05FUl9TQVZFX0FTX1dJREdFVF9NRU5VKSk7XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgZXhlY3V0ZUNvbW1hbmQobmFtZTogc3RyaW5nLCBkYXRhPzogYW55KSB7XG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlIEFYUF9ERVNJR05FUl9BRERfV0lER0VUX01FTlUubmFtZToge1xuICAgICAgICB0aGlzLnNob3dQaWNrZXIoKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIC8vXG4gICAgICBjYXNlIEFYUF9ERVNJR05FUl9ERUxFVEVfV0lER0VUX01FTlUubmFtZToge1xuICAgICAgICB0aGlzLnJlbW92ZVdpZGdldCgpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgLy9cbiAgICAgIGNhc2UgQVhQX0RFU0lHTkVSX0NMT05FX01FTlUubmFtZToge1xuICAgICAgICB0aGlzLmNsb25lKCk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEFYUF9ERVNJR05FUl9DVVRfTUVOVS5uYW1lOiB7XG4gICAgICAgIHRoaXMuY3V0KCk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEFYUF9ERVNJR05FUl9DT1BZX01FTlUubmFtZToge1xuICAgICAgICB0aGlzLmNvcHkoKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgQVhQX0RFU0lHTkVSX1BBU1RFX01FTlUubmFtZToge1xuICAgICAgICB0aGlzLnBhc3RlKCk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICAvL1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -3,4 +3,4 @@ export class AXPDesignerModes {
|
|
|
3
3
|
static { this.Design = { id: 'designer', title: 'Designer' }; }
|
|
4
4
|
static { this.Edit = { id: 'edit', title: 'Edit' }; }
|
|
5
5
|
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9kZXNpZ25lci9zcmMvbGliL2Rlc2lnbmVyL3NoYXJlZC9kZXNpZ25lci50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLE9BQU8sZ0JBQWdCO2FBQ1gsU0FBSSxHQUFvQixFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQ3RELFdBQU0sR0FBb0IsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUNoRSxTQUFJLEdBQW9CLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBBWFBEZXNpZ25lck1vZGUgPVxuICB8IHsgaWQ6ICdkZXNpZ25lcic7IHRpdGxlOiAnRGVzaWduZXInIH1cbiAgfCB7IGlkOiAndmlldyc7IHRpdGxlOiAnVmlldycgfVxuICB8IHsgaWQ6ICdlZGl0JzsgdGl0bGU6ICdFZGl0JyB9O1xuXG5leHBvcnQgY2xhc3MgQVhQRGVzaWduZXJNb2RlcyB7XG4gIHN0YXRpYyByZWFkb25seSBWaWV3OiBBWFBEZXNpZ25lck1vZGUgPSB7IGlkOiAndmlldycsIHRpdGxlOiAnVmlldycgfTtcbiAgc3RhdGljIHJlYWRvbmx5IERlc2lnbjogQVhQRGVzaWduZXJNb2RlID0geyBpZDogJ2Rlc2lnbmVyJywgdGl0bGU6ICdEZXNpZ25lcicgfTtcbiAgc3RhdGljIHJlYWRvbmx5IEVkaXQ6IEFYUERlc2lnbmVyTW9kZSA9IHsgaWQ6ICdlZGl0JywgdGl0bGU6ICdFZGl0JyB9O1xufVxuIl19
|