@hmcts/ccd-case-ui-toolkit 6.19.4 → 6.19.5-case-flags-v2-reasonable-adjustments
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/hmcts-ccd-case-ui-toolkit.umd.js +3933 -1481
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -1
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
- package/esm2015/lib/shared/components/case-editor/case-edit/case-edit.component.js +1 -1
- package/esm2015/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.js +1 -1
- package/esm2015/lib/shared/components/case-editor/case-edit-generic-errors/case-edit-generic-errors.component.js +1 -1
- package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.js +2 -11
- package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit-titles.enum.js +7 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.js +166 -116
- package/esm2015/lib/shared/components/case-editor/case-editor.module.js +8 -5
- package/esm2015/lib/shared/components/case-editor/services/case-flag-state.service.js +19 -0
- package/esm2015/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.js +5 -10
- package/esm2015/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +7 -2
- package/esm2015/lib/shared/components/case-viewer/case-viewer.module.js +5 -2
- package/esm2015/lib/shared/components/create-case-filters/create-case-filters.component.js +3 -3
- package/esm2015/lib/shared/components/palette/base-field/field-read.component.js +1 -1
- package/esm2015/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.js +16 -7
- package/esm2015/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.js +260 -44
- package/esm2015/lib/shared/components/palette/case-flag/components/case-flag-table/case-flag-table.component.js +144 -73
- package/esm2015/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.js +181 -0
- package/esm2015/lib/shared/components/palette/case-flag/components/index.js +4 -1
- package/esm2015/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.js +38 -73
- package/esm2015/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter-control-names.enum.js +6 -0
- package/esm2015/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.js +133 -101
- package/esm2015/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.js +16 -8
- package/esm2015/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.js +198 -115
- package/esm2015/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.js +292 -0
- package/esm2015/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.js +299 -101
- package/esm2015/lib/shared/components/palette/case-flag/domain/case-flag-state.model.js +1 -1
- package/esm2015/lib/shared/components/palette/case-flag/domain/case-flag.model.js +1 -1
- package/esm2015/lib/shared/components/palette/case-flag/domain/language.model.js +1 -1
- package/esm2015/lib/shared/components/palette/case-flag/enums/add-comments-error-message.enum.js +2 -1
- package/esm2015/lib/shared/components/palette/case-flag/enums/add-comments-step.enum.js +3 -2
- package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-check-your-answers-step.enum.js +12 -0
- package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-display-context-parameter.enum.js +9 -0
- package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-form-fields.enum.js +12 -0
- package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-status.enum.js +3 -2
- package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-wizard-step-title.enum.js +11 -3
- package/esm2015/lib/shared/components/palette/case-flag/enums/confirm-status-error-message.enum.js +6 -0
- package/esm2015/lib/shared/components/palette/case-flag/enums/confirm-status-step.enum.js +6 -0
- package/esm2015/lib/shared/components/palette/case-flag/enums/index.js +9 -2
- package/esm2015/lib/shared/components/palette/case-flag/enums/select-flag-error-message.enum.js +3 -2
- package/esm2015/lib/shared/components/palette/case-flag/enums/select-flag-type-error-message.enum.js +4 -1
- package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-error-message.enum.js +6 -0
- package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-step.enum.js +6 -0
- package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-error-message.enum.js +5 -1
- package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-step.enum.js +3 -2
- package/esm2015/lib/shared/components/palette/case-flag/enums/write-case-flag-field.enum.js +8 -4
- package/esm2015/lib/shared/components/palette/case-flag/index.js +2 -1
- package/esm2015/lib/shared/components/palette/case-flag/pipes/flag-field-display.pipe.js +41 -0
- package/esm2015/lib/shared/components/palette/case-flag/pipes/index.js +5 -0
- package/esm2015/lib/shared/components/palette/case-flag/pipes/language-interpreter-display.pipe.js +41 -0
- package/esm2015/lib/shared/components/palette/case-flag/pipes/manage-case-flags-label-display.pipe.js +109 -0
- package/esm2015/lib/shared/components/palette/case-flag/pipes/update-flag-title-display.pipe.js +77 -0
- package/esm2015/lib/shared/components/palette/case-flag/read-case-flag-field.component.js +121 -50
- package/esm2015/lib/shared/components/palette/case-flag/write-case-flag-field.component.js +234 -130
- package/esm2015/lib/shared/components/palette/document/write-document-field.component.js +20 -43
- package/esm2015/lib/shared/components/palette/index.js +2 -1
- package/esm2015/lib/shared/components/palette/judicial-user/write-judicial-user-field.component.js +16 -1
- package/esm2015/lib/shared/components/palette/palette.module.js +69 -32
- package/esm2015/lib/shared/components/palette/palette.service.js +5 -2
- package/esm2015/lib/shared/components/palette/phone-uk/write-phone-uk-field.component.js +1 -1
- package/esm2015/lib/shared/components/palette/query-management/__mocks__/index.js +112 -0
- package/esm2015/lib/shared/components/palette/query-management/components/index.js +4 -0
- package/esm2015/lib/shared/components/palette/query-management/components/query-create/query-create.component.js +18 -0
- package/esm2015/lib/shared/components/palette/query-management/components/query-detail/query-detail.component.js +18 -0
- package/esm2015/lib/shared/components/palette/query-management/components/query-list/query-list.component.js +185 -0
- package/esm2015/lib/shared/components/palette/query-management/domain/index.js +7 -0
- package/esm2015/lib/shared/components/palette/query-management/domain/party-messages/party-message.model.js +2 -0
- package/esm2015/lib/shared/components/palette/query-management/domain/party-messages/party-messages-group.model.js +2 -0
- package/esm2015/lib/shared/components/palette/query-management/domain/query-list/query-list-data/query-list-data.model.js +18 -0
- package/esm2015/lib/shared/components/palette/query-management/domain/query-list/query-list-item/query-list-item.model.js +35 -0
- package/esm2015/lib/shared/components/palette/query-management/domain/query-list/query-list-response-status.enum.js +6 -0
- package/esm2015/lib/shared/components/palette/query-management/domain/query-list-column/query-list-column.model.js +2 -0
- package/esm2015/lib/shared/components/palette/query-management/index.js +6 -0
- package/esm2015/lib/shared/components/palette/query-management/read-query-management-field.component.js +53 -0
- package/esm2015/lib/shared/components/palette/query-management/utils/query-management.utils.js +12 -0
- package/esm2015/lib/shared/components/palette/query-management/write-query-management-field.component.js +20 -0
- package/esm2015/lib/shared/components/palette/yes-no/read-yes-no-field.component.js +7 -5
- package/esm2015/lib/shared/components/palette/yes-no/write-yes-no-field.component.js +5 -4
- package/esm2015/lib/shared/components/workbasket-filters/workbasket-filters.component.js +12 -1
- package/esm2015/lib/shared/domain/case-flag/flag-type.model.js +17 -2
- package/esm2015/lib/shared/domain/definition/display-context-enum.model.js +3 -1
- package/esm2015/lib/shared/fixture/shared.test.fixture.js +2 -1
- package/esm2015/lib/shared/pipes/generic/enum-display-description/enum-display-description.pipe.js +16 -0
- package/esm2015/lib/shared/pipes/generic/index.js +2 -0
- package/esm2015/lib/shared/pipes/index.js +3 -2
- package/esm2015/lib/shared/pipes/pipes.module.js +9 -5
- package/esm2015/lib/shared/services/case-flag/case-flag-refdata.service.js +10 -4
- package/esm2015/lib/shared/services/fields/fields.utils.js +15 -1
- package/esm2015/lib/shared/services/request/request.options.builder.js +7 -1
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js +3436 -1246
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit-titles.enum.d.ts +6 -0
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit-titles.enum.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +1 -1
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -1
- package/lib/shared/components/case-editor/case-editor.module.d.ts.map +1 -1
- package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts +11 -0
- package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-viewer.module.d.ts +4 -4
- package/lib/shared/components/case-viewer/case-viewer.module.d.ts.map +1 -1
- package/lib/shared/components/create-case-filters/create-case-filters.component.d.ts +1 -1
- package/lib/shared/components/create-case-filters/create-case-filters.component.d.ts.map +1 -1
- package/lib/shared/components/palette/base-field/field-read.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts +2 -1
- package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.d.ts +23 -8
- package/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/case-flag-table/case-flag-table.component.d.ts +2 -1
- package/lib/shared/components/palette/case-flag/components/case-flag-table/case-flag-table.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts +28 -0
- package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/components/index.d.ts +3 -0
- package/lib/shared/components/palette/case-flag/components/index.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts +4 -8
- package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter-control-names.enum.d.ts +5 -0
- package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter-control-names.enum.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts +10 -8
- package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts +2 -1
- package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts +12 -8
- package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts +27 -0
- package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts +20 -9
- package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/domain/case-flag-state.model.d.ts +1 -10
- package/lib/shared/components/palette/case-flag/domain/case-flag-state.model.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/domain/case-flag.model.d.ts +6 -0
- package/lib/shared/components/palette/case-flag/domain/case-flag.model.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/domain/language.model.d.ts +1 -0
- package/lib/shared/components/palette/case-flag/domain/language.model.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/enums/add-comments-error-message.enum.d.ts +1 -0
- package/lib/shared/components/palette/case-flag/enums/add-comments-error-message.enum.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/enums/add-comments-step.enum.d.ts +2 -1
- package/lib/shared/components/palette/case-flag/enums/add-comments-step.enum.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/enums/case-flag-check-your-answers-step.enum.d.ts +11 -0
- package/lib/shared/components/palette/case-flag/enums/case-flag-check-your-answers-step.enum.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/enums/case-flag-display-context-parameter.enum.d.ts +8 -0
- package/lib/shared/components/palette/case-flag/enums/case-flag-display-context-parameter.enum.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/enums/case-flag-form-fields.enum.d.ts +11 -0
- package/lib/shared/components/palette/case-flag/enums/case-flag-form-fields.enum.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/enums/case-flag-status.enum.d.ts +2 -1
- package/lib/shared/components/palette/case-flag/enums/case-flag-status.enum.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/enums/case-flag-wizard-step-title.enum.d.ts +11 -3
- package/lib/shared/components/palette/case-flag/enums/case-flag-wizard-step-title.enum.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/enums/confirm-status-error-message.enum.d.ts +5 -0
- package/lib/shared/components/palette/case-flag/enums/confirm-status-error-message.enum.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/enums/confirm-status-step.enum.d.ts +5 -0
- package/lib/shared/components/palette/case-flag/enums/confirm-status-step.enum.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/enums/index.d.ts +8 -1
- package/lib/shared/components/palette/case-flag/enums/index.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/enums/select-flag-error-message.enum.d.ts +2 -1
- package/lib/shared/components/palette/case-flag/enums/select-flag-error-message.enum.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/enums/select-flag-type-error-message.enum.d.ts +3 -0
- package/lib/shared/components/palette/case-flag/enums/select-flag-type-error-message.enum.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-error-message.enum.d.ts +5 -0
- package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-error-message.enum.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-step.enum.d.ts +5 -0
- package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-step.enum.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/enums/update-flag-error-message.enum.d.ts +5 -1
- package/lib/shared/components/palette/case-flag/enums/update-flag-error-message.enum.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/enums/update-flag-step.enum.d.ts +3 -2
- package/lib/shared/components/palette/case-flag/enums/update-flag-step.enum.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/enums/write-case-flag-field.enum.d.ts +7 -3
- package/lib/shared/components/palette/case-flag/enums/write-case-flag-field.enum.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/index.d.ts +1 -0
- package/lib/shared/components/palette/case-flag/index.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/pipes/flag-field-display.pipe.d.ts +19 -0
- package/lib/shared/components/palette/case-flag/pipes/flag-field-display.pipe.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/pipes/index.d.ts +5 -0
- package/lib/shared/components/palette/case-flag/pipes/index.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/pipes/language-interpreter-display.pipe.d.ts +18 -0
- package/lib/shared/components/palette/case-flag/pipes/language-interpreter-display.pipe.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/pipes/manage-case-flags-label-display.pipe.d.ts +25 -0
- package/lib/shared/components/palette/case-flag/pipes/manage-case-flags-label-display.pipe.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/pipes/update-flag-title-display.pipe.d.ts +21 -0
- package/lib/shared/components/palette/case-flag/pipes/update-flag-title-display.pipe.d.ts.map +1 -0
- package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts +11 -8
- package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts +23 -24
- package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/document/write-document-field.component.d.ts +4 -8
- package/lib/shared/components/palette/document/write-document-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/index.d.ts +1 -0
- package/lib/shared/components/palette/index.d.ts.map +1 -1
- package/lib/shared/components/palette/judicial-user/write-judicial-user-field.component.d.ts +5 -3
- package/lib/shared/components/palette/judicial-user/write-judicial-user-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/palette.module.d.ts +129 -118
- package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
- package/lib/shared/components/palette/palette.service.d.ts.map +1 -1
- package/lib/shared/components/palette/query-management/__mocks__/index.d.ts +3 -0
- package/lib/shared/components/palette/query-management/__mocks__/index.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/components/index.d.ts +4 -0
- package/lib/shared/components/palette/query-management/components/index.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/components/query-create/query-create.component.d.ts +9 -0
- package/lib/shared/components/palette/query-management/components/query-create/query-create.component.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/components/query-detail/query-detail.component.d.ts +9 -0
- package/lib/shared/components/palette/query-management/components/query-detail/query-detail.component.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/components/query-list/query-list.component.d.ts +16 -0
- package/lib/shared/components/palette/query-management/components/query-list/query-list.component.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/domain/index.d.ts +7 -0
- package/lib/shared/components/palette/query-management/domain/index.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/domain/party-messages/party-message.model.d.ts +14 -0
- package/lib/shared/components/palette/query-management/domain/party-messages/party-message.model.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/domain/party-messages/party-messages-group.model.d.ts +7 -0
- package/lib/shared/components/palette/query-management/domain/party-messages/party-messages-group.model.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/domain/query-list/query-list-data/query-list-data.model.d.ts +10 -0
- package/lib/shared/components/palette/query-management/domain/query-list/query-list-data/query-list-data.model.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/domain/query-list/query-list-item/query-list-item.model.d.ts +21 -0
- package/lib/shared/components/palette/query-management/domain/query-list/query-list-item/query-list-item.model.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/domain/query-list/query-list-response-status.enum.d.ts +5 -0
- package/lib/shared/components/palette/query-management/domain/query-list/query-list-response-status.enum.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/domain/query-list-column/query-list-column.model.d.ts +7 -0
- package/lib/shared/components/palette/query-management/domain/query-list-column/query-list-column.model.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/index.d.ts +6 -0
- package/lib/shared/components/palette/query-management/index.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts +14 -0
- package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/utils/query-management.utils.d.ts +7 -0
- package/lib/shared/components/palette/query-management/utils/query-management.utils.d.ts.map +1 -0
- package/lib/shared/components/palette/query-management/write-query-management-field.component.d.ts +10 -0
- package/lib/shared/components/palette/query-management/write-query-management-field.component.d.ts.map +1 -0
- package/lib/shared/components/workbasket-filters/workbasket-filters.component.d.ts +1 -1
- package/lib/shared/components/workbasket-filters/workbasket-filters.component.d.ts.map +1 -1
- package/lib/shared/domain/case-flag/flag-type.model.d.ts +6 -1
- package/lib/shared/domain/case-flag/flag-type.model.d.ts.map +1 -1
- package/lib/shared/domain/definition/display-context-enum.model.d.ts +3 -1
- package/lib/shared/domain/definition/display-context-enum.model.d.ts.map +1 -1
- package/lib/shared/fixture/shared.test.fixture.d.ts.map +1 -1
- package/lib/shared/pipes/generic/enum-display-description/enum-display-description.pipe.d.ts +8 -0
- package/lib/shared/pipes/generic/enum-display-description/enum-display-description.pipe.d.ts.map +1 -0
- package/lib/shared/pipes/generic/index.d.ts +2 -0
- package/lib/shared/pipes/generic/index.d.ts.map +1 -0
- package/lib/shared/pipes/index.d.ts +2 -1
- package/lib/shared/pipes/index.d.ts.map +1 -1
- package/lib/shared/pipes/pipes.module.d.ts +3 -2
- package/lib/shared/pipes/pipes.module.d.ts.map +1 -1
- package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts +3 -2
- package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts.map +1 -1
- package/lib/shared/services/fields/fields.utils.d.ts +1 -0
- package/lib/shared/services/fields/fields.utils.d.ts.map +1 -1
- package/lib/shared/services/request/request.options.builder.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import { FormGroup } from '@angular/forms';
|
|
3
3
|
import { ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { RpxTranslationService } from 'rpx-xui-translation';
|
|
4
5
|
import { CaseEditDataService } from '../../../commons/case-edit-data/case-edit-data.service';
|
|
5
6
|
import { FieldsUtils } from '../../../services/fields';
|
|
7
|
+
import { CaseFlagStateService } from '../../case-editor/services/case-flag-state.service';
|
|
6
8
|
import { AbstractFieldWriteComponent } from '../base-field/abstract-field-write.component';
|
|
7
|
-
import { CaseFlagFieldState, CaseFlagStatus, CaseFlagText } from './enums';
|
|
9
|
+
import { CaseFlagDisplayContextParameter, CaseFlagFieldState, CaseFlagFormFields, CaseFlagStatus, CaseFlagText } from './enums';
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
9
11
|
import * as i1 from "@angular/router";
|
|
10
12
|
import * as i2 from "../../../commons/case-edit-data/case-edit-data.service";
|
|
13
|
+
import * as i3 from "../../case-editor/services/case-flag-state.service";
|
|
14
|
+
import * as i4 from "rpx-xui-translation";
|
|
11
15
|
function WriteCaseFlagFieldComponent_div_0_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
12
16
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
13
17
|
i0.ɵɵelementStart(0, "div", 5);
|
|
@@ -42,52 +46,64 @@ function WriteCaseFlagFieldComponent_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
42
46
|
i0.ɵɵproperty("ngForOf", ctx_r0.errorMessages);
|
|
43
47
|
} }
|
|
44
48
|
function WriteCaseFlagFieldComponent_div_1_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
-
const
|
|
49
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
46
50
|
i0.ɵɵelementContainerStart(0);
|
|
47
51
|
i0.ɵɵelementStart(1, "ccd-select-flag-location", 12);
|
|
48
|
-
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_1_ng_container_5_Template_ccd_select_flag_location_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(
|
|
52
|
+
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_1_ng_container_5_Template_ccd_select_flag_location_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(2); return ctx_r12.onCaseFlagStateEmitted($event); });
|
|
49
53
|
i0.ɵɵelementEnd();
|
|
50
54
|
i0.ɵɵelementContainerEnd();
|
|
51
55
|
} if (rf & 2) {
|
|
52
56
|
const ctx_r7 = i0.ɵɵnextContext(2);
|
|
53
57
|
i0.ɵɵadvance(1);
|
|
54
|
-
i0.ɵɵproperty("formGroup", ctx_r7.caseFlagParentFormGroup)("flagsData", ctx_r7.flagsData);
|
|
58
|
+
i0.ɵɵproperty("formGroup", ctx_r7.caseFlagParentFormGroup)("flagsData", ctx_r7.flagsData)("isDisplayContextParameterExternal", ctx_r7.isDisplayContextParameterExternal);
|
|
55
59
|
} }
|
|
56
60
|
function WriteCaseFlagFieldComponent_div_1_ng_container_6_Template(rf, ctx) { if (rf & 1) {
|
|
57
|
-
const
|
|
61
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
58
62
|
i0.ɵɵelementContainerStart(0);
|
|
59
63
|
i0.ɵɵelementStart(1, "ccd-select-flag-type", 13);
|
|
60
|
-
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_1_ng_container_6_Template_ccd_select_flag_type_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(
|
|
64
|
+
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_1_ng_container_6_Template_ccd_select_flag_type_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r14 = i0.ɵɵnextContext(2); return ctx_r14.onCaseFlagStateEmitted($event); })("flagCommentsOptionalEmitter", function WriteCaseFlagFieldComponent_div_1_ng_container_6_Template_ccd_select_flag_type_flagCommentsOptionalEmitter_1_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r16 = i0.ɵɵnextContext(2); return ctx_r16.onFlagCommentsOptionalEmitted($event); });
|
|
61
65
|
i0.ɵɵelementEnd();
|
|
62
66
|
i0.ɵɵelementContainerEnd();
|
|
63
67
|
} if (rf & 2) {
|
|
64
68
|
const ctx_r8 = i0.ɵɵnextContext(2);
|
|
65
69
|
i0.ɵɵadvance(1);
|
|
66
|
-
i0.ɵɵproperty("formGroup", ctx_r8.caseFlagParentFormGroup)("jurisdiction", ctx_r8.jurisdiction)("caseTypeId", ctx_r8.caseTypeId)("hmctsServiceId", ctx_r8.hmctsServiceId);
|
|
70
|
+
i0.ɵɵproperty("formGroup", ctx_r8.caseFlagParentFormGroup)("jurisdiction", ctx_r8.jurisdiction)("caseTypeId", ctx_r8.caseTypeId)("hmctsServiceId", ctx_r8.hmctsServiceId)("isDisplayContextParameterExternal", ctx_r8.isDisplayContextParameterExternal);
|
|
67
71
|
} }
|
|
68
72
|
function WriteCaseFlagFieldComponent_div_1_ng_container_7_Template(rf, ctx) { if (rf & 1) {
|
|
69
|
-
const
|
|
73
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
70
74
|
i0.ɵɵelementContainerStart(0);
|
|
71
75
|
i0.ɵɵelementStart(1, "ccd-search-language-interpreter", 14);
|
|
72
|
-
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_1_ng_container_7_Template_ccd_search_language_interpreter_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(
|
|
76
|
+
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_1_ng_container_7_Template_ccd_search_language_interpreter_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(2); return ctx_r17.onCaseFlagStateEmitted($event); });
|
|
73
77
|
i0.ɵɵelementEnd();
|
|
74
78
|
i0.ɵɵelementContainerEnd();
|
|
75
79
|
} if (rf & 2) {
|
|
76
80
|
const ctx_r9 = i0.ɵɵnextContext(2);
|
|
77
81
|
i0.ɵɵadvance(1);
|
|
78
|
-
i0.ɵɵproperty("formGroup", ctx_r9.caseFlagParentFormGroup)("
|
|
82
|
+
i0.ɵɵproperty("formGroup", ctx_r9.caseFlagParentFormGroup)("flagType", ctx_r9.flagType);
|
|
79
83
|
} }
|
|
80
84
|
function WriteCaseFlagFieldComponent_div_1_ng_container_8_Template(rf, ctx) { if (rf & 1) {
|
|
81
|
-
const
|
|
85
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
82
86
|
i0.ɵɵelementContainerStart(0);
|
|
83
87
|
i0.ɵɵelementStart(1, "ccd-add-comments", 15);
|
|
84
|
-
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_1_ng_container_8_Template_ccd_add_comments_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(
|
|
88
|
+
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_1_ng_container_8_Template_ccd_add_comments_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(2); return ctx_r19.onCaseFlagStateEmitted($event); });
|
|
85
89
|
i0.ɵɵelementEnd();
|
|
86
90
|
i0.ɵɵelementContainerEnd();
|
|
87
91
|
} if (rf & 2) {
|
|
88
92
|
const ctx_r10 = i0.ɵɵnextContext(2);
|
|
89
93
|
i0.ɵɵadvance(1);
|
|
90
|
-
i0.ɵɵproperty("formGroup", ctx_r10.caseFlagParentFormGroup)("optional", ctx_r10.flagCommentsOptional);
|
|
94
|
+
i0.ɵɵproperty("formGroup", ctx_r10.caseFlagParentFormGroup)("optional", ctx_r10.flagCommentsOptional)("isDisplayContextParameterExternal", ctx_r10.isDisplayContextParameterExternal);
|
|
95
|
+
} }
|
|
96
|
+
function WriteCaseFlagFieldComponent_div_1_ng_container_9_Template(rf, ctx) { if (rf & 1) {
|
|
97
|
+
const _r22 = i0.ɵɵgetCurrentView();
|
|
98
|
+
i0.ɵɵelementContainerStart(0);
|
|
99
|
+
i0.ɵɵelementStart(1, "ccd-confirm-flag-status", 16);
|
|
100
|
+
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_1_ng_container_9_Template_ccd_confirm_flag_status_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r21 = i0.ɵɵnextContext(2); return ctx_r21.onCaseFlagStateEmitted($event); });
|
|
101
|
+
i0.ɵɵelementEnd();
|
|
102
|
+
i0.ɵɵelementContainerEnd();
|
|
103
|
+
} if (rf & 2) {
|
|
104
|
+
const ctx_r11 = i0.ɵɵnextContext(2);
|
|
105
|
+
i0.ɵɵadvance(1);
|
|
106
|
+
i0.ɵɵproperty("formGroup", ctx_r11.caseFlagParentFormGroup)("defaultStatus", ctx_r11.flagType.defaultStatus);
|
|
91
107
|
} }
|
|
92
108
|
const _c0 = function (a0) { return { "form-group-error": a0 }; };
|
|
93
109
|
function WriteCaseFlagFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -97,10 +113,11 @@ function WriteCaseFlagFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
97
113
|
i0.ɵɵtext(3);
|
|
98
114
|
i0.ɵɵpipe(4, "rpxTranslate");
|
|
99
115
|
i0.ɵɵelementEnd();
|
|
100
|
-
i0.ɵɵtemplate(5, WriteCaseFlagFieldComponent_div_1_ng_container_5_Template, 2,
|
|
101
|
-
i0.ɵɵtemplate(6, WriteCaseFlagFieldComponent_div_1_ng_container_6_Template, 2,
|
|
102
|
-
i0.ɵɵtemplate(7, WriteCaseFlagFieldComponent_div_1_ng_container_7_Template, 2,
|
|
103
|
-
i0.ɵɵtemplate(8, WriteCaseFlagFieldComponent_div_1_ng_container_8_Template, 2,
|
|
116
|
+
i0.ɵɵtemplate(5, WriteCaseFlagFieldComponent_div_1_ng_container_5_Template, 2, 3, "ng-container", 11);
|
|
117
|
+
i0.ɵɵtemplate(6, WriteCaseFlagFieldComponent_div_1_ng_container_6_Template, 2, 5, "ng-container", 11);
|
|
118
|
+
i0.ɵɵtemplate(7, WriteCaseFlagFieldComponent_div_1_ng_container_7_Template, 2, 2, "ng-container", 11);
|
|
119
|
+
i0.ɵɵtemplate(8, WriteCaseFlagFieldComponent_div_1_ng_container_8_Template, 2, 3, "ng-container", 11);
|
|
120
|
+
i0.ɵɵtemplate(9, WriteCaseFlagFieldComponent_div_1_ng_container_9_Template, 2, 2, "ng-container", 11);
|
|
104
121
|
i0.ɵɵelementEnd();
|
|
105
122
|
i0.ɵɵelementEnd();
|
|
106
123
|
} if (rf & 2) {
|
|
@@ -109,9 +126,9 @@ function WriteCaseFlagFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
109
126
|
i0.ɵɵadvance(1);
|
|
110
127
|
i0.ɵɵproperty("ngSwitch", ctx_r1.fieldState);
|
|
111
128
|
i0.ɵɵadvance(1);
|
|
112
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(
|
|
129
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(11, _c0, ctx_r1.errorMessages.length > 0));
|
|
113
130
|
i0.ɵɵadvance(1);
|
|
114
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4,
|
|
131
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 9, ctx_r1.createFlagCaption), " ");
|
|
115
132
|
i0.ɵɵadvance(2);
|
|
116
133
|
i0.ɵɵproperty("ngSwitchCase", ctx_r1.caseFlagFieldState.FLAG_LOCATION);
|
|
117
134
|
i0.ɵɵadvance(1);
|
|
@@ -120,36 +137,51 @@ function WriteCaseFlagFieldComponent_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
120
137
|
i0.ɵɵproperty("ngSwitchCase", ctx_r1.caseFlagFieldState.FLAG_LANGUAGE_INTERPRETER);
|
|
121
138
|
i0.ɵɵadvance(1);
|
|
122
139
|
i0.ɵɵproperty("ngSwitchCase", ctx_r1.caseFlagFieldState.FLAG_COMMENTS);
|
|
140
|
+
i0.ɵɵadvance(1);
|
|
141
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r1.caseFlagFieldState.FLAG_STATUS);
|
|
123
142
|
} }
|
|
124
143
|
function WriteCaseFlagFieldComponent_div_2_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
125
|
-
const
|
|
144
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
126
145
|
i0.ɵɵelementContainerStart(0);
|
|
127
|
-
i0.ɵɵelementStart(1, "ccd-manage-case-flags",
|
|
128
|
-
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_2_ng_container_2_Template_ccd_manage_case_flags_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(
|
|
146
|
+
i0.ɵɵelementStart(1, "ccd-manage-case-flags", 17);
|
|
147
|
+
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_2_ng_container_2_Template_ccd_manage_case_flags_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r26 = i0.ɵɵnextContext(2); return ctx_r26.onCaseFlagStateEmitted($event); });
|
|
129
148
|
i0.ɵɵelementEnd();
|
|
130
149
|
i0.ɵɵelementContainerEnd();
|
|
131
150
|
} if (rf & 2) {
|
|
132
|
-
const
|
|
151
|
+
const ctx_r23 = i0.ɵɵnextContext(2);
|
|
133
152
|
i0.ɵɵadvance(1);
|
|
134
|
-
i0.ɵɵproperty("formGroup",
|
|
153
|
+
i0.ɵɵproperty("formGroup", ctx_r23.caseFlagParentFormGroup)("flagsData", ctx_r23.flagsData)("caseTitle", ctx_r23.caseTitle)("displayContextParameter", ctx_r23.displayContextParameter);
|
|
135
154
|
} }
|
|
136
155
|
function WriteCaseFlagFieldComponent_div_2_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
137
|
-
const
|
|
156
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
138
157
|
i0.ɵɵelementContainerStart(0);
|
|
139
|
-
i0.ɵɵelementStart(1, "ccd-update-flag",
|
|
140
|
-
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_2_ng_container_3_Template_ccd_update_flag_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(
|
|
158
|
+
i0.ɵɵelementStart(1, "ccd-update-flag", 18);
|
|
159
|
+
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_2_ng_container_3_Template_ccd_update_flag_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r28 = i0.ɵɵnextContext(2); return ctx_r28.onCaseFlagStateEmitted($event); });
|
|
141
160
|
i0.ɵɵelementEnd();
|
|
142
161
|
i0.ɵɵelementContainerEnd();
|
|
143
162
|
} if (rf & 2) {
|
|
144
|
-
const
|
|
163
|
+
const ctx_r24 = i0.ɵɵnextContext(2);
|
|
145
164
|
i0.ɵɵadvance(1);
|
|
146
|
-
i0.ɵɵproperty("formGroup",
|
|
165
|
+
i0.ɵɵproperty("formGroup", ctx_r24.caseFlagParentFormGroup)("displayContextParameter", ctx_r24.displayContextParameter);
|
|
166
|
+
} }
|
|
167
|
+
function WriteCaseFlagFieldComponent_div_2_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
168
|
+
const _r31 = i0.ɵɵgetCurrentView();
|
|
169
|
+
i0.ɵɵelementContainerStart(0);
|
|
170
|
+
i0.ɵɵelementStart(1, "ccd-update-flag-add-translation-form", 19);
|
|
171
|
+
i0.ɵɵlistener("caseFlagStateEmitter", function WriteCaseFlagFieldComponent_div_2_ng_container_4_Template_ccd_update_flag_add_translation_form_caseFlagStateEmitter_1_listener($event) { i0.ɵɵrestoreView(_r31); const ctx_r30 = i0.ɵɵnextContext(2); return ctx_r30.onCaseFlagStateEmitted($event); });
|
|
172
|
+
i0.ɵɵelementEnd();
|
|
173
|
+
i0.ɵɵelementContainerEnd();
|
|
174
|
+
} if (rf & 2) {
|
|
175
|
+
const ctx_r25 = i0.ɵɵnextContext(2);
|
|
176
|
+
i0.ɵɵadvance(1);
|
|
177
|
+
i0.ɵɵproperty("formGroup", ctx_r25.caseFlagParentFormGroup);
|
|
147
178
|
} }
|
|
148
179
|
function WriteCaseFlagFieldComponent_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
149
180
|
i0.ɵɵelementStart(0, "div", 8);
|
|
150
181
|
i0.ɵɵelementStart(1, "div", 9);
|
|
151
|
-
i0.ɵɵtemplate(2, WriteCaseFlagFieldComponent_div_2_ng_container_2_Template, 2,
|
|
182
|
+
i0.ɵɵtemplate(2, WriteCaseFlagFieldComponent_div_2_ng_container_2_Template, 2, 4, "ng-container", 11);
|
|
152
183
|
i0.ɵɵtemplate(3, WriteCaseFlagFieldComponent_div_2_ng_container_3_Template, 2, 2, "ng-container", 11);
|
|
184
|
+
i0.ɵɵtemplate(4, WriteCaseFlagFieldComponent_div_2_ng_container_4_Template, 2, 1, "ng-container", 11);
|
|
153
185
|
i0.ɵɵelementEnd();
|
|
154
186
|
i0.ɵɵelementEnd();
|
|
155
187
|
} if (rf & 2) {
|
|
@@ -161,24 +193,47 @@ function WriteCaseFlagFieldComponent_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
161
193
|
i0.ɵɵproperty("ngSwitchCase", ctx_r2.caseFlagFieldState.FLAG_MANAGE_CASE_FLAGS);
|
|
162
194
|
i0.ɵɵadvance(1);
|
|
163
195
|
i0.ɵɵproperty("ngSwitchCase", ctx_r2.caseFlagFieldState.FLAG_UPDATE);
|
|
196
|
+
i0.ɵɵadvance(1);
|
|
197
|
+
i0.ɵɵproperty("ngSwitchCase", ctx_r2.caseFlagFieldState.FLAG_UPDATE_WELSH_TRANSLATION);
|
|
164
198
|
} }
|
|
165
199
|
export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
166
|
-
constructor(route, caseEditDataService) {
|
|
200
|
+
constructor(route, caseEditDataService, caseFlagStateService, rpxTranslationService) {
|
|
167
201
|
super();
|
|
168
202
|
this.route = route;
|
|
169
203
|
this.caseEditDataService = caseEditDataService;
|
|
204
|
+
this.caseFlagStateService = caseFlagStateService;
|
|
205
|
+
this.rpxTranslationService = rpxTranslationService;
|
|
170
206
|
this.caseFlagFieldState = CaseFlagFieldState;
|
|
171
207
|
this.errorMessages = [];
|
|
172
|
-
this.caseFlagParentFormGroup = new FormGroup({});
|
|
173
208
|
this.flagCommentsOptional = false;
|
|
174
|
-
this.listOfValues = null;
|
|
175
209
|
this.allCaseFlagStagesCompleted = false;
|
|
176
|
-
this.updateMode = '#ARGUMENT(UPDATE)';
|
|
177
210
|
// Code for "Other" flag type as defined in Reference Data
|
|
178
211
|
this.otherFlagTypeCode = 'OT0001';
|
|
212
|
+
this.selectedManageCaseLocation = 'selectedManageCaseLocation';
|
|
179
213
|
this.caseNameMissing = 'Case name missing';
|
|
180
214
|
}
|
|
215
|
+
get flagType() {
|
|
216
|
+
var _a;
|
|
217
|
+
return (_a = this.caseFlagParentFormGroup) === null || _a === void 0 ? void 0 : _a.value.flagType;
|
|
218
|
+
}
|
|
219
|
+
get selectedFlagsLocation() {
|
|
220
|
+
var _a;
|
|
221
|
+
return (_a = this.caseFlagParentFormGroup) === null || _a === void 0 ? void 0 : _a.value.selectedLocation;
|
|
222
|
+
}
|
|
181
223
|
ngOnInit() {
|
|
224
|
+
// If it is start of the journey or navigation from check your answers page then fieldStateToNavigate property
|
|
225
|
+
// in case flag state service will contain the field state to navigate based on create or manage journey
|
|
226
|
+
this.fieldState = this.caseFlagStateService.fieldStateToNavigate;
|
|
227
|
+
if (this.fieldState === undefined ||
|
|
228
|
+
this.fieldState === CaseFlagFieldState.FLAG_LOCATION ||
|
|
229
|
+
this.fieldState === CaseFlagFieldState.FLAG_MANAGE_CASE_FLAGS) {
|
|
230
|
+
const params = this.route.snapshot.params;
|
|
231
|
+
// Clear the form group, field state to navigate and set the page location
|
|
232
|
+
this.caseFlagStateService.resetCache(`../${params['eid']}/${params['page']}`);
|
|
233
|
+
}
|
|
234
|
+
// Reassign the form group from the case flag state service
|
|
235
|
+
this.caseFlagParentFormGroup = this.caseFlagStateService.formGroup;
|
|
236
|
+
// Clear form validation errors as a new page will be rendered based on field state
|
|
182
237
|
this.caseEditDataService.clearFormValidationErrors();
|
|
183
238
|
// Check for existing FlagLauncher control in parent and remove it - this is the only way to ensure its invalidity
|
|
184
239
|
// is set correctly at the start, when the component is reloaded and the control is re-registered. Otherwise, the
|
|
@@ -196,7 +251,6 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
|
196
251
|
return null;
|
|
197
252
|
}
|
|
198
253
|
}), true);
|
|
199
|
-
this.createFlagCaption = CaseFlagText.CAPTION;
|
|
200
254
|
// Get the case type ID from the CaseView object in the snapshot data (required for retrieving the available flag
|
|
201
255
|
// types for a case)
|
|
202
256
|
if (this.route.snapshot.data.case && this.route.snapshot.data.case.case_type) {
|
|
@@ -219,58 +273,43 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
|
219
273
|
.reduce((flags, caseField) => {
|
|
220
274
|
return FieldsUtils.extractFlagsDataFromCaseField(flags, caseField, caseField.id, caseField);
|
|
221
275
|
}, []);
|
|
276
|
+
// Set displayContextParameter (to be passed as an input to ManageCaseFlagsComponent for setting correct title)
|
|
277
|
+
this.displayContextParameter =
|
|
278
|
+
this.setDisplayContextParameter(this.route.snapshot.data.eventTrigger.case_fields);
|
|
222
279
|
// Set boolean indicating the display_context_parameter is "update"
|
|
223
|
-
this.isDisplayContextParameterUpdate =
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
280
|
+
this.isDisplayContextParameterUpdate = this.setDisplayContextParameterUpdate(this.displayContextParameter);
|
|
281
|
+
// Set boolean indicating the display_context_parameter is "external"
|
|
282
|
+
this.isDisplayContextParameterExternal = this.setDisplayContextParameterExternal(this.displayContextParameter);
|
|
283
|
+
// Set starting field state if fieldState not the right value
|
|
284
|
+
if (!this.fieldState) {
|
|
285
|
+
this.fieldState = this.isDisplayContextParameterUpdate ? CaseFlagFieldState.FLAG_MANAGE_CASE_FLAGS : CaseFlagFieldState.FLAG_LOCATION;
|
|
286
|
+
}
|
|
287
|
+
// Set Create Case Flag component title caption text (appearing above child component <h1> title)
|
|
288
|
+
this.createFlagCaption = this.setCreateFlagCaption(this.displayContextParameter);
|
|
227
289
|
// Get case title, to be used by child components
|
|
228
|
-
this.caseEditDataService.caseTitle$.subscribe({
|
|
290
|
+
this.caseTitleSubscription = this.caseEditDataService.caseTitle$.subscribe({
|
|
229
291
|
next: title => {
|
|
230
|
-
this.caseTitle = title.length > 0 ? title : this.caseNameMissing;
|
|
292
|
+
this.caseTitle = (title === null || title === void 0 ? void 0 : title.length) > 0 ? title : this.caseNameMissing;
|
|
231
293
|
}
|
|
232
294
|
});
|
|
233
295
|
}
|
|
234
296
|
}
|
|
235
297
|
}
|
|
236
|
-
setDisplayContextParameterUpdate(
|
|
237
|
-
return
|
|
298
|
+
setDisplayContextParameterUpdate(displayContextParameter) {
|
|
299
|
+
return displayContextParameter === CaseFlagDisplayContextParameter.UPDATE ||
|
|
300
|
+
displayContextParameter === CaseFlagDisplayContextParameter.UPDATE_EXTERNAL;
|
|
301
|
+
}
|
|
302
|
+
setDisplayContextParameterExternal(displayContextParameter) {
|
|
303
|
+
return displayContextParameter === CaseFlagDisplayContextParameter.CREATE_EXTERNAL ||
|
|
304
|
+
displayContextParameter === CaseFlagDisplayContextParameter.UPDATE_EXTERNAL;
|
|
238
305
|
}
|
|
239
306
|
onCaseFlagStateEmitted(caseFlagState) {
|
|
240
307
|
this.caseEditDataService.clearFormValidationErrors();
|
|
241
|
-
// If the current state is CaseFlagFieldState.FLAG_LOCATION and a flag location (a Flags instance) has been selected,
|
|
242
|
-
// set the parent Case Flag FormGroup for this component's children by using the provided pathToFlagsFormGroup, and
|
|
243
|
-
// set the selected flag location on this component
|
|
244
|
-
if (caseFlagState.currentCaseFlagFieldState === CaseFlagFieldState.FLAG_LOCATION
|
|
245
|
-
&& caseFlagState.selectedFlagsLocation
|
|
246
|
-
&& caseFlagState.selectedFlagsLocation.pathToFlagsFormGroup) {
|
|
247
|
-
this.setCaseFlagParentFormGroup(caseFlagState.selectedFlagsLocation.pathToFlagsFormGroup);
|
|
248
|
-
this.selectedFlagsLocation = caseFlagState.selectedFlagsLocation;
|
|
249
|
-
}
|
|
250
|
-
// If the current state is CaseFlagFieldState.FLAG_TYPE, cache the flag name, path, hearing relevant indicator, code,
|
|
251
|
-
// and "list of values" (currently applicable to language flag types)
|
|
252
|
-
if (caseFlagState.currentCaseFlagFieldState === CaseFlagFieldState.FLAG_TYPE) {
|
|
253
|
-
this.flagName = caseFlagState.flagName;
|
|
254
|
-
this.flagPath = caseFlagState.flagPath;
|
|
255
|
-
this.hearingRelevantFlag = caseFlagState.hearingRelevantFlag;
|
|
256
|
-
this.flagCode = caseFlagState.flagCode;
|
|
257
|
-
this.listOfValues = caseFlagState.listOfValues;
|
|
258
|
-
}
|
|
259
|
-
// If the current state is CaseFlagFieldState.FLAG_MANAGE_CASE_FLAGS and a flag has been selected, set the parent
|
|
260
|
-
// Case Flag FormGroup for this component's children by using the provided pathToFlagsFormGroup
|
|
261
|
-
if (caseFlagState.currentCaseFlagFieldState === CaseFlagFieldState.FLAG_MANAGE_CASE_FLAGS
|
|
262
|
-
&& caseFlagState.selectedFlag
|
|
263
|
-
&& caseFlagState.selectedFlag.pathToFlagsFormGroup) {
|
|
264
|
-
this.setCaseFlagParentFormGroup(caseFlagState.selectedFlag.pathToFlagsFormGroup);
|
|
265
|
-
}
|
|
266
308
|
this.errorMessages = caseFlagState.errorMessages;
|
|
267
309
|
this.selectedFlag = caseFlagState.selectedFlag;
|
|
268
310
|
// Validation succeeded; proceed to next state or final review stage ("Check your answers")
|
|
269
311
|
if (this.errorMessages.length === 0) {
|
|
270
|
-
|
|
271
|
-
// review stage
|
|
272
|
-
if (caseFlagState.currentCaseFlagFieldState === CaseFlagFieldState.FLAG_COMMENTS ||
|
|
273
|
-
caseFlagState.currentCaseFlagFieldState === CaseFlagFieldState.FLAG_UPDATE) {
|
|
312
|
+
if (this.canMoveToFinalReviewStage(caseFlagState)) {
|
|
274
313
|
this.moveToFinalReviewStage();
|
|
275
314
|
// Don't move to next state if current state is CaseFlagFieldState.FLAG_TYPE and the flag type is a parent - this
|
|
276
315
|
// means the user needs to select from the next set of flag types before they can move on
|
|
@@ -281,12 +320,32 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
|
281
320
|
}
|
|
282
321
|
}
|
|
283
322
|
}
|
|
323
|
+
canMoveToFinalReviewStage(caseFlagState) {
|
|
324
|
+
var _a;
|
|
325
|
+
// If the journey is request support or manage support
|
|
326
|
+
// and the current state is either CaseFlagFieldState.FLAG_COMMENTS or CaseFlagFieldState.FLAG_UPDATE
|
|
327
|
+
// then move to final review stage
|
|
328
|
+
if (this.isDisplayContextParameterExternal) {
|
|
329
|
+
return caseFlagState.currentCaseFlagFieldState === CaseFlagFieldState.FLAG_COMMENTS ||
|
|
330
|
+
caseFlagState.currentCaseFlagFieldState === CaseFlagFieldState.FLAG_UPDATE;
|
|
331
|
+
}
|
|
332
|
+
// If the current state is one of:
|
|
333
|
+
// * CaseFlagFieldState.FLAG_STATUS
|
|
334
|
+
// * CaseFlagFieldState.FLAG_UPDATE and Welsh translation checkbox is not selected
|
|
335
|
+
// * CaseFlagFieldState.FLAG_UPDATE_WELSH_TRANSLATION
|
|
336
|
+
// then move to final review stage
|
|
337
|
+
return caseFlagState.currentCaseFlagFieldState === CaseFlagFieldState.FLAG_STATUS ||
|
|
338
|
+
(caseFlagState.currentCaseFlagFieldState === CaseFlagFieldState.FLAG_UPDATE &&
|
|
339
|
+
!((_a = this.caseFlagParentFormGroup.get(CaseFlagFormFields.IS_WELSH_TRANSLATION_NEEDED)) === null || _a === void 0 ? void 0 : _a.value)) ||
|
|
340
|
+
caseFlagState.currentCaseFlagFieldState === CaseFlagFieldState.FLAG_UPDATE_WELSH_TRANSLATION;
|
|
341
|
+
}
|
|
284
342
|
proceedToNextState() {
|
|
343
|
+
var _a;
|
|
285
344
|
if (!this.isAtFinalState()) {
|
|
286
345
|
// Skip the "language interpreter" state if current state is CaseFlagFieldState.FLAG_TYPE and the flag type doesn't
|
|
287
346
|
// have a "list of values" - currently, this is present only for those flag types that require language interpreter
|
|
288
347
|
// selection
|
|
289
|
-
if (this.fieldState === CaseFlagFieldState.FLAG_TYPE && !this.listOfValues) {
|
|
348
|
+
if (this.fieldState === CaseFlagFieldState.FLAG_TYPE && !((_a = this.flagType) === null || _a === void 0 ? void 0 : _a.listOfValues)) {
|
|
290
349
|
this.fieldState = CaseFlagFieldState.FLAG_COMMENTS;
|
|
291
350
|
}
|
|
292
351
|
else {
|
|
@@ -297,10 +356,15 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
|
297
356
|
setFlagsCaseFieldValue() {
|
|
298
357
|
// tslint:disable-next-line: switch-default
|
|
299
358
|
switch (this.fieldState) {
|
|
300
|
-
case CaseFlagFieldState.
|
|
359
|
+
case CaseFlagFieldState.FLAG_STATUS:
|
|
301
360
|
this.addFlagToCollection();
|
|
302
361
|
break;
|
|
303
|
-
case CaseFlagFieldState.
|
|
362
|
+
case CaseFlagFieldState.FLAG_COMMENTS:
|
|
363
|
+
if (this.isDisplayContextParameterExternal) {
|
|
364
|
+
this.addFlagToCollection();
|
|
365
|
+
}
|
|
366
|
+
break;
|
|
367
|
+
case this.manageFlagFinalState:
|
|
304
368
|
this.updateFlagInCollection();
|
|
305
369
|
break;
|
|
306
370
|
}
|
|
@@ -326,10 +390,11 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
|
326
390
|
}
|
|
327
391
|
}
|
|
328
392
|
});
|
|
329
|
-
|
|
393
|
+
const path = this.selectedFlagsLocation.pathToFlagsFormGroup;
|
|
394
|
+
const flagDataRef = this.flagsData.find(item => item.pathToFlagsFormGroup === path);
|
|
395
|
+
let flagsCaseFieldValue = flagDataRef.caseField.value;
|
|
330
396
|
// Use the pathToFlagsFormGroup property from the selected flag location to drill down to the correct part of the
|
|
331
397
|
// CaseField value to apply changes to
|
|
332
|
-
const path = this.selectedFlagsLocation.pathToFlagsFormGroup;
|
|
333
398
|
// Root-level Flags CaseFields don't have a dot-delimited path - just the CaseField ID itself - so don't drill down
|
|
334
399
|
if (path.indexOf('.') > -1) {
|
|
335
400
|
path.slice(path.indexOf('.') + 1).split('.').forEach(part => flagsCaseFieldValue = flagsCaseFieldValue[part]);
|
|
@@ -337,8 +402,8 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
|
337
402
|
// If the CaseField for the selected flags location has no value, set it to an empty object so it can be populated
|
|
338
403
|
// with flag details
|
|
339
404
|
if (!flagsCaseFieldValue) {
|
|
340
|
-
|
|
341
|
-
flagsCaseFieldValue =
|
|
405
|
+
flagDataRef.caseField.value = {};
|
|
406
|
+
flagsCaseFieldValue = flagDataRef.caseField.value;
|
|
342
407
|
}
|
|
343
408
|
// Create a details array if one does not exist
|
|
344
409
|
if (!flagsCaseFieldValue.hasOwnProperty('details')) {
|
|
@@ -349,11 +414,13 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
|
349
414
|
flagsCaseFieldValue.details.push({ value: this.populateNewFlagDetailInstance() });
|
|
350
415
|
}
|
|
351
416
|
updateFlagInCollection() {
|
|
417
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
352
418
|
// Ensure no more than one flag is being updated at a time, by iterating through each Flags case field and resetting
|
|
353
|
-
// the comments, status, and date/time modified (if present) for each entry in the details array, with
|
|
354
|
-
// from the corresponding formatted_value property. (This scenario occurs if the user repeats the
|
|
355
|
-
// journey by using the "Change" link and selects a different flag to update.)
|
|
419
|
+
// the description, comments, status, and date/time modified (if present) for each entry in the details array, with
|
|
420
|
+
// original values from the corresponding formatted_value property. (This scenario occurs if the user repeats the
|
|
421
|
+
// Manage Case Flag journey by using the "Change" link and selects a different flag to update.)
|
|
356
422
|
this.flagsData.forEach(instance => {
|
|
423
|
+
var _a;
|
|
357
424
|
// Use the pathToFlagsFormGroup property for each Flags case field to drill down to the correct part of the
|
|
358
425
|
// CaseField value for which to restore the original values
|
|
359
426
|
let value = instance.caseField.value;
|
|
@@ -368,21 +435,24 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
|
368
435
|
}
|
|
369
436
|
});
|
|
370
437
|
}
|
|
371
|
-
if (value
|
|
438
|
+
if (((_a = value === null || value === void 0 ? void 0 : value.details) === null || _a === void 0 ? void 0 : _a.length) > 0 && formattedValue && FieldsUtils.isNonEmptyObject(formattedValue)) {
|
|
372
439
|
value.details.forEach(flagDetail => {
|
|
373
440
|
const originalFlagDetail = formattedValue.details.find(detail => detail.id === flagDetail.id);
|
|
374
441
|
if (originalFlagDetail) {
|
|
375
|
-
flagDetail.value.
|
|
376
|
-
|
|
377
|
-
|
|
442
|
+
flagDetail.value.otherDescription = originalFlagDetail.value.otherDescription || null;
|
|
443
|
+
flagDetail.value.otherDescription_cy = originalFlagDetail.value.otherDescription_cy || null;
|
|
444
|
+
flagDetail.value.flagComment = originalFlagDetail.value.flagComment || null;
|
|
445
|
+
flagDetail.value.flagComment_cy = originalFlagDetail.value.flagComment_cy || null;
|
|
446
|
+
flagDetail.value.flagUpdateComment = originalFlagDetail.value.flagUpdateComment || null;
|
|
378
447
|
flagDetail.value.status = originalFlagDetail.value.status;
|
|
379
|
-
flagDetail.value.dateTimeModified = originalFlagDetail.value.dateTimeModified
|
|
380
|
-
? originalFlagDetail.value.dateTimeModified
|
|
381
|
-
: null;
|
|
448
|
+
flagDetail.value.dateTimeModified = originalFlagDetail.value.dateTimeModified || null;
|
|
382
449
|
}
|
|
383
450
|
});
|
|
384
451
|
}
|
|
385
452
|
});
|
|
453
|
+
if (!this.selectedFlag) {
|
|
454
|
+
this.selectedFlag = this.formGroup.get(this.selectedManageCaseLocation).value;
|
|
455
|
+
}
|
|
386
456
|
let flagsCaseFieldValue = this.selectedFlag.caseField.value;
|
|
387
457
|
// Use the pathToFlagsFormGroup property from the selected flag location to drill down to the correct part of the
|
|
388
458
|
// CaseField value to apply changes to
|
|
@@ -394,18 +464,30 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
|
394
464
|
if (flagsCaseFieldValue) {
|
|
395
465
|
const flagDetailToUpdate = flagsCaseFieldValue.details.find(detail => detail.id === this.selectedFlag.flagDetailDisplay.flagDetail.id);
|
|
396
466
|
if (flagDetailToUpdate) {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
: null
|
|
400
|
-
|
|
467
|
+
// Update description fields only if flag type is "Other" (flag code OT0001); these fields apply only to that flag type
|
|
468
|
+
flagDetailToUpdate.value.otherDescription = flagDetailToUpdate.value.flagCode === this.otherFlagTypeCode
|
|
469
|
+
? (_a = this.caseFlagParentFormGroup.get(CaseFlagFormFields.OTHER_FLAG_DESCRIPTION)) === null || _a === void 0 ? void 0 : _a.value : null,
|
|
470
|
+
flagDetailToUpdate.value.otherDescription_cy = flagDetailToUpdate.value.flagCode === this.otherFlagTypeCode
|
|
471
|
+
? (_b = this.caseFlagParentFormGroup.get(CaseFlagFormFields.OTHER_FLAG_DESCRIPTION_WELSH)) === null || _b === void 0 ? void 0 : _b.value : null,
|
|
472
|
+
// Ensure that any comments entered with language set to Welsh do not end up in the English comments field
|
|
473
|
+
flagDetailToUpdate.value.flagComment = this.rpxTranslationService.language !== 'cy'
|
|
474
|
+
? (_c = this.caseFlagParentFormGroup.get(CaseFlagFormFields.COMMENTS)) === null || _c === void 0 ? void 0 : _c.value : null,
|
|
475
|
+
// Populate from the *English* comments field if:
|
|
476
|
+
// * The Welsh comments field has no value (Welsh comments field acquires a value only when an HMCTS internal user has
|
|
477
|
+
// gone through the "add translation" step for Manage Case Flags), AND
|
|
478
|
+
// * The language is set to Welsh
|
|
479
|
+
flagDetailToUpdate.value.flagComment_cy = ((_d = this.caseFlagParentFormGroup.get(CaseFlagFormFields.COMMENTS_WELSH)) === null || _d === void 0 ? void 0 : _d.value) ? (_e = this.caseFlagParentFormGroup.get(CaseFlagFormFields.COMMENTS_WELSH)) === null || _e === void 0 ? void 0 : _e.value : this.rpxTranslationService.language === 'cy'
|
|
480
|
+
? (_f = this.caseFlagParentFormGroup.get(CaseFlagFormFields.COMMENTS)) === null || _f === void 0 ? void 0 : _f.value : null,
|
|
481
|
+
flagDetailToUpdate.value.flagUpdateComment = (_g = this.caseFlagParentFormGroup.get(CaseFlagFormFields.STATUS_CHANGE_REASON)) === null || _g === void 0 ? void 0 : _g.value;
|
|
482
|
+
flagDetailToUpdate.value.status = CaseFlagStatus[(_h = this.caseFlagParentFormGroup.get(CaseFlagFormFields.STATUS)) === null || _h === void 0 ? void 0 : _h.value];
|
|
401
483
|
flagDetailToUpdate.value.dateTimeModified = new Date().toISOString();
|
|
402
484
|
}
|
|
403
485
|
}
|
|
404
486
|
}
|
|
405
487
|
isAtFinalState() {
|
|
406
488
|
return this.isDisplayContextParameterUpdate
|
|
407
|
-
? this.fieldState ===
|
|
408
|
-
: this.fieldState === CaseFlagFieldState.
|
|
489
|
+
? this.fieldState === this.manageFlagFinalState
|
|
490
|
+
: this.fieldState === CaseFlagFieldState.FLAG_STATUS;
|
|
409
491
|
}
|
|
410
492
|
navigateToErrorElement(elementId) {
|
|
411
493
|
if (elementId) {
|
|
@@ -419,39 +501,37 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
|
419
501
|
onFlagCommentsOptionalEmitted(_) {
|
|
420
502
|
this.flagCommentsOptional = true;
|
|
421
503
|
}
|
|
422
|
-
/**
|
|
423
|
-
* Set the parent {@link FormGroup} for this component's children, depending on the `Flags` {@link CaseField} instance
|
|
424
|
-
* to which data should be attached. **Note:** The parent is not _this_ component's `FormGroup` (as might otherwise be
|
|
425
|
-
* expected) because this component is not expected to have a value, given it is used for the empty `FlagLauncher` base
|
|
426
|
-
* field type.
|
|
427
|
-
*
|
|
428
|
-
* @param pathToFlagsFormGroup The dot-delimited string that is the path to the `FormGroup` for a `Flags` instance
|
|
429
|
-
*/
|
|
430
|
-
setCaseFlagParentFormGroup(pathToFlagsFormGroup) {
|
|
431
|
-
this.caseFlagParentFormGroup = this.formGroup.parent.get(pathToFlagsFormGroup);
|
|
432
|
-
}
|
|
433
504
|
populateNewFlagDetailInstance() {
|
|
505
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
506
|
+
const formValues = (_a = this.caseFlagParentFormGroup) === null || _a === void 0 ? void 0 : _a.value;
|
|
434
507
|
return {
|
|
435
|
-
name:
|
|
436
|
-
|
|
437
|
-
subTypeValue
|
|
438
|
-
|
|
439
|
-
:
|
|
440
|
-
|
|
441
|
-
|
|
508
|
+
name: (_b = formValues === null || formValues === void 0 ? void 0 : formValues.flagType) === null || _b === void 0 ? void 0 : _b.name,
|
|
509
|
+
name_cy: (_c = formValues === null || formValues === void 0 ? void 0 : formValues.flagType) === null || _c === void 0 ? void 0 : _c.name_cy,
|
|
510
|
+
// Currently, subTypeValue, subTypeValue_cy and subTypeKey are applicable only to language flag types
|
|
511
|
+
subTypeValue: (formValues === null || formValues === void 0 ? void 0 : formValues.languageSearchTerm) && this.rpxTranslationService.language === 'en'
|
|
512
|
+
? formValues === null || formValues === void 0 ? void 0 : formValues.languageSearchTerm.value : (formValues === null || formValues === void 0 ? void 0 : formValues.manualLanguageEntry) && this.rpxTranslationService.language === 'en'
|
|
513
|
+
? formValues === null || formValues === void 0 ? void 0 : formValues.manualLanguageEntry : null,
|
|
514
|
+
subTypeValue_cy: (formValues === null || formValues === void 0 ? void 0 : formValues.languageSearchTerm) && this.rpxTranslationService.language === 'cy'
|
|
515
|
+
? formValues === null || formValues === void 0 ? void 0 : formValues.languageSearchTerm.value_cy : (formValues === null || formValues === void 0 ? void 0 : formValues.manualLanguageEntry) && this.rpxTranslationService.language === 'cy'
|
|
516
|
+
? formValues === null || formValues === void 0 ? void 0 : formValues.manualLanguageEntry : null,
|
|
442
517
|
// For user-entered (i.e. non-Reference Data) languages, there is no key
|
|
443
|
-
subTypeKey:
|
|
444
|
-
|
|
445
|
-
: null,
|
|
446
|
-
|
|
447
|
-
?
|
|
448
|
-
|
|
449
|
-
|
|
518
|
+
subTypeKey: (formValues === null || formValues === void 0 ? void 0 : formValues.languageSearchTerm) ? formValues === null || formValues === void 0 ? void 0 : formValues.languageSearchTerm.key : null,
|
|
519
|
+
otherDescription: ((_d = formValues === null || formValues === void 0 ? void 0 : formValues.flagType) === null || _d === void 0 ? void 0 : _d.flagCode) === this.otherFlagTypeCode && (formValues === null || formValues === void 0 ? void 0 : formValues.otherDescription) && this.rpxTranslationService.language === 'en'
|
|
520
|
+
? formValues === null || formValues === void 0 ? void 0 : formValues.otherDescription : null,
|
|
521
|
+
otherDescription_cy: ((_e = formValues === null || formValues === void 0 ? void 0 : formValues.flagType) === null || _e === void 0 ? void 0 : _e.flagCode) === this.otherFlagTypeCode && (formValues === null || formValues === void 0 ? void 0 : formValues.otherDescription) && this.rpxTranslationService.language === 'cy'
|
|
522
|
+
? formValues === null || formValues === void 0 ? void 0 : formValues.otherDescription : null,
|
|
523
|
+
flagComment: this.rpxTranslationService.language === 'en'
|
|
524
|
+
? formValues === null || formValues === void 0 ? void 0 : formValues.flagComments : null,
|
|
525
|
+
flagComment_cy: this.rpxTranslationService.language === 'cy'
|
|
526
|
+
? formValues === null || formValues === void 0 ? void 0 : formValues.flagComments : null,
|
|
527
|
+
flagUpdateComment: formValues === null || formValues === void 0 ? void 0 : formValues.statusReason,
|
|
450
528
|
dateTimeCreated: new Date().toISOString(),
|
|
451
|
-
path:
|
|
452
|
-
hearingRelevant:
|
|
453
|
-
flagCode:
|
|
454
|
-
|
|
529
|
+
path: ((_f = formValues === null || formValues === void 0 ? void 0 : formValues.flagType) === null || _f === void 0 ? void 0 : _f.Path) && ((_g = formValues === null || formValues === void 0 ? void 0 : formValues.flagType) === null || _g === void 0 ? void 0 : _g.Path.map(pathValue => Object.assign({ id: null, value: pathValue }))),
|
|
530
|
+
hearingRelevant: ((_h = formValues === null || formValues === void 0 ? void 0 : formValues.flagType) === null || _h === void 0 ? void 0 : _h.hearingRelevant) ? 'Yes' : 'No',
|
|
531
|
+
flagCode: (_j = formValues === null || formValues === void 0 ? void 0 : formValues.flagType) === null || _j === void 0 ? void 0 : _j.flagCode,
|
|
532
|
+
// Status should be set to whatever the default is for this flag type, if flag is being created by an external user
|
|
533
|
+
status: this.isDisplayContextParameterExternal ? (_k = formValues === null || formValues === void 0 ? void 0 : formValues.flagType) === null || _k === void 0 ? void 0 : _k.defaultStatus : CaseFlagStatus[formValues === null || formValues === void 0 ? void 0 : formValues.selectedStatus],
|
|
534
|
+
availableExternally: ((_l = formValues === null || formValues === void 0 ? void 0 : formValues.flagType) === null || _l === void 0 ? void 0 : _l.externallyAvailable) ? 'Yes' : 'No'
|
|
455
535
|
};
|
|
456
536
|
}
|
|
457
537
|
moveToFinalReviewStage() {
|
|
@@ -461,12 +541,36 @@ export class WriteCaseFlagFieldComponent extends AbstractFieldWriteComponent {
|
|
|
461
541
|
this.formGroup.updateValueAndValidity();
|
|
462
542
|
this.caseEditDataService.setTriggerSubmitEvent(true);
|
|
463
543
|
}
|
|
544
|
+
ngOnDestroy() {
|
|
545
|
+
var _a;
|
|
546
|
+
// Reset the fieldstateToNavigate as the write journey completes at this point
|
|
547
|
+
this.caseFlagStateService.fieldStateToNavigate = undefined;
|
|
548
|
+
(_a = this.caseTitleSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
549
|
+
}
|
|
550
|
+
get manageFlagFinalState() {
|
|
551
|
+
var _a;
|
|
552
|
+
return ((_a = this.caseFlagParentFormGroup.get(CaseFlagFormFields.IS_WELSH_TRANSLATION_NEEDED)) === null || _a === void 0 ? void 0 : _a.value) ? CaseFlagFieldState.FLAG_UPDATE_WELSH_TRANSLATION : CaseFlagFieldState.FLAG_UPDATE;
|
|
553
|
+
}
|
|
554
|
+
setDisplayContextParameter(caseFields) {
|
|
555
|
+
var _a;
|
|
556
|
+
return (_a = caseFields.find(caseField => FieldsUtils.isFlagLauncherCaseField(caseField))) === null || _a === void 0 ? void 0 : _a.display_context_parameter;
|
|
557
|
+
}
|
|
558
|
+
setCreateFlagCaption(displayContextParameter) {
|
|
559
|
+
switch (displayContextParameter) {
|
|
560
|
+
case CaseFlagDisplayContextParameter.CREATE:
|
|
561
|
+
return CaseFlagText.CAPTION_INTERNAL;
|
|
562
|
+
case CaseFlagDisplayContextParameter.CREATE_EXTERNAL:
|
|
563
|
+
return CaseFlagText.CAPTION_EXTERNAL;
|
|
564
|
+
default:
|
|
565
|
+
return CaseFlagText.CAPTION_NONE;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
464
568
|
}
|
|
465
|
-
WriteCaseFlagFieldComponent.ɵfac = function WriteCaseFlagFieldComponent_Factory(t) { return new (t || WriteCaseFlagFieldComponent)(i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.CaseEditDataService)); };
|
|
466
|
-
WriteCaseFlagFieldComponent.ɵcmp = i0.ɵɵdefineComponent({ type: WriteCaseFlagFieldComponent, selectors: [["ccd-write-case-flag-field"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 3, consts: [["class", "govuk-error-summary", "aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 4, "ngIf"], ["class", "form-group", 3, "formGroup", 4, "ngIf"], ["aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 1, "govuk-error-summary"], ["id", "error-summary-title", 1, "govuk-error-summary__title"], ["class", "govuk-error-summary__body", 4, "ngFor", "ngForOf"], [1, "govuk-error-summary__body"], [1, "govuk-list", "govuk-error-summary__list"], [1, "validation-error", 3, "click"], [1, "form-group", 3, "formGroup"], [1, "govuk-form-group", 3, "ngSwitch"], ["id", "create-flag-caption", 1, "govuk-caption-l", 3, "ngClass"], [4, "ngSwitchCase"], [3, "formGroup", "flagsData", "caseFlagStateEmitter"], [3, "formGroup", "jurisdiction", "caseTypeId", "hmctsServiceId", "caseFlagStateEmitter", "flagCommentsOptionalEmitter"], [3, "formGroup", "
|
|
569
|
+
WriteCaseFlagFieldComponent.ɵfac = function WriteCaseFlagFieldComponent_Factory(t) { return new (t || WriteCaseFlagFieldComponent)(i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.CaseEditDataService), i0.ɵɵdirectiveInject(i3.CaseFlagStateService), i0.ɵɵdirectiveInject(i4.RpxTranslationService)); };
|
|
570
|
+
WriteCaseFlagFieldComponent.ɵcmp = i0.ɵɵdefineComponent({ type: WriteCaseFlagFieldComponent, selectors: [["ccd-write-case-flag-field"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 3, consts: [["class", "govuk-error-summary", "aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 4, "ngIf"], ["class", "form-group", 3, "formGroup", 4, "ngIf"], ["aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 1, "govuk-error-summary"], ["id", "error-summary-title", 1, "govuk-error-summary__title"], ["class", "govuk-error-summary__body", 4, "ngFor", "ngForOf"], [1, "govuk-error-summary__body"], [1, "govuk-list", "govuk-error-summary__list"], [1, "validation-error", 3, "click"], [1, "form-group", 3, "formGroup"], [1, "govuk-form-group", 3, "ngSwitch"], ["id", "create-flag-caption", 1, "govuk-caption-l", 3, "ngClass"], [4, "ngSwitchCase"], [3, "formGroup", "flagsData", "isDisplayContextParameterExternal", "caseFlagStateEmitter"], [3, "formGroup", "jurisdiction", "caseTypeId", "hmctsServiceId", "isDisplayContextParameterExternal", "caseFlagStateEmitter", "flagCommentsOptionalEmitter"], [3, "formGroup", "flagType", "caseFlagStateEmitter"], [3, "formGroup", "optional", "isDisplayContextParameterExternal", "caseFlagStateEmitter"], [3, "formGroup", "defaultStatus", "caseFlagStateEmitter"], [3, "formGroup", "flagsData", "caseTitle", "displayContextParameter", "caseFlagStateEmitter"], [3, "formGroup", "displayContextParameter", "caseFlagStateEmitter"], [3, "formGroup", "caseFlagStateEmitter"]], template: function WriteCaseFlagFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
467
571
|
i0.ɵɵtemplate(0, WriteCaseFlagFieldComponent_div_0_Template, 5, 4, "div", 0);
|
|
468
|
-
i0.ɵɵtemplate(1, WriteCaseFlagFieldComponent_div_1_Template,
|
|
469
|
-
i0.ɵɵtemplate(2, WriteCaseFlagFieldComponent_div_2_Template,
|
|
572
|
+
i0.ɵɵtemplate(1, WriteCaseFlagFieldComponent_div_1_Template, 10, 13, "div", 1);
|
|
573
|
+
i0.ɵɵtemplate(2, WriteCaseFlagFieldComponent_div_2_Template, 5, 5, "div", 1);
|
|
470
574
|
} if (rf & 2) {
|
|
471
575
|
i0.ɵɵproperty("ngIf", ctx.errorMessages.length > 0);
|
|
472
576
|
i0.ɵɵadvance(1);
|
|
@@ -481,5 +585,5 @@ WriteCaseFlagFieldComponent.ɵcmp = i0.ɵɵdefineComponent({ type: WriteCaseFlag
|
|
|
481
585
|
templateUrl: './write-case-flag-field.component.html',
|
|
482
586
|
styleUrls: ['./write-case-flag-field.component.scss']
|
|
483
587
|
}]
|
|
484
|
-
}], function () { return [{ type: i1.ActivatedRoute }, { type: i2.CaseEditDataService }]; }, null); })();
|
|
485
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFM0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7OztJQ0h6RSw4QkFBa0Y7SUFDaEYsNkJBQWlEO0lBQy9DLDBCQUFJO0lBQ0YsNEJBQW1GO0lBQWhGLDJRQUFzRDtJQUEwQixZQUEyQzs7SUFBQSxpQkFBSTtJQUNwSSxpQkFBSztJQUNQLGlCQUFLO0lBQ1AsaUJBQU07OztJQUhtRixlQUEyQztJQUEzQyx1RUFBMkM7OztJQVB0SSw4QkFBcUs7SUFDbkssNkJBQWdFO0lBQzlELFlBQ0Y7O0lBQUEs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O1FBQ04sNkVBd0JNO1FBQ04sNEVBV007O1FBaERBLG1EQUE4QjtRQVk5QixlQUFzQztRQUF0QywyREFBc0M7UUF5QnRDLGVBQXFDO1FBQXJDLDBEQUFxQzs7dUZEdkI5QiwyQkFBMkI7Y0FMdkMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSwyQkFBMkI7Z0JBQ3JDLFdBQVcsRUFBRSx3Q0FBd0M7Z0JBQ3JELFNBQVMsRUFBRSxDQUFDLHdDQUF3QyxDQUFDO2FBQ3REIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENhc2VFZGl0RGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21tb25zL2Nhc2UtZWRpdC1kYXRhL2Nhc2UtZWRpdC1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkLCBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmllbGRzVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWVsZHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFdyaXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1maWVsZC9hYnN0cmFjdC1maWVsZC13cml0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZSwgRmxhZ0RldGFpbCwgRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aCwgRmxhZ1BhdGgsIEZsYWdzV2l0aEZvcm1Hcm91cFBhdGggfSBmcm9tICcuL2RvbWFpbic7XG5pbXBvcnQgeyBDYXNlRmxhZ0ZpZWxkU3RhdGUsIENhc2VGbGFnU3RhdHVzLCBDYXNlRmxhZ1RleHQgfSBmcm9tICcuL2VudW1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXdyaXRlLWNhc2UtZmxhZy1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBXcml0ZUNhc2VGbGFnRmllbGRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZpZWxkV3JpdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHVibGljIGZpZWxkU3RhdGU6IG51bWJlcjtcbiAgcHVibGljIGNhc2VGbGFnRmllbGRTdGF0ZSA9IENhc2VGbGFnRmllbGRTdGF0ZTtcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdID0gW107XG4gIHB1YmxpYyBjcmVhdGVGbGFnQ2FwdGlvbjogQ2FzZUZsYWdUZXh0O1xuICBwdWJsaWMgZmxhZ3NEYXRhOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoW107XG4gIHB1YmxpYyBzZWxlY3RlZEZsYWc6IEZsYWdEZXRhaWxEaXNwbGF5V2l0aEZvcm1Hcm91cFBhdGg7XG4gIHB1YmxpYyBzZWxlY3RlZEZsYWdzTG9jYXRpb246IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGg7XG4gIHB1YmxpYyBjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBwdWJsaWMgZmxhZ0NvbW1lbnRzT3B0aW9uYWwgPSBmYWxzZTtcbiAgcHVibGljIGp1cmlzZGljdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgY2FzZVR5cGVJZDogc3RyaW5nO1xuICBwdWJsaWMgaG1jdHNTZXJ2aWNlSWQ6IHN0cmluZztcbiAgcHVibGljIGZsYWdOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBmbGFnUGF0aDogRmxhZ1BhdGhbXTtcbiAgcHVibGljIGhlYXJpbmdSZWxldmFudEZsYWc6IGJvb2xlYW47XG4gIHB1YmxpYyBmbGFnQ29kZTogc3RyaW5nO1xuICBwdWJsaWMgbGlzdE9mVmFsdWVzOiB7a2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmd9W10gPSBudWxsO1xuICBwdWJsaWMgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZTogYm9vbGVhbjtcbiAgcHVibGljIGNhc2VUaXRsZTogc3RyaW5nO1xuICBwcml2YXRlIGFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlTW9kZSA9ICcjQVJHVU1FTlQoVVBEQVRFKSc7XG4gIC8vIENvZGUgZm9yIFwiT3RoZXJcIiBmbGFnIHR5cGUgYXMgZGVmaW5lZCBpbiBSZWZlcmVuY2UgRGF0YVxuICBwcml2YXRlIHJlYWRvbmx5IG90aGVyRmxhZ1R5cGVDb2RlID0gJ09UMDAwMSc7XG4gIHB1YmxpYyByZWFkb25seSBjYXNlTmFtZU1pc3NpbmcgPSAnQ2FzZSBuYW1lIG1pc3NpbmcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUVkaXREYXRhU2VydmljZTogQ2FzZUVkaXREYXRhU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jbGVhckZvcm1WYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgLy8gQ2hlY2sgZm9yIGV4aXN0aW5nIEZsYWdMYXVuY2hlciBjb250cm9sIGluIHBhcmVudCBhbmQgcmVtb3ZlIGl0IC0gdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZW5zdXJlIGl0cyBpbnZhbGlkaXR5XG4gICAgLy8gaXMgc2V0IGNvcnJlY3RseSBhdCB0aGUgc3RhcnQsIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZWxvYWRlZCBhbmQgdGhlIGNvbnRyb2wgaXMgcmUtcmVnaXN0ZXJlZC4gT3RoZXJ3aXNlLCB0aGVcbiAgICAvLyB2YWxpZGF0b3Igc3RhdGUgZ2V0cyBjYXJyaWVkIG92ZXJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuY2FzZUZpZWxkLmlkKSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucmVtb3ZlQ29udHJvbCh0aGlzLmNhc2VGaWVsZC5pZCk7XG4gICAgfVxuICAgIC8vIEZyb20gdGhpcyBwb2ludCwgdGhpcy5mb3JtR3JvdXAgcmVmZXJzIHRvIHRoZSBGb3JtR3JvdXAgZm9yIHRoZSBGbGFnTGF1bmNoZXIgZmllbGQsIG5vdCB0aGUgcGFyZW50IEZvcm1Hcm91cFxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5yZWdpc3RlckNvbnRyb2wobmV3IEZvcm1Hcm91cCh7fSwge1xuICAgICAgdmFsaWRhdG9yczogKF86IEFic3RyYWN0Q29udHJvbCk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB8IG51bGwgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gYW4gZXJyb3IgdG8gbWFyayB0aGUgRm9ybUdyb3VwIGFzIGludmFsaWQgaWYgbm90IGFsbCBDYXNlIEZsYWcgc3RhZ2VzIGhhdmUgYmVlbiBjb21wbGV0ZWRcbiAgICAgICAgICByZXR1cm4ge25vdEFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkOiB0cnVlfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KSwgdHJ1ZSkgYXMgRm9ybUdyb3VwO1xuXG4gICAgdGhpcy5jcmVhdGVGbGFnQ2FwdGlvbiA9IENhc2VGbGFnVGV4dC5DQVBUSU9OO1xuICAgIC8vIEdldCB0aGUgY2FzZSB0eXBlIElEIGZyb20gdGhlIENhc2VWaWV3IG9iamVjdCBpbiB0aGUgc25hcHNob3QgZGF0YSAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnXG4gICAgLy8gdHlwZXMgZm9yIGEgY2FzZSlcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlKSB7XG4gICAgICB0aGlzLmNhc2VUeXBlSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuaWQ7XG4gICAgICAvLyBHZXQgdGhlIGp1cmlzZGljdGlvbiAocmVxdWlyZWQgZm9yIHJldHJpZXZpbmcgdGhlIGF2YWlsYWJsZSBmbGFnIHR5cGVzIGlmIHVuYWJsZSB0byBkZXRlcm1pbmUgdXNpbmcgY2FzZSB0eXBlIElEKVxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLmNhc2VfdHlwZS5qdXJpc2RpY3Rpb24pIHtcbiAgICAgICAgdGhpcy5qdXJpc2RpY3Rpb24gPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUuanVyaXNkaWN0aW9uLmlkO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBFeHRyYWN0IGFsbCBmbGFncy1yZWxhdGVkIGRhdGEgZnJvbSB0aGUgQ2FzZUV2ZW50VHJpZ2dlciBvYmplY3QgaW4gdGhlIHNuYXBzaG90IGRhdGFcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlcikge1xuICAgICAgLy8gR2V0IHRoZSBITUNUU1NlcnZpY2VJZCBmcm9tIHN1cHBsZW1lbnRhcnkgZGF0YSwgaWYgaXQgZXhpc3RzIChyZXF1aXJlZCBmb3IgcmV0cmlldmluZyB0aGUgYXZhaWxhYmxlIGZsYWcgdHlwZXMgaW5cbiAgICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSwgb25seSBmYWxsaW5nIGJhY2sgb24gY2FzZSB0eXBlIElEIG9yIGp1cmlzaWRpY3Rpb24gaWYgaXQncyBub3QgcHJlc2VudClcbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YVxuICAgICAgICAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YS5ITUNUU1NlcnZpY2VJZCkge1xuICAgICAgICB0aGlzLmhtY3RzU2VydmljZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmV2ZW50VHJpZ2dlci5zdXBwbGVtZW50YXJ5X2RhdGEuSE1DVFNTZXJ2aWNlSWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKSB7XG4gICAgICAgIHRoaXMuZmxhZ3NEYXRhID0gKCh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKSBhcyBDYXNlRmllbGRbXSlcbiAgICAgICAgLnJlZHVjZSgoZmxhZ3MsIGNhc2VGaWVsZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBGaWVsZHNVdGlscy5leHRyYWN0RmxhZ3NEYXRhRnJvbUNhc2VGaWVsZChmbGFncywgY2FzZUZpZWxkLCBjYXNlRmllbGQuaWQsIGNhc2VGaWVsZCk7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICAvLyBTZXQgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyIGlzIFwidXBkYXRlXCJcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlID1cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlKCh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKSBhcyBDYXNlRmllbGRbXSk7XG5cbiAgICAgICAgLy8gU2V0IHN0YXJ0aW5nIGZpZWxkIHN0YXRlXG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSA9IHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZSA/IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX01BTkFHRV9DQVNFX0ZMQUdTIDogQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT047XG4gICAgICAgIC8vIEdldCBjYXNlIHRpdGxlLCB0byBiZSB1c2VkIGJ5IGNoaWxkIGNvbXBvbmVudHNcbiAgICAgICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNhc2VUaXRsZSQuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiB0aXRsZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhc2VUaXRsZSA9IHRpdGxlLmxlbmd0aCA+IDAgPyB0aXRsZSA6IHRoaXMuY2FzZU5hbWVNaXNzaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNhc2VGaWVsZHMuc29tZShcbiAgICAgIGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0ZsYWdMYXVuY2hlckNhc2VGaWVsZChjYXNlRmllbGQpICYmIGNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyID09PSB0aGlzLnVwZGF0ZU1vZGUpO1xuICB9XG5cbiAgcHVibGljIG9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoY2FzZUZsYWdTdGF0ZTogQ2FzZUZsYWdTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jbGVhckZvcm1WYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT04gYW5kIGEgZmxhZyBsb2NhdGlvbiAoYSBGbGFncyBpbnN0YW5jZSkgaGFzIGJlZW4gc2VsZWN0ZWQsXG4gICAgLy8gc2V0IHRoZSBwYXJlbnQgQ2FzZSBGbGFnIEZvcm1Hcm91cCBmb3IgdGhpcyBjb21wb25lbnQncyBjaGlsZHJlbiBieSB1c2luZyB0aGUgcHJvdmlkZWQgcGF0aFRvRmxhZ3NGb3JtR3JvdXAsIGFuZFxuICAgIC8vIHNldCB0aGUgc2VsZWN0ZWQgZmxhZyBsb2NhdGlvbiBvbiB0aGlzIGNvbXBvbmVudFxuICAgIGlmIChjYXNlRmxhZ1N0YXRlLmN1cnJlbnRDYXNlRmxhZ0ZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OXG4gICAgICAmJiBjYXNlRmxhZ1N0YXRlLnNlbGVjdGVkRmxhZ3NMb2NhdGlvblxuICAgICAgJiYgY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWdzTG9jYXRpb24ucGF0aFRvRmxhZ3NGb3JtR3JvdXApIHtcbiAgICAgIHRoaXMuc2V0Q2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAoY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWdzTG9jYXRpb24ucGF0aFRvRmxhZ3NGb3JtR3JvdXApO1xuICAgICAgdGhpcy5zZWxlY3RlZEZsYWdzTG9jYXRpb24gPSBjYXNlRmxhZ1N0YXRlLnNlbGVjdGVkRmxhZ3NMb2NhdGlvbjtcbiAgICB9XG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSwgY2FjaGUgdGhlIGZsYWcgbmFtZSwgcGF0aCwgaGVhcmluZyByZWxldmFudCBpbmRpY2F0b3IsIGNvZGUsXG4gICAgLy8gYW5kIFwibGlzdCBvZiB2YWx1ZXNcIiAoY3VycmVudGx5IGFwcGxpY2FibGUgdG8gbGFuZ3VhZ2UgZmxhZyB0eXBlcylcbiAgICBpZiAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFKSB7XG4gICAgICB0aGlzLmZsYWdOYW1lID0gY2FzZUZsYWdTdGF0ZS5mbGFnTmFtZTtcbiAgICAgIHRoaXMuZmxhZ1BhdGggPSBjYXNlRmxhZ1N0YXRlLmZsYWdQYXRoO1xuICAgICAgdGhpcy5oZWFyaW5nUmVsZXZhbnRGbGFnID0gY2FzZUZsYWdTdGF0ZS5oZWFyaW5nUmVsZXZhbnRGbGFnO1xuICAgICAgdGhpcy5mbGFnQ29kZSA9IGNhc2VGbGFnU3RhdGUuZmxhZ0NvZGU7XG4gICAgICB0aGlzLmxpc3RPZlZhbHVlcyA9IGNhc2VGbGFnU3RhdGUubGlzdE9mVmFsdWVzO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHUyBhbmQgYSBmbGFnIGhhcyBiZWVuIHNlbGVjdGVkLCBzZXQgdGhlIHBhcmVudFxuICAgIC8vIENhc2UgRmxhZyBGb3JtR3JvdXAgZm9yIHRoaXMgY29tcG9uZW50J3MgY2hpbGRyZW4gYnkgdXNpbmcgdGhlIHByb3ZpZGVkIHBhdGhUb0ZsYWdzRm9ybUdyb3VwXG4gICAgaWYgKGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1NcbiAgICAgICYmIGNhc2VGbGFnU3RhdGUuc2VsZWN0ZWRGbGFnXG4gICAgICAmJiBjYXNlRmxhZ1N0YXRlLnNlbGVjdGVkRmxhZy5wYXRoVG9GbGFnc0Zvcm1Hcm91cCkge1xuICAgICAgdGhpcy5zZXRDYXNlRmxhZ1BhcmVudEZvcm1Hcm91cChjYXNlRmxhZ1N0YXRlLnNlbGVjdGVkRmxhZy5wYXRoVG9GbGFnc0Zvcm1Hcm91cCk7XG4gICAgfVxuXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gY2FzZUZsYWdTdGF0ZS5lcnJvck1lc3NhZ2VzO1xuICAgIHRoaXMuc2VsZWN0ZWRGbGFnID0gY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWc7XG4gICAgLy8gVmFsaWRhdGlvbiBzdWNjZWVkZWQ7IHByb2NlZWQgdG8gbmV4dCBzdGF0ZSBvciBmaW5hbCByZXZpZXcgc3RhZ2UgKFwiQ2hlY2sgeW91ciBhbnN3ZXJzXCIpXG4gICAgaWYgKHRoaXMuZXJyb3JNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIElmIHRoZSBjdXJyZW50IHN0YXRlIGlzIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTIG9yIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURSwgbW92ZSB0byBmaW5hbFxuICAgICAgLy8gcmV2aWV3IHN0YWdlXG4gICAgICBpZiAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyB8fFxuICAgICAgICAgIGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFKSB7XG4gICAgICAgIHRoaXMubW92ZVRvRmluYWxSZXZpZXdTdGFnZSgpO1xuICAgICAgICAvLyBEb24ndCBtb3ZlIHRvIG5leHQgc3RhdGUgaWYgY3VycmVudCBzdGF0ZSBpcyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFIGFuZCB0aGUgZmxhZyB0eXBlIGlzIGEgcGFyZW50IC0gdGhpc1xuICAgICAgICAvLyBtZWFucyB0aGUgdXNlciBuZWVkcyB0byBzZWxlY3QgZnJvbSB0aGUgbmV4dCBzZXQgb2YgZmxhZyB0eXBlcyBiZWZvcmUgdGhleSBjYW4gbW92ZSBvblxuICAgICAgfSBlbHNlIGlmICghY2FzZUZsYWdTdGF0ZS5pc1BhcmVudEZsYWdUeXBlKSB7XG4gICAgICAgIC8vIFByb2NlZWQgdG8gbmV4dCBzdGF0ZVxuICAgICAgICB0aGlzLnByb2NlZWRUb05leHRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcm9jZWVkVG9OZXh0U3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQXRGaW5hbFN0YXRlKCkpIHtcbiAgICAgIC8vIFNraXAgdGhlIFwibGFuZ3VhZ2UgaW50ZXJwcmV0ZXJcIiBzdGF0ZSBpZiBjdXJyZW50IHN0YXRlIGlzIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUgYW5kIHRoZSBmbGFnIHR5cGUgZG9lc24ndFxuICAgICAgLy8gaGF2ZSBhIFwibGlzdCBvZiB2YWx1ZXNcIiAtIGN1cnJlbnRseSwgdGhpcyBpcyBwcmVzZW50IG9ubHkgZm9yIHRob3NlIGZsYWcgdHlwZXMgdGhhdCByZXF1aXJlIGxhbmd1YWdlIGludGVycHJldGVyXG4gICAgICAvLyBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1RZUEUgJiYgIXRoaXMubGlzdE9mVmFsdWVzKSB7XG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSA9IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWVsZFN0YXRlKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEZsYWdzQ2FzZUZpZWxkVmFsdWUoKTogdm9pZCB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzd2l0Y2gtZGVmYXVsdFxuICAgIHN3aXRjaCAodGhpcy5maWVsZFN0YXRlKSB7XG4gICAgICBjYXNlIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTOlxuICAgICAgICB0aGlzLmFkZEZsYWdUb0NvbGxlY3Rpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURTpcbiAgICAgICAgdGhpcy51cGRhdGVGbGFnSW5Db2xsZWN0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRGbGFnVG9Db2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBubyBtb3JlIHRoYW4gb25lIG5ldyBmbGFnIGlzIGJlaW5nIGFkZGVkIGF0IGEgdGltZSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggZWFjaCBGbGFncyBjYXNlIGZpZWxkIGFuZCByZW1vdmluZ1xuICAgIC8vIGFueSBwcmV2aW91cyBlbnRyeSBmcm9tIHRoZSBkZXRhaWxzIGFycmF5IHdoZXJlIHRoYXQgZW50cnkgaGFzIG5vIGlkIChoZW5jZSBpdCBpcyBuZXcgLSBhbmQgdGhlcmUgc2hvdWxkIGJlIG9ubHlcbiAgICAvLyBvbmUgc3VjaCBlbnRyeSkuIChUaGlzIHNjZW5hcmlvIG9jY3VycyBpZiB0aGUgdXNlciByZXBlYXRzIHRoZSBDYXNlIEZsYWcgY3JlYXRpb24gam91cm5leSBieSB1c2luZyB0aGUgXCJDaGFuZ2VcIlxuICAgIC8vIGxpbmsgYW5kIHNlbGVjdHMgZWl0aGVyIHRoZSBzYW1lIGZsYWcgbG9jYXRpb24gYXMgYmVmb3JlIG9yIGEgZGlmZmVyZW50IG9uZS4pXG4gICAgdGhpcy5mbGFnc0RhdGEuZm9yRWFjaChpbnN0YW5jZSA9PiB7XG4gICAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZvciBlYWNoIEZsYWdzIGNhc2UgZmllbGQgdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIHZhbHVlIHRvIHJlbW92ZSB0aGUgbmV3IHZhbHVlIGZyb21cbiAgICAgIGxldCB2YWx1ZSA9IGluc3RhbmNlLmNhc2VGaWVsZC52YWx1ZTtcbiAgICAgIGNvbnN0IHBhdGhUb1ZhbHVlID0gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgICBpZiAocGF0aFRvVmFsdWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4gdmFsdWUgPSB2YWx1ZVtwYXJ0XSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuZGV0YWlscyAmJiB2YWx1ZS5kZXRhaWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaW5kZXhPZk5ld0ZsYWdEZXRhaWwgPSB2YWx1ZS5kZXRhaWxzLmZpbmRJbmRleChlbGVtZW50ID0+ICFlbGVtZW50Lmhhc093blByb3BlcnR5KCdpZCcpKTtcbiAgICAgICAgaWYgKGluZGV4T2ZOZXdGbGFnRGV0YWlsID4gLTEpIHtcbiAgICAgICAgICB2YWx1ZS5kZXRhaWxzLnNwbGljZShpbmRleE9mTmV3RmxhZ0RldGFpbCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLmNhc2VGaWVsZC52YWx1ZTtcbiAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byBhcHBseSBjaGFuZ2VzIHRvXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICBpZiAocGF0aC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICB9XG4gICAgLy8gSWYgdGhlIENhc2VGaWVsZCBmb3IgdGhlIHNlbGVjdGVkIGZsYWdzIGxvY2F0aW9uIGhhcyBubyB2YWx1ZSwgc2V0IGl0IHRvIGFuIGVtcHR5IG9iamVjdCBzbyBpdCBjYW4gYmUgcG9wdWxhdGVkXG4gICAgLy8gd2l0aCBmbGFnIGRldGFpbHNcbiAgICBpZiAoIWZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLmNhc2VGaWVsZC52YWx1ZSA9IHt9O1xuICAgICAgZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRGbGFnc0xvY2F0aW9uLmNhc2VGaWVsZC52YWx1ZTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlIGEgZGV0YWlscyBhcnJheSBpZiBvbmUgZG9lcyBub3QgZXhpc3RcbiAgICBpZiAoIWZsYWdzQ2FzZUZpZWxkVmFsdWUuaGFzT3duUHJvcGVydHkoJ2RldGFpbHMnKSkge1xuICAgICAgZmxhZ3NDYXNlRmllbGRWYWx1ZS5kZXRhaWxzID0gW107XG4gICAgfVxuICAgIC8vIFBvcHVsYXRlIG5ldyBGbGFnRGV0YWlsIGluc3RhbmNlIGFuZCBhZGQgdG8gdGhlIEZsYWdzIGRhdGEgd2l0aGluIHRoZSBDYXNlRmllbGQgaW5zdGFuY2Ugb2YgdGhlIHNlbGVjdGVkIGZsYWdcbiAgICAvLyBsb2NhdGlvblxuICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscy5wdXNoKHt2YWx1ZTogdGhpcy5wb3B1bGF0ZU5ld0ZsYWdEZXRhaWxJbnN0YW5jZSgpfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRmxhZ0luQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgbm8gbW9yZSB0aGFuIG9uZSBmbGFnIGlzIGJlaW5nIHVwZGF0ZWQgYXQgYSB0aW1lLCBieSBpdGVyYXRpbmcgdGhyb3VnaCBlYWNoIEZsYWdzIGNhc2UgZmllbGQgYW5kIHJlc2V0dGluZ1xuICAgIC8vIHRoZSBjb21tZW50cywgc3RhdHVzLCBhbmQgZGF0ZS90aW1lIG1vZGlmaWVkIChpZiBwcmVzZW50KSBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgZGV0YWlscyBhcnJheSwgd2l0aCBvcmlnaW5hbCB2YWx1ZXNcbiAgICAvLyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGZvcm1hdHRlZF92YWx1ZSBwcm9wZXJ0eS4gKFRoaXMgc2NlbmFyaW8gb2NjdXJzIGlmIHRoZSB1c2VyIHJlcGVhdHMgdGhlIE1hbmFnZSBDYXNlIEZsYWdcbiAgICAvLyBqb3VybmV5IGJ5IHVzaW5nIHRoZSBcIkNoYW5nZVwiIGxpbmsgYW5kIHNlbGVjdHMgYSBkaWZmZXJlbnQgZmxhZyB0byB1cGRhdGUuKVxuICAgIHRoaXMuZmxhZ3NEYXRhLmZvckVhY2goaW5zdGFuY2UgPT4ge1xuICAgICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmb3IgZWFjaCBGbGFncyBjYXNlIGZpZWxkIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAgIC8vIENhc2VGaWVsZCB2YWx1ZSBmb3Igd2hpY2ggdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWVzXG4gICAgICBsZXQgdmFsdWUgPSBpbnN0YW5jZS5jYXNlRmllbGQudmFsdWU7XG4gICAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSBpbnN0YW5jZS5jYXNlRmllbGQuZm9ybWF0dGVkX3ZhbHVlO1xuICAgICAgY29uc3QgcGF0aFRvVmFsdWUgPSBpbnN0YW5jZS5wYXRoVG9GbGFnc0Zvcm1Hcm91cDtcbiAgICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICAgIGlmIChwYXRoVG9WYWx1ZS5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICBwYXRoVG9WYWx1ZS5zbGljZShwYXRoVG9WYWx1ZS5pbmRleE9mKCcuJykgKyAxKS5zcGxpdCgnLicpLmZvckVhY2gocGFydCA9PiB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZVtwYXJ0XTtcbiAgICAgICAgICBpZiAoZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVkVmFsdWVbcGFydF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5kZXRhaWxzICYmIHZhbHVlLmRldGFpbHMubGVuZ3RoID4gMCAmJiBmb3JtYXR0ZWRWYWx1ZSAmJiBGaWVsZHNVdGlscy5pc05vbkVtcHR5T2JqZWN0KGZvcm1hdHRlZFZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5kZXRhaWxzLmZvckVhY2goZmxhZ0RldGFpbCA9PiB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxGbGFnRGV0YWlsID0gZm9ybWF0dGVkVmFsdWUuZGV0YWlscy5maW5kKGRldGFpbCA9PiBkZXRhaWwuaWQgPT09IGZsYWdEZXRhaWwuaWQpO1xuICAgICAgICAgIGlmIChvcmlnaW5hbEZsYWdEZXRhaWwpIHtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnRcbiAgICAgICAgICAgICAgPyBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnRcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5zdGF0dXMgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWUuc3RhdHVzO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5kYXRlVGltZU1vZGlmaWVkID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlLmRhdGVUaW1lTW9kaWZpZWRcbiAgICAgICAgICAgICAgPyBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWUuZGF0ZVRpbWVNb2RpZmllZFxuICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRGbGFnLmNhc2VGaWVsZC52YWx1ZTtcbiAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byBhcHBseSBjaGFuZ2VzIHRvXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuc2VsZWN0ZWRGbGFnLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICBpZiAocGF0aC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICB9XG4gICAgaWYgKGZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgIGNvbnN0IGZsYWdEZXRhaWxUb1VwZGF0ZSA9IGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscy5maW5kKFxuICAgICAgICBkZXRhaWwgPT4gZGV0YWlsLmlkID09PSB0aGlzLnNlbGVjdGVkRmxhZy5mbGFnRGV0YWlsRGlzcGxheS5mbGFnRGV0YWlsLmlkKTtcbiAgICAgIGlmIChmbGFnRGV0YWlsVG9VcGRhdGUpIHtcbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmZsYWdDb21tZW50ID0gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5mbGFnQ29tbWVudHNcbiAgICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUuZmxhZ0NvbW1lbnRzXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuc3RhdHVzID0gdGhpcy5zZWxlY3RlZEZsYWcuZmxhZ0RldGFpbERpc3BsYXkuZmxhZ0RldGFpbC5zdGF0dXM7XG4gICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5kYXRlVGltZU1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0F0RmluYWxTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlXG4gICAgICA/IHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFXG4gICAgICA6IHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFM7XG4gIH1cblxuICBwdWJsaWMgbmF2aWdhdGVUb0Vycm9yRWxlbWVudChlbGVtZW50SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50SWQpIHtcbiAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICAgIGlmIChodG1sRWxlbWVudCkge1xuICAgICAgICBodG1sRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgICAgICBodG1sRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkZsYWdDb21tZW50c09wdGlvbmFsRW1pdHRlZChfOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZsYWdDb21tZW50c09wdGlvbmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHBhcmVudCB7QGxpbmsgRm9ybUdyb3VwfSBmb3IgdGhpcyBjb21wb25lbnQncyBjaGlsZHJlbiwgZGVwZW5kaW5nIG9uIHRoZSBgRmxhZ3NgIHtAbGluayBDYXNlRmllbGR9IGluc3RhbmNlXG4gICAqIHRvIHdoaWNoIGRhdGEgc2hvdWxkIGJlIGF0dGFjaGVkLiAqKk5vdGU6KiogVGhlIHBhcmVudCBpcyBub3QgX3RoaXNfIGNvbXBvbmVudCdzIGBGb3JtR3JvdXBgIChhcyBtaWdodCBvdGhlcndpc2UgYmVcbiAgICogZXhwZWN0ZWQpIGJlY2F1c2UgdGhpcyBjb21wb25lbnQgaXMgbm90IGV4cGVjdGVkIHRvIGhhdmUgYSB2YWx1ZSwgZ2l2ZW4gaXQgaXMgdXNlZCBmb3IgdGhlIGVtcHR5IGBGbGFnTGF1bmNoZXJgIGJhc2VcbiAgICogZmllbGQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIFRoZSBkb3QtZGVsaW1pdGVkIHN0cmluZyB0aGF0IGlzIHRoZSBwYXRoIHRvIHRoZSBgRm9ybUdyb3VwYCBmb3IgYSBgRmxhZ3NgIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgc2V0Q2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAocGF0aFRvRmxhZ3NGb3JtR3JvdXA6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cC5wYXJlbnQuZ2V0KHBhdGhUb0ZsYWdzRm9ybUdyb3VwKSBhcyBGb3JtR3JvdXA7XG4gIH1cblxuICBwdWJsaWMgcG9wdWxhdGVOZXdGbGFnRGV0YWlsSW5zdGFuY2UoKTogRmxhZ0RldGFpbCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMuZmxhZ05hbWUsXG4gICAgICAvLyBDdXJyZW50bHksIHN1YlR5cGVWYWx1ZSBhbmQgc3ViVHlwZUtleSBhcmUgYXBwbGljYWJsZSBvbmx5IHRvIGxhbmd1YWdlIGZsYWcgdHlwZXNcbiAgICAgIHN1YlR5cGVWYWx1ZTogdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5sYW5ndWFnZVNlYXJjaFRlcm1cbiAgICAgICAgPyB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLmxhbmd1YWdlU2VhcmNoVGVybS52YWx1ZVxuICAgICAgICA6IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUubWFudWFsTGFuZ3VhZ2VFbnRyeVxuICAgICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5tYW51YWxMYW5ndWFnZUVudHJ5XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgLy8gRm9yIHVzZXItZW50ZXJlZCAoaS5lLiBub24tUmVmZXJlbmNlIERhdGEpIGxhbmd1YWdlcywgdGhlcmUgaXMgbm8ga2V5XG4gICAgICBzdWJUeXBlS2V5OiB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLnZhbHVlLmxhbmd1YWdlU2VhcmNoVGVybVxuICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUubGFuZ3VhZ2VTZWFyY2hUZXJtLmtleVxuICAgICAgICA6IG51bGwsXG4gICAgICBvdGhlckRlc2NyaXB0aW9uOiB0aGlzLmZsYWdDb2RlID09PSB0aGlzLm90aGVyRmxhZ1R5cGVDb2RlICYmIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUub3RoZXJGbGFnVHlwZURlc2NyaXB0aW9uXG4gICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5vdGhlckZsYWdUeXBlRGVzY3JpcHRpb25cbiAgICAgICAgOiBudWxsLFxuICAgICAgZmxhZ0NvbW1lbnQ6IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAudmFsdWUuZmxhZ0NvbW1lbnRzID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC52YWx1ZS5mbGFnQ29tbWVudHMgOiBudWxsLFxuICAgICAgZGF0ZVRpbWVDcmVhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBwYXRoOiB0aGlzLmZsYWdQYXRoLFxuICAgICAgaGVhcmluZ1JlbGV2YW50OiB0aGlzLmhlYXJpbmdSZWxldmFudEZsYWcgPyAnWWVzJyA6ICdObycsXG4gICAgICBmbGFnQ29kZTogdGhpcy5mbGFnQ29kZSxcbiAgICAgIHN0YXR1czogQ2FzZUZsYWdTdGF0dXMuQUNUSVZFXG4gICAgfSBhcyBGbGFnRGV0YWlsO1xuICB9XG5cbiAgcHVibGljIG1vdmVUb0ZpbmFsUmV2aWV3U3RhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRGbGFnc0Nhc2VGaWVsZFZhbHVlKCk7XG4gICAgLy8gQ2xlYXIgdGhlIFwibm90QWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWRcIiBlcnJvclxuICAgIHRoaXMuYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2Uuc2V0VHJpZ2dlclN1Ym1pdEV2ZW50KHRydWUpO1xuICB9XG59XG4iLCI8IS0tIEVycm9yIG1lc3NhZ2Ugc3VtbWFyeSAtLT5cbjxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlcIiBhcmlhLWxhYmVsbGVkYnk9XCJlcnJvci1zdW1tYXJ5LXRpdGxlXCIgcm9sZT1cImFsZXJ0XCIgdGFiaW5kZXg9XCItMVwiIGRhdGEtbW9kdWxlPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiPlxuICA8aDIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X190aXRsZVwiIGlkPVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiPlxuICAgIHt7J1RoZXJlIGlzIGEgcHJvYmxlbScgfCBycHhUcmFuc2xhdGV9fVxuICA8L2gyPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBlcnJvck1lc3NhZ2Ugb2YgZXJyb3JNZXNzYWdlc1wiIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgIDx1bCBjbGFzcz1cImdvdnVrLWxpc3QgZ292dWstZXJyb3Itc3VtbWFyeV9fbGlzdFwiPlxuICAgICAgPGxpPlxuICAgICAgICA8YSAoY2xpY2spPVwibmF2aWdhdGVUb0Vycm9yRWxlbWVudChlcnJvck1lc3NhZ2UuZmllbGRJZClcIiBjbGFzcz1cInZhbGlkYXRpb24tZXJyb3JcIj57e2Vycm9yTWVzc2FnZS5kZXNjcmlwdGlvbiB8IHJweFRyYW5zbGF0ZX19PC9hPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIiFpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlXCIgY2xhc3M9XCJmb3JtLWdyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIiBbbmdTd2l0Y2hdPVwiZmllbGRTdGF0ZVwiPlxuICAgIDxkaXYgaWQ9XCJjcmVhdGUtZmxhZy1jYXB0aW9uXCIgY2xhc3M9XCJnb3Z1ay1jYXB0aW9uLWxcIiBbbmdDbGFzc109XCJ7J2Zvcm0tZ3JvdXAtZXJyb3InOiBlcnJvck1lc3NhZ2VzLmxlbmd0aCA+IDB9XCI+XG4gICAgICB7e2NyZWF0ZUZsYWdDYXB0aW9uIHwgcnB4VHJhbnNsYXRlfX1cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MT0NBVElPTlwiPlxuICAgICAgPGNjZC1zZWxlY3QtZmxhZy1sb2NhdGlvbiBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgW2ZsYWdzRGF0YV09XCJmbGFnc0RhdGFcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+PC9jY2Qtc2VsZWN0LWZsYWctbG9jYXRpb24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRVwiPlxuICAgICAgPGNjZC1zZWxlY3QtZmxhZy10eXBlIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIiBbanVyaXNkaWN0aW9uXT1cImp1cmlzZGljdGlvblwiIFtjYXNlVHlwZUlkXT1cImNhc2VUeXBlSWRcIlxuICAgICAgICBbaG1jdHNTZXJ2aWNlSWRdPVwiaG1jdHNTZXJ2aWNlSWRcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZsYWdDb21tZW50c09wdGlvbmFsRW1pdHRlcik9XCJvbkZsYWdDb21tZW50c09wdGlvbmFsRW1pdHRlZCgkZXZlbnQpXCI+PC9jY2Qtc2VsZWN0LWZsYWctdHlwZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19MQU5HVUFHRV9JTlRFUlBSRVRFUlwiPlxuICAgICAgPGNjZC1zZWFyY2gtbGFuZ3VhZ2UtaW50ZXJwcmV0ZXIgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtsYW5ndWFnZXNdPVwibGlzdE9mVmFsdWVzXCIgW2ZsYWdDb2RlXT1cImZsYWdDb2RlXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPjwvY2NkLXNlYXJjaC1sYW5ndWFnZS1pbnRlcnByZXRlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UU1wiPlxuICAgICAgPGNjZC1hZGQtY29tbWVudHMgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtvcHRpb25hbF09XCJmbGFnQ29tbWVudHNPcHRpb25hbFwiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj48L2NjZC1hZGQtY29tbWVudHM+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nU3dpdGNoXT1cImZpZWxkU3RhdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHU1wiPlxuICAgICAgPGNjZC1tYW5hZ2UtY2FzZS1mbGFncyBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgW2ZsYWdzRGF0YV09XCJmbGFnc0RhdGFcIiBbY2FzZVRpdGxlXT1cImNhc2VUaXRsZVwiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj48L2NjZC1tYW5hZ2UtY2FzZS1mbGFncz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVcIj5cbiAgICAgIDxjY2QtdXBkYXRlLWZsYWcgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtzZWxlY3RlZEZsYWddPVwic2VsZWN0ZWRGbGFnXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiPjwvY2NkLXVwZGF0ZS1mbGFnPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
588
|
+
}], function () { return [{ type: i1.ActivatedRoute }, { type: i2.CaseEditDataService }, { type: i3.CaseFlagStateService }, { type: i4.RpxTranslationService }]; }, null); })();
|
|
589
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy93cml0ZS1jYXNlLWZsYWctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1mbGFnL3dyaXRlLWNhc2UtZmxhZy1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUc3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDMUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFM0YsT0FBTyxFQUFFLCtCQUErQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7Ozs7O0lDUDlILDhCQUFrRjtJQUNoRiw2QkFBaUQ7SUFDL0MsMEJBQUk7SUFDRiw0QkFBbUY7SUFBaEYsMlFBQXNEO0lBQTBCLFlBQTJDOztJQUFBLGlCQUFJO0lBQ3BJLGlCQUFLO0lBQ1AsaUJBQUs7SUFDUCxpQkFBTTs7O0lBSG1GLGVBQTJDO0lBQTNDLHVFQUEyQzs7O0lBUHRJLDhCQUFxSztJQUNuSyw2QkFBZ0U7SUFDOUQsWUFDRjs7SUFBQSxpQkFBSztJQUNMLGtGQU1NO0lBQ1IsaUJBQU07OztJQVRGLGVBQ0Y7SUFERSwyRUFDRjtJQUM4QixlQUFnQjtJQUFoQiw4Q0FBZ0I7Ozs7SUFhNUMsNkJBQStEO0lBQzdELG9EQUlDO0lBRkMsMFJBQXVEO0lBRXhELGlCQUEyQjtJQUM5QiwwQkFBZTs7O0lBSlgsZUFBcUM7SUFBckMsMERBQXFDLCtCQUFBLCtFQUFBOzs7O0lBS3pDLDZCQUEyRDtJQUN6RCxnREFHd0U7SUFEdEUsc1JBQXVELDhSQUFBO0lBQ2UsaUJBQXVCO0lBQ2pHLDBCQUFlOzs7SUFKUyxlQUFxQztJQUFyQywwREFBcUMscUNBQUEsaUNBQUEseUNBQUEsK0VBQUE7Ozs7SUFLN0QsNkJBQTJFO0lBQ3pFLDJEQUUwRDtJQUF4RCxpU0FBdUQ7SUFDekQsaUJBQWtDO0lBQ3BDLDBCQUFlOzs7SUFKb0IsZUFBcUM7SUFBckMsMERBQXFDLDZCQUFBOzs7O0lBS3hFLDZCQUErRDtJQUM3RCw0Q0FHQztJQUZDLGtSQUF1RDtJQUV4RCxpQkFBbUI7SUFDdEIsMEJBQWU7OztJQUpLLGVBQXFDO0lBQXJDLDJEQUFxQywwQ0FBQSxnRkFBQTs7OztJQUt6RCw2QkFBNkQ7SUFDM0QsbURBQzBEO0lBQXhELHlSQUF1RDtJQUFDLGlCQUEwQjtJQUN0RiwwQkFBZTs7O0lBRlksZUFBcUM7SUFBckMsMkRBQXFDLGlEQUFBOzs7O0lBL0JwRSw4QkFBeUY7SUFDdkYsOEJBQXNEO0lBQ3BELCtCQUFpSDtJQUMvRyxZQUNGOztJQUFBLGlCQUFNO0lBQ04scUdBTWU7SUFDZixxR0FLZTtJQUNmLHFHQUtlO0lBQ2YscUdBS2U7SUFDZixxR0FHZTtJQUNqQixpQkFBTTtJQUNSLGlCQUFNOzs7SUFuQzJELDRDQUF1QjtJQUN4RCxlQUF1QjtJQUF2Qiw0Q0FBdUI7SUFDRyxlQUEwRDtJQUExRCxzRkFBMEQ7SUFDOUcsZUFDRjtJQURFLCtFQUNGO0lBQ2UsZUFBOEM7SUFBOUMsc0VBQThDO0lBTzlDLGVBQTBDO0lBQTFDLGtFQUEwQztJQU0xQyxlQUEwRDtJQUExRCxrRkFBMEQ7SUFNMUQsZUFBOEM7SUFBOUMsc0VBQThDO0lBTTlDLGVBQTRDO0lBQTVDLG9FQUE0Qzs7OztJQVEzRCw2QkFBd0U7SUFDdEUsaURBRTBEO0lBQXhELHVSQUF1RDtJQUFDLGlCQUF3QjtJQUNwRiwwQkFBZTs7O0lBSFUsZUFBcUM7SUFBckMsMkRBQXFDLGdDQUFBLGdDQUFBLDREQUFBOzs7O0lBSTlELDZCQUE2RDtJQUMzRCwyQ0FFMEQ7SUFBeEQsaVJBQXVEO0lBQUMsaUJBQWtCO0lBQzlFLDBCQUFlOzs7SUFISSxlQUFxQztJQUFyQywyREFBcUMsNERBQUE7Ozs7SUFJeEQsNkJBQStFO0lBQzdFLGdFQUdDO0lBREMsc1NBQXVEO0lBQ3hELGlCQUF1QztJQUMxQywwQkFBZTs7O0lBSFgsZUFBcUM7SUFBckMsMkRBQXFDOzs7SUFkN0MsOEJBQXdGO0lBQ3RGLDhCQUFzRDtJQUNwRCxxR0FJZTtJQUNmLHFHQUllO0lBQ2YscUdBS2U7SUFDakIsaUJBQU07SUFDUixpQkFBTTs7O0lBbkIwRCw0Q0FBdUI7SUFDdkQsZUFBdUI7SUFBdkIsNENBQXVCO0lBQ3BDLGVBQXVEO0lBQXZELCtFQUF1RDtJQUt2RCxlQUE0QztJQUE1QyxvRUFBNEM7SUFLNUMsZUFBOEQ7SUFBOUQsc0ZBQThEOztBRDFDakYsTUFBTSxPQUFPLDJCQUE0QixTQUFRLDJCQUEyQjtJQWdDMUUsWUFDbUIsS0FBcUIsRUFDckIsbUJBQXdDLEVBQ3hDLG9CQUEwQyxFQUMxQyxxQkFBNEM7UUFFN0QsS0FBSyxFQUFFLENBQUM7UUFMUyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQWpDeEQsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDeEMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBS25DLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQVM1QiwrQkFBMEIsR0FBRyxLQUFLLENBQUM7UUFDM0MsMERBQTBEO1FBQ3pDLHNCQUFpQixHQUFHLFFBQVEsQ0FBQztRQUM3QiwrQkFBMEIsR0FBRyw0QkFBNEIsQ0FBQztRQUMzRCxvQkFBZSxHQUFHLG1CQUFtQixDQUFDO0lBaUJ0RCxDQUFDO0lBZkQsSUFBVyxRQUFROztRQUNqQixhQUFPLElBQUksQ0FBQyx1QkFBdUIsMENBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBVyxxQkFBcUI7O1FBQzlCLGFBQU8sSUFBSSxDQUFDLHVCQUF1QiwwQ0FBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFDOUQsQ0FBQztJQVdNLFFBQVE7UUFDYiw4R0FBOEc7UUFDOUcsd0dBQXdHO1FBQ3hHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDO1FBQ2pFLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTO1lBQzdCLElBQUksQ0FBQyxVQUFVLEtBQUssa0JBQWtCLENBQUMsYUFBYTtZQUNwRCxJQUFJLENBQUMsVUFBVSxLQUFLLGtCQUFrQixDQUFDLHNCQUFzQixFQUFFO1lBQ2pFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUMxQywwRUFBMEU7WUFDMUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsMkRBQTJEO1FBQzNELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1FBQ25FLG1GQUFtRjtRQUNuRixJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNyRCxrSEFBa0g7UUFDbEgsaUhBQWlIO1FBQ2pILG9DQUFvQztRQUNwQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsK0dBQStHO1FBQy9HLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUU7WUFDdEQsVUFBVSxFQUFFLENBQUMsQ0FBa0IsRUFBbUMsRUFBRTtnQkFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRTtvQkFDcEMsbUdBQW1HO29CQUNuRyxPQUFPLEVBQUMsNkJBQTZCLEVBQUUsSUFBSSxFQUFDLENBQUM7aUJBQzlDO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztTQUNGLENBQUMsRUFBRSxJQUFJLENBQWMsQ0FBQztRQUV2QixpSEFBaUg7UUFDakgsb0JBQW9CO1FBQ3BCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM1RSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxvSEFBb0g7WUFDcEgsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQzthQUM3RTtTQUNGO1FBQ0QsdUZBQXVGO1FBQ3ZGLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN6QyxvSEFBb0g7WUFDcEgsOEZBQThGO1lBQzlGLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0I7bUJBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFO2dCQUM1RSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDO2FBQy9GO1lBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtnQkFDckQsSUFBSSxDQUFDLFNBQVMsR0FBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFpQjtxQkFDbEYsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFO29CQUMzQixPQUFPLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzlGLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFVCwrR0FBK0c7Z0JBQy9HLElBQUksQ0FBQyx1QkFBdUI7b0JBQzFCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQTBCLENBQUMsQ0FBQztnQkFFcEcsbUVBQW1FO2dCQUNuRSxJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUUzRyxxRUFBcUU7Z0JBQ3JFLElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBRS9HLDZEQUE2RDtnQkFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDO2lCQUN2STtnQkFFRCxpR0FBaUc7Z0JBQ2pHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBRWpGLGlEQUFpRDtnQkFDakQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO29CQUN6RSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxNQUFNLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7b0JBQ3BFLENBQUM7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFFTSxnQ0FBZ0MsQ0FBQyx1QkFBK0I7UUFDckUsT0FBTyx1QkFBdUIsS0FBSywrQkFBK0IsQ0FBQyxNQUFNO1lBQ3ZFLHVCQUF1QixLQUFLLCtCQUErQixDQUFDLGVBQWUsQ0FBQztJQUNoRixDQUFDO0lBRU0sa0NBQWtDLENBQUMsdUJBQStCO1FBQ3ZFLE9BQU8sdUJBQXVCLEtBQUssK0JBQStCLENBQUMsZUFBZTtZQUNoRix1QkFBdUIsS0FBSywrQkFBK0IsQ0FBQyxlQUFlLENBQUM7SUFDaEYsQ0FBQztJQUVNLHNCQUFzQixDQUFDLGFBQTRCO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRXJELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUM7UUFFL0MsMkZBQTJGO1FBQzNGLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25DLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNqRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDOUIsaUhBQWlIO2dCQUNqSCx5RkFBeUY7YUFDMUY7aUJBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDMUMsd0JBQXdCO2dCQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMzQjtTQUNGO0lBQ0gsQ0FBQztJQUVNLHlCQUF5QixDQUFDLGFBQTRCOztRQUMzRCxzREFBc0Q7UUFDdEQscUdBQXFHO1FBQ3JHLGtDQUFrQztRQUNsQyxJQUFJLElBQUksQ0FBQyxpQ0FBaUMsRUFBRTtZQUMxQyxPQUFPLGFBQWEsQ0FBQyx5QkFBeUIsS0FBSyxrQkFBa0IsQ0FBQyxhQUFhO2dCQUMvRSxhQUFhLENBQUMseUJBQXlCLEtBQUssa0JBQWtCLENBQUMsV0FBVyxDQUFDO1NBQ2hGO1FBQ0Qsa0NBQWtDO1FBQ2xDLG1DQUFtQztRQUNuQyxrRkFBa0Y7UUFDbEYscURBQXFEO1FBQ3JELGtDQUFrQztRQUNsQyxPQUFPLGFBQWEsQ0FBQyx5QkFBeUIsS0FBSyxrQkFBa0IsQ0FBQyxXQUFXO1lBQy9FLENBQUMsYUFBYSxDQUFDLHlCQUF5QixLQUFLLGtCQUFrQixDQUFDLFdBQVc7Z0JBQ3pFLFFBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQywyQkFBMkIsQ0FBQywwQ0FBRSxLQUFLLENBQUEsQ0FBQztZQUMzRixhQUFhLENBQUMseUJBQXlCLEtBQUssa0JBQWtCLENBQUMsNkJBQTZCLENBQUM7SUFDakcsQ0FBQztJQUVNLGtCQUFrQjs7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUMxQixtSEFBbUg7WUFDbkgsbUhBQW1IO1lBQ25ILFlBQVk7WUFDWixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssa0JBQWtCLENBQUMsU0FBUyxJQUFJLFFBQUMsSUFBSSxDQUFDLFFBQVEsMENBQUUsWUFBWSxDQUFBLEVBQUU7Z0JBQ3BGLElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDO2FBQ3BEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNuQjtTQUNGO0lBQ0gsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQiwyQ0FBMkM7UUFDM0MsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3ZCLEtBQUssa0JBQWtCLENBQUMsV0FBVztnQkFDakMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLGtCQUFrQixDQUFDLGFBQWE7Z0JBQ25DLElBQUksSUFBSSxDQUFDLGlDQUFpQyxFQUFFO29CQUMxQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztpQkFDNUI7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssSUFBSSxDQUFDLG9CQUFvQjtnQkFDNUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQzlCLE1BQU07U0FDVDtJQUNILENBQUM7SUFFTSxtQkFBbUI7UUFDeEIscUhBQXFIO1FBQ3JILG1IQUFtSDtRQUNuSCxrSEFBa0g7UUFDbEgsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hDLDJHQUEyRztZQUMzRywrQ0FBK0M7WUFDL0MsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDckMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1lBQ2xELG1IQUFtSDtZQUNuSCxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ2pHO1lBQ0QsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3RELE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDL0YsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDN0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQy9DO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQztRQUM3RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNwRixJQUFJLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3RELGlIQUFpSDtRQUNqSCxzQ0FBc0M7UUFDdEMsbUhBQW1IO1FBQ25ILElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDL0c7UUFDRCxrSEFBa0g7UUFDbEgsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUN4QixXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7U0FDbkQ7UUFDRCwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNsRCxtQkFBbUIsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1NBQ2xDO1FBQ0QsZ0hBQWdIO1FBQ2hILFdBQVc7UUFDWCxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxFQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU0sc0JBQXNCOztRQUMzQixvSEFBb0g7UUFDcEgsbUhBQW1IO1FBQ25ILGlIQUFpSDtRQUNqSCwrRkFBK0Y7UUFDL0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7O1lBQ2hDLDJHQUEyRztZQUMzRywyREFBMkQ7WUFDM0QsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDckMsSUFBSSxjQUFjLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7WUFDeEQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1lBQ2xELG1IQUFtSDtZQUNuSCxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUN4RSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwQixJQUFJLGNBQWMsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUU7d0JBQ2xFLGNBQWMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3ZDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxJQUFJLE9BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE9BQU8sMENBQUUsTUFBTSxJQUFHLENBQUMsSUFBSSxjQUFjLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUNoRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDakMsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM5RixJQUFJLGtCQUFrQixFQUFFO3dCQUN0QixVQUFVLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUM7d0JBQ3RGLFVBQVUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQzt3QkFDNUYsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7d0JBQzVFLFVBQVUsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO3dCQUNsRixVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUM7d0JBQ3hGLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7d0JBQzFELFVBQVUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQztxQkFDdkY7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxLQUEyQyxDQUFDO1NBQ3JIO1FBQ0QsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDNUQsaUhBQWlIO1FBQ2pILHNDQUFzQztRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDO1FBQ3BELG1IQUFtSDtRQUNuSCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQy9HO1FBQ0QsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3pELE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3RSxJQUFJLGtCQUFrQixFQUFFO2dCQUN0Qix1SEFBdUg7Z0JBQ3ZILGtCQUFrQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxpQkFBaUI7b0JBQ3RHLENBQUMsT0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLDBDQUFFLEtBQUssQ0FDcEYsQ0FBQyxDQUFDLElBQUk7b0JBQ1Isa0JBQWtCLENBQUMsS0FBSyxDQUFDLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLGlCQUFpQjt3QkFDekcsQ0FBQyxPQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsNEJBQTRCLENBQUMsMENBQUUsS0FBSyxDQUMxRixDQUFDLENBQUMsSUFBSTtvQkFDUiwwR0FBMEc7b0JBQzFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsS0FBSyxJQUFJO3dCQUNqRixDQUFDLE9BQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsMENBQUUsS0FBSyxDQUN0RSxDQUFDLENBQUMsSUFBSTtvQkFDUixpREFBaUQ7b0JBQ2pELHNIQUFzSDtvQkFDdEgsc0VBQXNFO29CQUN0RSxpQ0FBaUM7b0JBQ2pDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsT0FBQSxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQywwQ0FBRSxLQUFLLEVBQ2xILENBQUMsT0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQywwQ0FBRSxLQUFLLENBQzVFLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxLQUFLLElBQUk7d0JBQzVDLENBQUMsT0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQywwQ0FBRSxLQUFLLENBQ3RFLENBQUMsQ0FBQyxJQUFJO29CQUNWLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxpQkFBaUIsU0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLDBDQUFFLEtBQUssQ0FBQztnQkFDOUgsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxjQUFjLE9BQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsMENBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3JILGtCQUFrQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3RFO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQywrQkFBK0I7WUFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLG9CQUFvQjtZQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7SUFDekQsQ0FBQztJQUVNLHNCQUFzQixDQUFDLFNBQWlCO1FBQzdDLElBQUksU0FBUyxFQUFFO1lBQ2IsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxJQUFJLFdBQVcsRUFBRTtnQkFDZixXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDcEUsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3JCO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sNkJBQTZCLENBQUMsQ0FBTTtRQUN6QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFTSw2QkFBNkI7O1FBQ2xDLE1BQU0sVUFBVSxTQUFHLElBQUksQ0FBQyx1QkFBdUIsMENBQUUsS0FBSyxDQUFDO1FBQ3ZELE9BQU87WUFDTCxJQUFJLFFBQUUsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLFFBQVEsMENBQUUsSUFBSTtZQUNoQyxPQUFPLFFBQUUsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLFFBQVEsMENBQUUsT0FBTztZQUN0QyxxR0FBcUc7WUFDckcsWUFBWSxFQUFFLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLGtCQUFrQixLQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEtBQUssSUFBSTtnQkFDMUYsQ0FBQyxDQUFDLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQ3RDLENBQUMsQ0FBQyxDQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxtQkFBbUIsS0FBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxLQUFLLElBQUk7Z0JBQy9FLENBQUMsQ0FBQyxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsbUJBQW1CLENBQ2pDLENBQUMsQ0FBQyxJQUFJO1lBQ1YsZUFBZSxFQUFFLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLGtCQUFrQixLQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEtBQUssSUFBSTtnQkFDL0YsQ0FBQyxDQUFDLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxrQkFBa0IsQ0FBQyxRQUFRLENBQ3pDLENBQUMsQ0FBQyxDQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxtQkFBbUIsS0FBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxLQUFLLElBQUk7Z0JBQy9FLENBQUMsQ0FBQyxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsbUJBQW1CLENBQ2pDLENBQUMsQ0FBQyxJQUFJO1lBQ1Isd0VBQXdFO1lBQ3hFLFVBQVUsRUFBRSxDQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxrQkFBa0IsRUFDeEMsQ0FBQyxDQUFDLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQ3BDLENBQUMsQ0FBQyxJQUFJO1lBQ1IsZ0JBQWdCLEVBQUUsT0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsUUFBUSwwQ0FBRSxRQUFRLE1BQUssSUFBSSxDQUFDLGlCQUFpQixLQUN6RSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsZ0JBQWdCLENBQUEsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxLQUFLLElBQUk7Z0JBQzVFLENBQUMsQ0FBQyxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsZ0JBQWdCLENBQzlCLENBQUMsQ0FBQyxJQUFJO1lBQ1IsbUJBQW1CLEVBQUUsT0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsUUFBUSwwQ0FBRSxRQUFRLE1BQUssSUFBSSxDQUFDLGlCQUFpQixLQUM1RSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsZ0JBQWdCLENBQUEsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxLQUFLLElBQUk7Z0JBQzVFLENBQUMsQ0FBQyxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsZ0JBQWdCLENBQzlCLENBQUMsQ0FBQyxJQUFJO1lBQ1IsV0FBVyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEtBQUssSUFBSTtnQkFDdkQsQ0FBQyxDQUFDLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxZQUFZLENBQzFCLENBQUMsQ0FBQyxJQUFJO1lBQ1IsY0FBYyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEtBQUssSUFBSTtnQkFDMUQsQ0FBQyxDQUFDLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxZQUFZLENBQzFCLENBQUMsQ0FBQyxJQUFJO1lBQ1IsaUJBQWlCLEVBQUUsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLFlBQVk7WUFDM0MsZUFBZSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3pDLElBQUksRUFBRSxPQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxRQUFRLDBDQUFFLElBQUksWUFDOUIsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLFFBQVEsMENBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFDO1lBQzVGLGVBQWUsRUFBRSxPQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxRQUFRLDBDQUFFLGVBQWUsRUFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3JFLFFBQVEsUUFBRSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsUUFBUSwwQ0FBRSxRQUFRO1lBQ3hDLG1IQUFtSDtZQUNuSCxNQUFNLEVBQUUsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsT0FBQyxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsUUFBUSwwQ0FBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsY0FBYyxDQUFDO1lBQ2pJLG1CQUFtQixFQUFFLE9BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLFFBQVEsMENBQUUsbUJBQW1CLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUNoRSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxzQkFBc0I7UUFDM0IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsa0RBQWtEO1FBQ2xELElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU0sV0FBVzs7UUFDaEIsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7UUFDM0QsTUFBQSxJQUFJLENBQUMscUJBQXFCLDBDQUFFLFdBQVcsR0FBRztJQUM1QyxDQUFDO0lBRUQsSUFBVyxvQkFBb0I7O1FBQzdCLE9BQU8sT0FBQSxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLDBDQUFFLEtBQUssRUFDOUYsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7SUFDdEYsQ0FBQztJQUVNLDBCQUEwQixDQUFDLFVBQXVCOztRQUN2RCxhQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUMsMENBQUUseUJBQXlCLENBQUM7SUFDakgsQ0FBQztJQUVNLG9CQUFvQixDQUFDLHVCQUErQjtRQUN6RCxRQUFRLHVCQUF1QixFQUFFO1lBQy9CLEtBQUssK0JBQStCLENBQUMsTUFBTTtnQkFDekMsT0FBTyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7WUFDdkMsS0FBSywrQkFBK0IsQ0FBQyxlQUFlO2dCQUNsRCxPQUFPLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztZQUN2QztnQkFDRSxPQUFPLFlBQVksQ0FBQyxZQUFZLENBQUM7U0FDcEM7SUFDSCxDQUFDOztzR0F4YVUsMkJBQTJCO2dFQUEzQiwyQkFBMkI7UUNsQnhDLDRFQVdNO1FBQ04sOEVBbUNNO1FBQ04sNEVBbUJNOztRQW5FQSxtREFBOEI7UUFZOUIsZUFBc0M7UUFBdEMsMkRBQXNDO1FBb0N0QyxlQUFxQztRQUFyQywwREFBcUM7O3VGRDlCOUIsMkJBQTJCO2NBTHZDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsMkJBQTJCO2dCQUNyQyxXQUFXLEVBQUUsd0NBQXdDO2dCQUNyRCxTQUFTLEVBQUUsQ0FBQyx3Q0FBd0MsQ0FBQzthQUN0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAncnB4LXh1aS10cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhc2VFZGl0RGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21tb25zL2Nhc2UtZWRpdC1kYXRhL2Nhc2UtZWRpdC1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkLCBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmxhZ1R5cGUgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vY2FzZS1mbGFnJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmllbGRzJztcbmltcG9ydCB7IENhc2VGbGFnU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2FzZS1lZGl0b3Ivc2VydmljZXMvY2FzZS1mbGFnLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWVsZFdyaXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1maWVsZC9hYnN0cmFjdC1maWVsZC13cml0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FzZUZsYWdTdGF0ZSwgRmxhZ0RldGFpbCwgRmxhZ0RldGFpbERpc3BsYXlXaXRoRm9ybUdyb3VwUGF0aCwgRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aCB9IGZyb20gJy4vZG9tYWluJztcbmltcG9ydCB7IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIsIENhc2VGbGFnRmllbGRTdGF0ZSwgQ2FzZUZsYWdGb3JtRmllbGRzLCBDYXNlRmxhZ1N0YXR1cywgQ2FzZUZsYWdUZXh0IH0gZnJvbSAnLi9lbnVtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC13cml0ZS1jYXNlLWZsYWctZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd3JpdGUtY2FzZS1mbGFnLWZpZWxkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgV3JpdGVDYXNlRmxhZ0ZpZWxkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGaWVsZFdyaXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBmaWVsZFN0YXRlOiBudW1iZXI7XG4gIHB1YmxpYyBjYXNlRmxhZ0ZpZWxkU3RhdGUgPSBDYXNlRmxhZ0ZpZWxkU3RhdGU7XG4gIHB1YmxpYyBlcnJvck1lc3NhZ2VzOiBFcnJvck1lc3NhZ2VbXSA9IFtdO1xuICBwdWJsaWMgY3JlYXRlRmxhZ0NhcHRpb246IENhc2VGbGFnVGV4dDtcbiAgcHVibGljIGZsYWdzRGF0YTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRGbGFnOiBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoO1xuICBwdWJsaWMgY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgcHVibGljIGZsYWdDb21tZW50c09wdGlvbmFsID0gZmFsc2U7XG4gIHB1YmxpYyBqdXJpc2RpY3Rpb246IHN0cmluZztcbiAgcHVibGljIGNhc2VUeXBlSWQ6IHN0cmluZztcbiAgcHVibGljIGhtY3RzU2VydmljZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlOiBib29sZWFuO1xuICBwdWJsaWMgaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsOiBib29sZWFuO1xuICBwdWJsaWMgY2FzZVRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBjYXNlVGl0bGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgLy8gQ29kZSBmb3IgXCJPdGhlclwiIGZsYWcgdHlwZSBhcyBkZWZpbmVkIGluIFJlZmVyZW5jZSBEYXRhXG4gIHByaXZhdGUgcmVhZG9ubHkgb3RoZXJGbGFnVHlwZUNvZGUgPSAnT1QwMDAxJztcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZE1hbmFnZUNhc2VMb2NhdGlvbiA9ICdzZWxlY3RlZE1hbmFnZUNhc2VMb2NhdGlvbic7XG4gIHB1YmxpYyByZWFkb25seSBjYXNlTmFtZU1pc3NpbmcgPSAnQ2FzZSBuYW1lIG1pc3NpbmcnO1xuXG4gIHB1YmxpYyBnZXQgZmxhZ1R5cGUoKTogRmxhZ1R5cGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cD8udmFsdWUuZmxhZ1R5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkRmxhZ3NMb2NhdGlvbigpOiBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlLnNlbGVjdGVkTG9jYXRpb247XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VFZGl0RGF0YVNlcnZpY2U6IENhc2VFZGl0RGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRmxhZ1N0YXRlU2VydmljZTogQ2FzZUZsYWdTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBycHhUcmFuc2xhdGlvblNlcnZpY2U6IFJweFRyYW5zbGF0aW9uU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIElmIGl0IGlzIHN0YXJ0IG9mIHRoZSBqb3VybmV5IG9yIG5hdmlnYXRpb24gZnJvbSBjaGVjayB5b3VyIGFuc3dlcnMgcGFnZSB0aGVuIGZpZWxkU3RhdGVUb05hdmlnYXRlIHByb3BlcnR5XG4gICAgLy8gaW4gY2FzZSBmbGFnIHN0YXRlIHNlcnZpY2Ugd2lsbCBjb250YWluIHRoZSBmaWVsZCBzdGF0ZSB0byBuYXZpZ2F0ZSBiYXNlZCBvbiBjcmVhdGUgb3IgbWFuYWdlIGpvdXJuZXlcbiAgICB0aGlzLmZpZWxkU3RhdGUgPSB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZpZWxkU3RhdGVUb05hdmlnYXRlO1xuICAgIGlmICh0aGlzLmZpZWxkU3RhdGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPT09IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OIHx8XG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1MpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zO1xuICAgICAgLy8gQ2xlYXIgdGhlIGZvcm0gZ3JvdXAsIGZpZWxkIHN0YXRlIHRvIG5hdmlnYXRlIGFuZCBzZXQgdGhlIHBhZ2UgbG9jYXRpb25cbiAgICAgIHRoaXMuY2FzZUZsYWdTdGF0ZVNlcnZpY2UucmVzZXRDYWNoZShgLi4vJHtwYXJhbXNbJ2VpZCddfS8ke3BhcmFtc1sncGFnZSddfWApO1xuICAgIH1cbiAgICAvLyBSZWFzc2lnbiB0aGUgZm9ybSBncm91cCBmcm9tIHRoZSBjYXNlIGZsYWcgc3RhdGUgc2VydmljZVxuICAgIHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAgPSB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZvcm1Hcm91cDtcbiAgICAvLyBDbGVhciBmb3JtIHZhbGlkYXRpb24gZXJyb3JzIGFzIGEgbmV3IHBhZ2Ugd2lsbCBiZSByZW5kZXJlZCBiYXNlZCBvbiBmaWVsZCBzdGF0ZVxuICAgIHRoaXMuY2FzZUVkaXREYXRhU2VydmljZS5jbGVhckZvcm1WYWxpZGF0aW9uRXJyb3JzKCk7XG4gICAgLy8gQ2hlY2sgZm9yIGV4aXN0aW5nIEZsYWdMYXVuY2hlciBjb250cm9sIGluIHBhcmVudCBhbmQgcmVtb3ZlIGl0IC0gdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZW5zdXJlIGl0cyBpbnZhbGlkaXR5XG4gICAgLy8gaXMgc2V0IGNvcnJlY3RseSBhdCB0aGUgc3RhcnQsIHdoZW4gdGhlIGNvbXBvbmVudCBpcyByZWxvYWRlZCBhbmQgdGhlIGNvbnRyb2wgaXMgcmUtcmVnaXN0ZXJlZC4gT3RoZXJ3aXNlLCB0aGVcbiAgICAvLyB2YWxpZGF0b3Igc3RhdGUgZ2V0cyBjYXJyaWVkIG92ZXJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuY2FzZUZpZWxkLmlkKSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucmVtb3ZlQ29udHJvbCh0aGlzLmNhc2VGaWVsZC5pZCk7XG4gICAgfVxuICAgIC8vIEZyb20gdGhpcyBwb2ludCwgdGhpcy5mb3JtR3JvdXAgcmVmZXJzIHRvIHRoZSBGb3JtR3JvdXAgZm9yIHRoZSBGbGFnTGF1bmNoZXIgZmllbGQsIG5vdCB0aGUgcGFyZW50IEZvcm1Hcm91cFxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5yZWdpc3RlckNvbnRyb2wobmV3IEZvcm1Hcm91cCh7fSwge1xuICAgICAgdmFsaWRhdG9yczogKF86IEFic3RyYWN0Q29udHJvbCk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB8IG51bGwgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWxsQ2FzZUZsYWdTdGFnZXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gYW4gZXJyb3IgdG8gbWFyayB0aGUgRm9ybUdyb3VwIGFzIGludmFsaWQgaWYgbm90IGFsbCBDYXNlIEZsYWcgc3RhZ2VzIGhhdmUgYmVlbiBjb21wbGV0ZWRcbiAgICAgICAgICByZXR1cm4ge25vdEFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkOiB0cnVlfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KSwgdHJ1ZSkgYXMgRm9ybUdyb3VwO1xuXG4gICAgLy8gR2V0IHRoZSBjYXNlIHR5cGUgSUQgZnJvbSB0aGUgQ2FzZVZpZXcgb2JqZWN0IGluIHRoZSBzbmFwc2hvdCBkYXRhIChyZXF1aXJlZCBmb3IgcmV0cmlldmluZyB0aGUgYXZhaWxhYmxlIGZsYWdcbiAgICAvLyB0eXBlcyBmb3IgYSBjYXNlKVxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZSAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuY2FzZS5jYXNlX3R5cGUpIHtcbiAgICAgIHRoaXMuY2FzZVR5cGVJZCA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLmNhc2VfdHlwZS5pZDtcbiAgICAgIC8vIEdldCB0aGUganVyaXNkaWN0aW9uIChyZXF1aXJlZCBmb3IgcmV0cmlldmluZyB0aGUgYXZhaWxhYmxlIGZsYWcgdHlwZXMgaWYgdW5hYmxlIHRvIGRldGVybWluZSB1c2luZyBjYXNlIHR5cGUgSUQpXG4gICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmNhc2UuY2FzZV90eXBlLmp1cmlzZGljdGlvbikge1xuICAgICAgICB0aGlzLmp1cmlzZGljdGlvbiA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5jYXNlLmNhc2VfdHlwZS5qdXJpc2RpY3Rpb24uaWQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEV4dHJhY3QgYWxsIGZsYWdzLXJlbGF0ZWQgZGF0YSBmcm9tIHRoZSBDYXNlRXZlbnRUcmlnZ2VyIG9iamVjdCBpbiB0aGUgc25hcHNob3QgZGF0YVxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyKSB7XG4gICAgICAvLyBHZXQgdGhlIEhNQ1RTU2VydmljZUlkIGZyb20gc3VwcGxlbWVudGFyeSBkYXRhLCBpZiBpdCBleGlzdHMgKHJlcXVpcmVkIGZvciByZXRyaWV2aW5nIHRoZSBhdmFpbGFibGUgZmxhZyB0eXBlcyBpblxuICAgICAgLy8gdGhlIGZpcnN0IGluc3RhbmNlLCBvbmx5IGZhbGxpbmcgYmFjayBvbiBjYXNlIHR5cGUgSUQgb3IganVyaXNpZGljdGlvbiBpZiBpdCdzIG5vdCBwcmVzZW50KVxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuc3VwcGxlbWVudGFyeV9kYXRhXG4gICAgICAgICYmIHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuc3VwcGxlbWVudGFyeV9kYXRhLkhNQ1RTU2VydmljZUlkKSB7XG4gICAgICAgIHRoaXMuaG1jdHNTZXJ2aWNlSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZXZlbnRUcmlnZ2VyLnN1cHBsZW1lbnRhcnlfZGF0YS5ITUNUU1NlcnZpY2VJZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpIHtcbiAgICAgICAgdGhpcy5mbGFnc0RhdGEgPSAoKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpIGFzIENhc2VGaWVsZFtdKVxuICAgICAgICAgIC5yZWR1Y2UoKGZsYWdzLCBjYXNlRmllbGQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBGaWVsZHNVdGlscy5leHRyYWN0RmxhZ3NEYXRhRnJvbUNhc2VGaWVsZChmbGFncywgY2FzZUZpZWxkLCBjYXNlRmllbGQuaWQsIGNhc2VGaWVsZCk7XG4gICAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIC8vIFNldCBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciAodG8gYmUgcGFzc2VkIGFzIGFuIGlucHV0IHRvIE1hbmFnZUNhc2VGbGFnc0NvbXBvbmVudCBmb3Igc2V0dGluZyBjb3JyZWN0IHRpdGxlKVxuICAgICAgICB0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID1cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMgYXMgQ2FzZUZpZWxkW10pO1xuXG4gICAgICAgIC8vIFNldCBib29sZWFuIGluZGljYXRpbmcgdGhlIGRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgaXMgXCJ1cGRhdGVcIlxuICAgICAgICB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgPSB0aGlzLnNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyVXBkYXRlKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgICAgIC8vIFNldCBib29sZWFuIGluZGljYXRpbmcgdGhlIGRpc3BsYXlfY29udGV4dF9wYXJhbWV0ZXIgaXMgXCJleHRlcm5hbFwiXG4gICAgICAgIHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsID0gdGhpcy5zZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsKHRoaXMuZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpO1xuXG4gICAgICAgIC8vIFNldCBzdGFydGluZyBmaWVsZCBzdGF0ZSBpZiBmaWVsZFN0YXRlIG5vdCB0aGUgcmlnaHQgdmFsdWVcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLmZpZWxkU3RhdGUgPSB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGUgPyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19NQU5BR0VfQ0FTRV9GTEFHUyA6IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0xPQ0FUSU9OO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IENyZWF0ZSBDYXNlIEZsYWcgY29tcG9uZW50IHRpdGxlIGNhcHRpb24gdGV4dCAoYXBwZWFyaW5nIGFib3ZlIGNoaWxkIGNvbXBvbmVudCA8aDE+IHRpdGxlKVxuICAgICAgICB0aGlzLmNyZWF0ZUZsYWdDYXB0aW9uID0gdGhpcy5zZXRDcmVhdGVGbGFnQ2FwdGlvbih0aGlzLmRpc3BsYXlDb250ZXh0UGFyYW1ldGVyKTtcblxuICAgICAgICAvLyBHZXQgY2FzZSB0aXRsZSwgdG8gYmUgdXNlZCBieSBjaGlsZCBjb21wb25lbnRzXG4gICAgICAgIHRoaXMuY2FzZVRpdGxlU3Vic2NyaXB0aW9uID0gdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLmNhc2VUaXRsZSQuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiB0aXRsZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhc2VUaXRsZSA9IHRpdGxlPy5sZW5ndGggPiAwID8gdGl0bGUgOiB0aGlzLmNhc2VOYW1lTWlzc2luZztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZShkaXNwbGF5Q29udGV4dFBhcmFtZXRlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURSB8fFxuICAgICAgZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIgPT09IENhc2VGbGFnRGlzcGxheUNvbnRleHRQYXJhbWV0ZXIuVVBEQVRFX0VYVEVSTkFMO1xuICB9XG5cbiAgcHVibGljIHNldERpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWwoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkaXNwbGF5Q29udGV4dFBhcmFtZXRlciA9PT0gQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5DUkVBVEVfRVhURVJOQUwgfHxcbiAgICAgIGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyID09PSBDYXNlRmxhZ0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyLlVQREFURV9FWFRFUk5BTDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKGNhc2VGbGFnU3RhdGU6IENhc2VGbGFnU3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VFZGl0RGF0YVNlcnZpY2UuY2xlYXJGb3JtVmFsaWRhdGlvbkVycm9ycygpO1xuXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gY2FzZUZsYWdTdGF0ZS5lcnJvck1lc3NhZ2VzO1xuICAgIHRoaXMuc2VsZWN0ZWRGbGFnID0gY2FzZUZsYWdTdGF0ZS5zZWxlY3RlZEZsYWc7XG5cbiAgICAvLyBWYWxpZGF0aW9uIHN1Y2NlZWRlZDsgcHJvY2VlZCB0byBuZXh0IHN0YXRlIG9yIGZpbmFsIHJldmlldyBzdGFnZSAoXCJDaGVjayB5b3VyIGFuc3dlcnNcIilcbiAgICBpZiAodGhpcy5lcnJvck1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRoaXMuY2FuTW92ZVRvRmluYWxSZXZpZXdTdGFnZShjYXNlRmxhZ1N0YXRlKSkge1xuICAgICAgICB0aGlzLm1vdmVUb0ZpbmFsUmV2aWV3U3RhZ2UoKTtcbiAgICAgICAgLy8gRG9uJ3QgbW92ZSB0byBuZXh0IHN0YXRlIGlmIGN1cnJlbnQgc3RhdGUgaXMgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSBhbmQgdGhlIGZsYWcgdHlwZSBpcyBhIHBhcmVudCAtIHRoaXNcbiAgICAgICAgLy8gbWVhbnMgdGhlIHVzZXIgbmVlZHMgdG8gc2VsZWN0IGZyb20gdGhlIG5leHQgc2V0IG9mIGZsYWcgdHlwZXMgYmVmb3JlIHRoZXkgY2FuIG1vdmUgb25cbiAgICAgIH0gZWxzZSBpZiAoIWNhc2VGbGFnU3RhdGUuaXNQYXJlbnRGbGFnVHlwZSkge1xuICAgICAgICAvLyBQcm9jZWVkIHRvIG5leHQgc3RhdGVcbiAgICAgICAgdGhpcy5wcm9jZWVkVG9OZXh0U3RhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2FuTW92ZVRvRmluYWxSZXZpZXdTdGFnZShjYXNlRmxhZ1N0YXRlOiBDYXNlRmxhZ1N0YXRlKTogYm9vbGVhbiB7XG4gICAgLy8gSWYgdGhlIGpvdXJuZXkgaXMgcmVxdWVzdCBzdXBwb3J0IG9yIG1hbmFnZSBzdXBwb3J0XG4gICAgLy8gYW5kIHRoZSBjdXJyZW50IHN0YXRlIGlzIGVpdGhlciBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyBvciBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVcbiAgICAvLyB0aGVuIG1vdmUgdG8gZmluYWwgcmV2aWV3IHN0YWdlXG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsKSB7XG4gICAgICByZXR1cm4gY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUyB8fFxuICAgICAgICAgIGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFO1xuICAgIH1cbiAgICAvLyBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBvbmUgb2Y6XG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19TVEFUVVNcbiAgICAvLyAqIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1VQREFURSBhbmQgV2Vsc2ggdHJhbnNsYXRpb24gY2hlY2tib3ggaXMgbm90IHNlbGVjdGVkXG4gICAgLy8gKiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVfV0VMU0hfVFJBTlNMQVRJT05cbiAgICAvLyB0aGVuIG1vdmUgdG8gZmluYWwgcmV2aWV3IHN0YWdlXG4gICAgcmV0dXJuIGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTIHx8XG4gICAgICAoY2FzZUZsYWdTdGF0ZS5jdXJyZW50Q2FzZUZsYWdGaWVsZFN0YXRlID09PSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEUgJiZcbiAgICAgICAgIXRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5JU19XRUxTSF9UUkFOU0xBVElPTl9ORUVERUQpPy52YWx1ZSkgfHxcbiAgICAgIGNhc2VGbGFnU3RhdGUuY3VycmVudENhc2VGbGFnRmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OO1xuICB9XG5cbiAgcHVibGljIHByb2NlZWRUb05leHRTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNBdEZpbmFsU3RhdGUoKSkge1xuICAgICAgLy8gU2tpcCB0aGUgXCJsYW5ndWFnZSBpbnRlcnByZXRlclwiIHN0YXRlIGlmIGN1cnJlbnQgc3RhdGUgaXMgQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSBhbmQgdGhlIGZsYWcgdHlwZSBkb2Vzbid0XG4gICAgICAvLyBoYXZlIGEgXCJsaXN0IG9mIHZhbHVlc1wiIC0gY3VycmVudGx5LCB0aGlzIGlzIHByZXNlbnQgb25seSBmb3IgdGhvc2UgZmxhZyB0eXBlcyB0aGF0IHJlcXVpcmUgbGFuZ3VhZ2UgaW50ZXJwcmV0ZXJcbiAgICAgIC8vIHNlbGVjdGlvblxuICAgICAgaWYgKHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVFlQRSAmJiAhdGhpcy5mbGFnVHlwZT8ubGlzdE9mVmFsdWVzKSB7XG4gICAgICAgIHRoaXMuZmllbGRTdGF0ZSA9IENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX0NPTU1FTlRTO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maWVsZFN0YXRlKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEZsYWdzQ2FzZUZpZWxkVmFsdWUoKTogdm9pZCB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzd2l0Y2gtZGVmYXVsdFxuICAgIHN3aXRjaCAodGhpcy5maWVsZFN0YXRlKSB7XG4gICAgICBjYXNlIENhc2VGbGFnRmllbGRTdGF0ZS5GTEFHX1NUQVRVUzpcbiAgICAgICAgdGhpcy5hZGRGbGFnVG9Db2xsZWN0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19DT01NRU5UUzpcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsKSB7XG4gICAgICAgICAgdGhpcy5hZGRGbGFnVG9Db2xsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMubWFuYWdlRmxhZ0ZpbmFsU3RhdGU6XG4gICAgICAgIHRoaXMudXBkYXRlRmxhZ0luQ29sbGVjdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkRmxhZ1RvQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgbm8gbW9yZSB0aGFuIG9uZSBuZXcgZmxhZyBpcyBiZWluZyBhZGRlZCBhdCBhIHRpbWUsIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGVhY2ggRmxhZ3MgY2FzZSBmaWVsZCBhbmQgcmVtb3ZpbmdcbiAgICAvLyBhbnkgcHJldmlvdXMgZW50cnkgZnJvbSB0aGUgZGV0YWlscyBhcnJheSB3aGVyZSB0aGF0IGVudHJ5IGhhcyBubyBpZCAoaGVuY2UgaXQgaXMgbmV3IC0gYW5kIHRoZXJlIHNob3VsZCBiZSBvbmx5XG4gICAgLy8gb25lIHN1Y2ggZW50cnkpLiAoVGhpcyBzY2VuYXJpbyBvY2N1cnMgaWYgdGhlIHVzZXIgcmVwZWF0cyB0aGUgQ2FzZSBGbGFnIGNyZWF0aW9uIGpvdXJuZXkgYnkgdXNpbmcgdGhlIFwiQ2hhbmdlXCJcbiAgICAvLyBsaW5rIGFuZCBzZWxlY3RzIGVpdGhlciB0aGUgc2FtZSBmbGFnIGxvY2F0aW9uIGFzIGJlZm9yZSBvciBhIGRpZmZlcmVudCBvbmUuKVxuICAgIHRoaXMuZmxhZ3NEYXRhLmZvckVhY2goaW5zdGFuY2UgPT4ge1xuICAgICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmb3IgZWFjaCBGbGFncyBjYXNlIGZpZWxkIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byByZW1vdmUgdGhlIG5ldyB2YWx1ZSBmcm9tXG4gICAgICBsZXQgdmFsdWUgPSBpbnN0YW5jZS5jYXNlRmllbGQudmFsdWU7XG4gICAgICBjb25zdCBwYXRoVG9WYWx1ZSA9IGluc3RhbmNlLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgICAgLy8gUm9vdC1sZXZlbCBGbGFncyBDYXNlRmllbGRzIGRvbid0IGhhdmUgYSBkb3QtZGVsaW1pdGVkIHBhdGggLSBqdXN0IHRoZSBDYXNlRmllbGQgSUQgaXRzZWxmIC0gc28gZG9uJ3QgZHJpbGwgZG93blxuICAgICAgaWYgKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGhUb1ZhbHVlLnNsaWNlKHBhdGhUb1ZhbHVlLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IHZhbHVlID0gdmFsdWVbcGFydF0pO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmRldGFpbHMgJiYgdmFsdWUuZGV0YWlscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZOZXdGbGFnRGV0YWlsID0gdmFsdWUuZGV0YWlscy5maW5kSW5kZXgoZWxlbWVudCA9PiAhZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnaWQnKSk7XG4gICAgICAgIGlmIChpbmRleE9mTmV3RmxhZ0RldGFpbCA+IC0xKSB7XG4gICAgICAgICAgdmFsdWUuZGV0YWlscy5zcGxpY2UoaW5kZXhPZk5ld0ZsYWdEZXRhaWwsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXRoID0gdGhpcy5zZWxlY3RlZEZsYWdzTG9jYXRpb24ucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgY29uc3QgZmxhZ0RhdGFSZWYgPSB0aGlzLmZsYWdzRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5wYXRoVG9GbGFnc0Zvcm1Hcm91cCA9PT0gcGF0aCk7XG4gICAgbGV0IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnRGF0YVJlZi5jYXNlRmllbGQudmFsdWU7XG4gICAgLy8gVXNlIHRoZSBwYXRoVG9GbGFnc0Zvcm1Hcm91cCBwcm9wZXJ0eSBmcm9tIHRoZSBzZWxlY3RlZCBmbGFnIGxvY2F0aW9uIHRvIGRyaWxsIGRvd24gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGVcbiAgICAvLyBDYXNlRmllbGQgdmFsdWUgdG8gYXBwbHkgY2hhbmdlcyB0b1xuICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICBpZiAocGF0aC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICB9XG4gICAgLy8gSWYgdGhlIENhc2VGaWVsZCBmb3IgdGhlIHNlbGVjdGVkIGZsYWdzIGxvY2F0aW9uIGhhcyBubyB2YWx1ZSwgc2V0IGl0IHRvIGFuIGVtcHR5IG9iamVjdCBzbyBpdCBjYW4gYmUgcG9wdWxhdGVkXG4gICAgLy8gd2l0aCBmbGFnIGRldGFpbHNcbiAgICBpZiAoIWZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgIGZsYWdEYXRhUmVmLmNhc2VGaWVsZC52YWx1ZSA9IHt9O1xuICAgICAgZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IGZsYWdEYXRhUmVmLmNhc2VGaWVsZC52YWx1ZTtcbiAgICB9XG4gICAgLy8gQ3JlYXRlIGEgZGV0YWlscyBhcnJheSBpZiBvbmUgZG9lcyBub3QgZXhpc3RcbiAgICBpZiAoIWZsYWdzQ2FzZUZpZWxkVmFsdWUuaGFzT3duUHJvcGVydHkoJ2RldGFpbHMnKSkge1xuICAgICAgZmxhZ3NDYXNlRmllbGRWYWx1ZS5kZXRhaWxzID0gW107XG4gICAgfVxuICAgIC8vIFBvcHVsYXRlIG5ldyBGbGFnRGV0YWlsIGluc3RhbmNlIGFuZCBhZGQgdG8gdGhlIEZsYWdzIGRhdGEgd2l0aGluIHRoZSBDYXNlRmllbGQgaW5zdGFuY2Ugb2YgdGhlIHNlbGVjdGVkIGZsYWdcbiAgICAvLyBsb2NhdGlvblxuICAgIGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscy5wdXNoKHt2YWx1ZTogdGhpcy5wb3B1bGF0ZU5ld0ZsYWdEZXRhaWxJbnN0YW5jZSgpfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRmxhZ0luQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgbm8gbW9yZSB0aGFuIG9uZSBmbGFnIGlzIGJlaW5nIHVwZGF0ZWQgYXQgYSB0aW1lLCBieSBpdGVyYXRpbmcgdGhyb3VnaCBlYWNoIEZsYWdzIGNhc2UgZmllbGQgYW5kIHJlc2V0dGluZ1xuICAgIC8vIHRoZSBkZXNjcmlwdGlvbiwgY29tbWVudHMsIHN0YXR1cywgYW5kIGRhdGUvdGltZSBtb2RpZmllZCAoaWYgcHJlc2VudCkgZm9yIGVhY2ggZW50cnkgaW4gdGhlIGRldGFpbHMgYXJyYXksIHdpdGhcbiAgICAvLyBvcmlnaW5hbCB2YWx1ZXMgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBmb3JtYXR0ZWRfdmFsdWUgcHJvcGVydHkuIChUaGlzIHNjZW5hcmlvIG9jY3VycyBpZiB0aGUgdXNlciByZXBlYXRzIHRoZVxuICAgIC8vIE1hbmFnZSBDYXNlIEZsYWcgam91cm5leSBieSB1c2luZyB0aGUgXCJDaGFuZ2VcIiBsaW5rIGFuZCBzZWxlY3RzIGEgZGlmZmVyZW50IGZsYWcgdG8gdXBkYXRlLilcbiAgICB0aGlzLmZsYWdzRGF0YS5mb3JFYWNoKGluc3RhbmNlID0+IHtcbiAgICAgIC8vIFVzZSB0aGUgcGF0aFRvRmxhZ3NGb3JtR3JvdXAgcHJvcGVydHkgZm9yIGVhY2ggRmxhZ3MgY2FzZSBmaWVsZCB0byBkcmlsbCBkb3duIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlXG4gICAgICAvLyBDYXNlRmllbGQgdmFsdWUgZm9yIHdoaWNoIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlc1xuICAgICAgbGV0IHZhbHVlID0gaW5zdGFuY2UuY2FzZUZpZWxkLnZhbHVlO1xuICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlID0gaW5zdGFuY2UuY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZTtcbiAgICAgIGNvbnN0IHBhdGhUb1ZhbHVlID0gaW5zdGFuY2UucGF0aFRvRmxhZ3NGb3JtR3JvdXA7XG4gICAgICAvLyBSb290LWxldmVsIEZsYWdzIENhc2VGaWVsZHMgZG9uJ3QgaGF2ZSBhIGRvdC1kZWxpbWl0ZWQgcGF0aCAtIGp1c3QgdGhlIENhc2VGaWVsZCBJRCBpdHNlbGYgLSBzbyBkb24ndCBkcmlsbCBkb3duXG4gICAgICBpZiAocGF0aFRvVmFsdWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aFRvVmFsdWUuc2xpY2UocGF0aFRvVmFsdWUuaW5kZXhPZignLicpICsgMSkuc3BsaXQoJy4nKS5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVbcGFydF07XG4gICAgICAgICAgaWYgKGZvcm1hdHRlZFZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QoZm9ybWF0dGVkVmFsdWUpKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlW3BhcnRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWU/LmRldGFpbHM/Lmxlbmd0aCA+IDAgJiYgZm9ybWF0dGVkVmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZGV0YWlscy5mb3JFYWNoKGZsYWdEZXRhaWwgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRmxhZ0RldGFpbCA9IGZvcm1hdHRlZFZhbHVlLmRldGFpbHMuZmluZChkZXRhaWwgPT4gZGV0YWlsLmlkID09PSBmbGFnRGV0YWlsLmlkKTtcbiAgICAgICAgICBpZiAob3JpZ2luYWxGbGFnRGV0YWlsKSB7XG4gICAgICAgICAgICBmbGFnRGV0YWlsLnZhbHVlLm90aGVyRGVzY3JpcHRpb24gPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWUub3RoZXJEZXNjcmlwdGlvbiB8fCBudWxsO1xuICAgICAgICAgICAgZmxhZ0RldGFpbC52YWx1ZS5vdGhlckRlc2NyaXB0aW9uX2N5ID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlLm90aGVyRGVzY3JpcHRpb25fY3kgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnQgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnRfY3kgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWUuZmxhZ0NvbW1lbnRfY3kgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZmxhZ1VwZGF0ZUNvbW1lbnQgPSBvcmlnaW5hbEZsYWdEZXRhaWwudmFsdWUuZmxhZ1VwZGF0ZUNvbW1lbnQgfHwgbnVsbDtcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuc3RhdHVzID0gb3JpZ2luYWxGbGFnRGV0YWlsLnZhbHVlLnN0YXR1cztcbiAgICAgICAgICAgIGZsYWdEZXRhaWwudmFsdWUuZGF0ZVRpbWVNb2RpZmllZCA9IG9yaWdpbmFsRmxhZ0RldGFpbC52YWx1ZS5kYXRlVGltZU1vZGlmaWVkIHx8IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGbGFnKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmxhZyA9IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLnNlbGVjdGVkTWFuYWdlQ2FzZUxvY2F0aW9uKS52YWx1ZSBhcyBGbGFnRGV0YWlsRGlzcGxheVdpdGhGb3JtR3JvdXBQYXRoO1xuICAgIH1cbiAgICBsZXQgZmxhZ3NDYXNlRmllbGRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRGbGFnLmNhc2VGaWVsZC52YWx1ZTtcbiAgICAvLyBVc2UgdGhlIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIHByb3BlcnR5IGZyb20gdGhlIHNlbGVjdGVkIGZsYWcgbG9jYXRpb24gdG8gZHJpbGwgZG93biB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZVxuICAgIC8vIENhc2VGaWVsZCB2YWx1ZSB0byBhcHBseSBjaGFuZ2VzIHRvXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuc2VsZWN0ZWRGbGFnLnBhdGhUb0ZsYWdzRm9ybUdyb3VwO1xuICAgIC8vIFJvb3QtbGV2ZWwgRmxhZ3MgQ2FzZUZpZWxkcyBkb24ndCBoYXZlIGEgZG90LWRlbGltaXRlZCBwYXRoIC0ganVzdCB0aGUgQ2FzZUZpZWxkIElEIGl0c2VsZiAtIHNvIGRvbid0IGRyaWxsIGRvd25cbiAgICBpZiAocGF0aC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgcGF0aC5zbGljZShwYXRoLmluZGV4T2YoJy4nKSArIDEpLnNwbGl0KCcuJykuZm9yRWFjaChwYXJ0ID0+IGZsYWdzQ2FzZUZpZWxkVmFsdWUgPSBmbGFnc0Nhc2VGaWVsZFZhbHVlW3BhcnRdKTtcbiAgICB9XG4gICAgaWYgKGZsYWdzQ2FzZUZpZWxkVmFsdWUpIHtcbiAgICAgIGNvbnN0IGZsYWdEZXRhaWxUb1VwZGF0ZSA9IGZsYWdzQ2FzZUZpZWxkVmFsdWUuZGV0YWlscy5maW5kKFxuICAgICAgICBkZXRhaWwgPT4gZGV0YWlsLmlkID09PSB0aGlzLnNlbGVjdGVkRmxhZy5mbGFnRGV0YWlsRGlzcGxheS5mbGFnRGV0YWlsLmlkKTtcbiAgICAgIGlmIChmbGFnRGV0YWlsVG9VcGRhdGUpIHtcbiAgICAgICAgLy8gVXBkYXRlIGRlc2NyaXB0aW9uIGZpZWxkcyBvbmx5IGlmIGZsYWcgdHlwZSBpcyBcIk90aGVyXCIgKGZsYWcgY29kZSBPVDAwMDEpOyB0aGVzZSBmaWVsZHMgYXBwbHkgb25seSB0byB0aGF0IGZsYWcgdHlwZVxuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUub3RoZXJEZXNjcmlwdGlvbiA9IGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZVxuICAgICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLk9USEVSX0ZMQUdfREVTQ1JJUFRJT04pPy52YWx1ZVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLm90aGVyRGVzY3JpcHRpb25fY3kgPSBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuZmxhZ0NvZGUgPT09IHRoaXMub3RoZXJGbGFnVHlwZUNvZGVcbiAgICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5PVEhFUl9GTEFHX0RFU0NSSVBUSU9OX1dFTFNIKT8udmFsdWVcbiAgICAgICAgICA6IG51bGwsXG4gICAgICAgIC8vIEVuc3VyZSB0aGF0IGFueSBjb21tZW50cyBlbnRlcmVkIHdpdGggbGFuZ3VhZ2Ugc2V0IHRvIFdlbHNoIGRvIG5vdCBlbmQgdXAgaW4gdGhlIEVuZ2xpc2ggY29tbWVudHMgZmllbGRcbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmZsYWdDb21tZW50ID0gdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgIT09ICdjeSdcbiAgICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UUyk/LnZhbHVlXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICAvLyBQb3B1bGF0ZSBmcm9tIHRoZSAqRW5nbGlzaCogY29tbWVudHMgZmllbGQgaWY6XG4gICAgICAgIC8vICogVGhlIFdlbHNoIGNvbW1lbnRzIGZpZWxkIGhhcyBubyB2YWx1ZSAoV2Vsc2ggY29tbWVudHMgZmllbGQgYWNxdWlyZXMgYSB2YWx1ZSBvbmx5IHdoZW4gYW4gSE1DVFMgaW50ZXJuYWwgdXNlciBoYXNcbiAgICAgICAgLy8gZ29uZSB0aHJvdWdoIHRoZSBcImFkZCB0cmFuc2xhdGlvblwiIHN0ZXAgZm9yIE1hbmFnZSBDYXNlIEZsYWdzKSwgQU5EXG4gICAgICAgIC8vICogVGhlIGxhbmd1YWdlIGlzIHNldCB0byBXZWxzaFxuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuZmxhZ0NvbW1lbnRfY3kgPSB0aGlzLmNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwLmdldChDYXNlRmxhZ0Zvcm1GaWVsZHMuQ09NTUVOVFNfV0VMU0gpPy52YWx1ZVxuICAgICAgICAgID8gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLkNPTU1FTlRTX1dFTFNIKT8udmFsdWVcbiAgICAgICAgICA6IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgICAgICA/IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5DT01NRU5UUyk/LnZhbHVlXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGZsYWdEZXRhaWxUb1VwZGF0ZS52YWx1ZS5mbGFnVXBkYXRlQ29tbWVudCA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXAuZ2V0KENhc2VGbGFnRm9ybUZpZWxkcy5TVEFUVVNfQ0hBTkdFX1JFQVNPTik/LnZhbHVlO1xuICAgICAgICBmbGFnRGV0YWlsVG9VcGRhdGUudmFsdWUuc3RhdHVzID0gQ2FzZUZsYWdTdGF0dXNbdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLlNUQVRVUyk/LnZhbHVlXTtcbiAgICAgICAgZmxhZ0RldGFpbFRvVXBkYXRlLnZhbHVlLmRhdGVUaW1lTW9kaWZpZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQXRGaW5hbFN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGVcbiAgICAgID8gdGhpcy5maWVsZFN0YXRlID09PSB0aGlzLm1hbmFnZUZsYWdGaW5hbFN0YXRlXG4gICAgICA6IHRoaXMuZmllbGRTdGF0ZSA9PT0gQ2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfU1RBVFVTO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZWxlbWVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZWxlbWVudElkKSB7XG4gICAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG4gICAgICBpZiAoaHRtbEVsZW1lbnQpIHtcbiAgICAgICAgaHRtbEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgaHRtbEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25GbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZWQoXzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mbGFnQ29tbWVudHNPcHRpb25hbCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgcG9wdWxhdGVOZXdGbGFnRGV0YWlsSW5zdGFuY2UoKTogRmxhZ0RldGFpbCB7XG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXA/LnZhbHVlO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBmb3JtVmFsdWVzPy5mbGFnVHlwZT8ubmFtZSxcbiAgICAgIG5hbWVfY3k6IGZvcm1WYWx1ZXM/LmZsYWdUeXBlPy5uYW1lX2N5LFxuICAgICAgLy8gQ3VycmVudGx5LCBzdWJUeXBlVmFsdWUsIHN1YlR5cGVWYWx1ZV9jeSBhbmQgc3ViVHlwZUtleSBhcmUgYXBwbGljYWJsZSBvbmx5IHRvIGxhbmd1YWdlIGZsYWcgdHlwZXNcbiAgICAgIHN1YlR5cGVWYWx1ZTogZm9ybVZhbHVlcz8ubGFuZ3VhZ2VTZWFyY2hUZXJtICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnZW4nXG4gICAgICAgID8gZm9ybVZhbHVlcz8ubGFuZ3VhZ2VTZWFyY2hUZXJtLnZhbHVlXG4gICAgICAgIDogZm9ybVZhbHVlcz8ubWFudWFsTGFuZ3VhZ2VFbnRyeSAmJiB0aGlzLnJweFRyYW5zbGF0aW9uU2VydmljZS5sYW5ndWFnZSA9PT0gJ2VuJ1xuICAgICAgICAgID8gZm9ybVZhbHVlcz8ubWFudWFsTGFuZ3VhZ2VFbnRyeVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHN1YlR5cGVWYWx1ZV9jeTogZm9ybVZhbHVlcz8ubGFuZ3VhZ2VTZWFyY2hUZXJtICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICA/IGZvcm1WYWx1ZXM/Lmxhbmd1YWdlU2VhcmNoVGVybS52YWx1ZV9jeVxuICAgICAgOiBmb3JtVmFsdWVzPy5tYW51YWxMYW5ndWFnZUVudHJ5ICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgID8gZm9ybVZhbHVlcz8ubWFudWFsTGFuZ3VhZ2VFbnRyeVxuICAgICAgICA6IG51bGwsXG4gICAgICAvLyBGb3IgdXNlci1lbnRlcmVkIChpLmUuIG5vbi1SZWZlcmVuY2UgRGF0YSkgbGFuZ3VhZ2VzLCB0aGVyZSBpcyBubyBrZXlcbiAgICAgIHN1YlR5cGVLZXk6IGZvcm1WYWx1ZXM/Lmxhbmd1YWdlU2VhcmNoVGVybVxuICAgICAgICA/IGZvcm1WYWx1ZXM/Lmxhbmd1YWdlU2VhcmNoVGVybS5rZXlcbiAgICAgICAgOiBudWxsLFxuICAgICAgb3RoZXJEZXNjcmlwdGlvbjogZm9ybVZhbHVlcz8uZmxhZ1R5cGU/LmZsYWdDb2RlID09PSB0aGlzLm90aGVyRmxhZ1R5cGVDb2RlICYmXG4gICAgICAgIGZvcm1WYWx1ZXM/Lm90aGVyRGVzY3JpcHRpb24gJiYgdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdlbidcbiAgICAgICAgPyBmb3JtVmFsdWVzPy5vdGhlckRlc2NyaXB0aW9uXG4gICAgICAgIDogbnVsbCxcbiAgICAgIG90aGVyRGVzY3JpcHRpb25fY3k6IGZvcm1WYWx1ZXM/LmZsYWdUeXBlPy5mbGFnQ29kZSA9PT0gdGhpcy5vdGhlckZsYWdUeXBlQ29kZSAmJlxuICAgICAgICBmb3JtVmFsdWVzPy5vdGhlckRlc2NyaXB0aW9uICYmIHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgID8gZm9ybVZhbHVlcz8ub3RoZXJEZXNjcmlwdGlvblxuICAgICAgICA6IG51bGwsXG4gICAgICBmbGFnQ29tbWVudDogdGhpcy5ycHhUcmFuc2xhdGlvblNlcnZpY2UubGFuZ3VhZ2UgPT09ICdlbidcbiAgICAgICAgPyBmb3JtVmFsdWVzPy5mbGFnQ29tbWVudHNcbiAgICAgICAgOiBudWxsLFxuICAgICAgZmxhZ0NvbW1lbnRfY3k6IHRoaXMucnB4VHJhbnNsYXRpb25TZXJ2aWNlLmxhbmd1YWdlID09PSAnY3knXG4gICAgICAgID8gZm9ybVZhbHVlcz8uZmxhZ0NvbW1lbnRzXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZsYWdVcGRhdGVDb21tZW50OiBmb3JtVmFsdWVzPy5zdGF0dXNSZWFzb24sXG4gICAgICBkYXRlVGltZUNyZWF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHBhdGg6IGZvcm1WYWx1ZXM/LmZsYWdUeXBlPy5QYXRoICYmXG4gICAgICAgIGZvcm1WYWx1ZXM/LmZsYWdUeXBlPy5QYXRoLm1hcChwYXRoVmFsdWUgPT4gT2JqZWN0LmFzc2lnbih7IGlkOiBudWxsLCB2YWx1ZTogcGF0aFZhbHVlIH0pKSxcbiAgICAgIGhlYXJpbmdSZWxldmFudDogZm9ybVZhbHVlcz8uZmxhZ1R5cGU/LmhlYXJpbmdSZWxldmFudCA/ICdZZXMnIDogJ05vJyxcbiAgICAgIGZsYWdDb2RlOiBmb3JtVmFsdWVzPy5mbGFnVHlwZT8uZmxhZ0NvZGUsXG4gICAgICAvLyBTdGF0dXMgc2hvdWxkIGJlIHNldCB0byB3aGF0ZXZlciB0aGUgZGVmYXVsdCBpcyBmb3IgdGhpcyBmbGFnIHR5cGUsIGlmIGZsYWcgaXMgYmVpbmcgY3JlYXRlZCBieSBhbiBleHRlcm5hbCB1c2VyXG4gICAgICBzdGF0dXM6IHRoaXMuaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsID8gZm9ybVZhbHVlcz8uZmxhZ1R5cGU/LmRlZmF1bHRTdGF0dXMgOiBDYXNlRmxhZ1N0YXR1c1tmb3JtVmFsdWVzPy5zZWxlY3RlZFN0YXR1c10sXG4gICAgICBhdmFpbGFibGVFeHRlcm5hbGx5OiBmb3JtVmFsdWVzPy5mbGFnVHlwZT8uZXh0ZXJuYWxseUF2YWlsYWJsZSA/ICdZZXMnIDogJ05vJ1xuICAgIH0gYXMgRmxhZ0RldGFpbDtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlVG9GaW5hbFJldmlld1N0YWdlKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RmxhZ3NDYXNlRmllbGRWYWx1ZSgpO1xuICAgIC8vIENsZWFyIHRoZSBcIm5vdEFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkXCIgZXJyb3JcbiAgICB0aGlzLmFsbENhc2VGbGFnU3RhZ2VzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy5jYXNlRWRpdERhdGFTZXJ2aWNlLnNldFRyaWdnZXJTdWJtaXRFdmVudCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBSZXNldCB0aGUgZmllbGRzdGF0ZVRvTmF2aWdhdGUgYXMgdGhlIHdyaXRlIGpvdXJuZXkgY29tcGxldGVzIGF0IHRoaXMgcG9pbnRcbiAgICB0aGlzLmNhc2VGbGFnU3RhdGVTZXJ2aWNlLmZpZWxkU3RhdGVUb05hdmlnYXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2FzZVRpdGxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtYW5hZ2VGbGFnRmluYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYXNlRmxhZ1BhcmVudEZvcm1Hcm91cC5nZXQoQ2FzZUZsYWdGb3JtRmllbGRzLklTX1dFTFNIX1RSQU5TTEFUSU9OX05FRURFRCk/LnZhbHVlXG4gICAgPyBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEVfV0VMU0hfVFJBTlNMQVRJT04gOiBDYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19VUERBVEU7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzcGxheUNvbnRleHRQYXJhbWV0ZXIoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBjYXNlRmllbGRzLmZpbmQoY2FzZUZpZWxkID0+IEZpZWxkc1V0aWxzLmlzRmxhZ0xhdW5jaGVyQ2FzZUZpZWxkKGNhc2VGaWVsZCkpPy5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyO1xuICB9XG5cbiAgcHVibGljIHNldENyZWF0ZUZsYWdDYXB0aW9uKGRpc3BsYXlDb250ZXh0UGFyYW1ldGVyOiBzdHJpbmcpOiBDYXNlRmxhZ1RleHQge1xuICAgIHN3aXRjaCAoZGlzcGxheUNvbnRleHRQYXJhbWV0ZXIpIHtcbiAgICAgIGNhc2UgQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5DUkVBVEU6XG4gICAgICAgIHJldHVybiBDYXNlRmxhZ1RleHQuQ0FQVElPTl9JTlRFUk5BTDtcbiAgICAgIGNhc2UgQ2FzZUZsYWdEaXNwbGF5Q29udGV4dFBhcmFtZXRlci5DUkVBVEVfRVhURVJOQUw6XG4gICAgICAgIHJldHVybiBDYXNlRmxhZ1RleHQuQ0FQVElPTl9FWFRFUk5BTDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBDYXNlRmxhZ1RleHQuQ0FQVElPTl9OT05FO1xuICAgIH1cbiAgfVxufVxuIiwiPCEtLSBFcnJvciBtZXNzYWdlIHN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiIHJvbGU9XCJhbGVydFwiIHRhYmluZGV4PVwiLTFcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWVycm9yLXN1bW1hcnlcIj5cbiAgPGgyIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGVcIiBpZD1cImVycm9yLXN1bW1hcnktdGl0bGVcIj5cbiAgICB7eydUaGVyZSBpcyBhIHByb2JsZW0nIHwgcnB4VHJhbnNsYXRlfX1cbiAgPC9oMj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGVycm9yTWVzc2FnZXNcIiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICA8dWwgY2xhc3M9XCJnb3Z1ay1saXN0IGdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3RcIj5cbiAgICAgIDxsaT5cbiAgICAgICAgPGEgKGNsaWNrKT1cIm5hdmlnYXRlVG9FcnJvckVsZW1lbnQoZXJyb3JNZXNzYWdlLmZpZWxkSWQpXCIgY2xhc3M9XCJ2YWxpZGF0aW9uLWVycm9yXCI+e3tlcnJvck1lc3NhZ2UuZGVzY3JpcHRpb24gfCBycHhUcmFuc2xhdGV9fTwvYT5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlclVwZGF0ZVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgW25nU3dpdGNoXT1cImZpZWxkU3RhdGVcIj5cbiAgICA8ZGl2IGlkPVwiY3JlYXRlLWZsYWctY2FwdGlvblwiIGNsYXNzPVwiZ292dWstY2FwdGlvbi1sXCIgW25nQ2xhc3NdPVwieydmb3JtLWdyb3VwLWVycm9yJzogZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwfVwiPlxuICAgICAge3tjcmVhdGVGbGFnQ2FwdGlvbiB8IHJweFRyYW5zbGF0ZX19XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTE9DQVRJT05cIj5cbiAgICAgIDxjY2Qtc2VsZWN0LWZsYWctbG9jYXRpb25cbiAgICAgICAgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtmbGFnc0RhdGFdPVwiZmxhZ3NEYXRhXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXCJcbiAgICAgID48L2NjZC1zZWxlY3QtZmxhZy1sb2NhdGlvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19UWVBFXCI+XG4gICAgICA8Y2NkLXNlbGVjdC1mbGFnLXR5cGUgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtqdXJpc2RpY3Rpb25dPVwianVyaXNkaWN0aW9uXCIgW2Nhc2VUeXBlSWRdPVwiY2FzZVR5cGVJZFwiXG4gICAgICAgIFtobWN0c1NlcnZpY2VJZF09XCJobWN0c1NlcnZpY2VJZFwiIFtpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxdPVwiaXNEaXNwbGF5Q29udGV4dFBhcmFtZXRlckV4dGVybmFsXCJcbiAgICAgICAgKGNhc2VGbGFnU3RhdGVFbWl0dGVyKT1cIm9uQ2FzZUZsYWdTdGF0ZUVtaXR0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZXIpPVwib25GbGFnQ29tbWVudHNPcHRpb25hbEVtaXR0ZWQoJGV2ZW50KVwiPjwvY2NkLXNlbGVjdC1mbGFnLXR5cGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTEFOR1VBR0VfSU5URVJQUkVURVJcIj5cbiAgICAgIDxjY2Qtc2VhcmNoLWxhbmd1YWdlLWludGVycHJldGVyIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICBbZmxhZ1R5cGVdPVwiZmxhZ1R5cGVcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+XG4gICAgICA8L2NjZC1zZWFyY2gtbGFuZ3VhZ2UtaW50ZXJwcmV0ZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfQ09NTUVOVFNcIj5cbiAgICAgIDxjY2QtYWRkLWNvbW1lbnRzIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIiBbb3B0aW9uYWxdPVwiZmxhZ0NvbW1lbnRzT3B0aW9uYWxcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCJcbiAgICAgICAgW2lzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJFeHRlcm5hbF09XCJpc0Rpc3BsYXlDb250ZXh0UGFyYW1ldGVyRXh0ZXJuYWxcIlxuICAgICAgPjwvY2NkLWFkZC1jb21tZW50cz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjYXNlRmxhZ0ZpZWxkU3RhdGUuRkxBR19TVEFUVVNcIj5cbiAgICAgIDxjY2QtY29uZmlybS1mbGFnLXN0YXR1cyBbZm9ybUdyb3VwXT1cImNhc2VGbGFnUGFyZW50Rm9ybUdyb3VwXCIgW2RlZmF1bHRTdGF0dXNdPVwiZmxhZ1R5cGUuZGVmYXVsdFN0YXR1c1wiXG4gICAgICAgIChjYXNlRmxhZ1N0YXRlRW1pdHRlcik9XCJvbkNhc2VGbGFnU3RhdGVFbWl0dGVkKCRldmVudClcIj48L2NjZC1jb25maXJtLWZsYWctc3RhdHVzPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImlzRGlzcGxheUNvbnRleHRQYXJhbWV0ZXJVcGRhdGVcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiIFtuZ1N3aXRjaF09XCJmaWVsZFN0YXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfTUFOQUdFX0NBU0VfRkxBR1NcIj5cbiAgICAgIDxjY2QtbWFuYWdlLWNhc2UtZmxhZ3MgW2Zvcm1Hcm91cF09XCJjYXNlRmxhZ1BhcmVudEZvcm1Hcm91cFwiIFtmbGFnc0RhdGFdPVwiZmxhZ3NEYXRhXCIgW2Nhc2VUaXRsZV09XCJjYXNlVGl0bGVcIlxuICAgICAgICBbZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJdPVwiZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+PC9jY2QtbWFuYWdlLWNhc2UtZmxhZ3M+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFXCI+XG4gICAgICA8Y2NkLXVwZGF0ZS1mbGFnIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICBbZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJdPVwiZGlzcGxheUNvbnRleHRQYXJhbWV0ZXJcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCI+PC9jY2QtdXBkYXRlLWZsYWc+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY2FzZUZsYWdGaWVsZFN0YXRlLkZMQUdfVVBEQVRFX1dFTFNIX1RSQU5TTEFUSU9OXCI+XG4gICAgICA8Y2NkLXVwZGF0ZS1mbGFnLWFkZC10cmFuc2xhdGlvbi1mb3JtXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY2FzZUZsYWdQYXJlbnRGb3JtR3JvdXBcIlxuICAgICAgICAoY2FzZUZsYWdTdGF0ZUVtaXR0ZXIpPVwib25DYXNlRmxhZ1N0YXRlRW1pdHRlZCgkZXZlbnQpXCJcbiAgICAgID48L2NjZC11cGRhdGUtZmxhZy1hZGQtdHJhbnNsYXRpb24tZm9ybT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|