sonamu 0.9.19 → 0.10.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/dist/_virtual/_rolldown/runtime.js +36 -0
- package/dist/ai/agents/agent.js +5 -7
- package/dist/ai/agents/index.js +1 -2
- package/dist/ai/agents/types.js +1 -1
- package/dist/ai/index.js +1 -2
- package/dist/ai/providers/rtzr/api.js +2 -3
- package/dist/ai/providers/rtzr/error.js +14 -29
- package/dist/ai/providers/rtzr/index.js +1 -2
- package/dist/ai/providers/rtzr/model.js +13 -20
- package/dist/ai/providers/rtzr/options.js +2 -3
- package/dist/ai/providers/rtzr/provider.js +2 -3
- package/dist/ai/providers/rtzr/utils.js +12 -21
- package/dist/api/base-frame.js +4 -4
- package/dist/api/caster.js +21 -38
- package/dist/api/code-converters.js +41 -98
- package/dist/api/config.d.ts +1 -10
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +9 -8
- package/dist/api/context.js +2 -3
- package/dist/api/decorators.js +80 -116
- package/dist/api/index.js +2 -3
- package/dist/api/secret.js +6 -10
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +200 -387
- package/dist/api/validator.js +5 -8
- package/dist/api/websocket-helpers.js +21 -32
- package/dist/auth/audit-log/builders.js +2 -3
- package/dist/auth/audit-log/events.js +2 -2
- package/dist/auth/audit-log/plugin.js +30 -61
- package/dist/auth/audit-log-ingestor.js +19 -41
- package/dist/auth/auth-generator.js +16 -41
- package/dist/auth/better-auth-entities.js +3 -4
- package/dist/auth/index.js +2 -3
- package/dist/auth/knex-adapter.js +18 -45
- package/dist/auth/plugins/entity-definitions/admin.js +2 -2
- package/dist/auth/plugins/entity-definitions/anonymous.js +2 -2
- package/dist/auth/plugins/entity-definitions/api-key.js +2 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +2 -2
- package/dist/auth/plugins/entity-definitions/index.js +2 -3
- package/dist/auth/plugins/entity-definitions/jwt.js +2 -2
- package/dist/auth/plugins/entity-definitions/organization.js +2 -2
- package/dist/auth/plugins/entity-definitions/passkey.js +2 -2
- package/dist/auth/plugins/entity-definitions/phone-number.js +2 -2
- package/dist/auth/plugins/entity-definitions/sso.js +2 -2
- package/dist/auth/plugins/entity-definitions/two-factor.js +2 -2
- package/dist/auth/plugins/entity-definitions/types.js +1 -1
- package/dist/auth/plugins/entity-definitions/username.js +2 -2
- package/dist/auth/plugins/index.js +1 -2
- package/dist/auth/plugins/wrappers/admin.js +2 -3
- package/dist/auth/plugins/wrappers/anonymous.js +2 -3
- package/dist/auth/plugins/wrappers/api-key.js +2 -3
- package/dist/auth/plugins/wrappers/index.js +1 -2
- package/dist/auth/plugins/wrappers/jwt.js +2 -3
- package/dist/auth/plugins/wrappers/organization.js +2 -3
- package/dist/auth/plugins/wrappers/passkey.js +2 -3
- package/dist/auth/plugins/wrappers/phone-number.js +2 -3
- package/dist/auth/plugins/wrappers/sso.js +2 -3
- package/dist/auth/plugins/wrappers/two-factor.js +2 -3
- package/dist/auth/plugins/wrappers/username.js +2 -3
- package/dist/bin/build-config.js +2 -2
- package/dist/bin/cli.js +151 -258
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +55 -97
- package/dist/bin/hmr-hook-register.js +3 -3
- package/dist/bin/migrate-targets.d.ts +3 -0
- package/dist/bin/migrate-targets.d.ts.map +1 -0
- package/dist/bin/migrate-targets.js +11 -0
- package/dist/bin/test-command.js +25 -55
- package/dist/bin/ts-loader-register.js +5 -6
- package/dist/bin/ts-loader-registration.js +6 -13
- package/dist/cache/cache-manager.js +3 -4
- package/dist/cache/decorator.js +11 -21
- package/dist/cache/drivers.js +2 -3
- package/dist/cache/index.js +2 -3
- package/dist/cache/types.js +1 -1
- package/dist/cache-control/cache-control.js +21 -34
- package/dist/cache-control/types.js +1 -1
- package/dist/compress/compress.js +10 -10
- package/dist/compress/index.js +1 -2
- package/dist/compress/types.js +1 -1
- package/dist/cone/cone-generator.js +25 -63
- package/dist/database/_batch_update.js +26 -46
- package/dist/database/base-model.js +44 -97
- package/dist/database/base-model.types.js +1 -1
- package/dist/database/db.d.ts +8 -14
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +127 -72
- package/dist/database/knex.js +5 -8
- package/dist/database/puri-subset.types.js +1 -1
- package/dist/database/puri-wrapper.js +11 -15
- package/dist/database/puri.js +117 -234
- package/dist/database/puri.types.js +3 -4
- package/dist/database/transaction-context.js +4 -5
- package/dist/database/upsert-builder.js +109 -176
- package/dist/dict/en.d.ts +1 -0
- package/dist/dict/en.d.ts.map +1 -1
- package/dist/dict/en.js +4 -4
- package/dist/dict/index.js +2 -3
- package/dist/dict/ko.d.ts +1 -0
- package/dist/dict/ko.d.ts.map +1 -1
- package/dist/dict/ko.js +4 -4
- package/dist/dict/rc-keys.js +3 -4
- package/dist/dict/sd.js +8 -19
- package/dist/dict/sonamu-dictionary.js +141 -284
- package/dist/dict/types.js +1 -1
- package/dist/dict/utils.js +4 -5
- package/dist/entity/entity-manager.d.ts +2 -2
- package/dist/entity/entity-manager.js +34 -82
- package/dist/entity/entity-template-cone.js +33 -66
- package/dist/entity/entity.js +156 -310
- package/dist/env.d.ts +14 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +75 -0
- package/dist/exceptions/error-handler.js +2 -3
- package/dist/exceptions/so-exceptions.js +7 -5
- package/dist/filter/index.js +1 -2
- package/dist/filter/types.js +3 -4
- package/dist/filter/utils.js +21 -54
- package/dist/index.js +8 -7
- package/dist/logger/category.js +6 -12
- package/dist/logger/configure.js +23 -34
- package/dist/migration/code-generation.js +146 -314
- package/dist/migration/index-where-predicate.js +52 -144
- package/dist/migration/migration-set.js +19 -33
- package/dist/migration/migrator.d.ts +2 -0
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +69 -53
- package/dist/migration/postgresql-schema-reader.js +126 -225
- package/dist/migration/slack-confirm.d.ts +1 -0
- package/dist/migration/slack-confirm.d.ts.map +1 -1
- package/dist/migration/slack-confirm.js +28 -38
- package/dist/migration/types.js +1 -1
- package/dist/naite/messaging-types.js +1 -1
- package/dist/naite/naite-reporter.js +15 -32
- package/dist/naite/naite.js +43 -76
- package/dist/ssr/index.js +6 -9
- package/dist/ssr/registry.js +10 -18
- package/dist/ssr/renderer.js +10 -21
- package/dist/ssr/types.js +1 -1
- package/dist/storage/base-file.js +5 -10
- package/dist/storage/buffered-file.js +3 -4
- package/dist/storage/drivers.js +2 -3
- package/dist/storage/index.js +2 -3
- package/dist/storage/s3-driver.js +5 -9
- package/dist/storage/storage-manager.js +5 -5
- package/dist/storage/types.js +1 -1
- package/dist/storage/uploaded-file.js +4 -6
- package/dist/stream/index.js +1 -2
- package/dist/stream/sse.js +8 -13
- package/dist/stream/ws-audience-resolver.js +5 -5
- package/dist/stream/ws-audience.js +3 -4
- package/dist/stream/ws-cluster-bus.js +3 -4
- package/dist/stream/ws-core.js +1 -1
- package/dist/stream/ws-delivery.js +11 -25
- package/dist/stream/ws-local-connection-store.js +9 -18
- package/dist/stream/ws-presence-store.js +43 -97
- package/dist/stream/ws-registry.js +17 -22
- package/dist/stream/ws-telemetry-memory.js +38 -45
- package/dist/stream/ws-telemetry-trace.js +4 -6
- package/dist/stream/ws-telemetry.js +82 -135
- package/dist/stream/ws.js +47 -91
- package/dist/syncer/api-parser.js +81 -147
- package/dist/syncer/checksum.js +9 -20
- package/dist/syncer/code-generator.js +29 -47
- package/dist/syncer/entity-operations.js +17 -27
- package/dist/syncer/event-batcher.js +8 -15
- package/dist/syncer/file-patterns.js +3 -4
- package/dist/syncer/file-tracking.js +6 -10
- package/dist/syncer/index.js +1 -2
- package/dist/syncer/module-loader.js +10 -26
- package/dist/syncer/syncer-actions.js +19 -37
- package/dist/syncer/syncer.js +46 -98
- package/dist/syncer/watcher.js +12 -26
- package/dist/tasks/decorator.js +7 -11
- package/dist/tasks/step-wrapper.js +7 -8
- package/dist/tasks/workflow-manager.js +18 -25
- package/dist/template/entity-converter.js +40 -64
- package/dist/template/helpers.js +32 -63
- package/dist/template/implementations/entity.template.js +7 -11
- package/dist/template/implementations/entry-server.template.js +2 -3
- package/dist/template/implementations/generated.template.js +25 -51
- package/dist/template/implementations/generated_http.template.js +31 -58
- package/dist/template/implementations/generated_sso.template.js +45 -85
- package/dist/template/implementations/init_types.template.js +4 -7
- package/dist/template/implementations/model.template.js +5 -10
- package/dist/template/implementations/model_test.template.js +2 -3
- package/dist/template/implementations/queries.template.js +4 -7
- package/dist/template/implementations/sd.template.js +17 -35
- package/dist/template/implementations/services.template.js +18 -30
- package/dist/template/implementations/view_form.template.js +72 -125
- package/dist/template/implementations/view_id_all_select.template.js +2 -3
- package/dist/template/implementations/view_list.template.js +86 -143
- package/dist/template/implementations/view_search_input.template.js +2 -3
- package/dist/template/index.js +5 -8
- package/dist/template/template-manager.js +13 -26
- package/dist/template/template-types.js +2 -3
- package/dist/template/template.js +7 -11
- package/dist/template/zod-converter.js +173 -348
- package/dist/testing/_relation-graph.js +18 -37
- package/dist/testing/bootstrap.js +5 -8
- package/dist/testing/data-explorer.js +34 -78
- package/dist/testing/dev-test-routes.js +54 -60
- package/dist/testing/dev-vitest-manager.js +33 -84
- package/dist/testing/faker-mappings.js +3 -4
- package/dist/testing/fixture-generator.d.ts +2 -1
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +159 -321
- package/dist/testing/fixture-loader.js +2 -2
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +124 -227
- package/dist/testing/global-setup.d.ts.map +1 -1
- package/dist/testing/global-setup.js +29 -17
- package/dist/testing/index.js +1 -2
- package/dist/testing/naite-vitest-reporter.js +2 -3
- package/dist/testing/parallel-db-manager.js +5 -3
- package/dist/testing/vitest-helpers.d.ts.map +1 -1
- package/dist/testing/vitest-helpers.js +15 -12
- package/dist/types/types.d.ts +14 -14
- package/dist/types/types.js +27 -50
- package/dist/ui/ai-api.js +6 -11
- package/dist/ui/ai-client.js +86 -134
- package/dist/ui/api.js +99 -195
- package/dist/ui/cdd-service.js +78 -130
- package/dist/ui/cdd-types.js +1 -1
- package/dist/ui-web/assets/{index-Df8q-fhb.js → index-DFStGyd0.js} +49 -49
- package/dist/ui-web/assets/index-Dx4ap5i4.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/async-utils.js +13 -25
- package/dist/utils/class-name.js +3 -4
- package/dist/utils/console-util.js +11 -26
- package/dist/utils/controller.d.ts.map +1 -1
- package/dist/utils/controller.js +14 -12
- package/dist/utils/esm-utils.js +5 -8
- package/dist/utils/formatter.js +10 -22
- package/dist/utils/fs-utils.js +14 -25
- package/dist/utils/lodash-able.js +3 -4
- package/dist/utils/model.js +7 -14
- package/dist/utils/object-utils.js +41 -73
- package/dist/utils/path-utils.js +5 -9
- package/dist/utils/process-utils.js +4 -7
- package/dist/utils/sql-parser.js +6 -13
- package/dist/utils/type-utils.js +16 -26
- package/dist/utils/utils.js +18 -40
- package/dist/utils/zod-error.js +9 -16
- package/dist/vector/chunking.js +24 -37
- package/dist/vector/config.js +2 -2
- package/dist/vector/embedding.js +8 -19
- package/dist/vector/index.js +1 -2
- package/dist/vector/types.js +1 -1
- package/package.json +7 -7
- package/src/__tests__/env.test.ts +127 -0
- package/src/api/__tests__/config.test.ts +10 -1
- package/src/api/config.ts +4 -12
- package/src/api/sonamu.ts +14 -4
- package/src/bin/__tests__/migrate-targets.test.ts +28 -0
- package/src/bin/__tests__/test-command.test.ts +82 -1
- package/src/bin/cli.ts +9 -18
- package/src/bin/fixture.ts +5 -4
- package/src/bin/migrate-targets.ts +7 -0
- package/src/bin/test-command.ts +2 -2
- package/src/database/__tests__/db.test.ts +175 -0
- package/src/database/db.ts +193 -71
- package/src/dict/en.ts +2 -0
- package/src/dict/ko.ts +2 -0
- package/src/env.ts +123 -0
- package/src/migration/__tests__/migrator.test.ts +149 -0
- package/src/migration/migrator.ts +74 -17
- package/src/migration/slack-confirm.ts +21 -0
- package/src/skills/sonamu/database.md +1 -1
- package/src/skills/sonamu/entity-basic.md +31 -0
- package/src/skills/sonamu/puri.md +22 -0
- package/src/skills/sonamu/testing-devrunner.md +1 -1
- package/src/skills/sonamu/upsert.md +53 -6
- package/src/stream/ws-telemetry-memory.ts +2 -2
- package/src/testing/fixture-generator.ts +2 -1
- package/src/testing/fixture-manager.ts +3 -4
- package/src/testing/global-setup.ts +42 -18
- package/src/testing/vitest-helpers.ts +14 -0
- package/src/utils/controller.ts +14 -7
- package/tsdown.api.config.ts +6 -0
- package/dist/_virtual/rolldown_runtime.js +0 -39
- package/dist/ui-web/assets/index-D4rYm-Xz.css +0 -1
package/dist/template/helpers.js
CHANGED
|
@@ -1,23 +1,18 @@
|
|
|
1
|
-
import { __esmMin } from "../_virtual/
|
|
1
|
+
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { init_types, isEnumProp, isRelationProp } from "../types/types.js";
|
|
3
3
|
import { EntityManager, init_entity_manager } from "../entity/entity-manager.js";
|
|
4
4
|
import inflection from "inflection";
|
|
5
|
-
|
|
6
5
|
//#region src/template/helpers.ts
|
|
7
6
|
/**
|
|
8
7
|
* Enum의 표시용 라벨을 가져옵니다.
|
|
9
8
|
* OrderBy, SearchField 등 특수한 경우와 일반 Enum을 구분하여 처리합니다.
|
|
10
9
|
*/
|
|
11
10
|
function getLabel(entityId, enumId) {
|
|
12
|
-
if (enumId.endsWith("OrderBy"))
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return "검색";
|
|
16
|
-
} else {
|
|
11
|
+
if (enumId.endsWith("OrderBy")) return "정렬";
|
|
12
|
+
else if (enumId.endsWith("SearchField")) return "검색";
|
|
13
|
+
else {
|
|
17
14
|
const enumProp = EntityManager.get(entityId).props.find((prop) => `${entityId}${inflection.camelize(prop.name)}` === enumId);
|
|
18
|
-
if (enumProp?.desc)
|
|
19
|
-
return enumProp.desc;
|
|
20
|
-
}
|
|
15
|
+
if (enumProp?.desc) return enumProp.desc;
|
|
21
16
|
return enumId;
|
|
22
17
|
}
|
|
23
18
|
}
|
|
@@ -26,22 +21,19 @@ function getLabel(entityId, enumId) {
|
|
|
26
21
|
* Entity의 prop 중 enum 타입인 것을 찾아 관련 정보를 반환합니다.
|
|
27
22
|
*/
|
|
28
23
|
function getEnumInfoFromColName(entityId, colName) {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
};
|
|
38
|
-
} else {
|
|
24
|
+
const prop = EntityManager.get(entityId).props.find((p) => p.name === colName);
|
|
25
|
+
if (prop && isEnumProp(prop)) return {
|
|
26
|
+
id: prop.id,
|
|
27
|
+
targetEntityId: entityId,
|
|
28
|
+
targetEntityNames: EntityManager.getNamesFromId(entityId),
|
|
29
|
+
title: prop.desc ?? prop.id
|
|
30
|
+
};
|
|
31
|
+
else {
|
|
39
32
|
const idCandidate = inflection.camelize(`${inflection.underscore(entityId)}_${inflection.underscore(colName)}`, false);
|
|
40
|
-
const targetEntityNames = EntityManager.getNamesFromId(entityId);
|
|
41
33
|
return {
|
|
42
34
|
id: idCandidate,
|
|
43
35
|
targetEntityId: entityId,
|
|
44
|
-
targetEntityNames,
|
|
36
|
+
targetEntityNames: EntityManager.getNamesFromId(entityId),
|
|
45
37
|
title: idCandidate
|
|
46
38
|
};
|
|
47
39
|
}
|
|
@@ -51,17 +43,11 @@ function getEnumInfoFromColName(entityId, colName) {
|
|
|
51
43
|
* 관계형 prop이 아닌 경우 에러를 발생시킵니다.
|
|
52
44
|
*/
|
|
53
45
|
function getRelationPropFromColName(entityId, colName) {
|
|
54
|
-
const
|
|
55
|
-
const relProp = baseEntity.props.find((prop) => prop.name === colName);
|
|
46
|
+
const relProp = EntityManager.get(entityId).props.find((prop) => prop.name === colName);
|
|
56
47
|
if (isRelationProp(relProp)) {
|
|
57
|
-
|
|
58
|
-
if (relEntity.parentId !== undefined) {
|
|
59
|
-
throw new Error("Only parent entities can be used as relation props");
|
|
60
|
-
}
|
|
48
|
+
if (EntityManager.get(relProp.with).parentId !== void 0) throw new Error("Only parent entities can be used as relation props");
|
|
61
49
|
return relProp;
|
|
62
|
-
} else {
|
|
63
|
-
throw new Error(`찾을 수 없는 Relation ${colName}`);
|
|
64
|
-
}
|
|
50
|
+
} else throw new Error(`찾을 수 없는 Relation ${colName}`);
|
|
65
51
|
}
|
|
66
52
|
/**
|
|
67
53
|
* FK 컬럼명에서 실제 relation 이름을 추출합니다.
|
|
@@ -76,13 +62,10 @@ function getRelationNameFromColumnName(entityId, colName) {
|
|
|
76
62
|
if (colName.endsWith("_ids")) {
|
|
77
63
|
const baseName = colName.replace(/_ids$/, "");
|
|
78
64
|
try {
|
|
79
|
-
|
|
80
|
-
return relProp.name;
|
|
65
|
+
return getRelationPropFromColName(entityId, baseName).name;
|
|
81
66
|
} catch {
|
|
82
67
|
try {
|
|
83
|
-
|
|
84
|
-
const relProp = getRelationPropFromColName(entityId, pluralName);
|
|
85
|
-
return relProp.name;
|
|
68
|
+
return getRelationPropFromColName(entityId, inflection.pluralize(baseName)).name;
|
|
86
69
|
} catch {
|
|
87
70
|
return colName;
|
|
88
71
|
}
|
|
@@ -91,13 +74,10 @@ function getRelationNameFromColumnName(entityId, colName) {
|
|
|
91
74
|
if (colName.endsWith("_id") && colName !== "id") {
|
|
92
75
|
const baseName = colName.replace(/_id$/, "");
|
|
93
76
|
try {
|
|
94
|
-
|
|
95
|
-
return relProp.name;
|
|
77
|
+
return getRelationPropFromColName(entityId, baseName).name;
|
|
96
78
|
} catch {
|
|
97
79
|
try {
|
|
98
|
-
|
|
99
|
-
const relProp = getRelationPropFromColName(entityId, singularName);
|
|
100
|
-
return relProp.name;
|
|
80
|
+
return getRelationPropFromColName(entityId, inflection.singularize(baseName)).name;
|
|
101
81
|
} catch {
|
|
102
82
|
return colName;
|
|
103
83
|
}
|
|
@@ -110,11 +90,8 @@ function getRelationNameFromColumnName(entityId, colName) {
|
|
|
110
90
|
* 중괄호 카운팅 방식으로 중첩된 객체도 정확히 파싱합니다.
|
|
111
91
|
*/
|
|
112
92
|
function extractObjectDeclaration(sourceCode, varName) {
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
if (!match) {
|
|
116
|
-
return "";
|
|
117
|
-
}
|
|
93
|
+
const match = new RegExp(`export const ${varName}\\s*=\\s*\\{`).exec(sourceCode);
|
|
94
|
+
if (!match) return "";
|
|
118
95
|
const startIdx = match.index;
|
|
119
96
|
const openBraceIdx = sourceCode.indexOf("{", startIdx);
|
|
120
97
|
let braceCount = 0;
|
|
@@ -124,10 +101,7 @@ function extractObjectDeclaration(sourceCode, varName) {
|
|
|
124
101
|
let endIdx = openBraceIdx;
|
|
125
102
|
for (let i = openBraceIdx; i < sourceCode.length; i++) {
|
|
126
103
|
const char = sourceCode[i];
|
|
127
|
-
|
|
128
|
-
if (prevChar === "\\" && (inString || inTemplate)) {
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
104
|
+
if ((i > 0 ? sourceCode[i - 1] : "") === "\\" && (inString || inTemplate)) continue;
|
|
131
105
|
if ((char === "\"" || char === "'") && !inTemplate) {
|
|
132
106
|
if (!inString) {
|
|
133
107
|
inString = true;
|
|
@@ -142,12 +116,9 @@ function extractObjectDeclaration(sourceCode, varName) {
|
|
|
142
116
|
inTemplate = !inTemplate;
|
|
143
117
|
continue;
|
|
144
118
|
}
|
|
145
|
-
if (inString || inTemplate)
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
if (char === "{") {
|
|
149
|
-
braceCount++;
|
|
150
|
-
} else if (char === "}") {
|
|
119
|
+
if (inString || inTemplate) continue;
|
|
120
|
+
if (char === "{") braceCount++;
|
|
121
|
+
else if (char === "}") {
|
|
151
122
|
braceCount--;
|
|
152
123
|
if (braceCount === 0) {
|
|
153
124
|
endIdx = i;
|
|
@@ -156,11 +127,9 @@ function extractObjectDeclaration(sourceCode, varName) {
|
|
|
156
127
|
}
|
|
157
128
|
}
|
|
158
129
|
let finalEndIdx = endIdx;
|
|
159
|
-
for (let i = endIdx + 1; i < sourceCode.length; i++) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
break;
|
|
163
|
-
}
|
|
130
|
+
for (let i = endIdx + 1; i < sourceCode.length; i++) if (sourceCode[i] === ";") {
|
|
131
|
+
finalEndIdx = i;
|
|
132
|
+
break;
|
|
164
133
|
}
|
|
165
134
|
return sourceCode.substring(startIdx, finalEndIdx + 1);
|
|
166
135
|
}
|
|
@@ -168,8 +137,8 @@ var init_helpers = __esmMin((() => {
|
|
|
168
137
|
init_entity_manager();
|
|
169
138
|
init_types();
|
|
170
139
|
}));
|
|
171
|
-
|
|
172
140
|
//#endregion
|
|
173
141
|
init_helpers();
|
|
174
142
|
export { extractObjectDeclaration, getEnumInfoFromColName, getLabel, getRelationNameFromColumnName, getRelationPropFromColName, init_helpers };
|
|
175
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW51bVByb3AsIGlzUmVsYXRpb25Qcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFJlbGF0aW9uUHJvcCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vKipcbiAqIEVudW3snZgg7ZGc7Iuc7JqpIOudvOuyqOydhCDqsIDsoLjsmLXri4jri6QuXG4gKiBPcmRlckJ5LCBTZWFyY2hGaWVsZCDrk7Eg7Yq57IiY7ZWcIOqyveyasOyZgCDsnbzrsJggRW51beydhCDqtazrtoTtlZjsl6wg7LKY66as7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFiZWwoZW50aXR5SWQ6IHN0cmluZywgZW51bUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoZW51bUlkLmVuZHNXaXRoKFwiT3JkZXJCeVwiKSkge1xuICAgIHJldHVybiBcIuygleugrFwiO1xuICB9IGVsc2UgaWYgKGVudW1JZC5lbmRzV2l0aChcIlNlYXJjaEZpZWxkXCIpKSB7XG4gICAgcmV0dXJuIFwi6rKA7IOJXCI7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZW51bVByb3AgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMuZmluZChcbiAgICAgIChwcm9wKSA9PiBgJHtlbnRpdHlJZH0ke2luZmxlY3Rpb24uY2FtZWxpemUocHJvcC5uYW1lKX1gID09PSBlbnVtSWQsXG4gICAgKTtcbiAgICBpZiAoZW51bVByb3A/LmRlc2MpIHtcbiAgICAgIHJldHVybiBlbnVtUHJvcC5kZXNjO1xuICAgIH1cbiAgICByZXR1cm4gZW51bUlkO1xuICB9XG59XG5cbi8qKlxuICog7Lus65+8IOydtOumhOycvOuhnOu2gO2EsCBFbnVtIOygleuztOulvCDstpTstpztlanri4jri6QuXG4gKiBFbnRpdHnsnZggcHJvcCDspJEgZW51bSDtg4DsnoXsnbgg6rKD7J2EIOywvuyVhCDqtIDroKgg7KCV67O066W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1JbmZvRnJvbUNvbE5hbWUoXG4gIGVudGl0eUlkOiBzdHJpbmcsXG4gIGNvbE5hbWU6IHN0cmluZyxcbik6IHtcbiAgaWQ6IHN0cmluZztcbiAgdGFyZ2V0RW50aXR5TmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkO1xuICB0YXJnZXRFbnRpdHlJZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGJhc2VFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGNvbnN0IHByb3AgPSBiYXNlRW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gY29sTmFtZSk7XG4gIGlmIChwcm9wICYmIGlzRW51bVByb3AocHJvcCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHByb3AuaWQsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCksXG4gICAgICB0aXRsZTogcHJvcC5kZXNjID8/IHByb3AuaWQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpZENhbmRpZGF0ZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpfV8ke2luZmxlY3Rpb24udW5kZXJzY29yZShjb2xOYW1lKX1gLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaWRDYW5kaWRhdGUsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0RW50aXR5TmFtZXMsXG4gICAgICB0aXRsZTogaWRDYW5kaWRhdGUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIOy7rOufvCDsnbTrpoTsnLzroZzrtoDthLAgUmVsYXRpb24gcHJvcCDsoJXrs7Trpbwg6rCA7KC47Ji164uI64ukLlxuICog6rSA6rOE7ZiVIHByb3DsnbQg7JWE64uMIOqyveyasCDsl5Drn6zrpbwg67Cc7IOd7Iuc7YK164uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogUmVsYXRpb25Qcm9wIHtcbiAgY29uc3QgYmFzZUVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3QgcmVsUHJvcCA9IGJhc2VFbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2xOYW1lKTtcbiAgaWYgKGlzUmVsYXRpb25Qcm9wKHJlbFByb3ApKSB7XG4gICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocmVsUHJvcC53aXRoKTtcbiAgICBpZiAocmVsRW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgcGFyZW50IGVudGl0aWVzIGNhbiBiZSB1c2VkIGFzIHJlbGF0aW9uIHByb3BzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVsUHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOywvuydhCDsiJgg7JeG64qUIFJlbGF0aW9uICR7Y29sTmFtZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEZLIOy7rOufvOuqheyXkOyEnCDsi6TsoJwgcmVsYXRpb24g7J2066aE7J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIEJlbG9uZ3NUb09uZS9PbmVUb09uZSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgRksg7Lus65+866qFKHVzZXJfaWQp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg7ZWE7JqU7ZWY6rOgLFxuICogTWFueVRvTWFueSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgcmVsYXRpb27rqoUoZW1wbG95ZWUp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg67aI7ZWE7JqU7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShcIkVtcGxveWVlXCIsIFwidXNlcl9pZFwiKSAvLyBcInVzZXJcIlxuICogZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoXCJQcm9qZWN0XCIsIFwidGFnX2lkc1wiKSAvLyBcInRhZ3NcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gX2lkcyAo67O17IiYKSDsspjrpqxcbiAgaWYgKGNvbE5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBjb2xOYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgLy8g66i87KCAIGJhc2UgbmFtZeycvOuhnCDssL7quLBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICByZXR1cm4gcmVsUHJvcC5uYW1lO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gcGx1cmFsaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGx1cmFsTmFtZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKGJhc2VOYW1lKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBwbHVyYWxOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gX2lkICjri6jsiJgpIOyymOumrFxuICBpZiAoY29sTmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJiBjb2xOYW1lICE9PSBcImlkXCIpIHtcbiAgICBjb25zdCBiYXNlTmFtZSA9IGNvbE5hbWUucmVwbGFjZSgvX2lkJC8sIFwiXCIpO1xuICAgIC8vIOuovOyggCBiYXNlIG5hbWXsnLzroZwg7LC+6riwXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNpbmd1bGFyaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXJOYW1lID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShiYXNlTmFtZSk7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgc2luZ3VsYXJOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbE5hbWU7XG59XG5cbi8qKlxuICog7IaM7IqkIOy9lOuTnOyXkOyEnCDqsJ3ssrQg7ISg7Ja47J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIOykkeq0hO2YuCDsubTsmrTtjIUg67Cp7Iud7Jy866GcIOykkeyyqeuQnCDqsJ3ssrTrj4Qg7KCV7ZmV7Z6IIO2MjOyLse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlOiBzdHJpbmcsIHZhck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFwiZXhwb3J0IGNvbnN0IHZhck5hbWUgPSB7XCIg7Yyo7YS0IOywvuq4sFxuICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgZXhwb3J0IGNvbnN0ICR7dmFyTmFtZX1cXFxccyo9XFxcXHMqXFxcXHtgKTtcbiAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc291cmNlQ29kZSk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8g7Iuc7J6RIOychOy5mFxuICBjb25zdCBzdGFydElkeCA9IG1hdGNoLmluZGV4O1xuICBjb25zdCBvcGVuQnJhY2VJZHggPSBzb3VyY2VDb2RlLmluZGV4T2YoXCJ7XCIsIHN0YXJ0SWR4KTtcblxuICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gIGxldCBicmFjZUNvdW50ID0gMDtcbiAgbGV0IGluU3RyaW5nID0gZmFsc2U7XG4gIGxldCBpblRlbXBsYXRlID0gZmFsc2U7XG4gIGxldCBzdHJpbmdDaGFyID0gXCJcIjtcbiAgbGV0IGVuZElkeCA9IG9wZW5CcmFjZUlkeDtcblxuICBmb3IgKGxldCBpID0gb3BlbkJyYWNlSWR4OyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VDb2RlW2ldO1xuICAgIGNvbnN0IHByZXZDaGFyID0gaSA+IDAgPyBzb3VyY2VDb2RlW2kgLSAxXSA6IFwiXCI7XG5cbiAgICAvLyDsnbTsiqTsvIDsnbTtlITrkJwg66y47J6Q64qUIOustOyLnFxuICAgIGlmIChwcmV2Q2hhciA9PT0gXCJcXFxcXCIgJiYgKGluU3RyaW5nIHx8IGluVGVtcGxhdGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDrrLjsnpDsl7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmICgoY2hhciA9PT0gJ1wiJyB8fCBjaGFyID09PSBcIidcIikgJiYgIWluVGVtcGxhdGUpIHtcbiAgICAgIGlmICghaW5TdHJpbmcpIHtcbiAgICAgICAgaW5TdHJpbmcgPSB0cnVlO1xuICAgICAgICBzdHJpbmdDaGFyID0gY2hhcjtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gc3RyaW5nQ2hhcikge1xuICAgICAgICBpblN0cmluZyA9IGZhbHNlO1xuICAgICAgICBzdHJpbmdDaGFyID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIO2FnO2UjOumvyDrpqzthLDrn7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmIChjaGFyID09PSBcImBcIiAmJiAhaW5TdHJpbmcpIHtcbiAgICAgIGluVGVtcGxhdGUgPSAhaW5UZW1wbGF0ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOusuOyekOyXtC/thZztlIzrpr8g64K067aA64qUIOykkeq0hO2YuCDsubTsmrTtjIUg7JWIIO2VqFxuICAgIGlmIChpblN0cmluZyB8fCBpblRlbXBsYXRlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gICAgaWYgKGNoYXIgPT09IFwie1wiKSB7XG4gICAgICBicmFjZUNvdW50Kys7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSBcIn1cIikge1xuICAgICAgYnJhY2VDb3VudC0tO1xuICAgICAgaWYgKGJyYWNlQ291bnQgPT09IDApIHtcbiAgICAgICAgZW5kSWR4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g7ISg7Ja466y4IOuBneq5jOyngCDssL7quLAgKH07KVxuICBsZXQgZmluYWxFbmRJZHggPSBlbmRJZHg7XG4gIGZvciAobGV0IGkgPSBlbmRJZHggKyAxOyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzb3VyY2VDb2RlW2ldID09PSBcIjtcIikge1xuICAgICAgZmluYWxFbmRJZHggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvdXJjZUNvZGUuc3Vic3RyaW5nKHN0YXJ0SWR4LCBmaW5hbEVuZElkeCArIDEpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBV0EsU0FBZ0IsU0FBUyxVQUFrQixRQUF3QjtBQUNqRSxLQUFJLE9BQU8sU0FBUyxVQUFVLEVBQUU7QUFDOUIsU0FBTztZQUNFLE9BQU8sU0FBUyxjQUFjLEVBQUU7QUFDekMsU0FBTztRQUNGO0VBQ0wsTUFBTSxXQUFXLGNBQWMsSUFBSSxTQUFTLENBQUMsTUFBTSxNQUNoRCxTQUFTLEdBQUcsV0FBVyxXQUFXLFNBQVMsS0FBSyxLQUFLLE9BQU8sT0FDOUQ7QUFDRCxNQUFJLFVBQVUsTUFBTTtBQUNsQixVQUFPLFNBQVM7O0FBRWxCLFNBQU87Ozs7Ozs7QUFRWCxTQUFnQix1QkFDZCxVQUNBLFNBTUE7Q0FDQSxNQUFNLGFBQWEsY0FBYyxJQUFJLFNBQVM7Q0FDOUMsTUFBTSxPQUFPLFdBQVcsTUFBTSxNQUFNLE1BQU0sRUFBRSxTQUFTLFFBQVE7QUFDN0QsS0FBSSxRQUFRLFdBQVcsS0FBSyxFQUFFO0FBQzVCLFNBQU87R0FDTCxJQUFJLEtBQUs7R0FDVCxnQkFBZ0I7R0FDaEIsbUJBQW1CLGNBQWMsZUFBZSxTQUFTO0dBQ3pELE9BQU8sS0FBSyxRQUFRLEtBQUs7R0FDMUI7UUFDSTtFQUNMLE1BQU0sY0FBYyxXQUFXLFNBQzdCLEdBQUcsV0FBVyxXQUFXLFNBQVMsQ0FBQyxHQUFHLFdBQVcsV0FBVyxRQUFRLElBQ3BFLE1BQ0Q7RUFDRCxNQUFNLG9C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
|
|
143
|
+
|
|
144
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW51bVByb3AsIGlzUmVsYXRpb25Qcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFJlbGF0aW9uUHJvcCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vKipcbiAqIEVudW3snZgg7ZGc7Iuc7JqpIOudvOuyqOydhCDqsIDsoLjsmLXri4jri6QuXG4gKiBPcmRlckJ5LCBTZWFyY2hGaWVsZCDrk7Eg7Yq57IiY7ZWcIOqyveyasOyZgCDsnbzrsJggRW51beydhCDqtazrtoTtlZjsl6wg7LKY66as7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFiZWwoZW50aXR5SWQ6IHN0cmluZywgZW51bUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoZW51bUlkLmVuZHNXaXRoKFwiT3JkZXJCeVwiKSkge1xuICAgIHJldHVybiBcIuygleugrFwiO1xuICB9IGVsc2UgaWYgKGVudW1JZC5lbmRzV2l0aChcIlNlYXJjaEZpZWxkXCIpKSB7XG4gICAgcmV0dXJuIFwi6rKA7IOJXCI7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZW51bVByb3AgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMuZmluZChcbiAgICAgIChwcm9wKSA9PiBgJHtlbnRpdHlJZH0ke2luZmxlY3Rpb24uY2FtZWxpemUocHJvcC5uYW1lKX1gID09PSBlbnVtSWQsXG4gICAgKTtcbiAgICBpZiAoZW51bVByb3A/LmRlc2MpIHtcbiAgICAgIHJldHVybiBlbnVtUHJvcC5kZXNjO1xuICAgIH1cbiAgICByZXR1cm4gZW51bUlkO1xuICB9XG59XG5cbi8qKlxuICog7Lus65+8IOydtOumhOycvOuhnOu2gO2EsCBFbnVtIOygleuztOulvCDstpTstpztlanri4jri6QuXG4gKiBFbnRpdHnsnZggcHJvcCDspJEgZW51bSDtg4DsnoXsnbgg6rKD7J2EIOywvuyVhCDqtIDroKgg7KCV67O066W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1JbmZvRnJvbUNvbE5hbWUoXG4gIGVudGl0eUlkOiBzdHJpbmcsXG4gIGNvbE5hbWU6IHN0cmluZyxcbik6IHtcbiAgaWQ6IHN0cmluZztcbiAgdGFyZ2V0RW50aXR5TmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkO1xuICB0YXJnZXRFbnRpdHlJZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGJhc2VFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGNvbnN0IHByb3AgPSBiYXNlRW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gY29sTmFtZSk7XG4gIGlmIChwcm9wICYmIGlzRW51bVByb3AocHJvcCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHByb3AuaWQsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCksXG4gICAgICB0aXRsZTogcHJvcC5kZXNjID8/IHByb3AuaWQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpZENhbmRpZGF0ZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpfV8ke2luZmxlY3Rpb24udW5kZXJzY29yZShjb2xOYW1lKX1gLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaWRDYW5kaWRhdGUsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0RW50aXR5TmFtZXMsXG4gICAgICB0aXRsZTogaWRDYW5kaWRhdGUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIOy7rOufvCDsnbTrpoTsnLzroZzrtoDthLAgUmVsYXRpb24gcHJvcCDsoJXrs7Trpbwg6rCA7KC47Ji164uI64ukLlxuICog6rSA6rOE7ZiVIHByb3DsnbQg7JWE64uMIOqyveyasCDsl5Drn6zrpbwg67Cc7IOd7Iuc7YK164uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogUmVsYXRpb25Qcm9wIHtcbiAgY29uc3QgYmFzZUVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3QgcmVsUHJvcCA9IGJhc2VFbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2xOYW1lKTtcbiAgaWYgKGlzUmVsYXRpb25Qcm9wKHJlbFByb3ApKSB7XG4gICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocmVsUHJvcC53aXRoKTtcbiAgICBpZiAocmVsRW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgcGFyZW50IGVudGl0aWVzIGNhbiBiZSB1c2VkIGFzIHJlbGF0aW9uIHByb3BzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVsUHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOywvuydhCDsiJgg7JeG64qUIFJlbGF0aW9uICR7Y29sTmFtZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEZLIOy7rOufvOuqheyXkOyEnCDsi6TsoJwgcmVsYXRpb24g7J2066aE7J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIEJlbG9uZ3NUb09uZS9PbmVUb09uZSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgRksg7Lus65+866qFKHVzZXJfaWQp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg7ZWE7JqU7ZWY6rOgLFxuICogTWFueVRvTWFueSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgcmVsYXRpb27rqoUoZW1wbG95ZWUp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg67aI7ZWE7JqU7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShcIkVtcGxveWVlXCIsIFwidXNlcl9pZFwiKSAvLyBcInVzZXJcIlxuICogZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoXCJQcm9qZWN0XCIsIFwidGFnX2lkc1wiKSAvLyBcInRhZ3NcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gX2lkcyAo67O17IiYKSDsspjrpqxcbiAgaWYgKGNvbE5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBjb2xOYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgLy8g66i87KCAIGJhc2UgbmFtZeycvOuhnCDssL7quLBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICByZXR1cm4gcmVsUHJvcC5uYW1lO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gcGx1cmFsaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGx1cmFsTmFtZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKGJhc2VOYW1lKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBwbHVyYWxOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gX2lkICjri6jsiJgpIOyymOumrFxuICBpZiAoY29sTmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJiBjb2xOYW1lICE9PSBcImlkXCIpIHtcbiAgICBjb25zdCBiYXNlTmFtZSA9IGNvbE5hbWUucmVwbGFjZSgvX2lkJC8sIFwiXCIpO1xuICAgIC8vIOuovOyggCBiYXNlIG5hbWXsnLzroZwg7LC+6riwXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNpbmd1bGFyaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXJOYW1lID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShiYXNlTmFtZSk7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgc2luZ3VsYXJOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbE5hbWU7XG59XG5cbi8qKlxuICog7IaM7IqkIOy9lOuTnOyXkOyEnCDqsJ3ssrQg7ISg7Ja47J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIOykkeq0hO2YuCDsubTsmrTtjIUg67Cp7Iud7Jy866GcIOykkeyyqeuQnCDqsJ3ssrTrj4Qg7KCV7ZmV7Z6IIO2MjOyLse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlOiBzdHJpbmcsIHZhck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFwiZXhwb3J0IGNvbnN0IHZhck5hbWUgPSB7XCIg7Yyo7YS0IOywvuq4sFxuICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgZXhwb3J0IGNvbnN0ICR7dmFyTmFtZX1cXFxccyo9XFxcXHMqXFxcXHtgKTtcbiAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc291cmNlQ29kZSk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8g7Iuc7J6RIOychOy5mFxuICBjb25zdCBzdGFydElkeCA9IG1hdGNoLmluZGV4O1xuICBjb25zdCBvcGVuQnJhY2VJZHggPSBzb3VyY2VDb2RlLmluZGV4T2YoXCJ7XCIsIHN0YXJ0SWR4KTtcblxuICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gIGxldCBicmFjZUNvdW50ID0gMDtcbiAgbGV0IGluU3RyaW5nID0gZmFsc2U7XG4gIGxldCBpblRlbXBsYXRlID0gZmFsc2U7XG4gIGxldCBzdHJpbmdDaGFyID0gXCJcIjtcbiAgbGV0IGVuZElkeCA9IG9wZW5CcmFjZUlkeDtcblxuICBmb3IgKGxldCBpID0gb3BlbkJyYWNlSWR4OyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VDb2RlW2ldO1xuICAgIGNvbnN0IHByZXZDaGFyID0gaSA+IDAgPyBzb3VyY2VDb2RlW2kgLSAxXSA6IFwiXCI7XG5cbiAgICAvLyDsnbTsiqTsvIDsnbTtlITrkJwg66y47J6Q64qUIOustOyLnFxuICAgIGlmIChwcmV2Q2hhciA9PT0gXCJcXFxcXCIgJiYgKGluU3RyaW5nIHx8IGluVGVtcGxhdGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDrrLjsnpDsl7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmICgoY2hhciA9PT0gJ1wiJyB8fCBjaGFyID09PSBcIidcIikgJiYgIWluVGVtcGxhdGUpIHtcbiAgICAgIGlmICghaW5TdHJpbmcpIHtcbiAgICAgICAgaW5TdHJpbmcgPSB0cnVlO1xuICAgICAgICBzdHJpbmdDaGFyID0gY2hhcjtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gc3RyaW5nQ2hhcikge1xuICAgICAgICBpblN0cmluZyA9IGZhbHNlO1xuICAgICAgICBzdHJpbmdDaGFyID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIO2FnO2UjOumvyDrpqzthLDrn7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmIChjaGFyID09PSBcImBcIiAmJiAhaW5TdHJpbmcpIHtcbiAgICAgIGluVGVtcGxhdGUgPSAhaW5UZW1wbGF0ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOusuOyekOyXtC/thZztlIzrpr8g64K067aA64qUIOykkeq0hO2YuCDsubTsmrTtjIUg7JWIIO2VqFxuICAgIGlmIChpblN0cmluZyB8fCBpblRlbXBsYXRlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gICAgaWYgKGNoYXIgPT09IFwie1wiKSB7XG4gICAgICBicmFjZUNvdW50Kys7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSBcIn1cIikge1xuICAgICAgYnJhY2VDb3VudC0tO1xuICAgICAgaWYgKGJyYWNlQ291bnQgPT09IDApIHtcbiAgICAgICAgZW5kSWR4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g7ISg7Ja466y4IOuBneq5jOyngCDssL7quLAgKH07KVxuICBsZXQgZmluYWxFbmRJZHggPSBlbmRJZHg7XG4gIGZvciAobGV0IGkgPSBlbmRJZHggKyAxOyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzb3VyY2VDb2RlW2ldID09PSBcIjtcIikge1xuICAgICAgZmluYWxFbmRJZHggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvdXJjZUNvZGUuc3Vic3RyaW5nKHN0YXJ0SWR4LCBmaW5hbEVuZElkeCArIDEpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFXQSxTQUFnQixTQUFTLFVBQWtCLFFBQXdCO0NBQ2pFLElBQUksT0FBTyxTQUFTLFNBQVMsR0FDM0IsT0FBTztNQUNGLElBQUksT0FBTyxTQUFTLGFBQWEsR0FDdEMsT0FBTztNQUNGO0VBQ0wsTUFBTSxXQUFXLGNBQWMsSUFBSSxRQUFRLENBQUMsQ0FBQyxNQUFNLE1BQ2hELFNBQVMsR0FBRyxXQUFXLFdBQVcsU0FBUyxLQUFLLElBQUksUUFBUSxNQUMvRDtFQUNBLElBQUksVUFBVSxNQUNaLE9BQU8sU0FBUztFQUVsQixPQUFPO0NBQ1Q7QUFDRjs7Ozs7QUFNQSxTQUFnQix1QkFDZCxVQUNBLFNBTUE7Q0FFQSxNQUFNLE9BRGEsY0FBYyxJQUFJLFFBQ3hCLENBQUEsQ0FBVyxNQUFNLE1BQU0sTUFBTSxFQUFFLFNBQVMsT0FBTztDQUM1RCxJQUFJLFFBQVEsV0FBVyxJQUFJLEdBQ3pCLE9BQU87RUFDTCxJQUFJLEtBQUs7RUFDVCxnQkFBZ0I7RUFDaEIsbUJBQW1CLGNBQWMsZUFBZSxRQUFRO0VBQ3hELE9BQU8sS0FBSyxRQUFRLEtBQUs7Q0FDM0I7TUFDSztFQUNMLE1BQU0sY0FBYyxXQUFXLFNBQzdCLEdBQUcsV0FBVyxXQUFXLFFBQVEsRUFBRSxHQUFHLFdBQVcsV0FBVyxPQUFPLEtBQ25FLEtBQ0Y7RUFFQSxPQUFPO0dBQ0wsSUFBSTtHQUNKLGdCQUFnQjtHQUNHLG1CQUpLLGNBQWMsZUFBZSxRQUlsQztHQUNuQixPQUFPO0VBQ1Q7Q0FDRjtBQUNGOzs7OztBQU1BLFNBQWdCLDJCQUEyQixVQUFrQixTQUErQjtDQUUxRixNQUFNLFVBRGEsY0FBYyxJQUFJLFFBQ3JCLENBQUEsQ0FBVyxNQUFNLE1BQU0sU0FBUyxLQUFLLFNBQVMsT0FBTztDQUNyRSxJQUFJLGVBQWUsT0FBTyxHQUFHO0VBRTNCLElBRGtCLGNBQWMsSUFBSSxRQUFRLElBQ3hDLENBQUEsQ0FBVSxhQUFhLFFBQ3pCLE1BQU0sSUFBSSxNQUFNLG9EQUFvRDtFQUV0RSxPQUFPO0NBQ1QsT0FDRSxNQUFNLElBQUksTUFBTSxvQkFBb0IsU0FBUztBQUVqRDs7Ozs7Ozs7OztBQVdBLFNBQWdCLDhCQUE4QixVQUFrQixTQUF5QjtDQUV2RixJQUFJLFFBQVEsU0FBUyxNQUFNLEdBQUc7RUFDNUIsTUFBTSxXQUFXLFFBQVEsUUFBUSxTQUFTLEVBQUU7RUFFNUMsSUFBSTtHQUVGLE9BRGdCLDJCQUEyQixVQUFVLFFBQzlDLENBQUEsQ0FBUTtFQUNqQixRQUFRO0dBRU4sSUFBSTtJQUdGLE9BRGdCLDJCQUEyQixVQUR4QixXQUFXLFVBQVUsUUFDYSxDQUM5QyxDQUFBLENBQVE7R0FDakIsUUFBUTtJQUNOLE9BQU87R0FDVDtFQUNGO0NBQ0Y7Q0FFQSxJQUFJLFFBQVEsU0FBUyxLQUFLLEtBQUssWUFBWSxNQUFNO0VBQy9DLE1BQU0sV0FBVyxRQUFRLFFBQVEsUUFBUSxFQUFFO0VBRTNDLElBQUk7R0FFRixPQURnQiwyQkFBMkIsVUFBVSxRQUM5QyxDQUFBLENBQVE7RUFDakIsUUFBUTtHQUVOLElBQUk7SUFHRixPQURnQiwyQkFBMkIsVUFEdEIsV0FBVyxZQUFZLFFBQ1MsQ0FDOUMsQ0FBQSxDQUFRO0dBQ2pCLFFBQVE7SUFDTixPQUFPO0dBQ1Q7RUFDRjtDQUNGO0NBQ0EsT0FBTztBQUNUOzs7OztBQU1BLFNBQWdCLHlCQUF5QixZQUFvQixTQUF5QjtDQUdwRixNQUFNLFFBQVEsSUFETSxPQUFPLGdCQUFnQixRQUFRLGFBQ3JDLENBQUEsQ0FBUSxLQUFLLFVBQVU7Q0FFckMsSUFBSSxDQUFDLE9BQ0gsT0FBTztDQUlULE1BQU0sV0FBVyxNQUFNO0NBQ3ZCLE1BQU0sZUFBZSxXQUFXLFFBQVEsS0FBSyxRQUFRO0NBR3JELElBQUksYUFBYTtDQUNqQixJQUFJLFdBQVc7Q0FDZixJQUFJLGFBQWE7Q0FDakIsSUFBSSxhQUFhO0NBQ2pCLElBQUksU0FBUztDQUViLEtBQUssSUFBSSxJQUFJLGNBQWMsSUFBSSxXQUFXLFFBQVEsS0FBSztFQUNyRCxNQUFNLE9BQU8sV0FBVztFQUl4QixLQUhpQixJQUFJLElBQUksV0FBVyxJQUFJLEtBQUssUUFHNUIsU0FBUyxZQUFZLGFBQ3BDO0VBSUYsS0FBSyxTQUFTLFFBQU8sU0FBUyxRQUFRLENBQUMsWUFBWTtHQUNqRCxJQUFJLENBQUMsVUFBVTtJQUNiLFdBQVc7SUFDWCxhQUFhO0dBQ2YsT0FBTyxJQUFJLFNBQVMsWUFBWTtJQUM5QixXQUFXO0lBQ1gsYUFBYTtHQUNmO0dBQ0E7RUFDRjtFQUdBLElBQUksU0FBUyxPQUFPLENBQUMsVUFBVTtHQUM3QixhQUFhLENBQUM7R0FDZDtFQUNGO0VBR0EsSUFBSSxZQUFZLFlBQ2Q7RUFJRixJQUFJLFNBQVMsS0FDWDtPQUNLLElBQUksU0FBUyxLQUFLO0dBQ3ZCO0dBQ0EsSUFBSSxlQUFlLEdBQUc7SUFDcEIsU0FBUztJQUNUO0dBQ0Y7RUFDRjtDQUNGO0NBR0EsSUFBSSxjQUFjO0NBQ2xCLEtBQUssSUFBSSxJQUFJLFNBQVMsR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUM5QyxJQUFJLFdBQVcsT0FBTyxLQUFLO0VBQ3pCLGNBQWM7RUFDZDtDQUNGO0NBR0YsT0FBTyxXQUFXLFVBQVUsVUFBVSxjQUFjLENBQUM7QUFDdkQ7O3FCQS9Nd0Q7WUFFRyJ9
|
|
@@ -2,7 +2,6 @@ import { Sonamu } from "../../api/sonamu.js";
|
|
|
2
2
|
import { EntityManager, init_entity_manager } from "../../entity/entity-manager.js";
|
|
3
3
|
import { init_api } from "../../api/index.js";
|
|
4
4
|
import { Template, init_template } from "../template.js";
|
|
5
|
-
|
|
6
5
|
//#region src/template/implementations/entity.template.ts
|
|
7
6
|
init_api();
|
|
8
7
|
init_entity_manager();
|
|
@@ -22,14 +21,11 @@ var Template__entity = class extends Template {
|
|
|
22
21
|
const { entityId, title, parentId, table } = options;
|
|
23
22
|
const names = EntityManager.getNamesFromId(entityId);
|
|
24
23
|
const parent = (() => {
|
|
25
|
-
if (parentId) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
} else {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
24
|
+
if (parentId) return {
|
|
25
|
+
names: EntityManager.getNamesFromId(parentId),
|
|
26
|
+
entity: EntityManager.get(parentId)
|
|
27
|
+
};
|
|
28
|
+
else return null;
|
|
33
29
|
})();
|
|
34
30
|
return {
|
|
35
31
|
...this.getTargetAndPath(names, parent?.names ?? names),
|
|
@@ -71,7 +67,7 @@ var Template__entity = class extends Template {
|
|
|
71
67
|
};
|
|
72
68
|
}
|
|
73
69
|
};
|
|
74
|
-
|
|
75
70
|
//#endregion
|
|
76
71
|
export { Template__entity };
|
|
77
|
-
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50aXR5LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZW50aXR5IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImVudGl0eVwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkLCBwYXJlbnROYW1lcz86IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYCR7KHBhcmVudE5hbWVzID8/IG5hbWVzKS5mc30vJHtuYW1lcy5mc30uZW50aXR5Lmpzb25gLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIob3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1wiZW50aXR5XCJdKSB7XG4gICAgY29uc3QgeyBlbnRpdHlJZCwgdGl0bGUsIHBhcmVudElkLCB0YWJsZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgY29uc3QgcGFyZW50ID0gKCgpID0+IHtcbiAgICAgIGlmIChwYXJlbnRJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWVzOiBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHBhcmVudElkKSxcbiAgICAgICAgICBlbnRpdHk6IEVudGl0eU1hbmFnZXIuZ2V0KHBhcmVudElkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzLCBwYXJlbnQ/Lm5hbWVzID8/IG5hbWVzKSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWQ6IGVudGl0eUlkLFxuICAgICAgICB0aXRsZTogdGl0bGUgPz8gZW50aXR5SWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICB0YWJsZTogdGFibGUgPz8gbmFtZXMuZnNQbHVyYWwucmVwbGFjZSgvLS9nLCBcIl9cIiksXG4gICAgICAgIHByb3BzOiBvcHRpb25zLnByb3BzPy5sZW5ndGhcbiAgICAgICAgICA/IG9wdGlvbnMucHJvcHNcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiLCBkZXNjOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgLi4uKHBhcmVudFxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyZWxhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcmVudC5uYW1lcy5jYW1lbCxcbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvblR5cGU6IFwiQmVsb25nc1RvT25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2l0aDogcGFyZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgb25VcGRhdGU6IFwiQ0FTQ0FERVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uRGVsZXRlOiBcIkNBU0NBREVcIixcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBwYXJlbnQuZW50aXR5LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgZGVzYzogXCLrk7HroZ3snbzsi5xcIixcbiAgICAgICAgICAgICAgICBkYkRlZmF1bHQ6IFwiQ1VSUkVOVF9USU1FU1RBTVBcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIGluZGV4ZXM6IFsuLi4ob3B0aW9ucy5pbmRleGVzID8/IFtdKV0sXG4gICAgICAgIHN1YnNldHM6XG4gICAgICAgICAgb3B0aW9ucy5zdWJzZXRzID8/XG4gICAgICAgICAgKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBBOiBbXCJpZFwiLCBcImNyZWF0ZWRfYXRcIl0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICBlbnVtczpcbiAgICAgICAgICBvcHRpb25zLmVudW1zID8/XG4gICAgICAgICAgKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1PcmRlckJ5YF06IHtcbiAgICAgICAgICAgICAgICAgIFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZGBdOiB7IGlkOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICB9KS50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O1NBQWtDO29CQUN5QjtjQUdyQjtBQUV0QyxJQUFhLG1CQUFiLGNBQXNDLFNBQVM7Q0FDN0MsY0FBYztFQUNaLE1BQU0sUUFBUTtDQUNoQjtDQUVBLGlCQUFpQixPQUEwQixhQUFpQztFQUMxRSxNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87RUFFOUIsT0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTSxJQUFJLGVBQWUsTUFBQSxDQUFPLEdBQUcsR0FBRyxNQUFNLEdBQUc7RUFDakQ7Q0FDRjtDQUVBLE9BQU8sU0FBb0M7RUFDekMsTUFBTSxFQUFFLFVBQVUsT0FBTyxVQUFVLFVBQVU7RUFDN0MsTUFBTSxRQUFRLGNBQWMsZUFBZSxRQUFRO0VBRW5ELE1BQU0sZ0JBQWdCO0dBQ3BCLElBQUksVUFDRixPQUFPO0lBQ0wsT0FBTyxjQUFjLGVBQWUsUUFBUTtJQUM1QyxRQUFRLGNBQWMsSUFBSSxRQUFRO0dBQ3BDO1FBRUEsT0FBTztFQUVYLEVBQUEsQ0FBRztFQUVILE9BQU87R0FDTCxHQUFHLEtBQUssaUJBQWlCLE9BQU8sUUFBUSxTQUFTLEtBQUs7R0FDdEQsTUFBTSxLQUFLLFVBQVU7SUFDbkIsSUFBSTtJQUNKLE9BQU8sU0FBUztJQUNoQjtJQUNBLE9BQU8sU0FBUyxNQUFNLFNBQVMsUUFBUSxNQUFNLEdBQUc7SUFDaEQsT0FBTyxRQUFRLE9BQU8sU0FDbEIsUUFBUSxRQUNSO0tBQ0U7TUFBRSxNQUFNO01BQU0sTUFBTTtNQUFXLE1BQU07S0FBSztLQUMxQyxHQUFJLFNBQ0EsQ0FDRTtNQUNFLE1BQU07TUFDTixNQUFNLE9BQU8sTUFBTTtNQUNuQixjQUFjO01BQ2QsTUFBTTtNQUNOLFVBQVU7TUFDVixVQUFVO01BQ1YsTUFBTSxPQUFPLE9BQU87S0FDdEIsQ0FDRixJQUNBLENBQUM7S0FDTDtNQUNFLE1BQU07TUFDTixNQUFNO01BQ04sTUFBTTtNQUNOLFdBQVc7S0FDYjtJQUNGO0lBQ0osU0FBUyxDQUFDLEdBQUksUUFBUSxXQUFXLENBQUMsQ0FBRTtJQUNwQyxTQUNFLFFBQVEsWUFDUCxXQUNHLENBQUMsSUFDRCxFQUNFLEdBQUcsQ0FBQyxNQUFNLFlBQVksRUFDeEI7SUFDTixPQUNFLFFBQVEsVUFDUCxXQUNHLENBQUMsSUFDRDtNQUNHLEdBQUcsTUFBTSxRQUFRLFdBQVcsRUFDM0IsV0FBVyxRQUNiO01BQ0MsR0FBRyxNQUFNLFFBQVEsZUFBZSxFQUFFLElBQUksS0FBSztJQUM5QztHQUNSLENBQUMsQ0FBQyxDQUFDLEtBQUs7R0FDUixZQUFZLENBQUM7RUFDZjtDQUNGO0FBQ0YifQ==
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Template, init_template } from "../template.js";
|
|
2
|
-
|
|
3
2
|
//#region src/template/implementations/entry-server.template.ts
|
|
4
3
|
init_template();
|
|
5
4
|
var Template__entry_server = class extends Template {
|
|
@@ -83,7 +82,7 @@ export async function render(url: string, preloadedData: PreloadedData[] = []) {
|
|
|
83
82
|
};
|
|
84
83
|
}
|
|
85
84
|
};
|
|
86
|
-
|
|
87
85
|
//#endregion
|
|
88
86
|
export { Template__entry_server };
|
|
89
|
-
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktc2VydmVyLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50cnktc2VydmVyLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2VudHJ5X3NlcnZlciBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJlbnRyeV9zZXJ2ZXJcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyY1wiLFxuICAgICAgcGF0aDogYGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRyeV9zZXJ2ZXJcIl0pIHtcbiAgICBjb25zdCBib2R5ID0gYFxuaW1wb3J0IHsgUXVlcnlDbGllbnQsIGRlaHlkcmF0ZSB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBjcmVhdGVNZW1vcnlIaXN0b3J5LCBjcmVhdGVSb3V0ZXIsIFJvdXRlclByb3ZpZGVyIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IHsgcm91dGVUcmVlIH0gZnJvbSAnLi9yb3V0ZVRyZWUuZ2VuJztcbmltcG9ydCB7IFN1c3BlbnNlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCB0eXBlIFByZWxvYWRlZERhdGEgPSB7XG4gIHF1ZXJ5S2V5OiBhbnlbXTtcbiAgZGF0YTogYW55O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih1cmw6IHN0cmluZywgcHJlbG9hZGVkRGF0YTogUHJlbG9hZGVkRGF0YVtdID0gW10pIHtcbiAgLy8gUXVlcnlDbGllbnQg7IOd7ISxXG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KHtcbiAgICBkZWZhdWx0T3B0aW9uczoge1xuICAgICAgcXVlcmllczoge1xuICAgICAgICBzdGFsZVRpbWU6IDUwMDAsXG4gICAgICAgIHJldHJ5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gUHJlbG9hZGVkIOuNsOydtO2EsOulvCBxdWVyeUNsaWVudOyXkCDsp4HsoJEg7KO87J6FXG4gIGZvciAoY29uc3QgeyBxdWVyeUtleSwgZGF0YSB9IG9mIHByZWxvYWRlZERhdGEpIHtcbiAgICBxdWVyeUNsaWVudC5zZXRRdWVyeURhdGEocXVlcnlLZXksIGRhdGEpO1xuICB9XG5cbiAgLy8gRGVoeWRyYXRlXG4gIGNvbnN0IGRlaHlkcmF0ZWRTdGF0ZSA9IGRlaHlkcmF0ZShxdWVyeUNsaWVudCk7XG5cbiAgLy8gU1NS7JqpIOuplOuqqOumrCDtnojsiqTthqDrpqwg7IOd7ISxXG4gIGNvbnN0IG1lbW9yeUhpc3RvcnkgPSBjcmVhdGVNZW1vcnlIaXN0b3J5KHtcbiAgICBpbml0aWFsRW50cmllczogW3VybF0sXG4gIH0pO1xuXG4gIC8vIFJvdXRlciDsg53shLEgKFNTUiDrqqjrk5wpXG4gIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcih7XG4gICAgcm91dGVUcmVlLFxuICAgIGNvbnRleHQ6IHsgcXVlcnlDbGllbnQgfSxcbiAgICBoaXN0b3J5OiBtZW1vcnlIaXN0b3J5LFxuICAgIGRlZmF1bHRQcmVsb2FkOiAnaW50ZW50JyxcbiAgfSk7XG5cbiAgLy8g65287Jqw7YSwIOy0iOq4sO2ZlDogU1NS7JeQ7IScIOuwmOuTnOyLnCBhd2FpdCByb3V0ZXIubG9hZCgpIO2YuOy2nCDtlYTsmpRcbiAgYXdhaXQgcm91dGVyLmxvYWQoKTtcblxuICAvLyBSb3V0ZXJQcm92aWRlcuunjCDroIzrjZTrp4EgKFN1c3BlbnNl66GcIOuemO2VkSAtIGh5ZHJhdGlvbiBtaXNtYXRjaCDrsKnsp4ApXG4gIGNvbnN0IGFwcEh0bWwgPSByZW5kZXJUb1N0cmluZyg8U3VzcGVuc2UgZmFsbGJhY2s9e251bGx9PjxSb3V0ZXJQcm92aWRlciByb3V0ZXI9e3JvdXRlcn0gLz48L1N1c3BlbnNlPik7XG5cbiAgcmV0dXJuIHtcbiAgICBodG1sOiBhcHBIdG1sLFxuICAgIGRlaHlkcmF0ZWRTdGF0ZSxcbiAgfTtcbn1cbiAgICBgLnRyaW0oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcIi8qKlwiLCBcIiAqIEBnZW5lcmF0ZWRcIiwgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIiwgXCIgKi9cIiwgXCJcIl0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztjQUNzQztBQUV0QyxJQUFhLHlCQUFiLGNBQTRDLFNBQVM7Q0FDbkQsY0FBYztFQUNaLE1BQU0sY0FBYztDQUN0QjtDQUVBLG1CQUFtQjtFQUNqQixPQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU07RUFDUjtDQUNGO0NBRUEsT0FBTyxJQUFxQztFQUMxQyxNQUFNLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1RFgsS0FBSztFQUVQLE9BQU87R0FDTCxHQUFHLEtBQUssaUJBQWlCO0dBQ3pCO0dBQ0EsWUFBWSxDQUFDO0dBQ2IsZUFBZTtJQUFDO0lBQU87SUFBaUI7SUFBbUI7SUFBTztHQUFFO0VBQ3RFO0NBQ0Y7QUFDRiJ9
|
|
@@ -8,7 +8,6 @@ import { Template, init_template } from "../template.js";
|
|
|
8
8
|
import { BUILT_IN_TYPES, init_zod_converter, propNodeToZodTypeDef, zodTypeToZodCode } from "../zod-converter.js";
|
|
9
9
|
import { unique } from "radashi";
|
|
10
10
|
import assert from "assert";
|
|
11
|
-
|
|
12
11
|
//#region src/template/implementations/generated.template.ts
|
|
13
12
|
init_api();
|
|
14
13
|
init_entity_manager();
|
|
@@ -29,8 +28,7 @@ var Template__generated = class extends Template {
|
|
|
29
28
|
};
|
|
30
29
|
}
|
|
31
30
|
render() {
|
|
32
|
-
const
|
|
33
|
-
const entities = entityIds.map((id) => EntityManager.get(id));
|
|
31
|
+
const entities = EntityManager.getAllIds().map((id) => EntityManager.get(id));
|
|
34
32
|
const sourceCodes = entities.flatMap((entity) => {
|
|
35
33
|
return [
|
|
36
34
|
this.getEnumsSourceCode(entity),
|
|
@@ -52,18 +50,12 @@ var Template__generated = class extends Template {
|
|
|
52
50
|
const [bKey] = b.label.split(":");
|
|
53
51
|
const aIndex = LABEL_KEY_ORDER.indexOf(aKey);
|
|
54
52
|
const bIndex = LABEL_KEY_ORDER.indexOf(bKey);
|
|
55
|
-
if (aIndex > bIndex)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return -1;
|
|
59
|
-
} else {
|
|
60
|
-
return 0;
|
|
61
|
-
}
|
|
53
|
+
if (aIndex > bIndex) return 1;
|
|
54
|
+
else if (aIndex < bIndex) return -1;
|
|
55
|
+
else return 0;
|
|
62
56
|
});
|
|
63
57
|
const sourceCode = sourceCodes.reduce((result, ts) => {
|
|
64
|
-
if (ts === null)
|
|
65
|
-
return result;
|
|
66
|
-
}
|
|
58
|
+
if (ts === null) return result;
|
|
67
59
|
return {
|
|
68
60
|
lines: [
|
|
69
61
|
...result.lines,
|
|
@@ -80,11 +72,9 @@ var Template__generated = class extends Template {
|
|
|
80
72
|
const allTypeKeys = entities.flatMap((entity) => Object.keys(entity.types));
|
|
81
73
|
const cdImportKeys = sourceCode.importKeys.filter((importKey) => allTypeKeys.includes(importKey));
|
|
82
74
|
if (cdImportKeys.length > 0) {
|
|
83
|
-
|
|
84
|
-
const entity = entities.find((entity
|
|
85
|
-
if (!entity) {
|
|
86
|
-
throw new Error(`ZodType not found ${importKey}`);
|
|
87
|
-
}
|
|
75
|
+
sourceCode.lines = [...cdImportKeys.flatMap((importKey) => {
|
|
76
|
+
const entity = entities.find((entity) => entity.types[importKey]);
|
|
77
|
+
if (!entity) throw new Error(`ZodType not found ${importKey}`);
|
|
88
78
|
const zodType = entity.types[importKey];
|
|
89
79
|
assert(zodType);
|
|
90
80
|
return [
|
|
@@ -93,21 +83,19 @@ var Template__generated = class extends Template {
|
|
|
93
83
|
`type ${importKey} = z.infer<typeof ${importKey}>`,
|
|
94
84
|
""
|
|
95
85
|
];
|
|
96
|
-
});
|
|
97
|
-
sourceCode.lines = [...customScalarLines, ...sourceCode.lines];
|
|
86
|
+
}), ...sourceCode.lines];
|
|
98
87
|
sourceCode.importKeys = unique(sourceCode.importKeys.filter((importKey) => !cdImportKeys.includes(importKey)));
|
|
99
88
|
}
|
|
100
89
|
const body = sourceCode.lines.join("\n");
|
|
101
90
|
Naite.t("Template__generated:body", body);
|
|
102
91
|
const builtInSchemaNames = Object.values(BUILT_IN_TYPES).map((info) => info.schemaName);
|
|
103
|
-
const builtInSchemas = sourceCode.importKeys.filter((key) => builtInSchemaNames.includes(key));
|
|
104
92
|
const sonamuImports = [
|
|
105
93
|
"zArrayable",
|
|
106
94
|
"SQLDateTimeString",
|
|
107
95
|
"SubsetQuery",
|
|
108
96
|
"SonamuQueryMode",
|
|
109
97
|
"ApplySonamuFilter",
|
|
110
|
-
...
|
|
98
|
+
...sourceCode.importKeys.filter((key) => builtInSchemaNames.includes(key))
|
|
111
99
|
].filter((mod) => body.includes(mod));
|
|
112
100
|
return {
|
|
113
101
|
...this.getTargetAndPath(),
|
|
@@ -127,9 +115,7 @@ var Template__generated = class extends Template {
|
|
|
127
115
|
};
|
|
128
116
|
}
|
|
129
117
|
getEnumsSourceCode(entity) {
|
|
130
|
-
if (Object.keys(entity.enumLabels).length === 0)
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
118
|
+
if (Object.keys(entity.enumLabels).length === 0) return null;
|
|
133
119
|
return {
|
|
134
120
|
label: `Enums: ${entity.id}`,
|
|
135
121
|
lines: Object.entries(entity.enumLabels).filter(([_, enumLabel]) => Object.keys(enumLabel).length > 0).flatMap(([enumId, enumLabel]) => [
|
|
@@ -153,9 +139,7 @@ var Template__generated = class extends Template {
|
|
|
153
139
|
};
|
|
154
140
|
const schemaBody = (() => {
|
|
155
141
|
const result = propNodeToZodTypeDef(propNode, importKeys);
|
|
156
|
-
if (result.endsWith(","))
|
|
157
|
-
return result.slice(0, -1);
|
|
158
|
-
}
|
|
142
|
+
if (result.endsWith(",")) return result.slice(0, -1);
|
|
159
143
|
return result;
|
|
160
144
|
})();
|
|
161
145
|
const fulltextColumns = [];
|
|
@@ -166,7 +150,7 @@ var Template__generated = class extends Template {
|
|
|
166
150
|
* - nullable 또는 dbDefault가 있는 컬럼 (id 포함)
|
|
167
151
|
* - relation이 아니거나, relation이어도 nullable이면 포함
|
|
168
152
|
*/
|
|
169
|
-
const hasDefaultColumns = entity.props.filter((prop) => (prop.type !== "relation" || prop.nullable === true) && (prop.nullable === true || prop.type !== "relation" && prop.dbDefault !==
|
|
153
|
+
const hasDefaultColumns = entity.props.filter((prop) => (prop.type !== "relation" || prop.nullable === true) && (prop.nullable === true || prop.type !== "relation" && prop.dbDefault !== void 0)).map((prop) => prop.type === "relation" ? `${prop.name}_id` : prop.name).concat("id");
|
|
170
154
|
/**
|
|
171
155
|
* hasVector props
|
|
172
156
|
* - vector 타입인 컬럼
|
|
@@ -176,7 +160,7 @@ var Template__generated = class extends Template {
|
|
|
176
160
|
* generated props
|
|
177
161
|
* - generated 속성이 있는 컬럼 (INSERT/UPDATE 시 값 제공 불가)
|
|
178
162
|
*/
|
|
179
|
-
const generatedColumns = entity.props.filter((prop) => prop.type !== "relation" && (prop.generated !==
|
|
163
|
+
const generatedColumns = entity.props.filter((prop) => prop.type !== "relation" && (prop.generated !== void 0 || prop.type === "searchText")).map((prop) => prop.name);
|
|
180
164
|
const hasMetadata = fulltextColumns.length > 0 || virtualProps.length > 0 || virtualQueryProps.length > 0 || hasDefaultColumns.length > 0 || generatedColumns.length > 0 || hasVectorColumns.length > 0;
|
|
181
165
|
const lines = [`export const ${schemaName} = ${schemaBody};`, `export type ${schemaName} = z.infer<typeof ${schemaName}>` + (hasMetadata ? ` & {${(fulltextColumns.length > 0 ? `readonly __fulltext__: readonly [${fulltextColumns.map((col) => `"${col}"`).join(", ")}],` : "") + (virtualProps.length > 0 ? `readonly __virtual__: readonly [${virtualProps.map((prop) => `"${prop}"`).join(", ")}],` : "") + (virtualQueryProps.length > 0 ? `readonly __virtual_query__: readonly [${virtualQueryProps.map((prop) => `"${prop}"`).join(", ")}],` : "") + (hasDefaultColumns.length > 0 ? `readonly __hasDefault__: readonly [${hasDefaultColumns.map((col) => `"${col}"`).join(", ")}],` : "") + (generatedColumns.length > 0 ? `readonly __generated__: readonly [${generatedColumns.map((col) => `"${col}"`).join(", ")}],` : "") + (hasVectorColumns.length > 0 ? `readonly __vector__: readonly [${hasVectorColumns.map((col) => `"${col}"`).join(", ")}],` : "")}}` : "") + ";"];
|
|
182
166
|
return {
|
|
@@ -186,14 +170,10 @@ var Template__generated = class extends Template {
|
|
|
186
170
|
};
|
|
187
171
|
}
|
|
188
172
|
getBaseListParamsSourceCode(entity) {
|
|
189
|
-
if (entity.props.length === 0)
|
|
190
|
-
|
|
191
|
-
} else if (entity.parentId !== undefined) {
|
|
192
|
-
return null;
|
|
193
|
-
}
|
|
173
|
+
if (entity.props.length === 0) return null;
|
|
174
|
+
else if (entity.parentId !== void 0) return null;
|
|
194
175
|
const schemaName = `${entity.names.module}BaseListParams`;
|
|
195
|
-
const
|
|
196
|
-
const propNodes = filterProps.map((prop) => {
|
|
176
|
+
const propNodes = entity.props.filter((prop) => prop.toFilter === true).map((prop) => {
|
|
197
177
|
return {
|
|
198
178
|
nodeType: "plain",
|
|
199
179
|
prop,
|
|
@@ -209,7 +189,7 @@ var Template__generated = class extends Template {
|
|
|
209
189
|
const omitKeysUnion = excludedProps.length > 0 ? excludedProps.map((n) => `"${n}"`).join(" | ") : "never";
|
|
210
190
|
const pkType = entity.getPkType();
|
|
211
191
|
const idZodType = pkType === "string" || pkType === "uuid" ? "zArrayable(z.string())" : "zArrayable(z.number().int().positive())";
|
|
212
|
-
const
|
|
192
|
+
const lines = [`export const ${schemaName} = ${`
|
|
213
193
|
z.object({
|
|
214
194
|
num: z.number().int().nonnegative(),
|
|
215
195
|
page: z.number().int().min(1),
|
|
@@ -220,8 +200,7 @@ z.object({
|
|
|
220
200
|
id: ${idZodType},
|
|
221
201
|
sonamuFilter: z.custom<ApplySonamuFilter<${entityType}, ${omitKeysUnion}, ${numericKeysUnion}>>(),${filterBody}
|
|
222
202
|
}).partial();
|
|
223
|
-
`.trim();
|
|
224
|
-
const lines = [`export const ${schemaName} = ${schemaBody};`, `export type ${schemaName} = z.infer<typeof ${schemaName}>;`];
|
|
203
|
+
`.trim()};`, `export type ${schemaName} = z.infer<typeof ${schemaName}>;`];
|
|
225
204
|
return {
|
|
226
205
|
label: `BaseListParams: ${entity.id}`,
|
|
227
206
|
importKeys,
|
|
@@ -229,11 +208,8 @@ z.object({
|
|
|
229
208
|
};
|
|
230
209
|
}
|
|
231
210
|
getSubsetSourceCode(entity) {
|
|
232
|
-
if (Object.keys(entity.subsets).length === 0)
|
|
233
|
-
|
|
234
|
-
} else if (entity.parentId !== undefined) {
|
|
235
|
-
return null;
|
|
236
|
-
}
|
|
211
|
+
if (Object.keys(entity.subsets).length === 0) return null;
|
|
212
|
+
else if (entity.parentId !== void 0) return null;
|
|
237
213
|
const subsetKeys = Object.keys(entity.subsets);
|
|
238
214
|
const importKeys = [];
|
|
239
215
|
const lines = [
|
|
@@ -241,12 +217,10 @@ z.object({
|
|
|
241
217
|
const fieldExprs = entity.subsets[subsetKey];
|
|
242
218
|
const propNodes = entity.fieldExprsToPropNodes(fieldExprs);
|
|
243
219
|
const schemaName = `${entity.names.module}Subset${subsetKey}`;
|
|
244
|
-
const
|
|
220
|
+
return [`export const ${schemaName} = ${propNodeToZodTypeDef({
|
|
245
221
|
nodeType: "object",
|
|
246
222
|
children: propNodes
|
|
247
|
-
};
|
|
248
|
-
const body = propNodeToZodTypeDef(propNode, importKeys);
|
|
249
|
-
return [`export const ${schemaName} = ${body.replace(/,$/, "")};`, `export type ${schemaName} = z.infer<typeof ${schemaName}>;`];
|
|
223
|
+
}, importKeys).replace(/,$/, "")};`, `export type ${schemaName} = z.infer<typeof ${schemaName}>;`];
|
|
250
224
|
}),
|
|
251
225
|
`export type ${entity.names.module}SubsetMapping = {`,
|
|
252
226
|
...subsetKeys.map((subsetKey) => ` ${subsetKey}: ${entity.names.module}Subset${subsetKey};`),
|
|
@@ -262,7 +236,7 @@ z.object({
|
|
|
262
236
|
};
|
|
263
237
|
}
|
|
264
238
|
};
|
|
265
|
-
|
|
266
239
|
//#endregion
|
|
267
240
|
export { Template__generated };
|
|
268
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLnRlbXBsYXRlLmpzIiwibmFtZXMiOlsiZW50aXR5IiwicHJvcE5vZGU6IEVudGl0eVByb3BOb2RlIiwiZnVsbHRleHRDb2x1bW5zOiBFbnRpdHlJbmRleFtcImNvbHVtbnNcIl1bXSIsInByb3BOb2RlczogRW50aXR5UHJvcE5vZGVbXSIsImltcG9ydEtleXM6IHN0cmluZ1tdIiwibGluZXM6IHN0cmluZ1tdIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9nZW5lcmF0ZWQudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNWaXJ0dWFsQ29kZVByb3AsIGlzVmlydHVhbFF1ZXJ5UHJvcCB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlJbmRleCwgdHlwZSBFbnRpdHlQcm9wTm9kZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBCVUlMVF9JTl9UWVBFUywgcHJvcE5vZGVUb1pvZFR5cGVEZWYsIHpvZFR5cGVUb1pvZENvZGUgfSBmcm9tIFwiLi4vem9kLWNvbnZlcnRlclwiO1xuXG5leHBvcnQgdHlwZSBTb3VyY2VDb2RlID0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBsaW5lczogc3RyaW5nW107XG4gIGltcG9ydEtleXM6IHN0cmluZ1tdO1xufTtcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZ2VuZXJhdGVkIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImdlbmVyYXRlZFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGBzb25hbXUuZ2VuZXJhdGVkLnRzYCxcbiAgICB9O1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgIGNvbnN0IGVudGl0aWVzID0gZW50aXR5SWRzLm1hcCgoaWQpID0+IEVudGl0eU1hbmFnZXIuZ2V0KGlkKSk7XG5cbiAgICAvLyDsoITssrQgU291cmNlQ29kZSDsg53shLFcbiAgICBjb25zdCBzb3VyY2VDb2RlcyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5nZXRFbnVtc1NvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRCYXNlU2NoZW1hU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldFN1YnNldFNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgIF0uZmlsdGVyKG5vbk51bGxhYmxlKTtcbiAgICB9KTtcbiAgICBOYWl0ZS50KFwiVGVtcGxhdGVfX2dlbmVyYXRlZDpzb3VyY2VDb2Rlc1wiLCBzb3VyY2VDb2Rlcyk7XG5cbiAgICAvLyBTb3J0XG4gICAgY29uc3QgTEFCRUxfS0VZX09SREVSID0gW1wiRW51bXNcIiwgXCJCYXNlU2NoZW1hXCIsIFwiQmFzZUxpc3RQYXJhbXNcIiwgXCJTdWJzZXRzXCIsIFwiU3Vic2V0UXVlcmllc1wiXTtcbiAgICBzb3VyY2VDb2Rlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBbYUtleV0gPSBhLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IFtiS2V5XSA9IGIubGFiZWwuc3BsaXQoXCI6XCIpO1xuICAgICAgY29uc3QgYUluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYUtleSk7XG4gICAgICBjb25zdCBiSW5kZXggPSBMQUJFTF9LRVlfT1JERVIuaW5kZXhPZihiS2V5KTtcbiAgICAgIGlmIChhSW5kZXggPiBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKGFJbmRleCA8IGJJbmRleCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBzb3VyY2VDb2Rlcy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCB0cykgPT4ge1xuICAgICAgICBpZiAodHMgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZXM6IFsuLi5yZXN1bHQubGluZXMsIGAvLyAke3RzLmxhYmVsfWAsIC4uLnRzLmxpbmVzLCBcIlwiXSxcbiAgICAgICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoWy4uLnJlc3VsdC5pbXBvcnRLZXlzLCAuLi50cy5pbXBvcnRLZXlzXS50b1NvcnRlZCgpKSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9IGFzIE9taXQ8U291cmNlQ29kZSwgXCJsYWJlbFwiPixcbiAgICApO1xuXG4gICAgLy8gLnR5cGVzLnRz7J2YIO2DgOyeheydhCDssLjsobDtlZjripQg6rK97JqwIOyInO2ZmOywuOyhsCjsg4HtmLjssLjsobAp6rCAIOuwnOyDne2VmOuvgOuhnCDtg4DsnoXsnYQg6rCA7KC47JmAIOyduOudvOyduCDsspjrpqxcbiAgICBjb25zdCBhbGxUeXBlS2V5cyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4gT2JqZWN0LmtleXMoZW50aXR5LnR5cGVzKSk7XG4gICAgY29uc3QgY2RJbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PlxuICAgICAgYWxsVHlwZUtleXMuaW5jbHVkZXMoaW1wb3J0S2V5KSxcbiAgICApO1xuICAgIGlmIChjZEltcG9ydEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VzdG9tU2NhbGFyTGluZXMgPSBjZEltcG9ydEtleXMuZmxhdE1hcCgoaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5LnR5cGVzW2ltcG9ydEtleV0pO1xuICAgICAgICBpZiAoIWVudGl0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWm9kVHlwZSBub3QgZm91bmQgJHtpbXBvcnRLZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgem9kVHlwZSA9IGVudGl0eS50eXBlc1tpbXBvcnRLZXldO1xuICAgICAgICBhc3NlcnQoem9kVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgLy8gQ3VzdG9tU2NhbGFyOiAke2ltcG9ydEtleX1gLFxuICAgICAgICAgIGBjb25zdCAke2ltcG9ydEtleX0gPSAke3pvZFR5cGVUb1pvZENvZGUoem9kVHlwZSwgc291cmNlQ29kZS5pbXBvcnRLZXlzKX07YCxcbiAgICAgICAgICBgdHlwZSAke2ltcG9ydEtleX0gPSB6LmluZmVyPHR5cGVvZiAke2ltcG9ydEtleX0+YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gICAgICBzb3VyY2VDb2RlLmxpbmVzID0gWy4uLmN1c3RvbVNjYWxhckxpbmVzLCAuLi5zb3VyY2VDb2RlLmxpbmVzXTtcbiAgICAgIHNvdXJjZUNvZGUuaW1wb3J0S2V5cyA9IHVuaXF1ZShcbiAgICAgICAgc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhY2RJbXBvcnRLZXlzLmluY2x1ZGVzKGltcG9ydEtleSkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOmJvZHlcIiwgYm9keSk7XG5cbiAgICAvLyBpbXBvcnRcbiAgICAvLyBzb3VyY2VDb2RlLmltcG9ydEtleXPsl5Ag64K07J6lIO2DgOyeheydmCDsiqTtgqTrp4jqsIAg7J6I7Jy866m0IHNvbmFtdSBpbXBvcnTsl5Ag7LaU6rCAXG4gICAgY29uc3QgYnVpbHRJblNjaGVtYU5hbWVzID0gT2JqZWN0LnZhbHVlcyhCVUlMVF9JTl9UWVBFUykubWFwKFxuICAgICAgKGluZm8pID0+IGluZm8uc2NoZW1hTmFtZSBhcyBzdHJpbmcsXG4gICAgKTtcbiAgICBjb25zdCBidWlsdEluU2NoZW1hcyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGtleSkgPT4gYnVpbHRJblNjaGVtYU5hbWVzLmluY2x1ZGVzKGtleSkpO1xuICAgIGNvbnN0IHNvbmFtdUltcG9ydHMgPSBbXG4gICAgICBcInpBcnJheWFibGVcIixcbiAgICAgIFwiU1FMRGF0ZVRpbWVTdHJpbmdcIixcbiAgICAgIFwiU3Vic2V0UXVlcnlcIixcbiAgICAgIFwiU29uYW11UXVlcnlNb2RlXCIsXG4gICAgICBcIkFwcGx5U29uYW11RmlsdGVyXCIsXG4gICAgICAuLi5idWlsdEluU2NoZW1hcyxcbiAgICBdLmZpbHRlcigobW9kKSA9PiBib2R5LmluY2x1ZGVzKG1vZCkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keSxcbiAgICAgIGltcG9ydEtleXM6IHNvdXJjZUNvZGUuaW1wb3J0S2V5cyxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgXCIvKipcIixcbiAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiLyogb3hsaW50LWRpc2FibGUgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgYGltcG9ydCB7IHogfSBmcm9tICd6b2QnO2AsXG4gICAgICAgIGBpbXBvcnQgeyAke3NvbmFtdUltcG9ydHMuam9pbihcIixcIil9IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBnZXRFbnVtc1NvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHkpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGVudGl0eS5lbnVtTGFiZWxzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBFbnVtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGxpbmVzOiBPYmplY3QuZW50cmllcyhlbnRpdHkuZW51bUxhYmVscylcbiAgICAgICAgLmZpbHRlcigoW18sIGVudW1MYWJlbF0pID0+IE9iamVjdC5rZXlzKGVudW1MYWJlbCkubGVuZ3RoID4gMClcbiAgICAgICAgLmZsYXRNYXAoKFtlbnVtSWQsIGVudW1MYWJlbF0pID0+IFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7ZW51bUlkfSA9IHouZW51bShbJHtPYmplY3Qua2V5cyhlbnVtTGFiZWwpLm1hcChcbiAgICAgICAgICAgIChlbCkgPT4gYFwiJHtlbH1cImAsXG4gICAgICAgICAgKX1dKS5kZXNjcmliZShcIiR7ZW51bUlkfVwiKTtgLFxuICAgICAgICAgIGBleHBvcnQgdHlwZSAke2VudW1JZH0gPSB6LmluZmVyPHR5cGVvZiAke2VudW1JZH0+O2AsXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH1MYWJlbCA9ICR7SlNPTi5zdHJpbmdpZnkoZW51bUxhYmVsKX07YCxcbiAgICAgICAgXSksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHksIGltcG9ydEtleXM6IHN0cmluZ1tdID0gW10pOiBTb3VyY2VDb2RlIHtcbiAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1CYXNlU2NoZW1hYDtcbiAgICBjb25zdCBwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuOiBlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIixcbiAgICAgICAgICBwcm9wLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSAoKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpO1xuICAgICAgaWYgKHJlc3VsdC5lbmRzV2l0aChcIixcIikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zbGljZSgwLCAtMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkoKTtcblxuICAgIC8vIGZ1bGx0ZXh0IGluZGV47JeQIO2PrO2VqOuQnCDsu6zrn7zrk6Qg7LaU7LacXG4gICAgLy8gVE9ETzogR0lOL0dpU1Qg7J24642x7IqkIOyDneyEseuQnCDsu6zrn7wg7LaU7LacXG4gICAgY29uc3QgZnVsbHRleHRDb2x1bW5zOiBFbnRpdHlJbmRleFtcImNvbHVtbnNcIl1bXSA9IFtdO1xuXG4gICAgLy8gdmlydHVhbCBwcm9wcyAodmlydHVhbFR5cGU6IFwiY29kZVwiIOuYkOuKlCB1bmRlZmluZWTsnbgg6rKD66eMIO2PrO2VqClcbiAgICBjb25zdCB2aXJ0dWFsUHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbENvZGVQcm9wKHByb3ApKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8vIHF1ZXJ5IHZpcnR1YWwgcHJvcHMgKHZpcnR1YWxUeXBlOiBcInF1ZXJ5XCLsnbgg6rKD66eMIO2PrO2VqClcbiAgICBjb25zdCB2aXJ0dWFsUXVlcnlQcm9wcyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gaXNWaXJ0dWFsUXVlcnlQcm9wKHByb3ApKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIGhhc0RlZmF1bHQgcHJvcHNcbiAgICAgKiAtIG51bGxhYmxlIOuYkOuKlCBkYkRlZmF1bHTqsIAg7J6I64qUIOy7rOufvCAoaWQg7Y+s7ZWoKVxuICAgICAqIC0gcmVsYXRpb27snbQg7JWE64uI6rGw64KYLCByZWxhdGlvbuydtOyWtOuPhCBudWxsYWJsZeydtOuptCDtj6ztlahcbiAgICAgKi9cbiAgICBjb25zdCBoYXNEZWZhdWx0Q29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHByb3ApID0+XG4gICAgICAgICAgKHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiIHx8IHByb3AubnVsbGFibGUgPT09IHRydWUpICYmXG4gICAgICAgICAgKHByb3AubnVsbGFibGUgPT09IHRydWUgfHwgKHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiICYmIHByb3AuZGJEZWZhdWx0ICE9PSB1bmRlZmluZWQpKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHByb3ApID0+IChwcm9wLnR5cGUgPT09IFwicmVsYXRpb25cIiA/IGAke3Byb3AubmFtZX1faWRgIDogcHJvcC5uYW1lKSlcbiAgICAgIC5jb25jYXQoXCJpZFwiKTtcblxuICAgIC8qKlxuICAgICAqIGhhc1ZlY3RvciBwcm9wc1xuICAgICAqIC0gdmVjdG9yIO2DgOyeheyduCDsu6zrn7xcbiAgICAgKi9cbiAgICBjb25zdCBoYXNWZWN0b3JDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBwcm9wLnR5cGUgPT09IFwidmVjdG9yXCIgfHwgcHJvcC50eXBlID09PSBcInZlY3RvcltdXCIpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVkIHByb3BzXG4gICAgICogLSBnZW5lcmF0ZWQg7IaN7ISx7J20IOyeiOuKlCDsu6zrn7wgKElOU0VSVC9VUERBVEUg7IucIOqwkiDsoJzqs7Ug67aI6rCAKVxuICAgICAqL1xuICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PlxuICAgICAgICAgIHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiICYmIChwcm9wLmdlbmVyYXRlZCAhPT0gdW5kZWZpbmVkIHx8IHByb3AudHlwZSA9PT0gXCJzZWFyY2hUZXh0XCIpLFxuICAgICAgKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIGNvbnN0IGhhc01ldGFkYXRhID1cbiAgICAgIGZ1bGx0ZXh0Q29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICB2aXJ0dWFsUHJvcHMubGVuZ3RoID4gMCB8fFxuICAgICAgdmlydHVhbFF1ZXJ5UHJvcHMubGVuZ3RoID4gMCB8fFxuICAgICAgaGFzRGVmYXVsdENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgZ2VuZXJhdGVkQ29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICBoYXNWZWN0b3JDb2x1bW5zLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7c2NoZW1hQm9keX07YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT5gICtcbiAgICAgICAgKGhhc01ldGFkYXRhXG4gICAgICAgICAgPyBgICYgeyR7XG4gICAgICAgICAgICAgIChmdWxsdGV4dENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fZnVsbHRleHRfXzogcmVhZG9ubHkgWyR7ZnVsbHRleHRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAodmlydHVhbFByb3BzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZpcnR1YWxfXzogcmVhZG9ubHkgWyR7dmlydHVhbFByb3BzLm1hcCgocHJvcCkgPT4gYFwiJHtwcm9wfVwiYCkuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAodmlydHVhbFF1ZXJ5UHJvcHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmlydHVhbF9xdWVyeV9fOiByZWFkb25seSBbJHt2aXJ0dWFsUXVlcnlQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcH1cImApLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGhhc0RlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgWyR7aGFzRGVmYXVsdENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChnZW5lcmF0ZWRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2dlbmVyYXRlZF9fOiByZWFkb25seSBbJHtnZW5lcmF0ZWRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoaGFzVmVjdG9yQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192ZWN0b3JfXzogcmVhZG9ubHkgWyR7aGFzVmVjdG9yQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpXG4gICAgICAgICAgICB9fWBcbiAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgXCI7XCIsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEJhc2VTY2hlbWE6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBpbXBvcnRLZXlzLFxuICAgICAgbGluZXMsXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICAvLyBQcm9wIOyXhuuKlCBNROyduCDqsr3smrAg7IOd7ISxIOygnOyZuFxuICAgIGlmIChlbnRpdHkucHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGVudGl0eS5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1CYXNlTGlzdFBhcmFtc2A7XG5cbiAgICBjb25zdCBmaWx0ZXJQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHByb3ApID0+IHByb3AudG9GaWx0ZXIgPT09IHRydWUpO1xuXG4gICAgY29uc3QgcHJvcE5vZGVzOiBFbnRpdHlQcm9wTm9kZVtdID0gZmlsdGVyUHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZTogXCJwbGFpblwiIGFzIGNvbnN0LFxuICAgICAgICBwcm9wLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJCb2R5ID0gcHJvcE5vZGVzXG4gICAgICAubWFwKChwcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpKVxuICAgICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgICAvLyBGaWx0ZXJRdWVyeSDtg4DsnoXsnYQg7JyE7ZWcIOygnOyZuO2VoCBwcm9wcyDstpTstpwgKHZpcnR1YWzrp4wg7KCc7Jm4KVxuICAgIGNvbnN0IGV4Y2x1ZGVkUHJvcHMgPSBlbnRpdHkucHJvcHMuZmlsdGVyKChwKSA9PiBwLnR5cGUgPT09IFwidmlydHVhbFwiKS5tYXAoKHApID0+IHAubmFtZSk7XG5cbiAgICAvLyBudW1lcmljIO2DgOyeheyduCBwcm9wcyDstpTstpxcbiAgICBjb25zdCBudW1lcmljUHJvcHMgPSBlbnRpdHkucHJvcHMuZmlsdGVyKChwKSA9PiBwLnR5cGUgPT09IFwibnVtZXJpY1wiKTtcblxuICAgIC8vIEFwcGx5U29uYW11RmlsdGVyIO2DgOyehSDsnbjsnpAg7IOd7ISxXG4gICAgY29uc3QgZW50aXR5VHlwZSA9IGAke2VudGl0eS5pZH1CYXNlU2NoZW1hYDtcbiAgICBjb25zdCBudW1lcmljS2V5c1VuaW9uID1cbiAgICAgIG51bWVyaWNQcm9wcy5sZW5ndGggPiAwID8gbnVtZXJpY1Byb3BzLm1hcCgocHJvcCkgPT4gYFwiJHtwcm9wLm5hbWV9XCJgKS5qb2luKFwiIHwgXCIpIDogXCJuZXZlclwiO1xuICAgIGNvbnN0IG9taXRLZXlzVW5pb24gPVxuICAgICAgZXhjbHVkZWRQcm9wcy5sZW5ndGggPiAwID8gZXhjbHVkZWRQcm9wcy5tYXAoKG4pID0+IGBcIiR7bn1cImApLmpvaW4oXCIgfCBcIikgOiBcIm5ldmVyXCI7XG5cbiAgICAvLyBQSyDtg4DsnoXsl5Ag65Sw66W4IGlkIFpvZCDtg4DsnoUg6rKw7KCVXG4gICAgY29uc3QgcGtUeXBlID0gZW50aXR5LmdldFBrVHlwZSgpO1xuICAgIGNvbnN0IGlkWm9kVHlwZSA9XG4gICAgICBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIlxuICAgICAgICA/IFwiekFycmF5YWJsZSh6LnN0cmluZygpKVwiXG4gICAgICAgIDogXCJ6QXJyYXlhYmxlKHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKSlcIjtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSBgXG56Lm9iamVjdCh7XG4gIG51bTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICBwYWdlOiB6Lm51bWJlcigpLmludCgpLm1pbigxKSxcbiAgc2VhcmNoOiAke2VudGl0eS5pZH1TZWFyY2hGaWVsZCxcbiAga2V5d29yZDogei5zdHJpbmcoKSxcbiAgb3JkZXJCeTogJHtlbnRpdHkuaWR9T3JkZXJCeSxcbiAgcXVlcnlNb2RlOiBTb25hbXVRdWVyeU1vZGUsXG4gIGlkOiAke2lkWm9kVHlwZX0sXG4gIHNvbmFtdUZpbHRlcjogei5jdXN0b208QXBwbHlTb25hbXVGaWx0ZXI8JHtlbnRpdHlUeXBlfSwgJHtvbWl0S2V5c1VuaW9ufSwgJHtudW1lcmljS2V5c1VuaW9ufT4+KCksJHtmaWx0ZXJCb2R5fVxufSkucGFydGlhbCgpO1xuYC50cmltKCk7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7c2NoZW1hQm9keX07YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT47YCxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZUxpc3RQYXJhbXM6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBpbXBvcnRLZXlzLFxuICAgICAgbGluZXMsXG4gICAgfTtcbiAgfVxuXG4gIGdldFN1YnNldFNvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHkpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNldEtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cyk7XG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgICAuLi5zdWJzZXRLZXlzLmZsYXRNYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAvLyDshJzruIzshYvsl5DshJwgRmllbGRFeHByW10g6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGZpZWxkRXhwcnMgPSBlbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldO1xuXG4gICAgICAgIC8vIEZpZWxkRXhwcltd66GcIEVudGl0eVByb3BOb2RlW10g6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IHByb3BOb2RlcyA9IGVudGl0eS5maWVsZEV4cHJzVG9Qcm9wTm9kZXMoZmllbGRFeHBycyk7XG4gICAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldCR7c3Vic2V0S2V5fWA7XG4gICAgICAgIGNvbnN0IHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSA9IHtcbiAgICAgICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBjaGlsZHJlbjogcHJvcE5vZGVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEVudGl0eVByb3BOb2RlW13roZwgWm9kVHlwZURlZihzdHJpbmcp7J2EIOqwgOyguOyYtFxuICAgICAgICBjb25zdCBib2R5ID0gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtib2R5LnJlcGxhY2UoLywkLywgXCJcIil9O2AsXG4gICAgICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgICAgICBdO1xuICAgICAgfSksXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldE1hcHBpbmcgPSB7YCxcbiAgICAgIC4uLnN1YnNldEtleXMubWFwKChzdWJzZXRLZXkpID0+IGAgICR7c3Vic2V0S2V5fTogJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldCR7c3Vic2V0S2V5fTtgKSxcbiAgICAgIFwifTtcIixcbiAgICAgIGBleHBvcnQgY29uc3QgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouZW51bShbJHtzdWJzZXRLZXlzXG4gICAgICAgIC5tYXAoKGspID0+IGBcIiR7a31cImApXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXkgPSB6LmluZmVyPHR5cGVvZiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5PjtgLFxuICAgICAgXCJcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgU3Vic2V0czogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGxpbmVzLFxuICAgICAgaW1wb3J0S2V5czogdW5pcXVlKGltcG9ydEtleXMpLFxuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O1VBSW1DO3FCQUV5QjtZQUNsQjtZQUNnQztZQUUxQjtlQUNUO29CQUNtRDtBQU8xRixJQUFhLHNCQUFiLGNBQXlDLFNBQVM7Q0FDaEQsY0FBYztBQUNaLFFBQU0sWUFBWTs7Q0FHcEIsbUJBQW1CO0VBQ2pCLE1BQU0sRUFBRSxRQUFRLE9BQU8sT0FBTztBQUM5QixTQUFPO0dBQ0wsUUFBUSxHQUFHLElBQUk7R0FDZixNQUFNO0dBQ1A7O0NBRUgsU0FBUztFQUNQLE1BQU0sWUFBWSxjQUFjLFdBQVc7RUFDM0MsTUFBTSxXQUFXLFVBQVUsS0FBSyxPQUFPLGNBQWMsSUFBSSxHQUFHLENBQUM7RUFHN0QsTUFBTSxjQUFjLFNBQVMsU0FBUyxXQUFXO0FBQy9DLFVBQU87SUFDTCxLQUFLLG1CQUFtQixPQUFPO0lBQy9CLEtBQUssd0JBQXdCLE9BQU87SUFDcEMsS0FBSyw0QkFBNEIsT0FBTztJQUN4QyxLQUFLLG9CQUFvQixPQUFPO0lBQ2pDLENB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
|
|
241
|
+
|
|
242
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IGlzVmlydHVhbENvZGVQcm9wLCBpc1ZpcnR1YWxRdWVyeVByb3AgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5SW5kZXgsIHR5cGUgRW50aXR5UHJvcE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IG5vbk51bGxhYmxlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgQlVJTFRfSU5fVFlQRVMsIHByb3BOb2RlVG9ab2RUeXBlRGVmLCB6b2RUeXBlVG9ab2RDb2RlIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IHR5cGUgU291cmNlQ29kZSA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGluZXM6IHN0cmluZ1tdO1xuICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbn07XG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJnZW5lcmF0ZWRcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgc29uYW11LmdlbmVyYXRlZC50c2AsXG4gICAgfTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBjb25zdCBlbnRpdGllcyA9IGVudGl0eUlkcy5tYXAoKGlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChpZCkpO1xuXG4gICAgLy8g7KCE7LK0IFNvdXJjZUNvZGUg7IOd7ISxXG4gICAgY29uc3Qgc291cmNlQ29kZXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMuZ2V0RW51bXNTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRCYXNlTGlzdFBhcmFtc1NvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICBdLmZpbHRlcihub25OdWxsYWJsZSk7XG4gICAgfSk7XG4gICAgTmFpdGUudChcIlRlbXBsYXRlX19nZW5lcmF0ZWQ6c291cmNlQ29kZXNcIiwgc291cmNlQ29kZXMpO1xuXG4gICAgLy8gU29ydFxuICAgIGNvbnN0IExBQkVMX0tFWV9PUkRFUiA9IFtcIkVudW1zXCIsIFwiQmFzZVNjaGVtYVwiLCBcIkJhc2VMaXN0UGFyYW1zXCIsIFwiU3Vic2V0c1wiLCBcIlN1YnNldFF1ZXJpZXNcIl07XG4gICAgc291cmNlQ29kZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgW2FLZXldID0gYS5sYWJlbC5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBbYktleV0gPSBiLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IGFJbmRleCA9IExBQkVMX0tFWV9PUkRFUi5pbmRleE9mKGFLZXkpO1xuICAgICAgY29uc3QgYkluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYktleSk7XG4gICAgICBpZiAoYUluZGV4ID4gYkluZGV4KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChhSW5kZXggPCBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gc291cmNlQ29kZXMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgdHMpID0+IHtcbiAgICAgICAgaWYgKHRzID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmVzOiBbLi4ucmVzdWx0LmxpbmVzLCBgLy8gJHt0cy5sYWJlbH1gLCAuLi50cy5saW5lcywgXCJcIl0sXG4gICAgICAgICAgaW1wb3J0S2V5czogdW5pcXVlKFsuLi5yZXN1bHQuaW1wb3J0S2V5cywgLi4udHMuaW1wb3J0S2V5c10udG9Tb3J0ZWQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj4sXG4gICAgKTtcblxuICAgIC8vIC50eXBlcy50c+ydmCDtg4DsnoXsnYQg7LC47KGw7ZWY64qUIOqyveyasCDsiJztmZjssLjsobAo7IOB7Zi47LC47KGwKeqwgCDrsJzsg53tlZjrr4DroZwg7YOA7J6F7J2EIOqwgOyguOyZgCDsnbjrnbzsnbgg7LKY66asXG4gICAgY29uc3QgYWxsVHlwZUtleXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IE9iamVjdC5rZXlzKGVudGl0eS50eXBlcykpO1xuICAgIGNvbnN0IGNkSW1wb3J0S2V5cyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT5cbiAgICAgIGFsbFR5cGVLZXlzLmluY2x1ZGVzKGltcG9ydEtleSksXG4gICAgKTtcbiAgICBpZiAoY2RJbXBvcnRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1c3RvbVNjYWxhckxpbmVzID0gY2RJbXBvcnRLZXlzLmZsYXRNYXAoKGltcG9ydEtleSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllcy5maW5kKChlbnRpdHkpID0+IGVudGl0eS50eXBlc1tpbXBvcnRLZXldKTtcbiAgICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFpvZFR5cGUgbm90IGZvdW5kICR7aW1wb3J0S2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBlbnRpdHkudHlwZXNbaW1wb3J0S2V5XTtcbiAgICAgICAgYXNzZXJ0KHpvZFR5cGUpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYC8vIEN1c3RvbVNjYWxhcjogJHtpbXBvcnRLZXl9YCxcbiAgICAgICAgICBgY29uc3QgJHtpbXBvcnRLZXl9ID0gJHt6b2RUeXBlVG9ab2RDb2RlKHpvZFR5cGUsIHNvdXJjZUNvZGUuaW1wb3J0S2V5cyl9O2AsXG4gICAgICAgICAgYHR5cGUgJHtpbXBvcnRLZXl9ID0gei5pbmZlcjx0eXBlb2YgJHtpbXBvcnRLZXl9PmAsXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgICAgc291cmNlQ29kZS5saW5lcyA9IFsuLi5jdXN0b21TY2FsYXJMaW5lcywgLi4uc291cmNlQ29kZS5saW5lc107XG4gICAgICBzb3VyY2VDb2RlLmltcG9ydEtleXMgPSB1bmlxdWUoXG4gICAgICAgIHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT4gIWNkSW1wb3J0S2V5cy5pbmNsdWRlcyhpbXBvcnRLZXkpKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IHNvdXJjZUNvZGUubGluZXMuam9pbihcIlxcblwiKTtcbiAgICBOYWl0ZS50KFwiVGVtcGxhdGVfX2dlbmVyYXRlZDpib2R5XCIsIGJvZHkpO1xuXG4gICAgLy8gaW1wb3J0XG4gICAgLy8gc291cmNlQ29kZS5pbXBvcnRLZXlz7JeQIOuCtOyepSDtg4DsnoXsnZgg7Iqk7YKk66eI6rCAIOyeiOycvOuptCBzb25hbXUgaW1wb3J07JeQIOy2lOqwgFxuICAgIGNvbnN0IGJ1aWx0SW5TY2hlbWFOYW1lcyA9IE9iamVjdC52YWx1ZXMoQlVJTFRfSU5fVFlQRVMpLm1hcChcbiAgICAgIChpbmZvKSA9PiBpbmZvLnNjaGVtYU5hbWUgYXMgc3RyaW5nLFxuICAgICk7XG4gICAgY29uc3QgYnVpbHRJblNjaGVtYXMgPSBzb3VyY2VDb2RlLmltcG9ydEtleXMuZmlsdGVyKChrZXkpID0+IGJ1aWx0SW5TY2hlbWFOYW1lcy5pbmNsdWRlcyhrZXkpKTtcbiAgICBjb25zdCBzb25hbXVJbXBvcnRzID0gW1xuICAgICAgXCJ6QXJyYXlhYmxlXCIsXG4gICAgICBcIlNRTERhdGVUaW1lU3RyaW5nXCIsXG4gICAgICBcIlN1YnNldFF1ZXJ5XCIsXG4gICAgICBcIlNvbmFtdVF1ZXJ5TW9kZVwiLFxuICAgICAgXCJBcHBseVNvbmFtdUZpbHRlclwiLFxuICAgICAgLi4uYnVpbHRJblNjaGVtYXMsXG4gICAgXS5maWx0ZXIoKG1vZCkgPT4gYm9keS5pbmNsdWRlcyhtb2QpKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBzb3VyY2VDb2RlLmltcG9ydEtleXMsXG4gICAgICBjdXN0b21IZWFkZXJzOiBbXG4gICAgICAgIFwiLyoqXCIsXG4gICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICBcIiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgICBcIiAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBcIi8qIG94bGludC1kaXNhYmxlICovXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIGBpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztgLFxuICAgICAgICBgaW1wb3J0IHsgJHtzb25hbXVJbXBvcnRzLmpvaW4oXCIsXCIpfSB9IGZyb20gXCJzb25hbXVcIjtgLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0RW51bXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChPYmplY3Qua2V5cyhlbnRpdHkuZW51bUxhYmVscykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgRW51bXM6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBsaW5lczogT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpXG4gICAgICAgIC5maWx0ZXIoKFtfLCBlbnVtTGFiZWxdKSA9PiBPYmplY3Qua2V5cyhlbnVtTGFiZWwpLmxlbmd0aCA+IDApXG4gICAgICAgIC5mbGF0TWFwKChbZW51bUlkLCBlbnVtTGFiZWxdKSA9PiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH0gPSB6LmVudW0oWyR7T2JqZWN0LmtleXMoZW51bUxhYmVsKS5tYXAoXG4gICAgICAgICAgICAoZWwpID0+IGBcIiR7ZWx9XCJgLFxuICAgICAgICAgICl9XSkuZGVzY3JpYmUoXCIke2VudW1JZH1cIik7YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtlbnVtSWR9ID0gei5pbmZlcjx0eXBlb2YgJHtlbnVtSWR9PjtgLFxuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9TGFiZWwgPSAke0pTT04uc3RyaW5naWZ5KGVudW1MYWJlbCl9O2AsXG4gICAgICAgIF0pLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5LCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdKTogU291cmNlQ29kZSB7XG4gICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9QmFzZVNjaGVtYWA7XG4gICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbjogZW50aXR5LnByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIsXG4gICAgICAgICAgcHJvcCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWFCb2R5ID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcbiAgICAgIGlmIChyZXN1bHQuZW5kc1dpdGgoXCIsXCIpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pKCk7XG5cbiAgICAvLyBmdWxsdGV4dCBpbmRleOyXkCDtj6ztlajrkJwg7Lus65+865OkIOy2lOy2nFxuICAgIC8vIFRPRE86IEdJTi9HaVNUIOyduOuNseyKpCDsg53shLHrkJwg7Lus65+8IOy2lOy2nFxuICAgIGNvbnN0IGZ1bGx0ZXh0Q29sdW1uczogRW50aXR5SW5kZXhbXCJjb2x1bW5zXCJdW10gPSBbXTtcblxuICAgIC8vIHZpcnR1YWwgcHJvcHMgKHZpcnR1YWxUeXBlOiBcImNvZGVcIiDrmJDripQgdW5kZWZpbmVk7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFByb3BzID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBpc1ZpcnR1YWxDb2RlUHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvLyBxdWVyeSB2aXJ0dWFsIHByb3BzICh2aXJ0dWFsVHlwZTogXCJxdWVyeVwi7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFF1ZXJ5UHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbFF1ZXJ5UHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBoYXNEZWZhdWx0IHByb3BzXG4gICAgICogLSBudWxsYWJsZSDrmJDripQgZGJEZWZhdWx06rCAIOyeiOuKlCDsu6zrn7wgKGlkIO2PrO2VqClcbiAgICAgKiAtIHJlbGF0aW9u7J20IOyVhOuLiOqxsOuCmCwgcmVsYXRpb27snbTslrTrj4QgbnVsbGFibGXsnbTrqbQg7Y+s7ZWoXG4gICAgICovXG4gICAgY29uc3QgaGFzRGVmYXVsdENvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PlxuICAgICAgICAgIChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiB8fCBwcm9wLm51bGxhYmxlID09PSB0cnVlKSAmJlxuICAgICAgICAgIChwcm9wLm51bGxhYmxlID09PSB0cnVlIHx8IChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiBwcm9wLmRiRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSksXG4gICAgICApXG4gICAgICAubWFwKChwcm9wKSA9PiAocHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgPyBgJHtwcm9wLm5hbWV9X2lkYCA6IHByb3AubmFtZSkpXG4gICAgICAuY29uY2F0KFwiaWRcIik7XG5cbiAgICAvKipcbiAgICAgKiBoYXNWZWN0b3IgcHJvcHNcbiAgICAgKiAtIHZlY3RvciDtg4DsnoXsnbgg7Lus65+8XG4gICAgICovXG4gICAgY29uc3QgaGFzVmVjdG9yQ29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gcHJvcC50eXBlID09PSBcInZlY3RvclwiIHx8IHByb3AudHlwZSA9PT0gXCJ2ZWN0b3JbXVwiKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlZCBwcm9wc1xuICAgICAqIC0gZ2VuZXJhdGVkIOyGjeyEseydtCDsnojripQg7Lus65+8IChJTlNFUlQvVVBEQVRFIOyLnCDqsJIg7KCc6rO1IOu2iOqwgClcbiAgICAgKi9cbiAgICBjb25zdCBnZW5lcmF0ZWRDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT5cbiAgICAgICAgICBwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiAocHJvcC5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCB8fCBwcm9wLnR5cGUgPT09IFwic2VhcmNoVGV4dFwiKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICBjb25zdCBoYXNNZXRhZGF0YSA9XG4gICAgICBmdWxsdGV4dENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgdmlydHVhbFByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIGhhc0RlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIGdlbmVyYXRlZENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgaGFzVmVjdG9yQ29sdW1ucy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9O2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+YCArXG4gICAgICAgIChoYXNNZXRhZGF0YVxuICAgICAgICAgID8gYCAmIHske1xuICAgICAgICAgICAgICAoZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2Z1bGx0ZXh0X186IHJlYWRvbmx5IFske2Z1bGx0ZXh0Q29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192aXJ0dWFsX186IHJlYWRvbmx5IFske3ZpcnR1YWxQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcH1cImApLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZpcnR1YWxfcXVlcnlfXzogcmVhZG9ubHkgWyR7dmlydHVhbFF1ZXJ5UHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3B9XCJgKS5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChoYXNEZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IFske2hhc0RlZmF1bHRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoZ2VuZXJhdGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19nZW5lcmF0ZWRfXzogcmVhZG9ubHkgWyR7Z2VuZXJhdGVkQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGhhc1ZlY3RvckNvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmVjdG9yX186IHJlYWRvbmx5IFske2hhc1ZlY3RvckNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKVxuICAgICAgICAgICAgfX1gXG4gICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgIFwiO1wiLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBCYXNlU2NoZW1hOiAke2VudGl0eS5pZH1gLFxuICAgICAgaW1wb3J0S2V5cyxcbiAgICAgIGxpbmVzLFxuICAgIH07XG4gIH1cblxuICBnZXRCYXNlTGlzdFBhcmFtc1NvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHkpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgLy8gUHJvcCDsl4bripQgTUTsnbgg6rK97JqwIOyDneyEsSDsoJzsmbhcbiAgICBpZiAoZW50aXR5LnByb3BzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChlbnRpdHkucGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9QmFzZUxpc3RQYXJhbXNgO1xuXG4gICAgY29uc3QgZmlsdGVyUHJvcHMgPSBlbnRpdHkucHJvcHMuZmlsdGVyKChwcm9wKSA9PiBwcm9wLnRvRmlsdGVyID09PSB0cnVlKTtcblxuICAgIGNvbnN0IHByb3BOb2RlczogRW50aXR5UHJvcE5vZGVbXSA9IGZpbHRlclByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIiBhcyBjb25zdCxcbiAgICAgICAgcHJvcCxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGltcG9ydEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZmlsdGVyQm9keSA9IHByb3BOb2Rlc1xuICAgICAgLm1hcCgocHJvcE5vZGUpID0+IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKSlcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gICAgLy8gRmlsdGVyUXVlcnkg7YOA7J6F7J2EIOychO2VnCDsoJzsmbjtlaAgcHJvcHMg7LaU7LacICh2aXJ0dWFs66eMIOygnOyZuClcbiAgICBjb25zdCBleGNsdWRlZFByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocCkgPT4gcC50eXBlID09PSBcInZpcnR1YWxcIikubWFwKChwKSA9PiBwLm5hbWUpO1xuXG4gICAgLy8gbnVtZXJpYyDtg4DsnoXsnbggcHJvcHMg7LaU7LacXG4gICAgY29uc3QgbnVtZXJpY1Byb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocCkgPT4gcC50eXBlID09PSBcIm51bWVyaWNcIik7XG5cbiAgICAvLyBBcHBseVNvbmFtdUZpbHRlciDtg4DsnoUg7J247J6QIOyDneyEsVxuICAgIGNvbnN0IGVudGl0eVR5cGUgPSBgJHtlbnRpdHkuaWR9QmFzZVNjaGVtYWA7XG4gICAgY29uc3QgbnVtZXJpY0tleXNVbmlvbiA9XG4gICAgICBudW1lcmljUHJvcHMubGVuZ3RoID4gMCA/IG51bWVyaWNQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcC5uYW1lfVwiYCkuam9pbihcIiB8IFwiKSA6IFwibmV2ZXJcIjtcbiAgICBjb25zdCBvbWl0S2V5c1VuaW9uID1cbiAgICAgIGV4Y2x1ZGVkUHJvcHMubGVuZ3RoID4gMCA/IGV4Y2x1ZGVkUHJvcHMubWFwKChuKSA9PiBgXCIke259XCJgKS5qb2luKFwiIHwgXCIpIDogXCJuZXZlclwiO1xuXG4gICAgLy8gUEsg7YOA7J6F7JeQIOuUsOuluCBpZCBab2Qg7YOA7J6FIOqysOyglVxuICAgIGNvbnN0IHBrVHlwZSA9IGVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICBjb25zdCBpZFpvZFR5cGUgPVxuICAgICAgcGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCJcbiAgICAgICAgPyBcInpBcnJheWFibGUoei5zdHJpbmcoKSlcIlxuICAgICAgICA6IFwiekFycmF5YWJsZSh6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkpXCI7XG5cbiAgICBjb25zdCBzY2hlbWFCb2R5ID0gYFxuei5vYmplY3Qoe1xuICBudW06IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgcGFnZTogei5udW1iZXIoKS5pbnQoKS5taW4oMSksXG4gIHNlYXJjaDogJHtlbnRpdHkuaWR9U2VhcmNoRmllbGQsXG4gIGtleXdvcmQ6IHouc3RyaW5nKCksXG4gIG9yZGVyQnk6ICR7ZW50aXR5LmlkfU9yZGVyQnksXG4gIHF1ZXJ5TW9kZTogU29uYW11UXVlcnlNb2RlLFxuICBpZDogJHtpZFpvZFR5cGV9LFxuICBzb25hbXVGaWx0ZXI6IHouY3VzdG9tPEFwcGx5U29uYW11RmlsdGVyPCR7ZW50aXR5VHlwZX0sICR7b21pdEtleXNVbmlvbn0sICR7bnVtZXJpY0tleXNVbmlvbn0+PigpLCR7ZmlsdGVyQm9keX1cbn0pLnBhcnRpYWwoKTtcbmAudHJpbSgpO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9O2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+O2AsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEJhc2VMaXN0UGFyYW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgaW1wb3J0S2V5cyxcbiAgICAgIGxpbmVzLFxuICAgIH07XG4gIH1cblxuICBnZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGVudGl0eS5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJzZXRLZXlzID0gT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpO1xuICAgIGNvbnN0IGltcG9ydEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICAgLi4uc3Vic2V0S2V5cy5mbGF0TWFwKChzdWJzZXRLZXkpID0+IHtcbiAgICAgICAgLy8g7ISc67iM7IWL7JeQ7IScIEZpZWxkRXhwcltdIOqwgOyguOyYtFxuICAgICAgICBjb25zdCBmaWVsZEV4cHJzID0gZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcblxuICAgICAgICAvLyBGaWVsZEV4cHJbXeuhnCBFbnRpdHlQcm9wTm9kZVtdIOqwgOyguOyYtFxuICAgICAgICBjb25zdCBwcm9wTm9kZXMgPSBlbnRpdHkuZmllbGRFeHByc1RvUHJvcE5vZGVzKGZpZWxkRXhwcnMpO1xuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXQke3N1YnNldEtleX1gO1xuICAgICAgICBjb25zdCBwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgY2hpbGRyZW46IHByb3BOb2RlcyxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBFbnRpdHlQcm9wTm9kZVtd66GcIFpvZFR5cGVEZWYoc3RyaW5nKeydhCDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgYm9keSA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7Ym9keS5yZXBsYWNlKC8sJC8sIFwiXCIpfTtgLFxuICAgICAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT47YCxcbiAgICAgICAgXTtcbiAgICAgIH0pLFxuICAgICAgYGV4cG9ydCB0eXBlICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRNYXBwaW5nID0ge2AsXG4gICAgICAuLi5zdWJzZXRLZXlzLm1hcCgoc3Vic2V0S2V5KSA9PiBgICAke3N1YnNldEtleX06ICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXQke3N1YnNldEtleX07YCksXG4gICAgICBcIn07XCIsXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXkgPSB6LmVudW0oWyR7c3Vic2V0S2V5c1xuICAgICAgICAubWFwKChrKSA9PiBgXCIke2t9XCJgKVxuICAgICAgICAuam9pbihcIixcIil9XSk7YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5pbmZlcjx0eXBlb2YgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleT47YCxcbiAgICAgIFwiXCIsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYFN1YnNldHM6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBsaW5lcyxcbiAgICAgIGltcG9ydEtleXM6IHVuaXF1ZShpbXBvcnRLZXlzKSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1NBSWtDO29CQUV5QjtXQUNsQjtXQUNnQztXQUUxQjtjQUNUO21CQUNtRDtBQU96RixJQUFhLHNCQUFiLGNBQXlDLFNBQVM7Q0FDaEQsY0FBYztFQUNaLE1BQU0sV0FBVztDQUNuQjtDQUVBLG1CQUFtQjtFQUNqQixNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87RUFDOUIsT0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTTtFQUNSO0NBQ0Y7Q0FDQSxTQUFTO0VBRVAsTUFBTSxXQURZLGNBQWMsVUFDZixDQUFBLENBQVUsS0FBSyxPQUFPLGNBQWMsSUFBSSxFQUFFLENBQUM7RUFHNUQsTUFBTSxjQUFjLFNBQVMsU0FBUyxXQUFXO0dBQy9DLE9BQU87SUFDTCxLQUFLLG1CQUFtQixNQUFNO0lBQzlCLEtBQUssd0JBQXdCLE1BQU07SUFDbkMsS0FBSyw0QkFBNEIsTUFBTTtJQUN2QyxLQUFLLG9CQUFvQixNQUFNO0dBQ2pDLENBQUMsQ0FBQyxPQUFPLFdBQVc7RUFDdEIsQ0FBQztFQUNELE1BQU0sRUFBRSxtQ0FBbUMsV0FBVztFQUd0RCxNQUFNLGtCQUFrQjtHQUFDO0dBQVM7R0FBYztHQUFrQjtHQUFXO0VBQWU7RUFDNUYsWUFBWSxNQUFNLEdBQUcsTUFBTTtHQUN6QixNQUFNLENBQUMsUUFBUSxFQUFF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
|