@decaf-ts/core 0.8.85 → 0.9.1-9.tasks
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/README.md +1 -1
- package/dist/core.cjs +6705 -2
- package/dist/core.js +6932 -2
- package/lib/auth/constants.cjs +1 -1
- package/lib/auth/decorators.cjs +1 -1
- package/lib/auth/index.cjs +1 -1
- package/lib/esm/auth/constants.js +1 -1
- package/lib/esm/auth/decorators.js +1 -1
- package/lib/esm/auth/index.js +1 -1
- package/lib/esm/fs/FilesystemAdapter.d.ts +1 -0
- package/lib/esm/fs/FilesystemAdapter.js +3 -2
- package/lib/esm/fs/FsDispatch.js +1 -1
- package/lib/esm/fs/helpers.js +1 -1
- package/lib/esm/fs/index.js +1 -1
- package/lib/esm/fs/indexStore.js +1 -1
- package/lib/esm/fs/locks/FilesystemLock.js +1 -1
- package/lib/esm/fs/locks/FilesystemMultiLock.js +1 -1
- package/lib/esm/fs/types.d.ts +6 -0
- package/lib/esm/fs/types.js +1 -1
- package/lib/esm/identity/decorators.js +1 -1
- package/lib/esm/identity/index.js +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +2 -2
- package/lib/esm/interfaces/ContextuallyLogged.js +1 -1
- package/lib/esm/interfaces/ErrorParser.js +1 -1
- package/lib/esm/interfaces/Executor.js +1 -1
- package/lib/esm/interfaces/Observable.js +1 -1
- package/lib/esm/interfaces/Observer.js +1 -1
- package/lib/esm/interfaces/Paginatable.js +1 -1
- package/lib/esm/interfaces/Queriable.js +1 -1
- package/lib/esm/interfaces/RawExecutor.js +1 -1
- package/lib/esm/interfaces/SequenceOptions.js +1 -1
- package/lib/esm/interfaces/index.js +1 -1
- package/lib/esm/migrations/Migration.js +1 -1
- package/lib/esm/migrations/MigrationService.js +1 -1
- package/lib/esm/migrations/MigrationTasks.js +1 -1
- package/lib/esm/migrations/constants.js +1 -1
- package/lib/esm/migrations/decorators.js +1 -1
- package/lib/esm/migrations/index.js +1 -1
- package/lib/esm/migrations/types.js +1 -1
- package/lib/esm/model/BaseModel.js +1 -1
- package/lib/esm/model/SequenceModel.js +1 -1
- package/lib/esm/model/construction.d.ts +1 -1
- package/lib/esm/model/construction.js +25 -3
- package/lib/esm/model/decorators.js +1 -1
- package/lib/esm/model/index.js +1 -1
- package/lib/esm/model/indexing.js +1 -1
- package/lib/esm/model/types.js +1 -1
- package/lib/esm/overrides/Metadata.js +1 -1
- package/lib/esm/overrides/Model.js +1 -1
- package/lib/esm/overrides/ModelBuilder.js +1 -1
- package/lib/esm/overrides/index.js +1 -1
- package/lib/esm/overrides/injectables.js +1 -1
- package/lib/esm/overrides/overrides.js +29 -1
- package/lib/esm/persistence/Adapter.js +14 -2
- package/lib/esm/persistence/Context.js +1 -1
- package/lib/esm/persistence/ContextLock.js +1 -1
- package/lib/esm/persistence/Dispatch.d.ts +7 -0
- package/lib/esm/persistence/Dispatch.js +20 -3
- package/lib/esm/persistence/ObserverHandler.js +1 -1
- package/lib/esm/persistence/Sequence.js +1 -1
- package/lib/esm/persistence/constants.js +2 -1
- package/lib/esm/persistence/decorators.js +1 -1
- package/lib/esm/persistence/errors.js +1 -1
- package/lib/esm/persistence/event-filters.js +1 -1
- package/lib/esm/persistence/generators.js +1 -1
- package/lib/esm/persistence/index.js +1 -1
- package/lib/esm/persistence/transactions.js +1 -1
- package/lib/esm/persistence/types.d.ts +1 -0
- package/lib/esm/persistence/types.js +1 -1
- package/lib/esm/query/Condition.js +1 -1
- package/lib/esm/query/MethodQueryBuilder.js +1 -1
- package/lib/esm/query/Paginator.js +1 -1
- package/lib/esm/query/Statement.js +1 -1
- package/lib/esm/query/constants.js +1 -1
- package/lib/esm/query/decorators.js +1 -1
- package/lib/esm/query/errors.js +1 -1
- package/lib/esm/query/index.js +1 -1
- package/lib/esm/query/options.js +1 -1
- package/lib/esm/query/selectors.js +1 -1
- package/lib/esm/query/types.js +1 -1
- package/lib/esm/query/utils.js +1 -1
- package/lib/esm/ram/RamAdapter.js +1 -1
- package/lib/esm/ram/RamPaginator.js +1 -1
- package/lib/esm/ram/RamStatement.js +1 -1
- package/lib/esm/ram/constants.js +1 -1
- package/lib/esm/ram/handlers.js +1 -1
- package/lib/esm/ram/index.js +1 -1
- package/lib/esm/ram/types.js +1 -1
- package/lib/esm/repository/Repository.d.ts +2 -2
- package/lib/esm/repository/Repository.js +19 -16
- package/lib/esm/repository/constants.js +1 -1
- package/lib/esm/repository/decorators.js +2 -2
- package/lib/esm/repository/errors.js +1 -1
- package/lib/esm/repository/index.js +1 -1
- package/lib/esm/repository/injectables.js +4 -2
- package/lib/esm/repository/types.js +1 -1
- package/lib/esm/repository/utils.js +1 -1
- package/lib/esm/services/ModelService.d.ts +4 -5
- package/lib/esm/services/ModelService.js +4 -2
- package/lib/esm/services/PersistenceService.js +1 -1
- package/lib/esm/services/index.js +1 -1
- package/lib/esm/services/services.js +1 -1
- package/lib/esm/tasks/CleanUpTask.js +1 -1
- package/lib/esm/tasks/TaskContext.d.ts +3 -1
- package/lib/esm/tasks/TaskContext.js +9 -2
- package/lib/esm/tasks/TaskEngine.d.ts +2 -0
- package/lib/esm/tasks/TaskEngine.js +84 -20
- package/lib/esm/tasks/TaskErrors.js +1 -1
- package/lib/esm/tasks/TaskEventBus.js +1 -1
- package/lib/esm/tasks/TaskEventService.d.ts +7 -0
- package/lib/esm/tasks/TaskEventService.js +16 -0
- package/lib/esm/tasks/TaskHandler.js +1 -1
- package/lib/esm/tasks/TaskHandlerRegistry.js +1 -1
- package/lib/esm/tasks/TaskService.d.ts +5 -1
- package/lib/esm/tasks/TaskService.js +11 -37
- package/lib/esm/tasks/TaskStateChangeError.js +1 -1
- package/lib/esm/tasks/TaskTracker.js +1 -1
- package/lib/esm/tasks/builder.js +1 -1
- package/lib/esm/tasks/constants.js +1 -1
- package/lib/esm/tasks/decorators.js +1 -1
- package/lib/esm/tasks/index.d.ts +1 -0
- package/lib/esm/tasks/index.js +2 -1
- package/lib/esm/tasks/logging.js +4 -7
- package/lib/esm/tasks/models/TaskBackoffModel.js +1 -1
- package/lib/esm/tasks/models/TaskErrorModel.js +1 -1
- package/lib/esm/tasks/models/TaskEventModel.js +1 -1
- package/lib/esm/tasks/models/TaskIOSerializer.js +1 -1
- package/lib/esm/tasks/models/TaskLogEntryModel.d.ts +1 -0
- package/lib/esm/tasks/models/TaskLogEntryModel.js +6 -2
- package/lib/esm/tasks/models/TaskModel.js +1 -1
- package/lib/esm/tasks/models/TaskStepResultModel.js +1 -1
- package/lib/esm/tasks/models/TaskStepSpecModel.d.ts +1 -0
- package/lib/esm/tasks/models/TaskStepSpecModel.js +7 -3
- package/lib/esm/tasks/models/index.js +1 -1
- package/lib/esm/tasks/types.d.ts +8 -3
- package/lib/esm/tasks/types.js +1 -1
- package/lib/esm/tasks/utils.js +1 -1
- package/lib/esm/utils/ContextualLoggedClass.js +1 -1
- package/lib/esm/utils/decorators.js +1 -1
- package/lib/esm/utils/errors.js +1 -1
- package/lib/esm/utils/index.js +1 -1
- package/lib/esm/utils/throttling.js +1 -1
- package/lib/esm/utils/types.js +1 -1
- package/lib/esm/utils/utils.d.ts +2 -1
- package/lib/esm/utils/utils.js +23 -6
- package/lib/esm/workers/TaskEngine.js +15 -4
- package/lib/esm/workers/WorkThreadEnvironment.js +1 -1
- package/lib/esm/workers/index.js +1 -1
- package/lib/esm/workers/messages.js +1 -1
- package/lib/esm/workers/types.js +1 -1
- package/lib/esm/workers/workerThread.js +36 -8
- package/lib/fs/FilesystemAdapter.cjs +3 -2
- package/lib/fs/FilesystemAdapter.d.ts +1 -0
- package/lib/fs/FsDispatch.cjs +1 -1
- package/lib/fs/helpers.cjs +1 -1
- package/lib/fs/index.cjs +1 -1
- package/lib/fs/indexStore.cjs +1 -1
- package/lib/fs/locks/FilesystemLock.cjs +1 -1
- package/lib/fs/locks/FilesystemMultiLock.cjs +1 -1
- package/lib/fs/types.cjs +1 -1
- package/lib/fs/types.d.ts +6 -0
- package/lib/identity/decorators.cjs +1 -1
- package/lib/identity/index.cjs +1 -1
- package/lib/index.cjs +2 -2
- package/lib/index.d.ts +1 -1
- package/lib/interfaces/ContextuallyLogged.cjs +1 -1
- package/lib/interfaces/ErrorParser.cjs +1 -1
- package/lib/interfaces/Executor.cjs +1 -1
- package/lib/interfaces/Observable.cjs +1 -1
- package/lib/interfaces/Observer.cjs +1 -1
- package/lib/interfaces/Paginatable.cjs +1 -1
- package/lib/interfaces/Queriable.cjs +1 -1
- package/lib/interfaces/RawExecutor.cjs +1 -1
- package/lib/interfaces/SequenceOptions.cjs +1 -1
- package/lib/interfaces/index.cjs +1 -1
- package/lib/migrations/Migration.cjs +1 -1
- package/lib/migrations/MigrationService.cjs +1 -1
- package/lib/migrations/MigrationTasks.cjs +1 -1
- package/lib/migrations/constants.cjs +1 -1
- package/lib/migrations/decorators.cjs +1 -1
- package/lib/migrations/index.cjs +1 -1
- package/lib/migrations/types.cjs +1 -1
- package/lib/model/BaseModel.cjs +1 -1
- package/lib/model/SequenceModel.cjs +1 -1
- package/lib/model/construction.cjs +25 -3
- package/lib/model/construction.d.ts +1 -1
- package/lib/model/decorators.cjs +1 -1
- package/lib/model/index.cjs +1 -1
- package/lib/model/indexing.cjs +1 -1
- package/lib/model/types.cjs +1 -1
- package/lib/overrides/Metadata.cjs +1 -1
- package/lib/overrides/Model.cjs +1 -1
- package/lib/overrides/ModelBuilder.cjs +1 -1
- package/lib/overrides/index.cjs +1 -1
- package/lib/overrides/injectables.cjs +1 -1
- package/lib/overrides/overrides.cjs +29 -1
- package/lib/persistence/Adapter.cjs +14 -2
- package/lib/persistence/Context.cjs +1 -1
- package/lib/persistence/ContextLock.cjs +1 -1
- package/lib/persistence/Dispatch.cjs +20 -3
- package/lib/persistence/Dispatch.d.ts +7 -0
- package/lib/persistence/ObserverHandler.cjs +1 -1
- package/lib/persistence/Sequence.cjs +1 -1
- package/lib/persistence/constants.cjs +2 -1
- package/lib/persistence/decorators.cjs +1 -1
- package/lib/persistence/errors.cjs +1 -1
- package/lib/persistence/event-filters.cjs +1 -1
- package/lib/persistence/generators.cjs +1 -1
- package/lib/persistence/index.cjs +1 -1
- package/lib/persistence/transactions.cjs +1 -1
- package/lib/persistence/types.cjs +1 -1
- package/lib/persistence/types.d.ts +1 -0
- package/lib/query/Condition.cjs +1 -1
- package/lib/query/MethodQueryBuilder.cjs +1 -1
- package/lib/query/Paginator.cjs +1 -1
- package/lib/query/Statement.cjs +1 -1
- package/lib/query/constants.cjs +1 -1
- package/lib/query/decorators.cjs +1 -1
- package/lib/query/errors.cjs +1 -1
- package/lib/query/index.cjs +1 -1
- package/lib/query/options.cjs +1 -1
- package/lib/query/selectors.cjs +1 -1
- package/lib/query/types.cjs +1 -1
- package/lib/query/utils.cjs +1 -1
- package/lib/ram/RamAdapter.cjs +1 -1
- package/lib/ram/RamPaginator.cjs +1 -1
- package/lib/ram/RamStatement.cjs +1 -1
- package/lib/ram/constants.cjs +1 -1
- package/lib/ram/handlers.cjs +1 -1
- package/lib/ram/index.cjs +1 -1
- package/lib/ram/types.cjs +1 -1
- package/lib/repository/Repository.cjs +19 -16
- package/lib/repository/Repository.d.ts +2 -2
- package/lib/repository/constants.cjs +1 -1
- package/lib/repository/decorators.cjs +2 -2
- package/lib/repository/errors.cjs +1 -1
- package/lib/repository/index.cjs +1 -1
- package/lib/repository/injectables.cjs +4 -2
- package/lib/repository/types.cjs +1 -1
- package/lib/repository/utils.cjs +1 -1
- package/lib/services/ModelService.cjs +4 -2
- package/lib/services/ModelService.d.ts +4 -5
- package/lib/services/PersistenceService.cjs +1 -1
- package/lib/services/index.cjs +1 -1
- package/lib/services/services.cjs +1 -1
- package/lib/tasks/CleanUpTask.cjs +1 -1
- package/lib/tasks/TaskContext.cjs +9 -2
- package/lib/tasks/TaskContext.d.ts +3 -1
- package/lib/tasks/TaskEngine.cjs +84 -20
- package/lib/tasks/TaskEngine.d.ts +2 -0
- package/lib/tasks/TaskErrors.cjs +1 -1
- package/lib/tasks/TaskEventBus.cjs +1 -1
- package/lib/tasks/TaskEventService.cjs +20 -0
- package/lib/tasks/TaskEventService.d.ts +7 -0
- package/lib/tasks/TaskHandler.cjs +1 -1
- package/lib/tasks/TaskHandlerRegistry.cjs +1 -1
- package/lib/tasks/TaskService.cjs +10 -36
- package/lib/tasks/TaskService.d.ts +5 -1
- package/lib/tasks/TaskStateChangeError.cjs +1 -1
- package/lib/tasks/TaskTracker.cjs +1 -1
- package/lib/tasks/builder.cjs +1 -1
- package/lib/tasks/constants.cjs +1 -1
- package/lib/tasks/decorators.cjs +1 -1
- package/lib/tasks/index.cjs +2 -1
- package/lib/tasks/index.d.ts +1 -0
- package/lib/tasks/logging.cjs +4 -7
- package/lib/tasks/models/TaskBackoffModel.cjs +1 -1
- package/lib/tasks/models/TaskErrorModel.cjs +1 -1
- package/lib/tasks/models/TaskEventModel.cjs +1 -1
- package/lib/tasks/models/TaskIOSerializer.cjs +1 -1
- package/lib/tasks/models/TaskLogEntryModel.cjs +5 -1
- package/lib/tasks/models/TaskLogEntryModel.d.ts +1 -0
- package/lib/tasks/models/TaskModel.cjs +1 -1
- package/lib/tasks/models/TaskStepResultModel.cjs +1 -1
- package/lib/tasks/models/TaskStepSpecModel.cjs +6 -2
- package/lib/tasks/models/TaskStepSpecModel.d.ts +1 -0
- package/lib/tasks/models/index.cjs +1 -1
- package/lib/tasks/types.cjs +1 -1
- package/lib/tasks/types.d.ts +8 -3
- package/lib/tasks/utils.cjs +1 -1
- package/lib/utils/ContextualLoggedClass.cjs +1 -1
- package/lib/utils/decorators.cjs +1 -1
- package/lib/utils/errors.cjs +1 -1
- package/lib/utils/index.cjs +1 -1
- package/lib/utils/throttling.cjs +1 -1
- package/lib/utils/types.cjs +1 -1
- package/lib/utils/utils.cjs +22 -5
- package/lib/utils/utils.d.ts +2 -1
- package/lib/workers/TaskEngine.cjs +15 -4
- package/lib/workers/WorkThreadEnvironment.cjs +1 -1
- package/lib/workers/index.cjs +1 -1
- package/lib/workers/messages.cjs +1 -1
- package/lib/workers/types.cjs +1 -1
- package/lib/workers/workerThread.cjs +35 -7
- package/package.json +1 -1
- package/dist/core.cjs.map +0 -1
- package/dist/core.js.map +0 -1
- package/lib/auth/constants.js.map +0 -1
- package/lib/auth/decorators.js.map +0 -1
- package/lib/auth/index.js.map +0 -1
- package/lib/esm/auth/constants.js.map +0 -1
- package/lib/esm/auth/decorators.js.map +0 -1
- package/lib/esm/auth/index.js.map +0 -1
- package/lib/esm/fs/FilesystemAdapter.js.map +0 -1
- package/lib/esm/fs/FsDispatch.js.map +0 -1
- package/lib/esm/fs/helpers.js.map +0 -1
- package/lib/esm/fs/index.js.map +0 -1
- package/lib/esm/fs/indexStore.js.map +0 -1
- package/lib/esm/fs/locks/FilesystemLock.js.map +0 -1
- package/lib/esm/fs/locks/FilesystemMultiLock.js.map +0 -1
- package/lib/esm/fs/types.js.map +0 -1
- package/lib/esm/identity/decorators.js.map +0 -1
- package/lib/esm/identity/index.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/interfaces/ContextuallyLogged.js.map +0 -1
- package/lib/esm/interfaces/ErrorParser.js.map +0 -1
- package/lib/esm/interfaces/Executor.js.map +0 -1
- package/lib/esm/interfaces/Observable.js.map +0 -1
- package/lib/esm/interfaces/Observer.js.map +0 -1
- package/lib/esm/interfaces/Paginatable.js.map +0 -1
- package/lib/esm/interfaces/Queriable.js.map +0 -1
- package/lib/esm/interfaces/RawExecutor.js.map +0 -1
- package/lib/esm/interfaces/SequenceOptions.js.map +0 -1
- package/lib/esm/interfaces/index.js.map +0 -1
- package/lib/esm/migrations/Migration.js.map +0 -1
- package/lib/esm/migrations/MigrationService.js.map +0 -1
- package/lib/esm/migrations/MigrationTasks.js.map +0 -1
- package/lib/esm/migrations/constants.js.map +0 -1
- package/lib/esm/migrations/decorators.js.map +0 -1
- package/lib/esm/migrations/index.js.map +0 -1
- package/lib/esm/migrations/types.js.map +0 -1
- package/lib/esm/model/BaseModel.js.map +0 -1
- package/lib/esm/model/SequenceModel.js.map +0 -1
- package/lib/esm/model/construction.js.map +0 -1
- package/lib/esm/model/decorators.js.map +0 -1
- package/lib/esm/model/index.js.map +0 -1
- package/lib/esm/model/indexing.js.map +0 -1
- package/lib/esm/model/types.js.map +0 -1
- package/lib/esm/overrides/Metadata.js.map +0 -1
- package/lib/esm/overrides/Model.js.map +0 -1
- package/lib/esm/overrides/ModelBuilder.js.map +0 -1
- package/lib/esm/overrides/index.js.map +0 -1
- package/lib/esm/overrides/injectables.js.map +0 -1
- package/lib/esm/overrides/overrides.js.map +0 -1
- package/lib/esm/persistence/Adapter.js.map +0 -1
- package/lib/esm/persistence/Context.js.map +0 -1
- package/lib/esm/persistence/ContextLock.js.map +0 -1
- package/lib/esm/persistence/Dispatch.js.map +0 -1
- package/lib/esm/persistence/ObserverHandler.js.map +0 -1
- package/lib/esm/persistence/Sequence.js.map +0 -1
- package/lib/esm/persistence/constants.js.map +0 -1
- package/lib/esm/persistence/decorators.js.map +0 -1
- package/lib/esm/persistence/errors.js.map +0 -1
- package/lib/esm/persistence/event-filters.js.map +0 -1
- package/lib/esm/persistence/generators.js.map +0 -1
- package/lib/esm/persistence/index.js.map +0 -1
- package/lib/esm/persistence/transactions.js.map +0 -1
- package/lib/esm/persistence/types.js.map +0 -1
- package/lib/esm/query/Condition.js.map +0 -1
- package/lib/esm/query/MethodQueryBuilder.js.map +0 -1
- package/lib/esm/query/Paginator.js.map +0 -1
- package/lib/esm/query/Statement.js.map +0 -1
- package/lib/esm/query/constants.js.map +0 -1
- package/lib/esm/query/decorators.js.map +0 -1
- package/lib/esm/query/errors.js.map +0 -1
- package/lib/esm/query/index.js.map +0 -1
- package/lib/esm/query/options.js.map +0 -1
- package/lib/esm/query/selectors.js.map +0 -1
- package/lib/esm/query/types.js.map +0 -1
- package/lib/esm/query/utils.js.map +0 -1
- package/lib/esm/ram/RamAdapter.js.map +0 -1
- package/lib/esm/ram/RamPaginator.js.map +0 -1
- package/lib/esm/ram/RamStatement.js.map +0 -1
- package/lib/esm/ram/constants.js.map +0 -1
- package/lib/esm/ram/handlers.js.map +0 -1
- package/lib/esm/ram/index.js.map +0 -1
- package/lib/esm/ram/types.js.map +0 -1
- package/lib/esm/repository/Repository.js.map +0 -1
- package/lib/esm/repository/constants.js.map +0 -1
- package/lib/esm/repository/decorators.js.map +0 -1
- package/lib/esm/repository/errors.js.map +0 -1
- package/lib/esm/repository/index.js.map +0 -1
- package/lib/esm/repository/injectables.js.map +0 -1
- package/lib/esm/repository/types.js.map +0 -1
- package/lib/esm/repository/utils.js.map +0 -1
- package/lib/esm/services/ModelService.js.map +0 -1
- package/lib/esm/services/PersistenceService.js.map +0 -1
- package/lib/esm/services/index.js.map +0 -1
- package/lib/esm/services/services.js.map +0 -1
- package/lib/esm/tasks/CleanUpTask.js.map +0 -1
- package/lib/esm/tasks/TaskContext.js.map +0 -1
- package/lib/esm/tasks/TaskEngine.js.map +0 -1
- package/lib/esm/tasks/TaskErrors.js.map +0 -1
- package/lib/esm/tasks/TaskEventBus.js.map +0 -1
- package/lib/esm/tasks/TaskHandler.js.map +0 -1
- package/lib/esm/tasks/TaskHandlerRegistry.js.map +0 -1
- package/lib/esm/tasks/TaskService.js.map +0 -1
- package/lib/esm/tasks/TaskStateChangeError.js.map +0 -1
- package/lib/esm/tasks/TaskTracker.js.map +0 -1
- package/lib/esm/tasks/builder.js.map +0 -1
- package/lib/esm/tasks/constants.js.map +0 -1
- package/lib/esm/tasks/decorators.js.map +0 -1
- package/lib/esm/tasks/index.js.map +0 -1
- package/lib/esm/tasks/logging.js.map +0 -1
- package/lib/esm/tasks/models/TaskBackoffModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskErrorModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskEventModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskIOSerializer.js.map +0 -1
- package/lib/esm/tasks/models/TaskLogEntryModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskStepResultModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskStepSpecModel.js.map +0 -1
- package/lib/esm/tasks/models/index.js.map +0 -1
- package/lib/esm/tasks/types.js.map +0 -1
- package/lib/esm/tasks/utils.js.map +0 -1
- package/lib/esm/utils/ContextualLoggedClass.js.map +0 -1
- package/lib/esm/utils/decorators.js.map +0 -1
- package/lib/esm/utils/errors.js.map +0 -1
- package/lib/esm/utils/index.js.map +0 -1
- package/lib/esm/utils/throttling.js.map +0 -1
- package/lib/esm/utils/types.js.map +0 -1
- package/lib/esm/utils/utils.js.map +0 -1
- package/lib/esm/workers/TaskEngine.js.map +0 -1
- package/lib/esm/workers/WorkThreadEnvironment.js.map +0 -1
- package/lib/esm/workers/index.js.map +0 -1
- package/lib/esm/workers/messages.js.map +0 -1
- package/lib/esm/workers/types.js.map +0 -1
- package/lib/esm/workers/workerThread.js.map +0 -1
- package/lib/fs/FilesystemAdapter.js.map +0 -1
- package/lib/fs/FsDispatch.js.map +0 -1
- package/lib/fs/helpers.js.map +0 -1
- package/lib/fs/index.js.map +0 -1
- package/lib/fs/indexStore.js.map +0 -1
- package/lib/fs/locks/FilesystemLock.js.map +0 -1
- package/lib/fs/locks/FilesystemMultiLock.js.map +0 -1
- package/lib/fs/types.js.map +0 -1
- package/lib/identity/decorators.js.map +0 -1
- package/lib/identity/index.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/interfaces/ContextuallyLogged.js.map +0 -1
- package/lib/interfaces/ErrorParser.js.map +0 -1
- package/lib/interfaces/Executor.js.map +0 -1
- package/lib/interfaces/Observable.js.map +0 -1
- package/lib/interfaces/Observer.js.map +0 -1
- package/lib/interfaces/Paginatable.js.map +0 -1
- package/lib/interfaces/Queriable.js.map +0 -1
- package/lib/interfaces/RawExecutor.js.map +0 -1
- package/lib/interfaces/SequenceOptions.js.map +0 -1
- package/lib/interfaces/index.js.map +0 -1
- package/lib/migrations/Migration.js.map +0 -1
- package/lib/migrations/MigrationService.js.map +0 -1
- package/lib/migrations/MigrationTasks.js.map +0 -1
- package/lib/migrations/constants.js.map +0 -1
- package/lib/migrations/decorators.js.map +0 -1
- package/lib/migrations/index.js.map +0 -1
- package/lib/migrations/types.js.map +0 -1
- package/lib/model/BaseModel.js.map +0 -1
- package/lib/model/SequenceModel.js.map +0 -1
- package/lib/model/construction.js.map +0 -1
- package/lib/model/decorators.js.map +0 -1
- package/lib/model/index.js.map +0 -1
- package/lib/model/indexing.js.map +0 -1
- package/lib/model/types.js.map +0 -1
- package/lib/overrides/Metadata.js.map +0 -1
- package/lib/overrides/Model.js.map +0 -1
- package/lib/overrides/ModelBuilder.js.map +0 -1
- package/lib/overrides/index.js.map +0 -1
- package/lib/overrides/injectables.js.map +0 -1
- package/lib/overrides/overrides.js.map +0 -1
- package/lib/persistence/Adapter.js.map +0 -1
- package/lib/persistence/Context.js.map +0 -1
- package/lib/persistence/ContextLock.js.map +0 -1
- package/lib/persistence/Dispatch.js.map +0 -1
- package/lib/persistence/ObserverHandler.js.map +0 -1
- package/lib/persistence/Sequence.js.map +0 -1
- package/lib/persistence/constants.js.map +0 -1
- package/lib/persistence/decorators.js.map +0 -1
- package/lib/persistence/errors.js.map +0 -1
- package/lib/persistence/event-filters.js.map +0 -1
- package/lib/persistence/generators.js.map +0 -1
- package/lib/persistence/index.js.map +0 -1
- package/lib/persistence/transactions.js.map +0 -1
- package/lib/persistence/types.js.map +0 -1
- package/lib/query/Condition.js.map +0 -1
- package/lib/query/MethodQueryBuilder.js.map +0 -1
- package/lib/query/Paginator.js.map +0 -1
- package/lib/query/Statement.js.map +0 -1
- package/lib/query/constants.js.map +0 -1
- package/lib/query/decorators.js.map +0 -1
- package/lib/query/errors.js.map +0 -1
- package/lib/query/index.js.map +0 -1
- package/lib/query/options.js.map +0 -1
- package/lib/query/selectors.js.map +0 -1
- package/lib/query/types.js.map +0 -1
- package/lib/query/utils.js.map +0 -1
- package/lib/ram/RamAdapter.js.map +0 -1
- package/lib/ram/RamPaginator.js.map +0 -1
- package/lib/ram/RamStatement.js.map +0 -1
- package/lib/ram/constants.js.map +0 -1
- package/lib/ram/handlers.js.map +0 -1
- package/lib/ram/index.js.map +0 -1
- package/lib/ram/types.js.map +0 -1
- package/lib/repository/Repository.js.map +0 -1
- package/lib/repository/constants.js.map +0 -1
- package/lib/repository/decorators.js.map +0 -1
- package/lib/repository/errors.js.map +0 -1
- package/lib/repository/index.js.map +0 -1
- package/lib/repository/injectables.js.map +0 -1
- package/lib/repository/types.js.map +0 -1
- package/lib/repository/utils.js.map +0 -1
- package/lib/services/ModelService.js.map +0 -1
- package/lib/services/PersistenceService.js.map +0 -1
- package/lib/services/index.js.map +0 -1
- package/lib/services/services.js.map +0 -1
- package/lib/tasks/CleanUpTask.js.map +0 -1
- package/lib/tasks/TaskContext.js.map +0 -1
- package/lib/tasks/TaskEngine.js.map +0 -1
- package/lib/tasks/TaskErrors.js.map +0 -1
- package/lib/tasks/TaskEventBus.js.map +0 -1
- package/lib/tasks/TaskHandler.js.map +0 -1
- package/lib/tasks/TaskHandlerRegistry.js.map +0 -1
- package/lib/tasks/TaskService.js.map +0 -1
- package/lib/tasks/TaskStateChangeError.js.map +0 -1
- package/lib/tasks/TaskTracker.js.map +0 -1
- package/lib/tasks/builder.js.map +0 -1
- package/lib/tasks/constants.js.map +0 -1
- package/lib/tasks/decorators.js.map +0 -1
- package/lib/tasks/index.js.map +0 -1
- package/lib/tasks/logging.js.map +0 -1
- package/lib/tasks/models/TaskBackoffModel.js.map +0 -1
- package/lib/tasks/models/TaskErrorModel.js.map +0 -1
- package/lib/tasks/models/TaskEventModel.js.map +0 -1
- package/lib/tasks/models/TaskIOSerializer.js.map +0 -1
- package/lib/tasks/models/TaskLogEntryModel.js.map +0 -1
- package/lib/tasks/models/TaskModel.js.map +0 -1
- package/lib/tasks/models/TaskStepResultModel.js.map +0 -1
- package/lib/tasks/models/TaskStepSpecModel.js.map +0 -1
- package/lib/tasks/models/index.js.map +0 -1
- package/lib/tasks/types.js.map +0 -1
- package/lib/tasks/utils.js.map +0 -1
- package/lib/utils/ContextualLoggedClass.js.map +0 -1
- package/lib/utils/decorators.js.map +0 -1
- package/lib/utils/errors.js.map +0 -1
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/throttling.js.map +0 -1
- package/lib/utils/types.js.map +0 -1
- package/lib/utils/utils.js.map +0 -1
- package/lib/workers/TaskEngine.js.map +0 -1
- package/lib/workers/WorkThreadEnvironment.js.map +0 -1
- package/lib/workers/index.js.map +0 -1
- package/lib/workers/messages.js.map +0 -1
- package/lib/workers/types.js.map +0 -1
- package/lib/workers/workerThread.js.map +0 -1
package/lib/tasks/TaskEngine.cjs
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TaskEngine = void 0;
|
|
4
4
|
const TaskModel_1 = require("./models/TaskModel.cjs");
|
|
5
|
-
const Repository_1 = require("./../repository/Repository.cjs");
|
|
6
5
|
const TaskEventModel_1 = require("./models/TaskEventModel.cjs");
|
|
7
6
|
const TaskHandlerRegistry_1 = require("./TaskHandlerRegistry.cjs");
|
|
8
7
|
const TaskEventBus_1 = require("./TaskEventBus.cjs");
|
|
@@ -28,7 +27,12 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
28
27
|
return TaskContext_1.TaskContext;
|
|
29
28
|
}
|
|
30
29
|
get adapter() {
|
|
31
|
-
|
|
30
|
+
if (!this._adapter) {
|
|
31
|
+
this._adapter = this.config.adapter;
|
|
32
|
+
if (this.config.overrides)
|
|
33
|
+
this._adapter = this.adapter.for(this.config.overrides);
|
|
34
|
+
}
|
|
35
|
+
return this._adapter;
|
|
32
36
|
}
|
|
33
37
|
get registry() {
|
|
34
38
|
return this.config.registry;
|
|
@@ -39,17 +43,17 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
39
43
|
get tasks() {
|
|
40
44
|
if (this._tasks)
|
|
41
45
|
return this._tasks;
|
|
42
|
-
this._tasks =
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
this._tasks = new (this.adapter.repository())(this.adapter, TaskModel_1.TaskModel, true).override({
|
|
47
|
+
afterQueryHandlers: true,
|
|
48
|
+
});
|
|
45
49
|
return this._tasks;
|
|
46
50
|
}
|
|
47
51
|
get events() {
|
|
48
52
|
if (this._events)
|
|
49
53
|
return this._events;
|
|
50
|
-
this._events =
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
this._events = new (this.adapter.repository())(this.adapter, TaskEventModel_1.TaskEventModel, true).override({
|
|
55
|
+
afterQueryHandlers: true,
|
|
56
|
+
});
|
|
53
57
|
return this._events;
|
|
54
58
|
}
|
|
55
59
|
static createTaskContext(base, overrides) {
|
|
@@ -303,14 +307,26 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
303
307
|
// -------------------------
|
|
304
308
|
async executeClaimed(task) {
|
|
305
309
|
const { ctx, log } = (await this.logCtx([], task.classification, true)).for(this.executeClaimed);
|
|
310
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
311
|
+
const engine = this;
|
|
312
|
+
let logPipeQueue = Promise.resolve();
|
|
306
313
|
const taskCtx = new TaskContext_1.TaskContext(ctx).accumulate({
|
|
307
314
|
taskId: task.id,
|
|
308
315
|
logger: new logging_2.TaskLogger(log, this.config.streamBufferSize, this.config.maxLoggingBuffer),
|
|
309
316
|
attempt: task.attempt,
|
|
310
|
-
resultCache: {},
|
|
311
|
-
pipe: async (
|
|
312
|
-
const
|
|
313
|
-
|
|
317
|
+
resultCache: { "task.attempt": task.attempt },
|
|
318
|
+
pipe: async function (...args) {
|
|
319
|
+
const normalized = engine.normalizePipeArgs(args);
|
|
320
|
+
if (!normalized.length)
|
|
321
|
+
return;
|
|
322
|
+
logPipeQueue = logPipeQueue.then(async () => {
|
|
323
|
+
const [updated, logs] = await engine.appendLog(this, task, normalized);
|
|
324
|
+
// Keep the original task object reference updated so composite execution doesn't
|
|
325
|
+
// overwrite logTail with stale state.
|
|
326
|
+
Object.assign(task, updated);
|
|
327
|
+
await engine.emitLog(this, task.id, logs);
|
|
328
|
+
});
|
|
329
|
+
await logPipeQueue;
|
|
314
330
|
},
|
|
315
331
|
flush: async () => {
|
|
316
332
|
return taskCtx.logger.flush(taskCtx.pipe);
|
|
@@ -337,7 +353,8 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
337
353
|
if (task.atomicity === constants_1.TaskType.COMPOSITE) {
|
|
338
354
|
output = await this.runComposite(task, taskCtx);
|
|
339
355
|
try {
|
|
340
|
-
|
|
356
|
+
const latest = await this.tasks.read(task.id, taskCtx);
|
|
357
|
+
Object.assign(task, latest);
|
|
341
358
|
}
|
|
342
359
|
catch {
|
|
343
360
|
// keep best-effort task state
|
|
@@ -353,6 +370,9 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
353
370
|
if (!handler)
|
|
354
371
|
throw new db_decorators_1.InternalError(`No task handler registered for type: ${task.classification}`);
|
|
355
372
|
output = await handler.run(task.input, taskCtx);
|
|
373
|
+
// TaskHandlers shouldn't need to explicitly call ctx.flush().
|
|
374
|
+
// Flush buffered logs before we persist final task state.
|
|
375
|
+
await taskCtx.flush();
|
|
356
376
|
log.verbose(`handler finished for ${task.id}`);
|
|
357
377
|
}
|
|
358
378
|
task.status = constants_1.TaskStatus.SUCCEEDED;
|
|
@@ -360,14 +380,24 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
360
380
|
task.error = undefined;
|
|
361
381
|
task.leaseOwner = undefined;
|
|
362
382
|
task.leaseExpiry = undefined;
|
|
363
|
-
|
|
383
|
+
const persisted = await this.tasks.update(task, taskCtx);
|
|
384
|
+
Object.assign(task, persisted);
|
|
364
385
|
taskCtx.logger.info(`task ${task.id} success state ${task.status}`);
|
|
365
386
|
log.info(`task ${task.id} success state ${task.status} attempt ${task.attempt}`);
|
|
366
387
|
await this.emitStatus(taskCtx, task, constants_1.TaskStatus.SUCCEEDED, output);
|
|
367
388
|
}
|
|
368
389
|
catch (err) {
|
|
390
|
+
// Ensure buffered handler logs are persisted before we emit any engine-generated logs/events.
|
|
391
|
+
// This preserves chronological ordering when TaskHandlers don't call ctx.flush().
|
|
392
|
+
try {
|
|
393
|
+
await taskCtx.flush();
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
// best-effort
|
|
397
|
+
}
|
|
369
398
|
try {
|
|
370
|
-
|
|
399
|
+
const latest = await this.tasks.read(task.id, taskCtx);
|
|
400
|
+
Object.assign(task, latest);
|
|
371
401
|
}
|
|
372
402
|
catch {
|
|
373
403
|
// keep best-effort task state for retries/failures
|
|
@@ -397,7 +427,8 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
397
427
|
task.error = serialized;
|
|
398
428
|
task.leaseOwner = undefined;
|
|
399
429
|
task.leaseExpiry = undefined;
|
|
400
|
-
|
|
430
|
+
const persisted = await this.tasks.update(task, taskCtx);
|
|
431
|
+
Object.assign(task, persisted);
|
|
401
432
|
log.warn(`task ${task.id} waiting retry state ${task.status} attempt ${task.attempt}`);
|
|
402
433
|
await taskCtx.pipe(logging_1.LogLevel.warn, `Retry scheduled`, {
|
|
403
434
|
nextRunAt,
|
|
@@ -412,7 +443,8 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
412
443
|
task.error = serialized;
|
|
413
444
|
task.leaseOwner = undefined;
|
|
414
445
|
task.leaseExpiry = undefined;
|
|
415
|
-
|
|
446
|
+
const persisted = await this.tasks.update(task, taskCtx);
|
|
447
|
+
Object.assign(task, persisted);
|
|
416
448
|
log.error(`task ${task.id} failed state ${task.status} attempt ${task.attempt}`);
|
|
417
449
|
await taskCtx.pipe(logging_1.LogLevel.error, `Task failed (max attempts reached)`, {
|
|
418
450
|
maxAttempts: task.maxAttempts,
|
|
@@ -509,6 +541,7 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
509
541
|
}
|
|
510
542
|
}
|
|
511
543
|
while (idx < steps.length) {
|
|
544
|
+
context.setStep(idx);
|
|
512
545
|
const step = steps[idx];
|
|
513
546
|
const handler = this.registry.get(step.classification);
|
|
514
547
|
if (!handler)
|
|
@@ -519,6 +552,8 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
519
552
|
]);
|
|
520
553
|
try {
|
|
521
554
|
const out = await handler.run(step.input, context);
|
|
555
|
+
// Ensure step-tagged logs are flushed before advancing the step pointer.
|
|
556
|
+
await context.flush();
|
|
522
557
|
const stepIndex = idx;
|
|
523
558
|
const now = new Date();
|
|
524
559
|
results[stepIndex] = new TaskStepResultModel_1.TaskStepResultModel({
|
|
@@ -533,7 +568,8 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
533
568
|
idx = stepIndex + 1;
|
|
534
569
|
task.stepResults = results;
|
|
535
570
|
task.currentStep = idx;
|
|
536
|
-
|
|
571
|
+
const persisted = await this.tasks.update(task);
|
|
572
|
+
Object.assign(task, persisted);
|
|
537
573
|
await this.emitProgress(context, task.id, {
|
|
538
574
|
currentStep: idx,
|
|
539
575
|
totalSteps: steps.length,
|
|
@@ -552,7 +588,8 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
552
588
|
task.currentStep = idx;
|
|
553
589
|
task.error = (0, utils_1.serializeError)(err);
|
|
554
590
|
// persist failure context before throwing (retry logic happens outside)
|
|
555
|
-
|
|
591
|
+
const persisted = await this.tasks.update(task);
|
|
592
|
+
Object.assign(task, persisted);
|
|
556
593
|
throw err;
|
|
557
594
|
}
|
|
558
595
|
}
|
|
@@ -639,11 +676,17 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
639
676
|
// -------------------------
|
|
640
677
|
async appendLog(ctx, task, logEntries) {
|
|
641
678
|
const isMulti = Array.isArray(logEntries) && Array.isArray(logEntries[0]);
|
|
679
|
+
const step = task.atomicity === constants_1.TaskType.COMPOSITE
|
|
680
|
+
? ctx instanceof TaskContext_1.TaskContext
|
|
681
|
+
? (ctx.step ?? task.currentStep)
|
|
682
|
+
: task.currentStep
|
|
683
|
+
: undefined;
|
|
642
684
|
const entries = (isMulti ? logEntries : [logEntries]).map(([level, msg, meta]) => {
|
|
643
685
|
return new TaskLogEntryModel_1.TaskLogEntryModel({
|
|
644
686
|
level,
|
|
645
687
|
msg,
|
|
646
688
|
meta,
|
|
689
|
+
step,
|
|
647
690
|
});
|
|
648
691
|
});
|
|
649
692
|
const nextTail = [...(task.logTail ?? []), ...entries].slice(-this.config.logTailMax);
|
|
@@ -684,9 +727,30 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
684
727
|
level: e.level,
|
|
685
728
|
msg: e.msg,
|
|
686
729
|
meta: e.meta,
|
|
730
|
+
step: e.step,
|
|
687
731
|
})));
|
|
688
732
|
this.bus.emit(evt, ctx);
|
|
689
733
|
}
|
|
734
|
+
normalizePipeArgs(args) {
|
|
735
|
+
if (!args.length)
|
|
736
|
+
return [];
|
|
737
|
+
if (args.length === 1) {
|
|
738
|
+
const value = args[0];
|
|
739
|
+
if (!Array.isArray(value))
|
|
740
|
+
return [];
|
|
741
|
+
if (value.length === 0)
|
|
742
|
+
return [];
|
|
743
|
+
// Either [level,msg,meta?] or [[level,msg,meta?], ...]
|
|
744
|
+
if (Array.isArray(value[0])) {
|
|
745
|
+
return value.filter(Array.isArray);
|
|
746
|
+
}
|
|
747
|
+
return [value];
|
|
748
|
+
}
|
|
749
|
+
const [level, msg, meta] = args;
|
|
750
|
+
if (typeof level !== "string" || typeof msg !== "string")
|
|
751
|
+
return [];
|
|
752
|
+
return [[level, msg, meta]];
|
|
753
|
+
}
|
|
690
754
|
async emitProgress(ctx, taskId, data) {
|
|
691
755
|
const evt = await this.persistEvent(ctx, taskId, constants_1.TaskEventType.PROGRESS, data);
|
|
692
756
|
this.bus.emit(evt, ctx);
|
|
@@ -704,4 +768,4 @@ class TaskEngine extends ContextualLoggedClass_1.AbsContextual {
|
|
|
704
768
|
}
|
|
705
769
|
}
|
|
706
770
|
exports.TaskEngine = TaskEngine;
|
|
707
|
-
//# sourceMappingURL=TaskEngine.js.map
|
|
771
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0VuZ2luZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy9UYXNrRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUErQztBQUUvQyxnRUFBeUQ7QUFDekQsbUVBQTREO0FBQzVELHFEQUE4QztBQUM5Qyx3REFBK0M7QUFDL0MsMEVBQW1FO0FBQ25FLHNFQUErRDtBQUMvRCxvRUFBNkQ7QUFDN0Qsc0VBQStEO0FBQy9ELCtDQUtxQjtBQUlyQiwrQ0FBNkM7QUFDN0MsZ0ZBSXdDO0FBQ3hDLDJEQUF1RTtBQUN2RSx1Q0FBa0U7QUFDbEUsbURBQTRDO0FBQzVDLHFFQUdnQztBQUdoQywyQ0FBdUM7QUFPdkMsZ0VBQXlEO0FBQ3pELG1EQUE0QztBQUM1QyxpRkFBMEQ7QUFDMUQsc0RBQXVEO0FBRXZELE1BQWEsVUFHWCxTQUFRLHFDQUEyQjtJQU9uQyxJQUF1QixPQUFPO1FBQzVCLE9BQU8seUJBQW1ELENBQUM7SUFDN0QsQ0FBQztJQUVELElBQWMsT0FBTztRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7Z0JBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFjLFFBQVE7UUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBYyxHQUFHO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUksQ0FBQztJQUMxQixDQUFDO0lB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RSxjQUFjLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDMUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVRLFFBQVE7UUFDZixPQUFPLGNBQWMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUM7SUFDcEQsQ0FBQztJQUVRLEtBQUssQ0FBQyxPQUFPLENBQ3BCLFNBTVUsRUFDVixTQUF5QyxFQUN6QyxHQUFHLElBQVc7UUFFZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUscUJBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7Q0FDRjtBQWhnQ0QsZ0NBZ2dDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhc2tNb2RlbCB9IGZyb20gXCIuL21vZGVscy9UYXNrTW9kZWxcIjtcbmltcG9ydCB7IFJlcG8gfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9SZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBUYXNrRXZlbnRNb2RlbCB9IGZyb20gXCIuL21vZGVscy9UYXNrRXZlbnRNb2RlbFwiO1xuaW1wb3J0IHsgVGFza0hhbmRsZXJSZWdpc3RyeSB9IGZyb20gXCIuL1Rhc2tIYW5kbGVyUmVnaXN0cnlcIjtcbmltcG9ydCB7IFRhc2tFdmVudEJ1cyB9IGZyb20gXCIuL1Rhc2tFdmVudEJ1c1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4uL3F1ZXJ5L0NvbmRpdGlvblwiO1xuaW1wb3J0IHsgVGFza1N0ZXBSZXN1bHRNb2RlbCB9IGZyb20gXCIuL21vZGVscy9UYXNrU3RlcFJlc3VsdE1vZGVsXCI7XG5pbXBvcnQgeyBUYXNrTG9nRW50cnlNb2RlbCB9IGZyb20gXCIuL21vZGVscy9UYXNrTG9nRW50cnlNb2RlbFwiO1xuaW1wb3J0IHsgVGFza0JhY2tvZmZNb2RlbCB9IGZyb20gXCIuL21vZGVscy9UYXNrQmFja29mZk1vZGVsXCI7XG5pbXBvcnQgeyBUYXNrU3RlcFNwZWNNb2RlbCB9IGZyb20gXCIuL21vZGVscy9UYXNrU3RlcFNwZWNNb2RlbFwiO1xuaW1wb3J0IHtcbiAgRGVmYXVsdFRhc2tFbmdpbmVDb25maWcsXG4gIFRhc2tFdmVudFR5cGUsXG4gIFRhc2tTdGF0dXMsXG4gIFRhc2tUeXBlLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvQWRhcHRlclwiO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9Db250ZXh0XCI7XG5pbXBvcnQgeyBDb250ZXh0T2YsIEZsYWdzT2YgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvdHlwZXNcIjtcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQge1xuICBBYnNDb250ZXh0dWFsLFxuICBDb250ZXh0dWFsQXJncyxcbiAgTWF5YmVDb250ZXh0dWFsQXJnLFxufSBmcm9tIFwiLi4vdXRpbHMvQ29udGV4dHVhbExvZ2dlZENsYXNzXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yLCBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBjb21wdXRlQmFja29mZk1zLCBzZXJpYWxpemVFcnJvciwgc2xlZXAgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgVGFza0NvbnRleHQgfSBmcm9tIFwiLi9UYXNrQ29udGV4dFwiO1xuaW1wb3J0IHtcbiAgVGFza1N0YXRlQ2hhbmdlRXJyb3IsXG4gIFRhc2tTdGF0ZUNoYW5nZVJlcXVlc3QsXG59IGZyb20gXCIuL1Rhc2tTdGF0ZUNoYW5nZUVycm9yXCI7XG5pbXBvcnQgeyBEYXRlVGFyZ2V0IH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IFRhc2tMb2dnZXIgfSBmcm9tIFwiLi9sb2dnaW5nXCI7XG5pbXBvcnQge1xuICBUYXNrRW5naW5lQ29uZmlnLFxuICBUYXNrRW5naW5lQXV0b1NodXRkb3duQ29uZmlnLFxuICBUYXNrRmxhZ3MsXG4gIFRhc2tQcm9ncmVzc1BheWxvYWQsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBUYXNrRXJyb3JNb2RlbCB9IGZyb20gXCIuL21vZGVscy9UYXNrRXJyb3JNb2RlbFwiO1xuaW1wb3J0IHsgVGFza1RyYWNrZXIgfSBmcm9tIFwiLi9UYXNrVHJhY2tlclwiO1xuaW1wb3J0IHsgTG9jayB9IGZyb20gXCJAZGVjYWYtdHMvdHJhbnNhY3Rpb25hbC1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvaW5kZXhcIjtcblxuZXhwb3J0IGNsYXNzIFRhc2tFbmdpbmU8XG4gIEEgZXh0ZW5kcyBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT4sXG4gIEMgZXh0ZW5kcyBUYXNrRW5naW5lQ29uZmlnPEE+ID0gVGFza0VuZ2luZUNvbmZpZzxBPixcbj4gZXh0ZW5kcyBBYnNDb250ZXh0dWFsPENvbnRleHRPZjxBPj4ge1xuICBwcml2YXRlIF90YXNrcz86IFJlcG88VGFza01vZGVsPjtcbiAgcHJpdmF0ZSBfZXZlbnRzPzogUmVwbzxUYXNrRXZlbnRNb2RlbD47XG4gIHByaXZhdGUgX2FkYXB0ZXI/OiBBO1xuXG4gIHByb3RlY3RlZCBsb2NrID0gbmV3IExvY2soKTtcblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0IENvbnRleHQoKTogQ29uc3RydWN0b3I8Q29udGV4dE9mPEE+PiB7XG4gICAgcmV0dXJuIFRhc2tDb250ZXh0IGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8Q29udGV4dE9mPEE+PjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgYWRhcHRlcigpOiBBIHtcbiAgICBpZiAoIXRoaXMuX2FkYXB0ZXIpIHtcbiAgICAgIHRoaXMuX2FkYXB0ZXIgPSB0aGlzLmNvbmZpZy5hZGFwdGVyO1xuICAgICAgaWYgKHRoaXMuY29uZmlnLm92ZXJyaWRlcylcbiAgICAgICAgdGhpcy5fYWRhcHRlciA9IHRoaXMuYWRhcHRlci5mb3IodGhpcy5jb25maWcub3ZlcnJpZGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHJlZ2lzdHJ5KCk6IFRhc2tIYW5kbGVyUmVnaXN0cnkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZWdpc3RyeSE7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGJ1cygpOiBUYXNrRXZlbnRCdXMge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5idXMhO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0YXNrcygpOiBSZXBvPFRhc2tNb2RlbD4ge1xuICAgIGlmICh0aGlzLl90YXNrcykgcmV0dXJuIHRoaXMuX3Rhc2tzO1xuICAgIHRoaXMuX3Rhc2tzID0gbmV3ICh0aGlzLmFkYXB0ZXIucmVwb3NpdG9yeSgpKShcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIFRhc2tNb2RlbCxcbiAgICAgIHRydWVcbiAgICApLm92ZXJyaWRlKHtcbiAgICAgIGFmdGVyUXVlcnlIYW5kbGVyczogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fdGFza3M7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGV2ZW50cygpOiBSZXBvPFRhc2tFdmVudE1vZGVsPiB7XG4gICAgaWYgKHRoaXMuX2V2ZW50cykgcmV0dXJuIHRoaXMuX2V2ZW50cztcbiAgICB0aGlzLl9ldmVudHMgPSBuZXcgKHRoaXMuYWRhcHRlci5yZXBvc2l0b3J5KCkpKFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgVGFza0V2ZW50TW9kZWwsXG4gICAgICB0cnVlXG4gICAgKS5vdmVycmlkZSh7XG4gICAgICBhZnRlclF1ZXJ5SGFuZGxlcnM6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50cztcbiAgfVxuXG4gIHByb3RlY3RlZCBydW5uaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgaWRsZURlbGF5TXM6IG51bWJlcjtcblxuICBzdGF0aWMgY3JlYXRlVGFza0NvbnRleHQoXG4gICAgYmFzZT86IENvbnRleHQ8YW55PixcbiAgICBvdmVycmlkZXM/OiBQYXJ0aWFsPFRhc2tGbGFncz5cbiAgKTogVGFza0NvbnRleHQge1xuICAgIGNvbnN0IGN0eCA9IG5ldyBUYXNrQ29udGV4dChiYXNlKTtcbiAgICBpZiAob3ZlcnJpZGVzICYmIE9iamVjdC5rZXlzKG92ZXJyaWRlcykubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gY3R4LmFjY3VtdWxhdGUob3ZlcnJpZGVzKSBhcyBUYXNrQ29udGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIGN0eDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjb25maWc6IEMpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IGF1dG9TaHV0ZG93biA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRUYXNrRW5naW5lQ29uZmlnLmF1dG9TaHV0ZG93bixcbiAgICAgIGNvbmZpZy5hdXRvU2h1dGRvd25cbiAgICApO1xuICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFRhc2tFbmdpbmVDb25maWcsIGNvbmZpZywge1xuICAgICAgYXV0b1NodXRkb3duLFxuICAgICAgYnVzOiBjb25maWcuYnVzIHx8IG5ldyBUYXNrRXZlbnRCdXMoKSxcbiAgICAgIHJlZ2lzdHJ5OiBjb25maWcucmVnaXN0cnkgfHwgbmV3IFRhc2tIYW5kbGVyUmVnaXN0cnkoKSxcbiAgICB9KTtcbiAgICB0aGlzLmlkbGVEZWxheU1zID0gdGhpcy5jb25maWcucG9sbE1zSWRsZTtcbiAgfVxuXG4gIGFzeW5jIHB1c2g8SSwgTz4oXG4gICAgdGFzazogVGFza01vZGVsPEksIE8+LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IFByb21pc2U8VGFza01vZGVsPEksIE8+PjtcbiAgYXN5bmMgcHVzaDxJLCBPPihcbiAgICB0YXNrOiBUYXNrTW9kZWw8SSwgTz4sXG4gICAgdHJhY2s6IGZhbHNlLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IFByb21pc2U8VGFza01vZGVsPEksIE8+PjtcbiAgYXN5bmMgcHVzaDxJLCBPPihcbiAgICB0YXNrOiBUYXNrTW9kZWw8SSwgTz4sXG4gICAgdHJhY2s6IHRydWUsXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTx7XG4gICAgdGFzazogVGFza01vZGVsPEksIE8+O1xuICAgIHRyYWNrZXI6IFRhc2tUcmFja2VyPCh0eXBlb2YgdGFzaylbXCJvdXRwdXRcIl0+O1xuICB9PjtcbiAgYXN5bmMgcHVzaDxJLCBPLCBUUkFDSyBleHRlbmRzIGJvb2xlYW4+KFxuICAgIHRhc2s6IFRhc2tNb2RlbDxJLCBPPixcbiAgICB0cmFjazogVFJBQ0sgPSBmYWxzZSBhcyBUUkFDSyxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8YW55PlxuICApOiBQcm9taXNlPFxuICAgIFRSQUNLIGV4dGVuZHMgdHJ1ZVxuICAgICAgPyB7IHRhc2s6IFRhc2tNb2RlbDxJLCBPPjsgdHJhY2tlcjogVGFza1RyYWNrZXI8Tz4gfVxuICAgICAgOiBUYXNrTW9kZWxcbiAgPiB7XG4gICAgY29uc3QgeyBjdHgsIGxvZyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgT3BlcmF0aW9uS2V5cy5DUkVBVEUsIHRydWUpXG4gICAgKS5mb3IodGhpcy5wdXNoKTtcbiAgICBsb2cudmVyYm9zZShgcHVzaGluZyB0YXNrICR7dGFzay5jbGFzc2lmaWNhdGlvbn1gKTtcbiAgICBjb25zdCB0ID0gYXdhaXQgdGhpcy50YXNrcy5jcmVhdGUodGFzaywgY3R4KTtcbiAgICBsb2cuaW5mbyhgJHt0YXNrLmNsYXNzaWZpY2F0aW9ufSB0YXNrIHJlZ2lzdGVyZWQgdW5kZXIgJHt0LmlkfWApO1xuICAgIGlmICghdHJhY2spIHJldHVybiB0IGFzIGFueTtcbiAgICBjb25zdCB0cmFja2VyID0gbmV3IFRhc2tUcmFja2VyPE8+KHRoaXMuYnVzLCB0KTtcbiAgICByZXR1cm4geyB0YXNrOiB0LCB0cmFja2VyIH0gYXMgYW55O1xuICB9XG5cbiAgc2NoZWR1bGU8SSwgTz4oXG4gICAgdGFzazogVGFza01vZGVsPEksIE8+LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IHtcbiAgICBmb3I6ICh3aGVuOiBEYXRlVGFyZ2V0KSA9PiBQcm9taXNlPFRhc2tNb2RlbDxJLCBPPj47XG4gIH07XG4gIHNjaGVkdWxlPEksIE8+KFxuICAgIHRhc2s6IFRhc2tNb2RlbDxJLCBPPixcbiAgICB0cmFjazogZmFsc2UsXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKToge1xuICAgIGZvcjogKHdoZW46IERhdGVUYXJnZXQpID0+IFByb21pc2U8VGFza01vZGVsPEksIE8+PjtcbiAgfTtcbiAgc2NoZWR1bGU8SSwgTz4oXG4gICAgdGFzazogVGFza01vZGVsPEksIE8+LFxuICAgIHRyYWNrOiB0cnVlLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IHtcbiAgICBmb3I6IChcbiAgICAgIHdoZW46IERhdGVUYXJnZXRcbiAgICApID0+IFByb21pc2U8eyB0YXNrOiBUYXNrTW9kZWw8SSwgTz47IHRyYWNrZXI6IFRhc2tUcmFja2VyPE8+IH0+O1xuICB9O1xuICBzY2hlZHVsZTxJLCBPLCBUUkFDSyBleHRlbmRzIGJvb2xlYW4+KFxuICAgIHRhc2s6IFRhc2tNb2RlbDxJLCBPPixcbiAgICB0cmFjazogVFJBQ0sgPSBmYWxzZSBhcyBUUkFDSyxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8YW55PlxuICApOiB7XG4gICAgZm9yOiAoXG4gICAgICB3aGVuOiBEYXRlVGFyZ2V0XG4gICAgKSA9PiBQcm9taXNlPFxuICAgICAgVFJBQ0sgZXh0ZW5kcyB0cnVlXG4gICAgICAgID8geyB0YXNrOiBUYXNrTW9kZWw8SSwgTz47IHRyYWNrZXI6IFRhc2tUcmFja2VyPE8+IH1cbiAgICAgICAgOiBUYXNrTW9kZWw8SSwgTz5cbiAgICA+O1xuICB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9yOiBhc3luYyAoXG4gICAgICAgIHdoZW46IERhdGVUYXJnZXRcbiAgICAgICk6IFByb21pc2U8XG4gICAgICAgIFRSQUNLIGV4dGVuZHMgdHJ1ZVxuICAgICAgICAgID8geyB0YXNrOiBUYXNrTW9kZWw8SSwgTz47IHRyYWNrZXI6IFRhc2tUcmFja2VyPE8+IH1cbiAgICAgICAgICA6IFRhc2tNb2RlbDxJLCBPPlxuICAgICAgPiA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVkdWxlZFRvOiBEYXRlID0gd2hlbiBpbnN0YW5jZW9mIERhdGUgPyB3aGVuIDogd2hlbi5idWlsZCgpO1xuICAgICAgICB0YXNrLnN0YXR1cyA9IFRhc2tTdGF0dXMuU0NIRURVTEVEO1xuICAgICAgICB0YXNrLnNjaGVkdWxlZFRvID0gc2NoZWR1bGVkVG87XG4gICAgICAgIHRhc2submV4dFJ1bkF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0YXNrLmxlYXNlT3duZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRhc2subGVhc2VFeHBpcnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5wdXNoKHRhc2ssIHRyYWNrLCAuLi5hcmdzKSkgYXMgYW55O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdHJhY2soaWQ6IHN0cmluZywgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT4pIHtcbiAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBPcGVyYXRpb25LZXlzLlJFQUQsIHRydWUpXG4gICAgKS5mb3IodGhpcy50cmFjayk7XG4gICAgbG9nLnZlcmJvc2UoYHRyYWNraW5nIHRhc2sgJHtpZH1gKTtcbiAgICBsZXQgdGFzayA9IGF3YWl0IHRoaXMudGFza3MucmVhZChpZCwgY3R4KTtcbiAgICB0YXNrID0gYXdhaXQgdGhpcy5lbnN1cmVUYXNrRXJyb3IodGFzaywgY3R4KTtcbiAgICBsb2cuaW5mbyhgJHt0YXNrLmNsYXNzaWZpY2F0aW9ufSB0YXNrIGZvdW5kIHdpdGggaWQgJHtpZH1gKTtcbiAgICBjb25zdCB0cmFja2VyID0gbmV3IFRhc2tUcmFja2VyPCh0eXBlb2YgdGFzaylbXCJvdXRwdXRcIl0+KHRoaXMuYnVzLCB0YXNrKTtcbiAgICByZXR1cm4geyB0YXNrLCB0cmFja2VyIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZW5zdXJlVGFza0Vycm9yKFxuICAgIHRhc2s6IFRhc2tNb2RlbCxcbiAgICBjdHg6IENvbnRleHRcbiAgKTogUHJvbWlzZTxUYXNrTW9kZWw+IHtcbiAgICBpZiAoXG4gICAgICAhW1Rhc2tTdGF0dXMuRkFJTEVELCBUYXNrU3RhdHVzLkNBTkNFTEVEXS5pbmNsdWRlcyh0YXNrLnN0YXR1cykgfHxcbiAgICAgIHRhc2suZXJyb3JcbiAgICApIHtcbiAgICAgIHJldHVybiB0YXNrO1xuICAgIH1cbiAgICBsZXQgY3VycmVudCA9IHRhc2s7XG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCA2OyBhdHRlbXB0ICs9IDEpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDIwKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxhdGVzdCA9IGF3YWl0IHRoaXMudGFza3MucmVhZChjdXJyZW50LmlkLCBjdHgpO1xuICAgICAgICBpZiAobGF0ZXN0LmVycm9yKSByZXR1cm4gbGF0ZXN0O1xuICAgICAgICBjdXJyZW50ID0gbGF0ZXN0O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbChcbiAgICBpZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IFByb21pc2U8VGFza01vZGVsPiB7XG4gICAgY29uc3QgeyBjdHggfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcImNhbmNlbFwiLCB0cnVlKSkuZm9yKHRoaXMuY2FuY2VsKTtcbiAgICBjb25zdCB0ID0gYXdhaXQgdGhpcy50YXNrcy5yZWFkKGlkLCBjdHgpO1xuICAgIGlmICh0LnN0YXR1cyA9PT0gVGFza1N0YXR1cy5TVUNDRUVERUQgfHwgdC5zdGF0dXMgPT09IFRhc2tTdGF0dXMuRkFJTEVEKVxuICAgICAgcmV0dXJuIHQ7XG4gICAgdC5zdGF0dXMgPSBUYXNrU3RhdHVzLkNBTkNFTEVEO1xuICAgIGNvbnN0IGNhbmNlbEVycm9yID0gbmV3IFRhc2tFcnJvck1vZGVsKHtcbiAgICAgIG1lc3NhZ2U6IGBUYXNrICR7dC5pZH0gY2FuY2VsZWRgLFxuICAgICAgY29kZTogNDAwLFxuICAgIH0pO1xuICAgIHQuZXJyb3IgPSBjYW5jZWxFcnJvcjtcbiAgICB0LmxlYXNlT3duZXIgPSB1bmRlZmluZWQ7XG4gICAgdC5sZWFzZUV4cGlyeSA9IHVuZGVmaW5lZDtcbiAgICB0Lm5leHRSdW5BdCA9IHVuZGVmaW5lZDtcbiAgICB0LnNjaGVkdWxlZFRvID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy50YXNrcy51cGRhdGUodCwgY3R4KTtcbiAgICBhd2FpdCB0aGlzLmVtaXRTdGF0dXMoY3R4LCBzYXZlZCwgVGFza1N0YXR1cy5DQU5DRUxFRCwgY2FuY2VsRXJyb3IpO1xuICAgIHJldHVybiBzYXZlZDtcbiAgfVxuXG4gIGFzeW5jIGlzUnVubmluZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLmxvY2suYWNxdWlyZSgpO1xuICAgIGNvbnN0IHJ1bm5pbmcgPSB0aGlzLnJ1bm5pbmc7XG4gICAgdGhpcy5sb2NrLnJlbGVhc2UoKTtcbiAgICByZXR1cm4gcnVubmluZztcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBjdHggfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcInJ1blwiLCB0cnVlKSkuZm9yKHRoaXMuc3RhcnQpO1xuICAgIGF3YWl0IHRoaXMubG9jay5hY3F1aXJlKCk7XG4gICAgaWYgKHRoaXMucnVubmluZykgcmV0dXJuO1xuICAgIHRoaXMucnVubmluZyA9IHRydWU7XG4gICAgdGhpcy5sb2NrLnJlbGVhc2UoKTtcbiAgICB0aGlzLmlkbGVEZWxheU1zID0gdGhpcy5jb25maWcucG9sbE1zSWRsZTtcbiAgICB2b2lkIHRoaXMubG9vcChjdHgpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCguLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8YW55Pik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFBlcnNpc3RlbmNlS2V5cy5TSFVURE9XTiwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLnN0b3ApO1xuICAgIGF3YWl0IHRoaXMubG9jay5hY3F1aXJlKCk7XG4gICAgaWYgKCF0aGlzLnJ1bm5pbmcpXG4gICAgICBsb2cud2Fybihgc3RvcCBtZXRob2QgY2FsbGVkIHdoZW4gdGFzayBlbmdpbmUgd2FzIG5vdCBydW5uaW5nYCk7XG4gICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5sb2NrLnJlbGVhc2UoKTtcblxuICAgIGNvbnN0IHJ1bm5pbmdUYXNrcyA9IGF3YWl0IHRoaXMudGFza3NcbiAgICAgIC5zZWxlY3QoW1wiaWRcIl0pXG4gICAgICAud2hlcmUoQ29uZGl0aW9uLmF0dHI8VGFza01vZGVsPihcInN0YXR1c1wiKS5lcShUYXNrU3RhdHVzLlJVTk5JTkcpKVxuICAgICAgLmV4ZWN1dGUoY3R4KTtcblxuICAgIGNvbnN0IHRpbWVvdXQgPVxuICAgICAgY3R4LmdldE9yVW5kZWZpbmVkPy4oXCJncmFjZWZ1bFNodXRkb3duTXNUaW1lb3V0XCIpID8/XG4gICAgICB0aGlzLmNvbmZpZy5ncmFjZWZ1bFNodXRkb3duTXNUaW1lb3V0O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGxvZy5lcnJvcihgR3JhY2VmdWwgc2h1dGRvd24gaW50ZXJydXB0ZWQgYWZ0ZXIgJHt0aW1lb3V0fSBtcy4uLmApO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCB0aW1lb3V0KTtcblxuICAgICAgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICBydW5uaW5nVGFza3MubWFwKFxuICAgICAgICAgICh7IGlkIH0pID0+XG4gICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudHJhY2soaWQsIGN0eClcbiAgICAgICAgICAgICAgICAudGhlbigoeyB0cmFja2VyIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRyYWNrZXIucmVzb2x2ZSgpLnRoZW4ocmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgICBgR3JhY2VmdWwgc2h1dGRvd24gY29tcGxldGVkIGJlZm9yZSBleHBpcnkuIGNvbmNsdWRlZCAke3Jlc3VsdC5sZW5ndGh9IHRhc2tzYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBXb3JrZXIgbG9vcFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGxvb3AoLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8YW55Pik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLmxvb3ApO1xuICAgIGNvbnN0IGF1dG9TaHV0ZG93bkNvbmZpZzogVGFza0VuZ2luZUF1dG9TaHV0ZG93bkNvbmZpZyA9IHRoaXMuY29uZmlnXG4gICAgICAuYXV0b1NodXRkb3duID8/IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgYmFja29mZlN0ZXBNczogMCxcbiAgICAgIG1heElkbGVEZWxheU1zOiB0aGlzLmNvbmZpZy5wb2xsTXNJZGxlLFxuICAgIH07XG4gICAgY29uc3QgbWF4SWRsZURlbGF5ID0gTWF0aC5tYXgoXG4gICAgICBhdXRvU2h1dGRvd25Db25maWcubWF4SWRsZURlbGF5TXMgPz8gdGhpcy5jb25maWcucG9sbE1zSWRsZSxcbiAgICAgIHRoaXMuY29uZmlnLnBvbGxNc0lkbGVcbiAgICApO1xuICAgIGNvbnN0IGJhY2tvZmZTdGVwTXMgPSBhdXRvU2h1dGRvd25Db25maWcuYmFja29mZlN0ZXBNcyA/PyAwO1xuXG4gICAgd2hpbGUgKGF3YWl0IHRoaXMuaXNSdW5uaW5nKCkpIHtcbiAgICAgIGNvbnN0IGNsYWltZWQgPSBhd2FpdCB0aGlzLmNsYWltQmF0Y2goY3R4KTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChjbGFpbWVkLm1hcCgodCkgPT4gdGhpcy5leGVjdXRlQ2xhaW1lZCh0KSkpO1xuXG4gICAgICBjb25zdCBpZGxlID0gY2xhaW1lZC5sZW5ndGggPT09IDA7XG4gICAgICBpZiAoaWRsZSkge1xuICAgICAgICBpZiAoYXV0b1NodXRkb3duQ29uZmlnLmVuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLmlkbGVEZWxheU1zID0gTWF0aC5taW4oXG4gICAgICAgICAgICB0aGlzLmlkbGVEZWxheU1zICsgYmFja29mZlN0ZXBNcyxcbiAgICAgICAgICAgIG1heElkbGVEZWxheVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuaWRsZURlbGF5TXMgPj0gbWF4SWRsZURlbGF5KSB7XG4gICAgICAgICAgICBjdHgubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgIGBhdXRvLXNodXRkb3duIHRyaWdnZXJlZCBhZnRlciAke3RoaXMuaWRsZURlbGF5TXN9bXMgaWRsZSBwb2xsaW5nYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcChjdHgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmlkbGVEZWxheU1zID0gdGhpcy5jb25maWcucG9sbE1zSWRsZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pZGxlRGVsYXlNcyA9IHRoaXMuY29uZmlnLnBvbGxNc0lkbGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdhaXRNcyA9IGlkbGUgPyB0aGlzLmlkbGVEZWxheU1zIDogdGhpcy5jb25maWcucG9sbE1zQnVzeTtcbiAgICAgIGF3YWl0IHNsZWVwKE1hdGgubWF4KHdhaXRNcywgMCkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjbGFpbUJhdGNoKGN0eDogQ29udGV4dDxhbnk+KTogUHJvbWlzZTxUYXNrTW9kZWxbXT4ge1xuICAgIGNvbnN0IGxvZyA9IGN0eC5sb2dnZXIuZm9yKHRoaXMuY2xhaW1CYXRjaCk7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblxuICAgIC8vIFJ1bm5hYmxlOlxuICAgIC8vIC0gUEVORElOR1xuICAgIC8vIC0gV0FJVElOR19SRVRSWSB3aXRoIG5leHRSdW5BdCA8PSBub3dcbiAgICAvLyAtIFJVTk5JTkcgd2l0aCBleHBpcmVkIGxlYXNlIChyZWNvdmVyeSlcbiAgICBjb25zdCBjb25kUGVuZGluZyA9IENvbmRpdGlvbi5hdHRyaWJ1dGU8VGFza01vZGVsPihcInN0YXR1c1wiKS5lcShcbiAgICAgIFRhc2tTdGF0dXMuUEVORElOR1xuICAgICk7XG4gICAgY29uc3QgY29uZFJldHJ5ID0gQ29uZGl0aW9uLmF0dHJpYnV0ZTxUYXNrTW9kZWw+KFwic3RhdHVzXCIpXG4gICAgICAuZXEoVGFza1N0YXR1cy5XQUlUSU5HX1JFVFJZKVxuICAgICAgLmFuZChDb25kaXRpb24uYXR0cmlidXRlPFRhc2tNb2RlbD4oXCJuZXh0UnVuQXRcIikubHRlKG5vdykpO1xuXG4gICAgY29uc3QgY29uZExlYXNlRXhwaXJlZCA9IENvbmRpdGlvbi5hdHRyaWJ1dGU8VGFza01vZGVsPihcInN0YXR1c1wiKVxuICAgICAgLmVxKFRhc2tTdGF0dXMuUlVOTklORylcbiAgICAgIC5hbmQoQ29uZGl0aW9uLmF0dHJpYnV0ZTxUYXNrTW9kZWw+KFwibGVhc2VFeHBpcnlcIikubHRlKG5vdykpO1xuXG4gICAgY29uc3QgY29uZFNjaGVkdWxlZCA9IENvbmRpdGlvbi5hdHRyaWJ1dGU8VGFza01vZGVsPihcInN0YXR1c1wiKVxuICAgICAgLmVxKFRhc2tTdGF0dXMuU0NIRURVTEVEKVxuICAgICAgLmFuZChDb25kaXRpb24uYXR0cmlidXRlPFRhc2tNb2RlbD4oXCJzY2hlZHVsZWRUb1wiKS5sdGUobm93KSk7XG5cbiAgICBjb25zdCBydW5uYWJsZSA9IGNvbmRQZW5kaW5nXG4gICAgICAub3IoY29uZFJldHJ5KVxuICAgICAgLm9yKGNvbmRMZWFzZUV4cGlyZWQpXG4gICAgICAub3IoY29uZFNjaGVkdWxlZCk7XG5cbiAgICAvLyBGZXRjaCBtb3JlIHRoYW4gY29uY3VycmVuY3kgYmVjYXVzZSBzb21lIHdpbGwgZmFpbCB0byBjbGFpbSBkdWUgdG8gY29uZmxpY3RzXG4gICAgY29uc3QgY2FuZGlkYXRlczogVGFza01vZGVsW10gPSBhd2FpdCB0aGlzLnRhc2tzXG4gICAgICAuc2VsZWN0KClcbiAgICAgIC53aGVyZShydW5uYWJsZSlcbiAgICAgIC5saW1pdChNYXRoLm1heCh0aGlzLmNvbmZpZy5jb25jdXJyZW5jeSAqIDQsIDIwKSlcbiAgICAgIC5leGVjdXRlKCk7XG5cbiAgICBsb2cudmVyYm9zZShgY2xhaW1CYXRjaCBjYW5kaWRhdGVzOiR7Y2FuZGlkYXRlcy5sZW5ndGh9YCk7XG5cbiAgICBjb25zdCBvdXQ6IFRhc2tNb2RlbFtdID0gW107XG4gICAgZm9yIChjb25zdCBjIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgIGNvbnN0IGNsYWltZWQgPSBhd2FpdCB0aGlzLnRyeUNsYWltKGMsIGN0eCk7XG4gICAgICBpZiAoY2xhaW1lZCkgb3V0LnB1c2goY2xhaW1lZCk7XG4gICAgICBpZiAob3V0Lmxlbmd0aCA+PSB0aGlzLmNvbmZpZy5jb25jdXJyZW5jeSkgYnJlYWs7XG4gICAgfVxuICAgIGxvZy52ZXJib3NlKGBjbGFpbUJhdGNoIGNsYWltZWQ6JHtvdXQubGVuZ3RofWApO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgdHJ5Q2xhaW0oXG4gICAgdGFzazogVGFza01vZGVsLFxuICAgIGN0eDogQ29udGV4dFxuICApOiBQcm9taXNlPFRhc2tNb2RlbCB8IG51bGw+IHtcbiAgICBjb25zdCBsb2cgPSBjdHgubG9nZ2VyLmZvcih0aGlzLmNsYWltQmF0Y2gpO1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgbGV0IHNvdXJjZTogVGFza01vZGVsID0gdGFzaztcbiAgICB0cnkge1xuICAgICAgc291cmNlID0gYXdhaXQgdGhpcy50YXNrcy5yZWFkKHRhc2suaWQsIGN0eCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBmYWxsYmFjayB0byBjYW5kaWRhdGUgcGF5bG9hZFxuICAgIH1cblxuICAgIGNvbnN0IGNsYWltZWQgPSBuZXcgVGFza01vZGVsKHtcbiAgICAgIC4uLnNvdXJjZSxcbiAgICAgIHN0YXR1czogVGFza1N0YXR1cy5SVU5OSU5HLFxuICAgICAgbGVhc2VPd25lcjogdGhpcy5jb25maWcud29ya2VySWQudG9TdHJpbmcoKSxcbiAgICAgIGxlYXNlRXhwaXJ5OiBuZXcgRGF0ZShcbiAgICAgICAgbm93ICsgKHBhcnNlSW50KHRoaXMuY29uZmlnLmxlYXNlTXMudG9TdHJpbmcoKSkgfHwgNjBfMDAwKVxuICAgICAgKSxcbiAgICAgIHNjaGVkdWxlZFRvOiB1bmRlZmluZWQsXG4gICAgICBuZXh0UnVuQXQ6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGxvZy5pbmZvKFxuICAgICAgYHJ1bm5pbmcgaGFuZGxlciBmb3IgJHt0YXNrLmlkfSAoJHt0YXNrLmNsYXNzaWZpY2F0aW9ufSkgYXRvbWljaXR5ICR7dGFzay5hdG9taWNpdHl9YFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIG9wdGltaXN0aWMgdXBkYXRlOyBjb25mbGljdCBlcnJvcnMgZGVwZW5kIG9uIGFkYXB0ZXIgaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRhc2tzLnVwZGF0ZShjbGFpbWVkLCBjdHgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBFeGVjdXRpb25cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByb3RlY3RlZCBhc3luYyBleGVjdXRlQ2xhaW1lZCh0YXNrOiBUYXNrTW9kZWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIHRhc2suY2xhc3NpZmljYXRpb24sIHRydWUpKS5mb3IoXG4gICAgICB0aGlzLmV4ZWN1dGVDbGFpbWVkXG4gICAgKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBjb25zdCBlbmdpbmUgPSB0aGlzO1xuICAgIGxldCBsb2dQaXBlUXVldWU6IFByb21pc2U8dm9pZD4gPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBjb25zdCB0YXNrQ3R4OiBUYXNrQ29udGV4dCA9IG5ldyBUYXNrQ29udGV4dChjdHgpLmFjY3VtdWxhdGUoe1xuICAgICAgdGFza0lkOiB0YXNrLmlkLFxuICAgICAgbG9nZ2VyOiBuZXcgVGFza0xvZ2dlcihcbiAgICAgICAgbG9nLFxuICAgICAgICB0aGlzLmNvbmZpZy5zdHJlYW1CdWZmZXJTaXplLFxuICAgICAgICB0aGlzLmNvbmZpZy5tYXhMb2dnaW5nQnVmZmVyXG4gICAgICApLFxuICAgICAgYXR0ZW1wdDogdGFzay5hdHRlbXB0LFxuICAgICAgcmVzdWx0Q2FjaGU6IHsgXCJ0YXNrLmF0dGVtcHRcIjogdGFzay5hdHRlbXB0IH0sXG4gICAgICBwaXBlOiBhc3luYyBmdW5jdGlvbiAodGhpczogVGFza0NvbnRleHQsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBlbmdpbmUubm9ybWFsaXplUGlwZUFyZ3MoYXJncyk7XG4gICAgICAgIGlmICghbm9ybWFsaXplZC5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbG9nUGlwZVF1ZXVlID0gbG9nUGlwZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IFt1cGRhdGVkLCBsb2dzXSA9IGF3YWl0IGVuZ2luZS5hcHBlbmRMb2coXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgdGFzayxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIEtlZXAgdGhlIG9yaWdpbmFsIHRhc2sgb2JqZWN0IHJlZmVyZW5jZSB1cGRhdGVkIHNvIGNvbXBvc2l0ZSBleGVjdXRpb24gZG9lc24ndFxuICAgICAgICAgIC8vIG92ZXJ3cml0ZSBsb2dUYWlsIHdpdGggc3RhbGUgc3RhdGUuXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0YXNrLCB1cGRhdGVkKTtcbiAgICAgICAgICBhd2FpdCBlbmdpbmUuZW1pdExvZyh0aGlzLCB0YXNrLmlkLCBsb2dzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGxvZ1BpcGVRdWV1ZTtcbiAgICAgIH0sXG4gICAgICBmbHVzaDogYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGFza0N0eC5sb2dnZXIuZmx1c2godGFza0N0eC5waXBlKTtcbiAgICAgIH0sXG4gICAgICBwcm9ncmVzczogYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVtaXRQcm9ncmVzcyh0YXNrQ3R4LCB0YXNrLmlkLCBkYXRhKTtcbiAgICAgIH0sXG4gICAgICBoZWFydGJlYXQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gZXh0ZW5kIGxlYXNlXG4gICAgICAgIGlmICh0YXNrLmxlYXNlT3duZXIgIT09IHRoaXMuY29uZmlnLndvcmtlcklkKSByZXR1cm47XG4gICAgICAgIHRhc2subGVhc2VFeHBpcnkgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgdGhpcy5jb25maWcubGVhc2VNcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGFzayA9IGF3YWl0IHRoaXMudGFza3MudXBkYXRlKHRhc2spO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBpZiB3ZSBsb3NlIHRoZSBjbGFpbSwgZXhlY3V0aW9uIHNob3VsZCBzdGlsbCBwcm9jZWVkOyBuZXh0IHVwZGF0ZSB3aWxsIGZhaWwgYW5kIGJlIHJldHJpZWQgYnkgcmVjb3ZlcnlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KSBhcyBUYXNrQ29udGV4dDtcblxuICAgIGF3YWl0IHRoaXMuZW1pdFN0YXR1cyh0YXNrQ3R4LCB0YXNrLCBUYXNrU3RhdHVzLlJVTk5JTkcpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBvdXRwdXQ6IGFueTtcbiAgICAgIGlmICh0YXNrLmF0b21pY2l0eSA9PT0gVGFza1R5cGUuQ09NUE9TSVRFKSB7XG4gICAgICAgIG91dHB1dCA9IGF3YWl0IHRoaXMucnVuQ29tcG9zaXRlKHRhc2ssIHRhc2tDdHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGxhdGVzdCA9IGF3YWl0IHRoaXMudGFza3MucmVhZCh0YXNrLmlkLCB0YXNrQ3R4KTtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRhc2ssIGxhdGVzdCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIGtlZXAgYmVzdC1lZmZvcnQgdGFzayBzdGF0ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChvdXRwdXQ/LnN0ZXBSZXN1bHRzKSB7XG4gICAgICAgICAgdGFzay5zdGVwUmVzdWx0cyA9IG91dHB1dC5zdGVwUmVzdWx0cztcbiAgICAgICAgICB0YXNrLmN1cnJlbnRTdGVwID0gb3V0cHV0LnN0ZXBSZXN1bHRzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMucmVnaXN0cnkuZ2V0KHRhc2suY2xhc3NpZmljYXRpb24pO1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgYGhhbmRsZXIgdHlwZSBmb3IgJHt0YXNrLmlkfSBpcyAke2hhbmRsZXI/LmNvbnN0cnVjdG9yPy5uYW1lID8/IFwibm9uZVwifWBcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFoYW5kbGVyKVxuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgYE5vIHRhc2sgaGFuZGxlciByZWdpc3RlcmVkIGZvciB0eXBlOiAke3Rhc2suY2xhc3NpZmljYXRpb259YFxuICAgICAgICAgICk7XG4gICAgICAgIG91dHB1dCA9IGF3YWl0IGhhbmRsZXIucnVuKHRhc2suaW5wdXQsIHRhc2tDdHgpO1xuICAgICAgICAvLyBUYXNrSGFuZGxlcnMgc2hvdWxkbid0IG5lZWQgdG8gZXhwbGljaXRseSBjYWxsIGN0eC5mbHVzaCgpLlxuICAgICAgICAvLyBGbHVzaCBidWZmZXJlZCBsb2dzIGJlZm9yZSB3ZSBwZXJzaXN0IGZpbmFsIHRhc2sgc3RhdGUuXG4gICAgICAgIGF3YWl0IHRhc2tDdHguZmx1c2goKTtcbiAgICAgICAgbG9nLnZlcmJvc2UoYGhhbmRsZXIgZmluaXNoZWQgZm9yICR7dGFzay5pZH1gKTtcbiAgICAgIH1cblxuICAgICAgdGFzay5zdGF0dXMgPSBUYXNrU3RhdHVzLlNVQ0NFRURFRDtcbiAgICAgIHRhc2sub3V0cHV0ID0gb3V0cHV0O1xuICAgICAgdGFzay5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgIHRhc2subGVhc2VPd25lciA9IHVuZGVmaW5lZDtcbiAgICAgIHRhc2subGVhc2VFeHBpcnkgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHBlcnNpc3RlZCA9IGF3YWl0IHRoaXMudGFza3MudXBkYXRlKHRhc2ssIHRhc2tDdHgpO1xuICAgICAgT2JqZWN0LmFzc2lnbih0YXNrLCBwZXJzaXN0ZWQpO1xuICAgICAgdGFza0N0eC5sb2dnZXIuaW5mbyhgdGFzayAke3Rhc2suaWR9IHN1Y2Nlc3Mgc3RhdGUgJHt0YXNrLnN0YXR1c31gKTtcbiAgICAgIGxvZy5pbmZvKFxuICAgICAgICBgdGFzayAke3Rhc2suaWR9IHN1Y2Nlc3Mgc3RhdGUgJHt0YXNrLnN0YXR1c30gYXR0ZW1wdCAke3Rhc2suYXR0ZW1wdH1gXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5lbWl0U3RhdHVzKHRhc2tDdHgsIHRhc2ssIFRhc2tTdGF0dXMuU1VDQ0VFREVELCBvdXRwdXQpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAvLyBFbnN1cmUgYnVmZmVyZWQgaGFuZGxlciBsb2dzIGFyZSBwZXJzaXN0ZWQgYmVmb3JlIHdlIGVtaXQgYW55IGVuZ2luZS1nZW5lcmF0ZWQgbG9ncy9ldmVudHMuXG4gICAgICAvLyBUaGlzIHByZXNlcnZlcyBjaHJvbm9sb2dpY2FsIG9yZGVyaW5nIHdoZW4gVGFza0hhbmRsZXJzIGRvbid0IGNhbGwgY3R4LmZsdXNoKCkuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0YXNrQ3R4LmZsdXNoKCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gYmVzdC1lZmZvcnRcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxhdGVzdCA9IGF3YWl0IHRoaXMudGFza3MucmVhZCh0YXNrLmlkLCB0YXNrQ3R4KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0YXNrLCBsYXRlc3QpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGtlZXAgYmVzdC1lZmZvcnQgdGFzayBzdGF0ZSBmb3IgcmV0cmllcy9mYWlsdXJlc1xuICAgICAgfVxuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFRhc2tTdGF0ZUNoYW5nZUVycm9yKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlVGFza1N0YXRlQ2hhbmdlKGVyci5yZXF1ZXN0LCB0YXNrLCB0YXNrQ3R4KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKFwidGFzayBleGVjdXRpb24gZXJyb3JcIiwgZXJyKTtcbiAgICAgIGlmICh0YXNrLmF0b21pY2l0eSA9PT0gVGFza1R5cGUuQ09NUE9TSVRFKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXN1bHRzID0gdGhpcy5ub3JtYWxpemVTdGVwUmVzdWx0cyh0YXNrLnN0ZXBSZXN1bHRzKTtcbiAgICAgICAgdGFzay5zdGVwUmVzdWx0cyA9IG5vcm1hbGl6ZWRSZXN1bHRzO1xuICAgICAgICBpZiAodGFzay5jdXJyZW50U3RlcCA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZmFpbGVkSWR4ID0gbm9ybWFsaXplZFJlc3VsdHMuZmluZEluZGV4KFxuICAgICAgICAgICAgKHN0ZXApID0+IHN0ZXAuc3RhdHVzID09PSBUYXNrU3RhdHVzLkZBSUxFRFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGZhaWxlZElkeCA+PSAwKSB0YXNrLmN1cnJlbnRTdGVwID0gZmFpbGVkSWR4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBuZXh0QXR0ZW1wdCA9ICh0YXNrLmF0dGVtcHQgPz8gMCkgKyAxO1xuXG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplRXJyb3IoZXJyKTtcblxuICAgICAgaWYgKG5leHRBdHRlbXB0IDwgdGFzay5tYXhBdHRlbXB0cykge1xuICAgICAgICBjb25zdCBkZWxheSA9IGNvbXB1dGVCYWNrb2ZmTXMoXG4gICAgICAgICAgbmV4dEF0dGVtcHQsXG4gICAgICAgICAgdGhpcy5ub3JtYWxpemVCYWNrb2ZmKHRhc2suYmFja29mZilcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV4dFJ1bkF0ID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIGRlbGF5KTtcblxuICAgICAgICB0YXNrLmF0dGVtcHQgPSBuZXh0QXR0ZW1wdDtcbiAgICAgICAgdGFzay5zdGF0dXMgPSBUYXNrU3RhdHVzLldBSVRJTkdfUkVUUlk7XG4gICAgICAgIHRhc2submV4dFJ1bkF0ID0gbmV4dFJ1bkF0O1xuICAgICAgICB0YXNrLmVycm9yID0gc2VyaWFsaXplZDtcbiAgICAgICAgdGFzay5sZWFzZU93bmVyID0gdW5kZWZpbmVkO1xuICAgICAgICB0YXNrLmxlYXNlRXhwaXJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwZXJzaXN0ZWQgPSBhd2FpdCB0aGlzLnRhc2tzLnVwZGF0ZSh0YXNrLCB0YXNrQ3R4KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0YXNrLCBwZXJzaXN0ZWQpO1xuICAgICAgICBsb2cud2FybihcbiAgICAgICAgICBgdGFzayAke3Rhc2suaWR9IHdhaXRpbmcgcmV0cnkgc3RhdGUgJHt0YXNrLnN0YXR1c30gYXR0ZW1wdCAke3Rhc2suYXR0ZW1wdH1gXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRhc2tDdHgucGlwZShMb2dMZXZlbC53YXJuLCBgUmV0cnkgc2NoZWR1bGVkYCwge1xuICAgICAgICAgIG5leHRSdW5BdCxcbiAgICAgICAgICBkZWxheU1zOiBkZWxheSxcbiAgICAgICAgICBhdHRlbXB0OiBuZXh0QXR0ZW1wdCxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdFN0YXR1cyhcbiAgICAgICAgICB0YXNrQ3R4LFxuICAgICAgICAgIHRhc2ssXG4gICAgICAgICAgVGFza1N0YXR1cy5XQUlUSU5HX1JFVFJZLFxuICAgICAgICAgIHNlcmlhbGl6ZWQsXG4gICAgICAgICAgZXJyXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXNrLmF0dGVtcHQgPSBuZXh0QXR0ZW1wdDtcbiAgICAgICAgdGFzay5zdGF0dXMgPSBUYXNrU3RhdHVzLkZBSUxFRDtcbiAgICAgICAgdGFzay5lcnJvciA9IHNlcmlhbGl6ZWQ7XG4gICAgICAgIHRhc2subGVhc2VPd25lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGFzay5sZWFzZUV4cGlyeSA9IHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBwZXJzaXN0ZWQgPSBhd2FpdCB0aGlzLnRhc2tzLnVwZGF0ZSh0YXNrLCB0YXNrQ3R4KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0YXNrLCBwZXJzaXN0ZWQpO1xuICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgYHRhc2sgJHt0YXNrLmlkfSBmYWlsZWQgc3RhdGUgJHt0YXNrLnN0YXR1c30gYXR0ZW1wdCAke3Rhc2suYXR0ZW1wdH1gXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRhc2tDdHgucGlwZShcbiAgICAgICAgICBMb2dMZXZlbC5lcnJvcixcbiAgICAgICAgICBgVGFzayBmYWlsZWQgKG1heCBhdHRlbXB0cyByZWFjaGVkKWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF4QXR0ZW1wdHM6IHRhc2subWF4QXR0ZW1wdHMsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLmVtaXRTdGF0dXMoXG4gICAgICAgICAgdGFza0N0eCxcbiAgICAgICAgICB0YXNrLFxuICAgICAgICAgIFRhc2tTdGF0dXMuRkFJTEVELFxuICAgICAgICAgIHNlcmlhbGl6ZWQsXG4gICAgICAgICAgZXJyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVRhc2tTdGF0ZUNoYW5nZShcbiAgICByZXF1ZXN0OiBUYXNrU3RhdGVDaGFuZ2VSZXF1ZXN0LFxuICAgIHRhc2s6IFRhc2tNb2RlbCxcbiAgICBjdHg6IFRhc2tDb250ZXh0XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRhc2subGVhc2VPd25lciA9IHVuZGVmaW5lZDtcbiAgICB0YXNrLmxlYXNlRXhwaXJ5ID0gdW5kZWZpbmVkO1xuICAgIHN3aXRjaCAocmVxdWVzdC5zdGF0dXMpIHtcbiAgICAgIGNhc2UgVGFza1N0YXR1cy5DQU5DRUxFRDoge1xuICAgICAgICBjb25zdCBjYW5jZWxFcnJvciA9XG4gICAgICAgICAgcmVxdWVzdC5lcnJvciA/P1xuICAgICAgICAgIG5ldyBUYXNrRXJyb3JNb2RlbCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgVGFzayAke3Rhc2suaWR9IGNhbmNlbGVkYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGFzay5zdGF0dXMgPSBUYXNrU3RhdHVzLkNBTkNFTEVEO1xuICAgICAgICB0YXNrLmVycm9yID0gY2FuY2VsRXJyb3I7XG4gICAgICAgIHRhc2submV4dFJ1bkF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0YXNrLnNjaGVkdWxlZFRvID0gdW5kZWZpbmVkO1xuICAgICAgICB0YXNrID0gYXdhaXQgdGhpcy50YXNrcy51cGRhdGUodGFzaywgY3R4KTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0U3RhdHVzKGN0eCwgdGFzaywgVGFza1N0YXR1cy5DQU5DRUxFRCwgY2FuY2VsRXJyb3IpO1xuICAgICAgICBhd2FpdCBjdHgucGlwZShMb2dMZXZlbC53YXJuLCBgVGFzayBjYW5jZWxlZCB2aWEgY29udGV4dGApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlIFRhc2tTdGF0dXMuV0FJVElOR19SRVRSWToge1xuICAgICAgICBjb25zdCBuZXh0QXR0ZW1wdCA9ICh0YXNrLmF0dGVtcHQgPz8gMCkgKyAxO1xuICAgICAgICBjb25zdCBiYWNrb2ZmID0gdGhpcy5ub3JtYWxpemVCYWNrb2ZmKHRhc2suYmFja29mZik7XG4gICAgICAgIGNvbnN0IGRlbGF5ID0gY29tcHV0ZUJhY2tvZmZNcyhuZXh0QXR0ZW1wdCwgYmFja29mZik7XG4gICAgICAgIGNvbnN0IG5leHRSdW5BdCA9XG4gICAgICAgICAgcmVxdWVzdC5zY2hlZHVsZWRUbyBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgID8gcmVxdWVzdC5zY2hlZHVsZWRUb1xuICAgICAgICAgICAgOiBuZXcgRGF0ZShEYXRlLm5vdygpICsgZGVsYXkpO1xuICAgICAgICBjb25zdCByZXRyeUVycm9yID1cbiAgICAgICAgICByZXF1ZXN0LmVycm9yID8/XG4gICAgICAgICAgbmV3IFRhc2tFcnJvck1vZGVsKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBUYXNrICR7dGFzay5pZH0gcmVxdWVzdGVkIHJldHJ5YCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGFzay5zdGF0dXMgPSBUYXNrU3RhdHVzLldBSVRJTkdfUkVUUlk7XG4gICAgICAgIHRhc2suYXR0ZW1wdCA9IG5leHRBdHRlbXB0O1xuICAgICAgICB0YXNrLmVycm9yID0gcmV0cnlFcnJvcjtcbiAgICAgICAgdGFzay5uZXh0UnVuQXQgPSBuZXh0UnVuQXQ7XG4gICAgICAgIHRhc2suc2NoZWR1bGVkVG8gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRhc2sgPSBhd2FpdCB0aGlzLnRhc2tzLnVwZGF0ZSh0YXNrLCBjdHgpO1xuICAgICAgICBhd2FpdCB0aGlzLmVtaXRTdGF0dXMoY3R4LCB0YXNrLCBUYXNrU3RhdHVzLldBSVRJTkdfUkVUUlksIHJldHJ5RXJyb3IpO1xuICAgICAgICBhd2FpdCBjdHgucGlwZShMb2dMZXZlbC53YXJuLCBgUmV0cnkgcmVxdWVzdGVkYCwge1xuICAgICAgICAgIG5leHRSdW5BdCxcbiAgICAgICAgICBkZWxheU1zOiBkZWxheSxcbiAgICAgICAgICBhdHRlbXB0OiBuZXh0QXR0ZW1wdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgVGFza1N0YXR1cy5TQ0hFRFVMRUQ6IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0LnNjaGVkdWxlZFRvKVxuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiU2NoZWR1bGVkIHN0YXRlIHJlcXVpcmVzIGEgdGFyZ2V0IGRhdGVcIik7XG4gICAgICAgIGNvbnN0IHJlc2NoZWR1bGVFcnJvciA9XG4gICAgICAgICAgcmVxdWVzdC5lcnJvciA/P1xuICAgICAgICAgIG5ldyBUYXNrRXJyb3JNb2RlbCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgVGFzayAke3Rhc2suaWR9IHJlc2NoZWR1bGVkYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGFzay5zdGF0dXMgPSBUYXNrU3RhdHVzLlNDSEVEVUxFRDtcbiAgICAgICAgdGFzay5zY2hlZHVsZWRUbyA9IHJlcXVlc3Quc2NoZWR1bGVkVG87XG4gICAgICAgIHRhc2suZXJyb3IgPSByZXNjaGVkdWxlRXJyb3I7XG4gICAgICAgIHRhc2submV4dFJ1bkF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0YXNrID0gYXdhaXQgdGhpcy50YXNrcy51cGRhdGUodGFzaywgY3R4KTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0U3RhdHVzKGN0eCwgdGFzaywgVGFza1N0YXR1cy5TQ0hFRFVMRUQsIHJlc2NoZWR1bGVFcnJvcik7XG4gICAgICAgIGF3YWl0IGN0eC5waXBlKExvZ0xldmVsLmluZm8sIGBUYXNrIHJlc2NoZWR1bGVkYCwge1xuICAgICAgICAgIHNjaGVkdWxlZFRvOiByZXF1ZXN0LnNjaGVkdWxlZFRvLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICBgVW5zdXBwb3J0ZWQgdGFzayBzdGF0ZSBjaGFuZ2UgcmVxdWVzdGVkOiAke3JlcXVlc3Quc3RhdHVzfWBcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcnVuQ29tcG9zaXRlKFxuICAgIHRhc2s6IFRhc2tNb2RlbCxcbiAgICBjb250ZXh0OiBUYXNrQ29udGV4dFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHsgY3R4IH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbY29udGV4dF0sIHRhc2suY2xhc3NpZmljYXRpb24sIHRydWUpXG4gICAgKS5mb3IodGhpcy5ydW5Db21wb3NpdGUpO1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5ub3JtYWxpemVTdGVwcyh0YXNrLnN0ZXBzKTtcbiAgICBsZXQgaWR4ID0gdGFzay5jdXJyZW50U3RlcCA/PyAwO1xuICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLm5vcm1hbGl6ZVN0ZXBSZXN1bHRzKHRhc2suc3RlcFJlc3VsdHMpO1xuXG4gICAgY29uc3QgY2FjaGVSZXN1bHQgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGNvbnRleHQuY2FjaGVSZXN1bHQoa2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoY3R4IGluc3RhbmNlb2YgVGFza0NvbnRleHQgJiYgY3R4ICE9PSBjb250ZXh0KSB7XG4gICAgICAgIGN0eC5jYWNoZVJlc3VsdChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHJlc3VsdHNbaV07XG4gICAgICBpZiAoZXhpc3Rpbmc/LnN0YXR1cyA9PT0gVGFza1N0YXR1cy5TVUNDRUVERUQpIHtcbiAgICAgICAgY29uc3QgcHJldlN0ZXAgPSBzdGVwc1tpXTtcbiAgICAgICAgaWYgKCFwcmV2U3RlcCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gYCR7dGFzay5pZH06c3RlcDoke2l9YDtcbiAgICAgICAgY2FjaGVSZXN1bHQocHJldlN0ZXAuY2xhc3NpZmljYXRpb24sIGV4aXN0aW5nLm91dHB1dCk7XG4gICAgICAgIGNhY2hlUmVzdWx0KGNhY2hlS2V5LCBleGlzdGluZy5vdXRwdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChpZHggPCBzdGVwcy5sZW5ndGgpIHtcbiAgICAgIGNvbnRleHQuc2V0U3RlcChpZHgpO1xuICAgICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2lkeF07XG4gICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5yZWdpc3RyeS5nZXQoc3RlcC5jbGFzc2lmaWNhdGlvbik7XG4gICAgICBpZiAoIWhhbmRsZXIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTm8gdGFzayBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIGNvbXBvc2l0ZSBzdGVwOiAke3N0ZXAuY2xhc3NpZmljYXRpb259YFxuICAgICAgICApO1xuXG4gICAgICBhd2FpdCBjb250ZXh0LnBpcGUoW1xuICAgICAgICBMb2dMZXZlbC5pbmZvLFxuICAgICAgICBgQ29tcG9zaXRlIHN0ZXAgJHtpZHggKyAxfS8ke3N0ZXBzLmxlbmd0aH06ICR7c3RlcC5jbGFzc2lmaWNhdGlvbn1gLFxuICAgICAgXSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG91dCA9IGF3YWl0IGhhbmRsZXIucnVuKHN0ZXAuaW5wdXQsIGNvbnRleHQpO1xuICAgICAgICAvLyBFbnN1cmUgc3RlcC10YWdnZWQgbG9ncyBhcmUgZmx1c2hlZCBiZWZvcmUgYWR2YW5jaW5nIHRoZSBzdGVwIHBvaW50ZXIuXG4gICAgICAgIGF3YWl0IGNvbnRleHQuZmx1c2goKTtcblxuICAgICAgICBjb25zdCBzdGVwSW5kZXggPSBpZHg7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHJlc3VsdHNbc3RlcEluZGV4XSA9IG5ldyBUYXNrU3RlcFJlc3VsdE1vZGVsKHtcbiAgICAgICAgICBzdGF0dXM6IFRhc2tTdGF0dXMuU1VDQ0VFREVELFxuICAgICAgICAgIG91dHB1dDogb3V0LFxuICAgICAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBgJHt0YXNrLmlkfTpzdGVwOiR7c3RlcEluZGV4fWA7XG4gICAgICAgIGNhY2hlUmVzdWx0KHN0ZXAuY2xhc3NpZmljYXRpb24sIG91dCk7XG4gICAgICAgIGNhY2hlUmVzdWx0KGNhY2hlS2V5LCBvdXQpO1xuICAgICAgICBpZHggPSBzdGVwSW5kZXggKyAxO1xuXG4gICAgICAgIHRhc2suc3RlcFJlc3VsdHMgPSByZXN1bHRzO1xuICAgICAgICB0YXNrLmN1cnJlbnRTdGVwID0gaWR4O1xuXG4gICAgICAgIGNvbnN0IHBlcnNpc3RlZCA9IGF3YWl0IHRoaXMudGFza3MudXBkYXRlKHRhc2spO1xuICAgICAgICBPYmplY3QuYXNzaWduKHRhc2ssIHBlcnNpc3RlZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdFByb2dyZXNzKGNvbnRleHQsIHRhc2suaWQsIHtcbiAgICAgICAgICBjdXJyZW50U3RlcDogaWR4LFxuICAgICAgICAgIHRvdGFsU3RlcHM6IHN0ZXBzLmxlbmd0aCxcbiAgICAgICAgICBvdXRwdXQ6IG91dCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICByZXN1bHRzW2lkeF0gPSBuZXcgVGFza1N0ZXBSZXN1bHRNb2RlbCh7XG4gICAgICAgICAgc3RhdHVzOiBUYXNrU3RhdHVzLkZBSUxFRCxcbiAgICAgICAgICBlcnJvcjogc2VyaWFsaXplRXJyb3IoZXJyKSxcbiAgICAgICAgICBjcmVhdGVkQXQ6IG5vdyxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRhc2suc3RlcFJlc3VsdHMgPSByZXN1bHRzO1xuICAgICAgICB0YXNrLmN1cnJlbnRTdGVwID0gaWR4O1xuICAgICAgICB0YXNrLmVycm9yID0gc2VyaWFsaXplRXJyb3IoZXJyKTtcblxuICAgICAgICAvLyBwZXJzaXN0IGZhaWx1cmUgY29udGV4dCBiZWZvcmUgdGhyb3dpbmcgKHJldHJ5IGxvZ2ljIGhhcHBlbnMgb3V0c2lkZSlcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkID0gYXdhaXQgdGhpcy50YXNrcy51cGRhdGUodGFzayk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGFzaywgcGVyc2lzdGVkKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0ZXBSZXN1bHRzOiByZXN1bHRzIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplQmFja29mZihcbiAgICBiYWNrb2ZmOiBUYXNrQmFja29mZk1vZGVsIHwgc3RyaW5nIHwgb2JqZWN0IHwgYW55XG4gICkge1xuICAgIGlmIChiYWNrb2ZmIGluc3RhbmNlb2YgVGFza0JhY2tvZmZNb2RlbCkgcmV0dXJuIGJhY2tvZmY7XG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IGJhY2tvZmYgPz8ge307XG4gICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShwYXlsb2FkKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBwYXlsb2FkID0ge307XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGFza0JhY2tvZmZNb2RlbChwYXlsb2FkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub3JtYWxpemVTdGVwcyhcbiAgICBzdGVwczogVGFza1N0ZXBTcGVjTW9kZWxbXSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiBUYXNrU3RlcFNwZWNNb2RlbFtdIHtcbiAgICBpZiAoIXN0ZXBzKSByZXR1cm4gW107XG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHN0ZXBzO1xuICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGF5bG9hZCA9IEpTT04ucGFyc2UocGF5bG9hZCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGF5bG9hZCBpbnN0YW5jZW9mIFNldCkgcGF5bG9hZCA9IEFycmF5LmZyb20ocGF5bG9hZCk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBheWxvYWQpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHBheWxvYWQubWFwKChzdGVwKSA9PiB7XG4gICAgICBpZiAoc3RlcCBpbnN0YW5jZW9mIFRhc2tTdGVwU3BlY01vZGVsKSByZXR1cm4gc3RlcDtcbiAgICAgIGxldCB2YWx1ZTogYW55ID0gc3RlcDtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFRhc2tTdGVwU3BlY01vZGVsKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub3JtYWxpemVTdGVwUmVzdWx0cyhcbiAgICByZXN1bHRzOiBUYXNrU3RlcFJlc3VsdE1vZGVsW10gfCBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogVGFza1N0ZXBSZXN1bHRNb2RlbFtdIHtcbiAgICBpZiAoIXJlc3VsdHMpIHJldHVybiBbXTtcbiAgICBsZXQgcGF5bG9hZDogYW55ID0gcmVzdWx0cztcbiAgICBpZiAodHlwZW9mIHBheWxvYWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKHBheWxvYWQpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBheWxvYWQgaW5zdGFuY2VvZiBTZXQpIHBheWxvYWQgPSBBcnJheS5mcm9tKHBheWxvYWQpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXlsb2FkKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBwYXlsb2FkLm1hcCgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgVGFza1N0ZXBSZXN1bHRNb2RlbCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIGxldCB2YWx1ZTogYW55ID0gcmVzdWx0O1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHZhbHVlID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVGFza1N0ZXBSZXN1bHRNb2RlbCh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEV2ZW50cyArIGxvZyB0YWlsIHBlcnNpc3RlbmNlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYXBwZW5kTG9nKFxuICAgIGN0eDogVGFza0NvbnRleHQgfCBDb250ZXh0LFxuICAgIHRhc2s6IFRhc2tNb2RlbCxcbiAgICBsb2dFbnRyaWVzOlxuICAgICAgfCBbTG9nTGV2ZWwsIHN0cmluZ11cbiAgICAgIHwgW0xvZ0xldmVsLCBzdHJpbmcsIGFueV1cbiAgICAgIHwgKFtMb2dMZXZlbCwgc3RyaW5nXSB8IFtMb2dMZXZlbCwgc3RyaW5nLCBhbnldKVtdXG4gICk6IFByb21pc2U8W1Rhc2tNb2RlbCwgVGFza0xvZ0VudHJ5TW9kZWxbXV0+IHtcbiAgICBjb25zdCBpc011bHRpID0gQXJyYXkuaXNBcnJheShsb2dFbnRyaWVzKSAmJiBBcnJheS5pc0FycmF5KGxvZ0VudHJpZXNbMF0pO1xuICAgIGNvbnN0IHN0ZXAgPVxuICAgICAgdGFzay5hdG9taWNpdHkgPT09IFRhc2tUeXBlLkNPTVBPU0lURVxuICAgICAgICA/IGN0eCBpbnN0YW5jZW9mIFRhc2tDb250ZXh0XG4gICAgICAgICAgPyAoY3R4LnN0ZXAgPz8gdGFzay5jdXJyZW50U3RlcClcbiAgICAgICAgICA6IHRhc2suY3VycmVudFN0ZXBcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZW50cmllcyA9IChpc011bHRpID8gbG9nRW50cmllcyA6IFtsb2dFbnRyaWVzXSkubWFwKFxuICAgICAgKFtsZXZlbCwgbXNnLCBtZXRhXSkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFRhc2tMb2dFbnRyeU1vZGVsKHtcbiAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICBtc2csXG4gICAgICAgICAgbWV0YSxcbiAgICAgICAgICBzdGVwLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgbmV4dFRhaWwgPSBbLi4uKHRhc2subG9nVGFpbCA/PyBbXSksIC4uLmVudHJpZXNdLnNsaWNlKFxuICAgICAgLXRoaXMuY29uZmlnLmxvZ1RhaWxNYXhcbiAgICApO1xuICAgIHRhc2subG9nVGFpbCA9IG5leHRUYWlsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBbYXdhaXQgdGhpcy50YXNrcy51cGRhdGUodGFzaywgY3R4KSwgZW50cmllc107XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gW3Rhc2ssIFtdXTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZW1pdFN0YXR1cyhcbiAgICBjdHg6IFRhc2tDb250ZXh0IHwgQ29udGV4dCxcbiAgICB0YXNrOiBUYXNrTW9kZWwsXG4gICAgc3RhdHVzOiBUYXNrU3RhdHVzLFxuICAgIG91dHB1dE9yRXJyb3I/OiBhbnkgfCBFcnJvcixcbiAgICBvcmlnaW5hbEVycm9yPzogRXJyb3JcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGN0eCBpbnN0YW5jZW9mIFRhc2tDb250ZXh0KSB7XG4gICAgICBhd2FpdCBjdHguZmx1c2goKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkOiBUYXNrUHJvZ3Jlc3NQYXlsb2FkID0geyBzdGF0dXMgfTtcbiAgICBpZiAob3V0cHV0T3JFcnJvciAmJiBvdXRwdXRPckVycm9yIGluc3RhbmNlb2YgVGFza0Vycm9yTW9kZWwpXG4gICAgICBwYXlsb2FkLmVycm9yID0gb3V0cHV0T3JFcnJvcjtcbiAgICBlbHNlIGlmIChvdXRwdXRPckVycm9yKSBwYXlsb2FkLm91dHB1dCA9IG91dHB1dE9yRXJyb3I7XG4gICAgaWYgKHRhc2submV4dFJ1bkF0KSBwYXlsb2FkLm5leHRSdW5BdCA9IHRhc2submV4dFJ1bkF0O1xuICAgIGlmICh0YXNrLnNjaGVkdWxlZFRvKSBwYXlsb2FkLnNjaGVkdWxlZFRvID0gdGFzay5zY2hlZHVsZWRUbztcbiAgICBjb25zdCBwZXJzaXN0ZWQgPSBhd2FpdCB0aGlzLnBlcnNpc3RFdmVudChcbiAgICAgIGN0eCxcbiAgICAgIHRhc2suaWQsXG4gICAgICBUYXNrRXZlbnRUeXBlLlNUQVRVUyxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICAgIGNvbnN0IGVtaXR0ZWRQYXlsb2FkID1cbiAgICAgIG9yaWdpbmFsRXJyb3IgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IE9iamVjdC5hc3NpZ24oe30sIHBheWxvYWQsIHsgb3JpZ2luYWxFcnJvciB9KVxuICAgICAgICA6IHBheWxvYWQ7XG4gICAgY29uc3QgZW1pdHRlZCA9IG5ldyBUYXNrRXZlbnRNb2RlbCh7XG4gICAgICAuLi5wZXJzaXN0ZWQsXG4gICAgICBwYXlsb2FkOiBlbWl0dGVkUGF5bG9hZCxcbiAgICB9KTtcbiAgICB0aGlzLmJ1cy5lbWl0KGVtaXR0ZWQsIGN0eCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZW1pdExvZyhcbiAgICBjdHg6IFRhc2tDb250ZXh0IHwgQ29udGV4dCxcbiAgICB0YXNrSWQ6IHN0cmluZyxcbiAgICBlbnRyaWVzOiBUYXNrTG9nRW50cnlNb2RlbFtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGV2dCA9IGF3YWl0IHRoaXMucGVyc2lzdEV2ZW50KFxuICAgICAgY3R4LFxuICAgICAgdGFza0lkLFxuICAgICAgVGFza0V2ZW50VHlwZS5MT0csXG4gICAgICBlbnRyaWVzLm1hcCgoZSkgPT4gKHtcbiAgICAgICAgdHM6IGUudHMsXG4gICAgICAgIGxldmVsOiBlLmxldmVsLFxuICAgICAgICBtc2c6IGUubXNnLFxuICAgICAgICBtZXRhOiBlLm1ldGEsXG4gICAgICAgIHN0ZXA6IGUuc3RlcCxcbiAgICAgIH0pKVxuICAgICk7XG4gICAgdGhpcy5idXMuZW1pdChldnQsIGN0eCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbm9ybWFsaXplUGlwZUFyZ3MoXG4gICAgYXJnczogYW55W11cbiAgKTogKFtMb2dMZXZlbCwgc3RyaW5nXSB8IFtMb2dMZXZlbCwgc3RyaW5nLCBhbnldKVtdIHtcbiAgICBpZiAoIWFyZ3MubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1swXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBbXTtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIEVpdGhlciBbbGV2ZWwsbXNnLG1ldGE/XSBvciBbW2xldmVsLG1zZyxtZXRhP10sIC4uLl1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlWzBdKSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlIGFzIGFueVtdKS5maWx0ZXIoQXJyYXkuaXNBcnJheSkgYXMgYW55O1xuICAgICAgfVxuICAgICAgcmV0dXJuIFt2YWx1ZSBhcyBhbnldO1xuICAgIH1cblxuICAgIGNvbnN0IFtsZXZlbCwgbXNnLCBtZXRhXSA9IGFyZ3M7XG4gICAgaWYgKHR5cGVvZiBsZXZlbCAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgbXNnICE9PSBcInN0cmluZ1wiKSByZXR1cm4gW107XG4gICAgcmV0dXJuIFtbbGV2ZWwgYXMgTG9nTGV2ZWwsIG1zZywgbWV0YV0gYXMgYW55XTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0UHJvZ3Jlc3MoXG4gICAgY3R4OiBUYXNrQ29udGV4dCB8IENvbnRleHQsXG4gICAgdGFza0lkOiBzdHJpbmcsXG4gICAgZGF0YTogYW55XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGV2dCA9IGF3YWl0IHRoaXMucGVyc2lzdEV2ZW50KFxuICAgICAgY3R4LFxuICAgICAgdGFza0lkLFxuICAgICAgVGFza0V2ZW50VHlwZS5QUk9HUkVTUyxcbiAgICAgIGRhdGFcbiAgICApO1xuICAgIHRoaXMuYnVzLmVtaXQoZXZ0LCBjdHgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHBlcnNpc3RFdmVudChcbiAgICBjdHg6IFRhc2tDb250ZXh0IHwgQ29udGV4dCxcbiAgICB0YXNrSWQ6IHN0cmluZyxcbiAgICB0eXBlOiBUYXNrRXZlbnRUeXBlLFxuICAgIHBheWxvYWQ6IGFueVxuICApOiBQcm9taXNlPFRhc2tFdmVudE1vZGVsPiB7XG4gICAgY29uc3QgZXZ0ID0gbmV3IFRhc2tFdmVudE1vZGVsKHsgdGFza0lkLCBjbGFzc2lmaWNhdGlvbjogdHlwZSwgcGF5bG9hZCB9KTtcbiAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgdGhpcy5ldmVudHMuY3JlYXRlKGV2dCwgY3R4KTtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBUYXNrRW5naW5lPCR7dGhpcy5jb25maWcuYWRhcHRlci5hbGlhc30+YDtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGNvbnRleHQoXG4gICAgb3BlcmF0aW9uOlxuICAgICAgfCAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpXG4gICAgICB8IE9wZXJhdGlvbktleXMuQ1JFQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuUkVBRFxuICAgICAgfCBPcGVyYXRpb25LZXlzLlVQREFURVxuICAgICAgfCBPcGVyYXRpb25LZXlzLkRFTEVURVxuICAgICAgfCBzdHJpbmcsXG4gICAgb3ZlcnJpZGVzOiBQYXJ0aWFsPEZsYWdzT2Y8Q29udGV4dE9mPEE+Pj4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxDb250ZXh0T2Y8QT4+IHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmNvbnRleHQob3BlcmF0aW9uLCBvdmVycmlkZXMsIFRhc2tNb2RlbCwgLi4uYXJncyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -25,6 +25,7 @@ export declare class TaskEngine<A extends Adapter<any, any, any, any>, C extends
|
|
|
25
25
|
protected config: C;
|
|
26
26
|
private _tasks?;
|
|
27
27
|
private _events?;
|
|
28
|
+
private _adapter?;
|
|
28
29
|
protected lock: Lock;
|
|
29
30
|
protected get Context(): Constructor<ContextOf<A>>;
|
|
30
31
|
protected get adapter(): A;
|
|
@@ -75,6 +76,7 @@ export declare class TaskEngine<A extends Adapter<any, any, any, any>, C extends
|
|
|
75
76
|
protected appendLog(ctx: TaskContext | Context, task: TaskModel, logEntries: [LogLevel, string] | [LogLevel, string, any] | ([LogLevel, string] | [LogLevel, string, any])[]): Promise<[TaskModel, TaskLogEntryModel[]]>;
|
|
76
77
|
protected emitStatus(ctx: TaskContext | Context, task: TaskModel, status: TaskStatus, outputOrError?: any | Error, originalError?: Error): Promise<void>;
|
|
77
78
|
protected emitLog(ctx: TaskContext | Context, taskId: string, entries: TaskLogEntryModel[]): Promise<void>;
|
|
79
|
+
protected normalizePipeArgs(args: any[]): ([LogLevel, string] | [LogLevel, string, any])[];
|
|
78
80
|
protected emitProgress(ctx: TaskContext | Context, taskId: string, data: any): Promise<void>;
|
|
79
81
|
protected persistEvent(ctx: TaskContext | Context, taskId: string, type: TaskEventType, payload: any): Promise<TaskEventModel>;
|
|
80
82
|
toString(): string;
|
package/lib/tasks/TaskErrors.cjs
CHANGED
|
@@ -59,4 +59,4 @@ class TaskRescheduleError extends TaskControlError {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
exports.TaskRescheduleError = TaskRescheduleError;
|
|
62
|
-
//# sourceMappingURL=
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0Vycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy9UYXNrRXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXNEQSxrQ0FTQztBQS9ERCwyREFBb0Q7QUFzRHBELFNBQWdCLFdBQVcsQ0FDekIsS0FBYyxFQUNkLFVBQXNDO0lBRXRDLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1QyxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0MsSUFBSSxPQUFRLEtBQWEsQ0FBQyxVQUFVLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2hFLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksVUFBVSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDL0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBYSxnQkFBaUIsU0FBUSx5QkFBUztJQUs3QyxZQUNFLElBQVksRUFDWixNQUFjLEVBQ2QsT0FBZSxFQUNmLE9BQXdCLEVBQ3hCLElBQTBCLEVBQzFCLElBQUksR0FBRyxHQUFHO1FBRVYsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBbEJELDRDQWtCQztBQUVELE1BQWEsYUFBYyxTQUFRLGdCQUFnQjtJQUNqRCxZQUNFLE1BQWMsRUFDZCxPQUF3QixFQUN4QixJQUEwQjtRQUUxQixNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxJQUFJLFFBQVEsTUFBTSxTQUFTLENBQUM7UUFDNUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDRjtBQVRELHNDQVNDO0FBRUQsTUFBYSxjQUFlLFNBQVEsZ0JBQWdCO0lBQ2xELFlBQ0UsTUFBYyxFQUNkLE9BQXdCLEVBQ3hCLElBQTBCO1FBRTFCLE1BQU0sU0FBUyxHQUNiLElBQUksRUFBRSxTQUFTLFlBQVksSUFBSTtZQUM3QixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUU7WUFDOUIsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7UUFDdEIsTUFBTSxPQUFPLEdBQ1gsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxNQUFNLHVCQUF1QixTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdFLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO0NBQ0Y7QUFmRCx3Q0FlQztBQUVELE1BQWEsZUFBZ0IsU0FBUSxnQkFBZ0I7SUFDbkQsWUFDRSxNQUFjLEVBQ2QsT0FBd0IsRUFDeEIsSUFBMEI7UUFFMUIsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFFLE9BQU8sSUFBSSxRQUFRLE1BQU0sV0FBVyxDQUFDO1FBQzlELEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQ0Y7QUFURCwwQ0FTQztBQUVELE1BQWEsbUJBQW9CLFNBQVEsZ0JBQWdCO0lBQ3ZELFlBQ0UsTUFBYyxFQUNkLE9BQXdCLEVBQ3hCLElBQTBCO1FBRTFCLE1BQU0sV0FBVyxHQUNmLElBQUksRUFBRSxXQUFXLFlBQVksSUFBSTtZQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDaEMsQ0FBQyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7UUFDeEIsTUFBTSxPQUFPLEdBQ1gsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxNQUFNLGVBQWUsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN6RSxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RSxDQUFDO0NBQ0Y7QUFmRCxrREFlQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgVGFza0Vycm9yTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvVGFza0Vycm9yTW9kZWxcIjtcbmltcG9ydCB7IFRhc2tTdGF0dXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBuZXh0IGFjdGlvbiB0byB0YWtlIGFmdGVyIGEgdGFzayBlcnJvci5cbiAqIFVzZWQgdG8gaWRlbnRpZnkgdGhlIGFwcHJvcHJpYXRlIHJlc3BvbnNlIHRvIHRhc2sgZmFpbHVyZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFRhc2tOZXh0QWN0aW9uID1cbiAgfCBUYXNrU3RhdHVzLkNBTkNFTEVEXG4gIHwgVGFza1N0YXR1cy5XQUlUSU5HX1JFVFJZXG4gIHwgVGFza1N0YXR1cy5TQ0hFRFVMRURcbiAgfCBUYXNrU3RhdHVzLkZBSUxFRDtcblxuLyoqXG4gKiBBZGRpdGlvbmFsIHByb3BlcnRpZXMgYWRkZWQgdG8gZXJyb3JzIGZyb20gVGFza1RyYWNrZXIucmVzb2x2ZSgpIGFuZCBUYXNrVHJhY2tlci53YWl0KClcbiAqL1xuZXhwb3J0IHR5cGUgVGFza0Vycm9yUHJvcHMgPSB7XG4gIC8qKiBUaGUgbmV4dCBhY3Rpb24gdG8gdGFrZSBpbiByZXNwb25zZSB0byB0aGlzIGVycm9yICovXG4gIG5leHRBY3Rpb246IFRhc2tOZXh0QWN0aW9uO1xuICAvKiogVGhlIHRhc2sgSUQgdGhpcyBlcnJvciByZWxhdGVzIHRvIChvcHRpb25hbCwgcHJlc2VudCBvbiBUYXNrQ29udHJvbEVycm9yKSAqL1xuICB0YXNrSWQ/OiBzdHJpbmc7XG4gIC8qKiBBZGRpdGlvbmFsIGVycm9yIGRldGFpbHMgKG9wdGlvbmFsLCBwcmVzZW50IG9uIFRhc2tDb250cm9sRXJyb3IpICovXG4gIGRldGFpbHM/OiBUYXNrRXJyb3JNb2RlbDtcbiAgLyoqIEFkZGl0aW9uYWwgbWV0YWRhdGEgKG9wdGlvbmFsLCBwcmVzZW50IG9uIFRhc2tDb250cm9sRXJyb3IpICovXG4gIG1ldGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufTtcblxuLyoqXG4gKiBHZW5lcmljIHR5cGUgdGhhdCBwcmVzZXJ2ZXMgdGhlIG9yaWdpbmFsIGVycm9yIHR5cGUgd2hpbGUgYWRkaW5nIHRhc2stc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqIFVzZSB0aGlzIHRvIHR5cGUgZXJyb3JzIGZyb20gVGFza1RyYWNrZXIucmVzb2x2ZSgpIGFuZCBUYXNrVHJhY2tlci53YWl0KCkuXG4gKlxuICogVGhlIG9yaWdpbmFsIGVycm9yIGlzIHByZXNlcnZlZCAoZS5nLiwgVmFsaWRhdGlvbkVycm9yIHN0YXlzIFZhbGlkYXRpb25FcnJvciksXG4gKiB3aXRoIHRoZSBuZXh0QWN0aW9uIHByb3BlcnR5IGFkZGVkIHRvIGlkZW50aWZ5IHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZTpcbiAqIC0gYFRhc2tTdGF0dXMuQ0FOQ0VMRURgOiBUYXNrIHdhcyBleHBsaWNpdGx5IGNhbmNlbGVkXG4gKiAtIGBUYXNrU3RhdHVzLlNDSEVEVUxFRGA6IFRhc2sgd2FzIHJlc2NoZWR1bGVkXG4gKiAtIGBUYXNrU3RhdHVzLldBSVRJTkdfUkVUUllgOiBUYXNrIGlzIHdhaXRpbmcgZm9yIHJldHJ5XG4gKiAtIGBUYXNrU3RhdHVzLkZBSUxFRGA6IFRhc2sgaGFzIHBlcm1hbmVudGx5IGZhaWxlZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0cnkge1xuICogICBhd2FpdCB0cmFja2VyLnJlc29sdmUoKTtcbiAqIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gKiAgIGlmIChpc1Rhc2tFcnJvcjxWYWxpZGF0aW9uRXJyb3I+KGVycm9yLCBWYWxpZGF0aW9uRXJyb3IpKSB7XG4gKiAgICAgLy8gZXJyb3IgaXMgdHlwZWQgYXMgVGFza0Vycm9yRnJvbTxWYWxpZGF0aW9uRXJyb3I+XG4gKiAgICAgY29uc29sZS5sb2coZXJyb3IubmV4dEFjdGlvbik7IC8vIFRhc2tOZXh0QWN0aW9uXG4gKiAgICAgY29uc29sZS5sb2coZXJyb3IuY29kZSk7ICAgICAgIC8vIFZhbGlkYXRpb25FcnJvcidzIGNvZGUgcHJvcGVydHlcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIFRhc2tFcnJvckZyb208RSBleHRlbmRzIEVycm9yPiA9IEUgJiBUYXNrRXJyb3JQcm9wcztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFza0Vycm9yPEUgZXh0ZW5kcyBFcnJvciA9IEVycm9yPihcbiAgZXJyb3I6IHVua25vd24sXG4gIEVycm9yQ2xhc3M/OiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBFXG4pOiBlcnJvciBpcyBUYXNrRXJyb3JGcm9tPEU+IHtcbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHJldHVybiBmYWxzZTtcbiAgaWYgKCEoXCJuZXh0QWN0aW9uXCIgaW4gZXJyb3IpKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgKGVycm9yIGFzIGFueSkubmV4dEFjdGlvbiAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICBpZiAoRXJyb3JDbGFzcyAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3JDbGFzcykpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjbGFzcyBUYXNrQ29udHJvbEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgcmVhZG9ubHkgdGFza0lkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRldGFpbHM/OiBUYXNrRXJyb3JNb2RlbDtcbiAgcmVhZG9ubHkgbWV0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHRhc2tJZDogc3RyaW5nLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBkZXRhaWxzPzogVGFza0Vycm9yTW9kZWwsXG4gICAgbWV0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY29kZSA9IDUwMFxuICApIHtcbiAgICBzdXBlcihuYW1lLCBtZXNzYWdlLCBjb2RlKTtcbiAgICB0aGlzLnRhc2tJZCA9IHRhc2tJZDtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICAgIHRoaXMubWV0YSA9IG1ldGE7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhc2tGYWlsRXJyb3IgZXh0ZW5kcyBUYXNrQ29udHJvbEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgdGFza0lkOiBzdHJpbmcsXG4gICAgZGV0YWlscz86IFRhc2tFcnJvck1vZGVsLFxuICAgIG1ldGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBkZXRhaWxzPy5tZXNzYWdlID8/IGBUYXNrICR7dGFza0lkfSBmYWlsZWRgO1xuICAgIHN1cGVyKFRhc2tGYWlsRXJyb3IubmFtZSwgdGFza0lkLCBtZXNzYWdlLCBkZXRhaWxzLCBtZXRhLCA1MDApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYXNrUmV0cnlFcnJvciBleHRlbmRzIFRhc2tDb250cm9sRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICB0YXNrSWQ6IHN0cmluZyxcbiAgICBkZXRhaWxzPzogVGFza0Vycm9yTW9kZWwsXG4gICAgbWV0YT86IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKSB7XG4gICAgY29uc3QgbmV4dFJ1bkF0ID1cbiAgICAgIG1ldGE/Lm5leHRSdW5BdCBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgPyBtZXRhLm5leHRSdW5BdC50b0lTT1N0cmluZygpXG4gICAgICAgIDogbWV0YT8ubmV4dFJ1bkF0O1xuICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgZGV0YWlscz8ubWVzc2FnZSA/P1xuICAgICAgYFRhc2sgJHt0YXNrSWR9IHNjaGVkdWxlZCBmb3IgcmV0cnkke25leHRSdW5BdCA/IGAgYXQgJHtuZXh0UnVuQXR9YCA6IFwiXCJ9YDtcbiAgICBzdXBlcihUYXNrUmV0cnlFcnJvci5uYW1lLCB0YXNrSWQsIG1lc3NhZ2UsIGRldGFpbHMsIG1ldGEsIDQwOSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhc2tDYW5jZWxFcnJvciBleHRlbmRzIFRhc2tDb250cm9sRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICB0YXNrSWQ6IHN0cmluZyxcbiAgICBkZXRhaWxzPzogVGFza0Vycm9yTW9kZWwsXG4gICAgbWV0YT86IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGRldGFpbHM/Lm1lc3NhZ2UgPz8gYFRhc2sgJHt0YXNrSWR9IGNhbmNlbGVkYDtcbiAgICBzdXBlcihUYXNrQ2FuY2VsRXJyb3IubmFtZSwgdGFza0lkLCBtZXNzYWdlLCBkZXRhaWxzLCBtZXRhLCA0MDApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYXNrUmVzY2hlZHVsZUVycm9yIGV4dGVuZHMgVGFza0NvbnRyb2xFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhc2tJZDogc3RyaW5nLFxuICAgIGRldGFpbHM/OiBUYXNrRXJyb3JNb2RlbCxcbiAgICBtZXRhPzogUmVjb3JkPHN0cmluZywgYW55PlxuICApIHtcbiAgICBjb25zdCBzY2hlZHVsZWRUbyA9XG4gICAgICBtZXRhPy5zY2hlZHVsZWRUbyBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgPyBtZXRhLnNjaGVkdWxlZFRvLnRvSVNPU3RyaW5nKClcbiAgICAgICAgOiBtZXRhPy5zY2hlZHVsZWRUbztcbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgIGRldGFpbHM/Lm1lc3NhZ2UgPz9cbiAgICAgIGBUYXNrICR7dGFza0lkfSByZXNjaGVkdWxlZCR7c2NoZWR1bGVkVG8gPyBgIHRvICR7c2NoZWR1bGVkVG99YCA6IFwiXCJ9YDtcbiAgICBzdXBlcihUYXNrUmVzY2hlZHVsZUVycm9yLm5hbWUsIHRhc2tJZCwgbWVzc2FnZSwgZGV0YWlscywgbWV0YSwgMjAyKTtcbiAgfVxufVxuIl19
|
|
@@ -43,4 +43,4 @@ class TaskEventBus extends ObserverHandler_1.ObserverHandler {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
exports.TaskEventBus = TaskEventBus;
|
|
46
|
-
//# sourceMappingURL=
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0V2ZW50QnVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rhc2tzL1Rhc2tFdmVudEJ1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnRUFBeUQ7QUFHekQsMEVBQWlFO0FBT2pFLHNEQUErQztBQUcvQyxNQUFhLFlBQWEsU0FBUSxpQ0FBNEI7SUFBOUQ7O1FBQ3FCLGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQW9EMUUsQ0FBQztJQWxEVSxPQUFPLENBQUMsUUFBa0IsRUFBRSxNQUF1QjtRQUMxRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFUSxTQUFTLENBQUMsUUFBa0I7UUFDbkMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQW1CLEVBQUUsR0FBWTtRQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLCtCQUFjLEVBQUUsR0FBRyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRVEsS0FBSyxDQUFDLGVBQWUsQ0FDNUIsS0FBOEIsRUFDOUIsS0FBcUQsRUFDckQsRUFBWSxFQUNaLEdBQW1CLEVBQ25CLEdBQUcsSUFBeUI7UUFFNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxlQUFPLENBQUMsTUFBTSxDQUNyQyxJQUFJLENBQUMsZUFBZSxFQUNwQixTQUFTLEVBQ1QsS0FBSyxFQUNMLEdBQUcsSUFBSSxDQUNSLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQ3RDLElBQUksQ0FBQyxTQUFTO2FBQ1gsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDWixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQztnQkFDSCxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO2dCQUNwQixHQUFHLENBQUMsS0FBSyxDQUNQLDZCQUE2QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUMzRCxDQUFDO2dCQUNGLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUMsQ0FBQzthQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1QsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7Z0JBQzlCLEdBQUcsQ0FBQyxLQUFLLENBQ1AsK0JBQStCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUNoRixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFyREQsb0NBcURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFza0V2ZW50TW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvVGFza0V2ZW50TW9kZWxcIjtcblxuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9Db250ZXh0XCI7XG5pbXBvcnQgeyBPYnNlcnZlckhhbmRsZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvT2JzZXJ2ZXJIYW5kbGVyXCI7XG5pbXBvcnQgeyBFdmVudElkcywgT2JzZXJ2ZXJGaWx0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvdHlwZXNcIjtcbmltcG9ydCB7IFRhc2tDb250ZXh0IH0gZnJvbSBcIi4vVGFza0NvbnRleHRcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvT2JzZXJ2ZXJcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBCdWxrQ3J1ZE9wZXJhdGlvbktleXMsIE9wZXJhdGlvbktleXMgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IENvbnRleHR1YWxBcmdzIH0gZnJvbSBcIi4uL3V0aWxzL2luZGV4XCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2luZGV4XCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuZXhwb3J0IGNsYXNzIFRhc2tFdmVudEJ1cyBleHRlbmRzIE9ic2VydmVySGFuZGxlcjxUYXNrQ29udGV4dD4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGlzdGVuZXJzID0gbmV3IFNldDwoZXZ0OiBUYXNrRXZlbnRNb2RlbCkgPT4gdm9pZD4oKTtcblxuICBvdmVycmlkZSBvYnNlcnZlKG9ic2VydmVyOiBPYnNlcnZlciwgZmlsdGVyPzogT2JzZXJ2ZXJGaWx0ZXIpOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gc3VwZXIub2JzZXJ2ZShvYnNlcnZlciwgZmlsdGVyKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHVuT2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIpIHtcbiAgICBzdXBlci51bk9ic2VydmUob2JzZXJ2ZXIpO1xuICB9XG5cbiAgZW1pdChldnQ6IFRhc2tFdmVudE1vZGVsLCBjdHg6IENvbnRleHQpIHtcbiAgICB0aGlzLnVwZGF0ZU9ic2VydmVycyhUYXNrRXZlbnRNb2RlbCwgZXZ0LmNsYXNzaWZpY2F0aW9uLCBldnQuaWQsIGV2dCwgY3R4KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHVwZGF0ZU9ic2VydmVyczxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPiB8IHN0cmluZyxcbiAgICBldmVudDogT3BlcmF0aW9uS2V5cyB8IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyB8IHN0cmluZyxcbiAgICBpZDogRXZlbnRJZHMsXG4gICAgZXZ0OiBUYXNrRXZlbnRNb2RlbCxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxhbnk+XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHhBcmdzIH0gPSBBZGFwdGVyLmxvZ0N0eDxDb250ZXh0PihcbiAgICAgIHRoaXMudXBkYXRlT2JzZXJ2ZXJzLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgZmFsc2UsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgdGhpcy5vYnNlcnZlcnNcbiAgICAgICAgLmZpbHRlcigobykgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyIH0gPSBvO1xuICAgICAgICAgIGlmICghZmlsdGVyKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcihtb2RlbCwgZXZlbnQsIGlkLCAuLi5jdHhBcmdzKTtcbiAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gZmlsdGVyIG9ic2VydmVyICR7by5vYnNlcnZlci50b1N0cmluZygpfTogJHtlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAubWFwKChvKSA9PiB7XG4gICAgICAgICAgby5vYnNlcnZlci5yZWZyZXNoKGV2dCwgLi4uY3R4QXJncyk7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCwgaSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIilcbiAgICAgICAgbG9nLmVycm9yKFxuICAgICAgICAgIGBGYWlsZWQgdG8gdXBkYXRlIG9ic2VydmFibGUgJHt0aGlzLm9ic2VydmVyc1tpXS50b1N0cmluZygpfTogJHtyZXN1bHQucmVhc29ufWBcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskEventService = void 0;
|
|
4
|
+
const services_1 = require("./../services/services.cjs");
|
|
5
|
+
const ModelService_1 = require("./../services/ModelService.cjs");
|
|
6
|
+
const TaskEventModel_1 = require("./models/TaskEventModel.cjs");
|
|
7
|
+
const TaskModel_1 = require("./models/TaskModel.cjs");
|
|
8
|
+
class TaskEventService extends ModelService_1.ModelService {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(TaskEventModel_1.TaskEventModel);
|
|
11
|
+
}
|
|
12
|
+
get repo() {
|
|
13
|
+
if (!this._repository) {
|
|
14
|
+
this._repository = services_1.Service.get(TaskModel_1.TaskModel)["events"];
|
|
15
|
+
}
|
|
16
|
+
return this._repository;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.TaskEventService = TaskEventService;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0V2ZW50U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy9UYXNrRXZlbnRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlEQUErQztBQUUvQyxpRUFBd0Q7QUFDeEQsZ0VBQXlEO0FBQ3pELHNEQUErQztBQUcvQyxNQUFhLGdCQUFpQixTQUFRLDJCQUE0QjtJQUNoRTtRQUNFLEtBQUssQ0FBQywrQkFBYyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQWEsSUFBSTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBSSxrQkFBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBZ0IsQ0FBc0IsQ0FDcEUsUUFBUSxDQUNULENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQWJELDRDQWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zZXJ2aWNlc1wiO1xuaW1wb3J0IHsgdHlwZSBSZXBvIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvUmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgTW9kZWxTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL01vZGVsU2VydmljZVwiO1xuaW1wb3J0IHsgVGFza0V2ZW50TW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvVGFza0V2ZW50TW9kZWxcIjtcbmltcG9ydCB7IFRhc2tNb2RlbCB9IGZyb20gXCIuL21vZGVscy9UYXNrTW9kZWxcIjtcbmltcG9ydCB7IFRhc2tTZXJ2aWNlIH0gZnJvbSBcIi4vVGFza1NlcnZpY2VcIjtcblxuZXhwb3J0IGNsYXNzIFRhc2tFdmVudFNlcnZpY2UgZXh0ZW5kcyBNb2RlbFNlcnZpY2U8VGFza0V2ZW50TW9kZWw+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoVGFza0V2ZW50TW9kZWwpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IHJlcG8oKTogUmVwbzxUYXNrRXZlbnRNb2RlbD4ge1xuICAgIGlmICghdGhpcy5fcmVwb3NpdG9yeSkge1xuICAgICAgdGhpcy5fcmVwb3NpdG9yeSA9IChTZXJ2aWNlLmdldChUYXNrTW9kZWwgYXMgYW55KSBhcyBUYXNrU2VydmljZTxhbnk+KVtcbiAgICAgICAgXCJldmVudHNcIlxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Repo } from "../repository/Repository";
|
|
2
|
+
import { ModelService } from "../services/ModelService";
|
|
3
|
+
import { TaskEventModel } from "./models/TaskEventModel";
|
|
4
|
+
export declare class TaskEventService extends ModelService<TaskEventModel> {
|
|
5
|
+
constructor();
|
|
6
|
+
get repo(): Repo<TaskEventModel>;
|
|
7
|
+
}
|
|
@@ -36,4 +36,4 @@ class TaskHandler extends ContextualLoggedClass_1.AbsContextual {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
exports.TaskHandler = TaskHandler;
|
|
39
|
-
//# sourceMappingURL=
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0hhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFza3MvVGFza0hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0NBQXVDO0FBQ3ZDLHFEQUFnRDtBQUNoRCwyREFBK0U7QUFDL0UsZ0ZBQStFO0FBRy9FLE1BQXNCLFdBQ3BCLFNBQVEscUNBQTBCO0lBS2xDLElBQUksSUFBSTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEdBQUcscUJBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQWtCLEVBQUUsb0JBQVEsQ0FBQyxDQUFDO1lBQzdELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDYixNQUFNLElBQUksNkJBQWEsQ0FDckIsaUVBQWlFLENBQ2xFLENBQUM7UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFBLHFDQUFxQixFQUNuQixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFFUyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQVEsRUFBRSxHQUFHLElBQWlDO1FBQ3RFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRVMsU0FBUyxDQUFDLE1BQVMsRUFBRSxHQUFnQjtRQUM3QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FHRjtBQTlDRCxrQ0E4Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVGFza0hhbmRsZXIgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgVGFza3NLZXkgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yLCB3cmFwTWV0aG9kV2l0aENvbnRleHQgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IEFic0NvbnRleHR1YWwsIENvbnRleHR1YWxBcmdzIH0gZnJvbSBcIi4uL3V0aWxzL0NvbnRleHR1YWxMb2dnZWRDbGFzc1wiO1xuaW1wb3J0IHsgVGFza0NvbnRleHQgfSBmcm9tIFwiLi9UYXNrQ29udGV4dFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGFza0hhbmRsZXI8SSwgTz5cbiAgZXh0ZW5kcyBBYnNDb250ZXh0dWFsPFRhc2tDb250ZXh0PlxuICBpbXBsZW1lbnRzIElUYXNrSGFuZGxlcjxJLCBPPlxue1xuICBwcml2YXRlIF90eXBlPzogc3RyaW5nO1xuXG4gIGdldCB0eXBlKCkge1xuICAgIGlmICghdGhpcy5fdHlwZSkge1xuICAgICAgY29uc3QgbWV0YSA9IE1ldGFkYXRhLmdldCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSwgVGFza3NLZXkpO1xuICAgICAgaWYgKHR5cGVvZiBtZXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSBtZXRhO1xuICAgICAgfSBlbHNlIGlmIChtZXRhICYmIHR5cGVvZiBtZXRhLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IG1ldGEudHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLl90eXBlKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyB0eXBlIGFubm90YXRpb24gZm9yIHRoaXMgaGFuZGxlciBmb3VuZC4gZGlkIHlvdSB1c2UgQHRhc2soKT9gXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgd3JhcE1ldGhvZFdpdGhDb250ZXh0KFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMucnVuUHJlZml4LmJpbmQodGhpcyksXG4gICAgICB0aGlzLnJ1bi5iaW5kKHRoaXMpLFxuICAgICAgdGhpcy5ydW5TdWZmaXguYmluZCh0aGlzKSxcbiAgICAgIHRoaXMucnVuLm5hbWVcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJ1blByZWZpeChpbnB1dDogSSwgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8VGFza0NvbnRleHQ+KSB7XG4gICAgY29uc3QgeyBsb2csIGN0eCwgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5ydW5QcmVmaXgpO1xuICAgIGxvZy5pbmZvKGBSdW5uaW5nIHRhc2sgJHtjdHgudGFza0lkfSBhdHRlbXB0ICR7Y3R4LmF0dGVtcHR9YCk7XG4gICAgcmV0dXJuIFtpbnB1dCwgLi4uY3R4QXJnc107XG4gIH1cblxuICBwcm90ZWN0ZWQgcnVuU3VmZml4KG91dHB1dDogTywgY3R4OiBUYXNrQ29udGV4dCkge1xuICAgIGNvbnN0IHsgbG9nIH0gPSB0aGlzLmxvZ0N0eChbY3R4XSwgdGhpcy5ydW5QcmVmaXgpO1xuICAgIGxvZy5pbmZvKGBDb25jbHVkZWQgdGFzayAke2N0eC50YXNrSWR9IGF0dGVtcHQgJHtjdHguYXR0ZW1wdH1gKTtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgYWJzdHJhY3QgcnVuKGlucHV0OiBJLCBjdHg6IFRhc2tDb250ZXh0KTogUHJvbWlzZTxPPjtcbn1cbiJdfQ==
|
|
@@ -33,4 +33,4 @@ class TaskHandlerRegistry {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
exports.TaskHandlerRegistry = TaskHandlerRegistry;
|
|
36
|
-
//# sourceMappingURL=
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza0hhbmRsZXJSZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy9UYXNrSGFuZGxlclJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJEQUF3RDtBQUN4RCxxREFBZ0Q7QUFFaEQsTUFBYSxtQkFBbUI7SUFHOUI7UUFGaUIsYUFBUSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO1FBRzFELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRVMsVUFBVTtRQUNsQixNQUFNLHFCQUFxQixHQUFHLHFCQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0MsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO2dCQUMvRCxJQUFJLENBQWUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDO29CQUNILENBQUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixDQUFDO2dCQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sSUFBSSw2QkFBYSxDQUNyQix5Q0FBeUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUNyRCxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQXFCO1FBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNqQyxNQUFNLElBQUksNkJBQWEsQ0FBQywyQkFBMkIsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQWxDRCxrREFrQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVGFza0hhbmRsZXIgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcblxuZXhwb3J0IGNsYXNzIFRhc2tIYW5kbGVyUmVnaXN0cnkge1xuICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIElUYXNrSGFuZGxlcj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0aWFsaXplKCkge1xuICAgIGNvbnN0IHByZVJlZ2lzdGVyZWRIYW5kbGVycyA9IE1ldGFkYXRhLnRhc2tzKCk7XG4gICAgaWYgKHByZVJlZ2lzdGVyZWRIYW5kbGVycykge1xuICAgICAgT2JqZWN0LmVudHJpZXMocHJlUmVnaXN0ZXJlZEhhbmRsZXJzKS5mb3JFYWNoKChba2V5LCBoYW5kbGVyXSkgPT4ge1xuICAgICAgICBsZXQgaDogSVRhc2tIYW5kbGVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGggPSBuZXcgaGFuZGxlcigpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIGluaXRpYWxpemUgaGFuZGxlciB3aXRoIGtleSAke2tleX06ICR7ZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoaCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWdpc3RlcihoYW5kbGVyOiBJVGFza0hhbmRsZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycy5oYXMoaGFuZGxlci50eXBlKSlcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBEdXBsaWNhdGUgdGFzayBoYW5kbGVyOiAke2hhbmRsZXIudHlwZX1gKTtcbiAgICB0aGlzLmhhbmRsZXJzLnNldChoYW5kbGVyLnR5cGUsIGhhbmRsZXIpO1xuICB9XG5cbiAgZ2V0KHR5cGU6IHN0cmluZyk6IElUYXNrSGFuZGxlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMuZ2V0KHR5cGUpO1xuICB9XG59XG4iXX0=
|