@mediusinc/mng-commons-audit 4.2.0 → 5.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -26
- package/esm2022/lib/api/models/entityChange.mjs +10 -10
- package/esm2022/lib/api/models/guiEntityModel.mjs +10 -10
- package/esm2022/lib/api/models/guiPropertyModel.mjs +10 -10
- package/esm2022/lib/api/models/guiPropertyType.mjs +13 -13
- package/esm2022/lib/api/models/guiRelationModel.mjs +10 -10
- package/esm2022/lib/api/models/revEntityWithChangesDto.mjs +10 -10
- package/esm2022/lib/api/models/revEntityWithStateDto.mjs +10 -10
- package/esm2022/lib/api/models/revisionType.mjs +11 -9
- package/esm2022/lib/api/services/audit-revisions-api.service.mjs +29 -20
- package/esm2022/lib/api/services/audit.service.mjs +12 -11
- package/esm2022/lib/audit.routes.mjs +17 -19
- package/esm2022/lib/components/entity-changes-field/entity-changes-field.component.mjs +17 -14
- package/esm2022/lib/components/pages/audit/audit.page.component.mjs +7 -7
- package/esm2022/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.mjs +114 -99
- package/esm2022/lib/components/pages/revisions/audit-revisions.page.component.mjs +61 -70
- package/esm2022/lib/models/config.model.mjs +1 -1
- package/esm2022/lib/models/entity-revision-change-state.model.mjs +6 -6
- package/esm2022/lib/models/entity-revision-changes.model.mjs +6 -6
- package/esm2022/lib/models/guiEntityModelWithI18n.model.mjs +7 -7
- package/esm2022/lib/models/rev-entity-detailed.model.mjs +7 -7
- package/esm2022/lib/models/rev-entity.model.mjs +6 -6
- package/esm2022/lib/models/revEntityWithId.model.mjs +8 -8
- package/esm2022/lib/service/module-config.token.mjs +2 -2
- package/esm2022/lib/utils/audit.util.mjs +66 -117
- package/fesm2022/mediusinc-mng-commons-audit.mjs +386 -442
- package/fesm2022/mediusinc-mng-commons-audit.mjs.map +1 -1
- package/lib/api/models/entityChange.d.ts +4 -4
- package/lib/api/models/guiEntityModel.d.ts +4 -4
- package/lib/api/models/guiPropertyModel.d.ts +6 -6
- package/lib/api/models/guiPropertyType.d.ts +1 -1
- package/lib/api/models/guiRelationModel.d.ts +2 -2
- package/lib/api/models/revEntityWithChangesDto.d.ts +4 -4
- package/lib/api/models/revEntityWithStateDto.d.ts +4 -4
- package/lib/api/models/revisionType.d.ts +2 -1
- package/lib/api/services/audit-revisions-api.service.d.ts +14 -13
- package/lib/api/services/audit.service.d.ts +7 -7
- package/lib/audit.routes.d.ts +5 -5
- package/lib/components/entity-changes-field/entity-changes-field.component.d.ts +6 -6
- package/lib/components/pages/audit/audit.page.component.d.ts +3 -3
- package/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.d.ts +24 -23
- package/lib/components/pages/revisions/audit-revisions.page.component.d.ts +11 -14
- package/lib/models/config.model.d.ts +1 -1
- package/lib/models/entity-revision-change-state.model.d.ts +3 -3
- package/lib/models/entity-revision-changes.model.d.ts +3 -3
- package/lib/models/guiEntityModelWithI18n.model.d.ts +2 -2
- package/lib/models/rev-entity-detailed.model.d.ts +4 -4
- package/lib/models/rev-entity.model.d.ts +2 -2
- package/lib/models/revEntityWithId.model.d.ts +2 -2
- package/lib/service/module-config.token.d.ts +2 -2
- package/lib/utils/audit.util.d.ts +17 -14
- package/package.json +3 -2
- package/esm2022/lib/models/new-filter-match-type.model.mjs +0 -19
- package/lib/models/new-filter-match-type.model.d.ts +0 -17
- /package/{assets/i18n → i18n}/en.json +0 -0
- /package/{assets/i18n → i18n}/sl.json +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { TypeName } from '@mediusinc/mng-commons';
|
|
3
|
-
import {
|
|
4
|
-
let
|
|
2
|
+
import { TypeName } from '@mediusinc/mng-commons/core';
|
|
3
|
+
import { GuiEntityModelDto } from '../api/models/guiEntityModel';
|
|
4
|
+
let GuiEntityModelWithI18n = class GuiEntityModelWithI18n extends GuiEntityModelDto {
|
|
5
5
|
};
|
|
6
|
-
|
|
6
|
+
GuiEntityModelWithI18n = __decorate([
|
|
7
7
|
TypeName('MngGuiEntityModelWithI18n')
|
|
8
|
-
],
|
|
9
|
-
export {
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
], GuiEntityModelWithI18n);
|
|
9
|
+
export { GuiEntityModelWithI18n };
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpRW50aXR5TW9kZWxXaXRoSTE4bi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbW9kZWxzL2d1aUVudGl0eU1vZGVsV2l0aEkxOG4ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUd4RCxJQUFNLHNCQUFzQixHQUE1QixNQUFNLHNCQUF1QixTQUFRLGlCQUFpQjtDQUU1RCxDQUFBO0FBRlksc0JBQXNCO0lBRGxDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQztHQUN6QixzQkFBc0IsQ0FFbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGVOYW1lfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG5pbXBvcnQge0d1aUVudGl0eU1vZGVsRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL2d1aUVudGl0eU1vZGVsJztcblxuQFR5cGVOYW1lKCdNbmdHdWlFbnRpdHlNb2RlbFdpdGhJMThuJylcbmV4cG9ydCBjbGFzcyBHdWlFbnRpdHlNb2RlbFdpdGhJMThuIGV4dGVuZHMgR3VpRW50aXR5TW9kZWxEdG8ge1xuICAgIGVudGl0eU5hbWVJMThuPzogc3RyaW5nO1xufVxuIl19
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { TypeName } from '@mediusinc/mng-commons';
|
|
3
|
-
import {
|
|
4
|
-
let
|
|
2
|
+
import { TypeName } from '@mediusinc/mng-commons/core';
|
|
3
|
+
import { RevEntity } from './rev-entity.model';
|
|
4
|
+
let RevEntityDetailed = class RevEntityDetailed extends RevEntity {
|
|
5
5
|
};
|
|
6
|
-
|
|
6
|
+
RevEntityDetailed = __decorate([
|
|
7
7
|
TypeName('MngRevEntityDetailed')
|
|
8
|
-
],
|
|
9
|
-
export {
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
], RevEntityDetailed);
|
|
9
|
+
export { RevEntityDetailed };
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2LWVudGl0eS1kZXRhaWxlZC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbW9kZWxzL3Jldi1lbnRpdHktZGV0YWlsZWQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUdyRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFHdEMsSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBa0IsU0FBUSxTQUFTO0NBRy9DLENBQUE7QUFIWSxpQkFBaUI7SUFEN0IsUUFBUSxDQUFDLHNCQUFzQixDQUFDO0dBQ3BCLGlCQUFpQixDQUc3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZU5hbWV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5cbmltcG9ydCB7RW50aXR5Q2hhbmdlRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL2VudGl0eUNoYW5nZSc7XG5pbXBvcnQge1JldkVudGl0eX0gZnJvbSAnLi9yZXYtZW50aXR5Lm1vZGVsJztcblxuQFR5cGVOYW1lKCdNbmdSZXZFbnRpdHlEZXRhaWxlZCcpXG5leHBvcnQgY2xhc3MgUmV2RW50aXR5RGV0YWlsZWQgZXh0ZW5kcyBSZXZFbnRpdHkge1xuICAgIHJldkVudGl0eT86IHtba2V5OiBzdHJpbmddOiB1bmtub3dufTtcbiAgICBlbnRpdHlOYW1lQ2hhbmdlc01hcD86IHtba2V5OiBzdHJpbmddOiBBcnJheTxFbnRpdHlDaGFuZ2VEdG8+fTtcbn1cbiJdfQ==
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { TypeName } from '@mediusinc/mng-commons';
|
|
3
|
-
let
|
|
2
|
+
import { TypeName } from '@mediusinc/mng-commons/core';
|
|
3
|
+
let RevEntity = class RevEntity {
|
|
4
4
|
};
|
|
5
|
-
|
|
5
|
+
RevEntity = __decorate([
|
|
6
6
|
TypeName('MngRevEntity')
|
|
7
|
-
],
|
|
8
|
-
export {
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
], RevEntity);
|
|
8
|
+
export { RevEntity };
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2LWVudGl0eS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbW9kZWxzL3Jldi1lbnRpdHkubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBUyxRQUFRLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUd0RCxJQUFNLFNBQVMsR0FBZixNQUFNLFNBQVM7Q0FJckIsQ0FBQTtBQUpZLFNBQVM7SUFEckIsUUFBUSxDQUFDLGNBQWMsQ0FBQztHQUNaLFNBQVMsQ0FJckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lkVHlwZSwgVHlwZU5hbWV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5cbkBUeXBlTmFtZSgnTW5nUmV2RW50aXR5JylcbmV4cG9ydCBjbGFzcyBSZXZFbnRpdHkge1xuICAgIHJldj86IElkVHlwZTsgLy8gdXN1YWxseSBhIG51bWJlclxuICAgIHJldlVzZXJuYW1lPzogc3RyaW5nO1xuICAgIHRpbWVzdGFtcD86IERhdGU7XG59XG4iXX0=
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { TypeName, TypeRegistry } from '@mediusinc/mng-commons';
|
|
3
|
-
import {
|
|
4
|
-
let
|
|
2
|
+
import { TypeName, TypeRegistry } from '@mediusinc/mng-commons/core';
|
|
3
|
+
import { RevEntityWithStateDto } from '../api/models/revEntityWithStateDto';
|
|
4
|
+
let RevEntityWithId = class RevEntityWithId extends RevEntityWithStateDto {
|
|
5
5
|
};
|
|
6
|
-
|
|
6
|
+
RevEntityWithId = __decorate([
|
|
7
7
|
TypeName('MngRevEntityWithId')
|
|
8
|
-
],
|
|
9
|
-
export {
|
|
10
|
-
TypeRegistry.get().registerType(
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
], RevEntityWithId);
|
|
9
|
+
export { RevEntityWithId };
|
|
10
|
+
TypeRegistry.get().registerType(RevEntityWithId);
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2RW50aXR5V2l0aElkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMvcmV2RW50aXR5V2l0aElkLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRW5FLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBR25FLElBQU0sZUFBZSxHQUFyQixNQUFNLGVBQWdCLFNBQVEscUJBQXFCO0NBRXpELENBQUE7QUFGWSxlQUFlO0lBRDNCLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztHQUNsQixlQUFlLENBRTNCOztBQUVELFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGVOYW1lLCBUeXBlUmVnaXN0cnl9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5cbmltcG9ydCB7UmV2RW50aXR5V2l0aFN0YXRlRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL3JldkVudGl0eVdpdGhTdGF0ZUR0byc7XG5cbkBUeXBlTmFtZSgnTW5nUmV2RW50aXR5V2l0aElkJylcbmV4cG9ydCBjbGFzcyBSZXZFbnRpdHlXaXRoSWQgZXh0ZW5kcyBSZXZFbnRpdHlXaXRoU3RhdGVEdG8ge1xuICAgIG1lcmdlZElkPzogc3RyaW5nO1xufVxuXG5UeXBlUmVnaXN0cnkuZ2V0KCkucmVnaXN0ZXJUeXBlKFJldkVudGl0eVdpdGhJZCk7XG4iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
|
-
export const
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const COMMONS_AUDIT_MODULE_CONFIG_IT = new InjectionToken('CommonsAuditModuleConfig');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWNvbmZpZy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZS9tb2R1bGUtY29uZmlnLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJN0MsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQTJCLDBCQUEwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtDb21tb25zQXVkaXRNb2R1bGVDb25maWd9IGZyb20gJy4uL21vZGVscy9jb25maWcubW9kZWwnO1xuXG5leHBvcnQgY29uc3QgQ09NTU9OU19BVURJVF9NT0RVTEVfQ09ORklHX0lUID0gbmV3IEluamVjdGlvblRva2VuPENvbW1vbnNBdWRpdE1vZHVsZUNvbmZpZz4oJ0NvbW1vbnNBdWRpdE1vZHVsZUNvbmZpZycpO1xuIl19
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
1
|
+
import { HttpParams } from '@angular/common/http';
|
|
2
|
+
import { DataListParamsUtil, TypeRegistry } from '@mediusinc/mng-commons/core';
|
|
3
|
+
import { LookupDataProvider } from '@mediusinc/mng-commons/form/api';
|
|
4
|
+
import { enumModelGeneric } from '@mediusinc/mng-commons/model';
|
|
5
|
+
import { GuiPropertyTypeDto } from '../api/models/guiPropertyType';
|
|
6
|
+
import { RevisionTypeDto, revisionTypeEnum } from '../api/models/revisionType';
|
|
7
|
+
import { EntityRevisionChangeState } from '../models/entity-revision-change-state.model';
|
|
8
|
+
import { EntityRevisionChanges } from '../models/entity-revision-changes.model';
|
|
8
9
|
export class AuditUtil {
|
|
9
10
|
static { this._dateRegex = /\d{4}-[01]\d-[0-3]\d/; }
|
|
10
11
|
static addColumnsFromModel(descriptor, properties, modelType = undefined, addFilters = true, addSorts = true) {
|
|
@@ -12,37 +13,37 @@ export class AuditUtil {
|
|
|
12
13
|
if (!property.resolvedPropertyName) {
|
|
13
14
|
continue;
|
|
14
15
|
}
|
|
15
|
-
const isEnum = property.propertyType ===
|
|
16
|
+
const isEnum = property.propertyType === GuiPropertyTypeDto.Enum;
|
|
16
17
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
18
|
let column = null;
|
|
18
19
|
if (isEnum) {
|
|
19
20
|
if (!property.possibleEnumValues) {
|
|
20
21
|
continue;
|
|
21
22
|
}
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
24
|
-
column = descriptor.
|
|
23
|
+
const enumModel = AuditUtil.findEnum(property);
|
|
24
|
+
if (enumModel) {
|
|
25
|
+
column = descriptor.addColumnEnum(property.resolvedPropertyName, enumModel);
|
|
25
26
|
if (addFilters) {
|
|
26
|
-
column.
|
|
27
|
+
descriptor.addFilterLookupEnum(column.property, enumModel, property.possibleEnumValues);
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
else {
|
|
30
31
|
column = descriptor.addColumnUnsafe(property.resolvedPropertyName);
|
|
31
32
|
if (addFilters) {
|
|
32
|
-
(column
|
|
33
|
+
descriptor.addFilterLookupUnsafe(column.property, LookupDataProvider.create().withLookup(() => property.possibleEnumValues ?? []));
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
|
-
else if (property.propertyType ===
|
|
37
|
+
else if (property.propertyType === GuiPropertyTypeDto.Number) {
|
|
37
38
|
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asNumber();
|
|
38
39
|
}
|
|
39
|
-
else if (property.propertyType ===
|
|
40
|
+
else if (property.propertyType === GuiPropertyTypeDto.Boolean) {
|
|
40
41
|
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asBoolean();
|
|
41
42
|
}
|
|
42
|
-
else if (property.propertyType ===
|
|
43
|
+
else if (property.propertyType === GuiPropertyTypeDto.LocalDate) {
|
|
43
44
|
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy');
|
|
44
45
|
}
|
|
45
|
-
else if (property.propertyType ===
|
|
46
|
+
else if (property.propertyType === GuiPropertyTypeDto.OffsetDateTime) {
|
|
46
47
|
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy HH:mm');
|
|
47
48
|
}
|
|
48
49
|
else {
|
|
@@ -54,10 +55,10 @@ export class AuditUtil {
|
|
|
54
55
|
}
|
|
55
56
|
column.withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
|
|
56
57
|
if (!isEnum && addFilters) {
|
|
57
|
-
column?.
|
|
58
|
+
column?.withFilterUnsafe();
|
|
58
59
|
}
|
|
59
60
|
if (addSorts) {
|
|
60
|
-
column?.
|
|
61
|
+
column?.withSortUnsafe();
|
|
61
62
|
}
|
|
62
63
|
}
|
|
63
64
|
return descriptor;
|
|
@@ -74,39 +75,39 @@ export class AuditUtil {
|
|
|
74
75
|
continue;
|
|
75
76
|
}
|
|
76
77
|
const fieldPrepend = `${modelType}.`;
|
|
77
|
-
if (property.propertyType ===
|
|
78
|
-
const
|
|
79
|
-
if (
|
|
78
|
+
if (property.propertyType === GuiPropertyTypeDto.Enum) {
|
|
79
|
+
const enumModel = AuditUtil.findEnum(property);
|
|
80
|
+
if (enumModel) {
|
|
80
81
|
if (!property.possibleEnumValues) {
|
|
81
82
|
continue;
|
|
82
83
|
}
|
|
83
|
-
descriptor.
|
|
84
|
+
descriptor.addFieldLookupEnum((fieldPrepend + property.resolvedPropertyName), enumModel, property.possibleEnumValues).withDisabled();
|
|
84
85
|
}
|
|
85
86
|
else {
|
|
86
87
|
descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName).withLabel(AuditUtil.getPropertyTitleKey(property, modelType));
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
|
-
else if (property.propertyType ===
|
|
90
|
+
else if (property.propertyType === GuiPropertyTypeDto.Number) {
|
|
90
91
|
descriptor
|
|
91
92
|
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
92
93
|
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
93
94
|
.asNumber()
|
|
94
95
|
.withDisabled();
|
|
95
96
|
}
|
|
96
|
-
else if (property.propertyType ===
|
|
97
|
+
else if (property.propertyType === GuiPropertyTypeDto.Boolean) {
|
|
97
98
|
descriptor
|
|
98
99
|
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
99
100
|
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
100
101
|
.withDisabled();
|
|
101
102
|
}
|
|
102
|
-
else if (property.propertyType ===
|
|
103
|
+
else if (property.propertyType === GuiPropertyTypeDto.LocalDate) {
|
|
103
104
|
descriptor
|
|
104
105
|
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
105
106
|
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
106
107
|
.asDatePicker({ format: 'dd. MMM yyyy' })
|
|
107
108
|
.withDisabled();
|
|
108
109
|
}
|
|
109
|
-
else if (property.propertyType ===
|
|
110
|
+
else if (property.propertyType === GuiPropertyTypeDto.OffsetDateTime) {
|
|
110
111
|
descriptor
|
|
111
112
|
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
112
113
|
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
@@ -128,8 +129,8 @@ export class AuditUtil {
|
|
|
128
129
|
return descriptor;
|
|
129
130
|
}
|
|
130
131
|
static buildDescriptorForEntityRevision(descriptor, revModel, entityModel) {
|
|
131
|
-
descriptor.
|
|
132
|
-
descriptor.addFieldLookupEnum('revType',
|
|
132
|
+
descriptor.addColumnEnum('revType', revisionTypeEnum).withTitle('MngEntityRevisionChangeState.properties.revType').withFilterUnsafe();
|
|
133
|
+
descriptor.addFieldLookupEnum('revType', revisionTypeEnum).withLabel('MngEntityRevisionChangeState.properties.revType');
|
|
133
134
|
if (revModel.properties) {
|
|
134
135
|
AuditUtil.addColumnsFromModel(descriptor.table, revModel.properties, 'revEntity');
|
|
135
136
|
AuditUtil.addFieldsFromModel(descriptor.detailsEditor, revModel.properties, 'revEntity');
|
|
@@ -140,15 +141,31 @@ export class AuditUtil {
|
|
|
140
141
|
}
|
|
141
142
|
return descriptor;
|
|
142
143
|
}
|
|
143
|
-
static
|
|
144
|
+
static findEnum(property) {
|
|
144
145
|
if (!property.enumClassSimpleName) {
|
|
145
146
|
return undefined;
|
|
146
147
|
}
|
|
147
|
-
let
|
|
148
|
+
let i18n = property.enumClassSimpleName;
|
|
149
|
+
let enumType = TypeRegistry.get().findEnum(i18n);
|
|
148
150
|
if (!enumType) {
|
|
149
|
-
|
|
151
|
+
i18n = property.enumClassSimpleName + 'Dto';
|
|
152
|
+
enumType = TypeRegistry.get().findEnum(i18n);
|
|
150
153
|
}
|
|
151
|
-
|
|
154
|
+
if (!enumType && Array.isArray(property.possibleEnumValues)) {
|
|
155
|
+
i18n = null;
|
|
156
|
+
enumType = property.possibleEnumValues?.reduce((acc, v) => {
|
|
157
|
+
const constName = v
|
|
158
|
+
.split('_')
|
|
159
|
+
.map(s => (s.length > 1 ? s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase() : s))
|
|
160
|
+
.join('');
|
|
161
|
+
if (constName !== v) {
|
|
162
|
+
acc[constName] = v;
|
|
163
|
+
}
|
|
164
|
+
acc[v] = constName;
|
|
165
|
+
return acc;
|
|
166
|
+
}, {});
|
|
167
|
+
}
|
|
168
|
+
return enumModelGeneric(enumType, i18n);
|
|
152
169
|
}
|
|
153
170
|
static extractPropertyName(fullPropertyName) {
|
|
154
171
|
if (fullPropertyName?.includes('entityState.')) {
|
|
@@ -159,109 +176,41 @@ export class AuditUtil {
|
|
|
159
176
|
}
|
|
160
177
|
return fullPropertyName;
|
|
161
178
|
}
|
|
162
|
-
static
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}
|
|
170
|
-
url += sortingQPs.join(',');
|
|
171
|
-
}
|
|
172
|
-
if (queryParams.filterParams && queryParams.filterParams.length > 0) {
|
|
173
|
-
const filterQPs = [];
|
|
174
|
-
for (const mfp of queryParams.filterParams) {
|
|
175
|
-
switch (mfp.filterMatchType) {
|
|
176
|
-
case MediusFilterMatchType.Equals: {
|
|
177
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.Equals}:${mfp.filterValue}`);
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
180
|
-
case MediusFilterMatchType.NotEquals: {
|
|
181
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.NotEquals}:${mfp.filterValue}`);
|
|
182
|
-
break;
|
|
183
|
-
}
|
|
184
|
-
case MediusFilterMatchType.FromTo: {
|
|
185
|
-
if (this._dateRegex.test(mfp.filterValue)) {
|
|
186
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.Between}:${new Date(mfp.filterValue).toISOString()},${new Date(mfp.filterValueTo).toISOString()}`);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.Between}:${mfp.filterValue},${mfp.filterValueTo}`);
|
|
190
|
-
}
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
case MediusFilterMatchType.Contains: {
|
|
194
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.Contains}:${mfp.filterValue}`);
|
|
195
|
-
break;
|
|
196
|
-
}
|
|
197
|
-
case MediusFilterMatchType.StartsWith: {
|
|
198
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.StartsWith}:${mfp.filterValue}`);
|
|
199
|
-
break;
|
|
200
|
-
}
|
|
201
|
-
case MediusFilterMatchType.EndsWith: {
|
|
202
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.EndsWith}:${mfp.filterValue}`);
|
|
203
|
-
break;
|
|
204
|
-
}
|
|
205
|
-
case MediusFilterMatchType.In: {
|
|
206
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.In}:${mfp.filterValue}`);
|
|
207
|
-
break;
|
|
208
|
-
}
|
|
209
|
-
case MediusFilterMatchType.NotIn: {
|
|
210
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.NotIn}:${mfp.filterValue}`);
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
case MediusFilterMatchType.SmallerThan: {
|
|
214
|
-
if (this._dateRegex.test(mfp.filterValue)) {
|
|
215
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.LessThan}:${new Date(mfp.filterValue).toISOString()}`);
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.LessThan}:${mfp.filterValue}`);
|
|
219
|
-
}
|
|
220
|
-
break;
|
|
221
|
-
}
|
|
222
|
-
case MediusFilterMatchType.GreaterThan: {
|
|
223
|
-
if (this._dateRegex.test(mfp.filterValue)) {
|
|
224
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.GreaterThan}:${new Date(mfp.filterValue).toISOString()}`);
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
filterQPs.push(`${this.extractPropertyName(mfp.property)}=${NewMediusFilterMatchType.GreaterThan}:${mfp.filterValue}`);
|
|
228
|
-
}
|
|
229
|
-
break;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
url += '&';
|
|
234
|
-
url += filterQPs.join('&');
|
|
235
|
-
}
|
|
236
|
-
return url;
|
|
179
|
+
static paramsToHttpParams(params) {
|
|
180
|
+
const routeParams = DataListParamsUtil.toUrlQueryParams(params, null);
|
|
181
|
+
let httpParams = new HttpParams();
|
|
182
|
+
Object.entries(routeParams).forEach(([key, value]) => {
|
|
183
|
+
httpParams = httpParams.append(key, value);
|
|
184
|
+
});
|
|
185
|
+
return httpParams;
|
|
237
186
|
}
|
|
238
187
|
static mapItemsToEntityChangesArray(fieldValue) {
|
|
239
188
|
const entityChanges = [];
|
|
240
189
|
for (const key of Object.keys(fieldValue)) {
|
|
241
|
-
const ec = new
|
|
190
|
+
const ec = new EntityRevisionChanges();
|
|
242
191
|
ec.entityType = key;
|
|
243
192
|
ec.items = [];
|
|
244
193
|
for (const change of fieldValue[key]) {
|
|
245
|
-
if (change.revType ===
|
|
246
|
-
const item = new
|
|
194
|
+
if (change.revType === RevisionTypeDto.Add && change.entityNewState) {
|
|
195
|
+
const item = new EntityRevisionChangeState();
|
|
247
196
|
item.revType = change.revType;
|
|
248
197
|
item.color = 'green';
|
|
249
198
|
Object.entries(change.entityNewState).forEach(([key, value]) => (item[key] = value));
|
|
250
199
|
ec.items.push(item);
|
|
251
200
|
}
|
|
252
|
-
else if (change.revType ===
|
|
253
|
-
const item = new
|
|
201
|
+
else if (change.revType === RevisionTypeDto.Del && change.entityOldState) {
|
|
202
|
+
const item = new EntityRevisionChangeState();
|
|
254
203
|
item.revType = change.revType;
|
|
255
204
|
item.color = 'red';
|
|
256
205
|
Object.entries(change.entityOldState).forEach(([key, value]) => (item[key] = value));
|
|
257
206
|
ec.items.push(item);
|
|
258
207
|
}
|
|
259
|
-
else if (change.revType ===
|
|
260
|
-
const itemOld = new
|
|
208
|
+
else if (change.revType === RevisionTypeDto.Mod && change.entityOldState && change.entityNewState) {
|
|
209
|
+
const itemOld = new EntityRevisionChangeState();
|
|
261
210
|
itemOld.revType = change.revType;
|
|
262
211
|
itemOld.color = 'red';
|
|
263
212
|
Object.entries(change.entityOldState).forEach(([key, value]) => (itemOld[key] = value));
|
|
264
|
-
const itemNew = new
|
|
213
|
+
const itemNew = new EntityRevisionChangeState();
|
|
265
214
|
itemNew.revType = change.revType;
|
|
266
215
|
itemNew.color = 'green';
|
|
267
216
|
Object.entries(change.entityNewState).forEach(([key, value]) => (itemNew[key] = value));
|
|
@@ -274,4 +223,4 @@ export class AuditUtil {
|
|
|
274
223
|
return entityChanges;
|
|
275
224
|
}
|
|
276
225
|
}
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvYXVkaXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFJSCxxQkFBcUIsRUFJckIsWUFBWSxFQUNmLE1BQU0sd0JBQXdCLENBQUM7QUFLaEMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFcEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsTUFBTSxPQUFPLFNBQVM7YUFDSCxlQUFVLEdBQUcsc0JBQXNCLENBQUM7SUFFNUMsTUFBTSxDQUFDLG1CQUFtQixDQUM3QixVQUFrQyxFQUNsQyxVQUFvQyxFQUNwQyxZQUFxRCxTQUFTLEVBQzlELFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFFBQVEsR0FBRyxJQUFJO1FBRWYsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtnQkFDaEMsU0FBUzthQUNaO1lBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFDcEUsOERBQThEO1lBQzlELElBQUksTUFBTSxHQUFvQyxJQUFJLENBQUM7WUFDbkQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtvQkFDOUIsU0FBUztpQkFDWjtnQkFFRCxNQUFNLFFBQVEsR0FBRyxT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QyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBRXhGLE1BQU0sT0FBTyxHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztvQkFDbkQsT0FBTyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO29CQUNqQyxPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztvQkFDeEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBRXhGLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN2QixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDMUI7YUFDSjtZQUNELGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUI7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgQ29sdW1uRGVzY3JpcHRvcixcbiAgICBFZGl0b3JEZXNjcmlwdG9ySW5zdCxcbiAgICBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLFxuICAgIE1lZGl1c0ZpbHRlck1hdGNoVHlwZSxcbiAgICBNZWRpdXNRdWVyeVBhcmFtLFxuICAgIFRhYmxlRGVzY3JpcHRvckluc3QsXG4gICAgVGFibGV2aWV3RGVzY3JpcHRvckluc3QsXG4gICAgVHlwZVJlZ2lzdHJ5XG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMnO1xuXG5pbXBvcnQge01uZ0VudGl0eUNoYW5nZUR0b30gZnJvbSAnLi4vYXBpL21vZGVscy9lbnRpdHlDaGFuZ2UnO1xuaW1wb3J0IHtNbmdHdWlFbnRpdHlNb2RlbER0b30gZnJvbSAnLi4vYXBpL21vZGVscy9ndWlFbnRpdHlNb2RlbCc7XG5pbXBvcnQge01uZ0d1aVByb3BlcnR5TW9kZWxEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvZ3VpUHJvcGVydHlNb2RlbCc7XG5pbXBvcnQge01uZ0d1aVByb3BlcnR5VHlwZUR0b30gZnJvbSAnLi4vYXBpL21vZGVscy9ndWlQcm9wZXJ0eVR5cGUnO1xuaW1wb3J0IHtNbmdSZXZFbnRpdHlXaXRoU3RhdGVEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvcmV2RW50aXR5V2l0aFN0YXRlRHRvJztcbmltcG9ydCB7TW5nUmV2aXNpb25UeXBlRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL3JldmlzaW9uVHlwZSc7XG5pbXBvcnQge01uZ0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGV9IGZyb20gJy4uL21vZGVscy9lbnRpdHktcmV2aXNpb24tY2hhbmdlLXN0YXRlLm1vZGVsJztcbmltcG9ydCB7TW5nRW50aXR5UmV2aXNpb25DaGFuZ2VzfSBmcm9tICcuLi9tb2RlbHMvZW50aXR5LXJldmlzaW9uLWNoYW5nZXMubW9kZWwnO1xuaW1wb3J0IHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGV9IGZyb20gJy4uL21vZGVscy9uZXctZmlsdGVyLW1hdGNoLXR5cGUubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgQXVkaXRVdGlsIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfZGF0ZVJlZ2V4ID0gL1xcZHs0fS1bMDFdXFxkLVswLTNdXFxkLztcblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkQ29sdW1uc0Zyb21Nb2RlbDxUPihcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxUPixcbiAgICAgICAgcHJvcGVydGllczogTW5nR3VpUHJvcGVydHlNb2RlbER0b1tdLFxuICAgICAgICBtb2RlbFR5cGU6ICdyZXZFbnRpdHknIHwgJ2VudGl0eVN0YXRlJyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkRmlsdGVycyA9IHRydWUsXG4gICAgICAgIGFkZFNvcnRzID0gdHJ1ZVxuICAgICk6IFRhYmxlRGVzY3JpcHRvckluc3Q8VD4ge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaXNFbnVtID0gcHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uRW51bTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBsZXQgY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4gfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpc0VudW0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbnVtVHlwZSA9IEF1ZGl0VXRpbC5maW5kRW51bVR5cGUocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIGlmIChlbnVtVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSBkZXNjcmlwdG9yLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkuYXNFbnVtKGVudW1UeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi53aXRoRmlsdGVyTG9va3VwRW51bShwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5VbnNhZmUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWRkRmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbHVtbj8ud2l0aEZpbHRlckxvb2t1cCgpIGFzIEZpbHRlckxvb2t1cERlc2NyaXB0b3I8c3RyaW5nPikud2l0aExvb2t1cCgoKSA9PiBvZihwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMgPz8gW10pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5VbnNhZmUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLmFzTnVtYmVyKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gTW5nR3VpUHJvcGVydHlUeXBlRHRvLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBkZXNjcmlwdG9yLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkuYXNCb29sZWFuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gTW5nR3VpUHJvcGVydHlUeXBlRHRvLkxvY2FsRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0RhdGUoJ2RkLiBNTSB5eXl5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gTW5nR3VpUHJvcGVydHlUeXBlRHRvLk9mZnNldERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5VbnNhZmUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLmFzRGF0ZSgnZGQuIE1NIHl5eXkgSEg6bW0nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nIC8gd2lsZGNhcmRcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBkZXNjcmlwdG9yLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkud2l0aFRpdGxlKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1vZGVsVHlwZSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbi53aXRoR2V0dGVyKCh2YWx1ZSwgaXRlbSkgPT4gaXRlbT8uW21vZGVsVHlwZSBhcyBrZXlvZiBvYmplY3RdPy5bcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUgYXMga2V5b2Ygb2JqZWN0XSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbHVtbi53aXRoVGl0bGUoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpO1xuXG4gICAgICAgICAgICBpZiAoIWlzRW51bSAmJiBhZGRGaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uPy53aXRoRmlsdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWRkU29ydHMpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4/LndpdGhTb3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5OiBNbmdHdWlQcm9wZXJ0eU1vZGVsRHRvLCBtb2RlbFR5cGU6ICdyZXZFbnRpdHknIHwgJ2VudGl0eVN0YXRlJyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobW9kZWxUeXBlID09PSAncmV2RW50aXR5Jykge1xuICAgICAgICAgICAgcmV0dXJuICdNbmdSZXZFbnRpdHkucHJvcGVydGllcy4nICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lID8/ICcnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkRmllbGRzRnJvbU1vZGVsPFQ+KFxuICAgICAgICBkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUPixcbiAgICAgICAgcHJvcGVydGllczogTW5nR3VpUHJvcGVydHlNb2RlbER0b1tdLFxuICAgICAgICBtb2RlbFR5cGU6ICdyZXZFbnRpdHknIHwgJ2VudGl0eVN0YXRlJyA9ICdyZXZFbnRpdHknXG4gICAgKTogRWRpdG9yRGVzY3JpcHRvckluc3Q8VD4ge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmllbGRQcmVwZW5kID0gYCR7bW9kZWxUeXBlfS5gO1xuXG4gICAgICAgICAgICBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uRW51bSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudW1UeXBlID0gQXVkaXRVdGlsLmZpbmRFbnVtVHlwZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgaWYgKGVudW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuYWRkRmllbGRMb29rdXBFbnVtVW5zYWZlKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lLCBlbnVtVHlwZSwgcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzKS53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmFkZEZpZWxkVW5zYWZlKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGRVbnNhZmUoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC5hc051bWJlcigpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uQm9vbGVhbikge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkVW5zYWZlKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gTW5nR3VpUHJvcGVydHlUeXBlRHRvLkxvY2FsRGF0ZSkge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkVW5zYWZlKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAuYXNEYXRlUGlja2VyKHtmb3JtYXQ6ICdkZC4gTU1NIHl5eXknfSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5PZmZzZXREYXRlVGltZSkge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkVW5zYWZlKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAuYXNEYXRlUGlja2VyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2RkLiBNTSB5eScsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93VGltZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dTZWNvbmRzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHN0cmluZyAvIHdpbGRjYXJkXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGRVbnNhZmUoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGJ1aWxkRGVzY3JpcHRvckZvckVudGl0eVJldmlzaW9uKFxuICAgICAgICBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNbmdSZXZFbnRpdHlXaXRoU3RhdGVEdG8+LFxuICAgICAgICByZXZNb2RlbDogTW5nR3VpRW50aXR5TW9kZWxEdG8sXG4gICAgICAgIGVudGl0eU1vZGVsOiBNbmdHdWlFbnRpdHlNb2RlbER0b1xuICAgICk6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1uZ1JldkVudGl0eVdpdGhTdGF0ZUR0bz4ge1xuICAgICAgICBkZXNjcmlwdG9yLmFkZENvbHVtbigncmV2VHlwZScpLndpdGhUaXRsZSgnTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZS5wcm9wZXJ0aWVzLnJldlR5cGUnKS5hc0VudW0oTW5nUmV2aXNpb25UeXBlRHRvKS53aXRoRmlsdGVyKCk7XG4gICAgICAgIGRlc2NyaXB0b3IuYWRkRmllbGRMb29rdXBFbnVtKCdyZXZUeXBlJywgTW5nUmV2aXNpb25UeXBlRHRvKS53aXRoTGFiZWwoJ01uZ0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUucHJvcGVydGllcy5yZXZUeXBlJyk7XG5cbiAgICAgICAgaWYgKHJldk1vZGVsLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIEF1ZGl0VXRpbC5hZGRDb2x1bW5zRnJvbU1vZGVsKGRlc2NyaXB0b3IudGFibGUsIHJldk1vZGVsLnByb3BlcnRpZXMsICdyZXZFbnRpdHknKTtcbiAgICAgICAgICAgIEF1ZGl0VXRpbC5hZGRGaWVsZHNGcm9tTW9kZWwoZGVzY3JpcHRvci5kZXRhaWxzRWRpdG9yLCByZXZNb2RlbC5wcm9wZXJ0aWVzLCAncmV2RW50aXR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGl0eU1vZGVsLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIEF1ZGl0VXRpbC5hZGRDb2x1bW5zRnJvbU1vZGVsKGRlc2NyaXB0b3IudGFibGUsIGVudGl0eU1vZGVsLnByb3BlcnRpZXMsICdlbnRpdHlTdGF0ZScpO1xuICAgICAgICAgICAgQXVkaXRVdGlsLmFkZEZpZWxkc0Zyb21Nb2RlbChkZXNjcmlwdG9yLmRldGFpbHNFZGl0b3IsIGVudGl0eU1vZGVsLnByb3BlcnRpZXMsICdlbnRpdHlTdGF0ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmaW5kRW51bVR5cGUocHJvcGVydHk6IE1uZ0d1aVByb3BlcnR5TW9kZWxEdG8pIHtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eS5lbnVtQ2xhc3NTaW1wbGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVudW1UeXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRFbnVtKHByb3BlcnR5LmVudW1DbGFzc1NpbXBsZU5hbWUpO1xuICAgICAgICBpZiAoIWVudW1UeXBlKSB7XG4gICAgICAgICAgICBlbnVtVHlwZSA9IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kRW51bShwcm9wZXJ0eS5lbnVtQ2xhc3NTaW1wbGVOYW1lICsgJ0R0bycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGV4dHJhY3RQcm9wZXJ0eU5hbWUoZnVsbFByb3BlcnR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGZ1bGxQcm9wZXJ0eU5hbWU/LmluY2x1ZGVzKCdlbnRpdHlTdGF0ZS4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bGxQcm9wZXJ0eU5hbWUucmVwbGFjZSgnZW50aXR5U3RhdGUuJywgJycpO1xuICAgICAgICB9IGVsc2UgaWYgKGZ1bGxQcm9wZXJ0eU5hbWU/LmluY2x1ZGVzKCdyZXZFbnRpdHkuJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmdWxsUHJvcGVydHlOYW1lPy5yZXBsYWNlKCdyZXZFbnRpdHkuJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdWxsUHJvcGVydHlOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYXBwZW5kTWVkaXVzUXVlcnlQYXJhbXNUb1VybChxdWVyeVBhcmFtczogTWVkaXVzUXVlcnlQYXJhbSk6IHN0cmluZyB7XG4gICAgICAgIGxldCB1cmwgPSBgP29mZnNldD0ke3F1ZXJ5UGFyYW1zLml0ZW1zT2Zmc2V0fSZsaW1pdD0ke3F1ZXJ5UGFyYW1zLml0ZW1zUGVyUGFnZX1gO1xuICAgICAgICBpZiAocXVlcnlQYXJhbXMuc29ydFByb3BlcnR5ICYmIHF1ZXJ5UGFyYW1zLnNvcnRQcm9wZXJ0eS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB1cmwgKz0gJyZzb3J0PSc7XG4gICAgICAgICAgICBjb25zdCBzb3J0aW5nUVBzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXJ5UGFyYW1zLnNvcnRQcm9wZXJ0eS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHNvcnRpbmdRUHMucHVzaChgJHtxdWVyeVBhcmFtcy5zb3J0QXNjPy5baV0gPz8gdHJ1ZSA/ICdhc2MnIDogJ2Rlc2MnfToke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShxdWVyeVBhcmFtcy5zb3J0UHJvcGVydHlbaV0pfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXJsICs9IHNvcnRpbmdRUHMuam9pbignLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLmZpbHRlclBhcmFtcyAmJiBxdWVyeVBhcmFtcy5maWx0ZXJQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyUVBzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1mcCBvZiBxdWVyeVBhcmFtcy5maWx0ZXJQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1mcC5maWx0ZXJNYXRjaFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzfToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdEVxdWFsczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdEVxdWFsc306JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Gcm9tVG86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kYXRlUmVnZXgudGVzdChtZnAuZmlsdGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5CZXR3ZWVufToke25ldyBEYXRlKG1mcC5maWx0ZXJWYWx1ZSkudG9JU09TdHJpbmcoKX0sJHtuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mcC5maWx0ZXJWYWx1ZVRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkJldHdlZW59OiR7bWZwLmZpbHRlclZhbHVlfSwke21mcC5maWx0ZXJWYWx1ZVRvfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuQ29udGFpbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5Db250YWluc306JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TdGFydHNXaXRoOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU3RhcnRzV2l0aH06JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FbmRzV2l0aDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVuZHNXaXRofToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkluOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuSW59OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuTm90SW46IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5Ob3RJbn06JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TbWFsbGVyVGhhbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGVSZWdleC50ZXN0KG1mcC5maWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuTGVzc1RoYW59OiR7bmV3IERhdGUobWZwLmZpbHRlclZhbHVlKS50b0lTT1N0cmluZygpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuTGVzc1RoYW59OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuR3JlYXRlclRoYW46IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kYXRlUmVnZXgudGVzdChtZnAuZmlsdGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkdyZWF0ZXJUaGFufToke25ldyBEYXRlKG1mcC5maWx0ZXJWYWx1ZSkudG9JU09TdHJpbmcoKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkdyZWF0ZXJUaGFufToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXJsICs9ICcmJztcbiAgICAgICAgICAgIHVybCArPSBmaWx0ZXJRUHMuam9pbignJicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBtYXBJdGVtc1RvRW50aXR5Q2hhbmdlc0FycmF5KGZpZWxkVmFsdWU6IHtba2V5OiBzdHJpbmddOiBBcnJheTxNbmdFbnRpdHlDaGFuZ2VEdG8+fSk6IEFycmF5PE1uZ0VudGl0eVJldmlzaW9uQ2hhbmdlcz4ge1xuICAgICAgICBjb25zdCBlbnRpdHlDaGFuZ2VzOiBNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZXNbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmaWVsZFZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgZWMgPSBuZXcgTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VzKCk7XG4gICAgICAgICAgICBlYy5lbnRpdHlUeXBlID0ga2V5O1xuICAgICAgICAgICAgZWMuaXRlbXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIGZpZWxkVmFsdWVba2V5XSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2UucmV2VHlwZSA9PT0gTW5nUmV2aXNpb25UeXBlRHRvLkFkZCAmJiBjaGFuZ2UuZW50aXR5TmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucmV2VHlwZSA9IGNoYW5nZS5yZXZUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbG9yID0gJ2dyZWVuJztcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlLmVudGl0eU5ld1N0YXRlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IChpdGVtW2tleV0gPSB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICBlYy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJldlR5cGUgPT09IE1uZ1JldmlzaW9uVHlwZUR0by5EZWwgJiYgY2hhbmdlLmVudGl0eU9sZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuZXcgTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnJldlR5cGUgPSBjaGFuZ2UucmV2VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jb2xvciA9ICdyZWQnO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2UuZW50aXR5T2xkU3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gKGl0ZW1ba2V5XSA9IHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIGVjLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UucmV2VHlwZSA9PT0gTW5nUmV2aXNpb25UeXBlRHRvLk1vZCAmJiBjaGFuZ2UuZW50aXR5T2xkU3RhdGUgJiYgY2hhbmdlLmVudGl0eU5ld1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1PbGQgPSBuZXcgTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtT2xkLnJldlR5cGUgPSBjaGFuZ2UucmV2VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbU9sZC5jb2xvciA9ICdyZWQnO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2UuZW50aXR5T2xkU3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gKGl0ZW1PbGRba2V5XSA9IHZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbU5ldyA9IG5ldyBNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1OZXcucmV2VHlwZSA9IGNoYW5nZS5yZXZUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpdGVtTmV3LmNvbG9yID0gJ2dyZWVuJztcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlLmVudGl0eU5ld1N0YXRlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IChpdGVtTmV3W2tleV0gPSB2YWx1ZSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGVjLml0ZW1zLnB1c2goaXRlbU9sZCk7XG4gICAgICAgICAgICAgICAgICAgIGVjLml0ZW1zLnB1c2goaXRlbU5ldyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW50aXR5Q2hhbmdlcy5wdXNoKGVjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50aXR5Q2hhbmdlcztcbiAgICB9XG59XG4iXX0=
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvYXVkaXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFaEQsT0FBTyxFQUFpQixrQkFBa0IsRUFBWSxZQUFZLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQU85RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUVqRSxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDN0UsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFOUUsTUFBTSxPQUFPLFNBQVM7YUFDSCxlQUFVLEdBQUcsc0JBQXNCLENBQUM7SUFFNUMsTUFBTSxDQUFDLG1CQUFtQixDQUM3QixVQUFrQyxFQUNsQyxVQUFpQyxFQUNqQyxZQUFxRCxTQUFTLEVBQzlELFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFFBQVEsR0FBRyxJQUFJO1FBRWYsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtnQkFDaEMsU0FBUzthQUNaO1lBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDakUsOERBQThEO1lBQzlELElBQUksTUFBTSxHQUFvQyxJQUFJLENBQUM7WUFDbkQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLFFBQVEs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cm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7RGF0YUxpc3RQYXJhbXMsIERhdGFMaXN0UGFyYW1zVXRpbCwgRW51bVR5cGUsIFR5cGVSZWdpc3RyeX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7TG9va3VwRGF0YVByb3ZpZGVyfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcbmltcG9ydCB7ZW51bU1vZGVsR2VuZXJpY30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5pbXBvcnQge0NvbHVtbkRlc2NyaXB0b3IsIFRhYmxlRGVzY3JpcHRvckluc3R9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcbmltcG9ydCB7RWRpdG9yRGVzY3JpcHRvckluc3QsIFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge0VudGl0eUNoYW5nZUR0b30gZnJvbSAnLi4vYXBpL21vZGVscy9lbnRpdHlDaGFuZ2UnO1xuaW1wb3J0IHtHdWlFbnRpdHlNb2RlbER0b30gZnJvbSAnLi4vYXBpL21vZGVscy9ndWlFbnRpdHlNb2RlbCc7XG5pbXBvcnQge0d1aVByb3BlcnR5TW9kZWxEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvZ3VpUHJvcGVydHlNb2RlbCc7XG5pbXBvcnQge0d1aVByb3BlcnR5VHlwZUR0b30gZnJvbSAnLi4vYXBpL21vZGVscy9ndWlQcm9wZXJ0eVR5cGUnO1xuaW1wb3J0IHtSZXZFbnRpdHlXaXRoU3RhdGVEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvcmV2RW50aXR5V2l0aFN0YXRlRHRvJztcbmltcG9ydCB7UmV2aXNpb25UeXBlRHRvLCByZXZpc2lvblR5cGVFbnVtfSBmcm9tICcuLi9hcGkvbW9kZWxzL3JldmlzaW9uVHlwZSc7XG5pbXBvcnQge0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGV9IGZyb20gJy4uL21vZGVscy9lbnRpdHktcmV2aXNpb24tY2hhbmdlLXN0YXRlLm1vZGVsJztcbmltcG9ydCB7RW50aXR5UmV2aXNpb25DaGFuZ2VzfSBmcm9tICcuLi9tb2RlbHMvZW50aXR5LXJldmlzaW9uLWNoYW5nZXMubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgQXVkaXRVdGlsIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfZGF0ZVJlZ2V4ID0gL1xcZHs0fS1bMDFdXFxkLVswLTNdXFxkLztcblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkQ29sdW1uc0Zyb21Nb2RlbDxUPihcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxUPixcbiAgICAgICAgcHJvcGVydGllczogR3VpUHJvcGVydHlNb2RlbER0b1tdLFxuICAgICAgICBtb2RlbFR5cGU6ICdyZXZFbnRpdHknIHwgJ2VudGl0eVN0YXRlJyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkRmlsdGVycyA9IHRydWUsXG4gICAgICAgIGFkZFNvcnRzID0gdHJ1ZVxuICAgICk6IFRhYmxlRGVzY3JpcHRvckluc3Q8VD4ge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaXNFbnVtID0gcHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGVEdG8uRW51bTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBsZXQgY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4gfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpc0VudW0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbnVtTW9kZWwgPSBBdWRpdFV0aWwuZmluZEVudW0ocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIGlmIChlbnVtTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5FbnVtKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lIGFzIGtleW9mIFQsIGVudW1Nb2RlbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGRGaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmFkZEZpbHRlckxvb2t1cEVudW0oY29sdW1uLnByb3BlcnR5IGFzIGtleW9mIFQsIGVudW1Nb2RlbCwgcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuYWRkRmlsdGVyTG9va3VwVW5zYWZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29rdXBEYXRhUHJvdmlkZXIuY3JlYXRlPHN0cmluZz4oKS53aXRoTG9va3VwKCgpID0+IHByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcyA/PyBbXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLk51bWJlcikge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc051bWJlcigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZUR0by5Cb29sZWFuKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5VbnNhZmUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLmFzQm9vbGVhbigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZUR0by5Mb2NhbERhdGUpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBkZXNjcmlwdG9yLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkuYXNEYXRlKCdkZC4gTU0geXl5eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZUR0by5PZmZzZXREYXRlVGltZSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0RhdGUoJ2RkLiBNTSB5eXl5IEhIOm1tJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHN0cmluZyAvIHdpbGRjYXJkXG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5VbnNhZmUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLndpdGhUaXRsZShBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtb2RlbFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4ud2l0aEdldHRlcigodmFsdWUsIGl0ZW0pID0+IGl0ZW0/Llttb2RlbFR5cGUgYXMga2V5b2Ygb2JqZWN0XT8uW3Byb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lIGFzIGtleW9mIG9iamVjdF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2x1bW4ud2l0aFRpdGxlKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKTtcblxuICAgICAgICAgICAgaWYgKCFpc0VudW0gJiYgYWRkRmlsdGVycykge1xuICAgICAgICAgICAgICAgIGNvbHVtbj8ud2l0aEZpbHRlclVuc2FmZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFkZFNvcnRzKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uPy53aXRoU29ydFVuc2FmZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eTogR3VpUHJvcGVydHlNb2RlbER0bywgbW9kZWxUeXBlOiAncmV2RW50aXR5JyB8ICdlbnRpdHlTdGF0ZScgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG1vZGVsVHlwZSA9PT0gJ3JldkVudGl0eScpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW5nUmV2RW50aXR5LnByb3BlcnRpZXMuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSA/PyAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZEZpZWxkc0Zyb21Nb2RlbDxUPihcbiAgICAgICAgZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvckluc3Q8VD4sXG4gICAgICAgIHByb3BlcnRpZXM6IEd1aVByb3BlcnR5TW9kZWxEdG9bXSxcbiAgICAgICAgbW9kZWxUeXBlOiAncmV2RW50aXR5JyB8ICdlbnRpdHlTdGF0ZScgPSAncmV2RW50aXR5J1xuICAgICk6IEVkaXRvckRlc2NyaXB0b3JJbnN0PFQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJlcGVuZCA9IGAke21vZGVsVHlwZX0uYDtcblxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLkVudW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnVtTW9kZWwgPSBBdWRpdFV0aWwuZmluZEVudW0ocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIGlmIChlbnVtTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRGaWVsZExvb2t1cEVudW0oKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKSBhcyBrZXlvZiBULCBlbnVtTW9kZWwsIHByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcykud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLk51bWJlcikge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkVW5zYWZlKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAuYXNOdW1iZXIoKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZUR0by5Mb2NhbERhdGUpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgLmFzRGF0ZVBpY2tlcih7Zm9ybWF0OiAnZGQuIE1NTSB5eXl5J30pXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGVEdG8uT2Zmc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgLmFzRGF0ZVBpY2tlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZC4gTU0geXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1RpbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93U2Vjb25kczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmcgLyB3aWxkY2FyZFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkVW5zYWZlKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBidWlsZERlc2NyaXB0b3JGb3JFbnRpdHlSZXZpc2lvbihcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8UmV2RW50aXR5V2l0aFN0YXRlRHRvPixcbiAgICAgICAgcmV2TW9kZWw6IEd1aUVudGl0eU1vZGVsRHRvLFxuICAgICAgICBlbnRpdHlNb2RlbDogR3VpRW50aXR5TW9kZWxEdG9cbiAgICApOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxSZXZFbnRpdHlXaXRoU3RhdGVEdG8+IHtcbiAgICAgICAgZGVzY3JpcHRvci5hZGRDb2x1bW5FbnVtKCdyZXZUeXBlJywgcmV2aXNpb25UeXBlRW51bSkud2l0aFRpdGxlKCdNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlLnByb3BlcnRpZXMucmV2VHlwZScpLndpdGhGaWx0ZXJVbnNhZmUoKTtcbiAgICAgICAgZGVzY3JpcHRvci5hZGRGaWVsZExvb2t1cEVudW0oJ3JldlR5cGUnLCByZXZpc2lvblR5cGVFbnVtKS53aXRoTGFiZWwoJ01uZ0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUucHJvcGVydGllcy5yZXZUeXBlJyk7XG5cbiAgICAgICAgaWYgKHJldk1vZGVsLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIEF1ZGl0VXRpbC5hZGRDb2x1bW5zRnJvbU1vZGVsKGRlc2NyaXB0b3IudGFibGUsIHJldk1vZGVsLnByb3BlcnRpZXMsICdyZXZFbnRpdHknKTtcbiAgICAgICAgICAgIEF1ZGl0VXRpbC5hZGRGaWVsZHNGcm9tTW9kZWwoZGVzY3JpcHRvci5kZXRhaWxzRWRpdG9yLCByZXZNb2RlbC5wcm9wZXJ0aWVzLCAncmV2RW50aXR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGl0eU1vZGVsLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIEF1ZGl0VXRpbC5hZGRDb2x1bW5zRnJvbU1vZGVsKGRlc2NyaXB0b3IudGFibGUsIGVudGl0eU1vZGVsLnByb3BlcnRpZXMsICdlbnRpdHlTdGF0ZScpO1xuICAgICAgICAgICAgQXVkaXRVdGlsLmFkZEZpZWxkc0Zyb21Nb2RlbChkZXNjcmlwdG9yLmRldGFpbHNFZGl0b3IsIGVudGl0eU1vZGVsLnByb3BlcnRpZXMsICdlbnRpdHlTdGF0ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmaW5kRW51bShwcm9wZXJ0eTogR3VpUHJvcGVydHlNb2RlbER0bykge1xuICAgICAgICBpZiAoIXByb3BlcnR5LmVudW1DbGFzc1NpbXBsZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaTE4bjogc3RyaW5nIHwgbnVsbCA9IHByb3BlcnR5LmVudW1DbGFzc1NpbXBsZU5hbWU7XG4gICAgICAgIGxldCBlbnVtVHlwZSA9IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kRW51bShpMThuKTtcbiAgICAgICAgaWYgKCFlbnVtVHlwZSkge1xuICAgICAgICAgICAgaTE4biA9IHByb3BlcnR5LmVudW1DbGFzc1NpbXBsZU5hbWUgKyAnRHRvJztcbiAgICAgICAgICAgIGVudW1UeXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRFbnVtKGkxOG4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZW51bVR5cGUgJiYgQXJyYXkuaXNBcnJheShwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMpKSB7XG4gICAgICAgICAgICBpMThuID0gbnVsbDtcbiAgICAgICAgICAgIGVudW1UeXBlID0gcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzPy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKGFjYywgdikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25zdE5hbWUgPSB2XG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJ18nKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChzID0+IChzLmxlbmd0aCA+IDEgPyBzLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgcy5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKSA6IHMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3ROYW1lICE9PSB2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NbY29uc3ROYW1lXSA9IHY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWNjW3ZdID0gY29uc3ROYW1lO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgPEVudW1UeXBlPnt9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtTW9kZWxHZW5lcmljKGVudW1UeXBlLCBpMThuKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGV4dHJhY3RQcm9wZXJ0eU5hbWUoZnVsbFByb3BlcnR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGZ1bGxQcm9wZXJ0eU5hbWU/LmluY2x1ZGVzKCdlbnRpdHlTdGF0ZS4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bGxQcm9wZXJ0eU5hbWUucmVwbGFjZSgnZW50aXR5U3RhdGUuJywgJycpO1xuICAgICAgICB9IGVsc2UgaWYgKGZ1bGxQcm9wZXJ0eU5hbWU/LmluY2x1ZGVzKCdyZXZFbnRpdHkuJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmdWxsUHJvcGVydHlOYW1lPy5yZXBsYWNlKCdyZXZFbnRpdHkuJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdWxsUHJvcGVydHlOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcGFyYW1zVG9IdHRwUGFyYW1zKHBhcmFtczogRGF0YUxpc3RQYXJhbXMpOiBIdHRwUGFyYW1zIHtcbiAgICAgICAgY29uc3Qgcm91dGVQYXJhbXMgPSBEYXRhTGlzdFBhcmFtc1V0aWwudG9VcmxRdWVyeVBhcmFtcyhwYXJhbXMsIG51bGwpO1xuICAgICAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG5cbiAgICAgICAgT2JqZWN0LmVudHJpZXMocm91dGVQYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1hcEl0ZW1zVG9FbnRpdHlDaGFuZ2VzQXJyYXkoZmllbGRWYWx1ZToge1trZXk6IHN0cmluZ106IEFycmF5PEVudGl0eUNoYW5nZUR0bz59KTogQXJyYXk8RW50aXR5UmV2aXNpb25DaGFuZ2VzPiB7XG4gICAgICAgIGNvbnN0IGVudGl0eUNoYW5nZXM6IEVudGl0eVJldmlzaW9uQ2hhbmdlc1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBlYyA9IG5ldyBFbnRpdHlSZXZpc2lvbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIGVjLmVudGl0eVR5cGUgPSBrZXk7XG4gICAgICAgICAgICBlYy5pdGVtcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgZmllbGRWYWx1ZVtrZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZS5yZXZUeXBlID09PSBSZXZpc2lvblR5cGVEdG8uQWRkICYmIGNoYW5nZS5lbnRpdHlOZXdTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IEVudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5yZXZUeXBlID0gY2hhbmdlLnJldlR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY29sb3IgPSAnZ3JlZW4nO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2UuZW50aXR5TmV3U3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gKGl0ZW1ba2V5XSA9IHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIGVjLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UucmV2VHlwZSA9PT0gUmV2aXNpb25UeXBlRHRvLkRlbCAmJiBjaGFuZ2UuZW50aXR5T2xkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucmV2VHlwZSA9IGNoYW5nZS5yZXZUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbG9yID0gJ3JlZCc7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAoaXRlbVtrZXldID0gdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgZWMuaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZXZUeXBlID09PSBSZXZpc2lvblR5cGVEdG8uTW9kICYmIGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSAmJiBjaGFuZ2UuZW50aXR5TmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbU9sZCA9IG5ldyBFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1PbGQucmV2VHlwZSA9IGNoYW5nZS5yZXZUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpdGVtT2xkLmNvbG9yID0gJ3JlZCc7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAoaXRlbU9sZFtrZXldID0gdmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtTmV3ID0gbmV3IEVudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbU5ldy5yZXZUeXBlID0gY2hhbmdlLnJldlR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1OZXcuY29sb3IgPSAnZ3JlZW4nO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2UuZW50aXR5TmV3U3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gKGl0ZW1OZXdba2V5XSA9IHZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZWMuaXRlbXMucHVzaChpdGVtT2xkKTtcbiAgICAgICAgICAgICAgICAgICAgZWMuaXRlbXMucHVzaChpdGVtTmV3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRpdHlDaGFuZ2VzLnB1c2goZWMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRpdHlDaGFuZ2VzO1xuICAgIH1cbn1cbiJdfQ==
|