@sumaris-net/ngx-components 18.4.5-alpha1 → 18.5.0-alpha2
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/esm2022/src/app/admin/admin-routing.module.mjs +4 -4
- package/esm2022/src/app/admin/admin.module.mjs +4 -4
- package/esm2022/src/app/admin/services/person.service.mjs +3 -3
- package/esm2022/src/app/admin/services/validator/person.validator.mjs +3 -3
- package/esm2022/src/app/admin/users/users.mjs +3 -3
- package/esm2022/src/app/admin/users/users.module.mjs +4 -4
- package/esm2022/src/app/core/about/about.modal.mjs +3 -3
- package/esm2022/src/app/core/about/about.module.mjs +4 -4
- package/esm2022/src/app/core/account/account.module.mjs +4 -4
- package/esm2022/src/app/core/account/account.page.mjs +3 -3
- package/esm2022/src/app/core/account/new-token.form.mjs +3 -3
- package/esm2022/src/app/core/account/new-token.modal.mjs +3 -3
- package/esm2022/src/app/core/account/password/change-password.form.mjs +3 -3
- package/esm2022/src/app/core/account/password/change-password.module.mjs +4 -4
- package/esm2022/src/app/core/account/password/change-password.page.mjs +3 -3
- package/esm2022/src/app/core/account/token.table.mjs +3 -3
- package/esm2022/src/app/core/auth/auth.form.mjs +3 -3
- package/esm2022/src/app/core/auth/auth.modal.mjs +3 -3
- package/esm2022/src/app/core/auth/auth.module.mjs +4 -4
- package/esm2022/src/app/core/auth/reset-password.modal.mjs +3 -3
- package/esm2022/src/app/core/core.module.mjs +4 -4
- package/esm2022/src/app/core/core.testing.module.mjs +4 -4
- package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +4 -4
- package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +3 -3
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +3 -3
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +4 -4
- package/esm2022/src/app/core/form/entity/editor.class.mjs +3 -3
- package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +3 -3
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +3 -3
- package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +3 -3
- package/esm2022/src/app/core/form/entity/entity.module.mjs +4 -4
- package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +3 -3
- package/esm2022/src/app/core/form/form-container.class.mjs +3 -3
- package/esm2022/src/app/core/form/form.class.mjs +3 -3
- package/esm2022/src/app/core/form/form.module.mjs +4 -4
- package/esm2022/src/app/core/form/list/list.form.mjs +3 -3
- package/esm2022/src/app/core/form/list/list.module.mjs +4 -4
- package/esm2022/src/app/core/form/properties/properties.form.mjs +3 -3
- package/esm2022/src/app/core/form/properties/properties.module.mjs +4 -4
- package/esm2022/src/app/core/form/properties/properties.table.mjs +6 -6
- package/esm2022/src/app/core/form/properties/property.validator.mjs +3 -3
- package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +3 -3
- package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +4 -4
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +3 -3
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +4 -4
- package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +3 -3
- package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +4 -4
- package/esm2022/src/app/core/form/username/username.form.mjs +3 -3
- package/esm2022/src/app/core/form/username/username.module.mjs +4 -4
- package/esm2022/src/app/core/graphql/graphql.module.mjs +4 -4
- package/esm2022/src/app/core/graphql/graphql.service.mjs +8 -7
- package/esm2022/src/app/core/home/home.mjs +3 -3
- package/esm2022/src/app/core/home/home.module.mjs +4 -4
- package/esm2022/src/app/core/icon/icon.component.mjs +3 -3
- package/esm2022/src/app/core/icon/icon.module.mjs +4 -4
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +3 -3
- package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +4 -4
- package/esm2022/src/app/core/menu/menu.component.mjs +3 -3
- package/esm2022/src/app/core/menu/menu.module.mjs +4 -4
- package/esm2022/src/app/core/menu/menu.service.mjs +3 -3
- package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +3 -3
- package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +3 -3
- package/esm2022/src/app/core/menu/testing/menu.testing.mjs +3 -3
- package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +4 -4
- package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +3 -3
- package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +4 -4
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +3 -3
- package/esm2022/src/app/core/peer/select-peer.module.mjs +4 -4
- package/esm2022/src/app/core/register/register-confirm.page.mjs +3 -3
- package/esm2022/src/app/core/register/register.form.mjs +3 -3
- package/esm2022/src/app/core/register/register.modal.mjs +3 -3
- package/esm2022/src/app/core/register/register.module.mjs +4 -4
- package/esm2022/src/app/core/services/account.service.mjs +3 -3
- package/esm2022/src/app/core/services/auth-guard.service.mjs +3 -3
- package/esm2022/src/app/core/services/base-entity-service.class.mjs +5 -5
- package/esm2022/src/app/core/services/base-graphql-service.class.mjs +3 -3
- package/esm2022/src/app/core/services/config.service.mjs +3 -3
- package/esm2022/src/app/core/services/crypto.service.mjs +3 -3
- package/esm2022/src/app/core/services/local-settings.service.mjs +3 -3
- package/esm2022/src/app/core/services/network.service.mjs +30 -34
- package/esm2022/src/app/core/services/network.types.mjs +2 -20
- package/esm2022/src/app/core/services/network.utils.mjs +21 -1
- package/esm2022/src/app/core/services/pipes/account.pipes.mjs +8 -8
- package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +4 -4
- package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +4 -4
- package/esm2022/src/app/core/services/pipes/pipes.module.mjs +4 -4
- package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +3 -3
- package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +8 -8
- package/esm2022/src/app/core/services/platform.service.mjs +3 -3
- package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +3 -3
- package/esm2022/src/app/core/services/testing/referential.validator.mjs +3 -3
- package/esm2022/src/app/core/services/validator/account.validator.mjs +3 -3
- package/esm2022/src/app/core/services/validator/base.validator.class.mjs +3 -3
- package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +3 -3
- package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +3 -3
- package/esm2022/src/app/core/services/validator/user-token.validator.mjs +3 -3
- package/esm2022/src/app/core/settings/settings.module.mjs +4 -4
- package/esm2022/src/app/core/settings/settings.page.mjs +3 -3
- package/esm2022/src/app/core/table/async-table.class.mjs +3 -3
- package/esm2022/src/app/core/table/column/actions-column.component.mjs +3 -3
- package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +3 -3
- package/esm2022/src/app/core/table/column/row-field.component.mjs +3 -3
- package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +3 -3
- package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +3 -3
- package/esm2022/src/app/core/table/memory-table.class.mjs +3 -3
- package/esm2022/src/app/core/table/table-select-columns.component.mjs +3 -3
- package/esm2022/src/app/core/table/table.class.mjs +3 -3
- package/esm2022/src/app/core/table/table.module.mjs +4 -4
- package/esm2022/src/app/core/table/table.pipes.mjs +9 -9
- package/esm2022/src/app/core/table/testing/table-validator.service.mjs +3 -3
- package/esm2022/src/app/core/table/testing/table.testing.mjs +3 -3
- package/esm2022/src/app/core/table/testing/table.testing.module.mjs +4 -4
- package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +3 -3
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +3 -3
- package/esm2022/src/app/shared/audio/audio.mjs +3 -3
- package/esm2022/src/app/shared/audio/audio.testing.mjs +3 -3
- package/esm2022/src/app/shared/audio/audio.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/capacitor/keyboard.mjs +3 -3
- package/esm2022/src/app/shared/debug/debug.component.mjs +3 -3
- package/esm2022/src/app/shared/debug/debug.module.mjs +4 -4
- package/esm2022/src/app/shared/directives/autofocus.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/autotitle.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/directives.module.mjs +4 -4
- package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/ng-var.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +3 -3
- package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
- package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +3 -3
- package/esm2022/src/app/shared/file/file.service.mjs +3 -3
- package/esm2022/src/app/shared/form/field.component.mjs +3 -3
- package/esm2022/src/app/shared/form/loading-spinner.mjs +3 -3
- package/esm2022/src/app/shared/gesture/gesture-config.mjs +3 -3
- package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +3 -3
- package/esm2022/src/app/shared/help/help.modal.mjs +3 -3
- package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +3 -3
- package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +3 -3
- package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +4 -4
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +3 -3
- package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +4 -4
- package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +3 -3
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +3 -3
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/image/image.module.mjs +4 -4
- package/esm2022/src/app/shared/image/image.service.mjs +3 -3
- package/esm2022/src/app/shared/logging/logging-service.class.mjs +3 -3
- package/esm2022/src/app/shared/logging/logging-service.module.mjs +4 -4
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +3 -3
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +4 -4
- package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +3 -3
- package/esm2022/src/app/shared/material/badge/badge.directive.mjs +3 -3
- package/esm2022/src/app/shared/material/badge/badge.module.mjs +4 -4
- package/esm2022/src/app/shared/material/badge/badge.test.mjs +3 -3
- package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +4 -4
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +3 -3
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +3 -3
- package/esm2022/src/app/shared/material/chips/chips.module.mjs +4 -4
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +3 -3
- package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +4 -4
- package/esm2022/src/app/shared/material/datetime/material.date.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +3 -3
- package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +3 -3
- package/esm2022/src/app/shared/material/duration/duration.module.mjs +4 -4
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +3 -3
- package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +3 -3
- package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +3 -3
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +3 -3
- package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +4 -4
- package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +3 -3
- package/esm2022/src/app/shared/material/material.module.mjs +4 -4
- package/esm2022/src/app/shared/material/material.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +3 -3
- package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +3 -3
- package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +3 -3
- package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +4 -4
- package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +3 -3
- package/esm2022/src/app/shared/material/test/test-component.mjs +6 -6
- package/esm2022/src/app/shared/material/testing/common.test.mjs +3 -3
- package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +3 -3
- package/esm2022/src/app/shared/material/text/text-form.component.mjs +3 -3
- package/esm2022/src/app/shared/material/text/text-form.module.mjs +4 -4
- package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +3 -3
- package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +4 -4
- package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +3 -3
- package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +3 -3
- package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +27 -27
- package/esm2022/src/app/shared/pipes/badge.pipes.mjs +3 -3
- package/esm2022/src/app/shared/pipes/colors.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +6 -6
- package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/dates.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/duration.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/form.pipes.mjs +21 -21
- package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/html.pipes.mjs +6 -6
- package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +9 -9
- package/esm2022/src/app/shared/pipes/maps.pipe.mjs +12 -12
- package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/math.pipes.mjs +12 -12
- package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +4 -4
- package/esm2022/src/app/shared/pipes/property.pipes.mjs +14 -14
- package/esm2022/src/app/shared/pipes/selection.pipes.mjs +21 -21
- package/esm2022/src/app/shared/pipes/string.pipes.mjs +30 -30
- package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +8 -8
- package/esm2022/src/app/shared/pipes/types.pipes.mjs +15 -15
- package/esm2022/src/app/shared/rx-state/rx-state.module.mjs +4 -4
- package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +3 -3
- package/esm2022/src/app/shared/services/progress-bar.service.mjs +3 -3
- package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +3 -3
- package/esm2022/src/app/shared/services/startable-service.class.mjs +3 -3
- package/esm2022/src/app/shared/services/translate-context.service.mjs +3 -3
- package/esm2022/src/app/shared/shared-routing.module.mjs +7 -7
- package/esm2022/src/app/shared/shared.module.mjs +4 -4
- package/esm2022/src/app/shared/shared.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +3 -3
- package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage.service.mjs +3 -3
- package/esm2022/src/app/shared/testing/maskito.test.mjs +3 -3
- package/esm2022/src/app/shared/testing/observable.test.mjs +3 -3
- package/esm2022/src/app/shared/testing/tests.page.mjs +3 -3
- package/esm2022/src/app/shared/toast/toast.testing.mjs +3 -3
- package/esm2022/src/app/shared/toast/toast.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +3 -3
- package/esm2022/src/app/shared/toolbar/toolbar.mjs +3 -3
- package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +4 -4
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +3 -3
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +3 -3
- package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +3 -3
- package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +3 -3
- package/esm2022/src/app/social/job/job.module.mjs +4 -4
- package/esm2022/src/app/social/job/progression/job-progression.component.mjs +3 -3
- package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +3 -3
- package/esm2022/src/app/social/job/progression/job-progression.list.mjs +3 -3
- package/esm2022/src/app/social/job/progression/job-progression.service.mjs +3 -3
- package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +3 -3
- package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +3 -3
- package/esm2022/src/app/social/job/testing/job.testing.module.mjs +4 -4
- package/esm2022/src/app/social/message/message.form.mjs +3 -3
- package/esm2022/src/app/social/message/message.modal.mjs +3 -3
- package/esm2022/src/app/social/message/message.module.mjs +4 -4
- package/esm2022/src/app/social/message/message.service.mjs +3 -3
- package/esm2022/src/app/social/social.module.mjs +4 -4
- package/esm2022/src/app/social/social.testing.module.mjs +4 -4
- package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +3 -3
- package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +3 -3
- package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +3 -3
- package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +4 -4
- package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +3 -3
- package/esm2022/src/app/social/user-event/user-event.module.mjs +4 -4
- package/esm2022/src/app/social/user-event/user-event.service.mjs +3 -3
- package/esm2022/src/environments/environment.loader.mjs +3 -3
- package/esm2022/src/environments/environment.mjs +2 -2
- package/fesm2022/sumaris-net.ngx-components.mjs +1085 -1091
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +20 -21
- package/src/app/core/graphql/graphql.service.d.ts +7 -6
- package/src/app/core/services/network.service.d.ts +6 -6
- package/src/app/core/services/network.types.d.ts +1 -3
- package/src/app/core/services/network.utils.d.ts +5 -0
|
@@ -7,22 +7,22 @@ import { SplashScreen } from '@capacitor/splash-screen';
|
|
|
7
7
|
import { equals, isNotEmptyArray, isNotNilOrBlank, sleep, toBoolean } from '../../shared/functions';
|
|
8
8
|
import { DOCUMENT } from '@angular/common';
|
|
9
9
|
import { Toasts } from '../../shared/toast/toasts';
|
|
10
|
-
import {
|
|
10
|
+
import { distinctUntilChanged, filter, first, map, mergeMap, takeUntil, tap } from 'rxjs/operators';
|
|
11
|
+
import { NetworkUtils } from './network.utils';
|
|
11
12
|
import { HttpUtils } from '../../shared/http/http.utils';
|
|
12
13
|
import { VersionUtils } from '../../shared/version/versions';
|
|
13
14
|
import { ENVIRONMENT } from '../../../environments/environment.class';
|
|
14
15
|
import { StartableObservableService } from '../../shared/services/startable-observable-service.class';
|
|
15
|
-
import { getConnectionType } from './network.types';
|
|
16
16
|
import { APP_LOGGING_SERVICE } from '../../shared/logging/logging-service.class';
|
|
17
|
+
import { Capacitor } from '@capacitor/core';
|
|
17
18
|
import * as i0 from "@angular/core";
|
|
18
19
|
import * as i1 from "@ionic/angular";
|
|
19
20
|
import * as i2 from "@ionic/storage-angular";
|
|
20
21
|
import * as i3 from "./local-settings.service";
|
|
21
22
|
import * as i4 from "ionic-cache";
|
|
22
23
|
import * as i5 from "@angular/common/http";
|
|
23
|
-
import * as i6 from "@
|
|
24
|
-
import * as i7 from "
|
|
25
|
-
import * as i8 from "../../../environments/environment.class";
|
|
24
|
+
import * as i6 from "@ngx-translate/core";
|
|
25
|
+
import * as i7 from "../../../environments/environment.class";
|
|
26
26
|
const NetworkRefreshTimerPeriod = {
|
|
27
27
|
MOBILE: 1000 * 60 * 10 /* every 10 min */,
|
|
28
28
|
DESKTOP: 1000 * 60 * 5 /* every 5 min */,
|
|
@@ -34,6 +34,7 @@ NetworkRefreshTimerPeriod.MOBILE = 1000;
|
|
|
34
34
|
NetworkRefreshTimerPeriod.DESKTOP = 1000; */
|
|
35
35
|
export class NetworkService extends StartableObservableService {
|
|
36
36
|
_document;
|
|
37
|
+
platform;
|
|
37
38
|
modalCtrl;
|
|
38
39
|
storage;
|
|
39
40
|
settings;
|
|
@@ -48,7 +49,6 @@ export class NetworkService extends StartableObservableService {
|
|
|
48
49
|
onResetNetworkCache = new EventEmitter(true);
|
|
49
50
|
_mobile;
|
|
50
51
|
_logger;
|
|
51
|
-
_network;
|
|
52
52
|
_timerSubscription;
|
|
53
53
|
_timerRefreshPeriod;
|
|
54
54
|
_timerRefreshCondition;
|
|
@@ -80,9 +80,10 @@ export class NetworkService extends StartableObservableService {
|
|
|
80
80
|
get connectionTimeout() {
|
|
81
81
|
return this._connectionTimeout;
|
|
82
82
|
}
|
|
83
|
-
constructor(_document, platform, modalCtrl, storage, settings, cache, http, environment, loggingService,
|
|
83
|
+
constructor(_document, platform, modalCtrl, storage, settings, cache, http, environment, loggingService, translate, toastController) {
|
|
84
84
|
super(platform);
|
|
85
85
|
this._document = _document;
|
|
86
|
+
this.platform = platform;
|
|
86
87
|
this.modalCtrl = modalCtrl;
|
|
87
88
|
this.storage = storage;
|
|
88
89
|
this.settings = settings;
|
|
@@ -103,10 +104,6 @@ export class NetworkService extends StartableObservableService {
|
|
|
103
104
|
this._timerRefreshPeriod = NetworkRefreshTimerPeriod.DESKTOP;
|
|
104
105
|
this._timerRefreshCondition = () => true; // Always check
|
|
105
106
|
}
|
|
106
|
-
// Save network instance only when cordova is running
|
|
107
|
-
if (platform.is('cordova')) {
|
|
108
|
-
this._network = network;
|
|
109
|
-
}
|
|
110
107
|
this.startSubject.subscribe((peer) => this.ngOnAfterStart(peer));
|
|
111
108
|
// For DEV only
|
|
112
109
|
this._debug = !environment.production;
|
|
@@ -132,8 +129,8 @@ export class NetworkService extends StartableObservableService {
|
|
|
132
129
|
}
|
|
133
130
|
}
|
|
134
131
|
async tryOnline(opts) {
|
|
135
|
-
// If offline mode not forced,
|
|
136
|
-
if (!this._forceOffline ||
|
|
132
|
+
// If offline mode not forced, or if device says there is no connection: skip
|
|
133
|
+
if (!this._forceOffline || (await NetworkUtils.getConnectionType()) === 'none')
|
|
137
134
|
return false;
|
|
138
135
|
// SHow loading toast
|
|
139
136
|
const now = Date.now();
|
|
@@ -329,7 +326,7 @@ export class NetworkService extends StartableObservableService {
|
|
|
329
326
|
let peerUrl = peer instanceof Peer ? peer.url : peer;
|
|
330
327
|
// Remove trailing slash
|
|
331
328
|
if (peerUrl.endsWith('/')) {
|
|
332
|
-
peerUrl = peerUrl.
|
|
329
|
+
peerUrl = peerUrl.substring(0, peerUrl.length - 1);
|
|
333
330
|
}
|
|
334
331
|
// Add first path
|
|
335
332
|
if (!path.startsWith('/')) {
|
|
@@ -394,6 +391,8 @@ export class NetworkService extends StartableObservableService {
|
|
|
394
391
|
/* -- protected functions -- */
|
|
395
392
|
async ngOnStart(peer) {
|
|
396
393
|
console.info('[network] Starting network...');
|
|
394
|
+
// Check if can use Network plugin
|
|
395
|
+
console.debug(`[network] Capacitor Network plugin is ${Capacitor.isPluginAvailable('Network') ? 'available' : 'not available'}`);
|
|
397
396
|
// Restoring local settings
|
|
398
397
|
peer = peer || (await this.restoreLocally());
|
|
399
398
|
if (!peer) {
|
|
@@ -426,17 +425,17 @@ export class NetworkService extends StartableObservableService {
|
|
|
426
425
|
async ngOnAfterStart(peer) {
|
|
427
426
|
// Wait settings starts, then save peer in settings
|
|
428
427
|
await this.settings.apply({ peerUrl: peer.url });
|
|
429
|
-
this.onDeviceConnectionChanged(this._network?.type || 'unknown');
|
|
430
|
-
// Start the refresh timer
|
|
431
|
-
this.startRefreshTimer();
|
|
432
428
|
// Listen for device network changes
|
|
433
|
-
if (
|
|
434
|
-
|
|
435
|
-
this.
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
429
|
+
if (NetworkUtils.isPluginAvailable()) {
|
|
430
|
+
const connectionType = await NetworkUtils.getConnectionType();
|
|
431
|
+
this.onDeviceConnectionChanged(connectionType);
|
|
432
|
+
this.registerSubscription(NetworkUtils.statusChanges().subscribe((status) => this.onDeviceConnectionChanged(status?.connectionType || 'unknown')));
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
this.onDeviceConnectionChanged('unknown');
|
|
439
436
|
}
|
|
437
|
+
// Start the refresh timer
|
|
438
|
+
this.startRefreshTimer();
|
|
440
439
|
}
|
|
441
440
|
ngOnStop() {
|
|
442
441
|
// Stop timer, if cannot refresh anymore
|
|
@@ -533,7 +532,7 @@ export class NetworkService extends StartableObservableService {
|
|
|
533
532
|
let peerUrl = this.peer && this.peer.url;
|
|
534
533
|
// Remove trailing slash
|
|
535
534
|
if (peerUrl.endsWith('/')) {
|
|
536
|
-
peerUrl = peerUrl.
|
|
535
|
+
peerUrl = peerUrl.substring(0, peerUrl.length - 1);
|
|
537
536
|
}
|
|
538
537
|
// Add first path
|
|
539
538
|
if (!path.startsWith('/')) {
|
|
@@ -545,10 +544,9 @@ export class NetworkService extends StartableObservableService {
|
|
|
545
544
|
return uri;
|
|
546
545
|
}
|
|
547
546
|
onDeviceConnectionChanged(connectionType) {
|
|
548
|
-
connectionType = getConnectionType(connectionType);
|
|
549
547
|
if (connectionType !== this._deviceConnectionType) {
|
|
550
548
|
this._deviceConnectionType = connectionType;
|
|
551
|
-
// If NOT
|
|
549
|
+
// If NOT already forced as offline, emit event
|
|
552
550
|
if (!this._forceOffline) {
|
|
553
551
|
console.info(`[network] Connection changed to {${this._deviceConnectionType}}`);
|
|
554
552
|
this.onNetworkStatusChanges.next(this._deviceConnectionType);
|
|
@@ -603,16 +601,16 @@ export class NetworkService extends StartableObservableService {
|
|
|
603
601
|
}));
|
|
604
602
|
}
|
|
605
603
|
}
|
|
606
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
607
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.
|
|
604
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NetworkService, deps: [{ token: DOCUMENT }, { token: i1.Platform }, { token: i1.ModalController }, { token: i2.Storage }, { token: i3.LocalSettingsService }, { token: i4.CacheService }, { token: i5.HttpClient }, { token: ENVIRONMENT }, { token: APP_LOGGING_SERVICE, optional: true }, { token: i6.TranslateService, optional: true }, { token: i1.ToastController, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
605
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NetworkService, providedIn: 'root' });
|
|
608
606
|
}
|
|
609
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
607
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NetworkService, decorators: [{
|
|
610
608
|
type: Injectable,
|
|
611
609
|
args: [{ providedIn: 'root' }]
|
|
612
610
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
613
611
|
type: Inject,
|
|
614
612
|
args: [DOCUMENT]
|
|
615
|
-
}] }, { type: i1.Platform }, { type: i1.ModalController }, { type: i2.Storage }, { type: i3.LocalSettingsService }, { type: i4.CacheService }, { type: i5.HttpClient }, { type:
|
|
613
|
+
}] }, { type: i1.Platform }, { type: i1.ModalController }, { type: i2.Storage }, { type: i3.LocalSettingsService }, { type: i4.CacheService }, { type: i5.HttpClient }, { type: i7.Environment, decorators: [{
|
|
616
614
|
type: Inject,
|
|
617
615
|
args: [ENVIRONMENT]
|
|
618
616
|
}] }, { type: undefined, decorators: [{
|
|
@@ -620,11 +618,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
|
620
618
|
}, {
|
|
621
619
|
type: Inject,
|
|
622
620
|
args: [APP_LOGGING_SERVICE]
|
|
623
|
-
}] }, { type: i6.
|
|
624
|
-
type: Optional
|
|
625
|
-
}] }, { type: i7.TranslateService, decorators: [{
|
|
621
|
+
}] }, { type: i6.TranslateService, decorators: [{
|
|
626
622
|
type: Optional
|
|
627
623
|
}] }, { type: i1.ToastController, decorators: [{
|
|
628
624
|
type: Optional
|
|
629
625
|
}] }] });
|
|
630
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQTJCLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUUsT0FBTyxFQUF3QixvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQW9CLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUs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QUFDO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLElBQUksb0JBQW9CLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQyxDQUFDO1lBRS9GLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FDaEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNyQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxPQUFPO29CQUFFLE9BQU87Z0JBQ3JCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7d0dBbnNCVSxjQUFjLGtCQXNEZixRQUFRLHFMQU9SLFdBQVcsYUFDQyxtQkFBbUI7NEdBOUQ5QixjQUFjLGNBREQsTUFBTTs7NEZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkF1RDdCLE1BQU07MkJBQUMsUUFBUTs7MEJBT2YsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUN0QyxRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5pbXBvcnQgeyBQZWVyIH0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3MgfSBmcm9tICcuL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciwgUGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IElTZWxlY3RQZWVyTW9kYWxPcHRpb25zLCBTZWxlY3RQZWVyTW9kYWwgfSBmcm9tICcuLi9wZWVyL3NlbGVjdC1wZWVyLm1vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlLCBTRVRUSU5HU19TVE9SQUdFX0tFWSB9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBTcGxhc2hTY3JlZW4gfSBmcm9tICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBlcXVhbHMsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWxPckJsYW5rLCBzbGVlcCwgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL25ldHdvcmsvbmd4JztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gJ2lvbmljLWNhY2hlJztcbmltcG9ydCB7IFNob3dUb2FzdE9wdGlvbnMsIFRvYXN0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgbWFwLCBtZXJnZU1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPdmVybGF5RXZlbnREZXRhaWwgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBBcHBNYW5pZmVzdCwgTm9kZUluZm8gfSBmcm9tICcuL25ldHdvcmsudXRpbHMnO1xuaW1wb3J0IHsgSHR0cFV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2h0dHAvaHR0cC51dGlscyc7XG5pbXBvcnQgeyBWZXJzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdmVyc2lvbi92ZXJzaW9ucyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBDb25uZWN0aW9uVHlwZSwgZ2V0Q29ubmVjdGlvblR5cGUsIE5ldHdvcmtFdmVudFR5cGUgfSBmcm9tICcuL25ldHdvcmsudHlwZXMnO1xuaW1wb3J0IHsgQVBQX0xPR0dJTkdfU0VSVklDRSB9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dpbmctc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBJTG9nZ2VyLCBJTG9nZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnZXIubW9kZWwnO1xuXG5jb25zdCBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kID0ge1xuICBNT0JJTEU6IDEwMDAgKiA2MCAqIDEwIC8qIGV2ZXJ5IDEwIG1pbiAqLyxcbiAgREVTS1RPUDogMTAwMCAqIDYwICogNSAvKiBldmVyeSA1IG1pbiAqLyxcbn07XG5cbmV4cG9ydCBjb25zdCBQRUVSX1VSTF9SRUdFWFAgPSAvXihodHRwfGh0dHBzKTpcXC9cXC9bXiBcIj8jQF0rJC87XG5cbmV4cG9ydCBjb25zdCBORVRXT1JLX0RFRkFVTFRfQ09OTkVDVElPTl9USU1FT1VUID0gMTAwMDA7IC8vIDEwcyAtIC8hXFwgc2hvdWxkIGJlIGhpZ2ggKGUuZy4gZm9yIHBvb3IgY29ubmVjdGlvbilcblxuLyogLS0gREVWIG9ubHkgKHRvIGRlYnVnIHJlZnJlc2ggdGltZXIpXG5OZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRSA9ICAxMDAwO1xuTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QID0gIDEwMDA7ICovXG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmV0d29ya1NlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZTxQZWVyLCBQZWVyPiB7XG4gIG9uUGVlckNoYW5nZXMgPSB0aGlzLnN0YXJ0U3ViamVjdC5waXBlKFxuICAgIG1hcCgocGVlcikgPT4gcGVlcj8udXJsKSxcbiAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxzdHJpbmc+KClcbiAgKTtcbiAgb25OZXR3b3JrU3RhdHVzQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29ubmVjdGlvblR5cGU+KG51bGwpO1xuICBvblJlc2V0TmV0d29ya0NhY2hlID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29yazogTmV0d29yaztcbiAgcHJpdmF0ZSBfdGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZXJSZWZyZXNoUGVyaW9kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVyUmVmcmVzaENvbmRpdGlvbjogKCkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGV2aWNlQ29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25UeXBlO1xuICBwcml2YXRlIF9mb3JjZU9mZmxpbmU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Nvbm5lY3Rpb25UaW1lb3V0OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiB7XG4gICAgW2tleTogc3RyaW5nXTogKChkYXRhPzogYW55KSA9PiBQcm9taXNlPHZvaWQ+KVtdO1xuICB9ID0ge307XG5cbiAgZ2V0IG9ubGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uVHlwZSAhPT0gJ25vbmUnO1xuICB9XG5cbiAgZ2V0IG9mZmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblR5cGUgPT09ICdub25lJztcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uVHlwZSgpOiBDb25uZWN0aW9uVHlwZSB7XG4gICAgLy8gSWYgZm9yY2Ugb2ZmbGluZTogcmV0dXJuICdub25lJ1xuICAgIHJldHVybiB0aGlzLl9mb3JjZU9mZmxpbmVcbiAgICAgID8gJ25vbmUnXG4gICAgICA6IC8vIEVsc2UsIHJldHVybiBkZXZpY2UgY29ubmVjdGlvbiB0eXBlIChvciB1bmtub3duKVxuICAgICAgICAodGhpcy5zdGFydGVkICYmIHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKSB8fCAndW5rbm93bic7XG4gIH1cblxuICBnZXQgcGVlcigpOiBQZWVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC52YWx1ZT8uY2xvbmUoKTtcbiAgfVxuXG4gIHNldCBwZWVyKHBlZXI6IFBlZXIpIHtcbiAgICBpZiAoIVBlZXIuZXF1YWxzKHRoaXMucGVlciwgcGVlcikpIHtcbiAgICAgIHRoaXMucmVzdGFydChwZWVyKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblRpbWVvdXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9HR0lOR19TRVJWSUNFKSBwcml2YXRlIGxvZ2dpbmdTZXJ2aWNlOiBJTG9nZ2luZ1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgbmV0d29yazogTmV0d29yayxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLl9tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcbiAgICB0aGlzLl9jb25uZWN0aW9uVGltZW91dCA9IGVudmlyb25tZW50LmNvbm5lY3Rpb25UaW1lb3V0IHx8IE5FVFdPUktfREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQ7XG4gICAgdGhpcy5fbG9nZ2VyID0gdGhpcy5sb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCduZXR3b3JrJyk7XG5cbiAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRTtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbiA9ICgpID0+IHRoaXMub25saW5lOyAvLyBDaGVjayBvbmx5IHdoZW4gb25saW5lLCBhbmQgc3RvcCB3aGVuIG9mZmxpbmVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QO1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uID0gKCkgPT4gdHJ1ZTsgLy8gQWx3YXlzIGNoZWNrXG4gICAgfVxuXG4gICAgLy8gU2F2ZSBuZXR3b3JrIGluc3RhbmNlIG9ubHkgd2hlbiBjb3Jkb3ZhIGlzIHJ1bm5pbmdcbiAgICBpZiAocGxhdGZvcm0uaXMoJ2NvcmRvdmEnKSkge1xuICAgICAgdGhpcy5fbmV0d29yayA9IG5ldHdvcms7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKChwZWVyKSA9PiB0aGlzLm5nT25BZnRlclN0YXJ0KHBlZXIpKTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdG8gbmV0d29yayBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRUeXBlXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgb248VCA9IGFueT4oZXZlbnRUeXBlOiBOZXR3b3JrRXZlbnRUeXBlLCBjYWxsYmFjazogKGRhdGE/OiBUKSA9PiBQcm9taXNlPGFueT4pOiBTdWJzY3JpcHRpb24ge1xuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0U3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3BlZXJDaGFuZ2VkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25QZWVyQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3N0YXR1c0NoYW5nZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgodHlwZSkgPT4gY2FsbGJhY2sodHlwZSBhcyB1bmtub3duIGFzIFQpKTtcblxuICAgICAgY2FzZSAncmVzZXRDYWNoZSc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uUmVzZXROZXR3b3JrQ2FjaGUuc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcihldmVudFR5cGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB0cnlPbmxpbmUob3B0cz86IHtcbiAgICBzaG93T2ZmbGluZVRvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93T25saW5lVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dMb2FkaW5nVG9hc3Q/OiBib29sZWFuO1xuICAgIGFmdGVyUmV0cnlEZWxheT86IG51bWJlcjtcbiAgICBhZnRlclJldHJ5UHJvbWlzZT86ICgpID0+IFByb21pc2U8YW55PjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIElmIG9mZmxpbmUgbW9kZSBub3QgZm9yY2VkLCBhbmQgZGV2aWNlIHNheXMgdGhlcmUgaXMgbm8gY29ubmVjdGlvbjogc2tpcFxuICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lIHx8IHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlID09PSAnbm9uZScpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFNIb3cgbG9hZGluZyB0b2FzdFxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2hvd0xvYWRpbmdUb2FzdCA9ICFvcHRzIHx8IG9wdHMuc2hvd0xvYWRpbmdUb2FzdCAhPT0gZmFsc2U7XG4gICAgbGV0IGxvYWRpbmdUb2FzdDogSFRNTElvblRvYXN0RWxlbWVudDtcbiAgICBpZiAoc2hvd0xvYWRpbmdUb2FzdCkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLlJFVFJZX1RPX0NPTk5FQ1QnLCBkdXJhdGlvbjogMTAwMDAsIG9uV2lsbFByZXNlbnQ6ICh0KSA9PiAobG9hZGluZ1RvYXN0ID0gdCkgfSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIENoZWNraW5nIGNvbm5lY3Rpb24gdG8gcG9kLi4uJyk7XG4gICAgICBjb25zdCBzZXR0aW5nczogTG9jYWxTZXR0aW5ncyA9IGF3YWl0IHRoaXMuc2V0dGluZ3MucmVhZHkoKTtcblxuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gZmFsc2U7IC8vIE5vIHBlZXIgZGVmaW5lLiBTa2lwXG5cbiAgICAgIGNvbnN0IHBlZXIgPSBQZWVyLnBhcnNlVXJsKHNldHRpbmdzLnBlZXJVcmwpO1xuICAgICAgY29uc3QgcGVlckluZm8gPSBhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpO1xuICAgICAgY29uc3QgcGVlckFsaXZlQW5kQ29tcGF0aWJsZSA9IHBlZXJJbmZvICYmIChhd2FpdCB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm8pKTtcbiAgICAgIGlmIChwZWVyQWxpdmVBbmRDb21wYXRpYmxlKSB7XG4gICAgICAgIC8vIERpc2FibGUgdGhlIG9mZmxpbmUgbW9kZVxuICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZShmYWxzZSk7XG5cbiAgICAgICAgLy8gUmVzdGFydFxuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnQocGVlcik7XG5cbiAgICAgICAgLy8gV2FpdCBhIHByb21pc2UsIGJlZm9yZSByZWNoZWNrXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnYmVmb3JlVHJ5T25saW5lRmluaXNoJywgdGhpcy5vbmxpbmUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBsb2FkaW5nIHRvYXN0ICh3aXRoIGEgbWluaW1hbCBkaXNwbGF5IGR1cmF0aW9uIG9mIDJzKVxuICAgIGlmIChzaG93TG9hZGluZ1RvYXN0KSB7XG4gICAgICBhd2FpdCBzbGVlcCgyMDAwIC0gKERhdGUubm93KCkgLSBub3cpKTtcbiAgICAgIGlmIChsb2FkaW5nVG9hc3QpIGF3YWl0IGxvYWRpbmdUb2FzdC5kaXNtaXNzKCk7XG4gICAgfVxuXG4gICAgLy8gUmVjaGVjayBuZXR3b3JrIHN0YXR1c1xuICAgIGNvbnN0IG9ubGluZSA9IHRoaXMub25saW5lO1xuXG4gICAgLy8gRGlzcGxheSBhIHRvYXN0IHRvIHVzZXJcbiAgICBpZiAob25saW5lKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93T25saW5lVG9hc3QgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgICAgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9OTElORScsIHR5cGU6ICdpbmZvJyB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdHMgJiYgb3B0cy5zaG93T2ZmbGluZVRvYXN0ID09PSB0cnVlKSB7XG4gICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICByZXR1cm4gdGhpcy5zaG93T2ZmbGluZVRvYXN0KHsgc2hvd1JldHJ5QnV0dG9uOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydGVkICYmIG9ubGluZTtcbiAgfVxuXG4gIGFzeW5jIHNob3dPZmZsaW5lVG9hc3Qob3B0cz86IHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIHNob3dDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5QnV0dG9uPzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlTdWNjZXNzVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeUxvYWRpbmdUb2FzdD86IGJvb2xlYW47XG4gICAgb25SZXRyeVN1Y2Nlc3M/OiAoKSA9PiB2b2lkO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMub25saW5lKSByZXR1cm47IC8vIFNraXAgaWYgb25saW5lXG5cbiAgICAvLyBUb2FzdCB3aXRoIGEgcmV0cnkgYnV0dG9uXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuc2hvd1JldHJ5QnV0dG9uICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdG9hc3RSZXN1bHQgPSBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IChvcHRzICYmIG9wdHMubWVzc2FnZSkgfHwgJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnLFxuICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgZHVyYXRpb246IDEwMDAwMCxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIC8vIHJlY29ubmVjdCBidXR0b25cbiAgICAgICAgICB7XG4gICAgICAgICAgICByb2xlOiAncmVmcmVzaCcsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdORVRXT1JLLkJUTl9DSEVDS19BTElWRScpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgLy8gVXNlciBkb24ndCBjbGljayByZWNvbm5lY3Q6IHJldHVyblxuICAgICAgaWYgKCF0b2FzdFJlc3VsdCB8fCB0b2FzdFJlc3VsdC5yb2xlICE9PSAncmVmcmVzaCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gaWYgbmV0d29yayBzdGF0ZSBjaGFuZ2VkIHRvIG9ubGluZTogZXhpdCBoZXJlXG4gICAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBUcnkgdG8gcmVjb25uZWN0XG4gICAgICBjb25zdCBvbmxpbmUgPSBhd2FpdCB0aGlzLnRyeU9ubGluZSh7XG4gICAgICAgIHNob3dPZmZsaW5lVG9hc3Q6IGZhbHNlLFxuICAgICAgICBzaG93T25saW5lVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5U3VjY2Vzc1RvYXN0LCB0cnVlKSxcbiAgICAgICAgc2hvd0xvYWRpbmdUb2FzdDogdG9Cb29sZWFuKG9wdHMgJiYgb3B0cy5zaG93UmV0cnlMb2FkaW5nVG9hc3QsIHRydWUpLFxuICAgICAgfSk7XG4gICAgICBpZiAob25saW5lKSB7XG4gICAgICAgIC8vIENhbGwgc3VjY2VzcyBjYWxsYmFjayAoYXN5bmMpXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMub25SZXRyeVN1Y2Nlc3MpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KG9wdHMub25SZXRyeVN1Y2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBvcHRzID0ge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBzaG93UmV0cnlCdXR0b246IGZhbHNlLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNpbXBsZSB0b2FzdCwgd2l0aG91dCAnYXdhaXQnLCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QncyBkaXNtaXNzXG4gICAgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgbWVzc2FnZTogJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnLFxuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIC4uLm9wdHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBlZXIgaXMgYWxpdmVcbiAgICpcbiAgICogQHBhcmFtIHBlZXJcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGNoZWNrUGVlckFsaXZlKHBlZXI/OiBzdHJpbmcgfCBQZWVyKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuICAgIHBlZXIgPSBwZWVyIHx8IHRoaXMucGVlcjtcbiAgICBpZiAoIXBlZXIpIHtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuICAgICAgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm9kZUluZm8ocGVlciwgeyBub2NhY2hlOiB0cnVlLCB0aW1lb3V0OiB0aGlzLl9jb25uZWN0aW9uVGltZW91dCB9KTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm86IE5vZGVJbmZvLCBvcHRzPzogeyBzaG93VG9hc3Q/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXBlZXJJbmZvKSByZXR1cm4gZmFsc2U7IC8vIFBlZXIgY2Fubm90IGJlIHJlYWNoZWRcbiAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb24pIHJldHVybiB0cnVlOyAvLyBTa2lwIGNvbXBhdGliaWxpdHkgY2hlY2tcblxuICAgIC8vIENoZWNrIHRoZSBtaW4gcG9kIHZlcnNpb24sIGRlZmluZWQgYnkgdGhlIGFwcFxuICAgIGNvbnN0IGlzQ29tcGF0aWJsZSA9IHBlZXJJbmZvLnNvZnR3YXJlVmVyc2lvbiAmJiBWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb24sIHBlZXJJbmZvLnNvZnR3YXJlVmVyc2lvbik7XG5cbiAgICAvLyBEaXNwbGF5IHRvYXN0LCBpZiBub3QgY29tcGF0aWJsZVxuICAgIGlmICghaXNDb21wYXRpYmxlICYmICghb3B0cyB8fCBvcHRzLnNob3dUb2FzdCAhPT0gZmFsc2UpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdORVRXT1JLLkVSUk9SLk5PVF9DT01QQVRJQkxFX1BFRVInLFxuICAgICAgICBtZXNzYWdlUGFyYW1zOiB7XG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5lbnZpcm9ubWVudC5wZWVyTWluVmVyc2lvbixcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpc0NvbXBhdGlibGU7XG4gIH1cblxuICBhc3luYyBnZXROb2RlSW5mbyhwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cz86IHsgbm9jYWNoZT86IGJvb2xlYW47IHRpbWVvdXQ/OiBudW1iZXIgfSk6IFByb21pc2U8Tm9kZUluZm8+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJy9hcGkvbm9kZS9pbmZvJyk7XG4gICAgdGhpcy5fbG9nZ2VyPy5kZWJ1ZygnZ2V0Tm9kZUluZm8nLCBgR2V0dGluZyAnJHtwYXRofScgLi4uYCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YTogTm9kZUluZm8gPSBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICAgIHRoaXMuX2xvZ2dlcj8uZGVidWcoJ2dldE5vZGVJbmZvJywgYFJlc3BvbnNlIG9mICcke3BhdGh9JzpcXG4ke0pTT04uc3RyaW5naWZ5KGRhdGEpfWApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gRXJyb3Igd2hpbGUgZ2V0dGluZyAnJHtwYXRofSc6ICR7KGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyfWAsIGVycik7XG4gICAgICB0aGlzLl9sb2dnZXI/LmVycm9yKCdnZXROb2RlSW5mbycsIGBFcnJvciB3aGlsZSBnZXR0aW5nICcke3BhdGh9JzogJHtlcnI/Lm1lc3NhZ2UgfHwgJyd9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFwcE1hbmlmZXN0KHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzPzogeyBub2NhY2hlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxBcHBNYW5pZmVzdCB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICdtYW5pZmVzdC5qc29uJyk7XG4gICAgICBpZiAob3B0cz8ubm9jYWNoZSkge1xuICAgICAgICBwYXRoICs9ICc/dD0nICsgRGF0ZS5ub3coKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSAnbWFuaWZlc3QuanNvbicuIFBsZWFzZSBtYWtlIHN1cmUgd2Vic2VydmVyIGNvbmZpZyBhbGxvdyBDT1JTIGFjY2Vzc1wiLCBlcnIpO1xuICAgICAgZWxzZSBjb25zb2xlLmVycm9yKFwiW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgJ21hbmlmZXN0Lmpzb24nLlwiLCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBWZXJzaW9uKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzID0geyBub2NhY2hlOiB0cnVlIH0pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICd2ZXJzaW9uLmFwcHVwJyk7XG4gICAgICBpZiAob3B0cy5ub2NhY2hlKSB7XG4gICAgICAgIHBhdGggKz0gJz90PScgKyBEYXRlLm5vdygpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwVmVyc2lvbjogc3RyaW5nID0gYXdhaXQgdGhpcy5nZXRUZXh0KHBhdGgsIG9wdHMpO1xuICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhhcHBWZXJzaW9uKSkgcmV0dXJuIGFwcFZlcnNpb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgJ3ZlcnNpb24uYXBwdXAnLiBQbGVhc2UgbWFrZSBzdXJlIHdlYnNlcnZlciBjb25maWcgYWxsb3cgQ09SUyBhY2Nlc3NcIik7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoXCJbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSAndmVyc2lvbi5hcHB1cCcuXCIsIGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cblxuICAgIC8vIFRyeSBsb2FkaW5nIG1hbmlmZXN0Lmpzb25cbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuZ2V0QXBwTWFuaWZlc3QocGVlciwgb3B0cyk7XG4gICAgcmV0dXJuIG1hbmlmZXN0Py52ZXJzaW9uO1xuICB9XG5cbiAgY29tcHV0ZVBlZXJQYXRoKHBlZXI6IHN0cmluZyB8IFBlZXIgfCB1bmRlZmluZWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcGVlciA9IHBlZXIgfHwgdGhpcy5wZWVyO1xuICAgIGlmICghcGVlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBwZWVyVXJsID0gcGVlciBpbnN0YW5jZW9mIFBlZXIgPyBwZWVyLnVybCA6IChwZWVyIGFzIHN0cmluZyk7XG5cbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICBpZiAocGVlclVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICBwZWVyVXJsID0gcGVlclVybC5zdWJzdHIoMCwgcGVlclVybC5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZmlyc3QgcGF0aFxuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICAgIH1cblxuICAgIC8vIENvbmNhdCBwZWVyIFVSTCBhbmQgcGF0aFxuICAgIHJldHVybiBwZWVyVXJsICsgcGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBmb3JjZSBvZmZsaW5lIG1vZGVcbiAgICovXG4gIHNldEZvcmNlT2ZmbGluZShcbiAgICB2YWx1ZT86IGJvb2xlYW4sXG4gICAgb3B0cz86IHtcbiAgICAgIHNob3dUb2FzdD86IGJvb2xlYW47IC8vIERpc3BsYXkgYSB0b2FzdCwgd2hlbiBvZmZsaW5lID9cbiAgICB9XG4gICkge1xuICAgIHZhbHVlID0gdG9Cb29sZWFuKHZhbHVlLCB0cnVlKTtcbiAgICBpZiAodGhpcy5fZm9yY2VPZmZsaW5lICE9PSB2YWx1ZSkge1xuICAgICAgY29uc3QgcHJldmlvdXNDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG4gICAgICB0aGlzLl9mb3JjZU9mZmxpbmUgPSB2YWx1ZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG5cbiAgICAgIGlmIChwcmV2aW91c0Nvbm5lY3Rpb25UeXBlICE9PSBjdXJyZW50Q29ubmVjdGlvblR5cGUpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gQ29ubmVjdGlvbiBjaGFuZ2VkIHRvIHske2N1cnJlbnRDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KGN1cnJlbnRDb25uZWN0aW9uVHlwZSk7XG5cbiAgICAgICAgLy8gT2ZmbGluZSBtb2RlOiBhbGVydCB0aGUgdXNlclxuICAgICAgICBpZiAoY3VycmVudENvbm5lY3Rpb25UeXBlID09PSAnbm9uZScgJiYgKCFvcHRzIHx8IG9wdHMuc2hvd1RvYXN0ICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJywgdHlwZTogJ3dhcm5pbmcnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2hvd1NlbGVjdFBlZXJNb2RhbChvcHRzPzogUGFydGlhbDxJU2VsZWN0UGVlck1vZGFsT3B0aW9ucz4pOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIGNvbnN0IHBlZXJzID0gYXdhaXQgdGhpcy5nZXREZWZhdWx0UGVlcnMoKTtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFNlbGVjdFBlZXJNb2RhbCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+e1xuICAgICAgICBkZWZhdWx0UGVlcnM6IHBlZXJzLFxuICAgICAgICAuLi5vcHRzLFxuICAgICAgfSxcbiAgICAgIGtleWJvYXJkQ2xvc2U6IHRydWUsXG4gICAgICBzaG93QmFja2Ryb3A6IHRydWUsXG4gICAgfSk7XG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbldpbGxEaXNtaXNzKCk7XG5cbiAgICByZXR1cm4gKGRhdGEgJiYgKGRhdGEgYXMgUGVlcikpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQ2FjaGUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcblxuICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIENsZWFyaW5nIGFsbCBjYWNoZXMuLi4nKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVxuICAgICAgLmNsZWFyQWxsKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gRW1pdCBldmVudFxuICAgICAgICBpZiAoKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgJiYgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLm9ic2VydmVkKSB7XG4gICAgICAgICAgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLmVtaXQoKTtcblxuICAgICAgICAgIC8vIFdhaXQgb2JzZXJ2ZXJzIGNsZWFuIHRoZWlyIGNhY2hlcywgaWYgbmVlZFxuICAgICAgICAgIHJldHVybiBzbGVlcCg1MDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBBbGwgY2FjaGUgY2xlYXJlZCwgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KHBlZXI/OiBQZWVyKTogUHJvbWlzZTxQZWVyPiB7XG4gICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gU3RhcnRpbmcgbmV0d29yay4uLicpO1xuXG4gICAgLy8gUmVzdG9yaW5nIGxvY2FsIHNldHRpbmdzXG4gICAgcGVlciA9IHBlZXIgfHwgKGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKSk7XG5cbiAgICBpZiAoIXBlZXIpIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0byBoaWRlIHRoZSBzcGxhc2hzY3JlZW4sIGJlZm9yZSBvcGVuIHRoZSBtb2RhbFxuICAgICAgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgICAgLy8gTm8gcGVlciBpbiBzZXR0aW5nczogYXNrIHVzZXIgdG8gY2hvb3NlXG4gICAgICB3aGlsZSAoIXBlZXIpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIE5vIHBlZXIgZGVmaW5lZC4gQXNraW5nIHVzZXIgdG8gY2hvb3NlIGEgcGVlci4nKTtcbiAgICAgICAgcGVlciA9IGF3YWl0IHRoaXMuc2hvd1NlbGVjdFBlZXJNb2RhbCh7IGFsbG93U2VsZWN0RG93blBlZXI6IGZhbHNlLCB0aXRsZTogJ05FVFdPUksuUEVFUi5TRUxFQ1RfTU9EQUwuU1RBUlRVUF9USVRMRScsIGNhbkNhbmNlbDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9ubGluZSkge1xuICAgICAgLy8gQ2hlY2sgaWYgYWxpdmUuIElmIG5vdCwgZm9yY2Ugb2ZmbGluZSBtb2RlXG4gICAgICBjb25zdCBhbGl2ZSA9IGF3YWl0IHRoaXMuY2hlY2tQZWVyQWxpdmUocGVlcik7XG4gICAgICBpZiAoIWFsaXZlKSB7XG4gICAgICAgIC8vIFBlZXIgbm90IGFsaXZlLCBidXQgc2hvdWxkIGJlIGF0IHRoZSBzYW1lIFVSTCwgcmV0cnlpbmcgZWFjaCAxc1xuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zYW1lVXJsUGVlcikge1xuICAgICAgICAgIGNvbnN0IHJldHJ5TXMgPSB0aGlzLl9jb25uZWN0aW9uVGltZW91dCA+IDAgPyB0aGlzLl9jb25uZWN0aW9uVGltZW91dCA6IDEwMDA7XG4gICAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aW1lcihyZXRyeU1zLCByZXRyeU1zKS5waXBlKFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5zdG9wU3ViamVjdCksXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiBjb25zb2xlLndhcm4oYFtuZXR3b3JrLXNlcnZpY2VdIFdhaXRpbmcgcGVlciBiZSBiZSBhbGl2ZSwgYXQgeyR7cGVlci51cmx9fSAuLi5gKSksXG4gICAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuY2hlY2tQZWVyQWxpdmUocGVlcikpLFxuICAgICAgICAgICAgICBmaWx0ZXIoKGFsaXZlKSA9PiAhIWFsaXZlKSxcbiAgICAgICAgICAgICAgZmlyc3QoKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ29udGludWUsIGluIG9mZmxpbmUgbW9kZVxuICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gU3RhcnRpbmcgc2VydmljZSBbT0tdIHtwZWVyOiAnJHtwZWVyLnVybH0nLCBvbmxpbmU6ICR7dGhpcy5vbmxpbmV9fWApO1xuXG4gICAgcmV0dXJuIHBlZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPbkFmdGVyU3RhcnQocGVlcjogUGVlcikge1xuICAgIC8vIFdhaXQgc2V0dGluZ3Mgc3RhcnRzLCB0aGVuIHNhdmUgcGVlciBpbiBzZXR0aW5nc1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MuYXBwbHkoeyBwZWVyVXJsOiBwZWVyLnVybCB9KTtcblxuICAgIHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCh0aGlzLl9uZXR3b3JrPy50eXBlIHx8ICd1bmtub3duJyk7XG5cbiAgICAvLyBTdGFydCB0aGUgcmVmcmVzaCB0aW1lclxuICAgIHRoaXMuc3RhcnRSZWZyZXNoVGltZXIoKTtcblxuICAgIC8vIExpc3RlbiBmb3IgZGV2aWNlIG5ldHdvcmsgY2hhbmdlc1xuICAgIGlmICh0aGlzLl9uZXR3b3JrKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMuX25ldHdvcmsub25EaXNjb25uZWN0KCkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCgnbm9uZScpKSk7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICB0aGlzLl9uZXR3b3JrXG4gICAgICAgICAgLm9uQ29ubmVjdCgpXG4gICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDE1MDApKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKHRoaXMuX25ldHdvcmsudHlwZSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RvcCgpIHtcbiAgICAvLyBTdG9wIHRpbWVyLCBpZiBjYW5ub3QgcmVmcmVzaCBhbnltb3JlXG4gICAgaWYgKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbigpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXN0b3JlIHBlZXIgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8UGVlciB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIEZvcmNlIHVzZSBwcmVkZWZpbmVkIHBlZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wZWVyKSB7XG4gICAgICByZXR1cm4gUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQucGVlcik7XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBsZXQgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICBzZXR0aW5ncyA9IHR5cGVvZiBzZXR0aW5ncyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHNldHRpbmdzKSA6IHNldHRpbmdzO1xuICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy5wZWVyVXJsKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gVXNlIHBlZXIgeyR7c2V0dGluZ3MucGVlclVybH19IChmb3VuZCBpbiB0aGUgbG9jYWwgc3RvcmFnZSlgKTtcbiAgICAgIHJldHVybiBQZWVyLnBhcnNlVXJsKHNldHRpbmdzLnBlZXJVcmwpO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHVzZSBkZWZhdWx0IHBlZXIgaW4gZW52LCBpZiBleGlzdHNcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlcikge1xuICAgICAgcmV0dXJuIFBlZXIuZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKTtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCBpZiBBcHAgaXMgaG9zdGVkLCB0cnkgdGhlIHdlYnNpdGUgYXMgYSBwZWVyXG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLl9kb2N1bWVudD8ubG9jYXRpb247XG4gICAgaWYgKGxvY2F0aW9uPy5wcm90b2NvbD8uc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICBjb25zdCBob3N0bmFtZSA9IHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG4gICAgICBjb25zdCBkZXRlY3RlZFBlZXIgPSBQZWVyLnBhcnNlVXJsKGAke3RoaXMuX2RvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfSR7aG9zdG5hbWV9JHt0aGlzLmVudmlyb25tZW50LmJhc2VVcmx9YCk7XG5cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnNhbWVVcmxQZWVyIHx8IChhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKGRldGVjdGVkUGVlcikpKSB7XG4gICAgICAgIHJldHVybiBkZXRlY3RlZFBlZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRvIG5ldHdvcmsgc3RhdGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0b3BSZWZyZXNoVGltZXIoKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIG5ldHdvcmsgc3RhdGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXJ0UmVmcmVzaFRpbWVyKCkge1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBBbHJlYWR5IHJ1bm5pbmc6IHNraXBcblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHJlZnJlc2ggdGltZXIsIGV2ZXJ5ICR7dGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kfW1zLi4uYCk7XG5cbiAgICBsZXQgbGFzdEluZm86IE5vZGVJbmZvO1xuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kLCB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QpXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gU2tpcCBzb21lIHRpbWVyIGV2ZW50IChzZWUgY29uc3RydWN0b3IpXG4gICAgICAgIGZpbHRlcih0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24pLFxuXG4gICAgICAgIC8vIENoZWNraW4gaWYgcGVlciBhbGl2ZVxuICAgICAgICB0YXAoKCkgPT4gY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIENoZWNraW5nIGNvbm5lY3Rpb24gdG8gcG9kLi4uJykpLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNoZWNrUGVlckFsaXZlKHRoaXMucGVlcikpLFxuXG4gICAgICAgIC8vIEZpbHRlciB0byBrZWVwIG9ubHkgY2hhbmdlc1xuICAgICAgICBmaWx0ZXIoKGluZm8pID0+ICFlcXVhbHMoaW5mbywgbGFzdEluZm8pKSxcbiAgICAgICAgdGFwKChpbmZvKSA9PiAobGFzdEluZm8gPSBpbmZvKSksXG5cbiAgICAgICAgLy8gQ2hlY2sgY29tcGF0aWJpbGl0eVxuICAgICAgICBtZXJnZU1hcCgoaW5mbykgPT4gdGhpcy5jaGVja1BlZXJDb21wYXRpYmxlKGluZm8sIHsgc2hvd1RvYXN0OiB0cnVlIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoYWxpdmUpID0+IHtcbiAgICAgICAgaWYgKGFsaXZlICYmIHRoaXMub2ZmbGluZSkge1xuICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAgIC8vIFJlc3RhcnQgdGhlIHNlcnZpY2UgKHRvIGZvcmNlIHJlIGF1dGgpXG4gICAgICAgICAgdGhpcy5yZXN0YXJ0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWFsaXZlICYmIHRoaXMub25saW5lKSB7XG4gICAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUodHJ1ZSk7XG5cbiAgICAgICAgICAvLyBTdG9wIHRoZSBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24uYWRkKCgpID0+IGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBSZWZyZXNoIHRpbWVyIHN0b3BwZWQnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VGV4dChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IHtcbiAgICAgIGhlYWRlcnM/OlxuICAgICAgICB8IEh0dHBIZWFkZXJzXG4gICAgICAgIHwge1xuICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgICAgfTtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICd0ZXh0JztcbiAgICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICAgIH1cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gSHR0cFV0aWxzLmdldFRleHQodGhpcy5odHRwLCB0aGlzLmdldFVyaShwYXRoKSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0PFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRzPzoge1xuICAgICAgaGVhZGVycz86XG4gICAgICAgIHwgSHR0cEhlYWRlcnNcbiAgICAgICAgfCB7XG4gICAgICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgICAgICB9O1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgICAgbm9jYWNoZT86IGJvb2xlYW47XG4gICAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIH1cbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIEh0dHBVdGlscy5nZXRKc29uPFQ+KHRoaXMuaHR0cCwgdGhpcy5nZXRVcmkocGF0aCksIG9wdHMpO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgZ2V0VXJpKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHVyaSA9IHBhdGg7XG5cbiAgICAvLyBJZiBwYXRoIGlzIG5vdCBhbiBVUkk6IHByZXBlbmQgd2l0aCBwZWVyIFVSTFxuICAgIGlmICghdXJpLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhdXJpLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgIGxldCBwZWVyVXJsID0gdGhpcy5wZWVyICYmIHRoaXMucGVlci51cmw7XG5cbiAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICAgICAgaWYgKHBlZXJVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICBwZWVyVXJsID0gcGVlclVybC5zdWJzdHIoMCwgcGVlclVybC5sZW5ndGggLSAxKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGZpcnN0IHBhdGhcbiAgICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9ICcvJyArIHBhdGg7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgVVJJOiBjb25jYXQgcGVlciBVUkwgYW5kIHBhdGhcbiAgICAgIHVyaSA9IHBlZXJVcmwgKyBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gdXJpO1xuICB9XG4gIHByb3RlY3RlZCBvbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKGNvbm5lY3Rpb25UeXBlPzogc3RyaW5nKSB7XG4gICAgY29ubmVjdGlvblR5cGUgPSBnZXRDb25uZWN0aW9uVHlwZShjb25uZWN0aW9uVHlwZSk7XG4gICAgaWYgKGNvbm5lY3Rpb25UeXBlICE9PSB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSkge1xuICAgICAgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPSBjb25uZWN0aW9uVHlwZSBhcyBDb25uZWN0aW9uVHlwZTtcblxuICAgICAgLy8gSWYgTk9UICBhbHJlYWR5IGZvcmNlZCBhcyBvZmZsaW5lLCBlbWl0IGV2ZW50XG4gICAgICBpZiAoIXRoaXMuX2ZvcmNlT2ZmbGluZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBDb25uZWN0aW9uIGNoYW5nZWQgdG8geyR7dGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGV9fWApO1xuICAgICAgICB0aGlzLm9uTmV0d29ya1N0YXR1c0NoYW5nZXMubmV4dCh0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSk7XG5cbiAgICAgICAgLy8gQ2hhbmdlIHRvIG9mZmxpbmVcbiAgICAgICAgaWYgKHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlID09PSAnbm9uZScpIHtcbiAgICAgICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgICAgICAvLyBGb3JjZSBvZmZsaW5lIG1vZGVcbiAgICAgICAgICAgIHRoaXMuX2ZvcmNlT2ZmbGluZSA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJywgdHlwZTogJ3dhcm5pbmcnIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBbGVydCB0aGUgdXNlclxuICAgICAgICAgICAgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkUnLCB0eXBlOiAnd2FybmluZycgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgbmV0d29yayBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgcGVlcnMsIGZyb20gZW52aXJvbm1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXREZWZhdWx0UGVlcnMoKTogUHJvbWlzZTxQZWVyW10+IHtcbiAgICBjb25zdCBwZWVycyA9ICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVycyB8fCBbXSkubWFwKFBlZXIuZnJvbU9iamVjdCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwZWVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZExpc3RlbmVyPFQgPSBhbnk+KG5hbWU6IE5ldHdvcmtFdmVudFR5cGUsIGNhbGxiYWNrOiAoZGF0YT86IFQpID0+IFByb21pc2U8dm9pZD4pOiBTdWJzY3JpcHRpb24ge1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXSA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXSB8fCBbXTtcbiAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0ucHVzaChjYWxsYmFjayk7XG5cbiAgICAvLyBXaGVuIHVuc3Vic2NyaWJlLCByZW1vdmUgZnJvbSB0aGUgbGlzdGVuZXJcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZW1pdDxUID0gYW55PihuYW1lOiBOZXR3b3JrRXZlbnRUeXBlLCBkYXRhPzogVCkge1xuICAgIGNvbnN0IGhvb2tzID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoaG9va3MpKSB7XG4gICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrLXNlcnZpY2VdIFRyaWdnZXIgJHtuYW1lfSBob29rOiBFeGVjdXRpbmcgJHtob29rcy5sZW5ndGh9IGNhbGxiYWNrcy4uLmApO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgIGhvb2tzLm1hcCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBjb25zdCBwcm9taXNlID0gY2FsbGJhY2soZGF0YSk7XG4gICAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XG4gICAgICAgICAgcmV0dXJuIHByb21pc2UuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGhvb2sgJyArIG5hbWUsIGVycikpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
626
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQTJCLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUUsT0FBTyxFQUF3QixvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQW9CLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBHLE9BQU8sRUFBZSxZQUFZLEVBQVksTUFBTSxpQkFBaUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVqRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQUU1QyxNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0I7SUFDekMsT0FBTyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQjtDQUN6QyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLDhCQUE4QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLEtBQUssQ0FBQyxDQUFDLHNEQUFzRDtBQUUvRzs7NkNBRTZDO0FBRzdDLE1BQU0sT0FBTyxjQUFlLFNBQVEsMEJBQXNDO0lBcUQ1QztJQUNsQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDdUI7SUFDa0I7SUFDN0I7SUFDQTtJQTlEdEIsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFDeEIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUN2QixvQkFBb0IsRUFBVSxDQUMvQixDQUFDO0lBQ0Ysc0JBQXNCLEdBQUcsSUFBSSxlQUFlLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQ25FLG1CQUFtQixHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVCLE9BQU8sQ0FBVTtJQUNqQixPQUFPLENBQVU7SUFDMUIsa0JBQWtCLENBQWU7SUFDeEIsbUJBQW1CLENBQVM7SUFDNUIsc0JBQXNCLENBQWdCO0lBQy9DLHFCQUFxQixDQUFpQjtJQUN0QyxhQUFhLENBQVU7SUFDZCxrQkFBa0IsQ0FBUztJQUVwQyxVQUFVLEdBRWQsRUFBRSxDQUFDO0lBRVAsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLGtDQUFrQztRQUNsQyxPQUFPLElBQUksQ0FBQyxhQUFhO1lBQ3ZCLENBQUMsQ0FBQyxNQUFNO1lBQ1IsQ0FBQyxDQUFDLG1EQUFtRDtnQkFDbkQsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBVTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxZQUM0QixTQUFjLEVBQ2hDLFFBQWtCLEVBQ2xCLFNBQTBCLEVBQzFCLE9BQWdCLEVBQ2hCLFFBQThCLEVBQzlCLEtBQW1CLEVBQ25CLElBQWdCLEVBQ08sV0FBd0IsRUFDTixjQUErQixFQUM1RCxTQUEyQixFQUMzQixlQUFnQztRQUVwRCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFaVSxjQUFTLEdBQVQsU0FBUyxDQUFLO1FBQ2hDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFzQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQVk7UUFDTyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNOLG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtRQUM1RCxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFHcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixJQUFJLGtDQUFrQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFekQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztZQUM1RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGdEQUFnRDtRQUNuRyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxtQkFBbUIsR0FBRyx5QkFBeUIsQ0FBQyxPQUFPLENBQUM7WUFDN0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWU7UUFDM0QsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFakUsZUFBZTtRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEVBQUUsQ0FBVSxTQUEyQixFQUFFLFFBQW9DO1FBQzNFLFFBQVEsU0FBUyxFQUFFLENBQUM7WUFDbEIsS0FBSyxPQUFPO2dCQUNWLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUV2RCxLQUFLLGFBQWE7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUV4RCxLQUFLLGVBQWU7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQW9CLENBQUMsQ0FBQyxDQUFDO1lBRXpGLEtBQUssWUFBWTtnQkFDZixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUU5RDtnQkFDRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQU1mO1FBQ0MsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUU3RixxQkFBcUI7UUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLEtBQUssQ0FBQztRQUNsRSxJQUFJLFlBQWlDLENBQUM7UUFDdEMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hJLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDeEQsTUFBTSxRQUFRLEdBQWtCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUU1RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87Z0JBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyx1QkFBdUI7WUFFNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pELE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN0RixJQUFJLHNCQUFzQixFQUFFLENBQUM7Z0JBQzNCLDJCQUEyQjtnQkFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFNUIsVUFBVTtnQkFDVixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRXpCLGlDQUFpQztnQkFDakMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMzQyxXQUFXO1FBQ2IsQ0FBQztRQUVELDhEQUE4RDtRQUM5RCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsTUFBTSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFBSSxZQUFZO2dCQUFFLE1BQU0sWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pELENBQUM7UUFFRCx5QkFBeUI7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUUzQiwwQkFBMEI7UUFDMUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDNUMsNEVBQTRFO2dCQUM1RSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xELDRFQUE0RTtZQUM1RSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFPdEI7UUFDQyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLGlCQUFpQjtRQUUxQyw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzVDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDdkMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSx3QkFBd0I7Z0JBQzNELElBQUksRUFBRSxTQUFTO2dCQUNmLGVBQWUsRUFBRSxJQUFJO2dCQUNyQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsT0FBTyxFQUFFO29CQUNQLG1CQUFtQjtvQkFDbkI7d0JBQ0UsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO3FCQUN4RDtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUVILHFDQUFxQztZQUNyQyxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssU0FBUztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUVqRSxnREFBZ0Q7WUFDaEQsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUU3QixtQkFBbUI7WUFDbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNsQyxnQkFBZ0IsRUFBRSxLQUFLO2dCQUN2QixlQUFlLEVBQUUsU0FBUyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDO2dCQUNwRSxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUM7YUFDdEUsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxnQ0FBZ0M7Z0JBQ2hDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDaEMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxJQUFJLEdBQUc7Z0JBQ0wsR0FBRyxJQUFJO2dCQUNQLGVBQWUsRUFBRSxLQUFLO2dCQUN0QixlQUFlLEVBQUUsSUFBSTthQUN0QixDQUFDO1FBQ0osQ0FBQztRQUVELDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2IsT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxJQUFJLEVBQUUsT0FBTztZQUNiLEdBQUcsSUFBSTtTQUNSLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFvQjtRQUN2QyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsTUFBTSxRQUFRLEdBQWtCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87Z0JBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyx1QkFBdUI7WUFDaEUsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFFBQWtCLEVBQUUsSUFBOEI7UUFDMUUsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLHlCQUF5QjtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjO1lBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQywyQkFBMkI7UUFFOUUsZ0RBQWdEO1FBQ2hELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxlQUFlLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdEksbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekQsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNuQixJQUFJLEVBQUUsT0FBTztnQkFDYixPQUFPLEVBQUUsbUNBQW1DO2dCQUM1QyxhQUFhLEVBQUU7b0JBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYztpQkFDekM7Z0JBQ0QsZUFBZSxFQUFFLElBQUk7YUFDdEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQW9CLEVBQUUsSUFBOEM7UUFDcEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsWUFBWSxJQUFJLE9BQU8sQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFhLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLGdCQUFnQixJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEYsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNGLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFvQixFQUFFLElBQTRCO1FBQ3JFLElBQUksQ0FBQztZQUNILElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixJQUFJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM3QixDQUFDO1lBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7Z0JBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUdBQWlHLEVBQUUsR0FBRyxDQUFDLENBQUM7O2dCQUNuSCxPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZFLFdBQVc7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBb0IsRUFBRSxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1FBQ2hFLElBQUksQ0FBQztZQUNILElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixJQUFJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM3QixDQUFDO1lBQ0QsTUFBTSxVQUFVLEdBQVcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUM7Z0JBQUUsT0FBTyxVQUFVLENBQUM7UUFDckQsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTtnQkFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxpR0FBaUcsQ0FBQyxDQUFDOztnQkFDOUcsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN2RSxXQUFXO1FBQ2IsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sUUFBUSxFQUFFLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsZUFBZSxDQUFDLElBQStCLEVBQUUsSUFBWTtRQUMzRCxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUU1QixJQUFJLE9BQU8sR0FBRyxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSxJQUFlLENBQUM7UUFFakUsd0JBQXdCO1FBQ3hCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLE9BQU8sT0FBTyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlLENBQ2IsS0FBZSxFQUNmLElBRUM7UUFFRCxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDakMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUVsRCxJQUFJLHNCQUFzQixLQUFLLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxJQUFJLENBQUMsb0NBQW9DLHFCQUFxQixHQUFHLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUV4RCwrQkFBK0I7Z0JBQy9CLElBQUkscUJBQXFCLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM1RSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RSxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQXVDO1FBQy9ELElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWxCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDeEMsU0FBUyxFQUFFLGVBQWU7WUFDMUIsY0FBYyxFQUEyQjtnQkFDdkMsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLEdBQUcsSUFBSTthQUNSO1lBQ0QsYUFBYSxFQUFFLElBQUk7WUFDbkIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFdEIsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTdDLE9BQU8sQ0FBQyxJQUFJLElBQUssSUFBYSxDQUFDLElBQUksU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQThCO1FBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXRDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLO2FBQ2QsUUFBUSxFQUFFO2FBQ1YsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULGFBQWE7WUFDYixJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFaEMsNkNBQTZDO2dCQUM3QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDMUYsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsK0JBQStCO0lBRXJCLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBVztRQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFFOUMsa0NBQWtDO1FBQ2xDLE9BQU8sQ0FBQyxLQUFLLENBQUMseUNBQXlDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBRWpJLDJCQUEyQjtRQUMzQixJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDViw0REFBNEQ7WUFDNUQsTUFBTSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFMUIsMENBQTBDO1lBQzFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7Z0JBQzFFLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUseUNBQXlDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDNUksQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2Qiw2Q0FBNkM7WUFDN0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxrRUFBa0U7Z0JBQ2xFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQzdFLE1BQU0sY0FBYyxDQUNsQixLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDMUIsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDM0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQzNGLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3pDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUMxQixLQUFLLEVBQUUsQ0FDUixDQUNGLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxDQUFDO29CQUNOLDRCQUE0QjtvQkFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQywyQ0FBMkMsSUFBSSxDQUFDLEdBQUcsY0FBYyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUU5RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFUyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQVU7UUFDdkMsbURBQW1EO1FBQ25ELE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFakQsb0NBQW9DO1FBQ3BDLElBQUksWUFBWSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGNBQWMsR0FBRyxNQUFNLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUUvQyxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsY0FBYyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQ3hILENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFUyxRQUFRO1FBQ2hCLHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxLQUFLLENBQUMsY0FBYztRQUM1Qix3Q0FBd0M7UUFDeEMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzVELFFBQVEsR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUMxRSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsUUFBUSxDQUFDLE9BQU8sZ0NBQWdDLENBQUMsQ0FBQztZQUN2RixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCwyQ0FBMkM7UUFDM0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7UUFDMUMsSUFBSSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFaEgsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlFLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxnQkFBZ0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxpQkFBaUI7UUFDekIsSUFBSSxJQUFJLENBQUMsa0JBQWtCO1lBQUUsT0FBTyxDQUFDLHdCQUF3QjtRQUU3RCxPQUFPLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxJQUFJLENBQUMsbUJBQW1CLE9BQU8sQ0FBQyxDQUFDO1FBRXpGLElBQUksUUFBa0IsQ0FBQztRQUN2QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUM7YUFDaEYsSUFBSTtRQUNILDBDQUEwQztRQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBRW5DLHdCQUF3QjtRQUN4QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEVBQ25FLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5Qyw4QkFBOEI7UUFDOUIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFDekMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUVoQyxzQkFBc0I7UUFDdEIsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDeEU7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTVCLHlDQUF5QztnQkFDekMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLENBQUM7aUJBQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTNCLG1CQUFtQjtnQkFDbkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRVMsS0FBSyxDQUFDLE9BQU8sQ0FDckIsSUFBWSxFQUNaLElBUUM7UUFFRCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFUyxHQUFHLENBQ1gsSUFBWSxFQUNaLElBU0M7UUFFRCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCw2QkFBNkI7SUFFbkIsTUFBTSxDQUFDLElBQVk7UUFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBRWYsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzlELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFFekMsd0JBQXdCO1lBQ3hCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBRUQsaUJBQWlCO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLENBQUM7WUFFRCwyQ0FBMkM7WUFDM0MsR0FBRyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNTLHlCQUF5QixDQUFDLGNBQStCO1FBQ2pFLElBQUksY0FBYyxLQUFLLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxjQUFjLENBQUM7WUFFNUMsK0NBQStDO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0NBQW9DLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7Z0JBQ2hGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBRTdELG9CQUFvQjtnQkFDcEIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNqQixxQkFBcUI7d0JBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO3dCQUUxQixpQkFBaUI7d0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7b0JBQzVFLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixpQkFBaUI7d0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7b0JBQ3ZFLENBQUM7b0JBRUQsMkJBQTJCO29CQUMzQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ08sS0FBSyxDQUFDLGVBQWU7UUFDN0IsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRVMsU0FBUyxDQUFVLElBQXNCO1FBQ2pELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVTLFdBQVcsQ0FBVSxJQUFzQixFQUFFLFFBQXFDO1FBQzFGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckMsNkNBQTZDO1FBQzdDLE9BQU8sSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFO1lBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsS0FBSyxDQUFDLElBQUksQ0FBVSxJQUFzQixFQUFFLElBQVE7UUFDNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLElBQUksb0JBQW9CLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQyxDQUFDO1lBRS9GLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FDaEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNyQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxPQUFPO29CQUFFLE9BQU87Z0JBQ3JCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7d0dBN3JCVSxjQUFjLGtCQXFEZixRQUFRLHFMQU9SLFdBQVcsYUFDQyxtQkFBbUI7NEdBN0Q5QixjQUFjLGNBREQsTUFBTTs7NEZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFzRDdCLE1BQU07MkJBQUMsUUFBUTs7MEJBT2YsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUN0QyxRQUFROzswQkFDUixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5pbXBvcnQgeyBQZWVyIH0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3MgfSBmcm9tICcuL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciwgUGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IElTZWxlY3RQZWVyTW9kYWxPcHRpb25zLCBTZWxlY3RQZWVyTW9kYWwgfSBmcm9tICcuLi9wZWVyL3NlbGVjdC1wZWVyLm1vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5ldHdvcmssIENvbm5lY3Rpb25UeXBlIH0gZnJvbSAnQGNhcGFjaXRvci9uZXR3b3JrJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlLCBTRVRUSU5HU19TVE9SQUdFX0tFWSB9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBTcGxhc2hTY3JlZW4gfSBmcm9tICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBlcXVhbHMsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWxPckJsYW5rLCBzbGVlcCwgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tICdpb25pYy1jYWNoZSc7XG5pbXBvcnQgeyBTaG93VG9hc3RPcHRpb25zLCBUb2FzdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIG1lcmdlTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE92ZXJsYXlFdmVudERldGFpbCB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IEFwcE1hbmlmZXN0LCBOZXR3b3JrVXRpbHMsIE5vZGVJbmZvIH0gZnJvbSAnLi9uZXR3b3JrLnV0aWxzJztcbmltcG9ydCB7IEh0dHBVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC9odHRwL2h0dHAudXRpbHMnO1xuaW1wb3J0IHsgVmVyc2lvblV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1vYnNlcnZhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgTmV0d29ya0V2ZW50VHlwZSB9IGZyb20gJy4vbmV0d29yay50eXBlcyc7XG5pbXBvcnQgeyBBUFBfTE9HR0lOR19TRVJWSUNFIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dpbmcvbG9nZ2luZy1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IElMb2dnZXIsIElMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5pbXBvcnQgeyBDYXBhY2l0b3IgfSBmcm9tICdAY2FwYWNpdG9yL2NvcmUnO1xuXG5jb25zdCBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kID0ge1xuICBNT0JJTEU6IDEwMDAgKiA2MCAqIDEwIC8qIGV2ZXJ5IDEwIG1pbiAqLyxcbiAgREVTS1RPUDogMTAwMCAqIDYwICogNSAvKiBldmVyeSA1IG1pbiAqLyxcbn07XG5cbmV4cG9ydCBjb25zdCBQRUVSX1VSTF9SRUdFWFAgPSAvXihodHRwfGh0dHBzKTpcXC9cXC9bXiBcIj8jQF0rJC87XG5cbmV4cG9ydCBjb25zdCBORVRXT1JLX0RFRkFVTFRfQ09OTkVDVElPTl9USU1FT1VUID0gMTAwMDA7IC8vIDEwcyAtIC8hXFwgc2hvdWxkIGJlIGhpZ2ggKGUuZy4gZm9yIHBvb3IgY29ubmVjdGlvbilcblxuLyogLS0gREVWIG9ubHkgKHRvIGRlYnVnIHJlZnJlc2ggdGltZXIpXG5OZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRSA9ICAxMDAwO1xuTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QID0gIDEwMDA7ICovXG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmV0d29ya1NlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZTxQZWVyLCBQZWVyPiB7XG4gIG9uUGVlckNoYW5nZXMgPSB0aGlzLnN0YXJ0U3ViamVjdC5waXBlKFxuICAgIG1hcCgocGVlcikgPT4gcGVlcj8udXJsKSxcbiAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxzdHJpbmc+KClcbiAgKTtcbiAgb25OZXR3b3JrU3RhdHVzQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29ubmVjdGlvblR5cGU+KG51bGwpO1xuICBvblJlc2V0TmV0d29ya0NhY2hlID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlcjtcbiAgcHJpdmF0ZSBfdGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZXJSZWZyZXNoUGVyaW9kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVyUmVmcmVzaENvbmRpdGlvbjogKCkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGV2aWNlQ29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25UeXBlO1xuICBwcml2YXRlIF9mb3JjZU9mZmxpbmU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Nvbm5lY3Rpb25UaW1lb3V0OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiB7XG4gICAgW2tleTogc3RyaW5nXTogKChkYXRhPzogYW55KSA9PiBQcm9taXNlPHZvaWQ+KVtdO1xuICB9ID0ge307XG5cbiAgZ2V0IG9ubGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uVHlwZSAhPT0gJ25vbmUnO1xuICB9XG5cbiAgZ2V0IG9mZmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblR5cGUgPT09ICdub25lJztcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uVHlwZSgpOiBDb25uZWN0aW9uVHlwZSB7XG4gICAgLy8gSWYgZm9yY2Ugb2ZmbGluZTogcmV0dXJuICdub25lJ1xuICAgIHJldHVybiB0aGlzLl9mb3JjZU9mZmxpbmVcbiAgICAgID8gJ25vbmUnXG4gICAgICA6IC8vIEVsc2UsIHJldHVybiBkZXZpY2UgY29ubmVjdGlvbiB0eXBlIChvciB1bmtub3duKVxuICAgICAgICAodGhpcy5zdGFydGVkICYmIHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKSB8fCAndW5rbm93bic7XG4gIH1cblxuICBnZXQgcGVlcigpOiBQZWVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC52YWx1ZT8uY2xvbmUoKTtcbiAgfVxuXG4gIHNldCBwZWVyKHBlZXI6IFBlZXIpIHtcbiAgICBpZiAoIVBlZXIuZXF1YWxzKHRoaXMucGVlciwgcGVlcikpIHtcbiAgICAgIHRoaXMucmVzdGFydChwZWVyKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblRpbWVvdXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FjaGU6IENhY2hlU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0dHSU5HX1NFUlZJQ0UpIHByaXZhdGUgbG9nZ2luZ1NlcnZpY2U6IElMb2dnaW5nU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLl9tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcbiAgICB0aGlzLl9jb25uZWN0aW9uVGltZW91dCA9IGVudmlyb25tZW50LmNvbm5lY3Rpb25UaW1lb3V0IHx8IE5FVFdPUktfREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQ7XG4gICAgdGhpcy5fbG9nZ2VyID0gdGhpcy5sb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCduZXR3b3JrJyk7XG5cbiAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRTtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbiA9ICgpID0+IHRoaXMub25saW5lOyAvLyBDaGVjayBvbmx5IHdoZW4gb25saW5lLCBhbmQgc3RvcCB3aGVuIG9mZmxpbmVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QO1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uID0gKCkgPT4gdHJ1ZTsgLy8gQWx3YXlzIGNoZWNrXG4gICAgfVxuXG4gICAgdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKChwZWVyKSA9PiB0aGlzLm5nT25BZnRlclN0YXJ0KHBlZXIpKTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdG8gbmV0d29yayBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRUeXBlXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgb248VCA9IGFueT4oZXZlbnRUeXBlOiBOZXR3b3JrRXZlbnRUeXBlLCBjYWxsYmFjazogKGRhdGE/OiBUKSA9PiBQcm9taXNlPGFueT4pOiBTdWJzY3JpcHRpb24ge1xuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0U3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3BlZXJDaGFuZ2VkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25QZWVyQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3N0YXR1c0NoYW5nZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgodHlwZSkgPT4gY2FsbGJhY2sodHlwZSBhcyB1bmtub3duIGFzIFQpKTtcblxuICAgICAgY2FzZSAncmVzZXRDYWNoZSc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uUmVzZXROZXR3b3JrQ2FjaGUuc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcihldmVudFR5cGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB0cnlPbmxpbmUob3B0cz86IHtcbiAgICBzaG93T2ZmbGluZVRvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93T25saW5lVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dMb2FkaW5nVG9hc3Q/OiBib29sZWFuO1xuICAgIGFmdGVyUmV0cnlEZWxheT86IG51bWJlcjtcbiAgICBhZnRlclJldHJ5UHJvbWlzZT86ICgpID0+IFByb21pc2U8YW55PjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIElmIG9mZmxpbmUgbW9kZSBub3QgZm9yY2VkLCBvciBpZiBkZXZpY2Ugc2F5cyB0aGVyZSBpcyBubyBjb25uZWN0aW9uOiBza2lwXG4gICAgaWYgKCF0aGlzLl9mb3JjZU9mZmxpbmUgfHwgKGF3YWl0IE5ldHdvcmtVdGlscy5nZXRDb25uZWN0aW9uVHlwZSgpKSA9PT0gJ25vbmUnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBTSG93IGxvYWRpbmcgdG9hc3RcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNob3dMb2FkaW5nVG9hc3QgPSAhb3B0cyB8fCBvcHRzLnNob3dMb2FkaW5nVG9hc3QgIT09IGZhbHNlO1xuICAgIGxldCBsb2FkaW5nVG9hc3Q6IEhUTUxJb25Ub2FzdEVsZW1lbnQ7XG4gICAgaWYgKHNob3dMb2FkaW5nVG9hc3QpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHsgbWVzc2FnZTogJ05FVFdPUksuSU5GTy5SRVRSWV9UT19DT05ORUNUJywgZHVyYXRpb246IDEwMDAwLCBvbldpbGxQcmVzZW50OiAodCkgPT4gKGxvYWRpbmdUb2FzdCA9IHQpIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpO1xuICAgICAgY29uc3Qgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG5cbiAgICAgIGlmICghc2V0dGluZ3MucGVlclVybCkgcmV0dXJuIGZhbHNlOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuXG4gICAgICBjb25zdCBwZWVyID0gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICAgIGNvbnN0IHBlZXJJbmZvID0gYXdhaXQgdGhpcy5jaGVja1BlZXJBbGl2ZShwZWVyKTtcbiAgICAgIGNvbnN0IHBlZXJBbGl2ZUFuZENvbXBhdGlibGUgPSBwZWVySW5mbyAmJiAoYXdhaXQgdGhpcy5jaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvKSk7XG4gICAgICBpZiAocGVlckFsaXZlQW5kQ29tcGF0aWJsZSkge1xuICAgICAgICAvLyBEaXNhYmxlIHRoZSBvZmZsaW5lIG1vZGVcbiAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUoZmFsc2UpO1xuXG4gICAgICAgIC8vIFJlc3RhcnRcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN0YXJ0KHBlZXIpO1xuXG4gICAgICAgIC8vIFdhaXQgYSBwcm9taXNlLCBiZWZvcmUgcmVjaGVja1xuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2JlZm9yZVRyeU9ubGluZUZpbmlzaCcsIHRoaXMub25saW5lKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgbG9hZGluZyB0b2FzdCAod2l0aCBhIG1pbmltYWwgZGlzcGxheSBkdXJhdGlvbiBvZiAycylcbiAgICBpZiAoc2hvd0xvYWRpbmdUb2FzdCkge1xuICAgICAgYXdhaXQgc2xlZXAoMjAwMCAtIChEYXRlLm5vdygpIC0gbm93KSk7XG4gICAgICBpZiAobG9hZGluZ1RvYXN0KSBhd2FpdCBsb2FkaW5nVG9hc3QuZGlzbWlzcygpO1xuICAgIH1cblxuICAgIC8vIFJlY2hlY2sgbmV0d29yayBzdGF0dXNcbiAgICBjb25zdCBvbmxpbmUgPSB0aGlzLm9ubGluZTtcblxuICAgIC8vIERpc3BsYXkgYSB0b2FzdCB0byB1c2VyXG4gICAgaWYgKG9ubGluZSkge1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuc2hvd09ubGluZVRvYXN0ICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICAgIHRoaXMuc2hvd1RvYXN0KHsgbWVzc2FnZTogJ05FVFdPUksuSU5GTy5PTkxJTkUnLCB0eXBlOiAnaW5mbycgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRzICYmIG9wdHMuc2hvd09mZmxpbmVUb2FzdCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gRGlzcGxheSB0b2FzdCAod2l0aG91dCBhd2FpdCwgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0IGNsb3NlIGV2ZW50KVxuICAgICAgcmV0dXJuIHRoaXMuc2hvd09mZmxpbmVUb2FzdCh7IHNob3dSZXRyeUJ1dHRvbjogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZCAmJiBvbmxpbmU7XG4gIH1cblxuICBhc3luYyBzaG93T2ZmbGluZVRvYXN0KG9wdHM/OiB7XG4gICAgbWVzc2FnZT86IHN0cmluZztcbiAgICBzaG93Q2xvc2VCdXR0b24/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeUJ1dHRvbj86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5U3VjY2Vzc1RvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlMb2FkaW5nVG9hc3Q/OiBib29sZWFuO1xuICAgIG9uUmV0cnlTdWNjZXNzPzogKCkgPT4gdm9pZDtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLm9ubGluZSkgcmV0dXJuOyAvLyBTa2lwIGlmIG9ubGluZVxuXG4gICAgLy8gVG9hc3Qgd2l0aCBhIHJldHJ5IGJ1dHRvblxuICAgIGlmICghb3B0cyB8fCBvcHRzLnNob3dSZXRyeUJ1dHRvbiAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHRvYXN0UmVzdWx0ID0gYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAob3B0cyAmJiBvcHRzLm1lc3NhZ2UpIHx8ICdFUlJPUi5ORVRXT1JLX1JFUVVJUkVEJyxcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIGR1cmF0aW9uOiAxMDAwMDAsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAvLyByZWNvbm5lY3QgYnV0dG9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgcm9sZTogJ3JlZnJlc2gnLFxuICAgICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTkVUV09SSy5CVE5fQ0hFQ0tfQUxJVkUnKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVzZXIgZG9uJ3QgY2xpY2sgcmVjb25uZWN0OiByZXR1cm5cbiAgICAgIGlmICghdG9hc3RSZXN1bHQgfHwgdG9hc3RSZXN1bHQucm9sZSAhPT0gJ3JlZnJlc2gnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIGlmIG5ldHdvcmsgc3RhdGUgY2hhbmdlZCB0byBvbmxpbmU6IGV4aXQgaGVyZVxuICAgICAgaWYgKHRoaXMub25saW5lKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gVHJ5IHRvIHJlY29ubmVjdFxuICAgICAgY29uc3Qgb25saW5lID0gYXdhaXQgdGhpcy50cnlPbmxpbmUoe1xuICAgICAgICBzaG93T2ZmbGluZVRvYXN0OiBmYWxzZSxcbiAgICAgICAgc2hvd09ubGluZVRvYXN0OiB0b0Jvb2xlYW4ob3B0cyAmJiBvcHRzLnNob3dSZXRyeVN1Y2Nlc3NUb2FzdCwgdHJ1ZSksXG4gICAgICAgIHNob3dMb2FkaW5nVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5TG9hZGluZ1RvYXN0LCB0cnVlKSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG9ubGluZSkge1xuICAgICAgICAvLyBDYWxsIHN1Y2Nlc3MgY2FsbGJhY2sgKGFzeW5jKVxuICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uUmV0cnlTdWNjZXNzKSB7XG4gICAgICAgICAgc2V0VGltZW91dChvcHRzLm9uUmV0cnlTdWNjZXNzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgb3B0cyA9IHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgc2hvd1JldHJ5QnV0dG9uOiBmYWxzZSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTaW1wbGUgdG9hc3QsIHdpdGhvdXQgJ2F3YWl0JywgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0J3MgZGlzbWlzc1xuICAgIHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgIG1lc3NhZ2U6ICdFUlJPUi5ORVRXT1JLX1JFUVVJUkVEJyxcbiAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAuLi5vcHRzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBwZWVyIGlzIGFsaXZlXG4gICAqXG4gICAqIEBwYXJhbSBwZWVyXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBjaGVja1BlZXJBbGl2ZShwZWVyPzogc3RyaW5nIHwgUGVlcik6IFByb21pc2U8Tm9kZUluZm8+IHtcbiAgICBwZWVyID0gcGVlciB8fCB0aGlzLnBlZXI7XG4gICAgaWYgKCFwZWVyKSB7XG4gICAgICBjb25zdCBzZXR0aW5nczogTG9jYWxTZXR0aW5ncyA9IGF3YWl0IHRoaXMuc2V0dGluZ3MucmVhZHkoKTtcbiAgICAgIGlmICghc2V0dGluZ3MucGVlclVybCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gTm8gcGVlciBkZWZpbmUuIFNraXBcbiAgICAgIHBlZXIgPSBQZWVyLnBhcnNlVXJsKHNldHRpbmdzLnBlZXJVcmwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldE5vZGVJbmZvKHBlZXIsIHsgbm9jYWNoZTogdHJ1ZSwgdGltZW91dDogdGhpcy5fY29ubmVjdGlvblRpbWVvdXQgfSk7XG4gIH1cblxuICBhc3luYyBjaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvOiBOb2RlSW5mbywgb3B0cz86IHsgc2hvd1RvYXN0PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFwZWVySW5mbykgcmV0dXJuIGZhbHNlOyAvLyBQZWVyIGNhbm5vdCBiZSByZWFjaGVkXG4gICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uKSByZXR1cm4gdHJ1ZTsgLy8gU2tpcCBjb21wYXRpYmlsaXR5IGNoZWNrXG5cbiAgICAvLyBDaGVjayB0aGUgbWluIHBvZCB2ZXJzaW9uLCBkZWZpbmVkIGJ5IHRoZSBhcHBcbiAgICBjb25zdCBpc0NvbXBhdGlibGUgPSBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24gJiYgVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZSh0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uLCBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24pO1xuXG4gICAgLy8gRGlzcGxheSB0b2FzdCwgaWYgbm90IGNvbXBhdGlibGVcbiAgICBpZiAoIWlzQ29tcGF0aWJsZSAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnTkVUV09SSy5FUlJPUi5OT1RfQ09NUEFUSUJMRV9QRUVSJyxcbiAgICAgICAgbWVzc2FnZVBhcmFtczoge1xuICAgICAgICAgIHZlcnNpb246IHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb24sXG4gICAgICAgIH0sXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaXNDb21wYXRpYmxlO1xuICB9XG5cbiAgYXN5bmMgZ2V0Tm9kZUluZm8ocGVlcj86IHN0cmluZyB8IFBlZXIsIG9wdHM/OiB7IG5vY2FjaGU/OiBib29sZWFuOyB0aW1lb3V0PzogbnVtYmVyIH0pOiBQcm9taXNlPE5vZGVJbmZvPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICcvYXBpL25vZGUvaW5mbycpO1xuICAgIHRoaXMuX2xvZ2dlcj8uZGVidWcoJ2dldE5vZGVJbmZvJywgYEdldHRpbmcgJyR7cGF0aH0nIC4uLmApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGE6IE5vZGVJbmZvID0gYXdhaXQgdGhpcy5nZXQocGF0aCwgb3B0cyk7XG4gICAgICB0aGlzLl9sb2dnZXI/LmRlYnVnKCdnZXROb2RlSW5mbycsIGBSZXNwb25zZSBvZiAnJHtwYXRofSc6XFxuJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW25ldHdvcmtdIEVycm9yIHdoaWxlIGdldHRpbmcgJyR7cGF0aH0nOiAkeyhlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycn1gLCBlcnIpO1xuICAgICAgdGhpcy5fbG9nZ2VyPy5lcnJvcignZ2V0Tm9kZUluZm8nLCBgRXJyb3Igd2hpbGUgZ2V0dGluZyAnJHtwYXRofSc6ICR7ZXJyPy5tZXNzYWdlIHx8ICcnfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBNYW5pZmVzdChwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cz86IHsgbm9jYWNoZT86IGJvb2xlYW4gfSk6IFByb21pc2U8QXBwTWFuaWZlc3QgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHBhdGggPSB0aGlzLmNvbXB1dGVQZWVyUGF0aChwZWVyLCAnbWFuaWZlc3QuanNvbicpO1xuICAgICAgaWYgKG9wdHM/Lm5vY2FjaGUpIHtcbiAgICAgICAgcGF0aCArPSAnP3Q9JyArIERhdGUubm93KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXQocGF0aCwgb3B0cyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgJ21hbmlmZXN0Lmpzb24nLiBQbGVhc2UgbWFrZSBzdXJlIHdlYnNlcnZlciBjb25maWcgYWxsb3cgQ09SUyBhY2Nlc3NcIiwgZXJyKTtcbiAgICAgIGVsc2UgY29uc29sZS5lcnJvcihcIltuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlICdtYW5pZmVzdC5qc29uJy5cIiwgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXBwVmVyc2lvbihwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cyA9IHsgbm9jYWNoZTogdHJ1ZSB9KTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHBhdGggPSB0aGlzLmNvbXB1dGVQZWVyUGF0aChwZWVyLCAndmVyc2lvbi5hcHB1cCcpO1xuICAgICAgaWYgKG9wdHMubm9jYWNoZSkge1xuICAgICAgICBwYXRoICs9ICc/dD0nICsgRGF0ZS5ub3coKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwcFZlcnNpb246IHN0cmluZyA9IGF3YWl0IHRoaXMuZ2V0VGV4dChwYXRoLCBvcHRzKTtcbiAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsoYXBwVmVyc2lvbikpIHJldHVybiBhcHBWZXJzaW9uO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbilcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlICd2ZXJzaW9uLmFwcHVwJy4gUGxlYXNlIG1ha2Ugc3VyZSB3ZWJzZXJ2ZXIgY29uZmlnIGFsbG93IENPUlMgYWNjZXNzXCIpO1xuICAgICAgZWxzZSBjb25zb2xlLmVycm9yKFwiW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgJ3ZlcnNpb24uYXBwdXAnLlwiLCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICAvLyBUcnkgbG9hZGluZyBtYW5pZmVzdC5qc29uXG4gICAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEFwcE1hbmlmZXN0KHBlZXIsIG9wdHMpO1xuICAgIHJldHVybiBtYW5pZmVzdD8udmVyc2lvbjtcbiAgfVxuXG4gIGNvbXB1dGVQZWVyUGF0aChwZWVyOiBzdHJpbmcgfCBQZWVyIHwgdW5kZWZpbmVkLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHBlZXIgPSBwZWVyIHx8IHRoaXMucGVlcjtcbiAgICBpZiAoIXBlZXIpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgcGVlclVybCA9IHBlZXIgaW5zdGFuY2VvZiBQZWVyID8gcGVlci51cmwgOiAocGVlciBhcyBzdHJpbmcpO1xuXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gICAgaWYgKHBlZXJVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyaW5nKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGZpcnN0IHBhdGhcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICB9XG5cbiAgICAvLyBDb25jYXQgcGVlciBVUkwgYW5kIHBhdGhcbiAgICByZXR1cm4gcGVlclVybCArIHBhdGg7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdG8gZm9yY2Ugb2ZmbGluZSBtb2RlXG4gICAqL1xuICBzZXRGb3JjZU9mZmxpbmUoXG4gICAgdmFsdWU/OiBib29sZWFuLFxuICAgIG9wdHM/OiB7XG4gICAgICBzaG93VG9hc3Q/OiBib29sZWFuOyAvLyBEaXNwbGF5IGEgdG9hc3QsIHdoZW4gb2ZmbGluZSA/XG4gICAgfVxuICApIHtcbiAgICB2YWx1ZSA9IHRvQm9vbGVhbih2YWx1ZSwgdHJ1ZSk7XG4gICAgaWYgKHRoaXMuX2ZvcmNlT2ZmbGluZSAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzQ29ubmVjdGlvblR5cGUgPSB0aGlzLmNvbm5lY3Rpb25UeXBlO1xuICAgICAgdGhpcy5fZm9yY2VPZmZsaW5lID0gdmFsdWU7XG4gICAgICBjb25zdCBjdXJyZW50Q29ubmVjdGlvblR5cGUgPSB0aGlzLmNvbm5lY3Rpb25UeXBlO1xuXG4gICAgICBpZiAocHJldmlvdXNDb25uZWN0aW9uVHlwZSAhPT0gY3VycmVudENvbm5lY3Rpb25UeXBlKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIENvbm5lY3Rpb24gY2hhbmdlZCB0byB7JHtjdXJyZW50Q29ubmVjdGlvblR5cGV9fWApO1xuICAgICAgICB0aGlzLm9uTmV0d29ya1N0YXR1c0NoYW5nZXMubmV4dChjdXJyZW50Q29ubmVjdGlvblR5cGUpO1xuXG4gICAgICAgIC8vIE9mZmxpbmUgbW9kZTogYWxlcnQgdGhlIHVzZXJcbiAgICAgICAgaWYgKGN1cnJlbnRDb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnICYmICghb3B0cyB8fCBvcHRzLnNob3dUb2FzdCAhPT0gZmFsc2UpKSB7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcsIHR5cGU6ICd3YXJuaW5nJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNob3dTZWxlY3RQZWVyTW9kYWwob3B0cz86IFBhcnRpYWw8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+KTogUHJvbWlzZTxQZWVyIHwgdW5kZWZpbmVkPiB7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICBjb25zdCBwZWVycyA9IGF3YWl0IHRoaXMuZ2V0RGVmYXVsdFBlZXJzKCk7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBTZWxlY3RQZWVyTW9kYWwsXG4gICAgICBjb21wb25lbnRQcm9wczogPElTZWxlY3RQZWVyTW9kYWxPcHRpb25zPntcbiAgICAgICAgZGVmYXVsdFBlZXJzOiBwZWVycyxcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgIH0sXG4gICAgICBrZXlib2FyZENsb3NlOiB0cnVlLFxuICAgICAgc2hvd0JhY2tkcm9wOiB0cnVlLFxuICAgIH0pO1xuICAgIGF3YWl0IG1vZGFsLnByZXNlbnQoKTtcblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgbW9kYWwub25XaWxsRGlzbWlzcygpO1xuXG4gICAgcmV0dXJuIChkYXRhICYmIChkYXRhIGFzIFBlZXIpKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBhc3luYyBjbGVhckNhY2hlKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBDbGVhcmluZyBhbGwgY2FjaGVzLi4uJyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVcbiAgICAgIC5jbGVhckFsbCgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIC8vIEVtaXQgZXZlbnRcbiAgICAgICAgaWYgKCghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpICYmIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5vYnNlcnZlZCkge1xuICAgICAgICAgIHRoaXMub25SZXNldE5ldHdvcmtDYWNoZS5lbWl0KCk7XG5cbiAgICAgICAgICAvLyBXYWl0IG9ic2VydmVycyBjbGVhbiB0aGVpciBjYWNoZXMsIGlmIG5lZWRcbiAgICAgICAgICByZXR1cm4gc2xlZXAoNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gQWxsIGNhY2hlIGNsZWFyZWQsIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgfSk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgZnVuY3Rpb25zIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydChwZWVyPzogUGVlcik6IFByb21pc2U8UGVlcj4ge1xuICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIFN0YXJ0aW5nIG5ldHdvcmsuLi4nKTtcblxuICAgIC8vIENoZWNrIGlmIGNhbiB1c2UgTmV0d29yayBwbHVnaW5cbiAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gQ2FwYWNpdG9yIE5ldHdvcmsgcGx1Z2luIGlzICR7Q2FwYWNpdG9yLmlzUGx1Z2luQXZhaWxhYmxlKCdOZXR3b3JrJykgPyAnYXZhaWxhYmxlJyA6ICdub3QgYXZhaWxhYmxlJ31gKTtcblxuICAgIC8vIFJlc3RvcmluZyBsb2NhbCBzZXR0aW5nc1xuICAgIHBlZXIgPSBwZWVyIHx8IChhd2FpdCB0aGlzLnJlc3RvcmVMb2NhbGx5KCkpO1xuXG4gICAgaWYgKCFwZWVyKSB7XG4gICAgICAvLyBNYWtlIHN1cmUgdG8gaGlkZSB0aGUgc3BsYXNoc2NyZWVuLCBiZWZvcmUgb3BlbiB0aGUgbW9kYWxcbiAgICAgIGF3YWl0IFNwbGFzaFNjcmVlbi5oaWRlKCk7XG5cbiAgICAgIC8vIE5vIHBlZXIgaW4gc2V0dGluZ3M6IGFzayB1c2VyIHRvIGNob29zZVxuICAgICAgd2hpbGUgKCFwZWVyKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBObyBwZWVyIGRlZmluZWQuIEFza2luZyB1c2VyIHRvIGNob29zZSBhIHBlZXIuJyk7XG4gICAgICAgIHBlZXIgPSBhd2FpdCB0aGlzLnNob3dTZWxlY3RQZWVyTW9kYWwoeyBhbGxvd1NlbGVjdERvd25QZWVyOiBmYWxzZSwgdGl0bGU6ICdORVRXT1JLLlBFRVIuU0VMRUNUX01PREFMLlNUQVJUVVBfVElUTEUnLCBjYW5DYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vbmxpbmUpIHtcbiAgICAgIC8vIENoZWNrIGlmIGFsaXZlLiBJZiBub3QsIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgY29uc3QgYWxpdmUgPSBhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpO1xuICAgICAgaWYgKCFhbGl2ZSkge1xuICAgICAgICAvLyBQZWVyIG5vdCBhbGl2ZSwgYnV0IHNob3VsZCBiZSBhdCB0aGUgc2FtZSBVUkwsIHJldHJ5aW5nIGVhY2ggMXNcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuc2FtZVVybFBlZXIpIHtcbiAgICAgICAgICBjb25zdCByZXRyeU1zID0gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQgPiAwID8gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQgOiAxMDAwO1xuICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGltZXIocmV0cnlNcywgcmV0cnlNcykucGlwZShcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFN1YmplY3QpLFxuICAgICAgICAgICAgICB0YXAoKCkgPT4gY29uc29sZS53YXJuKGBbbmV0d29yay1zZXJ2aWNlXSBXYWl0aW5nIHBlZXIgYmUgYmUgYWxpdmUsIGF0IHske3BlZXIudXJsfX0gLi4uYCkpLFxuICAgICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpKSxcbiAgICAgICAgICAgICAgZmlsdGVyKChhbGl2ZSkgPT4gISFhbGl2ZSksXG4gICAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENvbnRpbnVlLCBpbiBvZmZsaW5lIG1vZGVcbiAgICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHNlcnZpY2UgW09LXSB7cGVlcjogJyR7cGVlci51cmx9Jywgb25saW5lOiAke3RoaXMub25saW5lfX1gKTtcblxuICAgIHJldHVybiBwZWVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25BZnRlclN0YXJ0KHBlZXI6IFBlZXIpIHtcbiAgICAvLyBXYWl0IHNldHRpbmdzIHN0YXJ0cywgdGhlbiBzYXZlIHBlZXIgaW4gc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLmFwcGx5KHsgcGVlclVybDogcGVlci51cmwgfSk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGRldmljZSBuZXR3b3JrIGNoYW5nZXNcbiAgICBpZiAoTmV0d29ya1V0aWxzLmlzUGx1Z2luQXZhaWxhYmxlKCkpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25UeXBlID0gYXdhaXQgTmV0d29ya1V0aWxzLmdldENvbm5lY3Rpb25UeXBlKCk7XG4gICAgICB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoY29ubmVjdGlvblR5cGUpO1xuXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICBOZXR3b3JrVXRpbHMuc3RhdHVzQ2hhbmdlcygpLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoc3RhdHVzPy5jb25uZWN0aW9uVHlwZSB8fCAndW5rbm93bicpKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKCd1bmtub3duJyk7XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgdGhlIHJlZnJlc2ggdGltZXJcbiAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbmdPblN0b3AoKSB7XG4gICAgLy8gU3RvcCB0aW1lciwgaWYgY2Fubm90IHJlZnJlc2ggYW55bW9yZVxuICAgIGlmICh0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24oKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc3RvcFJlZnJlc2hUaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gcmVzdG9yZSBwZWVyIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2VcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyByZXN0b3JlTG9jYWxseSgpOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBGb3JjZSB1c2UgcHJlZGVmaW5lZCBwZWVyIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucGVlcikge1xuICAgICAgcmV0dXJuIFBlZXIuZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50LnBlZXIpO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgZnJvbSBzdG9yYWdlXG4gICAgbGV0IHNldHRpbmdzID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldChTRVRUSU5HU19TVE9SQUdFX0tFWSk7XG4gICAgc2V0dGluZ3MgPSB0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShzZXR0aW5ncykgOiBzZXR0aW5ncztcbiAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MucGVlclVybCkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW25ldHdvcmtdIFVzZSBwZWVyIHske3NldHRpbmdzLnBlZXJVcmx9fSAoZm91bmQgaW4gdGhlIGxvY2FsIHN0b3JhZ2UpYCk7XG4gICAgICByZXR1cm4gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCB1c2UgZGVmYXVsdCBwZWVyIGluIGVudiwgaWYgZXhpc3RzXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpIHtcbiAgICAgIHJldHVybiBQZWVyLmZyb21PYmplY3QodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlcik7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgaWYgQXBwIGlzIGhvc3RlZCwgdHJ5IHRoZSB3ZWJzaXRlIGFzIGEgcGVlclxuICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5fZG9jdW1lbnQ/LmxvY2F0aW9uO1xuICAgIGlmIChsb2NhdGlvbj8ucHJvdG9jb2w/LnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgY29uc3QgaG9zdG5hbWUgPSB0aGlzLl9kb2N1bWVudC5sb2NhdGlvbi5ob3N0O1xuICAgICAgY29uc3QgZGV0ZWN0ZWRQZWVyID0gUGVlci5wYXJzZVVybChgJHt0aGlzLl9kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbH0ke2hvc3RuYW1lfSR7dGhpcy5lbnZpcm9ubWVudC5iYXNlVXJsfWApO1xuXG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zYW1lVXJsUGVlciB8fCAoYXdhaXQgdGhpcy5jaGVja1BlZXJBbGl2ZShkZXRlY3RlZFBlZXIpKSkge1xuICAgICAgICByZXR1cm4gZGV0ZWN0ZWRQZWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0byBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdG9wUmVmcmVzaFRpbWVyKCkge1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBuZXR3b3JrIHN0YXRlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzdGFydFJlZnJlc2hUaW1lcigpIHtcbiAgICBpZiAodGhpcy5fdGltZXJTdWJzY3JpcHRpb24pIHJldHVybjsgLy8gQWxyZWFkeSBydW5uaW5nOiBza2lwXG5cbiAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBTdGFydGluZyByZWZyZXNoIHRpbWVyLCBldmVyeSAke3RoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZH1tcy4uLmApO1xuXG4gICAgbGV0IGxhc3RJbmZvOiBOb2RlSW5mbztcbiAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKHRoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZCwgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kKVxuICAgICAgLnBpcGUoXG4gICAgICAgIC8vIFNraXAgc29tZSB0aW1lciBldmVudCAoc2VlIGNvbnN0cnVjdG9yKVxuICAgICAgICBmaWx0ZXIodGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uKSxcblxuICAgICAgICAvLyBDaGVja2luIGlmIHBlZXIgYWxpdmVcbiAgICAgICAgdGFwKCgpID0+IGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5jaGVja1BlZXJBbGl2ZSh0aGlzLnBlZXIpKSxcblxuICAgICAgICAvLyBGaWx0ZXIgdG8ga2VlcCBvbmx5IGNoYW5nZXNcbiAgICAgICAgZmlsdGVyKChpbmZvKSA9PiAhZXF1YWxzKGluZm8sIGxhc3RJbmZvKSksXG4gICAgICAgIHRhcCgoaW5mbykgPT4gKGxhc3RJbmZvID0gaW5mbykpLFxuXG4gICAgICAgIC8vIENoZWNrIGNvbXBhdGliaWxpdHlcbiAgICAgICAgbWVyZ2VNYXAoKGluZm8pID0+IHRoaXMuY2hlY2tQZWVyQ29tcGF0aWJsZShpbmZvLCB7IHNob3dUb2FzdDogdHJ1ZSB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGFsaXZlKSA9PiB7XG4gICAgICAgIGlmIChhbGl2ZSAmJiB0aGlzLm9mZmxpbmUpIHtcbiAgICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZShmYWxzZSk7XG5cbiAgICAgICAgICAvLyBSZXN0YXJ0IHRoZSBzZXJ2aWNlICh0byBmb3JjZSByZSBhdXRoKVxuICAgICAgICAgIHRoaXMucmVzdGFydCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCFhbGl2ZSAmJiB0aGlzLm9ubGluZSkge1xuICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKHRydWUpO1xuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgc2VydmljZVxuICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uLmFkZCgoKSA9PiBjb25zb2xlLmRlYnVnKCdbbmV0d29ya10gUmVmcmVzaCB0aW1lciBzdG9wcGVkJykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldFRleHQoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdHM/OiB7XG4gICAgICBoZWFkZXJzPzpcbiAgICAgICAgfCBIdHRwSGVhZGVyc1xuICAgICAgICB8IHtcbiAgICAgICAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgICAgIH07XG4gICAgICByZXNwb25zZVR5cGU/OiAndGV4dCc7XG4gICAgICBub2NhY2hlPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIEh0dHBVdGlscy5nZXRUZXh0KHRoaXMuaHR0cCwgdGhpcy5nZXRVcmkocGF0aCksIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldDxUPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IHtcbiAgICAgIGhlYWRlcnM/OlxuICAgICAgICB8IEh0dHBIZWFkZXJzXG4gICAgICAgIHwge1xuICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgICAgfTtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICAgICAgdGltZW91dD86IG51bWJlcjtcbiAgICB9XG4gICk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBIdHRwVXRpbHMuZ2V0SnNvbjxUPih0aGlzLmh0dHAsIHRoaXMuZ2V0VXJpKHBhdGgpLCBvcHRzKTtcbiAgfVxuXG4gIC8qIC0tIFByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGdldFVyaShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB1cmkgPSBwYXRoO1xuXG4gICAgLy8gSWYgcGF0aCBpcyBub3QgYW4gVVJJOiBwcmVwZW5kIHdpdGggcGVlciBVUkxcbiAgICBpZiAoIXVyaS5zdGFydHNXaXRoKCdodHRwOi8vJykgJiYgIXVyaS5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICBsZXQgcGVlclVybCA9IHRoaXMucGVlciAmJiB0aGlzLnBlZXIudXJsO1xuXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyaW5nKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBmaXJzdCBwYXRoXG4gICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgdGhlIFVSSTogY29uY2F0IHBlZXIgVVJMIGFuZCBwYXRoXG4gICAgICB1cmkgPSBwZWVyVXJsICsgcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuICBwcm90ZWN0ZWQgb25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZChjb25uZWN0aW9uVHlwZT86IENvbm5lY3Rpb25UeXBlKSB7XG4gICAgaWYgKGNvbm5lY3Rpb25UeXBlICE9PSB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSkge1xuICAgICAgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPSBjb25uZWN0aW9uVHlwZTtcblxuICAgICAgLy8gSWYgTk9UIGFscmVhZHkgZm9yY2VkIGFzIG9mZmxpbmUsIGVtaXQgZXZlbnRcbiAgICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIENvbm5lY3Rpb24gY2hhbmdlZCB0byB7JHt0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBDaGFuZ2UgdG8gb2ZmbGluZVxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgICAgICAgdGhpcy5fZm9yY2VPZmZsaW5lID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQWxlcnQgdGhlIHVzZXJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHsgbWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FX0hFTFAnLCB0eXBlOiAnd2FybmluZycgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORScsIHR5cGU6ICd3YXJuaW5nJyB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdG9wIHRoZSBuZXR3b3JrIHNlcnZpY2VcbiAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVmYXVsdCBwZWVycywgZnJvbSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldERlZmF1bHRQZWVycygpOiBQcm9taXNlPFBlZXJbXT4ge1xuICAgIGNvbnN0IHBlZXJzID0gKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXJzIHx8IFtdKS5tYXAoUGVlci5mcm9tT2JqZWN0KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBlZXJzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Q8VCA9IGFueT4ob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8T3ZlcmxheUV2ZW50RGV0YWlsPFQ+PiB7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTGlzdGVuZXI8VCA9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTx2b2lkPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdIHx8IFtdO1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblxuICAgIC8vIFdoZW4gdW5zdWJzY3JpYmUsIHJlbW92ZSBmcm9tIHRoZSBsaXN0ZW5lclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0PFQgPSBhbnk+KG5hbWU6IE5ldHdvcmtFdmVudFR5cGUsIGRhdGE/OiBUKSB7XG4gICAgY29uc3QgaG9va3MgPSB0aGlzLl9saXN0ZW5lcnNbbmFtZV07XG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShob29rcykpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmstc2VydmljZV0gVHJpZ2dlciAke25hbWV9IGhvb2s6IEV4ZWN1dGluZyAke2hvb2tzLmxlbmd0aH0gY2FsbGJhY2tzLi4uYCk7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgaG9va3MubWFwKChjYWxsYmFjaykgPT4ge1xuICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgICBpZiAoIXByb21pc2UpIHJldHVybjtcbiAgICAgICAgICByZXR1cm4gcHJvbWlzZS5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBleGVjdXRpbmcgaG9vayAnICsgbmFtZSwgZXJyKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,20 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
switch (type) {
|
|
4
|
-
case Connection.NONE:
|
|
5
|
-
return 'none';
|
|
6
|
-
case Connection.ETHERNET:
|
|
7
|
-
return 'ethernet';
|
|
8
|
-
case Connection.WIFI:
|
|
9
|
-
return 'wifi';
|
|
10
|
-
case Connection.CELL:
|
|
11
|
-
case Connection.CELL_2G:
|
|
12
|
-
case Connection.CELL_3G:
|
|
13
|
-
case Connection.CELL_4G:
|
|
14
|
-
return 'cellular';
|
|
15
|
-
case Connection.UNKNOWN:
|
|
16
|
-
default:
|
|
17
|
-
return 'unknown';
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQU1sRSxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBeUI7SUFDekQsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssVUFBVSxDQUFDLElBQUk7WUFDbEIsT0FBdUIsTUFBTSxDQUFDO1FBQ2hDLEtBQUssVUFBVSxDQUFDLFFBQVE7WUFDdEIsT0FBdUIsVUFBVSxDQUFDO1FBQ3BDLEtBQUssVUFBVSxDQUFDLElBQUk7WUFDbEIsT0FBdUIsTUFBTSxDQUFDO1FBQ2hDLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQztRQUNyQixLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDeEIsS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3hCLEtBQUssVUFBVSxDQUFDLE9BQU87WUFDckIsT0FBdUIsVUFBVSxDQUFDO1FBQ3BDLEtBQUssVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUN4QjtZQUNFLE9BQXVCLFNBQVMsQ0FBQztJQUNyQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbm5lY3Rpb24gfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvbmV0d29yay9uZ3gnO1xuXG5leHBvcnQgdHlwZSBDb25uZWN0aW9uVHlwZSA9ICdub25lJyB8ICd3aWZpJyB8ICdldGhlcm5ldCcgfCAnY2VsbHVsYXInIHwgJ3Vua25vd24nO1xuXG5leHBvcnQgdHlwZSBBdXRoVG9rZW5UeXBlID0gJ3Rva2VuJyB8ICdiYXNpYycgfCAnYmFzaWMtYW5kLXRva2VuJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbm5lY3Rpb25UeXBlKHR5cGU6IENvbm5lY3Rpb24gfCBzdHJpbmcpOiBDb25uZWN0aW9uVHlwZSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgQ29ubmVjdGlvbi5OT05FOlxuICAgICAgcmV0dXJuIDxDb25uZWN0aW9uVHlwZT4nbm9uZSc7XG4gICAgY2FzZSBDb25uZWN0aW9uLkVUSEVSTkVUOlxuICAgICAgcmV0dXJuIDxDb25uZWN0aW9uVHlwZT4nZXRoZXJuZXQnO1xuICAgIGNhc2UgQ29ubmVjdGlvbi5XSUZJOlxuICAgICAgcmV0dXJuIDxDb25uZWN0aW9uVHlwZT4nd2lmaSc7XG4gICAgY2FzZSBDb25uZWN0aW9uLkNFTEw6XG4gICAgY2FzZSBDb25uZWN0aW9uLkNFTExfMkc6XG4gICAgY2FzZSBDb25uZWN0aW9uLkNFTExfM0c6XG4gICAgY2FzZSBDb25uZWN0aW9uLkNFTExfNEc6XG4gICAgICByZXR1cm4gPENvbm5lY3Rpb25UeXBlPidjZWxsdWxhcic7XG4gICAgY2FzZSBDb25uZWN0aW9uLlVOS05PV046XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiA8Q29ubmVjdGlvblR5cGU+J3Vua25vd24nO1xuICB9XG59XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgTmV0d29ya0V2ZW50VHlwZSA9ICdzdGFydCcgfCAncGVlckNoYW5nZWQnIHwgJ3N0YXR1c0NoYW5nZWQnIHwgJ3Jlc2V0Q2FjaGUnIHwgJ2JlZm9yZVRyeU9ubGluZUZpbmlzaCc7XG4iXX0=
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBBdXRoVG9rZW5UeXBlID0gJ3Rva2VuJyB8ICdiYXNpYycgfCAnYmFzaWMtYW5kLXRva2VuJztcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBOZXR3b3JrRXZlbnRUeXBlID0gJ3N0YXJ0JyB8ICdwZWVyQ2hhbmdlZCcgfCAnc3RhdHVzQ2hhbmdlZCcgfCAncmVzZXRDYWNoZScgfCAnYmVmb3JlVHJ5T25saW5lRmluaXNoJztcblxuZXhwb3J0IHR5cGUgQ29ubmVjdGlvblR5cGUgPSAnbm9uZScgfCAnd2lmaScgfCAnY2VsbHVsYXInIHwgJ3Vua25vd24nO1xuIl19
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { HttpUtils } from '../../shared/http/http.utils';
|
|
2
2
|
import { Peer } from './model/peer.model';
|
|
3
|
+
import { Network } from '@capacitor/network';
|
|
4
|
+
import { Observable } from 'rxjs';
|
|
5
|
+
import { Capacitor } from '@capacitor/core';
|
|
3
6
|
export class NetworkUtils {
|
|
4
7
|
static async getNodeInfo(http, peer, opts) {
|
|
5
8
|
if (!peer)
|
|
@@ -11,5 +14,22 @@ export class NetworkUtils {
|
|
|
11
14
|
}
|
|
12
15
|
return HttpUtils.getJson(http, peerUrl + '/api/node/info', opts);
|
|
13
16
|
}
|
|
17
|
+
static isPluginAvailable() {
|
|
18
|
+
return Capacitor.isPluginAvailable('Network');
|
|
19
|
+
}
|
|
20
|
+
static statusChanges() {
|
|
21
|
+
return new Observable((subscriber) => {
|
|
22
|
+
const handler = Network.addListener('networkStatusChange', (status) => subscriber.next(status));
|
|
23
|
+
return () => {
|
|
24
|
+
handler.then((listener) => listener.remove());
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
static async getConnectionType() {
|
|
29
|
+
if (NetworkUtils.isPluginAvailable()) {
|
|
30
|
+
return (await Network.getStatus())?.connectionType || 'unknown';
|
|
31
|
+
}
|
|
32
|
+
return 'unknown';
|
|
33
|
+
}
|
|
14
34
|
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUFvQyxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFpQzVDLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUN0QixJQUFnQixFQUNoQixJQUFtQixFQUNuQixJQU9DO1FBRUQsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRW5ELElBQUksT0FBTyxHQUFHLElBQUksWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFFLElBQWUsQ0FBQztRQUNqRSx3QkFBd0I7UUFDeEIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxHQUFHLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCO1FBQ3RCLE9BQU8sU0FBUyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYTtRQUNsQixPQUFPLElBQUksVUFBVSxDQUFtQixDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3JELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUF3QixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDbEgsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7UUFDNUIsSUFBSSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxNQUFNLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLGNBQWMsSUFBSSxTQUFTLENBQUM7UUFDbEUsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSHR0cFV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2h0dHAvaHR0cC51dGlscyc7XG5pbXBvcnQgeyBQZWVyIH0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IE5vZGVGZWF0dXJlIH0gZnJvbSAnLi9tb2RlbC9ub2RlLWZlYXR1cmUubW9kZWwnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblN0YXR1cywgQ29ubmVjdGlvblR5cGUsIE5ldHdvcmsgfSBmcm9tICdAY2FwYWNpdG9yL25ldHdvcmsnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYXBhY2l0b3IgfSBmcm9tICdAY2FwYWNpdG9yL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVJbmZvIHtcbiAgc29mdHdhcmVOYW1lOiBzdHJpbmc7XG4gIHNvZnR3YXJlVmVyc2lvbjogc3RyaW5nO1xuICBub2RlTGFiZWw/OiBzdHJpbmc7XG4gIG5vZGVOYW1lPzogc3RyaW5nO1xuICBmZWF0dXJlcz86IE5vZGVGZWF0dXJlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwTWFuaWZlc3Qge1xuICAvLyBtYW5kYXRvcnlcbiAgbWFuaWZlc3RfdmVyc2lvbjogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcblxuICAvLyBBcHAgc3RhcnQgKHJlcXVpcmVkIGJ5IHBsYXRmb3JtIHNlcnZpY2UpXG4gIHN0YXJ0X3VybDogc3RyaW5nO1xuXG4gIC8vIG9wdGlvbmFsXG4gIHNob3J0X25hbWU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB2ZXJzaW9uX25hbWU/OiBzdHJpbmc7XG4gIGF1dGhvcj86IHN0cmluZztcbiAgZGVmYXVsdF9sb2NhbGU/OiBzdHJpbmc7XG5cbiAgLy8gb3B0aW9uYWwgVUlcbiAgaWNvbnM/OiBhbnkgfCBhbnlbXTtcbiAgYmFja2dyb3VuZF9jb2xvcj86IHN0cmluZztcbiAgdGhlbWVfY29sb3I/OiBzdHJpbmc7XG4gIGRpc3BsYXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBOZXR3b3JrVXRpbHMge1xuICBzdGF0aWMgYXN5bmMgZ2V0Tm9kZUluZm8oXG4gICAgaHR0cDogSHR0cENsaWVudCxcbiAgICBwZWVyOiBzdHJpbmcgfCBQZWVyLFxuICAgIG9wdHM/OiB7XG4gICAgICBoZWFkZXJzPzpcbiAgICAgICAgfCBIdHRwSGVhZGVyc1xuICAgICAgICB8IHtcbiAgICAgICAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgICAgIH07XG4gICAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgfVxuICApOiBQcm9taXNlPE5vZGVJbmZvPiB7XG4gICAgaWYgKCFwZWVyKSB0aHJvdyBFcnJvcihcIk1pc3NpbmcgYXJndW1lbnQgJ3BlZXInLlwiKTtcblxuICAgIGxldCBwZWVyVXJsID0gcGVlciBpbnN0YW5jZW9mIFBlZXIgPyBwZWVyLnVybCA6IChwZWVyIGFzIHN0cmluZyk7XG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gICAgaWYgKHBlZXJVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEh0dHBVdGlscy5nZXRKc29uKGh0dHAsIHBlZXJVcmwgKyAnL2FwaS9ub2RlL2luZm8nLCBvcHRzKTtcbiAgfVxuXG4gIHN0YXRpYyBpc1BsdWdpbkF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2FwYWNpdG9yLmlzUGx1Z2luQXZhaWxhYmxlKCdOZXR3b3JrJyk7XG4gIH1cblxuICBzdGF0aWMgc3RhdHVzQ2hhbmdlcygpOiBPYnNlcnZhYmxlPENvbm5lY3Rpb25TdGF0dXM+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8Q29ubmVjdGlvblN0YXR1cz4oKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBOZXR3b3JrLmFkZExpc3RlbmVyKCduZXR3b3JrU3RhdHVzQ2hhbmdlJywgKHN0YXR1czogQ29ubmVjdGlvblN0YXR1cykgPT4gc3Vic2NyaWJlci5uZXh0KHN0YXR1cykpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaGFuZGxlci50aGVuKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIucmVtb3ZlKCkpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRDb25uZWN0aW9uVHlwZSgpOiBQcm9taXNlPENvbm5lY3Rpb25UeXBlPiB7XG4gICAgaWYgKE5ldHdvcmtVdGlscy5pc1BsdWdpbkF2YWlsYWJsZSgpKSB7XG4gICAgICByZXR1cm4gKGF3YWl0IE5ldHdvcmsuZ2V0U3RhdHVzKCkpPy5jb25uZWN0aW9uVHlwZSB8fCAndW5rbm93bic7XG4gICAgfVxuICAgIHJldHVybiAndW5rbm93bic7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -5,11 +5,11 @@ export class IsLoginAccountPipe {
|
|
|
5
5
|
transform(value) {
|
|
6
6
|
return value && value.pubkey && true;
|
|
7
7
|
}
|
|
8
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
9
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.
|
|
10
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.
|
|
8
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IsLoginAccountPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
9
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: IsLoginAccountPipe, name: "isLogin" });
|
|
10
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IsLoginAccountPipe, providedIn: 'root' });
|
|
11
11
|
}
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IsLoginAccountPipe, decorators: [{
|
|
13
13
|
type: Pipe,
|
|
14
14
|
args: [{
|
|
15
15
|
name: 'isLogin',
|
|
@@ -22,11 +22,11 @@ export class AccountToStringPipe {
|
|
|
22
22
|
transform(value) {
|
|
23
23
|
return accountToString(value);
|
|
24
24
|
}
|
|
25
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
26
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.
|
|
27
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.
|
|
25
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AccountToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
26
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AccountToStringPipe, name: "accountToString" });
|
|
27
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AccountToStringPipe, providedIn: 'root' });
|
|
28
28
|
}
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AccountToStringPipe, decorators: [{
|
|
30
30
|
type: Pipe,
|
|
31
31
|
args: [{
|
|
32
32
|
name: 'accountToString',
|
|
@@ -7,11 +7,11 @@ export class DepartmentToStringPipe {
|
|
|
7
7
|
return departmentsToString(value, separator);
|
|
8
8
|
return departmentToString(value);
|
|
9
9
|
}
|
|
10
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
11
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.
|
|
12
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.
|
|
10
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DepartmentToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
11
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DepartmentToStringPipe, name: "departmentToString" });
|
|
12
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DepartmentToStringPipe, providedIn: 'root' });
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DepartmentToStringPipe, decorators: [{
|
|
15
15
|
type: Pipe,
|
|
16
16
|
args: [{
|
|
17
17
|
name: 'departmentToString',
|
|
@@ -7,11 +7,11 @@ export class PersonToStringPipe {
|
|
|
7
7
|
return PersonUtils.personsToString(value, separator, opts);
|
|
8
8
|
return PersonUtils.personToString(value, opts);
|
|
9
9
|
}
|
|
10
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
11
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.
|
|
12
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.
|
|
10
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PersonToStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
11
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: PersonToStringPipe, name: "personToString" });
|
|
12
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PersonToStringPipe, providedIn: 'root' });
|
|
13
13
|
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PersonToStringPipe, decorators: [{
|
|
15
15
|
type: Pipe,
|
|
16
16
|
args: [{
|
|
17
17
|
name: 'personToString',
|