@mediusinc/mng-commons 0.19.3 → 0.21.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/en.json +14 -3
- package/assets/i18n/sl.json +14 -3
- package/esm2020/lib/api/models/builders/query-param.builder.mjs +58 -58
- package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -24
- package/esm2020/lib/api/models/filter-param.model.mjs +32 -32
- package/esm2020/lib/api/models/index.mjs +8 -8
- package/esm2020/lib/api/models/mappers.mjs +12 -12
- package/esm2020/lib/api/models/query-mode.model.mjs +17 -17
- package/esm2020/lib/api/models/query-param.model.mjs +67 -67
- package/esm2020/lib/api/models/query-result.model.mjs +23 -23
- package/esm2020/lib/api/models/serialization.model.mjs +1 -1
- package/esm2020/lib/api/services/api.abstract.service.mjs +57 -57
- package/esm2020/lib/api/services/crud-api.abstract.service.mjs +75 -68
- package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +30 -23
- package/esm2020/lib/api/services/index.mjs +3 -3
- package/esm2020/lib/api/utils/index.mjs +2 -2
- package/esm2020/lib/api/utils/medius-rest.util.mjs +212 -212
- package/esm2020/lib/api/utils/object-serializer.util.mjs +247 -247
- package/esm2020/lib/components/action/action.component.mjs +225 -221
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +303 -281
- package/esm2020/lib/components/action/index.mjs +5 -4
- package/esm2020/lib/components/action/localization/data-language-dropdown.component.mjs +45 -0
- package/esm2020/lib/components/action/models/action-component.model.mjs +2 -0
- package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
- package/esm2020/lib/components/action/models/action-execution.model.mjs +249 -245
- package/esm2020/lib/components/action/models/index.mjs +5 -4
- package/esm2020/lib/components/action/models/tableview-action-default-categories.model.mjs +10 -10
- package/esm2020/lib/components/action/route/action-route.component.mjs +129 -129
- package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +299 -299
- package/esm2020/lib/components/form/date-range/date-range.component.mjs +108 -108
- package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +193 -193
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +240 -219
- package/esm2020/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +38 -38
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +49 -49
- package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +44 -44
- package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +25 -25
- package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +150 -103
- package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +23 -23
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +180 -180
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +167 -167
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +148 -148
- package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +16 -16
- package/esm2020/lib/components/form/formly/fields/index.mjs +10 -10
- package/esm2020/lib/components/form/formly/formly.config.mjs +212 -186
- package/esm2020/lib/components/form/formly/index.mjs +1 -1
- package/esm2020/lib/components/form/formly/models/formly-config.model.mjs +1 -1
- package/esm2020/lib/components/form/formly/models/formly-field.model.mjs +1 -1
- package/esm2020/lib/components/form/formly/models/index.mjs +2 -2
- package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +14 -14
- package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +79 -15
- package/esm2020/lib/components/form/formly/wrappers/index.mjs +2 -2
- package/esm2020/lib/components/form/index.mjs +4 -4
- package/esm2020/lib/components/form/models/field-action-context.model.mjs +1 -1
- package/esm2020/lib/components/form/models/form-editor.event.mjs +33 -33
- package/esm2020/lib/components/form/models/form-editor.interface.mjs +1 -1
- package/esm2020/lib/components/form/models/index.mjs +2 -2
- package/esm2020/lib/components/layout/breadcrumb.component.mjs +16 -16
- package/esm2020/lib/components/layout/footer.component.mjs +16 -16
- package/esm2020/lib/components/layout/index.mjs +7 -7
- package/esm2020/lib/components/layout/main-layout.component.mjs +51 -51
- package/esm2020/lib/components/layout/menu-item.component.mjs +271 -271
- package/esm2020/lib/components/layout/menu.component.mjs +20 -20
- package/esm2020/lib/components/layout/services/index.mjs +1 -1
- package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +194 -194
- package/esm2020/lib/components/layout/topbar.component.mjs +64 -64
- package/esm2020/lib/components/layout/version.component.mjs +57 -57
- package/esm2020/lib/components/tableview/index.mjs +6 -6
- package/esm2020/lib/components/tableview/models/index.mjs +1 -1
- package/esm2020/lib/components/tableview/models/table.event.mjs +15 -15
- package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +122 -115
- package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +52 -52
- package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +119 -119
- package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +84 -74
- package/esm2020/lib/components/tableview/table/table.component.mjs +604 -590
- package/esm2020/lib/components/tableview/tableview.component.mjs +112 -112
- package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
- package/esm2020/lib/data-providers/editor.data-provider.mjs +37 -37
- package/esm2020/lib/data-providers/index.mjs +6 -6
- package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
- package/esm2020/lib/data-providers/table.data-provider.mjs +38 -38
- package/esm2020/lib/data-providers/tableview-crud.data-provider.mjs +24 -24
- package/esm2020/lib/data-providers/tableview.data-provider.mjs +45 -59
- package/esm2020/lib/descriptors/action/action-confirmation.descriptor.mjs +76 -76
- package/esm2020/lib/descriptors/action-button.descriptor.mjs +59 -59
- package/esm2020/lib/descriptors/action.descriptor.mjs +555 -548
- package/esm2020/lib/descriptors/column.descriptor.mjs +405 -381
- package/esm2020/lib/descriptors/editor.descriptor.mjs +290 -251
- package/esm2020/lib/descriptors/field-validation.descriptor.mjs +24 -24
- package/esm2020/lib/descriptors/field.descriptor.mjs +979 -904
- package/esm2020/lib/descriptors/filter.descriptor.mjs +320 -320
- package/esm2020/lib/descriptors/index.mjs +11 -11
- package/esm2020/lib/descriptors/interfaces/field-config.interface.mjs +1 -1
- package/esm2020/lib/descriptors/interfaces/index.mjs +2 -2
- package/esm2020/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +1 -1
- package/esm2020/lib/descriptors/model.descriptor.mjs +44 -44
- package/esm2020/lib/descriptors/table.descriptor.mjs +482 -463
- package/esm2020/lib/descriptors/tableview.descriptor.mjs +340 -324
- package/esm2020/lib/descriptors/types/action.type.mjs +25 -25
- package/esm2020/lib/descriptors/types/column.type.mjs +21 -12
- package/esm2020/lib/descriptors/types/editor.type.mjs +7 -7
- package/esm2020/lib/descriptors/types/field.type.mjs +55 -53
- package/esm2020/lib/descriptors/types/filter.type.mjs +30 -30
- package/esm2020/lib/descriptors/types/index.mjs +6 -6
- package/esm2020/lib/descriptors/types/table.type.mjs +26 -26
- package/esm2020/lib/directives/component.directive.mjs +44 -44
- package/esm2020/lib/directives/index.mjs +2 -2
- package/esm2020/lib/directives/template.directive.mjs +27 -27
- package/esm2020/lib/mng-commons.module.mjs +471 -466
- package/esm2020/lib/models/column-value.model.mjs +1 -1
- package/esm2020/lib/models/config.model.mjs +2 -2
- package/esm2020/lib/models/enum.model.mjs +1 -1
- package/esm2020/lib/models/error.model.mjs +1 -1
- package/esm2020/lib/models/index.mjs +9 -9
- package/esm2020/lib/models/menu.model.mjs +1 -1
- package/esm2020/lib/models/tableview-attr.model.mjs +2 -2
- package/esm2020/lib/models/user.model.mjs +1 -1
- package/esm2020/lib/models/version.model.mjs +1 -1
- package/esm2020/lib/models/view-container.model.mjs +2 -2
- package/esm2020/lib/pipes/boolean.pipe.mjs +26 -26
- package/esm2020/lib/pipes/class-map.pipe.mjs +21 -21
- package/esm2020/lib/pipes/enum.pipe.mjs +24 -24
- package/esm2020/lib/pipes/enumerate-async.pipe.mjs +37 -37
- package/esm2020/lib/pipes/enumerate.pipe.mjs +54 -54
- package/esm2020/lib/pipes/getter.pipe.mjs +19 -19
- package/esm2020/lib/pipes/i18n-property.pipe.mjs +17 -17
- package/esm2020/lib/pipes/index.mjs +10 -10
- package/esm2020/lib/pipes/json-path.pipe.mjs +78 -78
- package/esm2020/lib/pipes/models/internal/enumrate-pipe-i18n.model.mjs +1 -1
- package/esm2020/lib/pipes/models/internal/index.mjs +1 -1
- package/esm2020/lib/pipes/parametrize.pipe.mjs +84 -84
- package/esm2020/lib/pipes/template.pipe.mjs +23 -23
- package/esm2020/lib/router/index.mjs +2 -2
- package/esm2020/lib/router/models/index.mjs +1 -1
- package/esm2020/lib/router/models/router.model.mjs +1 -1
- package/esm2020/lib/router/route-builder.mjs +425 -425
- package/esm2020/lib/router/tableview-route-builder.mjs +186 -186
- package/esm2020/lib/security/authorization.guard.mjs +25 -25
- package/esm2020/lib/security/authorization.service.mjs +46 -46
- package/esm2020/lib/security/authorization.util.mjs +15 -15
- package/esm2020/lib/security/index.mjs +3 -3
- package/esm2020/lib/security/model/authorization.type.mjs +7 -7
- package/esm2020/lib/security/model/index.mjs +3 -3
- package/esm2020/lib/security/model/permission-service.interface.mjs +1 -1
- package/esm2020/lib/security/model/permissions.model.mjs +86 -86
- package/esm2020/lib/services/action-executor.service.mjs +552 -552
- package/esm2020/lib/services/commons.service.mjs +446 -420
- package/esm2020/lib/services/configuration.service.mjs +119 -119
- package/esm2020/lib/services/error-mapper.service.mjs +13 -13
- package/esm2020/lib/services/index.mjs +6 -6
- package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
- package/esm2020/lib/services/internal/commons-init.service.mjs +43 -43
- package/esm2020/lib/services/internal/index.mjs +2 -2
- package/esm2020/lib/services/navigation.service.mjs +47 -47
- package/esm2020/lib/services/providers/config-service.provider.mjs +29 -29
- package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
- package/esm2020/lib/services/providers/index.mjs +2 -2
- package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
- package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
- package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
- package/esm2020/lib/services/tokens/index.mjs +4 -4
- package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
- package/esm2020/lib/services/version.service.mjs +38 -38
- package/esm2020/lib/services/view-container.component.service.mjs +54 -54
- package/esm2020/lib/styles/button-style.builder.mjs +164 -164
- package/esm2020/lib/styles/index.mjs +2 -2
- package/esm2020/lib/styles/models/index.mjs +2 -2
- package/esm2020/lib/styles/models/style-level.enum.mjs +11 -11
- package/esm2020/lib/styles/models/style-size.enum.mjs +8 -8
- package/esm2020/lib/styles/styles.util.mjs +41 -41
- package/esm2020/lib/types/index.mjs +2 -2
- package/esm2020/lib/types/type.decorator.mjs +21 -21
- package/esm2020/lib/types/type.model.mjs +1 -1
- package/esm2020/lib/utils/action-data-provider.util.mjs +145 -145
- package/esm2020/lib/utils/date.util.mjs +117 -117
- package/esm2020/lib/utils/editor-formly.util.mjs +277 -263
- package/esm2020/lib/utils/enum.util.mjs +81 -81
- package/esm2020/lib/utils/i18n.util.mjs +232 -232
- package/esm2020/lib/utils/index.mjs +9 -9
- package/esm2020/lib/utils/model.util.mjs +68 -68
- package/esm2020/lib/utils/notification.util.mjs +45 -45
- package/esm2020/lib/utils/route.util.mjs +23 -23
- package/esm2020/lib/utils/string.util.mjs +26 -26
- package/esm2020/lib/utils/tableview.util.mjs +160 -144
- package/esm2020/lib/utils/type.util.mjs +92 -92
- package/esm2020/mediusinc-mng-commons.mjs +4 -4
- package/esm2020/public-api.mjs +54 -54
- package/fesm2015/mediusinc-mng-commons.mjs +13529 -13030
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +13369 -12876
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/api/models/builders/query-param.builder.d.ts +13 -13
- package/lib/api/models/filter-match-type.model.d.ts +23 -23
- package/lib/api/models/filter-param.model.d.ts +23 -23
- package/lib/api/models/index.d.ts +8 -8
- package/lib/api/models/mappers.d.ts +6 -6
- package/lib/api/models/query-mode.model.d.ts +16 -16
- package/lib/api/models/query-param.model.d.ts +31 -31
- package/lib/api/models/query-result.model.d.ts +24 -24
- package/lib/api/models/serialization.model.d.ts +8 -8
- package/lib/api/services/api.abstract.service.d.ts +24 -24
- package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
- package/lib/api/services/get-all-api.abstract.service.d.ts +14 -14
- package/lib/api/services/index.d.ts +3 -3
- package/lib/api/utils/index.d.ts +2 -2
- package/lib/api/utils/medius-rest.util.d.ts +16 -16
- package/lib/api/utils/object-serializer.util.d.ts +33 -33
- package/lib/components/action/action.component.d.ts +74 -72
- package/lib/components/action/editor/action-editor.component.d.ts +69 -65
- package/lib/components/action/index.d.ts +4 -3
- package/lib/components/action/localization/data-language-dropdown.component.d.ts +25 -0
- package/lib/components/action/models/action-component.model.d.ts +15 -0
- package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
- package/lib/components/action/models/action-execution.model.d.ts +135 -133
- package/lib/components/action/models/index.d.ts +4 -3
- package/lib/components/action/models/tableview-action-default-categories.model.d.ts +10 -10
- package/lib/components/action/route/action-route.component.d.ts +31 -31
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +61 -61
- package/lib/components/form/date-range/date-range.component.d.ts +28 -28
- package/lib/components/form/dropdown/dropdown.component.d.ts +52 -52
- package/lib/components/form/editor/form-editor.component.d.ts +50 -45
- package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +13 -13
- package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +16 -16
- package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +15 -15
- package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +14 -14
- package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +29 -24
- package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +11 -11
- package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +46 -46
- package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +21 -21
- package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +37 -37
- package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +7 -7
- package/lib/components/form/formly/fields/index.d.ts +10 -10
- package/lib/components/form/formly/formly.config.d.ts +14 -12
- package/lib/components/form/formly/index.d.ts +1 -1
- package/lib/components/form/formly/models/formly-config.model.d.ts +11 -11
- package/lib/components/form/formly/models/formly-field.model.d.ts +16 -16
- package/lib/components/form/formly/models/index.d.ts +2 -2
- package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +6 -6
- package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +11 -6
- package/lib/components/form/formly/wrappers/index.d.ts +2 -2
- package/lib/components/form/index.d.ts +4 -4
- package/lib/components/form/models/field-action-context.model.d.ts +17 -17
- package/lib/components/form/models/form-editor.event.d.ts +37 -37
- package/lib/components/form/models/form-editor.interface.d.ts +10 -10
- package/lib/components/form/models/index.d.ts +2 -2
- package/lib/components/layout/breadcrumb.component.d.ts +8 -8
- package/lib/components/layout/footer.component.d.ts +9 -9
- package/lib/components/layout/index.d.ts +7 -7
- package/lib/components/layout/main-layout.component.d.ts +20 -20
- package/lib/components/layout/menu-item.component.d.ts +52 -52
- package/lib/components/layout/menu.component.d.ts +10 -10
- package/lib/components/layout/services/index.d.ts +1 -1
- package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
- package/lib/components/layout/topbar.component.d.ts +28 -28
- package/lib/components/layout/version.component.d.ts +19 -19
- package/lib/components/tableview/index.d.ts +6 -6
- package/lib/components/tableview/models/index.d.ts +1 -1
- package/lib/components/tableview/models/table.event.d.ts +17 -17
- package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +29 -28
- package/lib/components/tableview/route/tableview-route.component.d.ts +18 -18
- package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +38 -38
- package/lib/components/tableview/table/column-value/column-value.component.d.ts +35 -30
- package/lib/components/tableview/table/table.component.d.ts +116 -114
- package/lib/components/tableview/tableview.component.d.ts +48 -48
- package/lib/data-providers/base.data-provider.d.ts +14 -14
- package/lib/data-providers/editor.data-provider.d.ts +25 -25
- package/lib/data-providers/index.d.ts +6 -6
- package/lib/data-providers/lookup.data-provider.d.ts +14 -14
- package/lib/data-providers/table.data-provider.d.ts +27 -27
- package/lib/data-providers/tableview-crud.data-provider.d.ts +8 -8
- package/lib/data-providers/tableview.data-provider.d.ts +33 -37
- package/lib/descriptors/action/action-confirmation.descriptor.d.ts +36 -36
- package/lib/descriptors/action-button.descriptor.d.ts +22 -22
- package/lib/descriptors/action.descriptor.d.ts +216 -212
- package/lib/descriptors/column.descriptor.d.ts +130 -123
- package/lib/descriptors/editor.descriptor.d.ts +116 -95
- package/lib/descriptors/field-validation.descriptor.d.ts +19 -19
- package/lib/descriptors/field.descriptor.d.ts +342 -324
- package/lib/descriptors/filter.descriptor.d.ts +112 -112
- package/lib/descriptors/index.d.ts +11 -11
- package/lib/descriptors/interfaces/field-config.interface.d.ts +9 -9
- package/lib/descriptors/interfaces/index.d.ts +2 -2
- package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +17 -17
- package/lib/descriptors/model.descriptor.d.ts +18 -18
- package/lib/descriptors/table.descriptor.d.ts +188 -182
- package/lib/descriptors/tableview.descriptor.d.ts +129 -122
- package/lib/descriptors/types/action.type.d.ts +21 -21
- package/lib/descriptors/types/column.type.d.ts +18 -10
- package/lib/descriptors/types/editor.type.d.ts +6 -6
- package/lib/descriptors/types/field.type.d.ts +46 -44
- package/lib/descriptors/types/filter.type.d.ts +27 -27
- package/lib/descriptors/types/index.d.ts +6 -6
- package/lib/descriptors/types/table.type.d.ts +22 -22
- package/lib/directives/component.directive.d.ts +16 -16
- package/lib/directives/index.d.ts +2 -2
- package/lib/directives/template.directive.d.ts +13 -13
- package/lib/mng-commons.module.d.ts +96 -94
- package/lib/models/column-value.model.d.ts +4 -4
- package/lib/models/config.model.d.ts +40 -39
- package/lib/models/enum.model.d.ts +6 -6
- package/lib/models/error.model.d.ts +14 -14
- package/lib/models/index.d.ts +9 -9
- package/lib/models/menu.model.d.ts +30 -30
- package/lib/models/tableview-attr.model.d.ts +10 -9
- package/lib/models/user.model.d.ts +8 -8
- package/lib/models/version.model.d.ts +18 -18
- package/lib/models/view-container.model.d.ts +43 -42
- package/lib/pipes/boolean.pipe.d.ts +7 -7
- package/lib/pipes/class-map.pipe.d.ts +7 -7
- package/lib/pipes/enum.pipe.d.ts +8 -8
- package/lib/pipes/enumerate-async.pipe.d.ts +14 -14
- package/lib/pipes/enumerate.pipe.d.ts +21 -21
- package/lib/pipes/getter.pipe.d.ts +7 -7
- package/lib/pipes/i18n-property.pipe.d.ts +8 -8
- package/lib/pipes/index.d.ts +10 -10
- package/lib/pipes/json-path.pipe.d.ts +13 -13
- package/lib/pipes/models/internal/enumrate-pipe-i18n.model.d.ts +5 -5
- package/lib/pipes/models/internal/index.d.ts +1 -1
- package/lib/pipes/parametrize.pipe.d.ts +13 -13
- package/lib/pipes/template.pipe.d.ts +10 -10
- package/lib/router/index.d.ts +2 -2
- package/lib/router/models/index.d.ts +1 -1
- package/lib/router/models/router.model.d.ts +33 -33
- package/lib/router/route-builder.d.ts +98 -98
- package/lib/router/tableview-route-builder.d.ts +37 -37
- package/lib/security/authorization.guard.d.ts +11 -11
- package/lib/security/authorization.service.d.ts +19 -19
- package/lib/security/authorization.util.d.ts +5 -5
- package/lib/security/index.d.ts +3 -3
- package/lib/security/model/authorization.type.d.ts +6 -6
- package/lib/security/model/index.d.ts +3 -3
- package/lib/security/model/permission-service.interface.d.ts +6 -6
- package/lib/security/model/permissions.model.d.ts +37 -37
- package/lib/services/action-executor.service.d.ts +149 -149
- package/lib/services/commons.service.d.ts +89 -84
- package/lib/services/configuration.service.d.ts +45 -45
- package/lib/services/error-mapper.service.d.ts +7 -7
- package/lib/services/index.d.ts +6 -6
- package/lib/services/internal/commons-init.provider.d.ts +3 -3
- package/lib/services/internal/commons-init.service.d.ts +16 -16
- package/lib/services/internal/index.d.ts +2 -2
- package/lib/services/navigation.service.d.ts +14 -14
- package/lib/services/providers/config-service.provider.d.ts +6 -6
- package/lib/services/providers/formly-config.provider.d.ts +4 -4
- package/lib/services/providers/index.d.ts +2 -2
- package/lib/services/tokens/browser-storage.token.d.ts +2 -2
- package/lib/services/tokens/commons-init.token.d.ts +3 -3
- package/lib/services/tokens/default-setting.token.d.ts +2 -2
- package/lib/services/tokens/index.d.ts +4 -4
- package/lib/services/tokens/module-config.token.d.ts +3 -3
- package/lib/services/version.service.d.ts +13 -13
- package/lib/services/view-container.component.service.d.ts +31 -31
- package/lib/styles/button-style.builder.d.ts +67 -67
- package/lib/styles/index.d.ts +2 -2
- package/lib/styles/models/index.d.ts +2 -2
- package/lib/styles/models/style-level.enum.d.ts +10 -10
- package/lib/styles/models/style-size.enum.d.ts +7 -7
- package/lib/styles/styles.util.d.ts +14 -14
- package/lib/types/index.d.ts +2 -2
- package/lib/types/type.decorator.d.ts +4 -4
- package/lib/types/type.model.d.ts +23 -23
- package/lib/utils/action-data-provider.util.d.ts +20 -20
- package/lib/utils/date.util.d.ts +7 -7
- package/lib/utils/editor-formly.util.d.ts +12 -12
- package/lib/utils/enum.util.d.ts +50 -50
- package/lib/utils/i18n.util.d.ts +56 -56
- package/lib/utils/index.d.ts +9 -9
- package/lib/utils/model.util.d.ts +8 -8
- package/lib/utils/notification.util.d.ts +11 -11
- package/lib/utils/route.util.d.ts +4 -4
- package/lib/utils/string.util.d.ts +4 -4
- package/lib/utils/tableview.util.d.ts +40 -39
- package/lib/utils/type.util.d.ts +57 -57
- package/mediusinc-mng-commons-0.21.0-rc.1.tgz +0 -0
- package/package.json +1 -1
- package/public-api.d.ts +34 -34
- package/scss/common/theme/designer/_components.scss +1 -0
- package/scss/common/theme/designer/components/multimedia/_image.scss +44 -0
- package/scss/common/variables/theme/_theme_dark.scss +15 -1
- package/scss/common/variables/theme/_theme_light.scss +15 -1
- package/scss/mng-overrides/_theme_forms.scss +5 -0
- package/scss/mng-overrides/_theme_image.scss +27 -0
- package/scss/mng-overrides/_theme_styles.scss +1 -0
- package/version-info.json +7 -7
|
@@ -1,281 +1,303 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { ReplaySubject, of, throwError } from 'rxjs';
|
|
3
|
-
import { catchError, finalize, first } from 'rxjs/operators';
|
|
4
|
-
import { ActionEditorSubmitDescriptor } from '../../../descriptors';
|
|
5
|
-
import { ActionEditorSubmitTypeEnum, ActionPositionEnum } from '../../../descriptors/types';
|
|
6
|
-
import { MngTemplateDirective } from '../../../directives';
|
|
7
|
-
import { I18nUtils, NotificationUtil } from '../../../utils';
|
|
8
|
-
import { MngFormEditorComponent } from '../../form';
|
|
9
|
-
import { ActionParameters } from '../models';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@ngx-translate/core";
|
|
12
|
-
import * as i2 from "../../../services";
|
|
13
|
-
import * as i3 from "primeng/dynamicdialog";
|
|
14
|
-
import * as i4 from "@angular/common";
|
|
15
|
-
import * as i5 from "primeng/api";
|
|
16
|
-
import * as i6 from "primeng/toolbar";
|
|
17
|
-
import * as i7 from "primeng/progressspinner";
|
|
18
|
-
import * as i8 from "../../form/editor/form-editor.component";
|
|
19
|
-
import * as i9 from "../action.component";
|
|
20
|
-
export class MngActionEditorComponent {
|
|
21
|
-
constructor(injector, translate, actionExecutor, mngCommonsService, navigationService, dialogRef, dialogConfig, viewContainerService) {
|
|
22
|
-
this.injector = injector;
|
|
23
|
-
this.translate = translate;
|
|
24
|
-
this.actionExecutor = actionExecutor;
|
|
25
|
-
this.mngCommonsService = mngCommonsService;
|
|
26
|
-
this.navigationService = navigationService;
|
|
27
|
-
this.dialogRef = dialogRef;
|
|
28
|
-
this.dialogConfig = dialogConfig;
|
|
29
|
-
this.viewContainerService = viewContainerService;
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
36
|
-
this.
|
|
37
|
-
this.
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
40
|
-
this.
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
43
|
-
this.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (this.
|
|
51
|
-
this.
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.
|
|
57
|
-
this.
|
|
58
|
-
this.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (typeof action.button.
|
|
80
|
-
action.button.
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
this.placeActionsOnPositions(action);
|
|
104
|
-
}
|
|
105
|
-
this.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
this.
|
|
117
|
-
}
|
|
118
|
-
else if (e.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
this.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
this.
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
this.
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
this.
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
type:
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
type:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
}]
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvYWN0aW9uL2VkaXRvci9hY3Rpb24tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vZWRpdG9yL2FjdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFFWixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFhLGFBQWEsRUFBZ0IsRUFBRSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUczRCxPQUFPLEVBQTJDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUcsT0FBTyxFQUFDLDBCQUEwQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFJekQsT0FBTyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVsRCxPQUFPLEVBQTZCLGdCQUFnQixFQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7OztBQU92RSxNQUFNLE9BQU8sd0JBQXdCO0lBMENqQyxZQUNZLFFBQWtCLEVBQ2xCLFNBQTJCLEVBQzNCLGNBQXdDLEVBQ3hDLGlCQUFvQyxFQUNwQyxpQkFBdUMsRUFDM0IsU0FB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LElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEMsTUFBTTtZQUNWLEtBQUssa0JBQWtCLENBQUMsVUFBVTtnQkFDOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEMsTUFBTTtZQUNWLEtBQUssa0JBQWtCLENBQUMsV0FBVztnQkFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckMsTUFBTTtTQUNiO0lBQ0wsQ0FBQzs7cUhBaFNRLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLGtXQWVoQixvQkFBb0IsdUxBRTFCLHNCQUFzQixnREN4RHJDLG10RkE4REE7MkZEdkJhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDSSxtQkFBbUIsbUJBRVosdUJBQXVCLENBQUMsTUFBTTs7MEJBa0QxQyxRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFROzRDQWhERyxNQUFNO3NCQUFyQixLQUFLO2dCQUdVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ3lCLGlCQUFpQjtzQkFBL0MsS0FBSzt1QkFBQyxlQUFlO2dCQUVTLHFCQUFxQjtzQkFBbkQsTUFBTTt1QkFBQyxjQUFjO2dCQUNTLHdCQUF3QjtzQkFBdEQsTUFBTTt1QkFBQyxjQUFjO2dCQUd3QixTQUFTO3NCQUF0RCxlQUFlO3VCQUFDLG9CQUFvQjtnQkFDSCxzQkFBc0I7c0JBQXZELFNBQVM7dUJBQUMsY0FBYztnQkFDaUIsZUFBZTtzQkFBeEQsU0FBUzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0R5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWZ9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge09ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBmaW5hbGl6ZSwgZmlyc3R9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtJRWRpdG9yRGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3J9IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7QWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0sIEFjdGlvblBvc2l0aW9uRW51bX0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtNbmdUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyLCBJVmlld0NvbnRhaW5lckVkaXRvcn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLCBNbmdDb21tb25zU2VydmljZSwgTW5nTmF2aWdhdGlvblNlcnZpY2UsIE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtJMThuVXRpbHMsIE5vdGlmaWNhdGlvblV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7TW5nRm9ybUVkaXRvckNvbXBvbmVudH0gZnJvbSAnLi4vLi4vZm9ybSc7XG5pbXBvcnQge01uZ0Zvcm1FZGl0b3JTdWJtaXRFdmVudH0gZnJvbSAnLi4vLi4vZm9ybS9tb2RlbHMnO1xuaW1wb3J0IHtBY3Rpb25EYXRhLCBBY3Rpb25JbnN0YW5jZSwgQWN0aW9uUGFyYW1ldGVyc30gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctYWN0aW9uLWVkaXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0FjdGlvbkVkaXRvckNvbXBvbmVudDxULCBTPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvLyBtZXRhZGF0YSBhbmQgZWRpdG9yIG1vZGUgaW5wdXRcbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uITogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPjtcblxuICAgIC8vIGRhdGEgc291cmNlIGlucHV0c1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtSWQ/OiBJZFR5cGU7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW0/OiBUO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YTtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPjtcbiAgICBASW5wdXQoJ3ZpZXdDb250YWluZXInKSBwdWJsaWMgdmlld0NvbnRhaW5lckluaXQ/OiBJVmlld0NvbnRhaW5lcjxULCBTPjtcblxuICAgIEBPdXRwdXQoJ2FjdGlvblN1Ym1pdCcpIHB1YmxpYyBhY3Rpb25SdW5FdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICAgIEBPdXRwdXQoJ2FjdGlvbkNhbmNlbCcpIHB1YmxpYyBhY3Rpb25DYW5jZWxFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLy8gY29udGVudCBhbmQgdmlldyBxdWVyaWVzXG4gICAgQENvbnRlbnRDaGlsZHJlbihNbmdUZW1wbGF0ZURpcmVjdGl2ZSkgcHVibGljIHRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxNbmdUZW1wbGF0ZURpcmVjdGl2ZT47XG4gICAgQFZpZXdDaGlsZCgnc3VibWl0QnV0dG9uJykgcHVibGljIHN1Ym1pdEJ1dHRvbkVsZW1lbnRSZWYhOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoTW5nRm9ybUVkaXRvckNvbXBvbmVudCkgcHVibGljIGVkaXRvckNvbXBvbmVudCE6IE1uZ0Zvcm1FZGl0b3JDb21wb25lbnQ8VD47XG5cbiAgICBwdWJsaWMgdGl0bGU/OiBzdHJpbmc7XG4gICAgcHVibGljIGlzRGlhbG9nID0gdHJ1ZTtcblxuICAgIC8vIGFjdGlvbnNcbiAgICBwcml2YXRlIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz47XG4gICAgcHJpdmF0ZSBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj47XG4gICAgcHVibGljIHRvb2xiYXJMZWZ0QWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIHRvb2xiYXJSaWdodEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb290ZXJMZWZ0QWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIGZvb3RlclJpZ2h0QWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG5cbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHVibGljIGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwcml2YXRlIHN1Ym1pdExvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHVibGljIHN1Ym1pdExvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdWJtaXRMb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwcml2YXRlIGlzRmluaXNoZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz47XG4gICAgcHVibGljIGRpYWxvZ1JvdXRlPzogQWN0aXZhdGVkUm91dGU7XG4gICAgcHJpdmF0ZSBzb3VyY2VDb21wb25lbnQ6IGFueSA9IHRoaXM7XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aW9uRXhlY3V0b3I6IE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtbmdDb21tb25zU2VydmljZTogTW5nQ29tbW9uc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE1uZ05hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRpYWxvZ1JlZjogRHluYW1pY0RpYWxvZ1JlZiB8IG51bGwsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGlhbG9nQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnIHwgbnVsbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz4gfCBudWxsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5kaWFsb2dDb25maWc/LmRhdGEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZy5kYXRhLmFjdGlvbkluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uSW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uID0gdGhpcy5pbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbUlkID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/Lml0ZW1JZDtcbiAgICAgICAgICAgIHRoaXMuaXRlbSA9IHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25QYXJhbWV0ZXJzPy5pdGVtO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25EYXRhID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/LmFjdGlvbkRhdGE7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8udmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lcjxULCBTPjtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50ID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/LnNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUm91dGUgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8ucm91dGU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVByb3ZpZGVyICYmIHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IHRoaXMudmlld0NvbnRhaW5lci5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVByb3ZpZGVyICYmIHR5cGVvZiBkYXRhUHJvdmlkZXJbJ2ZldGNoJyBhcyBrZXlvZiBvYmplY3RdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEucHJldmlvdXNBY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEucHJldmlvdXNBY3Rpb25JbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaWFsb2cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA9IHRoaXMudmlld0NvbnRhaW5lckluaXQgPz8gdGhpcy52aWV3Q29udGFpbmVyU2VydmljZSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFRpdGxlKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb24uZWRpdG9yQWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5idXR0b24uaWNvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmJ1dHRvbi53aXRoSWNvbihhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0ID8gJ3BpIHBpLWNoZWNrJyA6ICdwaSBwaS10aW1lcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5idXR0b24ubGFiZWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5idXR0b24ud2l0aExhYmVsKGFjdGlvbi5zdWJtaXRUeXBlID09PSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQgPyAnZ2VuZXJhbC5zYXZlJyA6IHRoaXMuaXNEaWFsb2cgPyAnZ2VuZXJhbC5jbG9zZScgOiAnZ2VuZXJhbC5jYW5jZWwnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhc3NpZ24gcnVuIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3ModW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bkZ1bmN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclN1Ym1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bkNvbmZpcm1hdGlvbkRlc2NyaXB0b3IodGhpcy5hY3Rpb24ucnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLndpdGhSdW5GdW5jdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGxhY2VBY3Rpb25zT25Qb3NpdGlvbnMoYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMudmlld0NvbnRhaW5lcj8uZ2V0QWN0aW9ucygpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5wb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXM/LmluY2x1ZGVzKHRoaXMuYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5ISkpID8/IFtdKSB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlQWN0aW9uc09uUG9zaXRpb25zKGFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMgPSB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMucmV2ZXJzZSgpO1xuICAgICAgICB0aGlzLmZvb3RlclJpZ2h0QWN0aW9ucyA9IHRoaXMuZm9vdGVyUmlnaHRBY3Rpb25zLnJldmVyc2UoKTtcblxuICAgICAgICB0aGlzLmxvYWRJdGVtV2l0aERhdGFQcm92aWRlcigpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lckVkaXRvcjxULCBTPik/LmdldEVkaXRvclJlc2V0JCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckVkaXRvciA9IHRoaXMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lckVkaXRvcjxULCBTPjtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXJFZGl0b3IuZ2V0RWRpdG9yUmVzZXQkKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5mZXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEl0ZW1XaXRoRGF0YVByb3ZpZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yQ29tcG9uZW50Py5yZXNldEZvcm1Nb2RlbChlLml0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGUuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yQ29tcG9uZW50Py5yZXNldEZvcm1GaWVsZFZhbHVlKGtleSwgZS5maWVsZHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXJFZGl0b3I8VCwgUz4pPy5nZXRFZGl0b3JDbG9zZSQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdDb250YWluZXJFZGl0b3IgPSB0aGlzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXJFZGl0b3I8VCwgUz47XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyRWRpdG9yLmdldEVkaXRvckNsb3NlJCgpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VibWl0KGV2ZW50OiBNbmdGb3JtRWRpdG9yU3VibWl0RXZlbnQ8VD4pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGaW5pc2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5zdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uLnN1Ym1pdEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucnVuRWRpdG9yU2F2ZShcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbixcbiAgICAgICAgICAgICAgICBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgZXZlbnQuZm9ybUl0ZW0pLndpdGhBY3Rpb25EYXRhKHRoaXMuYWN0aW9uRGF0YSkud2l0aFZpZXdDb250YWluZXIodGhpcy52aWV3Q29udGFpbmVyKS53aXRoU291cmNlQ29tcG9uZW50KHRoaXMuc291cmNlQ29tcG9uZW50KSxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlcixcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNBY3Rpb25JbnN0YW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBjb250ZXh0Lmluc3RhbmNlO1xuXG4gICAgICAgICAgICBjb250ZXh0LmV4ZWN1dGlvbiQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvblJ1bkV2ZW50RW1pdHRlci5uZXh0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZUFjdGlvbihyZXMpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uQ2FuY2VsRXZlbnRFbWl0dGVyLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlQWN0aW9uKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJTdWJtaXQoKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29tcG9uZW50LnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZEl0ZW1XaXRoRGF0YVByb3ZpZGVyKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uLmZldGNoRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnJ1bkVkaXRvckZldGNoKFxuICAgICAgICAgICAgdGhpcy5hY3Rpb24sXG4gICAgICAgICAgICBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKS53aXRoQWN0aW9uRGF0YSh0aGlzLmFjdGlvbkRhdGEpLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lcikud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzLnNvdXJjZUNvbXBvbmVudCksXG4gICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UsXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzQWN0aW9uSW5zdGFuY2VcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGNvbnRleHQuaW5zdGFuY2U7XG5cbiAgICAgICAgY29udGV4dC5leGVjdXRpb24kXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnRvTW5nQWN0aW9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25VdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCB0aGlzLmFjdGlvbiwgYWN0aW9uRXJyb3IsICdmZXRjaCcsIHRoaXMudmlld0NvbnRhaW5lciwgdGhpcy5pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBhY3Rpb25FcnJvcik7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW0gPSByZXMgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICdmZXRjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbi5mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uLmZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUaXRsZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUaXRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmVkaXRvclRpdGxlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dDb25maWchLmhlYWRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBJMThuVXRpbHMuQWN0aW9uLmdldEVkaXRvclRpdGxlQXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuYWN0aW9uLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh0ID0+IHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSB0ID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nQ29uZmlnIS5oZWFkZXIgPSB0ID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tbmdDb21tb25zU2VydmljZS5zZXRQYWdlVGl0bGUodCA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlYWN0aXZhdGVBY3Rpb24oaXRlbT86IFQgfCBudWxsLCBjYW5jZWwgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5pc0RpYWxvZykge1xuICAgICAgICAgICAgLy8gaWYgY2FuY2VsLCB0aGVuIGZvcmNlIGNsb3NlIHRoZSBkaWFsb2dcbiAgICAgICAgICAgIGlmIChjYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZj8uY2xvc2UoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLmRlYWN0aXZhdGVBY3Rpb24odGhpcy5pbnN0YW5jZSEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGFjZUFjdGlvbnNPblBvc2l0aW9ucyhhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55Pikge1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbi5wb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQ6XG4gICAgICAgICAgICAgICAgdGhpcy50b29sYmFyTGVmdEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0OlxuICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJMZWZ0OlxuICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyTGVmdEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXJSaWdodEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGg1ICpuZ0lmPVwiIWlzRGlhbG9nICYmIHRpdGxlXCI+e3sgdGl0bGUgfX08L2g1PlxuPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG1uZy1hY3Rpb24tZWRpdG9yLXRvb2xiYXItY29udGFpbmVyXCIgKm5nSWY9XCJ0b29sYmFyTGVmdEFjdGlvbnMubGVuZ3RoID4gMCB8fCB0b29sYmFyUmlnaHRBY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibW5nLWFjdGlvbi1lZGl0b3ItdG9vbGJhclwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cbiAgICAgICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHRvb2xiYXJMZWZ0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmckXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZpZXdDb250YWluZXJdPVwidmlld0NvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVdPVwiZGlhbG9nUm91dGVcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWRcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0b29sYmFyUmlnaHRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZyRcIlxuICAgICAgICAgICAgICAgICAgICBbdmlld0NvbnRhaW5lcl09XCJ2aWV3Q29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZV09XCJkaWFsb2dSb3V0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZFwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC10b29sYmFyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG1uZy1hY3Rpb24tZWRpdG9yLWZvcm0tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiICpuZ0lmPVwibG9hZGluZyQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIFtzdHlsZV09XCJ7d2lkdGg6ICczcmVtJywgaGVpZ2h0OiAnM3JlbSd9XCIgc3Ryb2tlV2lkdGg9XCIzXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtbmctZm9ybS1lZGl0b3IgKm5nSWY9XCJhY3Rpb24uZWRpdG9yRGVzY3JpcHRvciAmJiAobG9hZGluZyQgfCBhc3luYykgPT09IGZhbHNlXCIgW2Rlc2NyaXB0b3JdPVwiYWN0aW9uLmVkaXRvckRlc2NyaXB0b3JcIiBbaXRlbV09XCJpdGVtXCIgKGZvcm1TdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiPlxuICAgICAgICA8L21uZy1mb3JtLWVkaXRvcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1uZy1hY3Rpb24tZWRpdG9yLWZvb3Rlci1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBmb290ZXJMZWZ0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nJFwiXG4gICAgICAgICAgICAgICAgW3ZpZXdDb250YWluZXJdPVwidmlld0NvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlXT1cImRpYWxvZ1JvdXRlXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZFwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZm9vdGVyUmlnaHRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmckXCJcbiAgICAgICAgICAgICAgICBbdmlld0NvbnRhaW5lcl09XCJ2aWV3Q29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICBbcm91dGVdPVwiZGlhbG9nUm91dGVcIlxuICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { ReplaySubject, of, throwError } from 'rxjs';
|
|
3
|
+
import { catchError, finalize, first } from 'rxjs/operators';
|
|
4
|
+
import { ActionEditorSubmitDescriptor } from '../../../descriptors';
|
|
5
|
+
import { ActionEditorSubmitTypeEnum, ActionPositionEnum } from '../../../descriptors/types';
|
|
6
|
+
import { MngTemplateDirective } from '../../../directives';
|
|
7
|
+
import { I18nUtils, NotificationUtil } from '../../../utils';
|
|
8
|
+
import { MngFormEditorComponent } from '../../form';
|
|
9
|
+
import { ActionParameters } from '../models';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@ngx-translate/core";
|
|
12
|
+
import * as i2 from "../../../services";
|
|
13
|
+
import * as i3 from "primeng/dynamicdialog";
|
|
14
|
+
import * as i4 from "@angular/common";
|
|
15
|
+
import * as i5 from "primeng/api";
|
|
16
|
+
import * as i6 from "primeng/toolbar";
|
|
17
|
+
import * as i7 from "primeng/progressspinner";
|
|
18
|
+
import * as i8 from "../../form/editor/form-editor.component";
|
|
19
|
+
import * as i9 from "../action.component";
|
|
20
|
+
export class MngActionEditorComponent {
|
|
21
|
+
constructor(injector, translate, actionExecutor, mngCommonsService, navigationService, dialogRef, dialogConfig, viewContainerService) {
|
|
22
|
+
this.injector = injector;
|
|
23
|
+
this.translate = translate;
|
|
24
|
+
this.actionExecutor = actionExecutor;
|
|
25
|
+
this.mngCommonsService = mngCommonsService;
|
|
26
|
+
this.navigationService = navigationService;
|
|
27
|
+
this.dialogRef = dialogRef;
|
|
28
|
+
this.dialogConfig = dialogConfig;
|
|
29
|
+
this.viewContainerService = viewContainerService;
|
|
30
|
+
this.actionEditorSubmitTypeSubmit = ActionEditorSubmitTypeEnum.Submit;
|
|
31
|
+
this.actionDefaultLoadingInput = of(false);
|
|
32
|
+
this.actionRunEventEmitter = new EventEmitter();
|
|
33
|
+
this.actionCancelEventEmitter = new EventEmitter();
|
|
34
|
+
this.isDialog = true;
|
|
35
|
+
this.toolbarLeftActions = [];
|
|
36
|
+
this.toolbarRightActions = [];
|
|
37
|
+
this.footerLeftActions = [];
|
|
38
|
+
this.footerRightActions = [];
|
|
39
|
+
this.loadingSubject = new ReplaySubject(1);
|
|
40
|
+
this.loading$ = this.loadingSubject.asObservable();
|
|
41
|
+
this.submitActionIdSubject = new ReplaySubject(1);
|
|
42
|
+
this.submitLoadingSubject = new ReplaySubject(1);
|
|
43
|
+
this.submitLoading$ = this.submitLoadingSubject.asObservable();
|
|
44
|
+
this.isFinished = false;
|
|
45
|
+
this.sourceComponent = this;
|
|
46
|
+
this.subscriptions = [];
|
|
47
|
+
}
|
|
48
|
+
ngOnInit() {
|
|
49
|
+
if (this.dialogConfig?.data) {
|
|
50
|
+
if (this.dialogConfig.data.actionInstance) {
|
|
51
|
+
this.instance = this.dialogConfig.data.actionInstance;
|
|
52
|
+
}
|
|
53
|
+
if (this.instance) {
|
|
54
|
+
this.action = this.instance.action;
|
|
55
|
+
}
|
|
56
|
+
this.itemId = this.instance?.activationParameters?.itemId;
|
|
57
|
+
this.item = this.instance?.activationParameters?.item;
|
|
58
|
+
this.actionData = this.instance?.activationParameters?.actionData;
|
|
59
|
+
this.viewContainer = this.instance?.activationParameters?.viewContainer;
|
|
60
|
+
this.sourceComponent = this.instance?.activationParameters?.sourceComponent;
|
|
61
|
+
this.dialogRoute = this.instance?.activationParameters?.route;
|
|
62
|
+
if (!this.dataProvider && this.viewContainer) {
|
|
63
|
+
const dataProvider = this.viewContainer.getDataProvider();
|
|
64
|
+
if (dataProvider && typeof dataProvider['fetch'] === 'function') {
|
|
65
|
+
this.dataProvider = dataProvider;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (this.dialogConfig.data.previousActionInstance) {
|
|
69
|
+
this.previousActionInstance = this.dialogConfig.data.previousActionInstance;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
this.isDialog = false;
|
|
74
|
+
this.viewContainer = this.viewContainerInit ?? this.viewContainerService ?? undefined;
|
|
75
|
+
}
|
|
76
|
+
this.setTitle();
|
|
77
|
+
for (const action of this.action.editorActions) {
|
|
78
|
+
if (action instanceof ActionEditorSubmitDescriptor) {
|
|
79
|
+
if (typeof action.button.icon === 'undefined') {
|
|
80
|
+
action.button.withIcon(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'pi pi-check' : 'pi pi-times');
|
|
81
|
+
}
|
|
82
|
+
if (typeof action.button.label === 'undefined') {
|
|
83
|
+
action.button.withLabel(action.submitType === ActionEditorSubmitTypeEnum.Submit ? 'general.save' : this.isDialog ? 'general.close' : 'general.cancel');
|
|
84
|
+
}
|
|
85
|
+
// assign run operations
|
|
86
|
+
action.withRunNotificationSuccess(undefined, undefined, false);
|
|
87
|
+
if (action.submitType === ActionEditorSubmitTypeEnum.Submit) {
|
|
88
|
+
action.withRunFunction(() => {
|
|
89
|
+
this.triggerSubmit();
|
|
90
|
+
return of(undefined);
|
|
91
|
+
});
|
|
92
|
+
if (this.action.hasRunConfirmation) {
|
|
93
|
+
action.withRunConfirmationDescriptor(this.action.runConfirmationDialogDescriptor);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
action.withRunFunction(() => {
|
|
98
|
+
this.cancel();
|
|
99
|
+
return of(undefined);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
this.placeActionsOnPositions(action);
|
|
104
|
+
}
|
|
105
|
+
for (const action of this.viewContainer?.getActions().filter(value => value.positionTableviewCategories?.includes(this.action.tableviewCategory)) ?? []) {
|
|
106
|
+
this.placeActionsOnPositions(action);
|
|
107
|
+
}
|
|
108
|
+
this.toolbarRightActions = this.toolbarRightActions.reverse();
|
|
109
|
+
this.footerRightActions = this.footerRightActions.reverse();
|
|
110
|
+
this.loadItemWithDataProvider();
|
|
111
|
+
if (typeof this.viewContainer?.getEditorReset$ === 'function') {
|
|
112
|
+
const viewContainerEditor = this.viewContainer;
|
|
113
|
+
this.subscriptions.push(viewContainerEditor.getEditorReset$().subscribe({
|
|
114
|
+
next: e => {
|
|
115
|
+
if (e.fetch) {
|
|
116
|
+
this.loadItemWithDataProvider();
|
|
117
|
+
}
|
|
118
|
+
else if (e.item) {
|
|
119
|
+
this.editorComponent?.resetFormModel(e.item);
|
|
120
|
+
}
|
|
121
|
+
else if (e.fields) {
|
|
122
|
+
for (const key in e.fields) {
|
|
123
|
+
this.editorComponent?.resetFormFieldValue(key, e.fields[key]);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
if (typeof this.viewContainer?.getEditorClose$ === 'function') {
|
|
130
|
+
const viewContainerEditor = this.viewContainer;
|
|
131
|
+
this.subscriptions.push(viewContainerEditor.getEditorClose$().subscribe({
|
|
132
|
+
next: e => {
|
|
133
|
+
this.cancel();
|
|
134
|
+
}
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
ngOnDestroy() {
|
|
139
|
+
this.subscriptions.forEach(s => s.unsubscribe());
|
|
140
|
+
}
|
|
141
|
+
onSubmit(event) {
|
|
142
|
+
if (this.isFinished) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (event.success) {
|
|
146
|
+
if (typeof this.action.submitFunction !== 'function') {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
this.submitLoadingSubject.next(true);
|
|
150
|
+
const actionParameters = new ActionParameters(this.itemId, event.formItem)
|
|
151
|
+
.withActionData(this.actionData)
|
|
152
|
+
.withViewContainer(this.viewContainer)
|
|
153
|
+
.withSourceComponent(this.sourceComponent);
|
|
154
|
+
if (this.action.editorDescriptor.isLocalized) {
|
|
155
|
+
actionParameters.withLocale(this.mngCommonsService.appDataLanguageDefault);
|
|
156
|
+
}
|
|
157
|
+
const context = this.actionExecutor.runEditorSave(this.action, actionParameters, this.dataProvider, this.instance, this.previousActionInstance);
|
|
158
|
+
this.instance = context.instance;
|
|
159
|
+
context.execution$.subscribe({
|
|
160
|
+
next: res => {
|
|
161
|
+
this.isFinished = true;
|
|
162
|
+
this.submitLoadingSubject.next(false);
|
|
163
|
+
this.actionRunEventEmitter.next(res);
|
|
164
|
+
this.deactivateAction(res);
|
|
165
|
+
},
|
|
166
|
+
error: () => {
|
|
167
|
+
this.submitLoadingSubject.next(false);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
cancel() {
|
|
173
|
+
this.actionCancelEventEmitter.next(undefined);
|
|
174
|
+
this.deactivateAction(undefined, true);
|
|
175
|
+
}
|
|
176
|
+
triggerSubmit() {
|
|
177
|
+
this.editorComponent.submit();
|
|
178
|
+
}
|
|
179
|
+
loadItemWithDataProvider() {
|
|
180
|
+
if (typeof this.action.fetchFunction !== 'function') {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
this.loadingSubject.next(true);
|
|
184
|
+
const actionParameters = new ActionParameters(this.itemId, this.item)
|
|
185
|
+
.withActionData(this.actionData)
|
|
186
|
+
.withViewContainer(this.viewContainer)
|
|
187
|
+
.withSourceComponent(this.sourceComponent);
|
|
188
|
+
if (this.action.editorDescriptor.isLocalized) {
|
|
189
|
+
if (this.action.editorDescriptor.disabled) {
|
|
190
|
+
actionParameters.withLocale(this.mngCommonsService.appDataLanguage);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
actionParameters.withLocale(this.mngCommonsService.appDataLanguageDefault);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const context = this.actionExecutor.runEditorFetch(this.action, actionParameters, this.dataProvider, this.instance, this.previousActionInstance);
|
|
197
|
+
this.instance = context.instance;
|
|
198
|
+
context.execution$
|
|
199
|
+
.pipe(first(), catchError(err => {
|
|
200
|
+
const actionError = this.actionExecutor.toMngActionError(err);
|
|
201
|
+
if (this.action.hasRunNotificationError) {
|
|
202
|
+
NotificationUtil.actionNotificationError(this.translate, this.action, actionError, 'fetch', this.viewContainer, this.item);
|
|
203
|
+
}
|
|
204
|
+
return throwError(() => actionError);
|
|
205
|
+
}), finalize(() => this.loadingSubject.next(false)))
|
|
206
|
+
.subscribe(res => {
|
|
207
|
+
this.item = res ?? undefined;
|
|
208
|
+
if (this.action.hasFetchNotificationSuccess) {
|
|
209
|
+
NotificationUtil.actionNotificationSuccess(this.translate, this.action, 'fetch', this.action.fetchNotificationSuccessTitle, this.action.fetchNotificationSuccessMessage, this.viewContainer, this.item);
|
|
210
|
+
}
|
|
211
|
+
this.setTitle();
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
setTitle() {
|
|
215
|
+
if (this.action.editorTitle === null) {
|
|
216
|
+
this.title = undefined;
|
|
217
|
+
if (this.dialogConfig) {
|
|
218
|
+
requestAnimationFrame(() => {
|
|
219
|
+
this.dialogConfig.header = undefined;
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const subscription = I18nUtils.Action.getEditorTitleAsync(this.translate, this.action, this.item).subscribe(t => {
|
|
225
|
+
this.title = t ?? undefined;
|
|
226
|
+
if (this.dialogConfig) {
|
|
227
|
+
requestAnimationFrame(() => {
|
|
228
|
+
this.dialogConfig.header = t ?? undefined;
|
|
229
|
+
this.mngCommonsService.setPageTitle(t ?? undefined);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
this.subscriptions.push(subscription);
|
|
234
|
+
}
|
|
235
|
+
deactivateAction(item, cancel = false) {
|
|
236
|
+
if (this.isDialog) {
|
|
237
|
+
// if cancel, then force close the dialog
|
|
238
|
+
if (cancel) {
|
|
239
|
+
this.dialogRef?.close(item);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
this.actionExecutor.deactivateAction(this.instance);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
placeActionsOnPositions(action) {
|
|
247
|
+
switch (action.position) {
|
|
248
|
+
case ActionPositionEnum.ToolbarLeft:
|
|
249
|
+
this.toolbarLeftActions.push(action);
|
|
250
|
+
break;
|
|
251
|
+
case ActionPositionEnum.ToolbarRight:
|
|
252
|
+
this.toolbarRightActions.push(action);
|
|
253
|
+
break;
|
|
254
|
+
case ActionPositionEnum.FooterLeft:
|
|
255
|
+
this.footerLeftActions.push(action);
|
|
256
|
+
break;
|
|
257
|
+
case ActionPositionEnum.FooterRight:
|
|
258
|
+
this.footerRightActions.push(action);
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
MngActionEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionEditorComponent, deps: [{ token: i0.Injector }, { token: i1.TranslateService }, { token: i2.MngActionExecutorService }, { token: i2.MngCommonsService }, { token: i2.MngNavigationService }, { token: i3.DynamicDialogRef, optional: true }, { token: i3.DynamicDialogConfig, optional: true }, { token: i2.MngViewContainerComponentService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
264
|
+
MngActionEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngActionEditorComponent, selector: "mng-action-editor", inputs: { action: "action", itemId: "itemId", item: "item", actionData: "actionData", dataProvider: "dataProvider", viewContainerInit: ["viewContainer", "viewContainerInit"] }, outputs: { actionRunEventEmitter: "actionSubmit", actionCancelEventEmitter: "actionCancel" }, queries: [{ propertyName: "templates", predicate: MngTemplateDirective }], viewQueries: [{ propertyName: "submitButtonElementRef", first: true, predicate: ["submitButton"], descendants: true }, { propertyName: "editorComponent", first: true, predicate: MngFormEditorComponent, descendants: true }], ngImport: i0, template: "<h5 *ngIf=\"!isDialog && title\">{{ title }}</h5>\n<div class=\"h-full flex flex-column\">\n <div class=\"flex-grow-1 mng-action-editor-toolbar-container\" *ngIf=\"toolbarLeftActions.length > 0 || toolbarRightActions.length > 0\">\n <p-toolbar styleClass=\"mng-action-editor-toolbar\">\n <ng-template pTemplate=\"left\">\n <mng-action\n *ngFor=\"let action of toolbarLeftActions\"\n [action]=\"action\"\n [disabled]=\"submitLoading$\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading$ : actionDefaultLoadingInput\"\n [viewContainer]=\"viewContainer\"\n [hostComponent]=\"this\"\n [route]=\"dialogRoute\"\n [item]=\"item\"\n [itemId]=\"itemId\"></mng-action>\n </ng-template>\n <ng-template pTemplate=\"right\">\n <mng-action\n *ngFor=\"let action of toolbarRightActions\"\n [action]=\"action\"\n [disabled]=\"submitLoading$\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading$ : actionDefaultLoadingInput\"\n [viewContainer]=\"viewContainer\"\n [hostComponent]=\"this\"\n [route]=\"dialogRoute\"\n [item]=\"item\"\n [itemId]=\"itemId\"></mng-action>\n </ng-template>\n </p-toolbar>\n </div>\n\n <div class=\"flex-grow-1 mng-action-editor-form-container\">\n <div class=\"text-center\" *ngIf=\"loading$ | async\">\n <p-progressSpinner [style]=\"{width: '3rem', height: '3rem'}\" strokeWidth=\"3\"></p-progressSpinner>\n </div>\n <mng-form-editor *ngIf=\"action.editorDescriptor && (loading$ | async) === false\" [descriptor]=\"action.editorDescriptor\" [item]=\"item\" (formSubmit)=\"onSubmit($event)\">\n </mng-form-editor>\n </div>\n\n <div class=\"flex flex-row justify-content-between mng-action-editor-footer-container\">\n <div>\n <mng-action\n *ngFor=\"let action of footerLeftActions\"\n [action]=\"action\"\n [disabled]=\"submitLoading$\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading$ : actionDefaultLoadingInput\"\n [viewContainer]=\"viewContainer\"\n [hostComponent]=\"this\"\n [route]=\"dialogRoute\"\n [item]=\"item\"\n [itemId]=\"itemId\"></mng-action>\n </div>\n <div>\n <mng-action\n *ngFor=\"let action of footerRightActions\"\n [action]=\"action\"\n [disabled]=\"submitLoading$\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading$ : actionDefaultLoadingInput\"\n [viewContainer]=\"viewContainer\"\n [hostComponent]=\"this\"\n [route]=\"dialogRoute\"\n [item]=\"item\"\n [itemId]=\"itemId\"></mng-action>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["style", "styleClass", "strokeWidth", "fill", "animationDuration"] }, { kind: "component", type: i8.MngFormEditorComponent, selector: "mng-form-editor", inputs: ["descriptor", "submitLoading", "item", "isSubmitButtonVisible", "isFormDisabled"], outputs: ["formSubmit"] }, { kind: "component", type: i9.MngActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData", "queryParam", "dataProvider", "hostComponent", "route", "disabled", "loading", "viewContainer", "selectedItems"], outputs: ["finish"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
265
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngActionEditorComponent, decorators: [{
|
|
266
|
+
type: Component,
|
|
267
|
+
args: [{ selector: 'mng-action-editor', changeDetection: ChangeDetectionStrategy.OnPush, template: "<h5 *ngIf=\"!isDialog && title\">{{ title }}</h5>\n<div class=\"h-full flex flex-column\">\n <div class=\"flex-grow-1 mng-action-editor-toolbar-container\" *ngIf=\"toolbarLeftActions.length > 0 || toolbarRightActions.length > 0\">\n <p-toolbar styleClass=\"mng-action-editor-toolbar\">\n <ng-template pTemplate=\"left\">\n <mng-action\n *ngFor=\"let action of toolbarLeftActions\"\n [action]=\"action\"\n [disabled]=\"submitLoading$\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading$ : actionDefaultLoadingInput\"\n [viewContainer]=\"viewContainer\"\n [hostComponent]=\"this\"\n [route]=\"dialogRoute\"\n [item]=\"item\"\n [itemId]=\"itemId\"></mng-action>\n </ng-template>\n <ng-template pTemplate=\"right\">\n <mng-action\n *ngFor=\"let action of toolbarRightActions\"\n [action]=\"action\"\n [disabled]=\"submitLoading$\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading$ : actionDefaultLoadingInput\"\n [viewContainer]=\"viewContainer\"\n [hostComponent]=\"this\"\n [route]=\"dialogRoute\"\n [item]=\"item\"\n [itemId]=\"itemId\"></mng-action>\n </ng-template>\n </p-toolbar>\n </div>\n\n <div class=\"flex-grow-1 mng-action-editor-form-container\">\n <div class=\"text-center\" *ngIf=\"loading$ | async\">\n <p-progressSpinner [style]=\"{width: '3rem', height: '3rem'}\" strokeWidth=\"3\"></p-progressSpinner>\n </div>\n <mng-form-editor *ngIf=\"action.editorDescriptor && (loading$ | async) === false\" [descriptor]=\"action.editorDescriptor\" [item]=\"item\" (formSubmit)=\"onSubmit($event)\">\n </mng-form-editor>\n </div>\n\n <div class=\"flex flex-row justify-content-between mng-action-editor-footer-container\">\n <div>\n <mng-action\n *ngFor=\"let action of footerLeftActions\"\n [action]=\"action\"\n [disabled]=\"submitLoading$\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading$ : actionDefaultLoadingInput\"\n [viewContainer]=\"viewContainer\"\n [hostComponent]=\"this\"\n [route]=\"dialogRoute\"\n [item]=\"item\"\n [itemId]=\"itemId\"></mng-action>\n </div>\n <div>\n <mng-action\n *ngFor=\"let action of footerRightActions\"\n [action]=\"action\"\n [disabled]=\"submitLoading$\"\n [loading]=\"$any(action).submitType === actionEditorSubmitTypeSubmit ? submitLoading$ : actionDefaultLoadingInput\"\n [viewContainer]=\"viewContainer\"\n [hostComponent]=\"this\"\n [route]=\"dialogRoute\"\n [item]=\"item\"\n [itemId]=\"itemId\"></mng-action>\n </div>\n </div>\n</div>\n" }]
|
|
268
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.TranslateService }, { type: i2.MngActionExecutorService }, { type: i2.MngCommonsService }, { type: i2.MngNavigationService }, { type: i3.DynamicDialogRef, decorators: [{
|
|
269
|
+
type: Optional
|
|
270
|
+
}] }, { type: i3.DynamicDialogConfig, decorators: [{
|
|
271
|
+
type: Optional
|
|
272
|
+
}] }, { type: i2.MngViewContainerComponentService, decorators: [{
|
|
273
|
+
type: Optional
|
|
274
|
+
}] }]; }, propDecorators: { action: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], itemId: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}], item: [{
|
|
279
|
+
type: Input
|
|
280
|
+
}], actionData: [{
|
|
281
|
+
type: Input
|
|
282
|
+
}], dataProvider: [{
|
|
283
|
+
type: Input
|
|
284
|
+
}], viewContainerInit: [{
|
|
285
|
+
type: Input,
|
|
286
|
+
args: ['viewContainer']
|
|
287
|
+
}], actionRunEventEmitter: [{
|
|
288
|
+
type: Output,
|
|
289
|
+
args: ['actionSubmit']
|
|
290
|
+
}], actionCancelEventEmitter: [{
|
|
291
|
+
type: Output,
|
|
292
|
+
args: ['actionCancel']
|
|
293
|
+
}], templates: [{
|
|
294
|
+
type: ContentChildren,
|
|
295
|
+
args: [MngTemplateDirective]
|
|
296
|
+
}], submitButtonElementRef: [{
|
|
297
|
+
type: ViewChild,
|
|
298
|
+
args: ['submitButton']
|
|
299
|
+
}], editorComponent: [{
|
|
300
|
+
type: ViewChild,
|
|
301
|
+
args: [MngFormEditorComponent]
|
|
302
|
+
}] } });
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvYWN0aW9uL2VkaXRvci9hY3Rpb24tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vZWRpdG9yL2FjdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFFWixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFhLGFBQWEsRUFBZ0IsRUFBRSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3RSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUczRCxPQUFPLEVBQTJDLDRCQUE0QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUcsT0FBTyxFQUFDLDBCQUEwQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFJekQsT0FBTyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVsRCxPQUFPLEVBQTZCLGdCQUFnQixFQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7OztBQU92RSxNQUFNLE9BQU8sd0JBQXdCO0lBOENqQyxZQUNZLFFBQWtCLEVBQ2xCLFNBQTJCLEVBQzNCLGNBQXdDLEVBQ3hDLGlCQUFvQyxFQUNwQyxpQkFBdUMsRUFDM0IsU0FB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QWtFQTsyRkQzQmEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNJLG1CQUFtQixtQkFFWix1QkFBdUIsQ0FBQyxNQUFNOzswQkFzRDFDLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7NENBakRHLE1BQU07c0JBQXJCLEtBQUs7Z0JBR1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDeUIsaUJBQWlCO3NCQUEvQyxLQUFLO3VCQUFDLGVBQWU7Z0JBRVMscUJBQXFCO3NCQUFuRCxNQUFNO3VCQUFDLGNBQWM7Z0JBQ1Msd0JBQXdCO3NCQUF0RCxNQUFNO3VCQUFDLGNBQWM7Z0JBR3dCLFNBQVM7c0JBQXRELGVBQWU7dUJBQUMsb0JBQW9CO2dCQUNILHNCQUFzQjtzQkFBdkQsU0FBUzt1QkFBQyxjQUFjO2dCQUNpQixlQUFlO3NCQUF4RCxTQUFTO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbmFsaXplLCBmaXJzdH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0lFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bSwgQWN0aW9uUG9zaXRpb25FbnVtfSBmcm9tICcuLi8uLi8uLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge01uZ1RlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7SVZpZXdDb250YWluZXIsIElWaWV3Q29udGFpbmVyRWRpdG9yfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsIE1uZ0NvbW1vbnNTZXJ2aWNlLCBNbmdOYXZpZ2F0aW9uU2VydmljZSwgTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7SWRUeXBlfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQge0kxOG5VdGlscywgTm90aWZpY2F0aW9uVXRpbH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdGb3JtRWRpdG9yQ29tcG9uZW50fSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7TW5nRm9ybUVkaXRvclN1Ym1pdEV2ZW50fSBmcm9tICcuLi8uLi9mb3JtL21vZGVscyc7XG5pbXBvcnQge0FjdGlvbkRhdGEsIEFjdGlvbkluc3RhbmNlLCBBY3Rpb25QYXJhbWV0ZXJzfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy1hY3Rpb24tZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nQWN0aW9uRWRpdG9yQ29tcG9uZW50PFQsIFM+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0O1xuICAgIHB1YmxpYyByZWFkb25seSBhY3Rpb25EZWZhdWx0TG9hZGluZ0lucHV0ID0gb2YoZmFsc2UpO1xuXG4gICAgLy8gbWV0YWRhdGEgYW5kIGVkaXRvciBtb2RlIGlucHV0XG4gICAgQElucHV0KCkgcHVibGljIGFjdGlvbiE6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD47XG5cbiAgICAvLyBkYXRhIHNvdXJjZSBpbnB1dHNcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbUlkPzogSWRUeXBlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtPzogVDtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGE7XG4gICAgQElucHV0KCkgcHVibGljIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz47XG4gICAgQElucHV0KCd2aWV3Q29udGFpbmVyJykgcHVibGljIHZpZXdDb250YWluZXJJbml0PzogSVZpZXdDb250YWluZXI8VCwgUz47XG5cbiAgICBAT3V0cHV0KCdhY3Rpb25TdWJtaXQnKSBwdWJsaWMgYWN0aW9uUnVuRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxUIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcbiAgICBAT3V0cHV0KCdhY3Rpb25DYW5jZWwnKSBwdWJsaWMgYWN0aW9uQ2FuY2VsRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxUIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTW5nVGVtcGxhdGVEaXJlY3RpdmUpIHB1YmxpYyB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8TW5nVGVtcGxhdGVEaXJlY3RpdmU+O1xuICAgIEBWaWV3Q2hpbGQoJ3N1Ym1pdEJ1dHRvbicpIHB1YmxpYyBzdWJtaXRCdXR0b25FbGVtZW50UmVmITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKE1uZ0Zvcm1FZGl0b3JDb21wb25lbnQpIHB1YmxpYyBlZGl0b3JDb21wb25lbnQhOiBNbmdGb3JtRWRpdG9yQ29tcG9uZW50PFQ+O1xuXG4gICAgcHVibGljIHRpdGxlPzogc3RyaW5nO1xuICAgIHB1YmxpYyBpc0RpYWxvZyA9IHRydWU7XG5cbiAgICAvLyBhY3Rpb25zXG4gICAgcHJpdmF0ZSBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+O1xuICAgIHByaXZhdGUgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+O1xuICAgIHB1YmxpYyB0b29sYmFyTGVmdEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10gPSBbXTtcbiAgICBwdWJsaWMgZm9vdGVyTGVmdEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyBmb290ZXJSaWdodEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBsb2FkaW5nU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHB1YmxpYyBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHJpdmF0ZSBzdWJtaXRBY3Rpb25JZFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwcml2YXRlIHN1Ym1pdExvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHVibGljIHN1Ym1pdExvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zdWJtaXRMb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwcml2YXRlIGlzRmluaXNoZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz47XG4gICAgcHVibGljIGRpYWxvZ1JvdXRlPzogQWN0aXZhdGVkUm91dGU7XG4gICAgcHJpdmF0ZSBzb3VyY2VDb21wb25lbnQ6IGFueSA9IHRoaXM7XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aW9uRXhlY3V0b3I6IE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtbmdDb21tb25zU2VydmljZTogTW5nQ29tbW9uc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE1uZ05hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRpYWxvZ1JlZjogRHluYW1pY0RpYWxvZ1JlZiB8IG51bGwsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGlhbG9nQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnIHwgbnVsbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz4gfCBudWxsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5kaWFsb2dDb25maWc/LmRhdGEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZy5kYXRhLmFjdGlvbkluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uSW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uID0gdGhpcy5pbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbUlkID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/Lml0ZW1JZDtcbiAgICAgICAgICAgIHRoaXMuaXRlbSA9IHRoaXMuaW5zdGFuY2U/LmFjdGl2YXRpb25QYXJhbWV0ZXJzPy5pdGVtO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25EYXRhID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/LmFjdGlvbkRhdGE7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8udmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lcjxULCBTPjtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50ID0gdGhpcy5pbnN0YW5jZT8uYWN0aXZhdGlvblBhcmFtZXRlcnM/LnNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUm91dGUgPSB0aGlzLmluc3RhbmNlPy5hY3RpdmF0aW9uUGFyYW1ldGVycz8ucm91dGU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YVByb3ZpZGVyICYmIHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IHRoaXMudmlld0NvbnRhaW5lci5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVByb3ZpZGVyICYmIHR5cGVvZiBkYXRhUHJvdmlkZXJbJ2ZldGNoJyBhcyBrZXlvZiBvYmplY3RdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEucHJldmlvdXNBY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHRoaXMuZGlhbG9nQ29uZmlnLmRhdGEucHJldmlvdXNBY3Rpb25JbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaWFsb2cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA9IHRoaXMudmlld0NvbnRhaW5lckluaXQgPz8gdGhpcy52aWV3Q29udGFpbmVyU2VydmljZSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFRpdGxlKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb24uZWRpdG9yQWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5idXR0b24uaWNvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmJ1dHRvbi53aXRoSWNvbihhY3Rpb24uc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0VHlwZUVudW0uU3VibWl0ID8gJ3BpIHBpLWNoZWNrJyA6ICdwaSBwaS10aW1lcycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5idXR0b24ubGFiZWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5idXR0b24ud2l0aExhYmVsKGFjdGlvbi5zdWJtaXRUeXBlID09PSBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5TdWJtaXQgPyAnZ2VuZXJhbC5zYXZlJyA6IHRoaXMuaXNEaWFsb2cgPyAnZ2VuZXJhbC5jbG9zZScgOiAnZ2VuZXJhbC5jYW5jZWwnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhc3NpZ24gcnVuIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3ModW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnN1Ym1pdFR5cGUgPT09IEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLlN1Ym1pdCkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bkZ1bmN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclN1Ym1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ud2l0aFJ1bkNvbmZpcm1hdGlvbkRlc2NyaXB0b3IodGhpcy5hY3Rpb24ucnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLndpdGhSdW5GdW5jdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGxhY2VBY3Rpb25zT25Qb3NpdGlvbnMoYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMudmlld0NvbnRhaW5lcj8uZ2V0QWN0aW9ucygpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5wb3NpdGlvblRhYmxldmlld0NhdGVnb3JpZXM/LmluY2x1ZGVzKHRoaXMuYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5ISkpID8/IFtdKSB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlQWN0aW9uc09uUG9zaXRpb25zKGFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMgPSB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMucmV2ZXJzZSgpO1xuICAgICAgICB0aGlzLmZvb3RlclJpZ2h0QWN0aW9ucyA9IHRoaXMuZm9vdGVyUmlnaHRBY3Rpb25zLnJldmVyc2UoKTtcblxuICAgICAgICB0aGlzLmxvYWRJdGVtV2l0aERhdGFQcm92aWRlcigpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lckVkaXRvcjxULCBTPik/LmdldEVkaXRvclJlc2V0JCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckVkaXRvciA9IHRoaXMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lckVkaXRvcjxULCBTPjtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXJFZGl0b3IuZ2V0RWRpdG9yUmVzZXQkKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5mZXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEl0ZW1XaXRoRGF0YVByb3ZpZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yQ29tcG9uZW50Py5yZXNldEZvcm1Nb2RlbChlLml0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGUuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yQ29tcG9uZW50Py5yZXNldEZvcm1GaWVsZFZhbHVlKGtleSwgZS5maWVsZHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXJFZGl0b3I8VCwgUz4pPy5nZXRFZGl0b3JDbG9zZSQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdDb250YWluZXJFZGl0b3IgPSB0aGlzLnZpZXdDb250YWluZXIgYXMgSVZpZXdDb250YWluZXJFZGl0b3I8VCwgUz47XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyRWRpdG9yLmdldEVkaXRvckNsb3NlJCgpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VibWl0KGV2ZW50OiBNbmdGb3JtRWRpdG9yU3VibWl0RXZlbnQ8VD4pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGaW5pc2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5zdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uLnN1Ym1pdEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uUGFyYW1ldGVycyA9IG5ldyBBY3Rpb25QYXJhbWV0ZXJzKHRoaXMuaXRlbUlkLCBldmVudC5mb3JtSXRlbSlcbiAgICAgICAgICAgICAgICAud2l0aEFjdGlvbkRhdGEodGhpcy5hY3Rpb25EYXRhKVxuICAgICAgICAgICAgICAgIC53aXRoVmlld0NvbnRhaW5lcih0aGlzLnZpZXdDb250YWluZXIpXG4gICAgICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQodGhpcy5zb3VyY2VDb21wb25lbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmVkaXRvckRlc2NyaXB0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXJhbWV0ZXJzLndpdGhMb2NhbGUodGhpcy5tbmdDb21tb25zU2VydmljZS5hcHBEYXRhTGFuZ3VhZ2VEZWZhdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnJ1bkVkaXRvclNhdmUodGhpcy5hY3Rpb24sIGFjdGlvblBhcmFtZXRlcnMsIHRoaXMuZGF0YVByb3ZpZGVyLCB0aGlzLmluc3RhbmNlLCB0aGlzLnByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGNvbnRleHQuaW5zdGFuY2U7XG5cbiAgICAgICAgICAgIGNvbnRleHQuZXhlY3V0aW9uJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNGaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0TG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUnVuRXZlbnRFbWl0dGVyLm5leHQocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlQWN0aW9uKHJlcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25DYW5jZWxFdmVudEVtaXR0ZXIubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGVBY3Rpb24odW5kZWZpbmVkLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlclN1Ym1pdCgpIHtcbiAgICAgICAgdGhpcy5lZGl0b3JDb21wb25lbnQuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkSXRlbVdpdGhEYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb24uZmV0Y2hGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgY29uc3QgYWN0aW9uUGFyYW1ldGVycyA9IG5ldyBBY3Rpb25QYXJhbWV0ZXJzKHRoaXMuaXRlbUlkLCB0aGlzLml0ZW0pXG4gICAgICAgICAgICAud2l0aEFjdGlvbkRhdGEodGhpcy5hY3Rpb25EYXRhKVxuICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lcilcbiAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KHRoaXMuc291cmNlQ29tcG9uZW50KTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmVkaXRvckRlc2NyaXB0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5lZGl0b3JEZXNjcmlwdG9yLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUGFyYW1ldGVycy53aXRoTG9jYWxlKHRoaXMubW5nQ29tbW9uc1NlcnZpY2UuYXBwRGF0YUxhbmd1YWdlISk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhcmFtZXRlcnMud2l0aExvY2FsZSh0aGlzLm1uZ0NvbW1vbnNTZXJ2aWNlLmFwcERhdGFMYW5ndWFnZURlZmF1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnJ1bkVkaXRvckZldGNoKHRoaXMuYWN0aW9uLCBhY3Rpb25QYXJhbWV0ZXJzLCB0aGlzLmRhdGFQcm92aWRlciwgdGhpcy5pbnN0YW5jZSwgdGhpcy5wcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGNvbnRleHQuaW5zdGFuY2U7XG5cbiAgICAgICAgY29udGV4dC5leGVjdXRpb24kXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnRvTW5nQWN0aW9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25VdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCB0aGlzLmFjdGlvbiwgYWN0aW9uRXJyb3IsICdmZXRjaCcsIHRoaXMudmlld0NvbnRhaW5lciwgdGhpcy5pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBhY3Rpb25FcnJvcik7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW0gPSByZXMgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbi5oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICdmZXRjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbi5mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uLmZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUaXRsZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUaXRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmVkaXRvclRpdGxlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlhbG9nQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dDb25maWchLmhlYWRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBJMThuVXRpbHMuQWN0aW9uLmdldEVkaXRvclRpdGxlQXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuYWN0aW9uLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh0ID0+IHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSB0ID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0NvbmZpZykge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nQ29uZmlnIS5oZWFkZXIgPSB0ID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tbmdDb21tb25zU2VydmljZS5zZXRQYWdlVGl0bGUodCA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlYWN0aXZhdGVBY3Rpb24oaXRlbT86IFQgfCBudWxsLCBjYW5jZWwgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5pc0RpYWxvZykge1xuICAgICAgICAgICAgLy8gaWYgY2FuY2VsLCB0aGVuIGZvcmNlIGNsb3NlIHRoZSBkaWFsb2dcbiAgICAgICAgICAgIGlmIChjYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZj8uY2xvc2UoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLmRlYWN0aXZhdGVBY3Rpb24odGhpcy5pbnN0YW5jZSEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGFjZUFjdGlvbnNPblBvc2l0aW9ucyhhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55Pikge1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbi5wb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQ6XG4gICAgICAgICAgICAgICAgdGhpcy50b29sYmFyTGVmdEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0OlxuICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFjdGlvblBvc2l0aW9uRW51bS5Gb290ZXJMZWZ0OlxuICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyTGVmdEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXJSaWdodEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGg1ICpuZ0lmPVwiIWlzRGlhbG9nICYmIHRpdGxlXCI+e3sgdGl0bGUgfX08L2g1PlxuPGRpdiBjbGFzcz1cImgtZnVsbCBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG1uZy1hY3Rpb24tZWRpdG9yLXRvb2xiYXItY29udGFpbmVyXCIgKm5nSWY9XCJ0b29sYmFyTGVmdEFjdGlvbnMubGVuZ3RoID4gMCB8fCB0b29sYmFyUmlnaHRBY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibW5nLWFjdGlvbi1lZGl0b3ItdG9vbGJhclwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cbiAgICAgICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHRvb2xiYXJMZWZ0QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdExvYWRpbmckXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiJGFueShhY3Rpb24pLnN1Ym1pdFR5cGUgPT09IGFjdGlvbkVkaXRvclN1Ym1pdFR5cGVTdWJtaXQgPyBzdWJtaXRMb2FkaW5nJCA6IGFjdGlvbkRlZmF1bHRMb2FkaW5nSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbdmlld0NvbnRhaW5lcl09XCJ2aWV3Q29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2hvc3RDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZV09XCJkaWFsb2dSb3V0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbUlkXT1cIml0ZW1JZFwiPjwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHRvb2xiYXJSaWdodEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXRMb2FkaW5nJFwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZyQgOiBhY3Rpb25EZWZhdWx0TG9hZGluZ0lucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgW3ZpZXdDb250YWluZXJdPVwidmlld0NvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgIFtob3N0Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVdPVwiZGlhbG9nUm91dGVcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJpdGVtSWRcIj48L21uZy1hY3Rpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3AtdG9vbGJhcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtbmctYWN0aW9uLWVkaXRvci1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIiAqbmdJZj1cImxvYWRpbmckIHwgYXN5bmNcIj5cbiAgICAgICAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBbc3R5bGVdPVwie3dpZHRoOiAnM3JlbScsIGhlaWdodDogJzNyZW0nfVwiIHN0cm9rZVdpZHRoPVwiM1wiPjwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bW5nLWZvcm0tZWRpdG9yICpuZ0lmPVwiYWN0aW9uLmVkaXRvckRlc2NyaXB0b3IgJiYgKGxvYWRpbmckIHwgYXN5bmMpID09PSBmYWxzZVwiIFtkZXNjcmlwdG9yXT1cImFjdGlvbi5lZGl0b3JEZXNjcmlwdG9yXCIgW2l0ZW1dPVwiaXRlbVwiIChmb3JtU3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIj5cbiAgICAgICAgPC9tbmctZm9ybS1lZGl0b3I+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtbmctYWN0aW9uLWVkaXRvci1mb290ZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8bW5nLWFjdGlvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZm9vdGVyTGVmdEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZyRcIlxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZyQgOiBhY3Rpb25EZWZhdWx0TG9hZGluZ0lucHV0XCJcbiAgICAgICAgICAgICAgICBbdmlld0NvbnRhaW5lcl09XCJ2aWV3Q29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICBbcm91dGVdPVwiZGlhbG9nUm91dGVcIlxuICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBmb290ZXJSaWdodEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3VibWl0TG9hZGluZyRcIlxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIiRhbnkoYWN0aW9uKS5zdWJtaXRUeXBlID09PSBhY3Rpb25FZGl0b3JTdWJtaXRUeXBlU3VibWl0ID8gc3VibWl0TG9hZGluZyQgOiBhY3Rpb25EZWZhdWx0TG9hZGluZ0lucHV0XCJcbiAgICAgICAgICAgICAgICBbdmlld0NvbnRhaW5lcl09XCJ2aWV3Q29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICBbaG9zdENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICBbcm91dGVdPVwiZGlhbG9nUm91dGVcIlxuICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiaXRlbUlkXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|