@alfresco/adf-core 8.1.0-16500060130 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/assets/adf-core/i18n/de.json +14 -2
- package/bundles/assets/adf-core/i18n/en.json +13 -1
- package/bundles/assets/adf-core/i18n/es.json +14 -2
- package/bundles/assets/adf-core/i18n/fr.json +14 -2
- package/bundles/assets/adf-core/i18n/it.json +14 -2
- package/bundles/assets/adf-core/i18n/pl.json +13 -1
- package/bundles/assets/adf-core/i18n/pt.json +14 -2
- package/feature-flags/lib/components/flags/flags.component.d.ts +2 -2
- package/feature-flags/lib/providers/debug-feature-flags.provider.d.ts +4 -35
- package/fesm2022/adf-core.mjs +1391 -2841
- package/fesm2022/adf-core.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-api.mjs +5 -5
- package/fesm2022/alfresco-adf-core-api.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-auth.mjs +3 -3
- package/fesm2022/alfresco-adf-core-auth.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-breadcrumbs.mjs +11 -11
- package/fesm2022/alfresco-adf-core-breadcrumbs.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-feature-flags.mjs +52 -59
- package/fesm2022/alfresco-adf-core-feature-flags.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-shell.mjs +68 -14
- package/fesm2022/alfresco-adf-core-shell.mjs.map +1 -1
- package/lib/app-config/provide-app-config.d.ts +2 -2
- package/lib/app-config/public-api.d.ts +0 -2
- package/lib/auth/oidc/auth.module.d.ts +10 -13
- package/lib/{mock/form/form-definition-readonly.mock.d.ts → auth/oidc/auth.routes.d.ts} +2 -1
- package/lib/auth/oidc/public-api.d.ts +0 -1
- package/lib/auth/oidc/view/authentication-confirmation/authentication-confirmation.component.d.ts +1 -1
- package/lib/card-view/components/base-card-view.d.ts +1 -1
- package/lib/card-view/components/card-view/card-view.component.scss +12 -9
- package/lib/card-view/components/card-view-selectitem/card-view-selectitem.component.scss +1 -2
- package/lib/card-view/components/card-view-textitem/card-view-textitem.component.scss +6 -5
- package/lib/core.module.d.ts +11 -0
- package/lib/datatable/components/datatable/datatable.component.scss +2 -1
- package/lib/datatable/data/data-table.schema.d.ts +1 -1
- package/lib/dialogs/confirm-dialog/confirm.dialog.d.ts +1 -1
- package/lib/dialogs/confirm-dialog/confirm.dialog.module.d.ts +2 -6
- package/lib/form/components/form-renderer.component.scss +25 -6
- package/lib/form/components/form-section/form-section.component.scss +23 -1
- package/lib/form/components/widgets/amount/amount.widget.scss +1 -2
- package/lib/form/components/widgets/date-time/date-time.widget.scss +1 -2
- package/lib/form/components/widgets/display-text/display-text.widget.scss +2 -0
- package/lib/mock/data-column.mock.d.ts +0 -2
- package/lib/mock/form/widget-visibility.service.mock.d.ts +0 -5
- package/lib/mock/public-api.d.ts +0 -4
- package/lib/{mock/form/form-definition-visibility.mock.d.ts → testing/app-config-testing.d.ts} +8 -2
- package/lib/testing/index.d.ts +1 -1
- package/lib/testing/noop-auth.module.d.ts +31 -4
- package/lib/testing/unit-testing-utils.d.ts +1 -11
- package/lib/translation/provide-i18n.d.ts +1 -1
- package/lib/viewer/components/img-viewer/img-viewer.component.d.ts +2 -2
- package/lib/viewer/components/viewer.component.d.ts +1 -1
- package/lib/viewer/services/rendering-queue.services.d.ts +2 -2
- package/package.json +3 -15
- package/shell/README.md +13 -3
- package/shell/index.d.ts +1 -0
- package/shell/lib/providers.d.ts +36 -0
- package/shell/lib/shell.module.d.ts +1 -1
- package/esm2022/adf-core.mjs +0 -5
- package/esm2022/api/alfresco-adf-core-api.mjs +0 -5
- package/esm2022/api/index.mjs +0 -20
- package/esm2022/api/lib/adf-http-client.service.mjs +0 -311
- package/esm2022/api/lib/alfresco-api/alfresco-api.param-encoder.mjs +0 -33
- package/esm2022/api/lib/alfresco-api/alfresco-api.response-error.mjs +0 -25
- package/esm2022/api/lib/alfresco-api/alfresco-api.utils.mjs +0 -80
- package/esm2022/api/lib/interfaces.mjs +0 -18
- package/esm2022/api/lib/types.mjs +0 -18
- package/esm2022/auth/alfresco-adf-core-auth.mjs +0 -5
- package/esm2022/auth/authentication-interceptor/authentication.interceptor.mjs +0 -56
- package/esm2022/auth/authentication.mjs +0 -19
- package/esm2022/auth/index.mjs +0 -19
- package/esm2022/breadcrumbs/alfresco-adf-core-breadcrumbs.mjs +0 -5
- package/esm2022/breadcrumbs/components/breadcrumb/breadcrumb.component.mjs +0 -82
- package/esm2022/breadcrumbs/components/breadcrumb-item/breadcrumb-item.component.mjs +0 -42
- package/esm2022/breadcrumbs/directives/breadcrumb-focus.directive.mjs +0 -44
- package/esm2022/breadcrumbs/index.mjs +0 -19
- package/esm2022/feature-flags/alfresco-adf-core-feature-flags.mjs +0 -5
- package/esm2022/feature-flags/index.mjs +0 -29
- package/esm2022/feature-flags/lib/components/feature-flags-wrapper.mjs +0 -36
- package/esm2022/feature-flags/lib/components/feature-override-indicator.component.mjs +0 -56
- package/esm2022/feature-flags/lib/components/flags/flags.component.mjs +0 -129
- package/esm2022/feature-flags/lib/directives/features.directive.mjs +0 -63
- package/esm2022/feature-flags/lib/directives/not-features.directive.mjs +0 -63
- package/esm2022/feature-flags/lib/guards/is-feature-off.guard.mjs +0 -38
- package/esm2022/feature-flags/lib/guards/is-feature-on.guard.mjs +0 -38
- package/esm2022/feature-flags/lib/guards/is-flags-override-on.guard.mjs +0 -40
- package/esm2022/feature-flags/lib/interfaces/features.interface.mjs +0 -24
- package/esm2022/feature-flags/lib/mocks/features-service-mock.factory.mjs +0 -62
- package/esm2022/feature-flags/lib/providers/debug-feature-flags.provider.mjs +0 -51
- package/esm2022/feature-flags/lib/providers/dummy-feature-flags.provider.mjs +0 -36
- package/esm2022/feature-flags/lib/services/debug-features.service.mjs +0 -94
- package/esm2022/feature-flags/lib/services/dummy-features.service.mjs +0 -40
- package/esm2022/feature-flags/lib/services/flagset.parser.mjs +0 -38
- package/esm2022/feature-flags/lib/services/qa-features.helper.mjs +0 -62
- package/esm2022/feature-flags/lib/services/storage-features.service.mjs +0 -126
- package/esm2022/lib/about/about-extension-list/about-extension-list.component.mjs +0 -51
- package/esm2022/lib/about/about-license-list/about-license-list.component.mjs +0 -51
- package/esm2022/lib/about/about-module-list/module-list.component.mjs +0 -51
- package/esm2022/lib/about/about-package/package-list.component.mjs +0 -65
- package/esm2022/lib/about/about-panel.directive.mjs +0 -37
- package/esm2022/lib/about/about-repository-info/about-repository-info.component.mjs +0 -59
- package/esm2022/lib/about/about-repository-info/repository-info.interface.mjs +0 -18
- package/esm2022/lib/about/about-server-settings/about-server-settings.component.mjs +0 -42
- package/esm2022/lib/about/about-status-list/about-status-list.component.mjs +0 -51
- package/esm2022/lib/about/about.component.mjs +0 -35
- package/esm2022/lib/about/about.module.mjs +0 -75
- package/esm2022/lib/about/index.mjs +0 -18
- package/esm2022/lib/about/interfaces.mjs +0 -18
- package/esm2022/lib/about/public-api.mjs +0 -28
- package/esm2022/lib/app-config/app-config-storage-prefix.factory.mjs +0 -51
- package/esm2022/lib/app-config/app-config.loader.mjs +0 -41
- package/esm2022/lib/app-config/app-config.module.mjs +0 -33
- package/esm2022/lib/app-config/app-config.pipe.mjs +0 -38
- package/esm2022/lib/app-config/app-config.service.mjs +0 -243
- package/esm2022/lib/app-config/debug-app-config.service.mjs +0 -44
- package/esm2022/lib/app-config/index.mjs +0 -18
- package/esm2022/lib/app-config/provide-app-config.mjs +0 -44
- package/esm2022/lib/app-config/public-api.mjs +0 -23
- package/esm2022/lib/auth/authentication-interceptor/auth-bearer.interceptor.mjs +0 -67
- package/esm2022/lib/auth/basic-auth/basic-alfresco-auth.service.mjs +0 -369
- package/esm2022/lib/auth/basic-auth/content-auth.mjs +0 -189
- package/esm2022/lib/auth/basic-auth/process-auth.mjs +0 -193
- package/esm2022/lib/auth/guard/auth-guard-bpm.service.mjs +0 -31
- package/esm2022/lib/auth/guard/auth-guard-ecm.service.mjs +0 -31
- package/esm2022/lib/auth/guard/auth-guard-sso-role.service.mjs +0 -57
- package/esm2022/lib/auth/guard/auth-guard.mjs +0 -53
- package/esm2022/lib/auth/guard/auth-guard.service.mjs +0 -113
- package/esm2022/lib/auth/index.mjs +0 -18
- package/esm2022/lib/auth/interfaces/authentication-service.interface.mjs +0 -18
- package/esm2022/lib/auth/interfaces/authentication.interface.mjs +0 -18
- package/esm2022/lib/auth/interfaces/identity-group.interface.mjs +0 -18
- package/esm2022/lib/auth/interfaces/identity-user.service.interface.mjs +0 -18
- package/esm2022/lib/auth/interfaces/openid-configuration.interface.mjs +0 -18
- package/esm2022/lib/auth/models/application-access.model.mjs +0 -18
- package/esm2022/lib/auth/models/identity-group.model.mjs +0 -18
- package/esm2022/lib/auth/models/identity-role.model.mjs +0 -30
- package/esm2022/lib/auth/models/identity-user.model.mjs +0 -18
- package/esm2022/lib/auth/models/oauth-config.model.mjs +0 -18
- package/esm2022/lib/auth/models/redirection.model.mjs +0 -28
- package/esm2022/lib/auth/models/user-access.model.mjs +0 -18
- package/esm2022/lib/auth/oidc/auth-config.mjs +0 -19
- package/esm2022/lib/auth/oidc/auth-config.service.mjs +0 -110
- package/esm2022/lib/auth/oidc/auth-routing.module.mjs +0 -34
- package/esm2022/lib/auth/oidc/auth.module.mjs +0 -112
- package/esm2022/lib/auth/oidc/auth.service.mjs +0 -22
- package/esm2022/lib/auth/oidc/oidc-auth.guard.mjs +0 -37
- package/esm2022/lib/auth/oidc/oidc-authentication.service.mjs +0 -204
- package/esm2022/lib/auth/oidc/public-api.mjs +0 -24
- package/esm2022/lib/auth/oidc/redirect-auth.service.mjs +0 -267
- package/esm2022/lib/auth/oidc/retry-login.service.mjs +0 -66
- package/esm2022/lib/auth/oidc/token.interceptor.mjs +0 -62
- package/esm2022/lib/auth/oidc/view/authentication-confirmation/authentication-confirmation.component.mjs +0 -31
- package/esm2022/lib/auth/public-api.mjs +0 -44
- package/esm2022/lib/auth/services/authentication.service.mjs +0 -190
- package/esm2022/lib/auth/services/base-authentication.service.mjs +0 -95
- package/esm2022/lib/auth/services/identity-group.service.mjs +0 -269
- package/esm2022/lib/auth/services/identity-role.service.mjs +0 -99
- package/esm2022/lib/auth/services/identity-user.service.mjs +0 -443
- package/esm2022/lib/auth/services/jwt-helper.service.mjs +0 -205
- package/esm2022/lib/auth/services/oauth2.service.mjs +0 -69
- package/esm2022/lib/auth/services/time-sync.service.mjs +0 -83
- package/esm2022/lib/auth/services/user-access.service.mjs +0 -110
- package/esm2022/lib/avatar/avatar.component.mjs +0 -51
- package/esm2022/lib/blank-page/blank-page.component.mjs +0 -31
- package/esm2022/lib/blank-page/blank-page.module.mjs +0 -33
- package/esm2022/lib/blank-page/index.mjs +0 -18
- package/esm2022/lib/blank-page/public-api.mjs +0 -19
- package/esm2022/lib/button/button.component.mjs +0 -61
- package/esm2022/lib/card-view/card-view.module.mjs +0 -80
- package/esm2022/lib/card-view/components/base-card-view.mjs +0 -51
- package/esm2022/lib/card-view/components/card-view/card-view.component.mjs +0 -66
- package/esm2022/lib/card-view/components/card-view-arrayitem/card-view-arrayitem.component.mjs +0 -55
- package/esm2022/lib/card-view/components/card-view-boolitem/card-view-boolitem.component.mjs +0 -39
- package/esm2022/lib/card-view/components/card-view-dateitem/card-view-dateitem.component.mjs +0 -182
- package/esm2022/lib/card-view/components/card-view-item-dispatcher/card-view-item-dispatcher.component.mjs +0 -108
- package/esm2022/lib/card-view/components/card-view-keyvaluepairsitem/card-view-keyvaluepairsitem.component.mjs +0 -64
- package/esm2022/lib/card-view/components/card-view-mapitem/card-view-mapitem.component.mjs +0 -46
- package/esm2022/lib/card-view/components/card-view-selectitem/card-view-selectitem.component.mjs +0 -137
- package/esm2022/lib/card-view/components/card-view-selectitem/select-filter-input/select-filter-input.component.mjs +0 -113
- package/esm2022/lib/card-view/components/card-view-textitem/card-view-textitem.component.mjs +0 -239
- package/esm2022/lib/card-view/components/card-view.components.mjs +0 -28
- package/esm2022/lib/card-view/index.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/base-card-view-update.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/card-view-arrayitem-properties.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/card-view-boolitem-properties.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/card-view-dateitem-properties.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/card-view-item-properties.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/card-view-item-validator.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/card-view-item.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/card-view-keyvaluepairsitem-properties.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/card-view-selectitem-properties.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/card-view-textitem-pipe-property.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/card-view-textitem-properties.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/card-view.interfaces.mjs +0 -29
- package/esm2022/lib/card-view/interfaces/click-notification.interface.mjs +0 -18
- package/esm2022/lib/card-view/interfaces/update-notification.interface.mjs +0 -18
- package/esm2022/lib/card-view/models/card-view-arrayitem.model.mjs +0 -28
- package/esm2022/lib/card-view/models/card-view-baseitem.model.mjs +0 -64
- package/esm2022/lib/card-view/models/card-view-boolitem.model.mjs +0 -36
- package/esm2022/lib/card-view/models/card-view-dateitem.model.mjs +0 -58
- package/esm2022/lib/card-view/models/card-view-datetimeitem.model.mjs +0 -28
- package/esm2022/lib/card-view/models/card-view-floatitem.model.mjs +0 -33
- package/esm2022/lib/card-view/models/card-view-intitem.model.mjs +0 -36
- package/esm2022/lib/card-view/models/card-view-keyvaluepairs.model.mjs +0 -27
- package/esm2022/lib/card-view/models/card-view-longitem.model.mjs +0 -36
- package/esm2022/lib/card-view/models/card-view-mapitem.model.mjs +0 -32
- package/esm2022/lib/card-view/models/card-view-selectitem.model.mjs +0 -41
- package/esm2022/lib/card-view/models/card-view-textitem.model.mjs +0 -40
- package/esm2022/lib/card-view/models/card-view.models.mjs +0 -29
- package/esm2022/lib/card-view/public-api.mjs +0 -25
- package/esm2022/lib/card-view/services/card-item-types.service.mjs +0 -54
- package/esm2022/lib/card-view/services/card-view-update.service.mjs +0 -59
- package/esm2022/lib/card-view/services/card-view.services.mjs +0 -19
- package/esm2022/lib/card-view/validators/card-view-item-float.validator.mjs +0 -31
- package/esm2022/lib/card-view/validators/card-view-item-int.validator.mjs +0 -35
- package/esm2022/lib/card-view/validators/card-view-item-length.validator.mjs +0 -34
- package/esm2022/lib/card-view/validators/card-view-item-long.validator.mjs +0 -35
- package/esm2022/lib/card-view/validators/card-view-item-match.validator.mjs +0 -35
- package/esm2022/lib/card-view/validators/card-view-item-minmax.validator.mjs +0 -35
- package/esm2022/lib/card-view/validators/card-view-item-only-positive-int.validator.mjs +0 -32
- package/esm2022/lib/card-view/validators/card-view-item-only-positive-long.validator.mjs +0 -31
- package/esm2022/lib/card-view/validators/card-view.validators.mjs +0 -26
- package/esm2022/lib/card-view/validators/validators.map.mjs +0 -26
- package/esm2022/lib/clipboard/clipboard.directive.mjs +0 -98
- package/esm2022/lib/clipboard/clipboard.module.mjs +0 -34
- package/esm2022/lib/clipboard/clipboard.service.mjs +0 -103
- package/esm2022/lib/clipboard/index.mjs +0 -18
- package/esm2022/lib/clipboard/public-api.mjs +0 -21
- package/esm2022/lib/comments/comment-list/comment-list.component.mjs +0 -52
- package/esm2022/lib/comments/comment-list/comment-list.module.mjs +0 -33
- package/esm2022/lib/comments/comment-list/index.mjs +0 -18
- package/esm2022/lib/comments/comment-list/public-api.mjs +0 -19
- package/esm2022/lib/comments/comments.component.mjs +0 -132
- package/esm2022/lib/comments/comments.module.mjs +0 -33
- package/esm2022/lib/comments/index.mjs +0 -18
- package/esm2022/lib/comments/interfaces/comments-service.interface.mjs +0 -18
- package/esm2022/lib/comments/interfaces/comments.token.mjs +0 -19
- package/esm2022/lib/comments/public-api.mjs +0 -22
- package/esm2022/lib/common/index.mjs +0 -35
- package/esm2022/lib/common/interface/search-component.interface.mjs +0 -18
- package/esm2022/lib/common/mock/app-config.service.mock.mjs +0 -47
- package/esm2022/lib/common/models/default-languages.model.mjs +0 -36
- package/esm2022/lib/common/models/log-levels.model.mjs +0 -33
- package/esm2022/lib/common/models/user-info-mode.enum.mjs +0 -25
- package/esm2022/lib/common/services/cookie.service.mjs +0 -82
- package/esm2022/lib/common/services/download.service.mjs +0 -102
- package/esm2022/lib/common/services/dynamic-component-mapper.service.mjs +0 -89
- package/esm2022/lib/common/services/highlight-transform.service.mjs +0 -61
- package/esm2022/lib/common/services/language-item.interface.mjs +0 -18
- package/esm2022/lib/common/services/log.service.mjs +0 -171
- package/esm2022/lib/common/services/page-title.service.mjs +0 -63
- package/esm2022/lib/common/services/sort-by-category.service.mjs +0 -81
- package/esm2022/lib/common/services/storage.service.mjs +0 -143
- package/esm2022/lib/common/services/thumbnail.service.mjs +0 -194
- package/esm2022/lib/common/services/url.service.mjs +0 -45
- package/esm2022/lib/common/services/user-preferences.service.mjs +0 -238
- package/esm2022/lib/common/utils/date-fns-adapter.mjs +0 -115
- package/esm2022/lib/common/utils/date-fns-utils.mjs +0 -222
- package/esm2022/lib/common/utils/datetime-fns-adapter.mjs +0 -134
- package/esm2022/lib/common/utils/file-utils.mjs +0 -65
- package/esm2022/lib/common/utils/index.mjs +0 -18
- package/esm2022/lib/common/utils/moment-date-adapter.mjs +0 -202
- package/esm2022/lib/common/utils/moment-date-formats.model.mjs +0 -32
- package/esm2022/lib/common/utils/object-utils.mjs +0 -107
- package/esm2022/lib/common/utils/public-api.mjs +0 -25
- package/esm2022/lib/common/utils/string-utils.mjs +0 -45
- package/esm2022/lib/context-menu/animations.mjs +0 -33
- package/esm2022/lib/context-menu/context-menu-list.component.mjs +0 -91
- package/esm2022/lib/context-menu/context-menu-overlay.mjs +0 -25
- package/esm2022/lib/context-menu/context-menu-overlay.service.mjs +0 -109
- package/esm2022/lib/context-menu/context-menu.directive.mjs +0 -63
- package/esm2022/lib/context-menu/context-menu.module.mjs +0 -35
- package/esm2022/lib/context-menu/context-menu.tokens.mjs +0 -19
- package/esm2022/lib/context-menu/index.mjs +0 -18
- package/esm2022/lib/context-menu/interfaces.mjs +0 -18
- package/esm2022/lib/context-menu/public-api.mjs +0 -21
- package/esm2022/lib/core.module.mjs +0 -296
- package/esm2022/lib/datatable/components/amount-cell/amount-cell.component.mjs +0 -45
- package/esm2022/lib/datatable/components/boolean-cell/boolean-cell.component.mjs +0 -65
- package/esm2022/lib/datatable/components/columns-selector/columns-search-filter.pipe.mjs +0 -55
- package/esm2022/lib/datatable/components/columns-selector/columns-selector.component.mjs +0 -113
- package/esm2022/lib/datatable/components/data-cell.event.mjs +0 -31
- package/esm2022/lib/datatable/components/data-row-action.event.mjs +0 -34
- package/esm2022/lib/datatable/components/datatable/datatable.component.mjs +0 -914
- package/esm2022/lib/datatable/components/datatable-cell/datatable-cell.component.mjs +0 -126
- package/esm2022/lib/datatable/components/datatable-row/datatable-row.component.mjs +0 -98
- package/esm2022/lib/datatable/components/date-cell/date-cell.component.mjs +0 -78
- package/esm2022/lib/datatable/components/empty-list/empty-list.component.mjs +0 -60
- package/esm2022/lib/datatable/components/filesize-cell/filesize-cell.component.mjs +0 -49
- package/esm2022/lib/datatable/components/icon-cell/icon-cell.component.mjs +0 -67
- package/esm2022/lib/datatable/components/json-cell/json-cell.component.mjs +0 -86
- package/esm2022/lib/datatable/components/location-cell/location-cell.component.mjs +0 -69
- package/esm2022/lib/datatable/components/mocks/datatable.mock.mjs +0 -153
- package/esm2022/lib/datatable/components/number-cell/number-cell.component.mjs +0 -42
- package/esm2022/lib/datatable/data/data-column.model.mjs +0 -18
- package/esm2022/lib/datatable/data/data-row-event.model.mjs +0 -26
- package/esm2022/lib/datatable/data/data-row-update.model.mjs +0 -18
- package/esm2022/lib/datatable/data/data-row.model.mjs +0 -18
- package/esm2022/lib/datatable/data/data-sorting.model.mjs +0 -24
- package/esm2022/lib/datatable/data/data-table.schema.mjs +0 -132
- package/esm2022/lib/datatable/data/datatable-adapter.mjs +0 -18
- package/esm2022/lib/datatable/data/object-datacolumn.model.mjs +0 -46
- package/esm2022/lib/datatable/data/object-datarow.model.mjs +0 -41
- package/esm2022/lib/datatable/data/object-datatable-adapter.mjs +0 -134
- package/esm2022/lib/datatable/data-column/data-column-header.component.mjs +0 -45
- package/esm2022/lib/datatable/data-column/data-column-list.component.mjs +0 -36
- package/esm2022/lib/datatable/data-column/data-column.component.mjs +0 -114
- package/esm2022/lib/datatable/data-column/index.mjs +0 -18
- package/esm2022/lib/datatable/data-column/public-api.mjs +0 -20
- package/esm2022/lib/datatable/datatable.module.mjs +0 -161
- package/esm2022/lib/datatable/directives/custom-empty-content-template.directive.mjs +0 -35
- package/esm2022/lib/datatable/directives/custom-loading-template.directive.mjs +0 -30
- package/esm2022/lib/datatable/directives/custom-no-permission-template.directive.mjs +0 -35
- package/esm2022/lib/datatable/directives/drop-zone.directive.mjs +0 -89
- package/esm2022/lib/datatable/directives/header-filter-template.directive.mjs +0 -43
- package/esm2022/lib/datatable/directives/loading-template.directive.mjs +0 -46
- package/esm2022/lib/datatable/directives/main-data-table-action-template.directive.mjs +0 -43
- package/esm2022/lib/datatable/directives/no-content-template.directive.mjs +0 -46
- package/esm2022/lib/datatable/directives/no-permission-template.directive.mjs +0 -46
- package/esm2022/lib/datatable/directives/resizable/resizable.directive.mjs +0 -173
- package/esm2022/lib/datatable/directives/resizable/resize-handle.directive.mjs +0 -72
- package/esm2022/lib/datatable/directives/resizable/types.mjs +0 -18
- package/esm2022/lib/datatable/index.mjs +0 -18
- package/esm2022/lib/datatable/public-api.mjs +0 -55
- package/esm2022/lib/datatable/services/datatable.service.mjs +0 -33
- package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.mjs +0 -50
- package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.module.mjs +0 -38
- package/esm2022/lib/dialogs/dialog/dialog-data.interface.mjs +0 -18
- package/esm2022/lib/dialogs/dialog/dialog.component.mjs +0 -70
- package/esm2022/lib/dialogs/dialog/dialog.model.mjs +0 -22
- package/esm2022/lib/dialogs/dialog/index.mjs +0 -20
- package/esm2022/lib/dialogs/edit-json/edit-json.dialog.mjs +0 -52
- package/esm2022/lib/dialogs/edit-json/edit-json.dialog.module.mjs +0 -34
- package/esm2022/lib/dialogs/index.mjs +0 -18
- package/esm2022/lib/dialogs/public-api.mjs +0 -25
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.component.mjs +0 -73
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.model.mjs +0 -18
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.module.mjs +0 -33
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes.guard.mjs +0 -64
- package/esm2022/lib/directives/directive.module.mjs +0 -56
- package/esm2022/lib/directives/highlight.directive.mjs +0 -67
- package/esm2022/lib/directives/index.mjs +0 -18
- package/esm2022/lib/directives/infinite-select-scroll.directive.mjs +0 -67
- package/esm2022/lib/directives/logout.directive.mjs +0 -72
- package/esm2022/lib/directives/public-api.mjs +0 -24
- package/esm2022/lib/directives/tooltip-card/tooltip-card.component.mjs +0 -60
- package/esm2022/lib/directives/tooltip-card/tooltip-card.directive.mjs +0 -104
- package/esm2022/lib/directives/upload.directive.mjs +0 -241
- package/esm2022/lib/dynamic-chip-list/chip.mjs +0 -18
- package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.component.mjs +0 -204
- package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.module.mjs +0 -33
- package/esm2022/lib/dynamic-chip-list/index.mjs +0 -18
- package/esm2022/lib/dynamic-chip-list/public-api.mjs +0 -20
- package/esm2022/lib/events/base-ui.event.mjs +0 -21
- package/esm2022/lib/events/base.event.mjs +0 -29
- package/esm2022/lib/events/index.mjs +0 -18
- package/esm2022/lib/events/public-api.mjs +0 -19
- package/esm2022/lib/form/components/form-base.component.mjs +0 -224
- package/esm2022/lib/form/components/form-custom-button.directive.mjs +0 -30
- package/esm2022/lib/form/components/form-field/form-field.component.mjs +0 -142
- package/esm2022/lib/form/components/form-renderer.component.mjs +0 -161
- package/esm2022/lib/form/components/form-section/form-section.component.mjs +0 -46
- package/esm2022/lib/form/components/helpers/buttons-visibility.mjs +0 -37
- package/esm2022/lib/form/components/inplace-form-input/inplace-form-input.component.mjs +0 -37
- package/esm2022/lib/form/components/middlewares/decimal-middleware.service.mjs +0 -48
- package/esm2022/lib/form/components/middlewares/middleware.mjs +0 -19
- package/esm2022/lib/form/components/widgets/amount/amount.widget.mjs +0 -77
- package/esm2022/lib/form/components/widgets/base-viewer/base-viewer.widget.mjs +0 -59
- package/esm2022/lib/form/components/widgets/checkbox/checkbox.widget.mjs +0 -52
- package/esm2022/lib/form/components/widgets/core/container-column.model.mjs +0 -28
- package/esm2022/lib/form/components/widgets/core/container.model.mjs +0 -50
- package/esm2022/lib/form/components/widgets/core/content-link.model.mjs +0 -52
- package/esm2022/lib/form/components/widgets/core/displayable-cm-properties.model.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/error-message.model.mjs +0 -38
- package/esm2022/lib/form/components/widgets/core/external-content-link.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/external-content.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/form-field-file-source.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/form-field-metadata.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/form-field-option.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/form-field-rule.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/form-field-selected-folder.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/form-field-templates.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/form-field-types.mjs +0 -74
- package/esm2022/lib/form/components/widgets/core/form-field-utils.mjs +0 -23
- package/esm2022/lib/form/components/widgets/core/form-field-validator.mjs +0 -268
- package/esm2022/lib/form/components/widgets/core/form-field-variable-options.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/form-field.model.mjs +0 -490
- package/esm2022/lib/form/components/widgets/core/form-outcome-event.model.mjs +0 -32
- package/esm2022/lib/form/components/widgets/core/form-outcome.model.mjs +0 -38
- package/esm2022/lib/form/components/widgets/core/form-values.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/form-variable.model.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/form-widget.model.mjs +0 -33
- package/esm2022/lib/form/components/widgets/core/form.model.mjs +0 -387
- package/esm2022/lib/form/components/widgets/core/group.model.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/index.mjs +0 -49
- package/esm2022/lib/form/components/widgets/core/predefined-theme.mjs +0 -115
- package/esm2022/lib/form/components/widgets/core/process-form-model.interface.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/process-variable.model.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/tab.model.mjs +0 -34
- package/esm2022/lib/form/components/widgets/core/theme.model.mjs +0 -18
- package/esm2022/lib/form/components/widgets/core/upload-widget-content-link.model.mjs +0 -27
- package/esm2022/lib/form/components/widgets/core/widget-schema.model.mjs +0 -18
- package/esm2022/lib/form/components/widgets/date/date.widget.mjs +0 -162
- package/esm2022/lib/form/components/widgets/date-time/date-time.widget.mjs +0 -153
- package/esm2022/lib/form/components/widgets/decimal/decimal.component.mjs +0 -53
- package/esm2022/lib/form/components/widgets/display-text/display-text.schema.mjs +0 -86
- package/esm2022/lib/form/components/widgets/display-text/display-text.widget.mjs +0 -46
- package/esm2022/lib/form/components/widgets/display-text/index.mjs +0 -19
- package/esm2022/lib/form/components/widgets/error/error.component.mjs +0 -92
- package/esm2022/lib/form/components/widgets/header/header.schema.mjs +0 -86
- package/esm2022/lib/form/components/widgets/header/header.widget.mjs +0 -42
- package/esm2022/lib/form/components/widgets/header/index.mjs +0 -19
- package/esm2022/lib/form/components/widgets/hyperlink/hyperlink.widget.mjs +0 -69
- package/esm2022/lib/form/components/widgets/index.mjs +0 -71
- package/esm2022/lib/form/components/widgets/json/json.widget.mjs +0 -66
- package/esm2022/lib/form/components/widgets/multiline-text/multiline-text.widget.mjs +0 -55
- package/esm2022/lib/form/components/widgets/number/number.widget.mjs +0 -71
- package/esm2022/lib/form/components/widgets/reactive-widget.interface.mjs +0 -18
- package/esm2022/lib/form/components/widgets/text/text-mask.component.mjs +0 -221
- package/esm2022/lib/form/components/widgets/text/text.widget.mjs +0 -65
- package/esm2022/lib/form/components/widgets/unknown/unknown.widget.mjs +0 -63
- package/esm2022/lib/form/components/widgets/widget.component.mjs +0 -110
- package/esm2022/lib/form/events/form-error.event.mjs +0 -24
- package/esm2022/lib/form/events/form-field.event.mjs +0 -24
- package/esm2022/lib/form/events/form-rules.event.mjs +0 -25
- package/esm2022/lib/form/events/form-spinner.event.mjs +0 -23
- package/esm2022/lib/form/events/form.event.mjs +0 -29
- package/esm2022/lib/form/events/index.mjs +0 -24
- package/esm2022/lib/form/events/validate-form-field.event.mjs +0 -24
- package/esm2022/lib/form/events/validate-form.event.mjs +0 -25
- package/esm2022/lib/form/form-base.module.mjs +0 -75
- package/esm2022/lib/form/index.mjs +0 -18
- package/esm2022/lib/form/models/form-rules.model.mjs +0 -77
- package/esm2022/lib/form/models/task-process-variable.model.mjs +0 -19
- package/esm2022/lib/form/models/widget-visibility.model.mjs +0 -104
- package/esm2022/lib/form/pipes/field-style.pipe.mjs +0 -45
- package/esm2022/lib/form/pipes/index.mjs +0 -18
- package/esm2022/lib/form/public-api.mjs +0 -35
- package/esm2022/lib/form/services/form-rendering.service.mjs +0 -53
- package/esm2022/lib/form/services/form-validation-service.interface.mjs +0 -18
- package/esm2022/lib/form/services/form.service.mjs +0 -86
- package/esm2022/lib/form/services/widget-visibility.service.mjs +0 -294
- package/esm2022/lib/header/header.component.mjs +0 -73
- package/esm2022/lib/header/index.mjs +0 -18
- package/esm2022/lib/header/navbar/navbar-item.component.mjs +0 -37
- package/esm2022/lib/header/navbar/navbar.component.mjs +0 -36
- package/esm2022/lib/header/public-api.mjs +0 -20
- package/esm2022/lib/icon/icon.component.mjs +0 -51
- package/esm2022/lib/icon/icon.module.mjs +0 -36
- package/esm2022/lib/icon/index.mjs +0 -18
- package/esm2022/lib/icon/public-api.mjs +0 -19
- package/esm2022/lib/identity-user-info/identity-user-info.component.mjs +0 -86
- package/esm2022/lib/identity-user-info/identity-user-info.module.mjs +0 -33
- package/esm2022/lib/identity-user-info/index.mjs +0 -18
- package/esm2022/lib/identity-user-info/public-api.mjs +0 -19
- package/esm2022/lib/info-drawer/index.mjs +0 -18
- package/esm2022/lib/info-drawer/info-drawer-layout.component.mjs +0 -71
- package/esm2022/lib/info-drawer/info-drawer.component.mjs +0 -113
- package/esm2022/lib/info-drawer/info-drawer.module.mjs +0 -53
- package/esm2022/lib/info-drawer/public-api.mjs +0 -20
- package/esm2022/lib/interface/index.mjs +0 -18
- package/esm2022/lib/interface/injection.tokens.mjs +0 -19
- package/esm2022/lib/interface/public-api.mjs +0 -18
- package/esm2022/lib/landing-page/index.mjs +0 -18
- package/esm2022/lib/landing-page/provider.mjs +0 -30
- package/esm2022/lib/landing-page/public-api.mjs +0 -18
- package/esm2022/lib/language-menu/index.mjs +0 -18
- package/esm2022/lib/language-menu/language-menu.component.mjs +0 -61
- package/esm2022/lib/language-menu/language-menu.module.mjs +0 -35
- package/esm2022/lib/language-menu/language-picker.component.mjs +0 -77
- package/esm2022/lib/language-menu/public-api.mjs +0 -21
- package/esm2022/lib/language-menu/service/language.service.interface.mjs +0 -18
- package/esm2022/lib/language-menu/service/language.service.mjs +0 -34
- package/esm2022/lib/layout/components/header/header.component.mjs +0 -99
- package/esm2022/lib/layout/components/layout-container/layout-container.component.mjs +0 -180
- package/esm2022/lib/layout/components/sidebar-action/sidebar-action-menu.component.mjs +0 -82
- package/esm2022/lib/layout/components/sidenav-layout/sidenav-layout.component.mjs +0 -145
- package/esm2022/lib/layout/directives/sidenav-layout-content.directive.mjs +0 -33
- package/esm2022/lib/layout/directives/sidenav-layout-header.directive.mjs +0 -33
- package/esm2022/lib/layout/directives/sidenav-layout-navigation.directive.mjs +0 -33
- package/esm2022/lib/layout/index.mjs +0 -18
- package/esm2022/lib/layout/layout.module.mjs +0 -72
- package/esm2022/lib/layout/public-api.mjs +0 -25
- package/esm2022/lib/login/components/login/login.component.mjs +0 -367
- package/esm2022/lib/login/components/login-dialog/login-dialog-component-data.interface.mjs +0 -18
- package/esm2022/lib/login/components/login-dialog/login-dialog.component.mjs +0 -57
- package/esm2022/lib/login/components/login-dialog-panel/login-dialog-panel.component.mjs +0 -48
- package/esm2022/lib/login/directives/login-footer.directive.mjs +0 -41
- package/esm2022/lib/login/directives/login-header.directive.mjs +0 -41
- package/esm2022/lib/login/index.mjs +0 -18
- package/esm2022/lib/login/login.module.mjs +0 -54
- package/esm2022/lib/login/models/login-error.event.mjs +0 -22
- package/esm2022/lib/login/models/login-submit.event.mjs +0 -32
- package/esm2022/lib/login/models/login-success.event.mjs +0 -24
- package/esm2022/lib/login/public-api.mjs +0 -27
- package/esm2022/lib/material.module.mjs +0 -254
- package/esm2022/lib/mock/cookie.service.mock.mjs +0 -43
- package/esm2022/lib/mock/data-column.mock.mjs +0 -73
- package/esm2022/lib/mock/event.mock.mjs +0 -39
- package/esm2022/lib/mock/form/form-definition-readonly.mock.mjs +0 -225
- package/esm2022/lib/mock/form/form-definition-visibility.mock.mjs +0 -347
- package/esm2022/lib/mock/form/form-definition.mock.mjs +0 -403
- package/esm2022/lib/mock/form/form.component.mock.mjs +0 -275
- package/esm2022/lib/mock/form/form.service.mock.mjs +0 -248
- package/esm2022/lib/mock/form/widget-visibility.service.mock.mjs +0 -1835
- package/esm2022/lib/mock/index.mjs +0 -18
- package/esm2022/lib/mock/public-api.mjs +0 -27
- package/esm2022/lib/mock/translation.service.mock.mjs +0 -44
- package/esm2022/lib/models/comment.model.mjs +0 -51
- package/esm2022/lib/models/component.model.mjs +0 -24
- package/esm2022/lib/models/decimal-number.model.mjs +0 -26
- package/esm2022/lib/models/general-user.model.mjs +0 -24
- package/esm2022/lib/models/index.mjs +0 -18
- package/esm2022/lib/models/pagination.model.mjs +0 -29
- package/esm2022/lib/models/path.model.mjs +0 -24
- package/esm2022/lib/models/product-version.model.mjs +0 -28
- package/esm2022/lib/models/public-api.mjs +0 -24
- package/esm2022/lib/models/request-pagination.model.mjs +0 -25
- package/esm2022/lib/notifications/components/add-notification.stories.component.mjs +0 -44
- package/esm2022/lib/notifications/components/notification-history.component.mjs +0 -138
- package/esm2022/lib/notifications/helpers/notification.factory.mjs +0 -43
- package/esm2022/lib/notifications/index.mjs +0 -18
- package/esm2022/lib/notifications/models/notification.model.mjs +0 -25
- package/esm2022/lib/notifications/notification-history.module.mjs +0 -35
- package/esm2022/lib/notifications/public-api.mjs +0 -23
- package/esm2022/lib/notifications/services/notification.service.mjs +0 -166
- package/esm2022/lib/pagination/index.mjs +0 -18
- package/esm2022/lib/pagination/infinite-pagination.component.mjs +0 -111
- package/esm2022/lib/pagination/paginated-component.interface.mjs +0 -18
- package/esm2022/lib/pagination/pagination-component.interface.mjs +0 -18
- package/esm2022/lib/pagination/pagination.component.mjs +0 -263
- package/esm2022/lib/pagination/pagination.module.mjs +0 -35
- package/esm2022/lib/pagination/public-api.mjs +0 -22
- package/esm2022/lib/pipes/date-time.pipe.mjs +0 -46
- package/esm2022/lib/pipes/decimal-number.pipe.mjs +0 -78
- package/esm2022/lib/pipes/file-size.pipe.mjs +0 -54
- package/esm2022/lib/pipes/file-type.pipe.mjs +0 -40
- package/esm2022/lib/pipes/format-space.pipe.mjs +0 -39
- package/esm2022/lib/pipes/full-name.pipe.mjs +0 -43
- package/esm2022/lib/pipes/index.mjs +0 -18
- package/esm2022/lib/pipes/localized-date.pipe.mjs +0 -70
- package/esm2022/lib/pipes/multi-value.pipe.mjs +0 -37
- package/esm2022/lib/pipes/pipe.module.mjs +0 -83
- package/esm2022/lib/pipes/public-api.mjs +0 -30
- package/esm2022/lib/pipes/text-highlight.pipe.mjs +0 -39
- package/esm2022/lib/pipes/time-ago.pipe.mjs +0 -65
- package/esm2022/lib/pipes/truncate.pipe.mjs +0 -33
- package/esm2022/lib/pipes/user-initial.pipe.mjs +0 -52
- package/esm2022/lib/pipes/user-like.interface.mjs +0 -18
- package/esm2022/lib/progress/progress.component.mjs +0 -90
- package/esm2022/lib/search-text/animations.mjs +0 -32
- package/esm2022/lib/search-text/index.mjs +0 -18
- package/esm2022/lib/search-text/models/search-text-input.model.mjs +0 -23
- package/esm2022/lib/search-text/public-api.mjs +0 -22
- package/esm2022/lib/search-text/search-text-input.component.mjs +0 -283
- package/esm2022/lib/search-text/search-text-input.module.mjs +0 -35
- package/esm2022/lib/search-text/search-trigger.directive.mjs +0 -181
- package/esm2022/lib/snackbar-content/index.mjs +0 -18
- package/esm2022/lib/snackbar-content/public-api.mjs +0 -20
- package/esm2022/lib/snackbar-content/snack-bar-data.mjs +0 -18
- package/esm2022/lib/snackbar-content/snackbar-content.component.mjs +0 -49
- package/esm2022/lib/snackbar-content/snackbar-content.module.mjs +0 -33
- package/esm2022/lib/sorting-picker/index.mjs +0 -18
- package/esm2022/lib/sorting-picker/public-api.mjs +0 -18
- package/esm2022/lib/sorting-picker/sorting-picker.component.mjs +0 -67
- package/esm2022/lib/templates/empty-content/empty-content.component.mjs +0 -43
- package/esm2022/lib/templates/error-content/error-content.component.mjs +0 -61
- package/esm2022/lib/templates/index.mjs +0 -18
- package/esm2022/lib/templates/public-api.mjs +0 -20
- package/esm2022/lib/templates/template.module.mjs +0 -38
- package/esm2022/lib/testing/core.story.module.mjs +0 -39
- package/esm2022/lib/testing/core.testing.module.mjs +0 -36
- package/esm2022/lib/testing/index.mjs +0 -22
- package/esm2022/lib/testing/noop-auth.module.mjs +0 -80
- package/esm2022/lib/testing/noop-translate.module.mjs +0 -75
- package/esm2022/lib/testing/unit-testing-utils.mjs +0 -367
- package/esm2022/lib/toolbar/index.mjs +0 -18
- package/esm2022/lib/toolbar/public-api.mjs +0 -21
- package/esm2022/lib/toolbar/toolbar-divider.component.mjs +0 -27
- package/esm2022/lib/toolbar/toolbar-title.component.mjs +0 -32
- package/esm2022/lib/toolbar/toolbar.component.mjs +0 -39
- package/esm2022/lib/toolbar/toolbar.module.mjs +0 -36
- package/esm2022/lib/translation/index.mjs +0 -18
- package/esm2022/lib/translation/provide-i18n.mjs +0 -48
- package/esm2022/lib/translation/public-api.mjs +0 -20
- package/esm2022/lib/translation/translate-loader.service.mjs +0 -153
- package/esm2022/lib/translation/translation.service.mjs +0 -148
- package/esm2022/lib/viewer/components/download-prompt-dialog/download-prompt-dialog.component.mjs +0 -36
- package/esm2022/lib/viewer/components/img-viewer/img-viewer.component.mjs +0 -220
- package/esm2022/lib/viewer/components/media-player/media-player.component.mjs +0 -64
- package/esm2022/lib/viewer/components/pdf-viewer/pdf-viewer.component.mjs +0 -550
- package/esm2022/lib/viewer/components/pdf-viewer-password-dialog/pdf-viewer-password-dialog.mjs +0 -60
- package/esm2022/lib/viewer/components/pdf-viewer-thumb/pdf-viewer-thumb.component.mjs +0 -48
- package/esm2022/lib/viewer/components/pdf-viewer-thumbnails/pdf-viewer-thumbnails.component.mjs +0 -198
- package/esm2022/lib/viewer/components/txt-viewer/txt-viewer.component.mjs +0 -85
- package/esm2022/lib/viewer/components/unknown-format/unknown-format.component.mjs +0 -32
- package/esm2022/lib/viewer/components/viewer-more-actions.component.mjs +0 -34
- package/esm2022/lib/viewer/components/viewer-open-with.component.mjs +0 -34
- package/esm2022/lib/viewer/components/viewer-render/viewer-render.component.mjs +0 -216
- package/esm2022/lib/viewer/components/viewer-sidebar.component.mjs +0 -46
- package/esm2022/lib/viewer/components/viewer-toolbar-actions.component.mjs +0 -34
- package/esm2022/lib/viewer/components/viewer-toolbar-custom-actions.component.mjs +0 -34
- package/esm2022/lib/viewer/components/viewer-toolbar.component.mjs +0 -34
- package/esm2022/lib/viewer/components/viewer.component.mjs +0 -492
- package/esm2022/lib/viewer/directives/viewer-extension.directive.mjs +0 -67
- package/esm2022/lib/viewer/index.mjs +0 -18
- package/esm2022/lib/viewer/models/download-prompt.actions.mjs +0 -23
- package/esm2022/lib/viewer/models/viewer.model.mjs +0 -22
- package/esm2022/lib/viewer/public-api.mjs +0 -40
- package/esm2022/lib/viewer/services/rendering-queue.services.mjs +0 -179
- package/esm2022/lib/viewer/services/view-util.service.mjs +0 -149
- package/esm2022/lib/viewer/viewer.module.mjs +0 -110
- package/esm2022/public-api.mjs +0 -61
- package/esm2022/shell/alfresco-adf-core-shell.mjs +0 -5
- package/esm2022/shell/index.mjs +0 -21
- package/esm2022/shell/lib/components/shell/shell.component.mjs +0 -122
- package/esm2022/shell/lib/services/shell-app.service.mjs +0 -22
- package/esm2022/shell/lib/shell.module.mjs +0 -75
- package/esm2022/shell/lib/shell.routes.mjs +0 -50
- package/lib/app-config/app-config.module.d.ts +0 -8
- package/lib/app-config/debug-app-config.service.d.ts +0 -10
- package/lib/auth/oidc/auth-routing.module.d.ts +0 -6
- package/lib/mock/form/form-definition.mock.d.ts +0 -19
- package/lib/mock/form/form.component.mock.d.ts +0 -17
- package/lib/testing/core.testing.module.d.ts +0 -11
|
@@ -1,914 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
/* eslint-disable @angular-eslint/no-conflicting-lifecycle */
|
|
18
|
-
import { Component, ContentChild, DestroyRef, ElementRef, EventEmitter, HostListener, inject, Input, IterableDiffers, Output, QueryList, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
19
|
-
import { ConfigurableFocusTrapFactory, FocusKeyManager } from '@angular/cdk/a11y';
|
|
20
|
-
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
21
|
-
import { MatMenuModule } from '@angular/material/menu';
|
|
22
|
-
import { Observable } from 'rxjs';
|
|
23
|
-
import { DataColumnListComponent } from '../../data-column/data-column-list.component';
|
|
24
|
-
import { DataRowEvent } from '../../data/data-row-event.model';
|
|
25
|
-
import { DataSorting } from '../../data/data-sorting.model';
|
|
26
|
-
import { DataTableRowComponent } from '../datatable-row/datatable-row.component';
|
|
27
|
-
import { ObjectDataRow } from '../../data/object-datarow.model';
|
|
28
|
-
import { ObjectDataColumn } from '../../data/object-datacolumn.model';
|
|
29
|
-
import { ObjectDataTableAdapter } from '../../data/object-datatable-adapter';
|
|
30
|
-
import { DataCellEvent } from '../data-cell.event';
|
|
31
|
-
import { DataRowActionEvent } from '../data-row-action.event';
|
|
32
|
-
import { buffer, debounceTime, filter, map, share } from 'rxjs/operators';
|
|
33
|
-
import { CdkDrag, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';
|
|
34
|
-
import { MatIconModule, MatIconRegistry } from '@angular/material/icon';
|
|
35
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
36
|
-
import { CommonModule } from '@angular/common';
|
|
37
|
-
import { TranslatePipe } from '@ngx-translate/core';
|
|
38
|
-
import { FileTypePipe, LocalizedDatePipe } from '../../../pipes';
|
|
39
|
-
import { DropZoneDirective } from '../../directives/drop-zone.directive';
|
|
40
|
-
import { ResizableDirective } from '../../directives/resizable/resizable.directive';
|
|
41
|
-
import { IconComponent } from '../../../icon';
|
|
42
|
-
import { ResizeHandleDirective } from '../../directives/resizable/resize-handle.directive';
|
|
43
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
44
|
-
import { UploadDirective } from '../../../directives';
|
|
45
|
-
import { ContextMenuDirective } from '../../../context-menu';
|
|
46
|
-
import { IconCellComponent } from '../icon-cell/icon-cell.component';
|
|
47
|
-
import { DateCellComponent } from '../date-cell/date-cell.component';
|
|
48
|
-
import { LocationCellComponent } from '../location-cell/location-cell.component';
|
|
49
|
-
import { FileSizeCellComponent } from '../filesize-cell/filesize-cell.component';
|
|
50
|
-
import { DataTableCellComponent } from '../datatable-cell/datatable-cell.component';
|
|
51
|
-
import { BooleanCellComponent } from '../boolean-cell/boolean-cell.component';
|
|
52
|
-
import { JsonCellComponent } from '../json-cell/json-cell.component';
|
|
53
|
-
import { AmountCellComponent } from '../amount-cell/amount-cell.component';
|
|
54
|
-
import { NumberCellComponent } from '../number-cell/number-cell.component';
|
|
55
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
56
|
-
import * as i0 from "@angular/core";
|
|
57
|
-
import * as i1 from "@angular/material/icon";
|
|
58
|
-
import * as i2 from "@angular/platform-browser";
|
|
59
|
-
import * as i3 from "@angular/cdk/a11y";
|
|
60
|
-
import * as i4 from "@angular/common";
|
|
61
|
-
import * as i5 from "@angular/material/checkbox";
|
|
62
|
-
import * as i6 from "@angular/material/button";
|
|
63
|
-
import * as i7 from "@angular/material/menu";
|
|
64
|
-
// eslint-disable-next-line no-shadow
|
|
65
|
-
export var ShowHeaderMode;
|
|
66
|
-
(function (ShowHeaderMode) {
|
|
67
|
-
ShowHeaderMode["Never"] = "never";
|
|
68
|
-
ShowHeaderMode["Always"] = "always";
|
|
69
|
-
ShowHeaderMode["Data"] = "data";
|
|
70
|
-
})(ShowHeaderMode || (ShowHeaderMode = {}));
|
|
71
|
-
export class DataTableComponent {
|
|
72
|
-
static { this.MINIMUM_COLUMN_SIZE = 100; }
|
|
73
|
-
onKeydown(event) {
|
|
74
|
-
this.keyManager.onKeydown(event);
|
|
75
|
-
}
|
|
76
|
-
constructor(elementRef, differs, matIconRegistry, sanitizer, focusTrapFactory) {
|
|
77
|
-
this.elementRef = elementRef;
|
|
78
|
-
this.matIconRegistry = matIconRegistry;
|
|
79
|
-
this.sanitizer = sanitizer;
|
|
80
|
-
this.focusTrapFactory = focusTrapFactory;
|
|
81
|
-
/** The rows that the datatable will show. */
|
|
82
|
-
this.rows = [];
|
|
83
|
-
/**
|
|
84
|
-
* Define the sort order of the datatable. Possible values are :
|
|
85
|
-
* [`created`, `desc`], [`created`, `asc`], [`due`, `desc`], [`due`, `asc`]
|
|
86
|
-
*/
|
|
87
|
-
this.sorting = [];
|
|
88
|
-
/** The columns that the datatable will show. */
|
|
89
|
-
this.columns = [];
|
|
90
|
-
/**
|
|
91
|
-
* Row selection mode. Can be none, `single` or `multiple`. For `multiple` mode,
|
|
92
|
-
* you can use Cmd (macOS) or Ctrl (Win) modifier key to toggle selection for multiple rows.
|
|
93
|
-
*/
|
|
94
|
-
this.selectionMode = 'single'; // none|single|multiple
|
|
95
|
-
/** Toggles multiple row selection, which renders checkboxes at the beginning of each row. */
|
|
96
|
-
this.multiselect = false;
|
|
97
|
-
/** Toggles main data table action column. */
|
|
98
|
-
this.mainTableAction = true;
|
|
99
|
-
/** Toggles the data actions column. */
|
|
100
|
-
this.actions = false;
|
|
101
|
-
/** Toggles the main datatable action. */
|
|
102
|
-
this.showMainDatatableActions = false;
|
|
103
|
-
/** Toggles the provided actions. */
|
|
104
|
-
this.showProvidedActions = false;
|
|
105
|
-
/** Position of the actions dropdown menu. Can be "left" or "right". */
|
|
106
|
-
this.actionsPosition = 'right'; // left|right
|
|
107
|
-
/** Toggles whether the actions dropdown should only be visible if the row is hovered over or the dropdown menu is open. */
|
|
108
|
-
this.actionsVisibleOnHover = false;
|
|
109
|
-
/** Toggles custom context menu for the component. */
|
|
110
|
-
this.contextMenu = false;
|
|
111
|
-
/** The CSS class to apply to every row. */
|
|
112
|
-
this.rowStyleClass = '';
|
|
113
|
-
/** Toggles the header. */
|
|
114
|
-
this.showHeader = ShowHeaderMode.Data;
|
|
115
|
-
/** Toggles the sticky header mode. */
|
|
116
|
-
this.stickyHeader = false;
|
|
117
|
-
/** Emitted when the user clicks a row. */
|
|
118
|
-
this.rowClick = new EventEmitter();
|
|
119
|
-
/** Emitted when the user double-clicks a row. */
|
|
120
|
-
this.rowDblClick = new EventEmitter();
|
|
121
|
-
/** Emitted before the context menu is displayed for a row. */
|
|
122
|
-
this.showRowContextMenu = new EventEmitter();
|
|
123
|
-
/** Emitted before the actions menu is displayed for a row. */
|
|
124
|
-
this.showRowActionsMenu = new EventEmitter();
|
|
125
|
-
/** Emitted when the user executes a row action. */
|
|
126
|
-
this.executeRowAction = new EventEmitter();
|
|
127
|
-
/** Emitted when the column order is changed. */
|
|
128
|
-
this.columnOrderChanged = new EventEmitter();
|
|
129
|
-
/** Emitted when the column width is changed. */
|
|
130
|
-
this.columnsWidthChanged = new EventEmitter();
|
|
131
|
-
/** Emitted when the selected row items count in the table changed. */
|
|
132
|
-
this.selectedItemsCountChanged = new EventEmitter();
|
|
133
|
-
/**
|
|
134
|
-
* Flag that indicates if the datatable is in loading state and needs to show the
|
|
135
|
-
* loading template (see the docs to learn how to configure a loading template).
|
|
136
|
-
*/
|
|
137
|
-
this.loading = false;
|
|
138
|
-
/** Flag that indicates if the datatable should show the "no permission" template. */
|
|
139
|
-
this.noPermission = false;
|
|
140
|
-
/**
|
|
141
|
-
* Should the items for the row actions menu be cached for reuse after they are loaded
|
|
142
|
-
* the first time?
|
|
143
|
-
*/
|
|
144
|
-
this.rowMenuCacheEnabled = true;
|
|
145
|
-
/**
|
|
146
|
-
* Custom resolver function which is used to parse dynamic column objects
|
|
147
|
-
* see the docs to learn how to configure a resolverFn.
|
|
148
|
-
*/
|
|
149
|
-
this.resolverFn = null;
|
|
150
|
-
/**
|
|
151
|
-
* Flag that indicate if the datatable allow the use facet widget search for filtering.
|
|
152
|
-
*/
|
|
153
|
-
this.allowFiltering = false;
|
|
154
|
-
/**
|
|
155
|
-
* Flag that indicates if the datatable allows column resizing.
|
|
156
|
-
*/
|
|
157
|
-
this.isResizingEnabled = false;
|
|
158
|
-
/**
|
|
159
|
-
* Flag that indicates if the datatable should be blurred when resizing.
|
|
160
|
-
*/
|
|
161
|
-
this.blurOnResize = true;
|
|
162
|
-
/**
|
|
163
|
-
* Flag that indicates if selection checkboxes inside row should be displayed on hover only.
|
|
164
|
-
*/
|
|
165
|
-
this.displayCheckboxesOnHover = false;
|
|
166
|
-
/**
|
|
167
|
-
* Flag that enables dragging rows
|
|
168
|
-
*/
|
|
169
|
-
this.enableDragRows = false;
|
|
170
|
-
/** Emitted when dragged row is dropped. */
|
|
171
|
-
this.dragDropped = new EventEmitter();
|
|
172
|
-
this.isSelectAllIndeterminate = false;
|
|
173
|
-
this.isSelectAllChecked = false;
|
|
174
|
-
this.selection = new Array();
|
|
175
|
-
this.selectedRowId = '';
|
|
176
|
-
this.isDraggingHeaderColumn = false;
|
|
177
|
-
this.hoveredHeaderColumnIndex = -1;
|
|
178
|
-
this.resizingColumnIndex = -1;
|
|
179
|
-
this.isDraggingRow = false;
|
|
180
|
-
this.rowMenuCache = {};
|
|
181
|
-
this.destroyRef = inject(DestroyRef);
|
|
182
|
-
if (differs) {
|
|
183
|
-
this.differ = differs.find([]).create(null);
|
|
184
|
-
}
|
|
185
|
-
this.click$ = new Observable((observer) => (this.clickObserver = observer)).pipe(share());
|
|
186
|
-
}
|
|
187
|
-
ngOnInit() {
|
|
188
|
-
this.registerDragHandleIcon();
|
|
189
|
-
}
|
|
190
|
-
ngAfterContentInit() {
|
|
191
|
-
if (this.columnList) {
|
|
192
|
-
this.columnList.columns.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
|
|
193
|
-
this.setTableSchema();
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
this.setTableSchema();
|
|
197
|
-
}
|
|
198
|
-
ngAfterViewInit() {
|
|
199
|
-
this.keyManager = new FocusKeyManager(this.rowsList).withWrap().skipPredicate((item) => item.disabled);
|
|
200
|
-
}
|
|
201
|
-
ngOnChanges(changes) {
|
|
202
|
-
this.initAndSubscribeClickStream();
|
|
203
|
-
if (this.selectedRowId) {
|
|
204
|
-
this.setRowAsContextSource();
|
|
205
|
-
}
|
|
206
|
-
const dataChanges = changes['data'];
|
|
207
|
-
const rowChanges = changes['rows'];
|
|
208
|
-
const columnChanges = changes['columns'];
|
|
209
|
-
const multiselectChanges = changes['multiselect'];
|
|
210
|
-
if (this.isPropertyChanged(dataChanges) || this.isPropertyChanged(rowChanges) || this.isPropertyChanged(columnChanges)) {
|
|
211
|
-
if (this.isTableEmpty()) {
|
|
212
|
-
this.initTable();
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
if (dataChanges) {
|
|
216
|
-
this.data = changes['data'].currentValue;
|
|
217
|
-
this.resetSelection();
|
|
218
|
-
}
|
|
219
|
-
if (rowChanges) {
|
|
220
|
-
this.setTableRows(changes['rows'].currentValue);
|
|
221
|
-
this.setTableSorting(this.sorting);
|
|
222
|
-
}
|
|
223
|
-
if (columnChanges) {
|
|
224
|
-
this.setTableColumns(changes['columns'].currentValue);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
|
-
if (changes.selectionMode && !changes.selectionMode.isFirstChange()) {
|
|
230
|
-
this.resetSelection();
|
|
231
|
-
this.emitRowSelectionEvent('row-unselect', null);
|
|
232
|
-
}
|
|
233
|
-
if (this.isPropertyChanged(changes['sorting'])) {
|
|
234
|
-
this.setTableSorting(changes['sorting'].currentValue);
|
|
235
|
-
}
|
|
236
|
-
if (multiselectChanges?.currentValue === false) {
|
|
237
|
-
this.resetSelection();
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
isColumnSortActive(column) {
|
|
241
|
-
if (!column || !this.data.getSorting()) {
|
|
242
|
-
return false;
|
|
243
|
-
}
|
|
244
|
-
return column.key === this.data.getSorting().key;
|
|
245
|
-
}
|
|
246
|
-
getVisibleColumns() {
|
|
247
|
-
return this.data.getColumns().filter((column) => !column.isHidden);
|
|
248
|
-
}
|
|
249
|
-
onDropHeaderColumn(event) {
|
|
250
|
-
const allColumns = this.data.getColumns();
|
|
251
|
-
const shownColumns = allColumns.filter((column) => !column.isHidden);
|
|
252
|
-
const hiddenColumns = allColumns.filter((column) => column.isHidden);
|
|
253
|
-
moveItemInArray(shownColumns, event.previousIndex, event.currentIndex);
|
|
254
|
-
const allColumnsWithNewOrder = [...shownColumns, ...hiddenColumns];
|
|
255
|
-
this.setTableColumns(allColumnsWithNewOrder);
|
|
256
|
-
this.columnOrderChanged.emit(allColumnsWithNewOrder);
|
|
257
|
-
this.isDraggingHeaderColumn = false;
|
|
258
|
-
}
|
|
259
|
-
ngDoCheck() {
|
|
260
|
-
const changes = this.differ.diff(this.rows);
|
|
261
|
-
if (changes) {
|
|
262
|
-
this.setTableRows(this.rows);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
isPropertyChanged(property) {
|
|
266
|
-
return !!property?.currentValue;
|
|
267
|
-
}
|
|
268
|
-
convertToRowsData(rows) {
|
|
269
|
-
return rows.map((row) => new ObjectDataRow(row, row.isSelected, row?.isSelectable));
|
|
270
|
-
}
|
|
271
|
-
convertToColumnsData(columns) {
|
|
272
|
-
return columns.map((column) => new ObjectDataColumn(column));
|
|
273
|
-
}
|
|
274
|
-
convertToDataSorting(sorting) {
|
|
275
|
-
if (sorting && sorting.length > 0) {
|
|
276
|
-
return new DataSorting(sorting[0], sorting[1], sorting[2]);
|
|
277
|
-
}
|
|
278
|
-
return null;
|
|
279
|
-
}
|
|
280
|
-
onMainMenuOpen() {
|
|
281
|
-
if (this.mainMenuTemplate && !this.focusTrap) {
|
|
282
|
-
this.focusTrap = this.focusTrapFactory.create(this.mainMenuTemplate.nativeElement);
|
|
283
|
-
this.focusTrap.focusInitialElement();
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
onMainMenuClosed() {
|
|
287
|
-
if (this.focusTrap) {
|
|
288
|
-
this.focusTrap.destroy();
|
|
289
|
-
this.focusTrap = null;
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
initAndSubscribeClickStream() {
|
|
293
|
-
this.unsubscribeClickStream();
|
|
294
|
-
const singleClickStream = this.click$.pipe(buffer(this.click$.pipe(debounceTime(250))), map((list) => list), filter((x) => x.length === 1));
|
|
295
|
-
this.singleClickStreamSub = singleClickStream.subscribe((dataRowEvents) => {
|
|
296
|
-
const event = dataRowEvents[0];
|
|
297
|
-
this.handleRowSelection(event.value, event.event);
|
|
298
|
-
this.rowClick.emit(event);
|
|
299
|
-
if (!event.defaultPrevented) {
|
|
300
|
-
this.elementRef.nativeElement.dispatchEvent(new CustomEvent('row-click', {
|
|
301
|
-
detail: event,
|
|
302
|
-
bubbles: true
|
|
303
|
-
}));
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
const multiClickStream = this.click$.pipe(buffer(this.click$.pipe(debounceTime(250))), map((list) => list), filter((x) => x.length >= 2));
|
|
307
|
-
this.multiClickStreamSub = multiClickStream.subscribe((dataRowEvents) => {
|
|
308
|
-
const event = dataRowEvents[0];
|
|
309
|
-
this.rowDblClick.emit(event);
|
|
310
|
-
if (!event.defaultPrevented) {
|
|
311
|
-
this.elementRef.nativeElement.dispatchEvent(new CustomEvent('row-dblclick', {
|
|
312
|
-
detail: event,
|
|
313
|
-
bubbles: true
|
|
314
|
-
}));
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
unsubscribeClickStream() {
|
|
319
|
-
if (this.singleClickStreamSub) {
|
|
320
|
-
this.singleClickStreamSub.unsubscribe();
|
|
321
|
-
this.singleClickStreamSub = null;
|
|
322
|
-
}
|
|
323
|
-
if (this.multiClickStreamSub) {
|
|
324
|
-
this.multiClickStreamSub.unsubscribe();
|
|
325
|
-
this.multiClickStreamSub = null;
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
initTable() {
|
|
329
|
-
const runtimeColumns = this.getRuntimeColumns();
|
|
330
|
-
this.data = new ObjectDataTableAdapter(this.rows, runtimeColumns);
|
|
331
|
-
this.setTableSorting(this.sorting);
|
|
332
|
-
this.resetSelection();
|
|
333
|
-
this.rowMenuCache = {};
|
|
334
|
-
}
|
|
335
|
-
isTableEmpty() {
|
|
336
|
-
return this.data === undefined || this.data === null;
|
|
337
|
-
}
|
|
338
|
-
setTableRows(rows) {
|
|
339
|
-
if (this.data) {
|
|
340
|
-
this.resetSelection();
|
|
341
|
-
const rowsData = this.convertToRowsData(rows);
|
|
342
|
-
this.data.setRows(rowsData);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
setTableColumns(columns) {
|
|
346
|
-
if (this.data) {
|
|
347
|
-
this.resetSelection();
|
|
348
|
-
const columnsData = this.convertToColumnsData(columns);
|
|
349
|
-
this.data.setColumns(columnsData);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
getRuntimeColumns() {
|
|
353
|
-
return [...(this.columns || []), ...this.getSchemaFromHtml()];
|
|
354
|
-
}
|
|
355
|
-
setTableSchema() {
|
|
356
|
-
const columns = this.getRuntimeColumns();
|
|
357
|
-
if (this.data && columns.length > 0) {
|
|
358
|
-
this.data.setColumns(columns);
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
setTableSorting(sorting) {
|
|
362
|
-
if (this.data) {
|
|
363
|
-
this.data.setSorting(this.convertToDataSorting(sorting));
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
getSchemaFromHtml() {
|
|
367
|
-
let schema = [];
|
|
368
|
-
if (this.columnList?.columns?.length > 0) {
|
|
369
|
-
schema = this.columnList.columns.map((c) => c);
|
|
370
|
-
}
|
|
371
|
-
return schema;
|
|
372
|
-
}
|
|
373
|
-
onRowClick(row, mouseEvent) {
|
|
374
|
-
if (mouseEvent) {
|
|
375
|
-
mouseEvent.preventDefault();
|
|
376
|
-
}
|
|
377
|
-
if (row) {
|
|
378
|
-
const rowIndex = this.data.getRows().indexOf(row) + (this.isHeaderVisible() ? 1 : 0);
|
|
379
|
-
this.keyManager.setActiveItem(rowIndex);
|
|
380
|
-
const dataRowEvent = new DataRowEvent(row, mouseEvent, this);
|
|
381
|
-
this.clickObserver.next(dataRowEvent);
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
onEnterKeyPressed(row, e) {
|
|
385
|
-
if (row) {
|
|
386
|
-
this.handleRowSelection(row, e);
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
handleRowSelection(row, e) {
|
|
390
|
-
if (!this.data || !row?.isSelectable) {
|
|
391
|
-
return;
|
|
392
|
-
}
|
|
393
|
-
if (this.isSingleSelectionMode()) {
|
|
394
|
-
if (row.isSelected) {
|
|
395
|
-
this.resetSelection();
|
|
396
|
-
this.emitRowSelectionEvent('row-unselect', null);
|
|
397
|
-
}
|
|
398
|
-
else {
|
|
399
|
-
this.resetSelection();
|
|
400
|
-
this.selectRow(row, true);
|
|
401
|
-
this.emitRowSelectionEvent('row-select', row);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
if (this.isMultiSelectionMode()) {
|
|
405
|
-
const modifier = e && (e.metaKey || e.ctrlKey);
|
|
406
|
-
let newValue;
|
|
407
|
-
if (this.selection.length === 1) {
|
|
408
|
-
newValue = !row.isSelected;
|
|
409
|
-
}
|
|
410
|
-
else {
|
|
411
|
-
newValue = modifier ? !row.isSelected : true;
|
|
412
|
-
}
|
|
413
|
-
const domEventName = newValue ? 'row-select' : 'row-unselect';
|
|
414
|
-
if (!modifier) {
|
|
415
|
-
this.resetSelection();
|
|
416
|
-
}
|
|
417
|
-
this.selectRow(row, newValue);
|
|
418
|
-
this.emitRowSelectionEvent(domEventName, row);
|
|
419
|
-
this.checkSelectAllCheckboxState();
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
resetSelection() {
|
|
423
|
-
if (this.data) {
|
|
424
|
-
const rows = this.data.getRows();
|
|
425
|
-
if (rows && rows.length > 0) {
|
|
426
|
-
rows.forEach((r) => (r.isSelected = false));
|
|
427
|
-
}
|
|
428
|
-
this.selection = [];
|
|
429
|
-
}
|
|
430
|
-
this.isSelectAllChecked = false;
|
|
431
|
-
this.isSelectAllIndeterminate = false;
|
|
432
|
-
this.selectedItemsCountChanged.emit(0);
|
|
433
|
-
}
|
|
434
|
-
onRowDblClick(row, event) {
|
|
435
|
-
if (event) {
|
|
436
|
-
event.preventDefault();
|
|
437
|
-
}
|
|
438
|
-
const dataRowEvent = new DataRowEvent(row, event, this);
|
|
439
|
-
this.clickObserver.next(dataRowEvent);
|
|
440
|
-
}
|
|
441
|
-
onRowEnterKeyDown(row, keyboardEvent) {
|
|
442
|
-
if (keyboardEvent.key === 'Enter') {
|
|
443
|
-
this.onKeyboardNavigate(row, keyboardEvent);
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
onRowKeyUp(row, keyboardEvent) {
|
|
447
|
-
const event = new CustomEvent('row-keyup', {
|
|
448
|
-
detail: {
|
|
449
|
-
row,
|
|
450
|
-
keyboardEvent,
|
|
451
|
-
sender: this
|
|
452
|
-
},
|
|
453
|
-
bubbles: true
|
|
454
|
-
});
|
|
455
|
-
this.elementRef.nativeElement.dispatchEvent(event);
|
|
456
|
-
if (event.defaultPrevented) {
|
|
457
|
-
keyboardEvent.preventDefault();
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
onKeyboardNavigate(row, keyboardEvent) {
|
|
461
|
-
if (keyboardEvent) {
|
|
462
|
-
keyboardEvent.preventDefault();
|
|
463
|
-
}
|
|
464
|
-
const event = new DataRowEvent(row, keyboardEvent, this);
|
|
465
|
-
this.rowDblClick.emit(event);
|
|
466
|
-
this.elementRef.nativeElement.dispatchEvent(new CustomEvent('row-dblclick', {
|
|
467
|
-
detail: event,
|
|
468
|
-
bubbles: true
|
|
469
|
-
}));
|
|
470
|
-
}
|
|
471
|
-
isValidClickEvent(event) {
|
|
472
|
-
if (event instanceof MouseEvent) {
|
|
473
|
-
return event.eventPhase === event.BUBBLING_PHASE;
|
|
474
|
-
}
|
|
475
|
-
else if (event instanceof KeyboardEvent) {
|
|
476
|
-
return event.eventPhase === event.AT_TARGET;
|
|
477
|
-
}
|
|
478
|
-
return false;
|
|
479
|
-
}
|
|
480
|
-
onColumnHeaderClick(column, event) {
|
|
481
|
-
if (this.isValidClickEvent(event) && column && column.sortable) {
|
|
482
|
-
const current = this.data.getSorting();
|
|
483
|
-
let newDirection = 'asc';
|
|
484
|
-
if (current && column.key === current.key) {
|
|
485
|
-
newDirection = current.direction?.toLowerCase() === 'asc' ? 'desc' : 'asc';
|
|
486
|
-
}
|
|
487
|
-
this.sorting = [column.key, newDirection, { numeric: true }];
|
|
488
|
-
this.data.setSorting(new DataSorting(column.key, newDirection, { numeric: true }));
|
|
489
|
-
this.emitSortingChangedEvent(column.key, column.sortingKey, newDirection);
|
|
490
|
-
}
|
|
491
|
-
this.keyManager.updateActiveItem(0);
|
|
492
|
-
}
|
|
493
|
-
onSelectAllClick(matCheckboxChange) {
|
|
494
|
-
this.isSelectAllChecked = matCheckboxChange.checked;
|
|
495
|
-
this.isSelectAllIndeterminate = false;
|
|
496
|
-
if (this.multiselect) {
|
|
497
|
-
const selectableRows = this.data.getRows().filter((row) => row?.isSelectable);
|
|
498
|
-
if (selectableRows && selectableRows.length > 0) {
|
|
499
|
-
for (let i = 0; i < selectableRows.length; i++) {
|
|
500
|
-
this.selectRow(selectableRows[i], matCheckboxChange.checked);
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
const domEventName = matCheckboxChange.checked ? 'row-select' : 'row-unselect';
|
|
504
|
-
const row = this.selection.length > 0 ? this.selection[0] : null;
|
|
505
|
-
this.emitRowSelectionEvent(domEventName, row);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
onCheckboxLabelClick(row, event) {
|
|
509
|
-
const target = event.target;
|
|
510
|
-
if (!(target.hasAttribute('data-adf-datatable-row-checkbox') || target.closest('[data-adf-datatable-row-checkbox]'))) {
|
|
511
|
-
this.onRowClick(row, event);
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
onCheckboxChange(row, event) {
|
|
515
|
-
const newValue = event.checked;
|
|
516
|
-
this.selectRow(row, newValue);
|
|
517
|
-
const domEventName = newValue ? 'row-select' : 'row-unselect';
|
|
518
|
-
this.emitRowSelectionEvent(domEventName, row);
|
|
519
|
-
this.checkSelectAllCheckboxState();
|
|
520
|
-
}
|
|
521
|
-
checkSelectAllCheckboxState() {
|
|
522
|
-
if (this.multiselect) {
|
|
523
|
-
let numberOfSelectedRows = 0;
|
|
524
|
-
const rows = this.data.getRows();
|
|
525
|
-
rows.forEach((row) => {
|
|
526
|
-
if (row.isSelected) {
|
|
527
|
-
numberOfSelectedRows++;
|
|
528
|
-
}
|
|
529
|
-
});
|
|
530
|
-
if (numberOfSelectedRows === rows.length) {
|
|
531
|
-
this.isSelectAllChecked = true;
|
|
532
|
-
this.isSelectAllIndeterminate = false;
|
|
533
|
-
}
|
|
534
|
-
else if (numberOfSelectedRows > 0 && numberOfSelectedRows < rows.length) {
|
|
535
|
-
this.isSelectAllChecked = false;
|
|
536
|
-
this.isSelectAllIndeterminate = true;
|
|
537
|
-
}
|
|
538
|
-
else {
|
|
539
|
-
this.isSelectAllChecked = false;
|
|
540
|
-
this.isSelectAllIndeterminate = false;
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
onImageLoadingError(event, row) {
|
|
545
|
-
if (event) {
|
|
546
|
-
const element = event.target;
|
|
547
|
-
if (this.fallbackThumbnail) {
|
|
548
|
-
element.src = this.fallbackThumbnail;
|
|
549
|
-
}
|
|
550
|
-
else {
|
|
551
|
-
element.src = row.imageErrorResolver(event);
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
isIconValue(row, col) {
|
|
556
|
-
if (row && col) {
|
|
557
|
-
const value = this.data.getValue(row, col);
|
|
558
|
-
return value?.startsWith('material-icons://');
|
|
559
|
-
}
|
|
560
|
-
return false;
|
|
561
|
-
}
|
|
562
|
-
asIconValue(row, col) {
|
|
563
|
-
if (this.isIconValue(row, col)) {
|
|
564
|
-
const value = this.data.getValue(row, col) || '';
|
|
565
|
-
return value.replace('material-icons://', '');
|
|
566
|
-
}
|
|
567
|
-
return null;
|
|
568
|
-
}
|
|
569
|
-
isColumnSorted(col, direction) {
|
|
570
|
-
if (col && direction) {
|
|
571
|
-
const sorting = this.data.getSorting();
|
|
572
|
-
return this.isSortingEqual(col, direction, sorting);
|
|
573
|
-
}
|
|
574
|
-
return false;
|
|
575
|
-
}
|
|
576
|
-
getContextMenuActions(row, col) {
|
|
577
|
-
return () => {
|
|
578
|
-
const event = new DataCellEvent(row, col, []);
|
|
579
|
-
this.showRowContextMenu.emit(event);
|
|
580
|
-
return event.value.actions;
|
|
581
|
-
};
|
|
582
|
-
}
|
|
583
|
-
getRowActions(row, col) {
|
|
584
|
-
const id = row.getValue('id');
|
|
585
|
-
if (!this.rowMenuCache[id]) {
|
|
586
|
-
const event = new DataCellEvent(row, col, []);
|
|
587
|
-
this.showRowActionsMenu.emit(event);
|
|
588
|
-
if (!this.rowMenuCacheEnabled) {
|
|
589
|
-
return this.getVisibleActions(event.value.actions);
|
|
590
|
-
}
|
|
591
|
-
this.rowMenuCache[id] = event.value.actions;
|
|
592
|
-
}
|
|
593
|
-
return this.getVisibleActions(this.rowMenuCache[id]);
|
|
594
|
-
}
|
|
595
|
-
getVisibleActions(actions) {
|
|
596
|
-
return actions.filter((action) => action.visible || action.visible === undefined);
|
|
597
|
-
}
|
|
598
|
-
onExecuteRowAction(row, action) {
|
|
599
|
-
if (action.disabled || action.disabled) {
|
|
600
|
-
event.stopPropagation();
|
|
601
|
-
}
|
|
602
|
-
else {
|
|
603
|
-
this.executeRowAction.emit(new DataRowActionEvent(row, action));
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
getHideActionsWithoutHoverClass(actionsMenuTrigger) {
|
|
607
|
-
return { 'adf-datatable-hide-actions-without-hover': this.actionsVisibleOnHover && !actionsMenuTrigger.menuOpen };
|
|
608
|
-
}
|
|
609
|
-
rowAllowsDrop(row) {
|
|
610
|
-
return row.isDropTarget === true;
|
|
611
|
-
}
|
|
612
|
-
isSingleSelectionMode() {
|
|
613
|
-
return this.selectionMode && this.selectionMode.toLowerCase() === 'single';
|
|
614
|
-
}
|
|
615
|
-
isMultiSelectionMode() {
|
|
616
|
-
return this.selectionMode && this.selectionMode.toLowerCase() === 'multiple';
|
|
617
|
-
}
|
|
618
|
-
getRowStyle(row) {
|
|
619
|
-
row.cssClass = row.cssClass ? row.cssClass : '';
|
|
620
|
-
this.rowStyleClass = this.rowStyleClass ? this.rowStyleClass : '';
|
|
621
|
-
const contextMenuSourceClass = row.isContextMenuSource ? 'adf-context-menu-source' : '';
|
|
622
|
-
const isDragEnabled = this.enableDragRows ? 'adf-drag-row' : '';
|
|
623
|
-
return `${row.cssClass} ${this.rowStyleClass} ${contextMenuSourceClass} ${isDragEnabled}`;
|
|
624
|
-
}
|
|
625
|
-
markRowAsContextMenuSource(selectedRow) {
|
|
626
|
-
this.selectedRowId = selectedRow.id ? selectedRow.id : '';
|
|
627
|
-
this.data.getRows().forEach((row) => (row.isContextMenuSource = false));
|
|
628
|
-
selectedRow.isContextMenuSource = true;
|
|
629
|
-
}
|
|
630
|
-
setRowAsContextSource() {
|
|
631
|
-
const selectedRow = this.data.getRows().find((row) => this.selectedRowId === row.id);
|
|
632
|
-
if (selectedRow) {
|
|
633
|
-
selectedRow.isContextMenuSource = true;
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
selectRow(row, value) {
|
|
637
|
-
if (row) {
|
|
638
|
-
row.isSelected = value;
|
|
639
|
-
const idx = row?.id ? this.findSelectionById(row.id) : this.selection.indexOf(row);
|
|
640
|
-
if (value) {
|
|
641
|
-
if (idx < 0) {
|
|
642
|
-
this.selection.push(row);
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
|
-
else {
|
|
646
|
-
if (idx > -1) {
|
|
647
|
-
this.selection.splice(idx, 1);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
this.selectedItemsCountChanged.emit(this.selection.length);
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
findSelectionById(id) {
|
|
654
|
-
return this.selection.findIndex((selection) => selection?.id === id);
|
|
655
|
-
}
|
|
656
|
-
getCellTooltip(row, col) {
|
|
657
|
-
if (row && col && col.formatTooltip) {
|
|
658
|
-
const result = col.formatTooltip(row, col);
|
|
659
|
-
if (result) {
|
|
660
|
-
return result;
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
return null;
|
|
664
|
-
}
|
|
665
|
-
getSortableColumns() {
|
|
666
|
-
return this.data.getColumns().filter((column) => column.sortable === true);
|
|
667
|
-
}
|
|
668
|
-
isEmpty() {
|
|
669
|
-
return this.data.getRows().length === 0;
|
|
670
|
-
}
|
|
671
|
-
isHeaderVisible() {
|
|
672
|
-
let headerVisibility;
|
|
673
|
-
if (this.showHeader === ShowHeaderMode.Data) {
|
|
674
|
-
headerVisibility = !this.loading && !this.noPermission && !this.isEmpty();
|
|
675
|
-
}
|
|
676
|
-
else if (this.showHeader === ShowHeaderMode.Always) {
|
|
677
|
-
headerVisibility = !this.loading && !this.noPermission;
|
|
678
|
-
}
|
|
679
|
-
else if (this.showHeader === ShowHeaderMode.Never) {
|
|
680
|
-
headerVisibility = false;
|
|
681
|
-
}
|
|
682
|
-
return headerVisibility;
|
|
683
|
-
}
|
|
684
|
-
isStickyHeaderEnabled() {
|
|
685
|
-
return this.stickyHeader && this.isHeaderVisible();
|
|
686
|
-
}
|
|
687
|
-
emitRowSelectionEvent(name, row) {
|
|
688
|
-
const domEvent = new CustomEvent(name, {
|
|
689
|
-
detail: {
|
|
690
|
-
row,
|
|
691
|
-
selection: this.selection
|
|
692
|
-
},
|
|
693
|
-
bubbles: true
|
|
694
|
-
});
|
|
695
|
-
this.elementRef.nativeElement.dispatchEvent(domEvent);
|
|
696
|
-
}
|
|
697
|
-
emitSortingChangedEvent(key, sortingKey, direction) {
|
|
698
|
-
const domEvent = new CustomEvent('sorting-changed', {
|
|
699
|
-
detail: {
|
|
700
|
-
key,
|
|
701
|
-
sortingKey,
|
|
702
|
-
direction
|
|
703
|
-
},
|
|
704
|
-
bubbles: true
|
|
705
|
-
});
|
|
706
|
-
this.elementRef.nativeElement.dispatchEvent(domEvent);
|
|
707
|
-
}
|
|
708
|
-
ngOnDestroy() {
|
|
709
|
-
this.unsubscribeClickStream();
|
|
710
|
-
}
|
|
711
|
-
getNameColumnValue() {
|
|
712
|
-
return this.data.getColumns().find((el) => el.key.includes('name'));
|
|
713
|
-
}
|
|
714
|
-
getAutomationValue(row) {
|
|
715
|
-
const name = this.getNameColumnValue();
|
|
716
|
-
return name ? row.getValue(name.key) : '';
|
|
717
|
-
}
|
|
718
|
-
getAriaSort(column) {
|
|
719
|
-
if (!this.isColumnSortActive(column)) {
|
|
720
|
-
return 'ADF-DATATABLE.ACCESSIBILITY.SORT_NONE';
|
|
721
|
-
}
|
|
722
|
-
return this.isColumnSorted(column, 'asc') ? 'ADF-DATATABLE.ACCESSIBILITY.SORT_ASCENDING' : 'ADF-DATATABLE.ACCESSIBILITY.SORT_DESCENDING';
|
|
723
|
-
}
|
|
724
|
-
getSortLiveAnnouncement(column) {
|
|
725
|
-
if (!this.isColumnSortActive(column)) {
|
|
726
|
-
return 'ADF-DATATABLE.ACCESSIBILITY.SORT_DEFAULT';
|
|
727
|
-
}
|
|
728
|
-
return this.isColumnSorted(column, 'asc')
|
|
729
|
-
? 'ADF-DATATABLE.ACCESSIBILITY.SORT_ASCENDING_BY'
|
|
730
|
-
: 'ADF-DATATABLE.ACCESSIBILITY.SORT_DESCENDING_BY';
|
|
731
|
-
}
|
|
732
|
-
registerDragHandleIcon() {
|
|
733
|
-
const iconUrl = this.sanitizer.bypassSecurityTrustResourceUrl('./assets/images/drag_indicator_24px.svg');
|
|
734
|
-
this.matIconRegistry.addSvgIconInNamespace('adf', 'drag_indicator', iconUrl);
|
|
735
|
-
}
|
|
736
|
-
onResizing({ rectangle: { width } }, colIndex) {
|
|
737
|
-
const timeoutId = setTimeout(() => {
|
|
738
|
-
const allColumns = this.getVisibleColumns();
|
|
739
|
-
allColumns[colIndex].width = width;
|
|
740
|
-
this.data.setColumns(allColumns);
|
|
741
|
-
if (!this.isResizing) {
|
|
742
|
-
clearTimeout(timeoutId);
|
|
743
|
-
}
|
|
744
|
-
});
|
|
745
|
-
}
|
|
746
|
-
onResizingEnd() {
|
|
747
|
-
this.resizingColumnIndex = -1;
|
|
748
|
-
this.updateColumnsWidths();
|
|
749
|
-
}
|
|
750
|
-
getFlexValue({ width = 0 }) {
|
|
751
|
-
return `0 1 ${width < DataTableComponent.MINIMUM_COLUMN_SIZE ? DataTableComponent.MINIMUM_COLUMN_SIZE : width}px`;
|
|
752
|
-
}
|
|
753
|
-
filterDisabledColumns(index, _drag, drop) {
|
|
754
|
-
return !drop.getSortedItems()[index].disabled;
|
|
755
|
-
}
|
|
756
|
-
onDragDrop(droppedEvent) {
|
|
757
|
-
if (this.enableDragRows) {
|
|
758
|
-
this.dragDropped.emit({ previousIndex: droppedEvent.previousIndex, currentIndex: droppedEvent.currentIndex });
|
|
759
|
-
}
|
|
760
|
-
}
|
|
761
|
-
onDragStart() {
|
|
762
|
-
this.isDraggingRow = true;
|
|
763
|
-
}
|
|
764
|
-
onDragEnd() {
|
|
765
|
-
this.isDraggingRow = false;
|
|
766
|
-
}
|
|
767
|
-
updateColumnsWidths() {
|
|
768
|
-
const allColumns = this.data.getColumns();
|
|
769
|
-
const headerContainer = document.querySelector('.adf-datatable-header');
|
|
770
|
-
if (headerContainer) {
|
|
771
|
-
const headerContainerColumns = headerContainer.querySelectorAll('.adf-datatable-cell-header:not(.adf-datatable-checkbox)');
|
|
772
|
-
headerContainerColumns.forEach((column, index) => {
|
|
773
|
-
if (allColumns[index]) {
|
|
774
|
-
if (index === 0) {
|
|
775
|
-
allColumns[index].width = column.clientWidth - parseInt(window.getComputedStyle(column).paddingLeft, 10);
|
|
776
|
-
}
|
|
777
|
-
else if (index === headerContainerColumns.length - 1) {
|
|
778
|
-
allColumns[index].width = column.clientWidth - parseInt(window.getComputedStyle(column).paddingRight, 10);
|
|
779
|
-
}
|
|
780
|
-
else {
|
|
781
|
-
allColumns[index].width = column.clientWidth;
|
|
782
|
-
}
|
|
783
|
-
}
|
|
784
|
-
});
|
|
785
|
-
}
|
|
786
|
-
this.data.setColumns(allColumns);
|
|
787
|
-
this.columnsWidthChanged.emit(allColumns);
|
|
788
|
-
}
|
|
789
|
-
isSortingEqual(col, direction, sorting) {
|
|
790
|
-
return sorting && (sorting.key === col.key || sorting.key === col.sortingKey) && sorting.direction?.toLocaleLowerCase() === direction;
|
|
791
|
-
}
|
|
792
|
-
get isResizing() {
|
|
793
|
-
return this.resizingColumnIndex >= 0;
|
|
794
|
-
}
|
|
795
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.IterableDiffers }, { token: i1.MatIconRegistry }, { token: i2.DomSanitizer }, { token: i3.ConfigurableFocusTrapFactory }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
796
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataTableComponent, isStandalone: true, selector: "adf-datatable", inputs: { data: "data", rows: "rows", sorting: "sorting", columns: "columns", selectionMode: "selectionMode", multiselect: "multiselect", mainTableAction: "mainTableAction", actions: "actions", showMainDatatableActions: "showMainDatatableActions", showProvidedActions: "showProvidedActions", actionsPosition: "actionsPosition", actionsVisibleOnHover: "actionsVisibleOnHover", fallbackThumbnail: "fallbackThumbnail", contextMenu: "contextMenu", rowStyle: "rowStyle", rowStyleClass: "rowStyleClass", showHeader: "showHeader", stickyHeader: "stickyHeader", loading: "loading", noPermission: "noPermission", rowMenuCacheEnabled: "rowMenuCacheEnabled", resolverFn: "resolverFn", allowFiltering: "allowFiltering", isResizingEnabled: "isResizingEnabled", blurOnResize: "blurOnResize", displayCheckboxesOnHover: "displayCheckboxesOnHover", enableDragRows: "enableDragRows" }, outputs: { rowClick: "rowClick", rowDblClick: "rowDblClick", showRowContextMenu: "showRowContextMenu", showRowActionsMenu: "showRowActionsMenu", executeRowAction: "executeRowAction", columnOrderChanged: "columnOrderChanged", columnsWidthChanged: "columnsWidthChanged", selectedItemsCountChanged: "selectedItemsCountChanged", dragDropped: "dragDropped" }, host: { listeners: { "keyup": "onKeydown($event)" }, classAttribute: "adf-datatable" }, queries: [{ propertyName: "columnList", first: true, predicate: DataColumnListComponent, descendants: true }], viewQueries: [{ propertyName: "mainMenuTemplate", first: true, predicate: ["mainMenuTemplate"], descendants: true }, { propertyName: "rowsList", predicate: DataTableRowComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n role=\"grid\"\n *ngIf=\"data\"\n class=\"adf-full-width adf-datatable-list\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\"\n>\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n role=\"row\">\n\n\n <!-- Drag -->\n <div *ngIf=\"enableDragRows\" class=\"adf-datatable-cell-header adf-drag-column\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate }}</span>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\"\n [checked]=\"isSelectAllChecked\"\n (change)=\"onSelectAllClick($event)\"\n class=\"adf-checkbox-sr-only\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}\n </mat-checkbox>\n </div>\n\n <ng-container\n *ngFor=\"\n let col of getVisibleColumns();\n let columnIndex = index\n let lastColumn = last\"\n >\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngIf=\"col.title || !showProvidedActions\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"(col.title | translate) + (col.subtitle ? ' ' + col.subtitle : '')\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\"\n [dropColumn]=\"col\"\n >\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span\n *ngIf=\"col.title\"\n title=\"{{col.title | translate}}\"\n class=\"adf-datatable-cell-value\"\n >\n {{col.title | translate}}\n </span>\n\n <span\n *ngIf=\"col.subtitle\"\n title=\"{{col.subtitle | translate}}\"\n class=\"adf-datatable-cell-value adf-datatable-cell-header_subtitle\"\n >\n ({{col.subtitle | translate}})\n </span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n class=\"adf-datatable-cell-header-drag-icon-visible\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\" />\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n tabindex=\"0\"\n role=\"button\"\n (click)=\"$event.stopPropagation()\"\n (keyup.enter)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n </ng-container>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n [class.adf-datatable-actions-menu-provided]=\"showProvidedActions\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n title=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (click)=\"onMainMenuOpen()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu (closed)=\"onMainMenuClosed()\">\n <div #mainMenuTemplate role=\"presentation\" (keydown.tab)=\"$event.stopPropagation()\">\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\" />\n </div>\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n </div>\n\n <div\n *ngIf=\"!loading; else loadingRowTemplate\"\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing), 'adf-datatable-body__draggable': enableDragRows && !isDraggingRow, 'adf-datatable-body__dragging': isDraggingRow }\"\n cdkDropList\n [cdkDropListDisabled]=\"!enableDragRows\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!noPermission; else noPermissionsRowTemplate\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n cdkDrag\n [cdkDragDisabled]=\"!enableDragRows\"\n (cdkDragDropped)=\"onDragDrop($event)\"\n (cdkDragStarted)=\"onDragStart()\"\n (cdkDragEnded)=\"onDragEnd()\"\n [cdkDragBoundary]=\"'.adf-datatable-body'\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [class.adf-datatable-row__dragging]=\"isDraggingRow\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Drag button -->\n <div *ngIf=\"enableDragRows\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-hover-only\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate\">\n <mat-icon>drag_indicator</mat-icon>\n </button>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n (click)=\"onCheckboxLabelClick(row, $event)\"\n [for]=\"'select-file-' + idx\"\n class=\"adf-datatable-cell adf-datatable-checkbox adf-datatable-checkbox-single\"\n tabindex=\"0\">\n <mat-checkbox\n [id]=\"'select-file-' + idx\"\n [disabled]=\"!row?.isSelectable\"\n [class.adf-datatable-checkbox-selected]=\"row.isSelected\"\n [class.adf-datatable-hover-only]=\"displayCheckboxesOnHover\"\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate\"\n data-adf-datatable-row-checkbox\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n\n <div\n *ngFor=\"let col of getVisibleColumns(); let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n tabindex=\"0\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n >\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\" />\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n />\n </div>\n <div\n *ngSwitchCase=\"'date'\"\n class=\"adf-cell-value adf-cell-date\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \">\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\" />\n </div>\n\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\" />\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\" />\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\" />\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\" />\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n !showProvidedActions &&\n ((actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions))\"\n role=\"gridcell\"\n tabindex=\"0\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\" role=\"row\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\" />\n <ng-content select=\"adf-empty-list\" />\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPermissionsRowTemplate>\n <div\n role=\"row\"\n class=\"adf-datatable-row adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\" />\n </div>\n </div>\n </ng-template>\n </div>\n <ng-template #loadingRowTemplate>\n <div class=\"adf-datatable-row adf-datatable-data-loading\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\" />\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-list,.cdk-drag-preview{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie,.cdk-drag-preview .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie,.cdk-drag-preview .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie,.cdk-drag-preview .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header,.cdk-drag-preview .adf-datatable-header{display:flex;flex-direction:column;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row,.cdk-drag-preview .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:not(.adf-datatable-data-loading):hover,.adf-datatable-list .adf-datatable-row:not(.adf-datatable-data-loading):focus,.cdk-drag-preview .adf-datatable-row:not(.adf-datatable-data-loading):hover,.cdk-drag-preview .adf-datatable-row:not(.adf-datatable-data-loading):focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus,.cdk-drag-preview .adf-datatable-row .adf-cell-value:focus,.cdk-drag-preview .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body,.cdk-drag-preview .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body,.cdk-drag-preview .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body.adf-datatable-body__draggable,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__draggable{cursor:grab}.adf-datatable-list .adf-datatable-body.adf-datatable-body__dragging,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__dragging{cursor:grabbing}.adf-datatable-list .adf-datatable-body .adf-datatable-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-drag-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-drag-row{cursor:grab}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child,.cdk-drag-preview .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-body .adf-datatable-row label,.cdk-drag-preview .adf-datatable-body .adf-datatable-row label{cursor:inherit}.adf-datatable-list .adf-datatable-row,.cdk-drag-preview .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row:hover .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row:hover .adf-datatable-hover-only{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only{visibility:hidden}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text,.cdk-drag-preview .adf-datatable-cell--text,.cdk-drag-preview .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date,.cdk-drag-preview .adf-datatable-cell--date,.cdk-drag-preview .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number,.cdk-drag-preview .adf-datatable-cell--number,.cdk-drag-preview .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon,.cdk-drag-preview .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--icon,.cdk-drag-preview .adf-datatable-cell-header--image,.cdk-drag-preview .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize,.cdk-drag-preview .adf-datatable-cell--fileSize,.cdk-drag-preview .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell button .mat-icon,.adf-datatable-list .adf-datatable-cell-header button .mat-icon,.cdk-drag-preview .adf-datatable-cell button .mat-icon,.cdk-drag-preview .adf-datatable-cell-header button .mat-icon{margin-top:-10px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex;align-self:stretch}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child,.cdk-drag-preview .adf-datatable-cell:first-child,.cdk-drag-preview .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell.adf-drag-column,.adf-datatable-list .adf-datatable-cell-header.adf-drag-column,.cdk-drag-preview .adf-datatable-cell.adf-drag-column,.cdk-drag-preview .adf-datatable-cell-header.adf-drag-column{flex:0}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu-provided,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu-provided{max-width:100px!important;justify-content:center;padding-right:0}.adf-datatable-list .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-checkbox{display:flex;justify-content:center}.adf-datatable-list .adf-cell-value,.cdk-drag-preview .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable__actions-cell,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value,.cdk-drag-preview .adf-datatable__actions-cell .adf-cell-value,.cdk-drag-preview .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{visibility:hidden}.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a,.cdk-drag-preview .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover,.cdk-drag-preview .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only,.cdk-drag-preview .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected,.cdk-drag-preview .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link,.cdk-drag-preview .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover,.cdk-drag-preview .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell,.cdk-drag-preview .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after,.cdk-drag-preview .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container,.cdk-drag-preview .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img,.cdk-drag-preview .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover,.cdk-drag-preview .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell,.cdk-drag-preview .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden,.cdk-drag-preview .adf-hidden{display:none}@media all and (width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (device-width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header_subtitle{margin-left:3px;opacity:.6}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon-visible{display:flex}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{min-height:var(--theme-display-3-font-size);display:flex;flex-direction:row;align-items:center;box-sizing:unset;background-color:var(--theme-background-color);border-top:2px solid var(--theme-selected-background-color);opacity:1}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mdc-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (width <= 380px){.adf-datatable-header{max-height:50%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i4.UpperCasePipe, name: "uppercase" }, { kind: "component", type: DataTableRowComponent, selector: "adf-datatable-row", inputs: ["row", "disabled"], outputs: ["select"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: DropZoneDirective, selector: "[adf-drop-zone]", inputs: ["dropTarget", "dropRow", "dropColumn"] }, { kind: "directive", type: ResizableDirective, selector: "[adf-resizable]", inputs: ["coverPadding"], outputs: ["resizeStart", "resizing", "resizeEnd"], exportAs: ["adf-resizable"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "directive", type: ResizeHandleDirective, selector: "[adf-resize-handle]", inputs: ["resizableContainer"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: UploadDirective, selector: "[adf-upload]", inputs: ["adf-upload", "adf-upload-data", "mode", "multiple", "accept", "directory"] }, { kind: "directive", type: ContextMenuDirective, selector: "[adf-context-menu]", inputs: ["adf-context-menu", "adf-context-menu-enabled"] }, { kind: "pipe", type: FileTypePipe, name: "fileType" }, { kind: "component", type: IconCellComponent, selector: "adf-icon-cell" }, { kind: "pipe", type: LocalizedDatePipe, name: "adfLocalizedDate" }, { kind: "component", type: DateCellComponent, selector: "adf-date-cell", inputs: ["dateConfig"] }, { kind: "component", type: LocationCellComponent, selector: "adf-location-cell", inputs: ["link"] }, { kind: "component", type: FileSizeCellComponent, selector: "adf-filesize-cell" }, { kind: "component", type: DataTableCellComponent, selector: "adf-datatable-cell", inputs: ["data", "column", "row", "copyContent", "tooltip", "resolverFn"] }, { kind: "component", type: BooleanCellComponent, selector: "adf-boolean-cell" }, { kind: "component", type: JsonCellComponent, selector: "adf-json-cell", inputs: ["editable"] }, { kind: "component", type: AmountCellComponent, selector: "adf-amount-cell", inputs: ["currencyConfig"] }, { kind: "component", type: NumberCellComponent, selector: "adf-number-cell", inputs: ["decimalConfig"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
797
|
-
}
|
|
798
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
799
|
-
type: Component,
|
|
800
|
-
args: [{ selector: 'adf-datatable', standalone: true, imports: [
|
|
801
|
-
CommonModule,
|
|
802
|
-
DataTableRowComponent,
|
|
803
|
-
CdkDropList,
|
|
804
|
-
TranslatePipe,
|
|
805
|
-
MatCheckboxModule,
|
|
806
|
-
CdkDrag,
|
|
807
|
-
DropZoneDirective,
|
|
808
|
-
ResizableDirective,
|
|
809
|
-
CdkDragHandle,
|
|
810
|
-
IconComponent,
|
|
811
|
-
ResizeHandleDirective,
|
|
812
|
-
MatButtonModule,
|
|
813
|
-
MatMenuModule,
|
|
814
|
-
MatIconModule,
|
|
815
|
-
UploadDirective,
|
|
816
|
-
ContextMenuDirective,
|
|
817
|
-
FileTypePipe,
|
|
818
|
-
IconCellComponent,
|
|
819
|
-
LocalizedDatePipe,
|
|
820
|
-
DateCellComponent,
|
|
821
|
-
LocationCellComponent,
|
|
822
|
-
FileSizeCellComponent,
|
|
823
|
-
DataTableCellComponent,
|
|
824
|
-
BooleanCellComponent,
|
|
825
|
-
JsonCellComponent,
|
|
826
|
-
AmountCellComponent,
|
|
827
|
-
NumberCellComponent
|
|
828
|
-
], encapsulation: ViewEncapsulation.None, host: { class: 'adf-datatable' }, template: "<div\n role=\"grid\"\n *ngIf=\"data\"\n class=\"adf-full-width adf-datatable-list\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\"\n>\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n role=\"row\">\n\n\n <!-- Drag -->\n <div *ngIf=\"enableDragRows\" class=\"adf-datatable-cell-header adf-drag-column\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate }}</span>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\"\n [checked]=\"isSelectAllChecked\"\n (change)=\"onSelectAllClick($event)\"\n class=\"adf-checkbox-sr-only\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}\n </mat-checkbox>\n </div>\n\n <ng-container\n *ngFor=\"\n let col of getVisibleColumns();\n let columnIndex = index\n let lastColumn = last\"\n >\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngIf=\"col.title || !showProvidedActions\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"(col.title | translate) + (col.subtitle ? ' ' + col.subtitle : '')\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\"\n [dropColumn]=\"col\"\n >\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span\n *ngIf=\"col.title\"\n title=\"{{col.title | translate}}\"\n class=\"adf-datatable-cell-value\"\n >\n {{col.title | translate}}\n </span>\n\n <span\n *ngIf=\"col.subtitle\"\n title=\"{{col.subtitle | translate}}\"\n class=\"adf-datatable-cell-value adf-datatable-cell-header_subtitle\"\n >\n ({{col.subtitle | translate}})\n </span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n class=\"adf-datatable-cell-header-drag-icon-visible\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\" />\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n tabindex=\"0\"\n role=\"button\"\n (click)=\"$event.stopPropagation()\"\n (keyup.enter)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n </ng-container>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n [class.adf-datatable-actions-menu-provided]=\"showProvidedActions\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n title=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (click)=\"onMainMenuOpen()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu (closed)=\"onMainMenuClosed()\">\n <div #mainMenuTemplate role=\"presentation\" (keydown.tab)=\"$event.stopPropagation()\">\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\" />\n </div>\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n </div>\n\n <div\n *ngIf=\"!loading; else loadingRowTemplate\"\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing), 'adf-datatable-body__draggable': enableDragRows && !isDraggingRow, 'adf-datatable-body__dragging': isDraggingRow }\"\n cdkDropList\n [cdkDropListDisabled]=\"!enableDragRows\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!noPermission; else noPermissionsRowTemplate\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n cdkDrag\n [cdkDragDisabled]=\"!enableDragRows\"\n (cdkDragDropped)=\"onDragDrop($event)\"\n (cdkDragStarted)=\"onDragStart()\"\n (cdkDragEnded)=\"onDragEnd()\"\n [cdkDragBoundary]=\"'.adf-datatable-body'\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [class.adf-datatable-row__dragging]=\"isDraggingRow\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Drag button -->\n <div *ngIf=\"enableDragRows\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-hover-only\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate\">\n <mat-icon>drag_indicator</mat-icon>\n </button>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n (click)=\"onCheckboxLabelClick(row, $event)\"\n [for]=\"'select-file-' + idx\"\n class=\"adf-datatable-cell adf-datatable-checkbox adf-datatable-checkbox-single\"\n tabindex=\"0\">\n <mat-checkbox\n [id]=\"'select-file-' + idx\"\n [disabled]=\"!row?.isSelectable\"\n [class.adf-datatable-checkbox-selected]=\"row.isSelected\"\n [class.adf-datatable-hover-only]=\"displayCheckboxesOnHover\"\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate\"\n data-adf-datatable-row-checkbox\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n\n <div\n *ngFor=\"let col of getVisibleColumns(); let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n tabindex=\"0\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n >\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\" />\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n />\n </div>\n <div\n *ngSwitchCase=\"'date'\"\n class=\"adf-cell-value adf-cell-date\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \">\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\" />\n </div>\n\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\" />\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\" />\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\" />\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\" />\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n !showProvidedActions &&\n ((actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions))\"\n role=\"gridcell\"\n tabindex=\"0\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\" role=\"row\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\" />\n <ng-content select=\"adf-empty-list\" />\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPermissionsRowTemplate>\n <div\n role=\"row\"\n class=\"adf-datatable-row adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\" />\n </div>\n </div>\n </ng-template>\n </div>\n <ng-template #loadingRowTemplate>\n <div class=\"adf-datatable-row adf-datatable-data-loading\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\" />\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-list,.cdk-drag-preview{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie,.cdk-drag-preview .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie,.cdk-drag-preview .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie,.cdk-drag-preview .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header,.cdk-drag-preview .adf-datatable-header{display:flex;flex-direction:column;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row,.cdk-drag-preview .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:not(.adf-datatable-data-loading):hover,.adf-datatable-list .adf-datatable-row:not(.adf-datatable-data-loading):focus,.cdk-drag-preview .adf-datatable-row:not(.adf-datatable-data-loading):hover,.cdk-drag-preview .adf-datatable-row:not(.adf-datatable-data-loading):focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus,.cdk-drag-preview .adf-datatable-row .adf-cell-value:focus,.cdk-drag-preview .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body,.cdk-drag-preview .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body,.cdk-drag-preview .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body.adf-datatable-body__draggable,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__draggable{cursor:grab}.adf-datatable-list .adf-datatable-body.adf-datatable-body__dragging,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__dragging{cursor:grabbing}.adf-datatable-list .adf-datatable-body .adf-datatable-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-drag-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-drag-row{cursor:grab}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child,.cdk-drag-preview .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-body .adf-datatable-row label,.cdk-drag-preview .adf-datatable-body .adf-datatable-row label{cursor:inherit}.adf-datatable-list .adf-datatable-row,.cdk-drag-preview .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row:hover .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row:hover .adf-datatable-hover-only{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only{visibility:hidden}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text,.cdk-drag-preview .adf-datatable-cell--text,.cdk-drag-preview .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date,.cdk-drag-preview .adf-datatable-cell--date,.cdk-drag-preview .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number,.cdk-drag-preview .adf-datatable-cell--number,.cdk-drag-preview .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon,.cdk-drag-preview .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--icon,.cdk-drag-preview .adf-datatable-cell-header--image,.cdk-drag-preview .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize,.cdk-drag-preview .adf-datatable-cell--fileSize,.cdk-drag-preview .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell button .mat-icon,.adf-datatable-list .adf-datatable-cell-header button .mat-icon,.cdk-drag-preview .adf-datatable-cell button .mat-icon,.cdk-drag-preview .adf-datatable-cell-header button .mat-icon{margin-top:-10px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex;align-self:stretch}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child,.cdk-drag-preview .adf-datatable-cell:first-child,.cdk-drag-preview .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell.adf-drag-column,.adf-datatable-list .adf-datatable-cell-header.adf-drag-column,.cdk-drag-preview .adf-datatable-cell.adf-drag-column,.cdk-drag-preview .adf-datatable-cell-header.adf-drag-column{flex:0}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu-provided,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu-provided{max-width:100px!important;justify-content:center;padding-right:0}.adf-datatable-list .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-checkbox{display:flex;justify-content:center}.adf-datatable-list .adf-cell-value,.cdk-drag-preview .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable__actions-cell,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value,.cdk-drag-preview .adf-datatable__actions-cell .adf-cell-value,.cdk-drag-preview .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{visibility:hidden}.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a,.cdk-drag-preview .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover,.cdk-drag-preview .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only,.cdk-drag-preview .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected,.cdk-drag-preview .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link,.cdk-drag-preview .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover,.cdk-drag-preview .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell,.cdk-drag-preview .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after,.cdk-drag-preview .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container,.cdk-drag-preview .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img,.cdk-drag-preview .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover,.cdk-drag-preview .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell,.cdk-drag-preview .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden,.cdk-drag-preview .adf-hidden{display:none}@media all and (width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (device-width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header_subtitle{margin-left:3px;opacity:.6}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon-visible{display:flex}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{min-height:var(--theme-display-3-font-size);display:flex;flex-direction:row;align-items:center;box-sizing:unset;background-color:var(--theme-background-color);border-top:2px solid var(--theme-selected-background-color);opacity:1}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mdc-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (width <= 380px){.adf-datatable-header{max-height:50%}}\n"] }]
|
|
829
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.IterableDiffers }, { type: i1.MatIconRegistry }, { type: i2.DomSanitizer }, { type: i3.ConfigurableFocusTrapFactory }], propDecorators: { rowsList: [{
|
|
830
|
-
type: ViewChildren,
|
|
831
|
-
args: [DataTableRowComponent]
|
|
832
|
-
}], mainMenuTemplate: [{
|
|
833
|
-
type: ViewChild,
|
|
834
|
-
args: ['mainMenuTemplate']
|
|
835
|
-
}], columnList: [{
|
|
836
|
-
type: ContentChild,
|
|
837
|
-
args: [DataColumnListComponent]
|
|
838
|
-
}], data: [{
|
|
839
|
-
type: Input
|
|
840
|
-
}], rows: [{
|
|
841
|
-
type: Input
|
|
842
|
-
}], sorting: [{
|
|
843
|
-
type: Input
|
|
844
|
-
}], columns: [{
|
|
845
|
-
type: Input
|
|
846
|
-
}], selectionMode: [{
|
|
847
|
-
type: Input
|
|
848
|
-
}], multiselect: [{
|
|
849
|
-
type: Input
|
|
850
|
-
}], mainTableAction: [{
|
|
851
|
-
type: Input
|
|
852
|
-
}], actions: [{
|
|
853
|
-
type: Input
|
|
854
|
-
}], showMainDatatableActions: [{
|
|
855
|
-
type: Input
|
|
856
|
-
}], showProvidedActions: [{
|
|
857
|
-
type: Input
|
|
858
|
-
}], actionsPosition: [{
|
|
859
|
-
type: Input
|
|
860
|
-
}], actionsVisibleOnHover: [{
|
|
861
|
-
type: Input
|
|
862
|
-
}], fallbackThumbnail: [{
|
|
863
|
-
type: Input
|
|
864
|
-
}], contextMenu: [{
|
|
865
|
-
type: Input
|
|
866
|
-
}], rowStyle: [{
|
|
867
|
-
type: Input
|
|
868
|
-
}], rowStyleClass: [{
|
|
869
|
-
type: Input
|
|
870
|
-
}], showHeader: [{
|
|
871
|
-
type: Input
|
|
872
|
-
}], stickyHeader: [{
|
|
873
|
-
type: Input
|
|
874
|
-
}], rowClick: [{
|
|
875
|
-
type: Output
|
|
876
|
-
}], rowDblClick: [{
|
|
877
|
-
type: Output
|
|
878
|
-
}], showRowContextMenu: [{
|
|
879
|
-
type: Output
|
|
880
|
-
}], showRowActionsMenu: [{
|
|
881
|
-
type: Output
|
|
882
|
-
}], executeRowAction: [{
|
|
883
|
-
type: Output
|
|
884
|
-
}], columnOrderChanged: [{
|
|
885
|
-
type: Output
|
|
886
|
-
}], columnsWidthChanged: [{
|
|
887
|
-
type: Output
|
|
888
|
-
}], selectedItemsCountChanged: [{
|
|
889
|
-
type: Output
|
|
890
|
-
}], loading: [{
|
|
891
|
-
type: Input
|
|
892
|
-
}], noPermission: [{
|
|
893
|
-
type: Input
|
|
894
|
-
}], rowMenuCacheEnabled: [{
|
|
895
|
-
type: Input
|
|
896
|
-
}], resolverFn: [{
|
|
897
|
-
type: Input
|
|
898
|
-
}], allowFiltering: [{
|
|
899
|
-
type: Input
|
|
900
|
-
}], isResizingEnabled: [{
|
|
901
|
-
type: Input
|
|
902
|
-
}], blurOnResize: [{
|
|
903
|
-
type: Input
|
|
904
|
-
}], displayCheckboxesOnHover: [{
|
|
905
|
-
type: Input
|
|
906
|
-
}], enableDragRows: [{
|
|
907
|
-
type: Input
|
|
908
|
-
}], dragDropped: [{
|
|
909
|
-
type: Output
|
|
910
|
-
}], onKeydown: [{
|
|
911
|
-
type: HostListener,
|
|
912
|
-
args: ['keyup', ['$event']]
|
|
913
|
-
}] } });
|
|
914
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZGF0YXRhYmxlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2RhdGF0YWJsZS9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsNkRBQTZEO0FBRTdELE9BQU8sRUFHSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFFVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFJZixNQUFNLEVBQ04sU0FBUyxFQUlULFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBeUIsNEJBQTRCLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekcsT0FBTyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQWtCLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBMEIsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRS9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNB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eEIsTUFBTTtnQkFRUCxPQUFPO3NCQUROLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQVFOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFRTixVQUFVO3NCQURULEtBQUs7Z0JBT04sY0FBYztzQkFEYixLQUFLO2dCQU9OLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFPTixZQUFZO3NCQURYLEtBQUs7Z0JBT04sd0JBQXdCO3NCQUR2QixLQUFLO2dCQU9OLGNBQWM7c0JBRGIsS0FBSztnQkFLTixXQUFXO3NCQURWLE1BQU07Z0JBaUNQLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1jb25mbGljdGluZy1saWZlY3ljbGUgKi9cblxuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2UsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlRm9jdXNUcmFwLCBDb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5LCBGb2N1c0tleU1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSwgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlLCBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0YUNvbHVtbkxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kYXRhLWNvbHVtbi9kYXRhLWNvbHVtbi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhQ29sdW1uIH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLWNvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhUm93RXZlbnQgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGEtcm93LWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IERhdGFSb3cgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGEtcm93Lm1vZGVsJztcbmltcG9ydCB7IERhdGFTb3J0aW5nIH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLXNvcnRpbmcubW9kZWwnO1xuaW1wb3J0IHsgRGF0YVRhYmxlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YXRhYmxlLWFkYXB0ZXInO1xuaW1wb3J0IHsgRGF0YVRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLXJvdy9kYXRhdGFibGUtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYmplY3REYXRhUm93IH0gZnJvbSAnLi4vLi4vZGF0YS9vYmplY3QtZGF0YXJvdy5tb2RlbCc7XG5pbXBvcnQgeyBPYmplY3REYXRhQ29sdW1uIH0gZnJvbSAnLi4vLi4vZGF0YS9vYmplY3QtZGF0YWNvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBPYmplY3REYXRhVGFibGVBZGFwdGVyIH0gZnJvbSAnLi4vLi4vZGF0YS9vYmplY3QtZGF0YXRhYmxlLWFkYXB0ZXInO1xuaW1wb3J0IHsgRGF0YUNlbGxFdmVudCB9IGZyb20gJy4uL2RhdGEtY2VsbC5ldmVudCc7XG5pbXBvcnQgeyBEYXRhUm93QWN0aW9uRXZlbnQgfSBmcm9tICcuLi9kYXRhLXJvdy1hY3Rpb24uZXZlbnQnO1xuaW1wb3J0IHsgYnVmZmVyLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBzaGFyZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcmFnSGFuZGxlLCBDZGtEcm9wTGlzdCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlLCBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUmVzaXplRXZlbnQgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Jlc2l6YWJsZS90eXBlcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRmlsZVR5cGVQaXBlLCBMb2NhbGl6ZWREYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzJztcbmltcG9ydCB7IERyb3Bab25lRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9kcm9wLXpvbmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJlc2l6YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVzaXphYmxlL3Jlc2l6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgUmVzaXplSGFuZGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yZXNpemFibGUvcmVzaXplLWhhbmRsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFVwbG9hZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0LW1lbnUnO1xuaW1wb3J0IHsgSWNvbkNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9pY29uLWNlbGwvaWNvbi1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtY2VsbC9kYXRlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IExvY2F0aW9uQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2xvY2F0aW9uLWNlbGwvbG9jYXRpb24tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZVNpemVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZXNpemUtY2VsbC9maWxlc2l6ZS1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhVGFibGVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWNlbGwvZGF0YXRhYmxlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2xlYW5DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vYm9vbGVhbi1jZWxsL2Jvb2xlYW4tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSnNvbkNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9qc29uLWNlbGwvanNvbi1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbW91bnRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vYW1vdW50LWNlbGwvYW1vdW50LWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IE51bWJlckNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9udW1iZXItY2VsbC9udW1iZXItY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG5leHBvcnQgZW51bSBTaG93SGVhZGVyTW9kZSB7XG4gICAgTmV2ZXIgPSAnbmV2ZXInLFxuICAgIEFsd2F5cyA9ICdhbHdheXMnLFxuICAgIERhdGEgPSAnZGF0YSdcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtZGF0YXRhYmxlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBEYXRhVGFibGVSb3dDb21wb25lbnQsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBUcmFuc2xhdGVQaXBlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgQ2RrRHJhZyxcbiAgICAgICAgRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgICAgIFJlc2l6YWJsZURpcmVjdGl2ZSxcbiAgICAgICAgQ2RrRHJhZ0hhbmRsZSxcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgUmVzaXplSGFuZGxlRGlyZWN0aXZlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIFVwbG9hZERpcmVjdGl2ZSxcbiAgICAgICAgQ29udGV4dE1lbnVEaXJlY3RpdmUsXG4gICAgICAgIEZpbGVUeXBlUGlwZSxcbiAgICAgICAgSWNvbkNlbGxDb21wb25lbnQsXG4gICAgICAgIExvY2FsaXplZERhdGVQaXBlLFxuICAgICAgICBEYXRlQ2VsbENvbXBvbmVudCxcbiAgICAgICAgTG9jYXRpb25DZWxsQ29tcG9uZW50LFxuICAgICAgICBGaWxlU2l6ZUNlbGxDb21wb25lbnQsXG4gICAgICAgIERhdGFUYWJsZUNlbGxDb21wb25lbnQsXG4gICAgICAgIEJvb2xlYW5DZWxsQ29tcG9uZW50LFxuICAgICAgICBKc29uQ2VsbENvbXBvbmVudCxcbiAgICAgICAgQW1vdW50Q2VsbENvbXBvbmVudCxcbiAgICAgICAgTnVtYmVyQ2VsbENvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7IGNsYXNzOiAnYWRmLWRhdGF0YWJsZScgfVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcywgRG9DaGVjaywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgICBwcml2YXRlIHN0YXRpYyBNSU5JTVVNX0NPTFVNTl9TSVpFID0gMTAwO1xuXG4gICAgQFZpZXdDaGlsZHJlbihEYXRhVGFibGVSb3dDb21wb25lbnQpXG4gICAgcm93c0xpc3Q6IFF1ZXJ5TGlzdDxEYXRhVGFibGVSb3dDb21wb25lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnbWFpbk1lbnVUZW1wbGF0ZScpXG4gICAgbWFpbk1lbnVUZW1wbGF0ZTogRWxlbWVudFJlZjtcblxuICAgIEBDb250ZW50Q2hpbGQoRGF0YUNvbHVtbkxpc3RDb21wb25lbnQpXG4gICAgY29sdW1uTGlzdDogRGF0YUNvbHVtbkxpc3RDb21wb25lbnQ7XG5cbiAgICAvKiogRGF0YSBzb3VyY2UgZm9yIHRoZSB0YWJsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGF0YTogRGF0YVRhYmxlQWRhcHRlcjtcblxuICAgIC8qKiBUaGUgcm93cyB0aGF0IHRoZSBkYXRhdGFibGUgd2lsbCBzaG93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93czogYW55W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZSB0aGUgc29ydCBvcmRlciBvZiB0aGUgZGF0YXRhYmxlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIDpcbiAgICAgKiBbYGNyZWF0ZWRgLCBgZGVzY2BdLCBbYGNyZWF0ZWRgLCBgYXNjYF0sIFtgZHVlYCwgYGRlc2NgXSwgW2BkdWVgLCBgYXNjYF1cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNvcnRpbmc6IGFueVtdID0gW107XG5cbiAgICAvKiogVGhlIGNvbHVtbnMgdGhhdCB0aGUgZGF0YXRhYmxlIHdpbGwgc2hvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbHVtbnM6IGFueVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBSb3cgc2VsZWN0aW9uIG1vZGUuIENhbiBiZSBub25lLCBgc2luZ2xlYCBvciBgbXVsdGlwbGVgLiBGb3IgYG11bHRpcGxlYCBtb2RlLFxuICAgICAqIHlvdSBjYW4gdXNlIENtZCAobWFjT1MpIG9yIEN0cmwgKFdpbikgbW9kaWZpZXIga2V5IHRvIHRvZ2dsZSBzZWxlY3Rpb24gZm9yIG11bHRpcGxlIHJvd3MuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgPSAnc2luZ2xlJzsgLy8gbm9uZXxzaW5nbGV8bXVsdGlwbGVcblxuICAgIC8qKiBUb2dnbGVzIG11bHRpcGxlIHJvdyBzZWxlY3Rpb24sIHdoaWNoIHJlbmRlcnMgY2hlY2tib3hlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbXVsdGlzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIG1haW4gZGF0YSB0YWJsZSBhY3Rpb24gY29sdW1uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFpblRhYmxlQWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBkYXRhIGFjdGlvbnMgY29sdW1uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIG1haW4gZGF0YXRhYmxlIGFjdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dNYWluRGF0YXRhYmxlQWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHByb3ZpZGVkIGFjdGlvbnMuICovXG4gICAgQElucHV0KClcbiAgICBzaG93UHJvdmlkZWRBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogUG9zaXRpb24gb2YgdGhlIGFjdGlvbnMgZHJvcGRvd24gbWVudS4gQ2FuIGJlIFwibGVmdFwiIG9yIFwicmlnaHRcIi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbnNQb3NpdGlvbjogc3RyaW5nID0gJ3JpZ2h0JzsgLy8gbGVmdHxyaWdodFxuXG4gICAgLyoqIFRvZ2dsZXMgd2hldGhlciB0aGUgYWN0aW9ucyBkcm9wZG93biBzaG91bGQgb25seSBiZSB2aXNpYmxlIGlmIHRoZSByb3cgaXMgaG92ZXJlZCBvdmVyIG9yIHRoZSBkcm9wZG93biBtZW51IGlzIG9wZW4uICovXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25zVmlzaWJsZU9uSG92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBGYWxsYmFjayBpbWFnZSBmb3Igcm93cyB3aGVyZSB0aGUgdGh1bWJuYWlsIGlzIG1pc3NpbmcuICovXG4gICAgQElucHV0KClcbiAgICBmYWxsYmFja1RodW1ibmFpbDogc3RyaW5nO1xuXG4gICAgLyoqIFRvZ2dsZXMgY3VzdG9tIGNvbnRleHQgbWVudSBmb3IgdGhlIGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRleHRNZW51OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5saW5lIHN0eWxlIHRvIGFwcGx5IHRvIGV2ZXJ5IHJvdy4gU2VlXG4gICAgICogW05nU3R5bGVdKGh0dHBzOi8vYW5ndWxhci5pby9kb2NzL3RzL2xhdGVzdC9hcGkvY29tbW9uL2luZGV4L05nU3R5bGUtZGlyZWN0aXZlLmh0bWwpXG4gICAgICogZG9jcyBmb3IgbW9yZSBkZXRhaWxzIGFuZCB1c2FnZSBleGFtcGxlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd1N0eWxlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gICAgLyoqIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gZXZlcnkgcm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93U3R5bGVDbGFzczogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgaGVhZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0hlYWRlciA9IFNob3dIZWFkZXJNb2RlLkRhdGE7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgc3RpY2t5IGhlYWRlciBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBhIHJvdy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVJvd0V2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBkb3VibGUtY2xpY2tzIGEgcm93LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJvd0RibENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhUm93RXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCBiZWZvcmUgdGhlIGNvbnRleHQgbWVudSBpcyBkaXNwbGF5ZWQgZm9yIGEgcm93LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNob3dSb3dDb250ZXh0TWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNlbGxFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIGJlZm9yZSB0aGUgYWN0aW9ucyBtZW51IGlzIGRpc3BsYXllZCBmb3IgYSByb3cuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2hvd1Jvd0FjdGlvbnNNZW51ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhQ2VsbEV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBleGVjdXRlcyBhIHJvdyBhY3Rpb24uICovXG4gICAgQE91dHB1dCgpXG4gICAgZXhlY3V0ZVJvd0FjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVJvd0FjdGlvbkV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgY29sdW1uIG9yZGVyIGlzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgY29sdW1uT3JkZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhQ29sdW1uW10+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBjb2x1bW4gd2lkdGggaXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBjb2x1bW5zV2lkdGhDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhQ29sdW1uW10+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBzZWxlY3RlZCByb3cgaXRlbXMgY291bnQgaW4gdGhlIHRhYmxlIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICogRmxhZyB0aGF0IGluZGljYXRlcyBpZiB0aGUgZGF0YXRhYmxlIGlzIGluIGxvYWRpbmcgc3RhdGUgYW5kIG5lZWRzIHRvIHNob3cgdGhlXG4gICAgICogbG9hZGluZyB0ZW1wbGF0ZSAoc2VlIHRoZSBkb2NzIHRvIGxlYXJuIGhvdyB0byBjb25maWd1cmUgYSBsb2FkaW5nIHRlbXBsYXRlKS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBGbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBkYXRhdGFibGUgc2hvdWxkIHNob3cgdGhlIFwibm8gcGVybWlzc2lvblwiIHRlbXBsYXRlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9QZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGl0ZW1zIGZvciB0aGUgcm93IGFjdGlvbnMgbWVudSBiZSBjYWNoZWQgZm9yIHJldXNlIGFmdGVyIHRoZXkgYXJlIGxvYWRlZFxuICAgICAqIHRoZSBmaXJzdCB0aW1lP1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93TWVudUNhY2hlRW5hYmxlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCB0byBwYXJzZSBkeW5hbWljIGNvbHVtbiBvYmplY3RzXG4gICAgICogc2VlIHRoZSBkb2NzIHRvIGxlYXJuIGhvdyB0byBjb25maWd1cmUgYSByZXNvbHZlckZuLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVzb2x2ZXJGbjogKHJvdzogRGF0YVJvdywgY29sOiBEYXRhQ29sdW1uKSA9PiBhbnkgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRmxhZyB0aGF0IGluZGljYXRlIGlmIHRoZSBkYXRhdGFibGUgYWxsb3cgdGhlIHVzZSBmYWNldCB3aWRnZXQgc2VhcmNoIGZvciBmaWx0ZXJpbmcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRmxhZyB0aGF0IGluZGljYXRlcyBpZiB0aGUgZGF0YXRhYmxlIGFsbG93cyBjb2x1bW4gcmVzaXppbmcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc1Jlc2l6aW5nRW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRmxhZyB0aGF0IGluZGljYXRlcyBpZiB0aGUgZGF0YXRhYmxlIHNob3VsZCBiZSBibHVycmVkIHdoZW4gcmVzaXppbmcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBibHVyT25SZXNpemUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogRmxhZyB0aGF0IGluZGljYXRlcyBpZiBzZWxlY3Rpb24gY2hlY2tib3hlcyBpbnNpZGUgcm93IHNob3VsZCBiZSBkaXNwbGF5ZWQgb24gaG92ZXIgb25seS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlDaGVja2JveGVzT25Ib3ZlciA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRmxhZyB0aGF0IGVuYWJsZXMgZHJhZ2dpbmcgcm93c1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlRHJhZ1Jvd3MgPSBmYWxzZTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gZHJhZ2dlZCByb3cgaXMgZHJvcHBlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBkcmFnRHJvcHBlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwcmV2aW91c0luZGV4OiBudW1iZXI7IGN1cnJlbnRJbmRleDogbnVtYmVyIH0+KCk7XG5cbiAgICBoZWFkZXJGaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBub0NvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBub1Blcm1pc3Npb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBsb2FkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbWFpbkFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgaXNTZWxlY3RBbGxJbmRldGVybWluYXRlOiBib29sZWFuID0gZmFsc2U7XG4gICAgaXNTZWxlY3RBbGxDaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gICAgc2VsZWN0aW9uID0gbmV3IEFycmF5PERhdGFSb3c+KCk7XG4gICAgc2VsZWN0ZWRSb3dJZDogc3RyaW5nID0gJyc7XG5cbiAgICBpc0RyYWdnaW5nSGVhZGVyQ29sdW1uID0gZmFsc2U7XG4gICAgaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID0gLTE7XG4gICAgcmVzaXppbmdDb2x1bW5JbmRleCA9IC0xO1xuICAgIGlzRHJhZ2dpbmdSb3cgPSBmYWxzZTtcbiAgICBmb2N1c1RyYXA6IENvbmZpZ3VyYWJsZUZvY3VzVHJhcDtcblxuICAgIHByaXZhdGUga2V5TWFuYWdlcjogRm9jdXNLZXlNYW5hZ2VyPERhdGFUYWJsZVJvd0NvbXBvbmVudD47XG4gICAgcHJpdmF0ZSBjbGlja09ic2VydmVyOiBPYnNlcnZlcjxEYXRhUm93RXZlbnQ+O1xuICAgIHByaXZhdGUgY2xpY2skOiBPYnNlcnZhYmxlPERhdGFSb3dFdmVudD47XG5cbiAgICBwcml2YXRlIGRpZmZlcjogYW55O1xuICAgIHByaXZhdGUgcm93TWVudUNhY2hlOiBhbnkgPSB7fTtcblxuICAgIHByaXZhdGUgc2luZ2xlQ2xpY2tTdHJlYW1TdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIG11bHRpQ2xpY2tTdHJlYW1TdWI6IFN1YnNjcmlwdGlvbjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSlcbiAgICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1hdEljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZvY3VzVHJhcEZhY3Rvcnk6IENvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3RvcnlcbiAgICApIHtcbiAgICAgICAgaWYgKGRpZmZlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuZGlmZmVyID0gZGlmZmVycy5maW5kKFtdKS5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsaWNrJCA9IG5ldyBPYnNlcnZhYmxlPERhdGFSb3dFdmVudD4oKG9ic2VydmVyKSA9PiAodGhpcy5jbGlja09ic2VydmVyID0gb2JzZXJ2ZXIpKS5waXBlKHNoYXJlKCkpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRHJhZ0hhbmRsZUljb24oKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbkxpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTGlzdC5jb2x1bW5zLmNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlU2NoZW1hKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFRhYmxlU2NoZW1hKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmtleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyKHRoaXMucm93c0xpc3QpLndpdGhXcmFwKCkuc2tpcFByZWRpY2F0ZSgoaXRlbSkgPT4gaXRlbS5kaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICB0aGlzLmluaXRBbmRTdWJzY3JpYmVDbGlja1N0cmVhbSgpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0lkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJvd0FzQ29udGV4dFNvdXJjZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YUNoYW5nZXMgPSBjaGFuZ2VzWydkYXRhJ107XG4gICAgICAgIGNvbnN0IHJvd0NoYW5nZXMgPSBjaGFuZ2VzWydyb3dzJ107XG4gICAgICAgIGNvbnN0IGNvbHVtbkNoYW5nZXMgPSBjaGFuZ2VzWydjb2x1bW5zJ107XG4gICAgICAgIGNvbnN0IG11bHRpc2VsZWN0Q2hhbmdlcyA9IGNoYW5nZXNbJ211bHRpc2VsZWN0J107XG5cbiAgICAgICAgaWYgKHRoaXMuaXNQcm9wZXJ0eUNoYW5nZWQoZGF0YUNoYW5nZXMpIHx8IHRoaXMuaXNQcm9wZXJ0eUNoYW5nZWQocm93Q2hhbmdlcykgfHwgdGhpcy5pc1Byb3BlcnR5Q2hhbmdlZChjb2x1bW5DaGFuZ2VzKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNUYWJsZUVtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRUYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gY2hhbmdlc1snZGF0YSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyb3dDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFibGVSb3dzKGNoYW5nZXNbJ3Jvd3MnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlU29ydGluZyh0aGlzLnNvcnRpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5DaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFibGVDb2x1bW5zKGNoYW5nZXNbJ2NvbHVtbnMnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0aW9uTW9kZSAmJiAhY2hhbmdlcy5zZWxlY3Rpb25Nb2RlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQoJ3Jvdy11bnNlbGVjdCcsIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNQcm9wZXJ0eUNoYW5nZWQoY2hhbmdlc1snc29ydGluZyddKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVNvcnRpbmcoY2hhbmdlc1snc29ydGluZyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobXVsdGlzZWxlY3RDaGFuZ2VzPy5jdXJyZW50VmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uOiBEYXRhQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghY29sdW1uIHx8ICF0aGlzLmRhdGEuZ2V0U29ydGluZygpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbHVtbi5rZXkgPT09IHRoaXMuZGF0YS5nZXRTb3J0aW5nKCkua2V5O1xuICAgIH1cblxuICAgIGdldFZpc2libGVDb2x1bW5zKCk6IERhdGFDb2x1bW5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Q29sdW1ucygpLmZpbHRlcigoY29sdW1uKSA9PiAhY29sdW1uLmlzSGlkZGVuKTtcbiAgICB9XG5cbiAgICBvbkRyb3BIZWFkZXJDb2x1bW4oZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLmRhdGEuZ2V0Q29sdW1ucygpO1xuICAgICAgICBjb25zdCBzaG93bkNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiAhY29sdW1uLmlzSGlkZGVuKTtcbiAgICAgICAgY29uc3QgaGlkZGVuQ29sdW1ucyA9IGFsbENvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5pc0hpZGRlbik7XG5cbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHNob3duQ29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgY29uc3QgYWxsQ29sdW1uc1dpdGhOZXdPcmRlciA9IFsuLi5zaG93bkNvbHVtbnMsIC4uLmhpZGRlbkNvbHVtbnNdO1xuXG4gICAgICAgIHRoaXMuc2V0VGFibGVDb2x1bW5zKGFsbENvbHVtbnNXaXRoTmV3T3JkZXIpO1xuICAgICAgICB0aGlzLmNvbHVtbk9yZGVyQ2hhbmdlZC5lbWl0KGFsbENvbHVtbnNXaXRoTmV3T3JkZXIpO1xuXG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5yb3dzKTtcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVSb3dzKHRoaXMucm93cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1Byb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eTogU2ltcGxlQ2hhbmdlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXByb3BlcnR5Py5jdXJyZW50VmFsdWU7XG4gICAgfVxuXG4gICAgY29udmVydFRvUm93c0RhdGEocm93czogYW55W10pOiBPYmplY3REYXRhUm93W10ge1xuICAgICAgICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4gbmV3IE9iamVjdERhdGFSb3cocm93LCByb3cuaXNTZWxlY3RlZCwgcm93Py5pc1NlbGVjdGFibGUpKTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9Db2x1bW5zRGF0YShjb2x1bW5zOiBhbnlbXSk6IE9iamVjdERhdGFDb2x1bW5bXSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBuZXcgT2JqZWN0RGF0YUNvbHVtbihjb2x1bW4pKTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9EYXRhU29ydGluZyhzb3J0aW5nOiBhbnlbXSk6IERhdGFTb3J0aW5nIHwgbnVsbCB7XG4gICAgICAgIGlmIChzb3J0aW5nICYmIHNvcnRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRhU29ydGluZyhzb3J0aW5nWzBdLCBzb3J0aW5nWzFdLCBzb3J0aW5nWzJdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBvbk1haW5NZW51T3BlbigpIHtcbiAgICAgICAgaWYgKHRoaXMubWFpbk1lbnVUZW1wbGF0ZSAmJiAhdGhpcy5mb2N1c1RyYXApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwID0gdGhpcy5mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLm1haW5NZW51VGVtcGxhdGUubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1haW5NZW51Q2xvc2VkKCkge1xuICAgICAgICBpZiAodGhpcy5mb2N1c1RyYXApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEFuZFN1YnNjcmliZUNsaWNrU3RyZWFtKCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlQ2xpY2tTdHJlYW0oKTtcbiAgICAgICAgY29uc3Qgc2luZ2xlQ2xpY2tTdHJlYW0gPSB0aGlzLmNsaWNrJC5waXBlKFxuICAgICAgICAgICAgYnVmZmVyKHRoaXMuY2xpY2skLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpKSxcbiAgICAgICAgICAgIG1hcCgobGlzdCkgPT4gbGlzdCksXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHgubGVuZ3RoID09PSAxKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2luZ2xlQ2xpY2tTdHJlYW1TdWIgPSBzaW5nbGVDbGlja1N0cmVhbS5zdWJzY3JpYmUoKGRhdGFSb3dFdmVudHM6IERhdGFSb3dFdmVudFtdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmVudDogRGF0YVJvd0V2ZW50ID0gZGF0YVJvd0V2ZW50c1swXTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93U2VsZWN0aW9uKGV2ZW50LnZhbHVlLCBldmVudC5ldmVudCBhcyBhbnkpO1xuICAgICAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgncm93LWNsaWNrJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBtdWx0aUNsaWNrU3RyZWFtID0gdGhpcy5jbGljayQucGlwZShcbiAgICAgICAgICAgIGJ1ZmZlcih0aGlzLmNsaWNrJC5waXBlKGRlYm91bmNlVGltZSgyNTApKSksXG4gICAgICAgICAgICBtYXAoKGxpc3QpID0+IGxpc3QpLFxuICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiB4Lmxlbmd0aCA+PSAyKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubXVsdGlDbGlja1N0cmVhbVN1YiA9IG11bHRpQ2xpY2tTdHJlYW0uc3Vic2NyaWJlKChkYXRhUm93RXZlbnRzOiBEYXRhUm93RXZlbnRbXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQ6IERhdGFSb3dFdmVudCA9IGRhdGFSb3dFdmVudHNbMF07XG4gICAgICAgICAgICB0aGlzLnJvd0RibENsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdyb3ctZGJsY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVDbGlja1N0cmVhbSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2luZ2xlQ2xpY2tTdHJlYW1TdWIpIHtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlQ2xpY2tTdHJlYW1TdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlQ2xpY2tTdHJlYW1TdWIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpQ2xpY2tTdHJlYW1TdWIpIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlDbGlja1N0cmVhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5tdWx0aUNsaWNrU3RyZWFtU3ViID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFRhYmxlKCkge1xuICAgICAgICBjb25zdCBydW50aW1lQ29sdW1ucyA9IHRoaXMuZ2V0UnVudGltZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IE9iamVjdERhdGFUYWJsZUFkYXB0ZXIodGhpcy5yb3dzLCBydW50aW1lQ29sdW1ucyk7XG5cbiAgICAgICAgdGhpcy5zZXRUYWJsZVNvcnRpbmcodGhpcy5zb3J0aW5nKTtcbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnJvd01lbnVDYWNoZSA9IHt9O1xuICAgIH1cblxuICAgIGlzVGFibGVFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZGF0YSA9PT0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRhYmxlUm93cyhyb3dzOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBjb25zdCByb3dzRGF0YSA9IHRoaXMuY29udmVydFRvUm93c0RhdGEocm93cyk7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0Um93cyhyb3dzRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRhYmxlQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zRGF0YSA9IHRoaXMuY29udmVydFRvQ29sdW1uc0RhdGEoY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyhjb2x1bW5zRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1bnRpbWVDb2x1bW5zKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIFsuLi4odGhpcy5jb2x1bW5zIHx8IFtdKSwgLi4udGhpcy5nZXRTY2hlbWFGcm9tSHRtbCgpXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRhYmxlU2NoZW1hKCkge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRSdW50aW1lQ29sdW1ucygpO1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGEgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyhjb2x1bW5zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFibGVTb3J0aW5nKHNvcnRpbmc6IGFueVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRTb3J0aW5nKHRoaXMuY29udmVydFRvRGF0YVNvcnRpbmcoc29ydGluZykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNjaGVtYUZyb21IdG1sKCk6IGFueSB7XG4gICAgICAgIGxldCBzY2hlbWEgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uTGlzdD8uY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2NoZW1hID0gdGhpcy5jb2x1bW5MaXN0LmNvbHVtbnMubWFwKChjKSA9PiBjIGFzIERhdGFDb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuXG4gICAgb25Sb3dDbGljayhyb3c6IERhdGFSb3csIG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKG1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5kYXRhLmdldFJvd3MoKS5pbmRleE9mKHJvdykgKyAodGhpcy5pc0hlYWRlclZpc2libGUoKSA/IDEgOiAwKTtcbiAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHJvd0luZGV4KTtcblxuICAgICAgICAgICAgY29uc3QgZGF0YVJvd0V2ZW50ID0gbmV3IERhdGFSb3dFdmVudChyb3csIG1vdXNlRXZlbnQsIHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jbGlja09ic2VydmVyLm5leHQoZGF0YVJvd0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRW50ZXJLZXlQcmVzc2VkKHJvdzogRGF0YVJvdywgZTogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJvd1NlbGVjdGlvbihyb3csIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSb3dTZWxlY3Rpb24ocm93OiBEYXRhUm93LCBlOiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YSB8fCAhcm93Py5pc1NlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICBpZiAocm93LmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQoJ3Jvdy11bnNlbGVjdCcsIG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudCgncm93LXNlbGVjdCcsIHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc011bHRpU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBtb2RpZmllciA9IGUgJiYgKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpO1xuICAgICAgICAgICAgbGV0IG5ld1ZhbHVlOiBib29sZWFuO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gIXJvdy5pc1NlbGVjdGVkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IG1vZGlmaWVyID8gIXJvdy5pc1NlbGVjdGVkIDogdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRvbUV2ZW50TmFtZSA9IG5ld1ZhbHVlID8gJ3Jvdy1zZWxlY3QnIDogJ3Jvdy11bnNlbGVjdCc7XG5cbiAgICAgICAgICAgIGlmICghbW9kaWZpZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KGRvbUV2ZW50TmFtZSwgcm93KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTZWxlY3RBbGxDaGVja2JveFN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldFNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMuZGF0YS5nZXRSb3dzKCk7XG4gICAgICAgICAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByb3dzLmZvckVhY2goKHIpID0+IChyLmlzU2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQuZW1pdCgwKTtcbiAgICB9XG5cbiAgICBvblJvd0RibENsaWNrKHJvdzogRGF0YVJvdywgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YVJvd0V2ZW50ID0gbmV3IERhdGFSb3dFdmVudChyb3csIGV2ZW50LCB0aGlzKTtcbiAgICAgICAgdGhpcy5jbGlja09ic2VydmVyLm5leHQoZGF0YVJvd0V2ZW50KTtcbiAgICB9XG5cbiAgICBvblJvd0VudGVyS2V5RG93bihyb3c6IERhdGFSb3csIGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5Ym9hcmROYXZpZ2F0ZShyb3csIGtleWJvYXJkRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Sb3dLZXlVcChyb3c6IERhdGFSb3csIGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3Jvdy1rZXl1cCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIGtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25LZXlib2FyZE5hdmlnYXRlKHJvdzogRGF0YVJvdywga2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudCkge1xuICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRGF0YVJvd0V2ZW50KHJvdywga2V5Ym9hcmRFdmVudCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5yb3dEYmxDbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgncm93LWRibGNsaWNrJywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogZXZlbnQsXG4gICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWRDbGlja0V2ZW50KGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuZXZlbnRQaGFzZSA9PT0gZXZlbnQuQlVCQkxJTkdfUEhBU0U7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuZXZlbnRQaGFzZSA9PT0gZXZlbnQuQVRfVEFSR0VUO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG9uQ29sdW1uSGVhZGVyQ2xpY2soY29sdW1uOiBEYXRhQ29sdW1uLCBldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZENsaWNrRXZlbnQoZXZlbnQpICYmIGNvbHVtbiAmJiBjb2x1bW4uc29ydGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmRhdGEuZ2V0U29ydGluZygpO1xuICAgICAgICAgICAgbGV0IG5ld0RpcmVjdGlvbiA9ICdhc2MnO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgJiYgY29sdW1uLmtleSA9PT0gY3VycmVudC5rZXkpIHtcbiAgICAgICAgICAgICAgICBuZXdEaXJlY3Rpb24gPSBjdXJyZW50LmRpcmVjdGlvbj8udG9Mb3dlckNhc2UoKSA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc29ydGluZyA9IFtjb2x1bW4ua2V5LCBuZXdEaXJlY3Rpb24sIHsgbnVtZXJpYzogdHJ1ZSB9XTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRTb3J0aW5nKG5ldyBEYXRhU29ydGluZyhjb2x1bW4ua2V5LCBuZXdEaXJlY3Rpb24sIHsgbnVtZXJpYzogdHJ1ZSB9KSk7XG4gICAgICAgICAgICB0aGlzLmVtaXRTb3J0aW5nQ2hhbmdlZEV2ZW50KGNvbHVtbi5rZXksIGNvbHVtbi5zb3J0aW5nS2V5LCBuZXdEaXJlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oMCk7XG4gICAgfVxuXG4gICAgb25TZWxlY3RBbGxDbGljayhtYXRDaGVja2JveENoYW5nZTogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSBtYXRDaGVja2JveENoYW5nZS5jaGVja2VkO1xuICAgICAgICB0aGlzLmlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RhYmxlUm93cyA9IHRoaXMuZGF0YS5nZXRSb3dzKCkuZmlsdGVyKChyb3cpID0+IHJvdz8uaXNTZWxlY3RhYmxlKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RhYmxlUm93cyAmJiBzZWxlY3RhYmxlUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RhYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyhzZWxlY3RhYmxlUm93c1tpXSwgbWF0Q2hlY2tib3hDaGFuZ2UuY2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkb21FdmVudE5hbWUgPSBtYXRDaGVja2JveENoYW5nZS5jaGVja2VkID8gJ3Jvdy1zZWxlY3QnIDogJ3Jvdy11bnNlbGVjdCc7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLnNlbGVjdGlvbi5sZW5ndGggPiAwID8gdGhpcy5zZWxlY3Rpb25bMF0gOiBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChkb21FdmVudE5hbWUsIHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNoZWNrYm94TGFiZWxDbGljayhyb3c6IERhdGFSb3csIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKCEodGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1hZGYtZGF0YXRhYmxlLXJvdy1jaGVja2JveCcpIHx8IHRhcmdldC5jbG9zZXN0KCdbZGF0YS1hZGYtZGF0YXRhYmxlLXJvdy1jaGVja2JveF0nKSkpIHtcbiAgICAgICAgICAgIHRoaXMub25Sb3dDbGljayhyb3csIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hlY2tib3hDaGFuZ2Uocm93OiBEYXRhUm93LCBldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBldmVudC5jaGVja2VkO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgbmV3VmFsdWUpO1xuXG4gICAgICAgIGNvbnN0IGRvbUV2ZW50TmFtZSA9IG5ld1ZhbHVlID8gJ3Jvdy1zZWxlY3QnIDogJ3Jvdy11bnNlbGVjdCc7XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KGRvbUV2ZW50TmFtZSwgcm93KTtcbiAgICAgICAgdGhpcy5jaGVja1NlbGVjdEFsbENoZWNrYm94U3RhdGUoKTtcbiAgICB9XG5cbiAgICBjaGVja1NlbGVjdEFsbENoZWNrYm94U3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICBsZXQgbnVtYmVyT2ZTZWxlY3RlZFJvd3M6IG51bWJlciA9IDA7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhLmdldFJvd3MoKTtcbiAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdy5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlck9mU2VsZWN0ZWRSb3dzKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobnVtYmVyT2ZTZWxlY3RlZFJvd3MgPT09IHJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlck9mU2VsZWN0ZWRSb3dzID4gMCAmJiBudW1iZXJPZlNlbGVjdGVkUm93cyA8IHJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW1hZ2VMb2FkaW5nRXJyb3IoZXZlbnQ6IEV2ZW50LCByb3c6IERhdGFSb3cpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIGFueTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZmFsbGJhY2tUaHVtYm5haWwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNyYyA9IHRoaXMuZmFsbGJhY2tUaHVtYm5haWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gcm93LmltYWdlRXJyb3JSZXNvbHZlcihldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0ljb25WYWx1ZShyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocm93ICYmIGNvbCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGEuZ2V0VmFsdWUocm93LCBjb2wpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlPy5zdGFydHNXaXRoKCdtYXRlcmlhbC1pY29uczovLycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBhc0ljb25WYWx1ZShyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmlzSWNvblZhbHVlKHJvdywgY29sKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHx8ICcnO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoJ21hdGVyaWFsLWljb25zOi8vJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlzQ29sdW1uU29ydGVkKGNvbDogRGF0YUNvbHVtbiwgZGlyZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGNvbCAmJiBkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRpbmcgPSB0aGlzLmRhdGEuZ2V0U29ydGluZygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNTb3J0aW5nRXF1YWwoY29sLCBkaXJlY3Rpb24sIHNvcnRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0TWVudUFjdGlvbnMocm93OiBEYXRhUm93LCBjb2w6IERhdGFDb2x1bW4pOiAoKSA9PiBhbnlbXSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBEYXRhQ2VsbEV2ZW50KHJvdywgY29sLCBbXSk7XG4gICAgICAgICAgICB0aGlzLnNob3dSb3dDb250ZXh0TWVudS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybiBldmVudC52YWx1ZS5hY3Rpb25zO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldFJvd0FjdGlvbnMocm93OiBEYXRhUm93LCBjb2w/OiBEYXRhQ29sdW1uKTogYW55W10ge1xuICAgICAgICBjb25zdCBpZCA9IHJvdy5nZXRWYWx1ZSgnaWQnKTtcblxuICAgICAgICBpZiAoIXRoaXMucm93TWVudUNhY2hlW2lkXSkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRGF0YUNlbGxFdmVudChyb3csIGNvbCwgW10pO1xuICAgICAgICAgICAgdGhpcy5zaG93Um93QWN0aW9uc01lbnUuZW1pdChldmVudCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucm93TWVudUNhY2hlRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZpc2libGVBY3Rpb25zKGV2ZW50LnZhbHVlLmFjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb3dNZW51Q2FjaGVbaWRdID0gZXZlbnQudmFsdWUuYWN0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZpc2libGVBY3Rpb25zKHRoaXMucm93TWVudUNhY2hlW2lkXSk7XG4gICAgfVxuXG4gICAgZ2V0VmlzaWJsZUFjdGlvbnMoYWN0aW9uczogYW55W10pOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24udmlzaWJsZSB8fCBhY3Rpb24udmlzaWJsZSA9PT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBvbkV4ZWN1dGVSb3dBY3Rpb24ocm93OiBEYXRhUm93LCBhY3Rpb246IGFueSkge1xuICAgICAgICBpZiAoYWN0aW9uLmRpc2FibGVkIHx8IGFjdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVSb3dBY3Rpb24uZW1pdChuZXcgRGF0YVJvd0FjdGlvbkV2ZW50KHJvdywgYWN0aW9uKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRIaWRlQWN0aW9uc1dpdGhvdXRIb3ZlckNsYXNzKGFjdGlvbnNNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpIHtcbiAgICAgICAgcmV0dXJuIHsgJ2FkZi1kYXRhdGFibGUtaGlkZS1hY3Rpb25zLXdpdGhvdXQtaG92ZXInOiB0aGlzLmFjdGlvbnNWaXNpYmxlT25Ib3ZlciAmJiAhYWN0aW9uc01lbnVUcmlnZ2VyLm1lbnVPcGVuIH07XG4gICAgfVxuXG4gICAgcm93QWxsb3dzRHJvcChyb3c6IERhdGFSb3cpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJvdy5pc0Ryb3BUYXJnZXQgPT09IHRydWU7XG4gICAgfVxuXG4gICAgaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZS50b0xvd2VyQ2FzZSgpID09PSAnc2luZ2xlJztcbiAgICB9XG5cbiAgICBpc011bHRpU2VsZWN0aW9uTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSAmJiB0aGlzLnNlbGVjdGlvbk1vZGUudG9Mb3dlckNhc2UoKSA9PT0gJ211bHRpcGxlJztcbiAgICB9XG5cbiAgICBnZXRSb3dTdHlsZShyb3c6IERhdGFSb3cpOiBzdHJpbmcge1xuICAgICAgICByb3cuY3NzQ2xhc3MgPSByb3cuY3NzQ2xhc3MgPyByb3cuY3NzQ2xhc3MgOiAnJztcbiAgICAgICAgdGhpcy5yb3dTdHlsZUNsYXNzID0gdGhpcy5yb3dTdHlsZUNsYXNzID8gdGhpcy5yb3dTdHlsZUNsYXNzIDogJyc7XG4gICAgICAgIGNvbnN0IGNvbnRleHRNZW51U291cmNlQ2xhc3MgPSByb3cuaXNDb250ZXh0TWVudVNvdXJjZSA/ICdhZGYtY29udGV4dC1tZW51LXNvdXJjZScgOiAnJztcbiAgICAgICAgY29uc3QgaXNEcmFnRW5hYmxlZCA9IHRoaXMuZW5hYmxlRHJhZ1Jvd3MgPyAnYWRmLWRyYWctcm93JyA6ICcnO1xuICAgICAgICByZXR1cm4gYCR7cm93LmNzc0NsYXNzfSAke3RoaXMucm93U3R5bGVDbGFzc30gJHtjb250ZXh0TWVudVNvdXJjZUNsYXNzfSAke2lzRHJhZ0VuYWJsZWR9YDtcbiAgICB9XG5cbiAgICBtYXJrUm93QXNDb250ZXh0TWVudVNvdXJjZShzZWxlY3RlZFJvdzogRGF0YVJvdyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SWQgPSBzZWxlY3RlZFJvdy5pZCA/IHNlbGVjdGVkUm93LmlkIDogJyc7XG4gICAgICAgIHRoaXMuZGF0YS5nZXRSb3dzKCkuZm9yRWFjaCgocm93KSA9PiAocm93LmlzQ29udGV4dE1lbnVTb3VyY2UgPSBmYWxzZSkpO1xuICAgICAgICBzZWxlY3RlZFJvdy5pc0NvbnRleHRNZW51U291cmNlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJvd0FzQ29udGV4dFNvdXJjZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3cgPSB0aGlzLmRhdGEuZ2V0Um93cygpLmZpbmQoKHJvdykgPT4gdGhpcy5zZWxlY3RlZFJvd0lkID09PSByb3cuaWQpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRSb3cpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93LmlzQ29udGV4dE1lbnVTb3VyY2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0Um93KHJvdzogRGF0YVJvdywgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcm93LmlzU2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IHJvdz8uaWQgPyB0aGlzLmZpbmRTZWxlY3Rpb25CeUlkKHJvdy5pZCkgOiB0aGlzLnNlbGVjdGlvbi5pbmRleE9mKHJvdyk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaWR4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQuZW1pdCh0aGlzLnNlbGVjdGlvbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmluZFNlbGVjdGlvbkJ5SWQoaWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5maW5kSW5kZXgoKHNlbGVjdGlvbikgPT4gc2VsZWN0aW9uPy5pZCA9PT0gaWQpO1xuICAgIH1cblxuICAgIGdldENlbGxUb29sdGlwKHJvdzogRGF0YVJvdywgY29sOiBEYXRhQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHJvdyAmJiBjb2wgJiYgY29sLmZvcm1hdFRvb2x0aXApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nID0gY29sLmZvcm1hdFRvb2x0aXAocm93LCBjb2wpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U29ydGFibGVDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldENvbHVtbnMoKS5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLnNvcnRhYmxlID09PSB0cnVlKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldFJvd3MoKS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgaXNIZWFkZXJWaXNpYmxlKCkge1xuICAgICAgICBsZXQgaGVhZGVyVmlzaWJpbGl0eTogYm9vbGVhbjtcblxuICAgICAgICBpZiAodGhpcy5zaG93SGVhZGVyID09PSBTaG93SGVhZGVyTW9kZS5EYXRhKSB7XG4gICAgICAgICAgICBoZWFkZXJWaXNpYmlsaXR5ID0gIXRoaXMubG9hZGluZyAmJiAhdGhpcy5ub1Blcm1pc3Npb24gJiYgIXRoaXMuaXNFbXB0eSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd0hlYWRlciA9PT0gU2hvd0hlYWRlck1vZGUuQWx3YXlzKSB7XG4gICAgICAgICAgICBoZWFkZXJWaXNpYmlsaXR5ID0gIXRoaXMubG9hZGluZyAmJiAhdGhpcy5ub1Blcm1pc3Npb247XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93SGVhZGVyID09PSBTaG93SGVhZGVyTW9kZS5OZXZlcikge1xuICAgICAgICAgICAgaGVhZGVyVmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJWaXNpYmlsaXR5O1xuICAgIH1cblxuICAgIGlzU3RpY2t5SGVhZGVyRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RpY2t5SGVhZGVyICYmIHRoaXMuaXNIZWFkZXJWaXNpYmxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Um93U2VsZWN0aW9uRXZlbnQobmFtZTogc3RyaW5nLCByb3c6IERhdGFSb3cpIHtcbiAgICAgICAgY29uc3QgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQobmFtZSwge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5zZWxlY3Rpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGRvbUV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRTb3J0aW5nQ2hhbmdlZEV2ZW50KGtleTogc3RyaW5nLCBzb3J0aW5nS2V5OiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGRvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdzb3J0aW5nLWNoYW5nZWQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgc29ydGluZ0tleSxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGRvbUV2ZW50KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUNsaWNrU3RyZWFtKCk7XG4gICAgfVxuXG4gICAgZ2V0TmFtZUNvbHVtblZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldENvbHVtbnMoKS5maW5kKChlbDogYW55KSA9PiBlbC5rZXkuaW5jbHVkZXMoJ25hbWUnKSk7XG4gICAgfVxuXG4gICAgZ2V0QXV0b21hdGlvblZhbHVlKHJvdzogRGF0YVJvdyk6IGFueSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWVDb2x1bW5WYWx1ZSgpO1xuICAgICAgICByZXR1cm4gbmFtZSA/IHJvdy5nZXRWYWx1ZShuYW1lLmtleSkgOiAnJztcbiAgICB9XG5cbiAgICBnZXRBcmlhU29ydChjb2x1bW46IERhdGFDb2x1bW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuaXNDb2x1bW5Tb3J0QWN0aXZlKGNvbHVtbikpIHtcbiAgICAgICAgICAgIHJldHVybiAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlNPUlRfTk9ORSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5pc0NvbHVtblNvcnRlZChjb2x1bW4sICdhc2MnKSA/ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9BU0NFTkRJTkcnIDogJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TT1JUX0RFU0NFTkRJTkcnO1xuICAgIH1cblxuICAgIGdldFNvcnRMaXZlQW5ub3VuY2VtZW50KGNvbHVtbjogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uKSkge1xuICAgICAgICAgICAgcmV0dXJuICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9ERUZBVUxUJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pc0NvbHVtblNvcnRlZChjb2x1bW4sICdhc2MnKVxuICAgICAgICAgICAgPyAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlNPUlRfQVNDRU5ESU5HX0JZJ1xuICAgICAgICAgICAgOiAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlNPUlRfREVTQ0VORElOR19CWSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckRyYWdIYW5kbGVJY29uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpY29uVXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCcuL2Fzc2V0cy9pbWFnZXMvZHJhZ19pbmRpY2F0b3JfMjRweC5zdmcnKTtcblxuICAgICAgICB0aGlzLm1hdEljb25SZWdpc3RyeS5hZGRTdmdJY29uSW5OYW1lc3BhY2UoJ2FkZicsICdkcmFnX2luZGljYXRvcicsIGljb25VcmwpO1xuICAgIH1cblxuICAgIG9uUmVzaXppbmcoeyByZWN0YW5nbGU6IHsgd2lkdGggfSB9OiBSZXNpemVFdmVudCwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLmdldFZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICBhbGxDb2x1bW5zW2NvbEluZGV4XS53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnMoYWxsQ29sdW1ucyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Jlc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uUmVzaXppbmdFbmQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzaXppbmdDb2x1bW5JbmRleCA9IC0xO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uc1dpZHRocygpO1xuICAgIH1cblxuICAgIGdldEZsZXhWYWx1ZSh7IHdpZHRoID0gMCB9OiBEYXRhQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAwIDEgJHt3aWR0aCA8IERhdGFUYWJsZUNvbXBvbmVudC5NSU5JTVVNX0NPTFVNTl9TSVpFID8gRGF0YVRhYmxlQ29tcG9uZW50Lk1JTklNVU1fQ09MVU1OX1NJWkUgOiB3aWR0aH1weGA7XG4gICAgfVxuXG4gICAgZmlsdGVyRGlzYWJsZWRDb2x1bW5zKGluZGV4OiBudW1iZXIsIF9kcmFnOiBDZGtEcmFnLCBkcm9wOiBDZGtEcm9wTGlzdCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIWRyb3AuZ2V0U29ydGVkSXRlbXMoKVtpbmRleF0uZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgb25EcmFnRHJvcChkcm9wcGVkRXZlbnQ6IENka0RyYWdEcm9wPGFueT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlRHJhZ1Jvd3MpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0Ryb3BwZWQuZW1pdCh7IHByZXZpb3VzSW5kZXg6IGRyb3BwZWRFdmVudC5wcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXg6IGRyb3BwZWRFdmVudC5jdXJyZW50SW5kZXggfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nUm93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbkRyYWdFbmQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZ1JvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ29sdW1uc1dpZHRocygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZGF0YS5nZXRDb2x1bW5zKCk7XG5cbiAgICAgICAgY29uc3QgaGVhZGVyQ29udGFpbmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZGYtZGF0YXRhYmxlLWhlYWRlcicpO1xuXG4gICAgICAgIGlmIChoZWFkZXJDb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckNvbnRhaW5lckNvbHVtbnMgPSBoZWFkZXJDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXI6bm90KC5hZGYtZGF0YXRhYmxlLWNoZWNrYm94KScpO1xuXG4gICAgICAgICAgICBoZWFkZXJDb250YWluZXJDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSFRNTEVsZW1lbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWxsQ29sdW1uc1tpbmRleF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxDb2x1bW5zW2luZGV4XS53aWR0aCA9IGNvbHVtbi5jbGllbnRXaWR0aCAtIHBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbHVtbikucGFkZGluZ0xlZnQsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gaGVhZGVyQ29udGFpbmVyQ29sdW1ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxDb2x1bW5zW2luZGV4XS53aWR0aCA9IGNvbHVtbi5jbGllbnRXaWR0aCAtIHBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbHVtbikucGFkZGluZ1JpZ2h0LCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxDb2x1bW5zW2luZGV4XS53aWR0aCA9IGNvbHVtbi5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKGFsbENvbHVtbnMpO1xuXG4gICAgICAgIHRoaXMuY29sdW1uc1dpZHRoQ2hhbmdlZC5lbWl0KGFsbENvbHVtbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTb3J0aW5nRXF1YWwoY29sOiBEYXRhQ29sdW1uLCBkaXJlY3Rpb246IHN0cmluZywgc29ydGluZzogRGF0YVNvcnRpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNvcnRpbmcgJiYgKHNvcnRpbmcua2V5ID09PSBjb2wua2V5IHx8IHNvcnRpbmcua2V5ID09PSBjb2wuc29ydGluZ0tleSkgJiYgc29ydGluZy5kaXJlY3Rpb24/LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICBnZXQgaXNSZXNpemluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzaXppbmdDb2x1bW5JbmRleCA+PSAwO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhVGFibGVEcm9wRXZlbnQge1xuICAgIGRldGFpbDoge1xuICAgICAgICB0YXJnZXQ6ICdjZWxsJyB8ICdoZWFkZXInO1xuICAgICAgICBldmVudDogRXZlbnQ7XG4gICAgICAgIGNvbHVtbjogRGF0YUNvbHVtbjtcbiAgICAgICAgcm93PzogRGF0YVJvdztcbiAgICB9O1xuXG4gICAgcHJldmVudERlZmF1bHQoKTogdm9pZDtcbn1cbiIsIjxkaXZcbiAgICByb2xlPVwiZ3JpZFwiXG4gICAgKm5nSWY9XCJkYXRhXCJcbiAgICBjbGFzcz1cImFkZi1mdWxsLXdpZHRoIGFkZi1kYXRhdGFibGUtbGlzdFwiXG4gICAgW2NsYXNzLmFkZi1zdGlja3ktaGVhZGVyXT1cImlzU3RpY2t5SGVhZGVyRW5hYmxlZCgpXCJcbiAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS0tZW1wdHldPVwiKGlzRW1wdHkoKSAmJiAhaXNIZWFkZXJWaXNpYmxlKCkpIHx8IGxvYWRpbmdcIlxuICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlLS1lbXB0eS0taGVhZGVyLXZpc2libGVdPVwiaXNFbXB0eSgpICYmIGlzSGVhZGVyVmlzaWJsZSgpXCJcbj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNIZWFkZXJWaXNpYmxlKClcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtaGVhZGVyXCIgcm9sZT1cInJvd2dyb3VwXCIgW25nQ2xhc3NdPVwieyAnYWRmLXNyLW9ubHknOiAhaXNIZWFkZXJWaXNpYmxlKCkgfVwiPlxuICAgICAgICA8YWRmLWRhdGF0YWJsZS1yb3dcbiAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICBbY2RrRHJvcExpc3RTb3J0UHJlZGljYXRlXT1cImZpbHRlckRpc2FibGVkQ29sdW1uc1wiXG4gICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJkYXRhdGFibGUtcm93LWhlYWRlclwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzSGVhZGVyVmlzaWJsZSgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1yb3dcIlxuICAgICAgICAgICAgcm9sZT1cInJvd1wiPlxuXG5cbiAgICAgICAgICAgIDwhLS0gRHJhZyAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbmFibGVEcmFnUm93c1wiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlciBhZGYtZHJhZy1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5EUkFHJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEFjdGlvbnMgKGxlZnQpIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAnbGVmdCdcIiBjbGFzcz1cImFkZi1hY3Rpb25zLWNvbHVtbiBhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtc3Itb25seVwiPnt7ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuQUNUSU9OUycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb2x1bW5zIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm11bHRpc2VsZWN0XCIgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyIGFkZi1kYXRhdGFibGUtY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtpbmRldGVybWluYXRlXT1cImlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdEFsbENoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdEFsbENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2hlY2tib3gtc3Itb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCInQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlNFTEVDVF9BTEwnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU0VMRUNUX0FMTCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGNvbCBvZiBnZXRWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5JbmRleCA9IGluZGV4XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RDb2x1bW4gPSBsYXN0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC0te3tjb2wudHlwZSB8fCAndGV4dCd9fSB7e2NvbC5jc3NDbGFzc319IGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZS1jZWxsLWRhdGFcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnRpdGxlIHx8ICFzaG93UHJvdmlkZWRBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2F1dG9faWRfJyArIGNvbC5rZXlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1zb3J0YWJsZSc6IGNvbC5zb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1kYXRhdGFibGVfX2N1cnNvci0tcG9pbnRlcic6ICFpc1Jlc2l6aW5nLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLWRhdGF0YWJsZV9faGVhZGVyLS1zb3J0ZWQtYXNjJzogaXNDb2x1bW5Tb3J0ZWQoY29sLCAnYXNjJyksXG4gICAgICAgICAgICAgICAgICAgICdhZGYtZGF0YXRhYmxlX19oZWFkZXItLXNvcnRlZC1kZXNjJzogaXNDb2x1bW5Tb3J0ZWQoY29sLCAnZGVzYycpfVwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiKGNvbC53aWR0aCkgJiYgIWxhc3RDb2x1bW4gJiYgeydmbGV4JzogZ2V0RmxleFZhbHVlKGNvbCl9XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb2wudGl0bGUgfCB0cmFuc2xhdGUpICsgKGNvbC5zdWJ0aXRsZSA/ICcgJyArIGNvbC5zdWJ0aXRsZSA6ICcnKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ29sdW1uSGVhZGVyQ2xpY2soY29sLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25Db2x1bW5IZWFkZXJDbGljayhjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJjb2x1bW5oZWFkZXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImlzSGVhZGVyVmlzaWJsZSgpID8gMCA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc29ydF09XCJjb2wuc29ydGFibGUgPyAoZ2V0QXJpYVNvcnQoY29sKSB8IHRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgY2RrRHJhZ0xvY2tBeGlzPVwieFwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cImlzRHJhZ2dpbmdIZWFkZXJDb2x1bW4gPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ0Ryb3BwZWQpPVwib25Ecm9wSGVhZGVyQ29sdW1uKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIWNvbC5kcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9IGNvbHVtbkluZGV4XCJcbiAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkSGVhZGVyQ29sdW1uSW5kZXggPSAtMVwiXG4gICAgICAgICAgICAgICAgYWRmLWRyb3Atem9uZSBkcm9wVGFyZ2V0PVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbZHJvcENvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgYWRmLXJlc2l6YWJsZVxuICAgICAgICAgICAgICAgICNyZXNpemFibGVFbGVtZW50PVwiYWRmLXJlc2l6YWJsZVwiXG4gICAgICAgICAgICAgICAgW2NvdmVyUGFkZGluZ109XCIxMFwiXG4gICAgICAgICAgICAgICAgKHJlc2l6aW5nKT1cIm9uUmVzaXppbmcoJGV2ZW50LCBjb2x1bW5JbmRleClcIlxuICAgICAgICAgICAgICAgIChyZXNpemVTdGFydCk9XCJyZXNpemluZ0NvbHVtbkluZGV4ID0gY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgIChyZXNpemVFbmQpPVwib25SZXNpemluZ0VuZCgpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2F1dG9faGVhZGVyX2NvbnRlbnRfaWRfJyArIGNvbC5rZXlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlci1jb250ZW50XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyLWNvbnRlbnQtLWhvdmVyZWQnOlxuICAgICAgICAgICAgICAgICAgICBob3ZlcmVkSGVhZGVyQ29sdW1uSW5kZXggPT09IGNvbHVtbkluZGV4ICYmXG4gICAgICAgICAgICAgICAgICAgICFpc0RyYWdnaW5nSGVhZGVyQ29sdW1uICYmXG4gICAgICAgICAgICAgICAgICAgICFpc1Jlc2l6aW5nICYmIGNvbC5zb3J0YWJsZX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLmhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7e2NvbC50aXRsZSB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb2wudGl0bGUgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnN1YnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3tjb2wuc3VidGl0bGUgfCB0cmFuc2xhdGV9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC12YWx1ZSBhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyX3N1YnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgKHt7Y29sLnN1YnRpdGxlIHwgdHJhbnNsYXRlfX0pXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbC50aXRsZSAmJiBjb2wuc29ydGFibGUgJiYgaXNEcmFnZ2luZ0hlYWRlckNvbHVtblwiIGNsYXNzPVwiYWRmLXNyLW9ubHlcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFNvcnRMaXZlQW5ub3VuY2VtZW50KGNvbCkgfCB0cmFuc2xhdGU6IHsgc3RyaW5nOiBjb2wudGl0bGUgfCB0cmFuc2xhdGUgfSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sLnRpdGxlICYmICFjb2wuc29ydGFibGUgJiYgIWhlYWRlckZpbHRlclRlbXBsYXRlXCIgW2F0dHIudGl0bGVdPVwiJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5FTVBUWV9IRUFERVInIHwgdHJhbnNsYXRlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5oZWFkZXJcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sLmhlYWRlclwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBjb2x9XCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlX19oZWFkZXItLXNvcnRlZC1hc2NdPVwiaXNDb2x1bW5Tb3J0ZWQoY29sLCAnYXNjJylcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZV9faGVhZGVyLS1zb3J0ZWQtZGVzY109XCJpc0NvbHVtblNvcnRlZChjb2wsICdkZXNjJylcIj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJhbGxvd0ZpbHRlcmluZ1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlYWRlckZpbHRlclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IGNvbH1cIiAvPlxuXG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyLWRyYWctaWNvbic6ICFpc1Jlc2l6aW5nIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGFkZi1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9PT0gY29sdW1uSW5kZXggJiYgIWlzUmVzaXppbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJhZGY6ZHJhZ19pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyLWRyYWctaWNvbi12aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlci1kcmFnLWljb24tJytjb2wua2V5XCIgLz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzUmVzaXppbmdFbmFibGVkICYmIGNvbC5yZXNpemFibGUgJiYgIWxhc3RDb2x1bW5cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9PT0gY29sdW1uSW5kZXggJiYgIWlzUmVzaXppbmcgfHwgcmVzaXppbmdDb2x1bW5JbmRleCA9PT0gY29sdW1uSW5kZXggPyAnYWRmLWRhdGF0YWJsZV9fcmVzaXplLWhhbmRsZS12aXNpYmxlJyA6ICdhZGYtZGF0YXRhYmxlX19yZXNpemUtaGFuZGxlLWhpZGRlbidcIlxuICAgICAgICAgICAgICAgIGFkZi1yZXNpemUtaGFuZGxlXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGVfX3Jlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgIFtyZXNpemFibGVDb250YWluZXJdPVwicmVzaXphYmxlRWxlbWVudFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZGF0YXRhYmxlX19yZXNpemUtaGFuZGxlLS1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZHJvcC1oZWFkZXItY2VsbC1wbGFjZWhvbGRlclwiICpjZGtEcmFnUGxhY2Vob2xkZXI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gSGVhZGVyIGFjdGlvbnMgKHJpZ2h0KSAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cIihhY3Rpb25zICYmIGFjdGlvbnNQb3NpdGlvbiA9PT0gJ3JpZ2h0JykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKG1haW5BY3Rpb25UZW1wbGF0ZSAmJiBzaG93TWFpbkRhdGF0YWJsZUFjdGlvbnMpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1hY3Rpb25zLWNvbHVtbiBhZGYtZGF0YXRhYmxlLWFjdGlvbnMtbWVudSBhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyIGFkZi1kYXRhdGFibGVfX2FjdGlvbnMtY2VsbFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtYWN0aW9ucy1tZW51LXByb3ZpZGVkXT1cInNob3dQcm92aWRlZEFjdGlvbnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtYWluQWN0aW9uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLWRhdGF0YWJsZS1tYWluLW1lbnUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FERi1EQVRBVEFCTEUuQ09OVEVOVC1BQ1RJT05TLlNFTEVDVF9DT0xVTU5TJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICNtYWluTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25NYWluTWVudU9wZW4oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWFpbk1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj52aWV3X3dlZWtfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21haW5NZW51IChjbG9zZWQpPVwib25NYWluTWVudUNsb3NlZCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNtYWluTWVudVRlbXBsYXRlIHJvbGU9XCJwcmVzZW50YXRpb25cIiAoa2V5ZG93bi50YWIpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtYWluQWN0aW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBtYWluTWVudVRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtc3Itb25seVwiPnt7ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuQUNUSU9OUycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2FkZi1kYXRhdGFibGUtcm93PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRpbmdSb3dUZW1wbGF0ZVwiXG4gICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1ib2R5XCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnYWRmLWJsdXItZGF0YXRhYmxlLWJvZHknOiBibHVyT25SZXNpemUgJiYgKGlzRHJhZ2dpbmdIZWFkZXJDb2x1bW4gfHwgaXNSZXNpemluZyksICdhZGYtZGF0YXRhYmxlLWJvZHlfX2RyYWdnYWJsZSc6IGVuYWJsZURyYWdSb3dzICYmICFpc0RyYWdnaW5nUm93LCAnYWRmLWRhdGF0YWJsZS1ib2R5X19kcmFnZ2luZyc6IGlzRHJhZ2dpbmdSb3cgfVwiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cIiFlbmFibGVEcmFnUm93c1wiXG4gICAgICAgIHJvbGU9XCJyb3dncm91cFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vUGVybWlzc2lvbjsgZWxzZSBub1Blcm1pc3Npb25zUm93VGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxhZGYtZGF0YXRhYmxlLXJvdyAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGEuZ2V0Um93cygpOyBsZXQgaWR4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiFlbmFibGVEcmFnUm93c1wiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdEcm9wcGVkKT1cIm9uRHJhZ0Ryb3AoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0KClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnRW5kKClcIlxuICAgICAgICAgICAgICAgIFtjZGtEcmFnQm91bmRhcnldPVwiJy5hZGYtZGF0YXRhYmxlLWJvZHknXCJcbiAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgKHNlbGVjdCk9XCJvbkVudGVyS2V5UHJlc3NlZChyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXl1cCk9XCJvblJvd0tleVVwKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Sb3dFbnRlcktleURvd24ocm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbYWRmLXVwbG9hZF09XCJyb3dBbGxvd3NEcm9wKHJvdylcIlxuICAgICAgICAgICAgICAgIFthZGYtdXBsb2FkLWRhdGFdPVwicm93XCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJyb3dTdHlsZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Um93U3R5bGUocm93KVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtcm93X19kcmFnZ2luZ109XCJpc0RyYWdnaW5nUm93XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2RhdGF0YWJsZS1yb3ctJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cIm1hcmtSb3dBc0NvbnRleHRNZW51U291cmNlKHJvdylcIj5cbiAgICAgICAgICAgICAgICA8IS0tIERyYWcgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbmFibGVEcmFnUm93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwgYWRmLWRhdGF0YWJsZV9fYWN0aW9ucy1jZWxsIGFkZi1kYXRhdGFibGUtaG92ZXItb25seVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5EUkFHJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbnMgKGxlZnQpIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25zICYmIGFjdGlvbnNQb3NpdGlvbiA9PT0gJ2xlZnQnXCIgcm9sZT1cImdyaWRjZWxsXCIgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiAjYWN0aW9uc01lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEhpZGVBY3Rpb25zV2l0aG91dEhvdmVyQ2xhc3MoYWN0aW9uc01lbnVUcmlnZ2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBREYtREFUQVRBQkxFLkNPTlRFTlQtQUNUSU9OUy5UT09MVElQJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ2FjdGlvbl9tZW51X2xlZnRfJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhY3Rpb25fbWVudV8nICsgaWR4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGdldFJvd0FjdGlvbnMocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJhY3Rpb24udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhlY3V0ZVJvd0FjdGlvbihyb3csIGFjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJhY3Rpb24uaWNvblwiPnt7IGFjdGlvbi5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBhY3Rpb24udGl0bGUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm11bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uRW50ZXJLZXlQcmVzc2VkKHJvdywgJGFueSgkZXZlbnQpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGVja2JveExhYmVsQ2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiJ3NlbGVjdC1maWxlLScgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwgYWRmLWRhdGF0YWJsZS1jaGVja2JveCBhZGYtZGF0YXRhYmxlLWNoZWNrYm94LXNpbmdsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidzZWxlY3QtZmlsZS0nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcm93Py5pc1NlbGVjdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtY2hlY2tib3gtc2VsZWN0ZWRdPVwicm93LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtaG92ZXItb25seV09XCJkaXNwbGF5Q2hlY2tib3hlc09uSG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicm93LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cInJvdy5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cIidBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU0VMRUNUX0ZJTEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYWRmLWRhdGF0YWJsZS1yb3ctY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZShyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2hlY2tib3gtc3Itb25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfRklMRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBnZXRWaXNpYmxlQ29sdW1ucygpOyBsZXQgbGFzdENvbHVtbiA9IGxhc3Q7XCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwgYWRmLWRhdGF0YWJsZS1jZWxsLS17e2NvbC50eXBlIHx8ICd0ZXh0J319IHt7Y29sLmNzc0NsYXNzfX0gYWRmLWRhdGF0YWJsZS1jZWxsLWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJjb2wudGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiZ2V0QXV0b21hdGlvblZhbHVlKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInJvdy5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2wudGl0bGUgPyAoY29sLnRpdGxlIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyS2V5UHJlc3NlZChyb3csICRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICAgICAgICBbYWRmLWNvbnRleHQtbWVudV09XCJnZXRDb250ZXh0TWVudUFjdGlvbnMocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FkZi1jb250ZXh0LW1lbnUtZW5hYmxlZF09XCJjb250ZXh0TWVudVwiXG4gICAgICAgICAgICAgICAgICAgIGFkZi1kcm9wLXpvbmUgZHJvcFRhcmdldD1cImNlbGxcIiBbZHJvcENvbHVtbl09XCJjb2xcIiBbZHJvcFJvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoY29sLndpZHRoKSAmJiAhbGFzdENvbHVtbiAmJiB7J2ZsZXgnOiBnZXRGbGV4VmFsdWUoY29sKX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2wudGVtcGxhdGVcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImRhdGEuZ2V0Q29sdW1uVHlwZShyb3csIGNvbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpc0ljb25WYWx1ZShyb3csIGNvbCk7IGVsc2Ugbm9faWNvbnZhbHVlXCI+e3sgYXNJY29uVmFsdWUocm93LCBjb2wpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9faWNvbnZhbHVlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy5pc1NlbGVjdGVkICYmICFtdWx0aXNlbGVjdDsgZWxzZSBub19zZWxlY3RlZF9yb3dcIiBzdmdJY29uPVwic2VsZWN0ZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub19zZWxlY3RlZF9yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VudGVyLWltZy1pZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUpID09PSAnZGlzYWJsZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9ESVNBQkxFRCcgfCB0cmFuc2xhdGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9URVhUJyB8IHRyYW5zbGF0ZTp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FERi1EQVRBVEFCTEUuRklMRV9UWVBFLicgKyAoZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfCBmaWxlVHlwZSB8IHVwcGVyY2FzZSkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hbHRdPVwiKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUpID09PSAnZGlzYWJsZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9ESVNBQkxFRCcgfCB0cmFuc2xhdGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9URVhUJyB8IHRyYW5zbGF0ZTp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBREYtREFUQVRBQkxFLkZJTEVfVFlQRS4nICsgKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUgfCB1cHBlcmNhc2UpIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3sgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUxvYWRpbmdFcnJvcigkZXZlbnQsIHJvdylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaWNvbidcIiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtaWNvbi1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlIGFkZi1jZWxsLWRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidkYXRlXycgKyAoZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbikgfCBhZGZMb2NhbGl6ZWREYXRlOiAnbWVkaXVtJykgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZGF0ZS1jZWxsIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZW50ZXItZGF0ZS1jb2x1bW4taWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUNvbmZpZ109XCJjb2wuZGF0ZUNvbmZpZ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbG9jYXRpb24nXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbG9jYXRpb24nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1sb2NhdGlvbi1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZmlsZVNpemUnXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidmaWxlU2l6ZV8nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1maWxlc2l6ZS1jZWxsIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZW50ZXItc2l6ZS1jb2x1bW4taWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIid0ZXh0XycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWRhdGF0YWJsZS1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29weUNvbnRlbnRdPVwiY29sLmNvcHlDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRDZWxsVG9vbHRpcChyb3csIGNvbClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYm9vbGVhbl8nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1ib29sZWFuLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRDZWxsVG9vbHRpcChyb3csIGNvbClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidqc29uJ1wiIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtanNvbi1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdGFibGVdPVwiY29sLmVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2Ftb3VudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYW1vdW50XycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWFtb3VudC1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29uZmlnXT1cImNvbC5jdXJyZW5jeUNvbmZpZ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbnVtYmVyXycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLW51bWJlci1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxDb25maWddPVwiY29sLmRlY2ltYWxDb25maWdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIGVtcHR5IGNlbGwgZm9yIHVua25vd24gY29sdW1uIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50ZW1wbGF0ZVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCIgW2F0dHIudGFiaW5kZXhdPVwiY29sLmZvY3VzID8gMCA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBkYXRhOiBkYXRhLCByb3c6IHJvdywgY29sOiBjb2wgfSwgdmFsdWU6IGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pIH1cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBSb3cgYWN0aW9ucyAocmlnaHQpIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzaG93UHJvdmlkZWRBY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAncmlnaHQnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKG1haW5BY3Rpb25UZW1wbGF0ZSAmJiBzaG93TWFpbkRhdGF0YWJsZUFjdGlvbnMpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsIGFkZi1kYXRhdGFibGVfX2FjdGlvbnMtY2VsbCBhZGYtZGF0YXRhYmxlLWNlbnRlci1hY3Rpb25zLWNvbHVtbi1pZSBhZGYtZGF0YXRhYmxlLWFjdGlvbnMtbWVudVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdyaWdodCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiICNhY3Rpb25zTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEhpZGVBY3Rpb25zV2l0aG91dEhvdmVyQ2xhc3MoYWN0aW9uc01lbnVUcmlnZ2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5ST1dfT1BUSU9OX0JVVFRPTicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERi1EQVRBVEFCTEUuQ09OVEVOVC1BQ1RJT05TLlRPT0xUSVAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ2FjdGlvbl9tZW51X3JpZ2h0XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FjdGlvbl9tZW51XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhY3Rpb25zTWVudVRyaWdnZXIub3Blbk1lbnUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZ2V0Um93QWN0aW9ucyhyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJhY3Rpb24udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhY3Rpb24udGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeGVjdXRlUm93QWN0aW9uKHJvdywgYWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJhY3Rpb24uaWNvblwiPnt7IGFjdGlvbi5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYWN0aW9uLnRpdGxlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2FkZi1kYXRhdGFibGUtcm93PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRW1wdHkoKVwiIHJvbGU9XCJyb3dcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtcm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1uby1jb250ZW50LWNvbnRhaW5lciBhZGYtZGF0YXRhYmxlLWNlbGxcIiByb2xlPVwiZ3JpZGNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwibm9Db250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdGb3IgW25nRm9yT2ZdPVwiW2RhdGFdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0ZvclRlbXBsYXRlXT1cIm5vQ29udGVudFRlbXBsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWVtcHR5LWxpc3RcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9QZXJtaXNzaW9uc1Jvd1RlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1yb3cgYWRmLW5vLXBlcm1pc3Npb25fX3Jvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtbm8tcGVybWlzc2lvbl9fY2VsbCBhZGYtbm8tY29udGVudC1jb250YWluZXIgYWRmLWRhdGF0YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIm5vUGVybWlzc2lvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdGb3IgW25nRm9yT2ZdPVwiW2RhdGFdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nRm9yVGVtcGxhdGVdPVwibm9QZXJtaXNzaW9uVGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nUm93VGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLXJvdyBhZGYtZGF0YXRhYmxlLWRhdGEtbG9hZGluZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1uby1jb250ZW50LWNvbnRhaW5lciBhZGYtZGF0YXRhYmxlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJsb2FkaW5nVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ0ZvciBbbmdGb3JPZl09XCJbZGF0YV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdGb3JUZW1wbGF0ZV09XCJsb2FkaW5nVGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|