sonamu 0.11.16 → 0.13.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 +1 -2
- package/dist/ai/agents/agent.js +2 -3
- package/dist/ai/agents/index.js +1 -2
- package/dist/ai/index.js +1 -2
- package/dist/ai/providers/rtzr/api.js +1 -2
- package/dist/ai/providers/rtzr/error.js +2 -3
- package/dist/ai/providers/rtzr/model.js +1 -2
- package/dist/ai/providers/rtzr/options.js +1 -2
- package/dist/ai/providers/rtzr/provider.js +1 -2
- package/dist/ai/providers/rtzr/utils.js +1 -2
- package/dist/api/base-frame.js +4 -4
- package/dist/api/caster.d.ts +1 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +9 -9
- package/dist/api/code-converters.js +6 -5
- package/dist/api/config.d.ts +1 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +2 -3
- package/dist/api/context.d.ts +2 -3
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +2 -3
- package/dist/api/decorators.js +2 -3
- package/dist/api/http-validator.js +2 -3
- package/dist/api/index.js +8 -3
- package/dist/api/secret.js +1 -2
- package/dist/api/sonamu.d.ts +3 -5
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +30 -24
- package/dist/api/validator.js +1 -2
- package/dist/api/websocket-helpers.js +2 -3
- package/dist/auth/audit-log/builders.js +1 -2
- package/dist/auth/audit-log/client-ip.js +2 -3
- package/dist/auth/audit-log/events.js +1 -2
- package/dist/auth/audit-log/plugin.d.ts.map +1 -1
- package/dist/auth/audit-log/plugin.js +2 -3
- package/dist/auth/audit-log-ingestor.js +2 -3
- package/dist/auth/auth-generator.js +2 -3
- package/dist/auth/better-auth-entities.js +1 -2
- package/dist/auth/better-auth-request.js +2 -3
- package/dist/auth/index.js +2 -3
- package/dist/auth/knex-adapter.js +2 -3
- package/dist/auth/plugins/entity-definitions/admin.js +1 -2
- package/dist/auth/plugins/entity-definitions/anonymous.js +1 -2
- package/dist/auth/plugins/entity-definitions/api-key.js +1 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +1 -2
- package/dist/auth/plugins/entity-definitions/index.js +1 -2
- package/dist/auth/plugins/entity-definitions/jwt.js +1 -2
- package/dist/auth/plugins/entity-definitions/organization.js +1 -2
- package/dist/auth/plugins/entity-definitions/passkey.js +1 -2
- package/dist/auth/plugins/entity-definitions/phone-number.js +1 -2
- package/dist/auth/plugins/entity-definitions/sso.js +1 -2
- package/dist/auth/plugins/entity-definitions/two-factor.js +1 -2
- package/dist/auth/plugins/entity-definitions/username.js +1 -2
- package/dist/auth/plugins/wrappers/admin.d.ts +33 -32
- package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
- 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/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.d.ts +43 -1
- package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/phone-number.js +2 -3
- package/dist/auth/plugins/wrappers/sso.d.ts +138 -187
- package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/sso.js +1 -2
- package/dist/auth/plugins/wrappers/two-factor.d.ts +51 -10
- package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/two-factor.js +2 -3
- package/dist/auth/plugins/wrappers/username.d.ts +39 -5
- package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/username.js +2 -3
- package/dist/bin/build-config.js +5 -5
- package/dist/bin/compiler-policy.js +2 -3
- package/dist/bin/fixture.js +7 -5
- package/dist/bin/hmr-hook-register.js +1 -2
- package/dist/bin/migrate-targets.js +2 -3
- package/dist/bin/test-command.js +2 -3
- package/dist/bin/ts-loader-register.js +2 -3
- package/dist/bin/ts-loader-registration.js +2 -3
- package/dist/bin/typecheck-web.js +2 -3
- package/dist/cache/cache-manager.js +1 -2
- package/dist/cache/decorator.js +2 -3
- package/dist/cache/drivers.js +1 -2
- package/dist/cache/index.js +2 -3
- package/dist/cache-control/cache-control.js +1 -2
- package/dist/code-formatting/index.js +2 -3
- package/dist/code-formatting/oxfmt.js +2 -3
- package/dist/code-formatting/oxlint.js +2 -3
- package/dist/compress/compress.js +1 -2
- package/dist/compress/index.js +2 -2
- package/dist/compress/types.d.ts +1 -1
- package/dist/compress/types.d.ts.map +1 -1
- package/dist/cone/cone-generator.js +2 -3
- package/dist/database/_batch_update.js +1 -2
- package/dist/database/base-model.js +4 -4
- package/dist/database/db.js +4 -4
- package/dist/database/knex.js +2 -3
- package/dist/database/puri-wrapper.js +2 -3
- package/dist/database/puri.js +23 -22
- package/dist/database/puri.types.js +1 -2
- package/dist/database/transaction-context.js +1 -2
- package/dist/database/upsert-builder.js +2 -3
- package/dist/dict/en.js +2 -3
- package/dist/dict/index.js +3 -3
- package/dist/dict/ko.js +2 -3
- package/dist/dict/rc-keys.js +1 -2
- package/dist/dict/sd.js +2 -3
- package/dist/dict/sonamu-dictionary.js +7 -6
- package/dist/dict/utils.js +2 -3
- package/dist/entity/entity-manager.d.ts +66 -66
- package/dist/entity/entity-manager.js +4 -4
- package/dist/entity/entity-template-cone.js +2 -3
- package/dist/entity/entity.js +21 -18
- package/dist/env.js +1 -2
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +2 -3
- package/dist/exceptions/so-exceptions.js +2 -3
- package/dist/filter/index.js +3 -2
- package/dist/filter/types.js +1 -2
- package/dist/filter/utils.js +7 -6
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -6
- package/dist/logger/category.js +2 -3
- package/dist/logger/configure.js +5 -5
- package/dist/migration/code-generation.js +23 -16
- package/dist/migration/index-where-predicate.js +2 -3
- package/dist/migration/migration-set.js +2 -3
- package/dist/migration/migrator.js +2 -3
- package/dist/migration/postgresql-schema-reader.js +6 -9
- package/dist/migration/slack-confirm.js +2 -3
- package/dist/naite/naite-reporter.js +2 -3
- package/dist/naite/naite.js +10 -8
- package/dist/runtime-type.js +2 -3
- package/dist/ssr/hmr-opt-out.js +1 -2
- package/dist/ssr/index.js +7 -4
- package/dist/ssr/registry.js +1 -2
- package/dist/ssr/renderer.js +2 -3
- package/dist/storage/base-file.js +1 -2
- package/dist/storage/buffered-file.js +2 -3
- package/dist/storage/drivers.js +1 -2
- package/dist/storage/index.js +2 -3
- package/dist/storage/s3-driver.js +1 -2
- package/dist/storage/storage-manager.js +2 -3
- package/dist/storage/uploaded-file.js +2 -3
- package/dist/stream/__tests__/ws-test-helpers.d.ts +108 -0
- package/dist/stream/__tests__/ws-test-helpers.d.ts.map +1 -0
- package/dist/stream/__tests__/ws-test-helpers.js +259 -0
- package/dist/stream/index.d.ts +1 -0
- package/dist/stream/index.d.ts.map +1 -1
- package/dist/stream/index.js +15 -4
- package/dist/stream/sse.js +1 -2
- package/dist/stream/ws-audience-resolver.d.ts +8 -5
- package/dist/stream/ws-audience-resolver.d.ts.map +1 -1
- package/dist/stream/ws-audience-resolver.js +17 -15
- package/dist/stream/ws-audience.js +1 -2
- package/dist/stream/ws-cluster-bus.d.ts +9 -4
- package/dist/stream/ws-cluster-bus.d.ts.map +1 -1
- package/dist/stream/ws-cluster-bus.js +2 -3
- package/dist/stream/ws-core.d.ts +10 -0
- package/dist/stream/ws-core.d.ts.map +1 -1
- package/dist/stream/ws-delivery.d.ts +30 -4
- package/dist/stream/ws-delivery.d.ts.map +1 -1
- package/dist/stream/ws-delivery.js +200 -54
- package/dist/stream/ws-frame.d.ts +15 -0
- package/dist/stream/ws-frame.d.ts.map +1 -0
- package/dist/stream/ws-frame.js +28 -0
- package/dist/stream/ws-local-connection-store.d.ts +4 -4
- package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
- package/dist/stream/ws-local-connection-store.js +3 -4
- package/dist/stream/ws-presence-index.d.ts +36 -0
- package/dist/stream/ws-presence-index.d.ts.map +1 -0
- package/dist/stream/ws-presence-index.js +176 -0
- package/dist/stream/ws-presence-store.d.ts +39 -39
- package/dist/stream/ws-presence-store.d.ts.map +1 -1
- package/dist/stream/ws-presence-store.js +23 -154
- package/dist/stream/ws-registry.d.ts +45 -17
- package/dist/stream/ws-registry.d.ts.map +1 -1
- package/dist/stream/ws-registry.js +170 -62
- package/dist/stream/ws-session-id.d.ts +14 -0
- package/dist/stream/ws-session-id.d.ts.map +1 -0
- package/dist/stream/ws-session-id.js +36 -0
- package/dist/stream/ws-telemetry-memory.js +3 -4
- package/dist/stream/ws-telemetry-trace.js +1 -2
- package/dist/stream/ws-telemetry.js +2 -3
- package/dist/stream/ws.d.ts +20 -10
- package/dist/stream/ws.d.ts.map +1 -1
- package/dist/stream/ws.js +60 -38
- package/dist/syncer/api-parser.js +2 -3
- package/dist/syncer/checksum.js +4 -4
- package/dist/syncer/code-generator.js +4 -4
- package/dist/syncer/entity-operations.js +2 -3
- package/dist/syncer/event-batcher.js +1 -2
- package/dist/syncer/file-copy.js +2 -3
- package/dist/syncer/file-patterns.js +2 -3
- package/dist/syncer/file-tracking.js +2 -3
- package/dist/syncer/filesystem-dependencies.js +1 -2
- package/dist/syncer/index.js +8 -2
- package/dist/syncer/module-loader.js +8 -6
- package/dist/syncer/syncer-actions.js +8 -7
- package/dist/syncer/syncer.js +13 -8
- package/dist/syncer/watcher.js +2 -3
- package/dist/tasks/decorator.js +1 -2
- package/dist/tasks/step-wrapper.js +2 -3
- package/dist/tasks/workflow-manager.js +2 -3
- package/dist/template/entity-converter.js +17 -16
- package/dist/template/helpers.js +2 -3
- package/dist/template/implementations/entity.template.js +2 -3
- package/dist/template/implementations/entry-server.template.js +2 -3
- package/dist/template/implementations/generated.template.js +2 -3
- package/dist/template/implementations/generated_http.template.js +6 -6
- package/dist/template/implementations/generated_sso.template.js +2 -3
- package/dist/template/implementations/http_validators.template.js +2 -3
- package/dist/template/implementations/init_types.template.js +2 -3
- package/dist/template/implementations/model.template.js +4 -4
- package/dist/template/implementations/model_test.template.js +2 -3
- package/dist/template/implementations/queries.template.js +2 -3
- package/dist/template/implementations/sd.template.js +2 -3
- package/dist/template/implementations/services.template.js +2 -3
- package/dist/template/implementations/view_form.template.js +12 -9
- package/dist/template/implementations/view_id_all_select.template.js +2 -3
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +19 -17
- package/dist/template/implementations/view_search_input.template.js +2 -3
- package/dist/template/index.js +9 -3
- package/dist/template/template-manager.js +2 -3
- package/dist/template/template-types.js +1 -2
- package/dist/template/template.js +2 -3
- package/dist/template/zod-converter.js +54 -47
- package/dist/testing/_relation-graph.js +2 -3
- package/dist/testing/bootstrap.js +2 -3
- package/dist/testing/data-explorer.js +2 -3
- package/dist/testing/dev-test-routes.js +2 -3
- package/dist/testing/dev-vitest-manager.js +15 -12
- package/dist/testing/faker-mappings.js +1 -2
- package/dist/testing/filesystem.js +2 -3
- package/dist/testing/fixture-generator.js +2 -3
- package/dist/testing/fixture-loader.js +1 -2
- package/dist/testing/fixture-manager.js +12 -9
- package/dist/testing/global-setup.js +5 -5
- package/dist/testing/index.js +6 -3
- package/dist/testing/naite-vitest-reporter.js +1 -2
- package/dist/testing/parallel-db-manager.js +2 -3
- package/dist/testing/vitest-helpers.js +2 -3
- package/dist/tooling/__tests__/helpers/sonamu-test-root.js +2 -3
- package/dist/tooling/cdd-service.js +1 -2
- package/dist/tooling/cli-tooling.js +1 -2
- package/dist/tooling/fixture-service.js +1 -2
- package/dist/tooling/index.js +1 -2
- package/dist/tooling/test-run-client.js +2 -3
- package/dist/tsdown.api.config.js +1 -2
- package/dist/types/types.js +2 -3
- package/dist/ui/ai-api.d.ts.map +1 -1
- package/dist/ui/ai-api.js +4 -5
- package/dist/ui/ai-client.d.ts +2 -2
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +9 -8
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +11 -8
- package/dist/ui/async-route.js +1 -2
- package/dist/ui/cdd-service.js +22 -21
- package/dist/ui/migrations-api.js +6 -5
- package/dist/ui-web/assets/index-QDMyy31K.js +180 -0
- package/dist/ui-web/assets/index-dV7akMFB.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/async-utils.js +1 -2
- package/dist/utils/class-name.js +1 -2
- package/dist/utils/console-util.js +1 -2
- package/dist/utils/controller.js +2 -3
- package/dist/utils/esm-utils.js +1 -2
- package/dist/utils/fs-utils.js +2 -3
- package/dist/utils/lodash-able.js +1 -2
- package/dist/utils/model.js +1 -2
- package/dist/utils/object-utils.js +2 -3
- package/dist/utils/path-utils.js +2 -3
- package/dist/utils/process-utils.js +2 -3
- package/dist/utils/runtime-value.js +1 -2
- package/dist/utils/sql-parser.js +2 -3
- package/dist/utils/type-utils.js +8 -8
- package/dist/utils/utils.js +2 -3
- package/dist/utils/zod-error.js +2 -3
- package/dist/vector/chunking.js +1 -2
- package/dist/vector/config.js +1 -2
- package/dist/vector/embedding.js +4 -4
- package/package.json +63 -63
- package/src/ai/agents/agent.ts +1 -1
- package/src/api/__tests__/sonamu.plugins.test.ts +11 -1
- package/src/api/__tests__/sonamu.websocket-routes.test.ts +234 -0
- package/src/api/__tests__/sonamu.websocket.test.ts +241 -24
- package/src/api/config.ts +1 -1
- package/src/api/context.ts +2 -8
- package/src/api/sonamu.ts +46 -28
- package/src/auth/audit-log/plugin.ts +2 -0
- package/src/compress/types.ts +1 -1
- package/src/exceptions/error-handler.ts +3 -2
- package/src/index.ts +1 -0
- package/src/stream/__tests__/ws-contracts.test.ts +483 -265
- package/src/stream/__tests__/ws-multinode.test.ts +326 -0
- package/src/stream/__tests__/ws-registry-async.test.ts +855 -0
- package/src/stream/__tests__/ws-test-helpers.ts +360 -0
- package/src/stream/__tests__/ws.test.ts +342 -145
- package/src/stream/index.ts +1 -0
- package/src/stream/ws-audience-resolver.ts +21 -19
- package/src/stream/ws-cluster-bus.ts +12 -4
- package/src/stream/ws-core.ts +14 -0
- package/src/stream/ws-delivery.ts +321 -97
- package/src/stream/ws-frame.ts +39 -0
- package/src/stream/ws-local-connection-store.ts +10 -9
- package/src/stream/ws-presence-index.ts +273 -0
- package/src/stream/ws-presence-store.ts +64 -284
- package/src/stream/ws-registry.ts +272 -85
- package/src/stream/ws-session-id.ts +39 -0
- package/src/stream/ws.ts +91 -50
- package/src/template/implementations/model.template.ts +3 -3
- package/src/template/implementations/view_list.template.ts +12 -13
- package/src/ui/ai-api.ts +4 -2
- package/src/ui/ai-client.ts +2 -2
- package/src/ui/api.ts +58 -62
- package/dist/ui-web/assets/index-BMdIyKXS.css +0 -1
- package/dist/ui-web/assets/index-LpE8u19O.js +0 -178
|
@@ -8,7 +8,7 @@ import { EntityManager, init_entity_manager } from "../entity/entity-manager.js"
|
|
|
8
8
|
import inflection from "inflection";
|
|
9
9
|
import { z } from "zod";
|
|
10
10
|
import path from "path";
|
|
11
|
-
|
|
11
|
+
// src/template/zod-converter.ts
|
|
12
12
|
/**
|
|
13
13
|
* zod-converter 구성
|
|
14
14
|
* 1. 유틸리티
|
|
@@ -97,7 +97,8 @@ async function getZodTypeById(zodTypeId) {
|
|
|
97
97
|
return builtInType.schema.describe(zodTypeId);
|
|
98
98
|
}
|
|
99
99
|
const modulePath = EntityManager.getModulePath(zodTypeId);
|
|
100
|
-
const
|
|
100
|
+
const moduleAbsPath = path.join(Sonamu.apiRootPath, runtimePath(`dist/application/${modulePath}.js`));
|
|
101
|
+
const imported = await import(createImportUrl(moduleAbsPath));
|
|
101
102
|
if (!imported[zodTypeId]) throw new Error(`존재하지 않는 zodTypeId ${zodTypeId}`);
|
|
102
103
|
return imported[zodTypeId].describe(zodTypeId);
|
|
103
104
|
}
|
|
@@ -113,12 +114,13 @@ async function propToZodType(prop) {
|
|
|
113
114
|
else if (isBigIntegerArrayProp(prop)) zodType = z.bigint().array();
|
|
114
115
|
else if (isEnumSingleProp(prop)) zodType = await getZodTypeById(prop.id);
|
|
115
116
|
else if (isEnumArrayProp(prop)) zodType = (await getZodTypeById(prop.id)).array();
|
|
116
|
-
else if (isStringSingleProp(prop))
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
117
|
+
else if (isStringSingleProp(prop)) {
|
|
118
|
+
if (prop.zodFormat) {
|
|
119
|
+
zodType = zodFormatToType(prop.zodFormat);
|
|
120
|
+
if (prop.length && "max" in zodType) zodType = zodType.max(prop.length);
|
|
121
|
+
} else if (prop.length) zodType = z.string().max(prop.length);
|
|
122
|
+
else zodType = z.string();
|
|
123
|
+
} else if (isStringArrayProp(prop)) {
|
|
122
124
|
let elementType;
|
|
123
125
|
if (prop.zodFormat) {
|
|
124
126
|
elementType = zodFormatToType(prop.zodFormat);
|
|
@@ -167,19 +169,21 @@ function propToZodTypeDef(prop, injectImportKeys) {
|
|
|
167
169
|
} else if (isEnumArrayProp(prop)) {
|
|
168
170
|
stmt = `${prop.name}: ${prop.id}.array()`;
|
|
169
171
|
injectImportKeys.push(prop.id);
|
|
170
|
-
} else if (isStringSingleProp(prop))
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (prop.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
172
|
+
} else if (isStringSingleProp(prop)) {
|
|
173
|
+
if (prop.zodFormat) {
|
|
174
|
+
const base = zodFormatToCode(prop.zodFormat);
|
|
175
|
+
if (prop.length) stmt = `${prop.name}: ${base}.max(${prop.length})`;
|
|
176
|
+
else stmt = `${prop.name}: ${base}`;
|
|
177
|
+
} else if (prop.length) stmt = `${prop.name}: z.string().max(${prop.length})`;
|
|
178
|
+
else stmt = `${prop.name}: z.string()`;
|
|
179
|
+
} else if (isStringArrayProp(prop)) {
|
|
180
|
+
if (prop.zodFormat) {
|
|
181
|
+
const base = zodFormatToCode(prop.zodFormat);
|
|
182
|
+
if (prop.length) stmt = `${prop.name}: ${base}.max(${prop.length}).array()`;
|
|
183
|
+
else stmt = `${prop.name}: ${base}.array()`;
|
|
184
|
+
} else if (prop.length) stmt = `${prop.name}: z.string().max(${prop.length}).array()`;
|
|
185
|
+
else stmt = `${prop.name}: z.string().array()`;
|
|
186
|
+
} else if (isNumberSingleProp(prop)) stmt = `${prop.name}: z.number()`;
|
|
183
187
|
else if (isNumberArrayProp(prop)) stmt = `${prop.name}: z.number().array()`;
|
|
184
188
|
else if (isNumericSingleProp(prop)) stmt = `${prop.name}: z.string()`;
|
|
185
189
|
else if (isNumericArrayProp(prop)) stmt = `${prop.name}: z.string().array()`;
|
|
@@ -189,27 +193,29 @@ function propToZodTypeDef(prop, injectImportKeys) {
|
|
|
189
193
|
else if (isBooleanArrayProp(prop)) stmt = `${prop.name}: z.boolean().array()`;
|
|
190
194
|
else if (isUuidSingleProp(prop)) stmt = `${prop.name}: z.uuid()`;
|
|
191
195
|
else if (isUuidArrayProp(prop)) stmt = `${prop.name}: z.uuid().array()`;
|
|
192
|
-
else if (isJsonProp(prop))
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
196
|
+
else if (isJsonProp(prop)) {
|
|
197
|
+
if (BUILT_IN_TYPE_IDS.includes(prop.id)) {
|
|
198
|
+
const schemaName = prop.id === "SonamuFile" ? "SonamuFileSchema" : "SonamuFileArraySchema";
|
|
199
|
+
stmt = `${prop.name}: ${schemaName}`;
|
|
200
|
+
injectImportKeys.push(schemaName);
|
|
201
|
+
} else {
|
|
202
|
+
stmt = `${prop.name}: ${prop.id}`;
|
|
203
|
+
injectImportKeys.push(prop.id);
|
|
204
|
+
}
|
|
205
|
+
} else if (isSearchTextProp(prop)) stmt = `${prop.name}: z.string()`;
|
|
201
206
|
else if (isVectorSingleProp(prop)) stmt = `${prop.name}: z.array(z.number())`;
|
|
202
207
|
else if (isVectorArrayProp(prop)) stmt = `${prop.name}: z.array(z.array(z.number()))`;
|
|
203
208
|
else if (isTsVectorProp(prop)) stmt = `${prop.name}: z.string()`;
|
|
204
209
|
else if (isVirtualProp(prop)) {
|
|
205
210
|
stmt = `${prop.name}: ${prop.id}`;
|
|
206
211
|
injectImportKeys.push(prop.id);
|
|
207
|
-
} else if (isRelationProp(prop))
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
212
|
+
} else if (isRelationProp(prop)) {
|
|
213
|
+
if (isBelongsToOneRelationProp(prop) || isOneToOneRelationProp(prop) && prop.hasJoinColumn) {
|
|
214
|
+
const pkType = EntityManager.get(prop.with).getPkType();
|
|
215
|
+
if (pkType === "string" || pkType === "uuid") stmt = `${prop.name}_id: z.string()`;
|
|
216
|
+
else stmt = `${prop.name}_id: z.int()`;
|
|
217
|
+
} else return `// ${prop.name}: ${prop.relationType} ${prop.with}`;
|
|
218
|
+
} else return "// unable to resolve";
|
|
213
219
|
if (prop.unsigned) stmt += ".nonnegative()";
|
|
214
220
|
if (prop.nullable) stmt += ".nullable()";
|
|
215
221
|
if (isNumericSingleProp(prop) || isNumericArrayProp(prop)) stmt += ".meta({ SonamuPropType: \"numeric\" })";
|
|
@@ -429,15 +435,17 @@ function zodTypeToRenderingNode(zodType, baseKey = "root") {
|
|
|
429
435
|
*/
|
|
430
436
|
function resolveRenderType(key, zodType) {
|
|
431
437
|
if (zodType instanceof z.ZodDate) return "datetime";
|
|
432
|
-
else if (zodType instanceof z.core.$ZodString)
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
else if (
|
|
439
|
-
|
|
440
|
-
|
|
438
|
+
else if (zodType instanceof z.core.$ZodString) {
|
|
439
|
+
if (zodType.description === "SQLDateTimeString") return "string-datetime";
|
|
440
|
+
else if (key.endsWith("date")) return "string-date";
|
|
441
|
+
else if (key === "id") return "string-id";
|
|
442
|
+
else if (key.endsWith("_id")) return "string-fk_id";
|
|
443
|
+
else return "string-plain";
|
|
444
|
+
} else if (zodType instanceof z.ZodNumber) {
|
|
445
|
+
if (key === "id") return "number-id";
|
|
446
|
+
else if (key.endsWith("_id")) return "number-fk_id";
|
|
447
|
+
else return "number-plain";
|
|
448
|
+
} else if (zodType instanceof z.ZodBoolean) return "boolean";
|
|
441
449
|
else if (zodType instanceof z.ZodEnum) return "enums";
|
|
442
450
|
else if (zodType instanceof z.ZodRecord) return "record";
|
|
443
451
|
else if (zodType instanceof z.ZodAny || zodType instanceof z.ZodUnknown) return "string-plain";
|
|
@@ -468,8 +476,7 @@ var init_zod_converter = __esmMin((() => {
|
|
|
468
476
|
}
|
|
469
477
|
};
|
|
470
478
|
}));
|
|
471
|
-
//#endregion
|
|
472
479
|
init_zod_converter();
|
|
473
480
|
export { BUILT_IN_TYPES, getZodTypeById, init_zod_converter, propNodeToZodTypeDef, propToZodType, propToZodTypeDef, zodTypeToRenderingNode, zodTypeToTsTypeDef, zodTypeToZodCode };
|
|
474
481
|
|
|
475
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kLWNvbnZlcnRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvem9kLWNvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuLyoqXG4gKiB6b2QtY29udmVydGVyIOq1rOyEsVxuICogMS4g7Jyg7Yu466as7YuwXG4gKiAgLSBnZXRab2RUeXBlQnlJZFxuICpcbiAqIDIuIFpvZCDtg4DsnoUg67OA7ZmYIChFbnRpdHlQcm9wIC0+IFpvZFR5cGUpXG4gKiAgLSBwcm9wVG9ab2RUeXBlXG4gKlxuICogMy4gRW50aXR5UHJvcC9Ob2RlIC0+IFpvZCDsvZTrk5wg66y47J6Q7Je0XG4gKiAgLSBwcm9wVG9ab2RUeXBlRGVmXG4gKiAgLSBwcm9wTm9kZVRvWm9kVHlwZURlZlxuICpcbiAqIDQuIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66W8IO2VtOuLue2VmOuKlCBab2Qg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZggKFpvZFR5cGUgLT4gWm9kQ29kZSlcbiAqICAtIHpvZFR5cGVUb1pvZENvZGVcbiAqXG4gKiA1LiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmCAoWm9kVHlwZSAtPiBSZW5kZXJpbmdOb2RlKVxuICogIC0gem9kVHlwZVRvUmVuZGVyaW5nTm9kZVxuICogIC0gcmVzb2x2ZVJlbmRlclR5cGVcbiAqL1xuXG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzQmlnSW50ZWdlckFycmF5UHJvcCxcbiAgaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcCxcbiAgaXNCb29sZWFuQXJyYXlQcm9wLFxuICBpc0Jvb2xlYW5TaW5nbGVQcm9wLFxuICBpc0RhdGVBcnJheVByb3AsXG4gIGlzRGF0ZVNpbmdsZVByb3AsXG4gIGlzRW51bUFycmF5UHJvcCxcbiAgaXNFbnVtU2luZ2xlUHJvcCxcbiAgaXNJbnRlZ2VyQXJyYXlQcm9wLFxuICBpc0ludGVnZXJTaW5nbGVQcm9wLFxuICBpc0pzb25Qcm9wLFxuICBpc051bWJlckFycmF5UHJvcCxcbiAgaXNOdW1iZXJTaW5nbGVQcm9wLFxuICBpc051bWVyaWNBcnJheVByb3AsXG4gIGlzTnVtZXJpY1NpbmdsZVByb3AsXG4gIGlzT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzUmVsYXRpb25Qcm9wLFxuICBpc1NlYXJjaFRleHRQcm9wLFxuICBpc1N0cmluZ0FycmF5UHJvcCxcbiAgaXNTdHJpbmdTaW5nbGVQcm9wLFxuICBpc1RzVmVjdG9yUHJvcCxcbiAgaXNVdWlkQXJyYXlQcm9wLFxuICBpc1V1aWRTaW5nbGVQcm9wLFxuICBpc1ZlY3RvckFycmF5UHJvcCxcbiAgaXNWZWN0b3JTaW5nbGVQcm9wLFxuICBpc1ZpcnR1YWxQcm9wLFxuICBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gIFNvbmFtdUZpbGVTY2hlbWEsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIEVudGl0eVByb3BOb2RlLFxuICB0eXBlIFJlbmRlcmluZ05vZGUsXG4gIHR5cGUgWm9kU3RyaW5nRm9ybWF0LFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUltcG9ydFVybCB9IGZyb20gXCIuLi91dGlscy9lc20tdXRpbHNcIjtcbmltcG9ydCB7IHJ1bnRpbWVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGlzT2JqZWN0VmFsdWUsIGlzU3RyaW5nVmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuXG4vLyA8YW55PuulvCDsnpDsoJztlZjqs6AsIFpvZOyXkOyEnCDsoJzslb3tlZjripQg6riw67O47KCB7J24IEdlbmVyaWMgVHlwZSBQYXJhbWV0ZXLrpbwg7IKs7Jqp7ZWoLlxudHlwZSBBbnlab2RSZWNvcmQgPSB6LlpvZFJlY29yZDx6LlpvZFN0cmluZyB8IHouWm9kTnVtYmVyIHwgei5ab2RTeW1ib2wsIHouWm9kVHlwZT47XG50eXBlIEFueVpvZE9iamVjdCA9IHouWm9kT2JqZWN0O1xudHlwZSBBbnlab2ROdWxsYWJsZSA9IHouWm9kTnVsbGFibGU8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kRGVmYXVsdCA9IHouWm9kRGVmYXVsdDx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RVbmlvbiA9IHouWm9kVW5pb248ei5ab2RUeXBlW10+O1xudHlwZSBBbnlab2RBcnJheSA9IHouWm9kQXJyYXk8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kT3B0aW9uYWwgPSB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT47XG50eXBlIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCA9IHouWm9kVGVtcGxhdGVMaXRlcmFsO1xuXG4vKipcbiAqIOuCtOyepSDtg4DsnoUg7KCV7J2YIChab2Qg7Iqk7YKk66eIICsgVUkg66CM642U66eBIO2DgOyehSlcbiAqL1xuZXhwb3J0IGNvbnN0IEJVSUxUX0lOX1RZUEVTID0ge1xuICBTb25hbXVGaWxlOiB7XG4gICAgc2NoZW1hOiBTb25hbXVGaWxlU2NoZW1hLFxuICAgIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlXCIsXG4gICAgc2NoZW1hTmFtZTogXCJTb25hbXVGaWxlU2NoZW1hXCIsXG4gIH0sXG4gIFwiU29uYW11RmlsZVtdXCI6IHtcbiAgICBzY2hlbWE6IFNvbmFtdUZpbGVBcnJheVNjaGVtYSxcbiAgICByZW5kZXJUeXBlOiBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiLFxuICAgIHNjaGVtYU5hbWU6IFwiU29uYW11RmlsZUFycmF5U2NoZW1hXCIsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBnZXRCdWlsdEluU2NoZW1hTmFtZSh6b2RUeXBlOiB6LlpvZFR5cGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaGVkID0gT2JqZWN0LmVudHJpZXMoQlVJTFRfSU5fVFlQRVMpLmZpbmQoKFt0eXBlSWRdKSA9PiB6b2RUeXBlLmRlc2NyaXB0aW9uID09PSB0eXBlSWQpO1xuICByZXR1cm4gbWF0Y2hlZD8uWzFdLnNjaGVtYU5hbWU7XG59XG5cbi8qKlxuICogem9kRm9ybWF07J2EIFpvZCA0IOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICogWm9kIDTsl5DshJzripQgei5lbWFpbCgpLCB6LnV1aWQoKSDrk7Eg64+F66a97KCB7J24IO2VqOyImCDtmJXtg5zrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiB6b2RGb3JtYXRUb0NvZGUoZm9ybWF0OiBab2RTdHJpbmdGb3JtYXQpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgXCJpc29EYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6Lmlzby5kYXRlKClcIjtcbiAgICBjYXNlIFwiaXNvVGltZVwiOlxuICAgICAgcmV0dXJuIFwiei5pc28udGltZSgpXCI7XG4gICAgY2FzZSBcImlzb0RhdGV0aW1lXCI6XG4gICAgICByZXR1cm4gXCJ6Lmlzby5kYXRldGltZSgpXCI7XG4gICAgY2FzZSBcImlzb0R1cmF0aW9uXCI6XG4gICAgICByZXR1cm4gXCJ6Lmlzby5kdXJhdGlvbigpXCI7XG4gICAgY2FzZSBcImhhc2hNZDVcIjpcbiAgICAgIHJldHVybiAnei5oYXNoKFwibWQ1XCIpJztcbiAgICBjYXNlIFwiaGFzaFNoYTFcIjpcbiAgICAgIHJldHVybiAnei5oYXNoKFwic2hhMVwiKSc7XG4gICAgY2FzZSBcImhhc2hTaGEyNTZcIjpcbiAgICAgIHJldHVybiAnei5oYXNoKFwic2hhMjU2XCIpJztcbiAgICBjYXNlIFwiaGFzaFNoYTM4NFwiOlxuICAgICAgcmV0dXJuICd6Lmhhc2goXCJzaGEzODRcIiknO1xuICAgIGNhc2UgXCJoYXNoU2hhNTEyXCI6XG4gICAgICByZXR1cm4gJ3ouaGFzaChcInNoYTUxMlwiKSc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBgei4ke2Zvcm1hdH0oKWA7XG4gIH1cbn1cblxuLyoqXG4gKiB6b2RGb3JtYXTsnYQgWm9kIDQg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIFpvZCA07JeQ7ISc64qUIHouZW1haWwoKSwgei51dWlkKCkg65OxIOuPheumveyggeyduCDtlajsiJgg7ZiV7YOc66W8IOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gem9kRm9ybWF0VG9UeXBlKGZvcm1hdDogWm9kU3RyaW5nRm9ybWF0KTogei5ab2RUeXBlIHtcbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwiZW1haWxcIjpcbiAgICAgIHJldHVybiB6LmVtYWlsKCk7XG4gICAgY2FzZSBcInV1aWRcIjpcbiAgICAgIHJldHVybiB6LnV1aWQoKTtcbiAgICBjYXNlIFwidXJsXCI6XG4gICAgICByZXR1cm4gei51cmwoKTtcbiAgICBjYXNlIFwiaHR0cFVybFwiOlxuICAgICAgcmV0dXJuIHouaHR0cFVybCgpO1xuICAgIGNhc2UgXCJob3N0bmFtZVwiOlxuICAgICAgcmV0dXJuIHouaG9zdG5hbWUoKTtcbiAgICBjYXNlIFwiZW1vamlcIjpcbiAgICAgIHJldHVybiB6LmVtb2ppKCk7XG4gICAgY2FzZSBcImJhc2U2NFwiOlxuICAgICAgcmV0dXJuIHouYmFzZTY0KCk7XG4gICAgY2FzZSBcImJhc2U2NHVybFwiOlxuICAgICAgcmV0dXJuIHouYmFzZTY0dXJsKCk7XG4gICAgY2FzZSBcImhleFwiOlxuICAgICAgcmV0dXJuIHouaGV4KCk7XG4gICAgY2FzZSBcImp3dFwiOlxuICAgICAgcmV0dXJuIHouand0KCk7XG4gICAgY2FzZSBcIm5hbm9pZFwiOlxuICAgICAgcmV0dXJuIHoubmFub2lkKCk7XG4gICAgY2FzZSBcImN1aWRcIjpcbiAgICAgIHJldHVybiB6LmN1aWQoKTtcbiAgICBjYXNlIFwiY3VpZDJcIjpcbiAgICAgIHJldHVybiB6LmN1aWQyKCk7XG4gICAgY2FzZSBcInVsaWRcIjpcbiAgICAgIHJldHVybiB6LnVsaWQoKTtcbiAgICBjYXNlIFwiaXB2NFwiOlxuICAgICAgcmV0dXJuIHouaXB2NCgpO1xuICAgIGNhc2UgXCJpcHY2XCI6XG4gICAgICByZXR1cm4gei5pcHY2KCk7XG4gICAgY2FzZSBcIm1hY1wiOlxuICAgICAgcmV0dXJuIHoubWFjKCk7XG4gICAgY2FzZSBcImNpZHJ2NFwiOlxuICAgICAgcmV0dXJuIHouY2lkcnY0KCk7XG4gICAgY2FzZSBcImNpZHJ2NlwiOlxuICAgICAgcmV0dXJuIHouY2lkcnY2KCk7XG4gICAgY2FzZSBcImlzb0RhdGVcIjpcbiAgICAgIHJldHVybiB6Lmlzby5kYXRlKCk7XG4gICAgY2FzZSBcImlzb1RpbWVcIjpcbiAgICAgIHJldHVybiB6Lmlzby50aW1lKCk7XG4gICAgY2FzZSBcImlzb0RhdGV0aW1lXCI6XG4gICAgICByZXR1cm4gei5pc28uZGF0ZXRpbWUoKTtcbiAgICBjYXNlIFwiaXNvRHVyYXRpb25cIjpcbiAgICAgIHJldHVybiB6Lmlzby5kdXJhdGlvbigpO1xuICAgIGNhc2UgXCJoYXNoTWQ1XCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwibWQ1XCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhMVwiOlxuICAgICAgcmV0dXJuIHouaGFzaChcInNoYTFcIik7XG4gICAgY2FzZSBcImhhc2hTaGEyNTZcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEyNTZcIik7XG4gICAgY2FzZSBcImhhc2hTaGEzODRcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEzODRcIik7XG4gICAgY2FzZSBcImhhc2hTaGE1MTJcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGE1MTJcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIElE66Gc67aA7YSwIOuPmeyggeycvOuhnCBab2Qg7Iqk7YKk66eI66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqIOuCtOyepSDtg4DsnoUoQlVJTFRfSU5fVFlQRV9JRFMp7J2AIOuwlOuhnCDrsJjtmZjtlZjqs6AsXG4gKiDqt7gg7Jm464qUIGRpc3Qg65SU66CJ7Yag66as7JeQ7IScIEVTTeycvOuhnCBpbXBvcnTtlZjsl6wg6rCA7KC47Ji164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Wm9kVHlwZUJ5SWQoem9kVHlwZUlkOiBzdHJpbmcpOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICAvLyDrgrTsnqUg7YOA7J6FIOyymOumrFxuICBpZiAoXG4gICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICBCVUlMVF9JTl9UWVBFX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXVxuICAgICkuaW5jbHVkZXMoem9kVHlwZUlkKVxuICApIHtcbiAgICBjb25zdCBidWlsdEluVHlwZSA9XG4gICAgICBCVUlMVF9JTl9UWVBFU1tcbiAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyB6b2RUeXBlSWQgYXMga2V5b2YgdHlwZW9mIEJVSUxUX0lOX1RZUEVTXG4gICAgICBdO1xuICAgIGlmICghYnVpbHRJblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg64K07J6lIO2DgOyehSAke3pvZFR5cGVJZH3snZgg7Iqk7YKk66eI6rCAIOygleydmOuQmOyngCDslYrslZjsirXri4jri6RgKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWx0SW5UeXBlLnNjaGVtYS5kZXNjcmliZSh6b2RUeXBlSWQpO1xuICB9XG5cbiAgLy8g7ZSE66Gc7KCd7Yq47JeQ7IScIOygleydmO2VnCDtg4DsnoUg64+Z7KCBIOuhnOuTnFxuICBjb25zdCBtb2R1bGVQYXRoID0gRW50aXR5TWFuYWdlci5nZXRNb2R1bGVQYXRoKHpvZFR5cGVJZCk7XG4gIGNvbnN0IG1vZHVsZUFic1BhdGggPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIHJ1bnRpbWVQYXRoKGBkaXN0L2FwcGxpY2F0aW9uLyR7bW9kdWxlUGF0aH0uanNgKSxcbiAgKTtcbiAgY29uc3QgaW1wb3J0VXJsID0gY3JlYXRlSW1wb3J0VXJsKG1vZHVsZUFic1BhdGgpO1xuICBjb25zdCBpbXBvcnRlZCA9IGF3YWl0IGltcG9ydChpbXBvcnRVcmwpO1xuXG4gIGlmICghaW1wb3J0ZWRbem9kVHlwZUlkXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCB6b2RUeXBlSWQgJHt6b2RUeXBlSWR9YCk7XG4gIH1cbiAgcmV0dXJuIGltcG9ydGVkW3pvZFR5cGVJZF0uZGVzY3JpYmUoem9kVHlwZUlkKTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9w7J2EIFpvZCDtg4DsnoXsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICog6rCBIHByb3DsnZgg7YOA7J6F7JeQIOuUsOudvCDsoIHsoIjtlZwgWm9kIHZhbGlkYXRvcuulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9wVG9ab2RUeXBlKHByb3A6IEVudGl0eVByb3ApOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICBsZXQgem9kVHlwZTogei5ab2RUeXBlQW55ID0gei51bmtub3duKCk7XG4gIGlmIChpc0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0VudW1TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSAoYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCkpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICB6b2RUeXBlID0gem9kRm9ybWF0VG9UeXBlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCAmJiBcIm1heFwiIGluIHpvZFR5cGUpIHtcbiAgICAgICAgem9kVHlwZSA9IC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHpvZFR5cGUgYXMgei5ab2RTdHJpbmdcbiAgICAgICAgKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZ0FycmF5UHJvcChwcm9wKSkge1xuICAgIGxldCBlbGVtZW50VHlwZTogei5ab2RUeXBlO1xuICAgIGlmIChwcm9wLnpvZEZvcm1hdCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6b2RGb3JtYXRUb1R5cGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoICYmIFwibWF4XCIgaW4gZWxlbWVudFR5cGUpIHtcbiAgICAgICAgZWxlbWVudFR5cGUgPVxuICAgICAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgICAgZWxlbWVudFR5cGUgYXMgei5ab2RTdHJpbmdcbiAgICAgICAgICApLm1heChwcm9wLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gei5zdHJpbmcoKTtcbiAgICB9XG4gICAgem9kVHlwZSA9IGVsZW1lbnRUeXBlLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5udW1iZXIoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5ib29sZWFuKCk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmRhdGUoKTtcbiAgfSBlbHNlIGlmIChpc0RhdGVBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoudXVpZCgpO1xuICB9IGVsc2UgaWYgKGlzVXVpZEFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzSnNvblByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNTZWFyY2hUZXh0UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmFycmF5KHoubnVtYmVyKCkpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYXJyYXkoei5hcnJheSh6Lm51bWJlcigpKSk7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICAvLyBGSyDtg4DsnoXsnYQg7LC47KGwIOyXlO2LsO2LsCBQSyDtg4DsnoXsl5Ag65Sw6528IOqysOyglVxuICAgICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocHJvcC53aXRoKTtcbiAgICAgIGNvbnN0IHBrVHlwZSA9IHJlbEVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICAgIGlmIChwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIikge1xuICAgICAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3DsnYQgem9kVHlwZeycvOuhnCDrs4DtmZjtlZjripTrjbAg7Iuk7YyoICR7cHJvcH19YCk7XG4gIH1cblxuICBpZiAoXG4gICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICBwcm9wIGFzIHsgdW5zaWduZWQ/OiBib29sZWFuIH1cbiAgICApLnVuc2lnbmVkXG4gICkge1xuICAgIHpvZFR5cGUgPSAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgIHpvZFR5cGUgYXMgei5ab2ROdW1iZXJcbiAgICApLm5vbm5lZ2F0aXZlKCk7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICB6b2RUeXBlID0gem9kVHlwZS5udWxsYWJsZSgpO1xuICB9XG5cbiAgcmV0dXJuIHpvZFR5cGU7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6FIOygleydmCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BUb1pvZFR5cGVEZWYocHJvcDogRW50aXR5UHJvcCwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgc3RtdDogc3RyaW5nO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmludCgpYDtcbiAgfSBlbHNlIGlmIChpc0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYmlnaW50KClgO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzRW51bVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfWA7XG4gICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9LmFycmF5KClgO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZ1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC56b2RGb3JtYXQpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB6b2RGb3JtYXRUb0NvZGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke2Jhc2V9Lm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICBjb25zdCBiYXNlID0gem9kRm9ybWF0VG9Db2RlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtiYXNlfS5tYXgoJHtwcm9wLmxlbmd0aH0pLmFycmF5KClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX0uYXJyYXkoKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkubWF4KCR7cHJvcC5sZW5ndGh9KS5hcnJheSgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpYDtcbiAgfSBlbHNlIGlmIChpc051bWJlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmRhdGUoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5ib29sZWFuKClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoudXVpZCgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNKc29uUHJvcChwcm9wKSkge1xuICAgIC8vIOuCtOyepSDtg4DsnoXsnbgg6rK97JqwIOyKpO2CpOuniCDsnbTrpoTsnLzroZwg67OA7ZmYXG4gICAgaWYgKFxuICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgIEJVSUxUX0lOX1RZUEVfSURTIGFzIHJlYWRvbmx5IHN0cmluZ1tdXG4gICAgICApLmluY2x1ZGVzKHByb3AuaWQpXG4gICAgKSB7XG4gICAgICBjb25zdCBzY2hlbWFOYW1lID0gcHJvcC5pZCA9PT0gXCJTb25hbXVGaWxlXCIgPyBcIlNvbmFtdUZpbGVTY2hlbWFcIiA6IFwiU29uYW11RmlsZUFycmF5U2NoZW1hXCI7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtzY2hlbWFOYW1lfWA7XG4gICAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2goc2NoZW1hTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9YDtcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTZWFyY2hUZXh0UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpYDtcbiAgfSBlbHNlIGlmIChpc1ZlY3RvclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6Lm51bWJlcigpKWA7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6LmFycmF5KHoubnVtYmVyKCkpKWA7XG4gIH0gZWxzZSBpZiAoaXNUc1ZlY3RvclByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9YDtcbiAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICBpZiAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHwgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSkge1xuICAgICAgLy8gRksgWm9kIO2DgOyeheydhCDssLjsobAg7JeU7Yuw7YuwIFBLIO2DgOyeheyXkCDrlLDrnbwg6rKw7KCVXG4gICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChwcm9wLndpdGgpO1xuICAgICAgY29uc3QgcGtUeXBlID0gcmVsRW50aXR5LmdldFBrVHlwZSgpO1xuICAgICAgaWYgKHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiKSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9X2lkOiB6LnN0cmluZygpYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9X2lkOiB6LmludCgpYDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8g6re47Jm4IHJlbGF0aW9uIOy8gOydtOyKpCDsoJzsmbhcbiAgICAgIHJldHVybiBgLy8gJHtwcm9wLm5hbWV9OiAke3Byb3AucmVsYXRpb25UeXBlfSAke3Byb3Aud2l0aH1gO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCIvLyB1bmFibGUgdG8gcmVzb2x2ZVwiO1xuICB9XG5cbiAgaWYgKFxuICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgcHJvcCBhcyB7IHVuc2lnbmVkPzogYm9vbGVhbiB9XG4gICAgKS51bnNpZ25lZFxuICApIHtcbiAgICBzdG10ICs9IFwiLm5vbm5lZ2F0aXZlKClcIjtcbiAgfVxuICBpZiAocHJvcC5udWxsYWJsZSkge1xuICAgIHN0bXQgKz0gXCIubnVsbGFibGUoKVwiO1xuICB9XG5cbiAgLy8gbnVtZXJpYyDtg4DsnoXsnZgg6rK97JqwIG51bGxhYmxlIOydtO2bhOyXkCBtZXRhIOy2lOqwgCAo66mU7YOA642w7J207YSw6rCAIOy1nOyDgeychCDroIjrsqjsl5Ag7J6I7Ja07JW8IO2VqClcbiAgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkgfHwgaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCArPSAnLm1ldGEoeyBTb25hbXVQcm9wVHlwZTogXCJudW1lcmljXCIgfSknO1xuICB9XG5cbiAgcmV0dXJuIGAke3N0bXR9LGA7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcE5vZGXrpbwgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBwbGFpbiwgYXJyYXksIG9iamVjdCDrhbjrk5wg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCDsspjrpqztlZjsl6wg7KSR7LKpIOq1rOyhsOulvCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcInBsYWluXCIpIHtcbiAgICByZXR1cm4gcHJvcFRvWm9kVHlwZURlZihwcm9wTm9kZS5wcm9wLCBpbmplY3RJbXBvcnRLZXlzKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5hcnJheSh6Lm9iamVjdCh7XCIsXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZFByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihjaGlsZFByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICBcIlwiLFxuICAgICAgXCJ9KSksXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIGB9KSR7cHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPyBcIi5udWxsYWJsZSgpXCIgOiBcIlwifSxgLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvVHNUeXBlRGVmKHp0OiB6LlpvZFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHp0LmRlZi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICBjYXNlIFwibnVsbFwiOlxuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICBjYXNlIFwibmV2ZXJcIjpcbiAgICAgIHJldHVybiB6dC5kZWYudHlwZTtcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xuICAgIGNhc2UgXCJudWxsYWJsZVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovICh6dCBhcyBBbnlab2ROdWxsYWJsZSkuZGVmLmlubmVyVHlwZSl9IHwgbnVsbGA7XG4gICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgIHJldHVybiB6b2RUeXBlVG9Uc1R5cGVEZWYoXG4gICAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHp0IGFzIEFueVpvZERlZmF1bHRcbiAgICAgICAgKS5kZWYuaW5uZXJUeXBlLFxuICAgICAgKTtcbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHJlY29yZFR5cGUgPVxuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHp0IGFzIEFueVpvZFJlY29yZDtcbiAgICAgIHJldHVybiBgeyBbIGtleTogJHt6b2RUeXBlVG9Uc1R5cGVEZWYocmVjb3JkVHlwZS5kZWYua2V5VHlwZSl9IF06ICR7em9kVHlwZVRvVHNUeXBlRGVmKHJlY29yZFR5cGUuZGVmLnZhbHVlVHlwZSl9fWA7XG4gICAgfVxuICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgenQgYXMgei5ab2RMaXRlcmFsXG4gICAgICAgICkudmFsdWVzLFxuICAgICAgKVxuICAgICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChpc1N0cmluZ1ZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBcIiR7dmFsdWV9XCJgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGBudWxsYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGB1bmRlZmluZWRgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIiB8IFwiKTtcbiAgICBjYXNlIFwidW5pb25cIjpcbiAgICAgIHJldHVybiBgJHtcbiAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgenQgYXMgQW55Wm9kVW5pb25cbiAgICAgICAgKS5vcHRpb25zXG4gICAgICAgICAgLm1hcCgob3B0aW9uKSA9PiB6b2RUeXBlVG9Uc1R5cGVEZWYob3B0aW9uKSlcbiAgICAgICAgICAuam9pbihcIiB8IFwiKVxuICAgICAgfWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIHJldHVybiBgJHsvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovICh6dCBhcyB6LlpvZEVudW0pLm9wdGlvbnMubWFwKCh2YWwpID0+IGBcIiR7dmFsfVwiYCkuam9pbihcIiB8IFwiKX1gO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovICh6dCBhcyBBbnlab2RBcnJheSkuZWxlbWVudCl9W11gO1xuICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgY29uc3Qgb2JqZWN0RmllbGRzID0gLyogU0FGRVRZOiBab2TsnZggb2JqZWN0IO2MkOuzhCDrtoTquLDqsIAg6rCd7LK0IO2VhOuTnCDqs4Tslb3snYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgIHp0IGFzIEFueVpvZE9iamVjdFxuICAgICAgKVtcInNoYXBlXCJdO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKG9iamVjdEZpZWxkcykubWFwKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAob2JqZWN0RmllbGRzW2tleV0uZGVmLnR5cGUgPT09IFwib3B0aW9uYWxcIikge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX0/OiAke3pvZFR5cGVUb1RzVHlwZURlZihvYmplY3RGaWVsZHNba2V5XS5kZWYuaW5uZXJUeXBlKX0sYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7em9kVHlwZVRvVHNUeXBlRGVmKG9iamVjdEZpZWxkc1trZXldKX0sYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBcIn1cIixcbiAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgY2FzZSBcIm9wdGlvbmFsXCI6XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvVHNUeXBlRGVmKC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKHp0IGFzIEFueVpvZE9wdGlvbmFsKS5kZWYuaW5uZXJUeXBlKX0gfCB1bmRlZmluZWRgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9IC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICB6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWxcbiAgICAgICkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbOydgCBzdHJpbmfsnLzroZwg7Y+067CxXG4gICAgICBpZiAoIWRlZi5wYXJ0cyB8fCBkZWYucGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuXG4gICAgICAvLyDqsIEgcGFydOulvCBUeXBlU2NyaXB0IO2DgOyehSDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgLy8g66as7YSw65+0IOqwkiAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG51bGwsIHVuZGVmaW5lZClcbiAgICAgICAgaWYgKGlzU3RyaW5nVmFsdWUocGFydCkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7cGFydH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWm9kVHlwZSAtIOyerOq3gOyggeycvOuhnCDrs4DtmZhcbiAgICAgICAgaWYgKHBhcnQgJiYgaXNPYmplY3RWYWx1ZShwYXJ0KSAmJiBwYXJ0IGluc3RhbmNlb2Ygei5ab2RUeXBlKSB7XG4gICAgICAgICAgY29uc3QgaW5uZXJUeXBlID0gem9kVHlwZVRvVHNUeXBlRGVmKFxuICAgICAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJ0IGFzIHouWm9kVHlwZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBgJFxceyR7aW5uZXJUeXBlfX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBgXFwke3N0cmluZ31gO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgXFxgJHtwYXJ0cy5qb2luKFwiXCIpfVxcYGA7XG4gICAgfVxuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvWm9kQ29kZSh6dDogei5ab2RUeXBlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdKTogc3RyaW5nIHtcbiAgY29uc3QgYnVpbHRJblNjaGVtYU5hbWUgPSBnZXRCdWlsdEluU2NoZW1hTmFtZSh6dCk7XG4gIGlmIChidWlsdEluU2NoZW1hTmFtZSkge1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChidWlsdEluU2NoZW1hTmFtZSk7XG4gICAgcmV0dXJuIGJ1aWx0SW5TY2hlbWFOYW1lO1xuICB9XG5cbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bWJlcigpXCI7XG4gICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgcmV0dXJuIFwiei5iaWdpbnQoKVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJ6LmJvb2xlYW4oKVwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6LmRhdGUoKVwiO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bGwoKVwiO1xuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgIHJldHVybiBcInoudW5kZWZpbmVkKClcIjtcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgICByZXR1cm4gXCJ6LmFueSgpXCI7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIHJldHVybiBcInoudW5rbm93bigpXCI7XG4gICAgY2FzZSBcIm5ldmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm5ldmVyKClcIjtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKHp0IGFzIEFueVpvZE51bGxhYmxlKS5kZWYuaW5uZXJUeXBlLCBpbmplY3RJbXBvcnRLZXlzKX0ubnVsbGFibGUoKWA7XG4gICAgY2FzZSBcImRlZmF1bHRcIjoge1xuICAgICAgY29uc3QgekRlZmF1bHREZWYgPVxuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgICAgICB6dCBhcyBBbnlab2REZWZhdWx0XG4gICAgICAgICkuZGVmO1xuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1pvZENvZGUoekRlZmF1bHREZWYuaW5uZXJUeXBlLCBpbmplY3RJbXBvcnRLZXlzKX0uZGVmYXVsdCgke3pEZWZhdWx0RGVmLmRlZmF1bHRWYWx1ZX0pYDtcbiAgICB9XG4gICAgY2FzZSBcInJlY29yZFwiOiB7XG4gICAgICBjb25zdCB6UmVjb3JkRGVmID1cbiAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgenQgYXMgQW55Wm9kUmVjb3JkXG4gICAgICAgICkuZGVmO1xuICAgICAgcmV0dXJuIGB6LnJlY29yZCgke3pvZFR5cGVUb1pvZENvZGUoelJlY29yZERlZi5rZXlUeXBlLCBpbmplY3RJbXBvcnRLZXlzKX0sICR7em9kVHlwZVRvWm9kQ29kZShcbiAgICAgICAgelJlY29yZERlZi52YWx1ZVR5cGUsXG4gICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICApfSlgO1xuICAgIH1cbiAgICBjYXNlIFwibGl0ZXJhbFwiOiB7XG4gICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20oXG4gICAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHp0IGFzIHouWm9kTGl0ZXJhbDxzdHJpbmcgfCBudW1iZXI+XG4gICAgICAgICkudmFsdWVzLFxuICAgICAgKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChpc1N0cmluZ1ZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGB6LmxpdGVyYWwoJHtpdGVtc1swXX0pYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgei5saXRlcmFsKFske2l0ZW1zLmpvaW4oXCIsIFwiKX1dKWA7XG4gICAgfVxuICAgIGNhc2UgXCJ1bmlvblwiOlxuICAgICAgcmV0dXJuIGB6LnVuaW9uKFske1xuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgICAgICB6dCBhcyBBbnlab2RVbmlvblxuICAgICAgICApLmRlZi5vcHRpb25zXG4gICAgICAgICAgLm1hcCgob3B0aW9uOiB6LlpvZFR5cGUpID0+IHpvZFR5cGVUb1pvZENvZGUob3B0aW9uLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgICAuam9pbihcIixcIilcbiAgICAgIH1dKWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIC8vIE5PVEU6IHouZW51bShbXCJBXCIsIFwiQlwiXSnrj4Qgei5lbnVtKHsgQTogXCJBXCIsIEI6IFwiQlwiIH0p66GcIOyymOumrOuQqC5cbiAgICAgIHJldHVybiBgei5lbnVtKHske09iamVjdC5lbnRyaWVzKFxuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgICAgICB6dCBhcyB6LlpvZEVudW1cbiAgICAgICAgKS5kZWYuZW50cmllcyxcbiAgICAgIClcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsXSkgPT4gKGlzU3RyaW5nVmFsdWUodmFsKSA/IGAke2tleX06IFwiJHt2YWx9XCJgIDogYCR7a2V5fTogJHt2YWx9YCkpXG4gICAgICAgIC5qb2luKFwiLCBcIil9fSlgO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGB6LmFycmF5KCR7em9kVHlwZVRvWm9kQ29kZSgvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovICh6dCBhcyB6LlpvZEFycmF5PHouWm9kVHlwZT4pLmRlZi5lbGVtZW50LCBpbmplY3RJbXBvcnRLZXlzKX0pYDtcbiAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgIGNvbnN0IG9iamVjdEZpZWxkcyA9IC8qIFNBRkVUWTogWm9k7J2YIG9iamVjdCDtjJDrs4Qg67aE6riw6rCAIOqwneyytCDtlYTrk5wg6rOE7JW97J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICB6dCBhcyBBbnlab2RPYmplY3RcbiAgICAgIClbXCJzaGFwZVwiXTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgICAuLi5PYmplY3Qua2V5cyhvYmplY3RGaWVsZHMpLm1hcChcbiAgICAgICAgICAoa2V5KSA9PiBgJHtrZXl9OiAke3pvZFR5cGVUb1pvZENvZGUob2JqZWN0RmllbGRzW2tleV0sIGluamVjdEltcG9ydEtleXMpfSxgLFxuICAgICAgICApLFxuICAgICAgICBcIn0pXCIsXG4gICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIGNhc2UgXCJvcHRpb25hbFwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1pvZENvZGUoLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoenQgYXMgei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBpbmplY3RJbXBvcnRLZXlzKX0ub3B0aW9uYWwoKWA7XG4gICAgY2FzZSBcImZpbGVcIjpcbiAgICAgIHJldHVybiBgei5maWxlKClgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9IC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICB6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWxcbiAgICAgICkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbFxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJ6LnRlbXBsYXRlTGl0ZXJhbChbXSlcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgLy8g66y47J6Q7Je0IOumrO2EsOuftFxuICAgICAgICBpZiAoaXNTdHJpbmdWYWx1ZShwYXJ0KSkge1xuICAgICAgICAgIHJldHVybiBgXCIke3BhcnR9XCJgO1xuICAgICAgICB9XG4gICAgICAgIC8vIFpvZFR5cGUgLSDsnqzqt4DsoIHsnLzroZwg67OA7ZmYXG4gICAgICAgIGlmIChwYXJ0ICYmIGlzT2JqZWN0VmFsdWUocGFydCkgJiYgcGFydCBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgICAgIHJldHVybiB6b2RUeXBlVG9ab2RDb2RlKFxuICAgICAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJ0IGFzIHouWm9kVHlwZSxcbiAgICAgICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIO2PtOuwsVxuICAgICAgICByZXR1cm4gXCJ6LnN0cmluZygpXCI7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGB6LnRlbXBsYXRlTGl0ZXJhbChbJHtwYXJ0cy5qb2luKFwiLCBcIil9XSlgO1xuICAgIH1cbiAgICBjYXNlIFwiaW50ZXJzZWN0aW9uXCI6IHtcbiAgICAgIGNvbnN0IHpJbnRlcnNlY3Rpb25EZWYgPVxuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgICAgICB6dCBhcyB6LlpvZEludGVyc2VjdGlvbjx6LlpvZFR5cGUsIHouWm9kVHlwZT5cbiAgICAgICAgKS5kZWY7XG4gICAgICByZXR1cm4gYHouaW50ZXJzZWN0aW9uKCR7em9kVHlwZVRvWm9kQ29kZShcbiAgICAgICAgekludGVyc2VjdGlvbkRlZi5sZWZ0LFxuICAgICAgICBpbmplY3RJbXBvcnRLZXlzLFxuICAgICAgKX0sICR7em9kVHlwZVRvWm9kQ29kZSh6SW50ZXJzZWN0aW9uRGVmLnJpZ2h0LCBpbmplY3RJbXBvcnRLZXlzKX0pYDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyerOq3gOyggeycvOuhnCDspJHssqnrkJwg7YOA7J6F65Ok7J2EIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueSxcbiAgYmFzZUtleTogc3RyaW5nID0gXCJyb290XCIsXG4pOiBSZW5kZXJpbmdOb2RlIHtcbiAgY29uc3QgZGVmID0ge1xuICAgIG5hbWU6IGJhc2VLZXksXG4gICAgbGFiZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoYmFzZUtleSwgZmFsc2UpLFxuICAgIHpvZFR5cGUsXG4gIH07XG5cbiAgLyoqXG4gICAqIOy8gOydtOyKpCDsspjrpqwg7Iic7IScXG4gICAqXG4gICAqIDEuIO2KueyImCDsvIDsnbTsiqQgKGRlc2NyaXB0aW9uIOq4sOuwmClcbiAgICogICAgLSBTb25hbXVGaWxlL1NvbmFtdUZpbGVbXSA6IHoub2JqZWN0L3ouYXJyYXnsnbTsp4Drp4wg7YyM7J28IOyXheuhnOuTnOyaqSDrgrTsnqUg7YOA7J6FXG4gICAqXG4gICAqIDIuIOydvOuwmCDsvIDsnbTsiqQgKGluc3RhbmNlb2Yg6riw67CYKVxuICAgKiAgICAtIHouWm9kT2JqZWN0IDog7J2867CYIOqwneyytFxuICAgKiAgICAtIHouWm9kQXJyYXkgOiDsnbzrsJgg67Cw7Je0XG4gICAqICAgICAgLSB2ZWN0b3IgOiB6LmFycmF5KHoubnVtYmVyKeydtOyngOunjCDrhKTsnbTrsI0g6riw67CY7Jy866GcIOuyoe2EsCDsnoTrsqDrlKlcbiAgICogICAgICAtIOydvOuwmCDrsLDsl7QgOiDqt7gg7Jm4XG4gICAqICAgIC0gei5ab2RVbmlvbiwgei5ab2RPcHRpb25hbCwgei5ab2ROdWxsYWJsZSA6IOycoO2LuOumrO2LsCDtg4DsnoVcbiAgICogICAgLSDquLDtg4AgOiByZXNvbHZlUmVuZGVyVHlwZSgp7Jy866GcIOyymOumrFxuICAgKi9cblxuICAvLyDtirnsiJgg7LyA7J207IqkOiBTb25hbXVGaWxlW10g7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgIHJldHVybiB7IC4uLmRlZiwgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIiB9O1xuICB9XG5cbiAgLy8g7Yq57IiYIOy8gOydtOyKpDogU29uYW11RmlsZSDri6jsnbwg7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlXCIpIHtcbiAgICByZXR1cm4geyAuLi5kZWYsIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlXCIgfTtcbiAgfVxuXG4gIC8vIOydvOuwmCDsvIDsnbTsiqQ6IFpvZE9iamVjdCDssrTtgaxcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSBPYmplY3Qua2V5cyh6b2RUeXBlW1wic2hhcGVcIl0pO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY29sdW1uS2V5cy5tYXAoKGtleSkgPT4ge1xuICAgICAgY29uc3QgaW5uZXJUeXBlID0gem9kVHlwZVtcInNoYXBlXCJdW2tleV07XG4gICAgICByZXR1cm4gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShpbm5lclR5cGUsIGtleSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgY29uc3QgaW5uZXJUeXBlID1cbiAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICB6b2RUeXBlIGFzIHouWm9kQXJyYXk8ei5ab2RUeXBlQW55PlxuICAgICAgKS5kZWYuZWxlbWVudDtcbiAgICAvLyB2ZWN0b3Ig7YOA7J6FIO2MkOuzhDogbnVtYmVyIOuwsOyXtOydtOuptOyEnCBlbWJlZGRpbmcsIHZlY3RvciDrk7HsnZgg7J2066aE7J2EIOqwgOynhCDqsr3smrBcbiAgICBpZiAoXG4gICAgICBpbm5lclR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlciAmJlxuICAgICAgKGJhc2VLZXkuaW5jbHVkZXMoXCJlbWJlZGRpbmdcIikgfHwgYmFzZUtleS5pbmNsdWRlcyhcInZlY3RvclwiKSlcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZixcbiAgICAgICAgcmVuZGVyVHlwZTogXCJ2ZWN0b3JcIixcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWYsXG4gICAgICByZW5kZXJUeXBlOiBcImFycmF5XCIsXG4gICAgICBlbGVtZW50OiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgfTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmlvbikge1xuICAgIGNvbnN0IG9wdGlvbk5vZGVzID1cbiAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICB6b2RUeXBlIGFzIHouWm9kVW5pb248ei5ab2RUeXBlW10+XG4gICAgICApLmRlZi5vcHRpb25zLm1hcCgob3B0KSA9PiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKG9wdCwgYmFzZUtleSkpO1xuICAgIC8vIFRPRE86IFpvZFVuaW9u7J20IOuTpOyWtOyeiOuKlCDqsr3smrAg7ZW465Ok66eBXG4gICAgcmV0dXJuIG9wdGlvbk5vZGVzWzBdO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gICAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHpvZFR5cGUgYXMgei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+XG4gICAgICAgICkuZGVmLmlubmVyVHlwZSxcbiAgICAgICAgYmFzZUtleSxcbiAgICAgICksXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gICAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHpvZFR5cGUgYXMgei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+XG4gICAgICAgICkuZGVmLmlubmVyVHlwZSxcbiAgICAgICAgYmFzZUtleSxcbiAgICAgICksXG4gICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWYsXG4gICAgICByZW5kZXJUeXBlOiByZXNvbHZlUmVuZGVyVHlwZShiYXNlS2V5LCB6b2RUeXBlKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogWm9kIO2DgOyeheqzvCDtgqQg7J2066aE7Jy866Gc67aA7YSwIOyggeygiO2VnCBSZW5kZXJUeXBl7J2EIOqysOygle2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlbmRlclR5cGUoa2V5OiBzdHJpbmcsIHpvZFR5cGU6IHouWm9kVHlwZUFueSk6IFJlbmRlcmluZ05vZGVbXCJyZW5kZXJUeXBlXCJdIHtcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZERhdGUpIHtcbiAgICByZXR1cm4gXCJkYXRldGltZVwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LmNvcmUuJFpvZFN0cmluZykge1xuICAgIC8vIE5PVEU6IHouWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VmOuptCB6LnVybCgpLCB6LmVtYWlsKCkg65Ox7J2YIO2DgOyeheyXkOyEnCDrrLjsoJzqsIAg7IOd6riw66+A66GcIHouY29yZS4kWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VqFxuICAgIC8vIEZJWE1FOiBlbWFpbOydtOuCmCB1cmwg7YOA7J6FIOuTseyXkCDrjIDtlZwg7LKY66as6rCAIO2VhOyalO2VqFxuICAgIGlmICh6b2RUeXBlLmRlc2NyaXB0aW9uID09PSBcIlNRTERhdGVUaW1lU3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1kYXRldGltZVwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiZGF0ZVwiKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGVcIjtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctaWRcIjtcbiAgICB9IGVsc2UgaWYgKGtleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWZrX2lkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICBpZiAoa2V5ID09PSBcImlkXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1pZFwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiX2lkXCIpKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItZmtfaWRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLXBsYWluXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEJvb2xlYW4pIHtcbiAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgIHJldHVybiBcImVudW1zXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kUmVjb3JkKSB7XG4gICAgcmV0dXJuIFwicmVjb3JkXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQW55IHx8IHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVua25vd24pIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmlvbikge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZExpdGVyYWwpIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RUZW1wbGF0ZUxpdGVyYWwpIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlLmRlZi50eXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgcmV0dXJuIFwib2JqZWN0XCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7IuxIOu2iOqwgCAke2tleX0gJHt6b2RUeXBlLmRlZi50eXBlfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThGQSxTQUFTLHFCQUFxQixTQUF3QztDQUVwRSxPQURnQixPQUFPLFFBQVEsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksUUFBUSxnQkFBZ0IsTUFDbkYsQ0FBQSxHQUFVLEVBQUUsQ0FBQztBQUN0Qjs7Ozs7QUFNQSxTQUFTLGdCQUFnQixRQUFpQztDQUN4RCxRQUFRLFFBQVI7RUFDRSxLQUFLLFdBQ0gsT0FBTztFQUNULEtBQUssV0FDSCxPQUFPO0VBQ1QsS0FBSyxlQUNILE9BQU87RUFDVCxLQUFLLGVBQ0gsT0FBTztFQUNULEtBQUssV0FDSCxPQUFPO0VBQ1QsS0FBSyxZQUNILE9BQU87RUFDVCxLQUFLLGNBQ0gsT0FBTztFQUNULEtBQUssY0FDSCxPQUFPO0VBQ1QsS0FBSyxjQUNILE9BQU87RUFDVCxTQUNFLE9BQU8sS0FBSyxPQUFPO0NBQ3ZCO0FBQ0Y7Ozs7O0FBTUEsU0FBUyxnQkFBZ0IsUUFBb0M7Q0FDM0QsUUFBUSxRQUFSO0VBQ0UsS0FBSyxTQUNILE9BQU8sRUFBRSxNQUFNO0VBQ2pCLEtBQUssUUFDSCxPQUFPLEVBQUUsS0FBSztFQUNoQixLQUFLLE9BQ0gsT0FBTyxFQUFFLElBQUk7RUFDZixLQUFLLFdBQ0gsT0FBTyxFQUFFLFFBQVE7RUFDbkIsS0FBSyxZQUNILE9BQU8sRUFBRSxTQUFTO0VBQ3BCLEtBQUssU0FDSCxPQUFPLEVBQUUsTUFBTTtFQUNqQixLQUFLLFVBQ0gsT0FBTyxFQUFFLE9BQU87RUFDbEIsS0FBSyxhQUNILE9BQU8sRUFBRSxVQUFVO0VBQ3JCLEtBQUssT0FDSCxPQUFPLEVBQUUsSUFBSTtFQUNmLEtBQUssT0FDSCxPQUFPLEVBQUUsSUFBSTtFQUNmLEtBQUssVUFDSCxP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
|
|
482
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kLWNvbnZlcnRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvem9kLWNvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuLyoqXG4gKiB6b2QtY29udmVydGVyIOq1rOyEsVxuICogMS4g7Jyg7Yu466as7YuwXG4gKiAgLSBnZXRab2RUeXBlQnlJZFxuICpcbiAqIDIuIFpvZCDtg4DsnoUg67OA7ZmYIChFbnRpdHlQcm9wIC0+IFpvZFR5cGUpXG4gKiAgLSBwcm9wVG9ab2RUeXBlXG4gKlxuICogMy4gRW50aXR5UHJvcC9Ob2RlIC0+IFpvZCDsvZTrk5wg66y47J6Q7Je0XG4gKiAgLSBwcm9wVG9ab2RUeXBlRGVmXG4gKiAgLSBwcm9wTm9kZVRvWm9kVHlwZURlZlxuICpcbiAqIDQuIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66W8IO2VtOuLue2VmOuKlCBab2Qg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZggKFpvZFR5cGUgLT4gWm9kQ29kZSlcbiAqICAtIHpvZFR5cGVUb1pvZENvZGVcbiAqXG4gKiA1LiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmCAoWm9kVHlwZSAtPiBSZW5kZXJpbmdOb2RlKVxuICogIC0gem9kVHlwZVRvUmVuZGVyaW5nTm9kZVxuICogIC0gcmVzb2x2ZVJlbmRlclR5cGVcbiAqL1xuXG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzQmlnSW50ZWdlckFycmF5UHJvcCxcbiAgaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcCxcbiAgaXNCb29sZWFuQXJyYXlQcm9wLFxuICBpc0Jvb2xlYW5TaW5nbGVQcm9wLFxuICBpc0RhdGVBcnJheVByb3AsXG4gIGlzRGF0ZVNpbmdsZVByb3AsXG4gIGlzRW51bUFycmF5UHJvcCxcbiAgaXNFbnVtU2luZ2xlUHJvcCxcbiAgaXNJbnRlZ2VyQXJyYXlQcm9wLFxuICBpc0ludGVnZXJTaW5nbGVQcm9wLFxuICBpc0pzb25Qcm9wLFxuICBpc051bWJlckFycmF5UHJvcCxcbiAgaXNOdW1iZXJTaW5nbGVQcm9wLFxuICBpc051bWVyaWNBcnJheVByb3AsXG4gIGlzTnVtZXJpY1NpbmdsZVByb3AsXG4gIGlzT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzUmVsYXRpb25Qcm9wLFxuICBpc1NlYXJjaFRleHRQcm9wLFxuICBpc1N0cmluZ0FycmF5UHJvcCxcbiAgaXNTdHJpbmdTaW5nbGVQcm9wLFxuICBpc1RzVmVjdG9yUHJvcCxcbiAgaXNVdWlkQXJyYXlQcm9wLFxuICBpc1V1aWRTaW5nbGVQcm9wLFxuICBpc1ZlY3RvckFycmF5UHJvcCxcbiAgaXNWZWN0b3JTaW5nbGVQcm9wLFxuICBpc1ZpcnR1YWxQcm9wLFxuICBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gIFNvbmFtdUZpbGVTY2hlbWEsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIEVudGl0eVByb3BOb2RlLFxuICB0eXBlIFJlbmRlcmluZ05vZGUsXG4gIHR5cGUgWm9kU3RyaW5nRm9ybWF0LFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUltcG9ydFVybCB9IGZyb20gXCIuLi91dGlscy9lc20tdXRpbHNcIjtcbmltcG9ydCB7IHJ1bnRpbWVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGlzT2JqZWN0VmFsdWUsIGlzU3RyaW5nVmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuXG4vLyA8YW55PuulvCDsnpDsoJztlZjqs6AsIFpvZOyXkOyEnCDsoJzslb3tlZjripQg6riw67O47KCB7J24IEdlbmVyaWMgVHlwZSBQYXJhbWV0ZXLrpbwg7IKs7Jqp7ZWoLlxudHlwZSBBbnlab2RSZWNvcmQgPSB6LlpvZFJlY29yZDx6LlpvZFN0cmluZyB8IHouWm9kTnVtYmVyIHwgei5ab2RTeW1ib2wsIHouWm9kVHlwZT47XG50eXBlIEFueVpvZE9iamVjdCA9IHouWm9kT2JqZWN0O1xudHlwZSBBbnlab2ROdWxsYWJsZSA9IHouWm9kTnVsbGFibGU8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kRGVmYXVsdCA9IHouWm9kRGVmYXVsdDx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RVbmlvbiA9IHouWm9kVW5pb248ei5ab2RUeXBlW10+O1xudHlwZSBBbnlab2RBcnJheSA9IHouWm9kQXJyYXk8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kT3B0aW9uYWwgPSB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT47XG50eXBlIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCA9IHouWm9kVGVtcGxhdGVMaXRlcmFsO1xuXG4vKipcbiAqIOuCtOyepSDtg4DsnoUg7KCV7J2YIChab2Qg7Iqk7YKk66eIICsgVUkg66CM642U66eBIO2DgOyehSlcbiAqL1xuZXhwb3J0IGNvbnN0IEJVSUxUX0lOX1RZUEVTID0ge1xuICBTb25hbXVGaWxlOiB7XG4gICAgc2NoZW1hOiBTb25hbXVGaWxlU2NoZW1hLFxuICAgIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlXCIsXG4gICAgc2NoZW1hTmFtZTogXCJTb25hbXVGaWxlU2NoZW1hXCIsXG4gIH0sXG4gIFwiU29uYW11RmlsZVtdXCI6IHtcbiAgICBzY2hlbWE6IFNvbmFtdUZpbGVBcnJheVNjaGVtYSxcbiAgICByZW5kZXJUeXBlOiBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiLFxuICAgIHNjaGVtYU5hbWU6IFwiU29uYW11RmlsZUFycmF5U2NoZW1hXCIsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBnZXRCdWlsdEluU2NoZW1hTmFtZSh6b2RUeXBlOiB6LlpvZFR5cGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaGVkID0gT2JqZWN0LmVudHJpZXMoQlVJTFRfSU5fVFlQRVMpLmZpbmQoKFt0eXBlSWRdKSA9PiB6b2RUeXBlLmRlc2NyaXB0aW9uID09PSB0eXBlSWQpO1xuICByZXR1cm4gbWF0Y2hlZD8uWzFdLnNjaGVtYU5hbWU7XG59XG5cbi8qKlxuICogem9kRm9ybWF07J2EIFpvZCA0IOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICogWm9kIDTsl5DshJzripQgei5lbWFpbCgpLCB6LnV1aWQoKSDrk7Eg64+F66a97KCB7J24IO2VqOyImCDtmJXtg5zrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiB6b2RGb3JtYXRUb0NvZGUoZm9ybWF0OiBab2RTdHJpbmdGb3JtYXQpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgXCJpc29EYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6Lmlzby5kYXRlKClcIjtcbiAgICBjYXNlIFwiaXNvVGltZVwiOlxuICAgICAgcmV0dXJuIFwiei5pc28udGltZSgpXCI7XG4gICAgY2FzZSBcImlzb0RhdGV0aW1lXCI6XG4gICAgICByZXR1cm4gXCJ6Lmlzby5kYXRldGltZSgpXCI7XG4gICAgY2FzZSBcImlzb0R1cmF0aW9uXCI6XG4gICAgICByZXR1cm4gXCJ6Lmlzby5kdXJhdGlvbigpXCI7XG4gICAgY2FzZSBcImhhc2hNZDVcIjpcbiAgICAgIHJldHVybiAnei5oYXNoKFwibWQ1XCIpJztcbiAgICBjYXNlIFwiaGFzaFNoYTFcIjpcbiAgICAgIHJldHVybiAnei5oYXNoKFwic2hhMVwiKSc7XG4gICAgY2FzZSBcImhhc2hTaGEyNTZcIjpcbiAgICAgIHJldHVybiAnei5oYXNoKFwic2hhMjU2XCIpJztcbiAgICBjYXNlIFwiaGFzaFNoYTM4NFwiOlxuICAgICAgcmV0dXJuICd6Lmhhc2goXCJzaGEzODRcIiknO1xuICAgIGNhc2UgXCJoYXNoU2hhNTEyXCI6XG4gICAgICByZXR1cm4gJ3ouaGFzaChcInNoYTUxMlwiKSc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBgei4ke2Zvcm1hdH0oKWA7XG4gIH1cbn1cblxuLyoqXG4gKiB6b2RGb3JtYXTsnYQgWm9kIDQg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIFpvZCA07JeQ7ISc64qUIHouZW1haWwoKSwgei51dWlkKCkg65OxIOuPheumveyggeyduCDtlajsiJgg7ZiV7YOc66W8IOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gem9kRm9ybWF0VG9UeXBlKGZvcm1hdDogWm9kU3RyaW5nRm9ybWF0KTogei5ab2RUeXBlIHtcbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwiZW1haWxcIjpcbiAgICAgIHJldHVybiB6LmVtYWlsKCk7XG4gICAgY2FzZSBcInV1aWRcIjpcbiAgICAgIHJldHVybiB6LnV1aWQoKTtcbiAgICBjYXNlIFwidXJsXCI6XG4gICAgICByZXR1cm4gei51cmwoKTtcbiAgICBjYXNlIFwiaHR0cFVybFwiOlxuICAgICAgcmV0dXJuIHouaHR0cFVybCgpO1xuICAgIGNhc2UgXCJob3N0bmFtZVwiOlxuICAgICAgcmV0dXJuIHouaG9zdG5hbWUoKTtcbiAgICBjYXNlIFwiZW1vamlcIjpcbiAgICAgIHJldHVybiB6LmVtb2ppKCk7XG4gICAgY2FzZSBcImJhc2U2NFwiOlxuICAgICAgcmV0dXJuIHouYmFzZTY0KCk7XG4gICAgY2FzZSBcImJhc2U2NHVybFwiOlxuICAgICAgcmV0dXJuIHouYmFzZTY0dXJsKCk7XG4gICAgY2FzZSBcImhleFwiOlxuICAgICAgcmV0dXJuIHouaGV4KCk7XG4gICAgY2FzZSBcImp3dFwiOlxuICAgICAgcmV0dXJuIHouand0KCk7XG4gICAgY2FzZSBcIm5hbm9pZFwiOlxuICAgICAgcmV0dXJuIHoubmFub2lkKCk7XG4gICAgY2FzZSBcImN1aWRcIjpcbiAgICAgIHJldHVybiB6LmN1aWQoKTtcbiAgICBjYXNlIFwiY3VpZDJcIjpcbiAgICAgIHJldHVybiB6LmN1aWQyKCk7XG4gICAgY2FzZSBcInVsaWRcIjpcbiAgICAgIHJldHVybiB6LnVsaWQoKTtcbiAgICBjYXNlIFwiaXB2NFwiOlxuICAgICAgcmV0dXJuIHouaXB2NCgpO1xuICAgIGNhc2UgXCJpcHY2XCI6XG4gICAgICByZXR1cm4gei5pcHY2KCk7XG4gICAgY2FzZSBcIm1hY1wiOlxuICAgICAgcmV0dXJuIHoubWFjKCk7XG4gICAgY2FzZSBcImNpZHJ2NFwiOlxuICAgICAgcmV0dXJuIHouY2lkcnY0KCk7XG4gICAgY2FzZSBcImNpZHJ2NlwiOlxuICAgICAgcmV0dXJuIHouY2lkcnY2KCk7XG4gICAgY2FzZSBcImlzb0RhdGVcIjpcbiAgICAgIHJldHVybiB6Lmlzby5kYXRlKCk7XG4gICAgY2FzZSBcImlzb1RpbWVcIjpcbiAgICAgIHJldHVybiB6Lmlzby50aW1lKCk7XG4gICAgY2FzZSBcImlzb0RhdGV0aW1lXCI6XG4gICAgICByZXR1cm4gei5pc28uZGF0ZXRpbWUoKTtcbiAgICBjYXNlIFwiaXNvRHVyYXRpb25cIjpcbiAgICAgIHJldHVybiB6Lmlzby5kdXJhdGlvbigpO1xuICAgIGNhc2UgXCJoYXNoTWQ1XCI6XG4gICAgICByZXR1cm4gei5oYXNoKFwibWQ1XCIpO1xuICAgIGNhc2UgXCJoYXNoU2hhMVwiOlxuICAgICAgcmV0dXJuIHouaGFzaChcInNoYTFcIik7XG4gICAgY2FzZSBcImhhc2hTaGEyNTZcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEyNTZcIik7XG4gICAgY2FzZSBcImhhc2hTaGEzODRcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGEzODRcIik7XG4gICAgY2FzZSBcImhhc2hTaGE1MTJcIjpcbiAgICAgIHJldHVybiB6Lmhhc2goXCJzaGE1MTJcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIElE66Gc67aA7YSwIOuPmeyggeycvOuhnCBab2Qg7Iqk7YKk66eI66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqIOuCtOyepSDtg4DsnoUoQlVJTFRfSU5fVFlQRV9JRFMp7J2AIOuwlOuhnCDrsJjtmZjtlZjqs6AsXG4gKiDqt7gg7Jm464qUIGRpc3Qg65SU66CJ7Yag66as7JeQ7IScIEVTTeycvOuhnCBpbXBvcnTtlZjsl6wg6rCA7KC47Ji164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Wm9kVHlwZUJ5SWQoem9kVHlwZUlkOiBzdHJpbmcpOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICAvLyDrgrTsnqUg7YOA7J6FIOyymOumrFxuICBpZiAoXG4gICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICBCVUlMVF9JTl9UWVBFX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXVxuICAgICkuaW5jbHVkZXMoem9kVHlwZUlkKVxuICApIHtcbiAgICBjb25zdCBidWlsdEluVHlwZSA9XG4gICAgICBCVUlMVF9JTl9UWVBFU1tcbiAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyB6b2RUeXBlSWQgYXMga2V5b2YgdHlwZW9mIEJVSUxUX0lOX1RZUEVTXG4gICAgICBdO1xuICAgIGlmICghYnVpbHRJblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg64K07J6lIO2DgOyehSAke3pvZFR5cGVJZH3snZgg7Iqk7YKk66eI6rCAIOygleydmOuQmOyngCDslYrslZjsirXri4jri6RgKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWx0SW5UeXBlLnNjaGVtYS5kZXNjcmliZSh6b2RUeXBlSWQpO1xuICB9XG5cbiAgLy8g7ZSE66Gc7KCd7Yq47JeQ7IScIOygleydmO2VnCDtg4DsnoUg64+Z7KCBIOuhnOuTnFxuICBjb25zdCBtb2R1bGVQYXRoID0gRW50aXR5TWFuYWdlci5nZXRNb2R1bGVQYXRoKHpvZFR5cGVJZCk7XG4gIGNvbnN0IG1vZHVsZUFic1BhdGggPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIHJ1bnRpbWVQYXRoKGBkaXN0L2FwcGxpY2F0aW9uLyR7bW9kdWxlUGF0aH0uanNgKSxcbiAgKTtcbiAgY29uc3QgaW1wb3J0VXJsID0gY3JlYXRlSW1wb3J0VXJsKG1vZHVsZUFic1BhdGgpO1xuICBjb25zdCBpbXBvcnRlZCA9IGF3YWl0IGltcG9ydChpbXBvcnRVcmwpO1xuXG4gIGlmICghaW1wb3J0ZWRbem9kVHlwZUlkXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCB6b2RUeXBlSWQgJHt6b2RUeXBlSWR9YCk7XG4gIH1cbiAgcmV0dXJuIGltcG9ydGVkW3pvZFR5cGVJZF0uZGVzY3JpYmUoem9kVHlwZUlkKTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9w7J2EIFpvZCDtg4DsnoXsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICog6rCBIHByb3DsnZgg7YOA7J6F7JeQIOuUsOudvCDsoIHsoIjtlZwgWm9kIHZhbGlkYXRvcuulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9wVG9ab2RUeXBlKHByb3A6IEVudGl0eVByb3ApOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICBsZXQgem9kVHlwZTogei5ab2RUeXBlQW55ID0gei51bmtub3duKCk7XG4gIGlmIChpc0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYmlnaW50KCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0VudW1TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSAoYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCkpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICB6b2RUeXBlID0gem9kRm9ybWF0VG9UeXBlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCAmJiBcIm1heFwiIGluIHpvZFR5cGUpIHtcbiAgICAgICAgem9kVHlwZSA9IC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHpvZFR5cGUgYXMgei5ab2RTdHJpbmdcbiAgICAgICAgKS5tYXgocHJvcC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZ0FycmF5UHJvcChwcm9wKSkge1xuICAgIGxldCBlbGVtZW50VHlwZTogei5ab2RUeXBlO1xuICAgIGlmIChwcm9wLnpvZEZvcm1hdCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6b2RGb3JtYXRUb1R5cGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoICYmIFwibWF4XCIgaW4gZWxlbWVudFR5cGUpIHtcbiAgICAgICAgZWxlbWVudFR5cGUgPVxuICAgICAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgICAgZWxlbWVudFR5cGUgYXMgei5ab2RTdHJpbmdcbiAgICAgICAgICApLm1heChwcm9wLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgZWxlbWVudFR5cGUgPSB6LnN0cmluZygpLm1heChwcm9wLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRUeXBlID0gei5zdHJpbmcoKTtcbiAgICB9XG4gICAgem9kVHlwZSA9IGVsZW1lbnRUeXBlLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5udW1iZXIoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5ib29sZWFuKCk7XG4gIH0gZWxzZSBpZiAoaXNCb29sZWFuQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmRhdGUoKTtcbiAgfSBlbHNlIGlmIChpc0RhdGVBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoudXVpZCgpO1xuICB9IGVsc2UgaWYgKGlzVXVpZEFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzSnNvblByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gYXdhaXQgZ2V0Wm9kVHlwZUJ5SWQocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNTZWFyY2hUZXh0UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnN0cmluZygpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmFycmF5KHoubnVtYmVyKCkpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYXJyYXkoei5hcnJheSh6Lm51bWJlcigpKSk7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICAvLyBGSyDtg4DsnoXsnYQg7LC47KGwIOyXlO2LsO2LsCBQSyDtg4DsnoXsl5Ag65Sw6528IOqysOyglVxuICAgICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocHJvcC53aXRoKTtcbiAgICAgIGNvbnN0IHBrVHlwZSA9IHJlbEVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICAgIGlmIChwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIikge1xuICAgICAgICB6b2RUeXBlID0gei5zdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3DsnYQgem9kVHlwZeycvOuhnCDrs4DtmZjtlZjripTrjbAg7Iuk7YyoICR7cHJvcH19YCk7XG4gIH1cblxuICBpZiAoXG4gICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICBwcm9wIGFzIHsgdW5zaWduZWQ/OiBib29sZWFuIH1cbiAgICApLnVuc2lnbmVkXG4gICkge1xuICAgIHpvZFR5cGUgPSAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgIHpvZFR5cGUgYXMgei5ab2ROdW1iZXJcbiAgICApLm5vbm5lZ2F0aXZlKCk7XG4gIH1cbiAgaWYgKHByb3AubnVsbGFibGUpIHtcbiAgICB6b2RUeXBlID0gem9kVHlwZS5udWxsYWJsZSgpO1xuICB9XG5cbiAgcmV0dXJuIHpvZFR5cGU7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6FIOygleydmCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BUb1pvZFR5cGVEZWYocHJvcDogRW50aXR5UHJvcCwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgc3RtdDogc3RyaW5nO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmludCgpYDtcbiAgfSBlbHNlIGlmIChpc0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouYmlnaW50KClgO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzRW51bVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfWA7XG4gICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzRW51bUFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9LmFycmF5KClgO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1N0cmluZ1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBpZiAocHJvcC56b2RGb3JtYXQpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB6b2RGb3JtYXRUb0NvZGUocHJvcC56b2RGb3JtYXQpO1xuICAgICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke2Jhc2V9Lm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcC5sZW5ndGgpIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpLm1heCgke3Byb3AubGVuZ3RofSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3Auem9kRm9ybWF0KSB7XG4gICAgICBjb25zdCBiYXNlID0gem9kRm9ybWF0VG9Db2RlKHByb3Auem9kRm9ybWF0KTtcbiAgICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtiYXNlfS5tYXgoJHtwcm9wLmxlbmd0aH0pLmFycmF5KClgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7YmFzZX0uYXJyYXkoKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkubWF4KCR7cHJvcC5sZW5ndGh9KS5hcnJheSgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpYDtcbiAgfSBlbHNlIGlmIChpc051bWJlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmRhdGUoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5ib29sZWFuKClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoudXVpZCgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNKc29uUHJvcChwcm9wKSkge1xuICAgIC8vIOuCtOyepSDtg4DsnoXsnbgg6rK97JqwIOyKpO2CpOuniCDsnbTrpoTsnLzroZwg67OA7ZmYXG4gICAgaWYgKFxuICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgIEJVSUxUX0lOX1RZUEVfSURTIGFzIHJlYWRvbmx5IHN0cmluZ1tdXG4gICAgICApLmluY2x1ZGVzKHByb3AuaWQpXG4gICAgKSB7XG4gICAgICBjb25zdCBzY2hlbWFOYW1lID0gcHJvcC5pZCA9PT0gXCJTb25hbXVGaWxlXCIgPyBcIlNvbmFtdUZpbGVTY2hlbWFcIiA6IFwiU29uYW11RmlsZUFycmF5U2NoZW1hXCI7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtzY2hlbWFOYW1lfWA7XG4gICAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2goc2NoZW1hTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9YDtcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTZWFyY2hUZXh0UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LnN0cmluZygpYDtcbiAgfSBlbHNlIGlmIChpc1ZlY3RvclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6Lm51bWJlcigpKWA7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6LmFycmF5KHoubnVtYmVyKCkpKWA7XG4gIH0gZWxzZSBpZiAoaXNUc1ZlY3RvclByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9YDtcbiAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICBpZiAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHwgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSkge1xuICAgICAgLy8gRksgWm9kIO2DgOyeheydhCDssLjsobAg7JeU7Yuw7YuwIFBLIO2DgOyeheyXkCDrlLDrnbwg6rKw7KCVXG4gICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChwcm9wLndpdGgpO1xuICAgICAgY29uc3QgcGtUeXBlID0gcmVsRW50aXR5LmdldFBrVHlwZSgpO1xuICAgICAgaWYgKHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiKSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9X2lkOiB6LnN0cmluZygpYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9X2lkOiB6LmludCgpYDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8g6re47Jm4IHJlbGF0aW9uIOy8gOydtOyKpCDsoJzsmbhcbiAgICAgIHJldHVybiBgLy8gJHtwcm9wLm5hbWV9OiAke3Byb3AucmVsYXRpb25UeXBlfSAke3Byb3Aud2l0aH1gO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCIvLyB1bmFibGUgdG8gcmVzb2x2ZVwiO1xuICB9XG5cbiAgaWYgKFxuICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgcHJvcCBhcyB7IHVuc2lnbmVkPzogYm9vbGVhbiB9XG4gICAgKS51bnNpZ25lZFxuICApIHtcbiAgICBzdG10ICs9IFwiLm5vbm5lZ2F0aXZlKClcIjtcbiAgfVxuICBpZiAocHJvcC5udWxsYWJsZSkge1xuICAgIHN0bXQgKz0gXCIubnVsbGFibGUoKVwiO1xuICB9XG5cbiAgLy8gbnVtZXJpYyDtg4DsnoXsnZgg6rK97JqwIG51bGxhYmxlIOydtO2bhOyXkCBtZXRhIOy2lOqwgCAo66mU7YOA642w7J207YSw6rCAIOy1nOyDgeychCDroIjrsqjsl5Ag7J6I7Ja07JW8IO2VqClcbiAgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkgfHwgaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCArPSAnLm1ldGEoeyBTb25hbXVQcm9wVHlwZTogXCJudW1lcmljXCIgfSknO1xuICB9XG5cbiAgcmV0dXJuIGAke3N0bXR9LGA7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcE5vZGXrpbwgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBwbGFpbiwgYXJyYXksIG9iamVjdCDrhbjrk5wg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCDsspjrpqztlZjsl6wg7KSR7LKpIOq1rOyhsOulvCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcInBsYWluXCIpIHtcbiAgICByZXR1cm4gcHJvcFRvWm9kVHlwZURlZihwcm9wTm9kZS5wcm9wLCBpbmplY3RJbXBvcnRLZXlzKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5hcnJheSh6Lm9iamVjdCh7XCIsXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZFByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihjaGlsZFByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICBcIlwiLFxuICAgICAgXCJ9KSksXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIGB9KSR7cHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPyBcIi5udWxsYWJsZSgpXCIgOiBcIlwifSxgLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvVHNUeXBlRGVmKHp0OiB6LlpvZFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHp0LmRlZi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICBjYXNlIFwibnVsbFwiOlxuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICBjYXNlIFwibmV2ZXJcIjpcbiAgICAgIHJldHVybiB6dC5kZWYudHlwZTtcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwiRGF0ZVwiO1xuICAgIGNhc2UgXCJudWxsYWJsZVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovICh6dCBhcyBBbnlab2ROdWxsYWJsZSkuZGVmLmlubmVyVHlwZSl9IHwgbnVsbGA7XG4gICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgIHJldHVybiB6b2RUeXBlVG9Uc1R5cGVEZWYoXG4gICAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHp0IGFzIEFueVpvZERlZmF1bHRcbiAgICAgICAgKS5kZWYuaW5uZXJUeXBlLFxuICAgICAgKTtcbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHJlY29yZFR5cGUgPVxuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHp0IGFzIEFueVpvZFJlY29yZDtcbiAgICAgIHJldHVybiBgeyBbIGtleTogJHt6b2RUeXBlVG9Uc1R5cGVEZWYocmVjb3JkVHlwZS5kZWYua2V5VHlwZSl9IF06ICR7em9kVHlwZVRvVHNUeXBlRGVmKHJlY29yZFR5cGUuZGVmLnZhbHVlVHlwZSl9fWA7XG4gICAgfVxuICAgIGNhc2UgXCJsaXRlcmFsXCI6XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgenQgYXMgei5ab2RMaXRlcmFsXG4gICAgICAgICkudmFsdWVzLFxuICAgICAgKVxuICAgICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChpc1N0cmluZ1ZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBcIiR7dmFsdWV9XCJgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGBudWxsYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGB1bmRlZmluZWRgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIiB8IFwiKTtcbiAgICBjYXNlIFwidW5pb25cIjpcbiAgICAgIHJldHVybiBgJHtcbiAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgenQgYXMgQW55Wm9kVW5pb25cbiAgICAgICAgKS5vcHRpb25zXG4gICAgICAgICAgLm1hcCgob3B0aW9uKSA9PiB6b2RUeXBlVG9Uc1R5cGVEZWYob3B0aW9uKSlcbiAgICAgICAgICAuam9pbihcIiB8IFwiKVxuICAgICAgfWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIHJldHVybiBgJHsvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovICh6dCBhcyB6LlpvZEVudW0pLm9wdGlvbnMubWFwKCh2YWwpID0+IGBcIiR7dmFsfVwiYCkuam9pbihcIiB8IFwiKX1gO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovICh6dCBhcyBBbnlab2RBcnJheSkuZWxlbWVudCl9W11gO1xuICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgY29uc3Qgb2JqZWN0RmllbGRzID0gLyogU0FGRVRZOiBab2TsnZggb2JqZWN0IO2MkOuzhCDrtoTquLDqsIAg6rCd7LK0IO2VhOuTnCDqs4Tslb3snYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgIHp0IGFzIEFueVpvZE9iamVjdFxuICAgICAgKVtcInNoYXBlXCJdO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKG9iamVjdEZpZWxkcykubWFwKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAob2JqZWN0RmllbGRzW2tleV0uZGVmLnR5cGUgPT09IFwib3B0aW9uYWxcIikge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX0/OiAke3pvZFR5cGVUb1RzVHlwZURlZihvYmplY3RGaWVsZHNba2V5XS5kZWYuaW5uZXJUeXBlKX0sYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7em9kVHlwZVRvVHNUeXBlRGVmKG9iamVjdEZpZWxkc1trZXldKX0sYDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBcIn1cIixcbiAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgY2FzZSBcIm9wdGlvbmFsXCI6XG4gICAgICByZXR1cm4gYCR7em9kVHlwZVRvVHNUeXBlRGVmKC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKHp0IGFzIEFueVpvZE9wdGlvbmFsKS5kZWYuaW5uZXJUeXBlKX0gfCB1bmRlZmluZWRgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9IC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICB6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWxcbiAgICAgICkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbOydgCBzdHJpbmfsnLzroZwg7Y+067CxXG4gICAgICBpZiAoIWRlZi5wYXJ0cyB8fCBkZWYucGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgICAgfVxuXG4gICAgICAvLyDqsIEgcGFydOulvCBUeXBlU2NyaXB0IO2DgOyehSDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgLy8g66as7YSw65+0IOqwkiAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG51bGwsIHVuZGVmaW5lZClcbiAgICAgICAgaWYgKGlzU3RyaW5nVmFsdWUocGFydCkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7cGFydH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWm9kVHlwZSAtIOyerOq3gOyggeycvOuhnCDrs4DtmZhcbiAgICAgICAgaWYgKHBhcnQgJiYgaXNPYmplY3RWYWx1ZShwYXJ0KSAmJiBwYXJ0IGluc3RhbmNlb2Ygei5ab2RUeXBlKSB7XG4gICAgICAgICAgY29uc3QgaW5uZXJUeXBlID0gem9kVHlwZVRvVHNUeXBlRGVmKFxuICAgICAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJ0IGFzIHouWm9kVHlwZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBgJFxceyR7aW5uZXJUeXBlfX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBgXFwke3N0cmluZ31gO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgXFxgJHtwYXJ0cy5qb2luKFwiXCIpfVxcYGA7XG4gICAgfVxuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvWm9kQ29kZSh6dDogei5ab2RUeXBlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdKTogc3RyaW5nIHtcbiAgY29uc3QgYnVpbHRJblNjaGVtYU5hbWUgPSBnZXRCdWlsdEluU2NoZW1hTmFtZSh6dCk7XG4gIGlmIChidWlsdEluU2NoZW1hTmFtZSkge1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChidWlsdEluU2NoZW1hTmFtZSk7XG4gICAgcmV0dXJuIGJ1aWx0SW5TY2hlbWFOYW1lO1xuICB9XG5cbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bWJlcigpXCI7XG4gICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgcmV0dXJuIFwiei5iaWdpbnQoKVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJ6LmJvb2xlYW4oKVwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6LmRhdGUoKVwiO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bGwoKVwiO1xuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgIHJldHVybiBcInoudW5kZWZpbmVkKClcIjtcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgICByZXR1cm4gXCJ6LmFueSgpXCI7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIHJldHVybiBcInoudW5rbm93bigpXCI7XG4gICAgY2FzZSBcIm5ldmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm5ldmVyKClcIjtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKHp0IGFzIEFueVpvZE51bGxhYmxlKS5kZWYuaW5uZXJUeXBlLCBpbmplY3RJbXBvcnRLZXlzKX0ubnVsbGFibGUoKWA7XG4gICAgY2FzZSBcImRlZmF1bHRcIjoge1xuICAgICAgY29uc3QgekRlZmF1bHREZWYgPVxuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgICAgICB6dCBhcyBBbnlab2REZWZhdWx0XG4gICAgICAgICkuZGVmO1xuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1pvZENvZGUoekRlZmF1bHREZWYuaW5uZXJUeXBlLCBpbmplY3RJbXBvcnRLZXlzKX0uZGVmYXVsdCgke3pEZWZhdWx0RGVmLmRlZmF1bHRWYWx1ZX0pYDtcbiAgICB9XG4gICAgY2FzZSBcInJlY29yZFwiOiB7XG4gICAgICBjb25zdCB6UmVjb3JkRGVmID1cbiAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgenQgYXMgQW55Wm9kUmVjb3JkXG4gICAgICAgICkuZGVmO1xuICAgICAgcmV0dXJuIGB6LnJlY29yZCgke3pvZFR5cGVUb1pvZENvZGUoelJlY29yZERlZi5rZXlUeXBlLCBpbmplY3RJbXBvcnRLZXlzKX0sICR7em9kVHlwZVRvWm9kQ29kZShcbiAgICAgICAgelJlY29yZERlZi52YWx1ZVR5cGUsXG4gICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICApfSlgO1xuICAgIH1cbiAgICBjYXNlIFwibGl0ZXJhbFwiOiB7XG4gICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20oXG4gICAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHp0IGFzIHouWm9kTGl0ZXJhbDxzdHJpbmcgfCBudW1iZXI+XG4gICAgICAgICkudmFsdWVzLFxuICAgICAgKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChpc1N0cmluZ1ZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGB6LmxpdGVyYWwoJHtpdGVtc1swXX0pYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgei5saXRlcmFsKFske2l0ZW1zLmpvaW4oXCIsIFwiKX1dKWA7XG4gICAgfVxuICAgIGNhc2UgXCJ1bmlvblwiOlxuICAgICAgcmV0dXJuIGB6LnVuaW9uKFske1xuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgICAgICB6dCBhcyBBbnlab2RVbmlvblxuICAgICAgICApLmRlZi5vcHRpb25zXG4gICAgICAgICAgLm1hcCgob3B0aW9uOiB6LlpvZFR5cGUpID0+IHpvZFR5cGVUb1pvZENvZGUob3B0aW9uLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgICAuam9pbihcIixcIilcbiAgICAgIH1dKWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIC8vIE5PVEU6IHouZW51bShbXCJBXCIsIFwiQlwiXSnrj4Qgei5lbnVtKHsgQTogXCJBXCIsIEI6IFwiQlwiIH0p66GcIOyymOumrOuQqC5cbiAgICAgIHJldHVybiBgei5lbnVtKHske09iamVjdC5lbnRyaWVzKFxuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgICAgICB6dCBhcyB6LlpvZEVudW1cbiAgICAgICAgKS5kZWYuZW50cmllcyxcbiAgICAgIClcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsXSkgPT4gKGlzU3RyaW5nVmFsdWUodmFsKSA/IGAke2tleX06IFwiJHt2YWx9XCJgIDogYCR7a2V5fTogJHt2YWx9YCkpXG4gICAgICAgIC5qb2luKFwiLCBcIil9fSlgO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGB6LmFycmF5KCR7em9kVHlwZVRvWm9kQ29kZSgvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovICh6dCBhcyB6LlpvZEFycmF5PHouWm9kVHlwZT4pLmRlZi5lbGVtZW50LCBpbmplY3RJbXBvcnRLZXlzKX0pYDtcbiAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgIGNvbnN0IG9iamVjdEZpZWxkcyA9IC8qIFNBRkVUWTogWm9k7J2YIG9iamVjdCDtjJDrs4Qg67aE6riw6rCAIOqwneyytCDtlYTrk5wg6rOE7JW97J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICB6dCBhcyBBbnlab2RPYmplY3RcbiAgICAgIClbXCJzaGFwZVwiXTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgICAuLi5PYmplY3Qua2V5cyhvYmplY3RGaWVsZHMpLm1hcChcbiAgICAgICAgICAoa2V5KSA9PiBgJHtrZXl9OiAke3pvZFR5cGVUb1pvZENvZGUob2JqZWN0RmllbGRzW2tleV0sIGluamVjdEltcG9ydEtleXMpfSxgLFxuICAgICAgICApLFxuICAgICAgICBcIn0pXCIsXG4gICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIGNhc2UgXCJvcHRpb25hbFwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1pvZENvZGUoLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoenQgYXMgei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBpbmplY3RJbXBvcnRLZXlzKX0ub3B0aW9uYWwoKWA7XG4gICAgY2FzZSBcImZpbGVcIjpcbiAgICAgIHJldHVybiBgei5maWxlKClgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9IC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICB6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWxcbiAgICAgICkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbFxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJ6LnRlbXBsYXRlTGl0ZXJhbChbXSlcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgLy8g66y47J6Q7Je0IOumrO2EsOuftFxuICAgICAgICBpZiAoaXNTdHJpbmdWYWx1ZShwYXJ0KSkge1xuICAgICAgICAgIHJldHVybiBgXCIke3BhcnR9XCJgO1xuICAgICAgICB9XG4gICAgICAgIC8vIFpvZFR5cGUgLSDsnqzqt4DsoIHsnLzroZwg67OA7ZmYXG4gICAgICAgIGlmIChwYXJ0ICYmIGlzT2JqZWN0VmFsdWUocGFydCkgJiYgcGFydCBpbnN0YW5jZW9mIHouWm9kVHlwZSkge1xuICAgICAgICAgIHJldHVybiB6b2RUeXBlVG9ab2RDb2RlKFxuICAgICAgICAgICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJ0IGFzIHouWm9kVHlwZSxcbiAgICAgICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIO2PtOuwsVxuICAgICAgICByZXR1cm4gXCJ6LnN0cmluZygpXCI7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGB6LnRlbXBsYXRlTGl0ZXJhbChbJHtwYXJ0cy5qb2luKFwiLCBcIil9XSlgO1xuICAgIH1cbiAgICBjYXNlIFwiaW50ZXJzZWN0aW9uXCI6IHtcbiAgICAgIGNvbnN0IHpJbnRlcnNlY3Rpb25EZWYgPVxuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgICAgICB6dCBhcyB6LlpvZEludGVyc2VjdGlvbjx6LlpvZFR5cGUsIHouWm9kVHlwZT5cbiAgICAgICAgKS5kZWY7XG4gICAgICByZXR1cm4gYHouaW50ZXJzZWN0aW9uKCR7em9kVHlwZVRvWm9kQ29kZShcbiAgICAgICAgekludGVyc2VjdGlvbkRlZi5sZWZ0LFxuICAgICAgICBpbmplY3RJbXBvcnRLZXlzLFxuICAgICAgKX0sICR7em9kVHlwZVRvWm9kQ29kZSh6SW50ZXJzZWN0aW9uRGVmLnJpZ2h0LCBpbmplY3RJbXBvcnRLZXlzKX0pYDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyerOq3gOyggeycvOuhnCDspJHssqnrkJwg7YOA7J6F65Ok7J2EIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueSxcbiAgYmFzZUtleTogc3RyaW5nID0gXCJyb290XCIsXG4pOiBSZW5kZXJpbmdOb2RlIHtcbiAgY29uc3QgZGVmID0ge1xuICAgIG5hbWU6IGJhc2VLZXksXG4gICAgbGFiZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoYmFzZUtleSwgZmFsc2UpLFxuICAgIHpvZFR5cGUsXG4gIH07XG5cbiAgLyoqXG4gICAqIOy8gOydtOyKpCDsspjrpqwg7Iic7IScXG4gICAqXG4gICAqIDEuIO2KueyImCDsvIDsnbTsiqQgKGRlc2NyaXB0aW9uIOq4sOuwmClcbiAgICogICAgLSBTb25hbXVGaWxlL1NvbmFtdUZpbGVbXSA6IHoub2JqZWN0L3ouYXJyYXnsnbTsp4Drp4wg7YyM7J28IOyXheuhnOuTnOyaqSDrgrTsnqUg7YOA7J6FXG4gICAqXG4gICAqIDIuIOydvOuwmCDsvIDsnbTsiqQgKGluc3RhbmNlb2Yg6riw67CYKVxuICAgKiAgICAtIHouWm9kT2JqZWN0IDog7J2867CYIOqwneyytFxuICAgKiAgICAtIHouWm9kQXJyYXkgOiDsnbzrsJgg67Cw7Je0XG4gICAqICAgICAgLSB2ZWN0b3IgOiB6LmFycmF5KHoubnVtYmVyKeydtOyngOunjCDrhKTsnbTrsI0g6riw67CY7Jy866GcIOuyoe2EsCDsnoTrsqDrlKlcbiAgICogICAgICAtIOydvOuwmCDrsLDsl7QgOiDqt7gg7Jm4XG4gICAqICAgIC0gei5ab2RVbmlvbiwgei5ab2RPcHRpb25hbCwgei5ab2ROdWxsYWJsZSA6IOycoO2LuOumrO2LsCDtg4DsnoVcbiAgICogICAgLSDquLDtg4AgOiByZXNvbHZlUmVuZGVyVHlwZSgp7Jy866GcIOyymOumrFxuICAgKi9cblxuICAvLyDtirnsiJgg7LyA7J207IqkOiBTb25hbXVGaWxlW10g7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgIHJldHVybiB7IC4uLmRlZiwgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIiB9O1xuICB9XG5cbiAgLy8g7Yq57IiYIOy8gOydtOyKpDogU29uYW11RmlsZSDri6jsnbwg7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlXCIpIHtcbiAgICByZXR1cm4geyAuLi5kZWYsIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlXCIgfTtcbiAgfVxuXG4gIC8vIOydvOuwmCDsvIDsnbTsiqQ6IFpvZE9iamVjdCDssrTtgaxcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSBPYmplY3Qua2V5cyh6b2RUeXBlW1wic2hhcGVcIl0pO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY29sdW1uS2V5cy5tYXAoKGtleSkgPT4ge1xuICAgICAgY29uc3QgaW5uZXJUeXBlID0gem9kVHlwZVtcInNoYXBlXCJdW2tleV07XG4gICAgICByZXR1cm4gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShpbm5lclR5cGUsIGtleSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgY29uc3QgaW5uZXJUeXBlID1cbiAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICB6b2RUeXBlIGFzIHouWm9kQXJyYXk8ei5ab2RUeXBlQW55PlxuICAgICAgKS5kZWYuZWxlbWVudDtcbiAgICAvLyB2ZWN0b3Ig7YOA7J6FIO2MkOuzhDogbnVtYmVyIOuwsOyXtOydtOuptOyEnCBlbWJlZGRpbmcsIHZlY3RvciDrk7HsnZgg7J2066aE7J2EIOqwgOynhCDqsr3smrBcbiAgICBpZiAoXG4gICAgICBpbm5lclR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlciAmJlxuICAgICAgKGJhc2VLZXkuaW5jbHVkZXMoXCJlbWJlZGRpbmdcIikgfHwgYmFzZUtleS5pbmNsdWRlcyhcInZlY3RvclwiKSlcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZixcbiAgICAgICAgcmVuZGVyVHlwZTogXCJ2ZWN0b3JcIixcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWYsXG4gICAgICByZW5kZXJUeXBlOiBcImFycmF5XCIsXG4gICAgICBlbGVtZW50OiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgfTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmlvbikge1xuICAgIGNvbnN0IG9wdGlvbk5vZGVzID1cbiAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICB6b2RUeXBlIGFzIHouWm9kVW5pb248ei5ab2RUeXBlW10+XG4gICAgICApLmRlZi5vcHRpb25zLm1hcCgob3B0KSA9PiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKG9wdCwgYmFzZUtleSkpO1xuICAgIC8vIFRPRE86IFpvZFVuaW9u7J20IOuTpOyWtOyeiOuKlCDqsr3smrAg7ZW465Ok66eBXG4gICAgcmV0dXJuIG9wdGlvbk5vZGVzWzBdO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gICAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHpvZFR5cGUgYXMgei5ab2RPcHRpb25hbDx6LlpvZFR5cGU+XG4gICAgICAgICkuZGVmLmlubmVyVHlwZSxcbiAgICAgICAgYmFzZUtleSxcbiAgICAgICksXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gICAgICAgIC8qIFNBRkVUWTog7ISg7ZaJIFpvZCDsooXrpZgg67aE6riw7JmAIO2FnO2UjOumvyDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHpvZFR5cGUgYXMgei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+XG4gICAgICAgICkuZGVmLmlubmVyVHlwZSxcbiAgICAgICAgYmFzZUtleSxcbiAgICAgICksXG4gICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWYsXG4gICAgICByZW5kZXJUeXBlOiByZXNvbHZlUmVuZGVyVHlwZShiYXNlS2V5LCB6b2RUeXBlKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogWm9kIO2DgOyeheqzvCDtgqQg7J2066aE7Jy866Gc67aA7YSwIOyggeygiO2VnCBSZW5kZXJUeXBl7J2EIOqysOygle2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlbmRlclR5cGUoa2V5OiBzdHJpbmcsIHpvZFR5cGU6IHouWm9kVHlwZUFueSk6IFJlbmRlcmluZ05vZGVbXCJyZW5kZXJUeXBlXCJdIHtcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZERhdGUpIHtcbiAgICByZXR1cm4gXCJkYXRldGltZVwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LmNvcmUuJFpvZFN0cmluZykge1xuICAgIC8vIE5PVEU6IHouWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VmOuptCB6LnVybCgpLCB6LmVtYWlsKCkg65Ox7J2YIO2DgOyeheyXkOyEnCDrrLjsoJzqsIAg7IOd6riw66+A66GcIHouY29yZS4kWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VqFxuICAgIC8vIEZJWE1FOiBlbWFpbOydtOuCmCB1cmwg7YOA7J6FIOuTseyXkCDrjIDtlZwg7LKY66as6rCAIO2VhOyalO2VqFxuICAgIGlmICh6b2RUeXBlLmRlc2NyaXB0aW9uID09PSBcIlNRTERhdGVUaW1lU3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1kYXRldGltZVwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiZGF0ZVwiKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGVcIjtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctaWRcIjtcbiAgICB9IGVsc2UgaWYgKGtleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWZrX2lkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICBpZiAoa2V5ID09PSBcImlkXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1pZFwiO1xuICAgIH0gZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiX2lkXCIpKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItZmtfaWRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLXBsYWluXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEJvb2xlYW4pIHtcbiAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgIHJldHVybiBcImVudW1zXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kUmVjb3JkKSB7XG4gICAgcmV0dXJuIFwicmVjb3JkXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQW55IHx8IHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVua25vd24pIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmlvbikge1xuICAgIHJldHVybiBcInN0cmluZy1wbGFpblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZExpdGVyYWwpIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RUZW1wbGF0ZUxpdGVyYWwpIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlLmRlZi50eXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgcmV0dXJuIFwib2JqZWN0XCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7IuxIOu2iOqwgCAke2tleX0gJHt6b2RUeXBlLmRlZi50eXBlfWApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThGQSxTQUFTLHFCQUFxQixTQUF3QztDQUVwRSxPQURnQixPQUFPLFFBQVEsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksUUFBUSxnQkFBZ0IsTUFDbkYsQ0FBQSxHQUFVLEVBQUUsQ0FBQztBQUN0Qjs7Ozs7QUFNQSxTQUFTLGdCQUFnQixRQUFpQztDQUN4RCxRQUFRLFFBQVI7RUFDRSxLQUFLLFdBQ0gsT0FBTztFQUNULEtBQUssV0FDSCxPQUFPO0VBQ1QsS0FBSyxlQUNILE9BQU87RUFDVCxLQUFLLGVBQ0gsT0FBTztFQUNULEtBQUssV0FDSCxPQUFPO0VBQ1QsS0FBSyxZQUNILE9BQU87RUFDVCxLQUFLLGNBQ0gsT0FBTztFQUNULEtBQUssY0FDSCxPQUFPO0VBQ1QsS0FBSyxjQUNILE9BQU87RUFDVCxTQUNFLE9BQU8sS0FBSyxPQUFPO0NBQ3ZCO0FBQ0Y7Ozs7O0FBTUEsU0FBUyxnQkFBZ0IsUUFBb0M7Q0FDM0QsUUFBUSxRQUFSO0VBQ0UsS0FBSyxTQUNILE9BQU8sRUFBRSxNQUFNO0VBQ2pCLEtBQUssUUFDSCxPQUFPLEVBQUUsS0FBSztFQUNoQixLQUFLLE9BQ0gsT0FBTyxFQUFFLElBQUk7RUFDZixLQUFLLFdBQ0gsT0FBTyxFQUFFLFFBQVE7RUFDbkIsS0FBSyxZQUNILE9BQU8sRUFBRSxTQUFTO0VBQ3BCLEtBQUssU0FDSCxPQUFPLEVBQUUsTUFBTTtFQUNqQixLQUFLLFVBQ0gsT0FBTyxFQUFFLE9BQU87RUFDbEIsS0FBSyxhQUNILE9BQU8sRUFBRSxVQUFVO0VBQ3JCLEtBQUssT0FDSCxPQUFPLEVBQUUsSUFBSTtFQUNmLEtBQUssT0FDSCxPQUFPLEVBQUUsSUFBSTtFQUNmLEtBQUssVUFDSCxP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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { init_types, isBelongsToOneRelationProp, isManyToManyRelationProp, isOneToOneRelationProp, isRelationProp } from "../types/types.js";
|
|
3
3
|
import { EntityManager, init_entity_manager } from "../entity/entity-manager.js";
|
|
4
|
-
|
|
4
|
+
// src/testing/_relation-graph.ts
|
|
5
5
|
var RelationGraph;
|
|
6
6
|
var init__relation_graph = __esmMin((() => {
|
|
7
7
|
init_entity_manager();
|
|
@@ -69,8 +69,7 @@ var init__relation_graph = __esmMin((() => {
|
|
|
69
69
|
}
|
|
70
70
|
};
|
|
71
71
|
}));
|
|
72
|
-
//#endregion
|
|
73
72
|
init__relation_graph();
|
|
74
73
|
export { RelationGraph, init__relation_graph };
|
|
75
74
|
|
|
76
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3JlbGF0aW9uLWdyYXBoLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL19yZWxhdGlvbi1ncmFwaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBGaXh0dXJlUmVjb3JkLCB0eXBlIFJlbGF0aW9uTm9kZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcCxcbiAgaXNPbmVUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNSZWxhdGlvblByb3AsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vLyDqtIDqs4Qg6re4656Y7ZSEIOyymOumrOulvCDrs4Trj4Qg7YG0656Y7Iqk66GcIOu2hOumrFxuZXhwb3J0IGNsYXNzIFJlbGF0aW9uR3JhcGgge1xuICBwcml2YXRlIGdyYXBoOiBNYXA8c3RyaW5nLCBSZWxhdGlvbk5vZGU+ID0gbmV3IE1hcCgpO1xuXG4gIGJ1aWxkR3JhcGgoZml4dHVyZXM6IEZpeHR1cmVSZWNvcmRbXSk6IHZvaWQge1xuICAgIHRoaXMuZ3JhcGguY2xlYXIoKTtcblxuICAgIC8vIDEuIOuFuOuTnCDstpTqsIBcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgZml4dHVyZXMpIHtcbiAgICAgIHRoaXMuZ3JhcGguc2V0KGZpeHR1cmUuZml4dHVyZUlkLCB7XG4gICAgICAgIGZpeHR1cmVJZDogZml4dHVyZS5maXh0dXJlSWQsXG4gICAgICAgIGVudGl0eUlkOiBmaXh0dXJlLmVudGl0eUlkLFxuICAgICAgICByZWxhdGVkOiBuZXcgU2V0KCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAyLiDsnZjsobTshLEg7LaU6rCAXG4gICAgZm9yIChjb25zdCBmaXh0dXJlIG9mIGZpeHR1cmVzKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ncmFwaC5nZXQoZml4dHVyZS5maXh0dXJlSWQpO1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgbm90IGZvdW5kIGZvciBmaXh0dXJlICR7Zml4dHVyZS5maXh0dXJlSWR9YCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgWywgY29sdW1uXSBvZiBPYmplY3QuZW50cmllcyhmaXh0dXJlLmNvbHVtbnMpKSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBjb2x1bW4ucHJvcDtcblxuICAgICAgICBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fFxuICAgICAgICAgICAgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZEZpeHR1cmVJZCA9IGAke3Byb3Aud2l0aH0jJHtjb2x1bW4udmFsdWV9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyYXBoLmhhcyhyZWxhdGVkRml4dHVyZUlkKSkge1xuICAgICAgICAgICAgICBub2RlLnJlbGF0ZWQuYWRkKHJlbGF0ZWRGaXh0dXJlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgICAgICAgICAvLyBNYW55VG9NYW55IOq0gOqzhOydmCDqsr3smrAg7JaR67Cp7ZalIOydmOyhtOyEsSDstpTqsIBcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2x1bW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtmaXh0dXJlLmZpeHR1cmVJZH0uJHtwcm9wLm5hbWV9IOq0gOqzhCDqsJLsnYAg67Cw7Je07J207Ja07JW8IO2VqeuLiOuLpC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRJZHMgPSBjb2x1bW4udmFsdWU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlbGF0ZWRJZCBvZiByZWxhdGVkSWRzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRGaXh0dXJlSWQgPSBgJHtwcm9wLndpdGh9IyR7cmVsYXRlZElkfWA7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmdyYXBoLmhhcyhyZWxhdGVkRml4dHVyZUlkKSkge1xuICAgICAgICAgICAgICAgIG5vZGUucmVsYXRlZC5hZGQocmVsYXRlZEZpeHR1cmVJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5nZXQocmVsYXRlZEZpeHR1cmVJZCk/LnJlbGF0ZWQuYWRkKGZpeHR1cmUuZml4dHVyZUlkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEluc2VydGlvbk9yZGVyKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgb3JkZXI6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgdGVtcFZpc2l0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbnN0IHZpc2l0ID0gKGZpeHR1cmVJZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodmlzaXRlZC5oYXMoZml4dHVyZUlkKSkgcmV0dXJuO1xuICAgICAgaWYgKHRlbXBWaXNpdGVkLmhhcyhmaXh0dXJlSWQpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZCBpbnZvbHZpbmc6ICR7Zml4dHVyZUlkfWApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRlbXBWaXNpdGVkLmFkZChmaXh0dXJlSWQpO1xuXG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ncmFwaC5nZXQoZml4dHVyZUlkKTtcbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb2RlIG5vdCBmb3VuZCBmb3IgZml4dHVyZSAke2ZpeHR1cmVJZH1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KG5vZGUuZW50aXR5SWQpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRlcElkIG9mIG5vZGUucmVsYXRlZCkge1xuICAgICAgICBjb25zdCBkZXBOb2RlID0gdGhpcy5ncmFwaC5nZXQoZGVwSWQpO1xuICAgICAgICBpZiAoZGVwTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb2RlIG5vdCBmb3VuZCBmb3IgZml4dHVyZSAke2RlcElkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmVsb25nc1RvT25lIOq0gOqzhOydtOuptOyEnCBudWxsYWJsZeydtCDslYTri4wg6rK97JqwIOuovOyggCDrsKnrrLhcbiAgICAgICAgY29uc3QgcmVsYXRpb25Qcm9wID0gZW50aXR5LnByb3BzLmZpbmQoXG4gICAgICAgICAgKHByb3ApID0+
|
|
75
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3JlbGF0aW9uLWdyYXBoLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL19yZWxhdGlvbi1ncmFwaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBGaXh0dXJlUmVjb3JkLCB0eXBlIFJlbGF0aW9uTm9kZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcCxcbiAgaXNPbmVUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNSZWxhdGlvblByb3AsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vLyDqtIDqs4Qg6re4656Y7ZSEIOyymOumrOulvCDrs4Trj4Qg7YG0656Y7Iqk66GcIOu2hOumrFxuZXhwb3J0IGNsYXNzIFJlbGF0aW9uR3JhcGgge1xuICBwcml2YXRlIGdyYXBoOiBNYXA8c3RyaW5nLCBSZWxhdGlvbk5vZGU+ID0gbmV3IE1hcCgpO1xuXG4gIGJ1aWxkR3JhcGgoZml4dHVyZXM6IEZpeHR1cmVSZWNvcmRbXSk6IHZvaWQge1xuICAgIHRoaXMuZ3JhcGguY2xlYXIoKTtcblxuICAgIC8vIDEuIOuFuOuTnCDstpTqsIBcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgZml4dHVyZXMpIHtcbiAgICAgIHRoaXMuZ3JhcGguc2V0KGZpeHR1cmUuZml4dHVyZUlkLCB7XG4gICAgICAgIGZpeHR1cmVJZDogZml4dHVyZS5maXh0dXJlSWQsXG4gICAgICAgIGVudGl0eUlkOiBmaXh0dXJlLmVudGl0eUlkLFxuICAgICAgICByZWxhdGVkOiBuZXcgU2V0KCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAyLiDsnZjsobTshLEg7LaU6rCAXG4gICAgZm9yIChjb25zdCBmaXh0dXJlIG9mIGZpeHR1cmVzKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ncmFwaC5nZXQoZml4dHVyZS5maXh0dXJlSWQpO1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgbm90IGZvdW5kIGZvciBmaXh0dXJlICR7Zml4dHVyZS5maXh0dXJlSWR9YCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgWywgY29sdW1uXSBvZiBPYmplY3QuZW50cmllcyhmaXh0dXJlLmNvbHVtbnMpKSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBjb2x1bW4ucHJvcDtcblxuICAgICAgICBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fFxuICAgICAgICAgICAgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZEZpeHR1cmVJZCA9IGAke3Byb3Aud2l0aH0jJHtjb2x1bW4udmFsdWV9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyYXBoLmhhcyhyZWxhdGVkRml4dHVyZUlkKSkge1xuICAgICAgICAgICAgICBub2RlLnJlbGF0ZWQuYWRkKHJlbGF0ZWRGaXh0dXJlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgICAgICAgICAvLyBNYW55VG9NYW55IOq0gOqzhOydmCDqsr3smrAg7JaR67Cp7ZalIOydmOyhtOyEsSDstpTqsIBcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2x1bW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtmaXh0dXJlLmZpeHR1cmVJZH0uJHtwcm9wLm5hbWV9IOq0gOqzhCDqsJLsnYAg67Cw7Je07J207Ja07JW8IO2VqeuLiOuLpC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRJZHMgPSBjb2x1bW4udmFsdWU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlbGF0ZWRJZCBvZiByZWxhdGVkSWRzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRGaXh0dXJlSWQgPSBgJHtwcm9wLndpdGh9IyR7cmVsYXRlZElkfWA7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmdyYXBoLmhhcyhyZWxhdGVkRml4dHVyZUlkKSkge1xuICAgICAgICAgICAgICAgIG5vZGUucmVsYXRlZC5hZGQocmVsYXRlZEZpeHR1cmVJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5nZXQocmVsYXRlZEZpeHR1cmVJZCk/LnJlbGF0ZWQuYWRkKGZpeHR1cmUuZml4dHVyZUlkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEluc2VydGlvbk9yZGVyKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgb3JkZXI6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgdGVtcFZpc2l0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbnN0IHZpc2l0ID0gKGZpeHR1cmVJZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodmlzaXRlZC5oYXMoZml4dHVyZUlkKSkgcmV0dXJuO1xuICAgICAgaWYgKHRlbXBWaXNpdGVkLmhhcyhmaXh0dXJlSWQpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZCBpbnZvbHZpbmc6ICR7Zml4dHVyZUlkfWApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRlbXBWaXNpdGVkLmFkZChmaXh0dXJlSWQpO1xuXG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ncmFwaC5nZXQoZml4dHVyZUlkKTtcbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb2RlIG5vdCBmb3VuZCBmb3IgZml4dHVyZSAke2ZpeHR1cmVJZH1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KG5vZGUuZW50aXR5SWQpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRlcElkIG9mIG5vZGUucmVsYXRlZCkge1xuICAgICAgICBjb25zdCBkZXBOb2RlID0gdGhpcy5ncmFwaC5nZXQoZGVwSWQpO1xuICAgICAgICBpZiAoZGVwTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb2RlIG5vdCBmb3VuZCBmb3IgZml4dHVyZSAke2RlcElkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmVsb25nc1RvT25lIOq0gOqzhOydtOuptOyEnCBudWxsYWJsZeydtCDslYTri4wg6rK97JqwIOuovOyggCDrsKnrrLhcbiAgICAgICAgY29uc3QgcmVsYXRpb25Qcm9wID0gZW50aXR5LnByb3BzLmZpbmQoXG4gICAgICAgICAgKHByb3ApID0+XG4gICAgICAgICAgICBpc1JlbGF0aW9uUHJvcChwcm9wKSAmJlxuICAgICAgICAgICAgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApIHx8XG4gICAgICAgICAgICAgIChpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApICYmIHByb3AuaGFzSm9pbkNvbHVtbikpICYmXG4gICAgICAgICAgICBwcm9wLndpdGggPT09IGRlcE5vZGUuZW50aXR5SWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChyZWxhdGlvblByb3AgJiYgIXJlbGF0aW9uUHJvcC5udWxsYWJsZSkge1xuICAgICAgICAgIHZpc2l0KGRlcElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0ZW1wVmlzaXRlZC5kZWxldGUoZml4dHVyZUlkKTtcbiAgICAgIHZpc2l0ZWQuYWRkKGZpeHR1cmVJZCk7XG4gICAgICBvcmRlci5wdXNoKGZpeHR1cmVJZCk7XG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgZml4dHVyZUlkIG9mIHRoaXMuZ3JhcGgua2V5cygpKSB7XG4gICAgICB2aXNpdChmaXh0dXJlSWQpO1xuICAgIH1cblxuICAgIC8vIGNpcmN1bGFyIGRlcGVuZGVuY3nroZwg7J247ZW0IOuwqeusuOuQmOyngCDslYrsnYAgZml4dHVyZUlkIOy2lOqwgFxuICAgIGZvciAoY29uc3QgZml4dHVyZUlkIG9mIHRoaXMuZ3JhcGgua2V5cygpKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGZpeHR1cmVJZCkpIHtcbiAgICAgICAgb3JkZXIucHVzaChmaXh0dXJlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcmRlcjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Q0FBd0Qsb0JBQUE7Q0FPakMsV0FBQTtDQUdWLGdCQUFiLE1BQTJCO0VBQ3pCLHdCQUEyQyxJQUFJLElBQUk7RUFFbkQsV0FBVyxVQUFpQztHQUMxQyxLQUFLLE1BQU0sTUFBTTtHQUdqQixLQUFLLE1BQU0sV0FBVyxVQUNwQixLQUFLLE1BQU0sSUFBSSxRQUFRLFdBQVc7SUFDaEMsV0FBVyxRQUFRO0lBQ25CLFVBQVUsUUFBUTtJQUNsQix5QkFBUyxJQUFJLElBQUk7R0FDbkIsQ0FBQztHQUlILEtBQUssTUFBTSxXQUFXLFVBQVU7SUFDOUIsTUFBTSxPQUFPLEtBQUssTUFBTSxJQUFJLFFBQVEsU0FBUztJQUM3QyxJQUFJLFNBQVMsUUFDWCxNQUFNLElBQUksTUFBTSw4QkFBOEIsUUFBUSxXQUFXO0lBR25FLEtBQUssTUFBTSxHQUFHLFdBQVcsT0FBTyxRQUFRLFFBQVEsT0FBTyxHQUFHO0tBQ3hELE1BQU0sT0FBTyxPQUFPO0tBRXBCLElBQUksZUFBZSxJQUFJLEdBQUc7TUFDeEIsSUFDRSwyQkFBMkIsSUFBSSxLQUM5Qix1QkFBdUIsSUFBSSxLQUFLLEtBQUssZUFDdEM7T0FDQSxNQUFNLG1CQUFtQixHQUFHLEtBQUssS0FBSyxHQUFHLE9BQU87T0FDaEQsSUFBSSxLQUFLLE1BQU0sSUFBSSxnQkFBZ0IsR0FDakMsS0FBSyxRQUFRLElBQUksZ0JBQWdCO01BRXJDLE9BQU8sSUFBSSx5QkFBeUIsSUFBSSxHQUFHO09BRXpDLElBQUksQ0FBQyxNQUFNLFFBQVEsT0FBTyxLQUFLLEdBQzdCLE1BQU0sSUFBSSxNQUFNLEdBQUcsUUFBUSxVQUFVLEdBQUcsS0FBSyxLQUFLLGtCQUFrQjtPQUV0RSxNQUFNLGFBQWEsT0FBTztPQUMxQixLQUFLLE1BQU0sYUFBYSxZQUFZO1FBQ2xDLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxLQUFLLEdBQUc7UUFDekMsSUFBSSxLQUFLLE1BQU0sSUFBSSxnQkFBZ0IsR0FBRztTQUNwQyxLQUFLLFFBQVEsSUFBSSxnQkFBZ0I7U0FDakMsS0FBSyxNQUFNLElBQUksZ0JBQWdCLENBQUMsRUFBRSxRQUFRLElBQUksUUFBUSxTQUFTO1FBQ2pFO09BQ0Y7TUFDRjtLQUNGO0lBQ0Y7R0FDRjtFQUNGO0VBRUEsb0JBQThCO0dBQzVCLE1BQU0sMEJBQVUsSUFBSSxJQUFZO0dBQ2hDLE1BQU0sUUFBa0IsQ0FBQztHQUN6QixNQUFNLDhCQUFjLElBQUksSUFBWTtHQUVwQyxNQUFNLFNBQVMsY0FBc0I7SUFDbkMsSUFBSSxRQUFRLElBQUksU0FBUyxHQUFHO0lBQzVCLElBQUksWUFBWSxJQUFJLFNBQVMsR0FBRztLQUM5QixRQUFRLEtBQUssMkNBQTJDLFdBQVc7S0FDbkU7SUFDRjtJQUVBLFlBQVksSUFBSSxTQUFTO0lBRXpCLE1BQU0sT0FBTyxLQUFLLE1BQU0sSUFBSSxTQUFTO0lBQ3JDLElBQUksU0FBUyxRQUNYLE1BQU0sSUFBSSxNQUFNLDhCQUE4QixXQUFXO0lBRTNELE1BQU0sU0FBUyxjQUFjLElBQUksS0FBSyxRQUFRO0lBRTlDLEtBQUssTUFBTSxTQUFTLEtBQUssU0FBUztLQUNoQyxNQUFNLFVBQVUsS0FBSyxNQUFNLElBQUksS0FBSztLQUNwQyxJQUFJLFlBQVksUUFDZCxNQUFNLElBQUksTUFBTSw4QkFBOEIsT0FBTztLQUl2RCxNQUFNLGVBQWUsT0FBTyxNQUFNLE1BQy9CLFNBQ0MsZUFBZSxJQUFJLE1BQ2xCLDJCQUEyQixJQUFJLEtBQzdCLHVCQUF1QixJQUFJLEtBQUssS0FBSyxrQkFDeEMsS0FBSyxTQUFTLFFBQVEsUUFDMUI7S0FDQSxJQUFJLGdCQUFnQixDQUFDLGFBQWEsVUFDaEMsTUFBTSxLQUFLO0lBRWY7SUFFQSxZQUFZLE9BQU8sU0FBUztJQUM1QixRQUFRLElBQUksU0FBUztJQUNyQixNQUFNLEtBQUssU0FBUztHQUN0QjtHQUVBLEtBQUssTUFBTSxhQUFhLEtBQUssTUFBTSxLQUFLLEdBQ3RDLE1BQU0sU0FBUztHQUlqQixLQUFLLE1BQU0sYUFBYSxLQUFLLE1BQU0sS0FBSyxHQUN0QyxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsR0FDeEIsTUFBTSxLQUFLLFNBQVM7R0FJeEIsT0FBTztFQUNUO0NBQ0YifQ==
|
|
@@ -3,7 +3,7 @@ import { Sonamu, init_sonamu } from "../api/sonamu.js";
|
|
|
3
3
|
import { Naite, init_naite } from "../naite/naite.js";
|
|
4
4
|
import { NaiteReporter } from "../naite/naite-reporter.js";
|
|
5
5
|
import { afterAll, afterEach, beforeAll, beforeEach, test as test$1 } from "vitest";
|
|
6
|
-
|
|
6
|
+
// src/testing/bootstrap.ts
|
|
7
7
|
init_sonamu();
|
|
8
8
|
init_db();
|
|
9
9
|
init_naite();
|
|
@@ -126,7 +126,6 @@ const testAs = Object.assign(async (user, title, fn, options) => {
|
|
|
126
126
|
},
|
|
127
127
|
todo: (title) => test$1.todo(title)
|
|
128
128
|
});
|
|
129
|
-
//#endregion
|
|
130
129
|
export { bootstrap, runWithContext, runWithMockContext, test, testAs };
|
|
131
130
|
|
|
132
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwibmFtZXMiOlsidml0ZXN0VGVzdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Jvb3RzdHJhcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZnRlckFsbCwgYWZ0ZXJFYWNoLCBiZWZvcmVBbGwsIGJlZm9yZUVhY2gsIHRlc3QgYXMgdml0ZXN0VGVzdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IHR5cGUgVGVzdEZ1bmN0aW9uLCB0eXBlIFRlc3RPcHRpb25zLCB0eXBlIFZpdGVzdFV0aWxzIH0gZnJvbSBcInZpdGVzdFwiO1xuXG5pbXBvcnQgeyB0eXBlIENvbnRleHQgfSBmcm9tIFwiLi4vYXBpL2NvbnRleHRcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IHR5cGUgU2VyaWFsaXplZFRyYWNlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgeyBOYWl0ZVJlcG9ydGVyIH0gZnJvbSBcIi4uL25haXRlL25haXRlLXJlcG9ydGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTb25hbXUg7LSI6riw7ZmUIOuqqOuTnOulvCDsp4DsoJXtlanri4jri6QuXG4gICAqIC0gdHJ1ZSAo6riw67O46rCSKTog7YWM7Iqk7YyFIOuqqOuTnOuhnCDstIjquLDtmZQgKOu5oOumhCwgU3luY2VyL1Rhc2sg7IOd6561KVxuICAgKiAtIGZhbHNlOiDsoITssrQg7LSI6riw7ZmUIChTeW5jZXIsIFRhc2ssIEVudGl0eU1hbmFnZXIg65OxIOuqqOuRkCDroZzrk5wpXG4gICAqXG4gICAqIG1pZ3JhdG9yLCBzeW5jZXIsIHRlbXBsYXRlIOuTseydmCDthYzsiqTtirjsl5DshJzripQgZmFsc2Xrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICAgKi9cbiAgZm9yVGVzdGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXAodmk6IFZpdGVzdFV0aWxzLCBvcHRpb25zPzogQm9vdHN0cmFwT3B0aW9ucykge1xuICBjb25zdCBmb3JUZXN0aW5nID0gb3B0aW9ucz8uZm9yVGVzdGluZyA/PyB0cnVlO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmb3JUZXN0aW5nKSB7XG4gICAgICAvLyBmb3JUZXN0aW5nOiBmYWxzZeyduCDqsr3smrAg7J6s7LSI6riw7ZmU6rCAIO2VhOyalO2VmOuvgOuhnCDtlIzrnpjqt7gg7ZW07KCcXG4gICAgICBTb25hbXUuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIH1cbiAgICBhd2FpdCBTb25hbXUuaW5pdCh0cnVlLCBmYWxzZSwgdW5kZWZpbmVkLCBmb3JUZXN0aW5nKTtcbiAgfSk7XG4gIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IERCLmNyZWF0ZVRlc3RUcmFuc2FjdGlvbigpO1xuICB9KTtcbiAgYWZ0ZXJFYWNoKGFzeW5jICh7IHRhc2sgfSkgPT4ge1xuICAgIHZpLnVzZVJlYWxUaW1lcnMoKTtcbiAgICBhd2FpdCBEQi5jbGVhclRlc3RUcmFuc2FjdGlvbigpO1xuXG4gICAgYXdhaXQgTmFpdGVSZXBvcnRlci5yZXBvcnRUZXN0UmVzdWx0KHtcbiAgICAgIHN1aXRlTmFtZTogdGFzay5zdWl0ZT8ubmFtZSA/PyBcIihubyBzdWl0ZSlcIixcbiAgICAgIHN1aXRlRmlsZVBhdGg6IHRhc2suZmlsZT8uZmlsZXBhdGgsXG4gICAgICB0ZXN0TmFtZTogdGFzay5uYW1lLFxuICAgICAgdGVzdEZpbGVQYXRoOiB0YXNrLmZpbGU/LmZpbGVwYXRoID8/IFwiXCIsXG4gICAgICB0ZXN0TGluZTogdGFzay5sb2NhdGlvbj8ubGluZSA/PyAwLFxuICAgICAgc3RhdHVzOiB0YXNrLnJlc3VsdD8uc3RhdGUgPz8gXCJwYXNzXCIsXG4gICAgICBkdXJhdGlvbjogdGFzay5yZXN1bHQ/LmR1cmF0aW9uID8/IDAsXG4gICAgICBlcnJvcjogdGFzay5yZXN1bHQ/LmVycm9ycz8uWzBdXG4gICAgICAgID8ge1xuICAgICAgICAgICAgbWVzc2FnZTogdGFzay5yZXN1bHQuZXJyb3JzWzBdLm1lc3NhZ2UsXG4gICAgICAgICAgICBzdGFjazogdGFzay5yZXN1bHQuZXJyb3JzWzBdLnN0YWNrLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB0cmFjZXM6IHRhc2subWV0YT8udHJhY2VzID8/IFtdLFxuICAgIH0pO1xuICB9KTtcbiAgYWZ0ZXJBbGwoKCkgPT4ge30pO1xufVxuXG5mdW5jdGlvbiBnZXRNb2NrQ29udGV4dCgpOiBDb250ZXh0IHtcbiAgLy8gU0FGRVRZOiDthYzsiqTtirgg7Luo7YWN7Iqk7Yq47JeQ7ISc64qUIEZhc3RpZnkg7JqU7LKt6rO8IOydkeuLteydhCDsgqzsmqntlZjsp4Ag7JWK7Jy866mwIOygkeq3vCDsi5wg7KaJ7IucIOyLpO2MqO2VtOyVvCDtlanri4jri6QuXG4gIGNvbnN0IHJlcXVlc3Q6IENvbnRleHRbXCJyZXF1ZXN0XCJdID0gbnVsbCBhcyBuZXZlcjtcbiAgLy8gU0FGRVRZOiDthYzsiqTtirgg7Luo7YWN7Iqk7Yq47JeQ7ISc64qUIEZhc3RpZnkg7JqU7LKt6rO8IOydkeuLteydhCDsgqzsmqntlZjsp4Ag7JWK7Jy866mwIOygkeq3vCDsi5wg7KaJ7IucIOyLpO2MqO2VtOyVvCDtlanri4jri6QuXG4gIGNvbnN0IHJlcGx5OiBDb250ZXh0W1wicmVwbHlcIl0gPSBudWxsIGFzIG5ldmVyO1xuICAvLyBTQUZFVFk6IOuqqOydmCDqtaztmITsnYAg7Iuk7KCcIGNyZWF0ZVNTReyZgCDqsJnsnYAg7Zi47LacIOqzhOyVveydhCDsnKDsp4DtlZjrkJgg7ZWt7IOBIOuqheyLnOyggeycvOuhnCDsi6TtjKjtlanri4jri6QuXG4gIGNvbnN0IGNyZWF0ZVNTRSA9ICgoKSA9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY3JlYXRlU1NFIGlzIG5vdCBhdmFpbGFibGUgaW4gbW9jayBjb250ZXh0XCIpO1xuICB9KSBhcyBDb250ZXh0W1wiY3JlYXRlU1NFXCJdO1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNwb3J0OiBcImh0dHBcIixcbiAgICByZXF1ZXN0LFxuICAgIHJlcGx5LFxuICAgIGhlYWRlcnM6IHt9LFxuICAgIGNyZWF0ZVNTRSxcbiAgICBzZXNzaW9uOiBudWxsLFxuICAgIHVzZXI6IG51bGwsXG4gICAgbmFpdGVTdG9yZTogTmFpdGUuY3JlYXRlU3RvcmUoKSxcbiAgICBsb2NhbGU6IFwiXCIsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoQ29udGV4dChjb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgZm46ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgLy8gU29uYW11LmFzeW5jTG9jYWxTdG9yYWdlLnJ1buycvOuhnCBjb250ZXh0IOyEpOyglVxuICBhd2FpdCBTb25hbXUuYXN5bmNMb2NhbFN0b3JhZ2UucnVuKHsgY29udGV4dDogY29udGV4dCA/PyBnZXRNb2NrQ29udGV4dCgpIH0sIGZuKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldpdGhNb2NrQ29udGV4dChmbjogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICBhd2FpdCBydW5XaXRoQ29udGV4dChnZXRNb2NrQ29udGV4dCgpLCBmbik7XG59XG5cbnR5cGUgVGVzdFJlc3VsdCA9IFByb21pc2U8UmV0dXJuVHlwZTx0eXBlb2Ygdml0ZXN0VGVzdD4+O1xudHlwZSBUZXN0Q2FsbGJhY2tSZXN1bHQgPSB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbnR5cGUgVGVzdEVhY2ggPSA8VEFyZ3MgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10+KFxuICBjYXNlczogcmVhZG9ubHkgVEFyZ3NbXSxcbikgPT4gKHRpdGxlOiBzdHJpbmcsIGZuOiAoLi4uYXJnczogVEFyZ3MpID0+IFRlc3RDYWxsYmFja1Jlc3VsdCkgPT4gdm9pZDtcblxudHlwZSBUZXN0V3JhcHBlciA9IHtcbiAgKHRpdGxlOiBzdHJpbmcsIGZuOiBUZXN0RnVuY3Rpb24sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucyk6IFRlc3RSZXN1bHQ7XG4gIHNraXA6ICh0aXRsZTogc3RyaW5nLCBmbjogVGVzdEZ1bmN0aW9uLCBvcHRpb25zPzogVGVzdE9wdGlvbnMpID0+IFRlc3RSZXN1bHQ7XG4gIG9ubHk6ICh0aXRsZTogc3RyaW5nLCBmbjogVGVzdEZ1bmN0aW9uLCBvcHRpb25zPzogVGVzdE9wdGlvbnMpID0+IFRlc3RSZXN1bHQ7XG4gIHRvZG86ICh0aXRsZTogc3RyaW5nKSA9PiB2b2lkO1xuICBlYWNoOiBUZXN0RWFjaDtcbn07XG5cbnR5cGUgVGVzdEFzV3JhcHBlciA9IHtcbiAgPFVzZXIgZXh0ZW5kcyBDb250ZXh0W1widXNlclwiXT4oXG4gICAgdXNlcjogVXNlcixcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGZuOiBUZXN0RnVuY3Rpb24sXG4gICAgb3B0aW9ucz86IFRlc3RPcHRpb25zLFxuICApOiBUZXN0UmVzdWx0O1xuICBza2lwOiA8VXNlciBleHRlbmRzIENvbnRleHRbXCJ1c2VyXCJdPihcbiAgICB1c2VyOiBVc2VyLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgZm46IFRlc3RGdW5jdGlvbixcbiAgICBvcHRpb25zPzogVGVzdE9wdGlvbnMsXG4gICkgPT4gVGVzdFJlc3VsdDtcbiAgb25seTogPFVzZXIgZXh0ZW5kcyBDb250ZXh0W1widXNlclwiXT4oXG4gICAgdXNlcjogVXNlcixcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGZuOiBUZXN0RnVuY3Rpb24sXG4gICAgb3B0aW9ucz86IFRlc3RPcHRpb25zLFxuICApID0+IFRlc3RSZXN1bHQ7XG4gIHRvZG86ICh0aXRsZTogc3RyaW5nKSA9PiB2b2lkO1xufTtcblxuY29uc3QgZWFjaDogVGVzdEVhY2ggPSB2aXRlc3RUZXN0LmVhY2guYmluZCh2aXRlc3RUZXN0KTtcblxuZGVjbGFyZSBtb2R1bGUgXCJ2aXRlc3RcIiB7XG4gIGludGVyZmFjZSBUYXNrTWV0YSB7XG4gICAgdHJhY2VzOiBTZXJpYWxpemVkVHJhY2VbXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdGVzdDogVGVzdFdyYXBwZXIgPSBPYmplY3QuYXNzaWduKFxuICBhc3luYyAodGl0bGU6IHN0cmluZywgZm46IFRlc3RGdW5jdGlvbiwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIHZpdGVzdFRlc3QodGl0bGUsIG9wdGlvbnMsIGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICBhd2FpdCBydW5XaXRoTW9ja0NvbnRleHQoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZuKGNvbnRleHQpO1xuICAgICAgICAgIGNvbnRleHQudGFzay5tZXRhLnRyYWNlcyA9IE5haXRlLmdldEFsbFRyYWNlcygpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgY29udGV4dC50YXNrLm1ldGEudHJhY2VzID0gTmFpdGUuZ2V0QWxsVHJhY2VzKCk7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG4gIHtcbiAgICBza2lwOiBhc3luYyAodGl0bGU6IHN0cmluZywgZm46IFRlc3RGdW5jdGlvbiwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSA9PlxuICAgICAgdml0ZXN0VGVzdC5za2lwKHRpdGxlLCBvcHRpb25zLCBmbiksXG4gICAgb25seTogYXN5bmMgKHRpdGxlOiBzdHJpbmcsIGZuOiBUZXN0RnVuY3Rpb24sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykgPT4ge1xuICAgICAgcmV0dXJuIHZpdGVzdFRlc3Qub25seSh0aXRsZSwgb3B0aW9ucywgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuV2l0aE1vY2tDb250ZXh0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZm4oY29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdG9kbzogKHRpdGxlOiBzdHJpbmcpID0+IHZpdGVzdFRlc3QudG9kbyh0aXRsZSksXG4gICAgZWFjaCxcbiAgfSxcbik7XG5cbmV4cG9ydCBjb25zdCB0ZXN0QXM6IFRlc3RBc1dyYXBwZXIgPSBPYmplY3QuYXNzaWduKFxuICBhc3luYyA8VXNlciBleHRlbmRzIENvbnRleHRbXCJ1c2VyXCJdPihcbiAgICB1c2VyOiBVc2VyLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgZm46IFRlc3RGdW5jdGlvbixcbiAgICBvcHRpb25zPzogVGVzdE9wdGlvbnMsXG4gICkgPT4ge1xuICAgIHJldHVybiB2aXRlc3RUZXN0KHRpdGxlLCBvcHRpb25zLCBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgYXdhaXQgcnVuV2l0aENvbnRleHQoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5nZXRNb2NrQ29udGV4dCgpLFxuICAgICAgICAgIHVzZXIsXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZm4oY29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSxcbiAge1xuICAgIHNraXA6IGFzeW5jIDxVc2VyIGV4dGVuZHMgQ29udGV4dFtcInVzZXJcIl0+KFxuICAgICAgX3VzZXI6IFVzZXIsXG4gICAgICB0aXRsZTogc3RyaW5nLFxuICAgICAgZm46IFRlc3RGdW5jdGlvbixcbiAgICAgIG9wdGlvbnM/OiBUZXN0T3B0aW9ucyxcbiAgICApID0+IHZpdGVzdFRlc3Quc2tpcCh0aXRsZSwgb3B0aW9ucywgZm4pLFxuICAgIG9ubHk6IGFzeW5jIDxVc2VyIGV4dGVuZHMgQ29udGV4dFtcInVzZXJcIl0+KFxuICAgICAgdXNlcjogVXNlcixcbiAgICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgICBmbjogVGVzdEZ1bmN0aW9uLFxuICAgICAgb3B0aW9ucz86IFRlc3RPcHRpb25zLFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHZpdGVzdFRlc3Qub25seSh0aXRsZSwgb3B0aW9ucywgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuV2l0aENvbnRleHQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uZ2V0TW9ja0NvbnRleHQoKSxcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBmbihjb250ZXh0KTtcbiAgICAgICAgICAgICAgY29udGV4dC50YXNrLm1ldGEudHJhY2VzID0gTmFpdGUuZ2V0QWxsVHJhY2VzKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQudGFzay5tZXRhLnRyYWNlcyA9IE5haXRlLmdldEFsbFRyYWNlcygpO1xuICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHRvZG86ICh0aXRsZTogc3RyaW5nKSA9PiB2aXRlc3RUZXN0LnRvZG8odGl0bGUpLFxuICB9LFxuKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O1lBSXNDO1FBQ0g7V0FDRztBQWV0QyxTQUFnQixVQUFVLElBQWlCLFNBQTRCO0NBQ3JFLE1BQU0sYUFBYSxTQUFTLGNBQWM7Q0FFMUMsVUFBVSxZQUFZO0VBQ3BCLElBQUksQ0FBQyxZQUVILE9BQU8sZ0JBQWdCO0VBRXpCLE1BQU0sT0FBTyxLQUFLLE1BQU0sT0FBTyxRQUFXLFVBQVU7Q0FDdEQsQ0FBQztDQUNELFdBQVcsWUFBWTtFQUNyQixNQUFNLEdBQUcsc0JBQXNCO0NBQ2pDLENBQUM7Q0FDRCxVQUFVLE9BQU8sRUFBRSxXQUFXO0VBQzVCLEdBQUcsY0FBYztFQUNqQixNQUFNLEdBQUcscUJBQXFCO0VBRTlCLE1BQU0sY0FBYyxpQkFBaUI7R0FDbkMsV0FBVyxLQUFLLE9BQU8sUUFBUTtHQUMvQixlQUFlLEtBQUssTUFBTTtHQUMxQixVQUFVLEtBQUs7R0FDZixjQUFjLEtBQUssTUFBTSxZQUFZO0dBQ3JDLFVBQVUsS0FBSyxVQUFVLFFBQVE7R0FDakMsUUFBUSxLQUFLLFFBQVEsU0FBUztHQUM5QixVQUFVLEtBQUssUUFBUSxZQUFZO0dBQ25DLE9BQU8sS0FBSyxRQUFRLFNBQVMsS0FDekI7SUFDRSxTQUFTLEtBQUssT0FBTyxPQUFPLEVBQUUsQ0FBQztJQUMvQixPQUFPLEtBQUssT0FBTyxPQUFPLEVBQUUsQ0FBQztHQUMvQixJQUNBO0dBQ0osUUFBUSxLQUFLLE1BQU0sVUFBVSxDQUFDO0VBQ2hDLENBQUM7Q0FDSCxDQUFDO0NBQ0QsZUFBZSxDQUFDLENBQUM7QUFDbkI7QUFFQSxTQUFTLGlCQUEwQjtDQUVqQyxNQUFN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
|
|
131
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwibmFtZXMiOlsidml0ZXN0VGVzdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Jvb3RzdHJhcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZnRlckFsbCwgYWZ0ZXJFYWNoLCBiZWZvcmVBbGwsIGJlZm9yZUVhY2gsIHRlc3QgYXMgdml0ZXN0VGVzdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IHR5cGUgVGVzdEZ1bmN0aW9uLCB0eXBlIFRlc3RPcHRpb25zLCB0eXBlIFZpdGVzdFV0aWxzIH0gZnJvbSBcInZpdGVzdFwiO1xuXG5pbXBvcnQgeyB0eXBlIENvbnRleHQgfSBmcm9tIFwiLi4vYXBpL2NvbnRleHRcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IHR5cGUgU2VyaWFsaXplZFRyYWNlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgeyBOYWl0ZVJlcG9ydGVyIH0gZnJvbSBcIi4uL25haXRlL25haXRlLXJlcG9ydGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTb25hbXUg7LSI6riw7ZmUIOuqqOuTnOulvCDsp4DsoJXtlanri4jri6QuXG4gICAqIC0gdHJ1ZSAo6riw67O46rCSKTog7YWM7Iqk7YyFIOuqqOuTnOuhnCDstIjquLDtmZQgKOu5oOumhCwgU3luY2VyL1Rhc2sg7IOd6561KVxuICAgKiAtIGZhbHNlOiDsoITssrQg7LSI6riw7ZmUIChTeW5jZXIsIFRhc2ssIEVudGl0eU1hbmFnZXIg65OxIOuqqOuRkCDroZzrk5wpXG4gICAqXG4gICAqIG1pZ3JhdG9yLCBzeW5jZXIsIHRlbXBsYXRlIOuTseydmCDthYzsiqTtirjsl5DshJzripQgZmFsc2Xrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICAgKi9cbiAgZm9yVGVzdGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXAodmk6IFZpdGVzdFV0aWxzLCBvcHRpb25zPzogQm9vdHN0cmFwT3B0aW9ucykge1xuICBjb25zdCBmb3JUZXN0aW5nID0gb3B0aW9ucz8uZm9yVGVzdGluZyA/PyB0cnVlO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmb3JUZXN0aW5nKSB7XG4gICAgICAvLyBmb3JUZXN0aW5nOiBmYWxzZeyduCDqsr3smrAg7J6s7LSI6riw7ZmU6rCAIO2VhOyalO2VmOuvgOuhnCDtlIzrnpjqt7gg7ZW07KCcXG4gICAgICBTb25hbXUuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIH1cbiAgICBhd2FpdCBTb25hbXUuaW5pdCh0cnVlLCBmYWxzZSwgdW5kZWZpbmVkLCBmb3JUZXN0aW5nKTtcbiAgfSk7XG4gIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IERCLmNyZWF0ZVRlc3RUcmFuc2FjdGlvbigpO1xuICB9KTtcbiAgYWZ0ZXJFYWNoKGFzeW5jICh7IHRhc2sgfSkgPT4ge1xuICAgIHZpLnVzZVJlYWxUaW1lcnMoKTtcbiAgICBhd2FpdCBEQi5jbGVhclRlc3RUcmFuc2FjdGlvbigpO1xuXG4gICAgYXdhaXQgTmFpdGVSZXBvcnRlci5yZXBvcnRUZXN0UmVzdWx0KHtcbiAgICAgIHN1aXRlTmFtZTogdGFzay5zdWl0ZT8ubmFtZSA/PyBcIihubyBzdWl0ZSlcIixcbiAgICAgIHN1aXRlRmlsZVBhdGg6IHRhc2suZmlsZT8uZmlsZXBhdGgsXG4gICAgICB0ZXN0TmFtZTogdGFzay5uYW1lLFxuICAgICAgdGVzdEZpbGVQYXRoOiB0YXNrLmZpbGU/LmZpbGVwYXRoID8/IFwiXCIsXG4gICAgICB0ZXN0TGluZTogdGFzay5sb2NhdGlvbj8ubGluZSA/PyAwLFxuICAgICAgc3RhdHVzOiB0YXNrLnJlc3VsdD8uc3RhdGUgPz8gXCJwYXNzXCIsXG4gICAgICBkdXJhdGlvbjogdGFzay5yZXN1bHQ/LmR1cmF0aW9uID8/IDAsXG4gICAgICBlcnJvcjogdGFzay5yZXN1bHQ/LmVycm9ycz8uWzBdXG4gICAgICAgID8ge1xuICAgICAgICAgICAgbWVzc2FnZTogdGFzay5yZXN1bHQuZXJyb3JzWzBdLm1lc3NhZ2UsXG4gICAgICAgICAgICBzdGFjazogdGFzay5yZXN1bHQuZXJyb3JzWzBdLnN0YWNrLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB0cmFjZXM6IHRhc2subWV0YT8udHJhY2VzID8/IFtdLFxuICAgIH0pO1xuICB9KTtcbiAgYWZ0ZXJBbGwoKCkgPT4ge30pO1xufVxuXG5mdW5jdGlvbiBnZXRNb2NrQ29udGV4dCgpOiBDb250ZXh0IHtcbiAgLy8gU0FGRVRZOiDthYzsiqTtirgg7Luo7YWN7Iqk7Yq47JeQ7ISc64qUIEZhc3RpZnkg7JqU7LKt6rO8IOydkeuLteydhCDsgqzsmqntlZjsp4Ag7JWK7Jy866mwIOygkeq3vCDsi5wg7KaJ7IucIOyLpO2MqO2VtOyVvCDtlanri4jri6QuXG4gIGNvbnN0IHJlcXVlc3Q6IENvbnRleHRbXCJyZXF1ZXN0XCJdID0gbnVsbCBhcyBuZXZlcjtcbiAgLy8gU0FGRVRZOiDthYzsiqTtirgg7Luo7YWN7Iqk7Yq47JeQ7ISc64qUIEZhc3RpZnkg7JqU7LKt6rO8IOydkeuLteydhCDsgqzsmqntlZjsp4Ag7JWK7Jy866mwIOygkeq3vCDsi5wg7KaJ7IucIOyLpO2MqO2VtOyVvCDtlanri4jri6QuXG4gIGNvbnN0IHJlcGx5OiBDb250ZXh0W1wicmVwbHlcIl0gPSBudWxsIGFzIG5ldmVyO1xuICAvLyBTQUZFVFk6IOuqqOydmCDqtaztmITsnYAg7Iuk7KCcIGNyZWF0ZVNTReyZgCDqsJnsnYAg7Zi47LacIOqzhOyVveydhCDsnKDsp4DtlZjrkJgg7ZWt7IOBIOuqheyLnOyggeycvOuhnCDsi6TtjKjtlanri4jri6QuXG4gIGNvbnN0IGNyZWF0ZVNTRSA9ICgoKSA9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY3JlYXRlU1NFIGlzIG5vdCBhdmFpbGFibGUgaW4gbW9jayBjb250ZXh0XCIpO1xuICB9KSBhcyBDb250ZXh0W1wiY3JlYXRlU1NFXCJdO1xuXG4gIHJldHVybiB7XG4gICAgdHJhbnNwb3J0OiBcImh0dHBcIixcbiAgICByZXF1ZXN0LFxuICAgIHJlcGx5LFxuICAgIGhlYWRlcnM6IHt9LFxuICAgIGNyZWF0ZVNTRSxcbiAgICBzZXNzaW9uOiBudWxsLFxuICAgIHVzZXI6IG51bGwsXG4gICAgbmFpdGVTdG9yZTogTmFpdGUuY3JlYXRlU3RvcmUoKSxcbiAgICBsb2NhbGU6IFwiXCIsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoQ29udGV4dChjb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgZm46ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgLy8gU29uYW11LmFzeW5jTG9jYWxTdG9yYWdlLnJ1buycvOuhnCBjb250ZXh0IOyEpOyglVxuICBhd2FpdCBTb25hbXUuYXN5bmNMb2NhbFN0b3JhZ2UucnVuKHsgY29udGV4dDogY29udGV4dCA/PyBnZXRNb2NrQ29udGV4dCgpIH0sIGZuKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldpdGhNb2NrQ29udGV4dChmbjogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICBhd2FpdCBydW5XaXRoQ29udGV4dChnZXRNb2NrQ29udGV4dCgpLCBmbik7XG59XG5cbnR5cGUgVGVzdFJlc3VsdCA9IFByb21pc2U8UmV0dXJuVHlwZTx0eXBlb2Ygdml0ZXN0VGVzdD4+O1xudHlwZSBUZXN0Q2FsbGJhY2tSZXN1bHQgPSB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbnR5cGUgVGVzdEVhY2ggPSA8VEFyZ3MgZXh0ZW5kcyByZWFkb25seSB1bmtub3duW10+KFxuICBjYXNlczogcmVhZG9ubHkgVEFyZ3NbXSxcbikgPT4gKHRpdGxlOiBzdHJpbmcsIGZuOiAoLi4uYXJnczogVEFyZ3MpID0+IFRlc3RDYWxsYmFja1Jlc3VsdCkgPT4gdm9pZDtcblxudHlwZSBUZXN0V3JhcHBlciA9IHtcbiAgKHRpdGxlOiBzdHJpbmcsIGZuOiBUZXN0RnVuY3Rpb24sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucyk6IFRlc3RSZXN1bHQ7XG4gIHNraXA6ICh0aXRsZTogc3RyaW5nLCBmbjogVGVzdEZ1bmN0aW9uLCBvcHRpb25zPzogVGVzdE9wdGlvbnMpID0+IFRlc3RSZXN1bHQ7XG4gIG9ubHk6ICh0aXRsZTogc3RyaW5nLCBmbjogVGVzdEZ1bmN0aW9uLCBvcHRpb25zPzogVGVzdE9wdGlvbnMpID0+IFRlc3RSZXN1bHQ7XG4gIHRvZG86ICh0aXRsZTogc3RyaW5nKSA9PiB2b2lkO1xuICBlYWNoOiBUZXN0RWFjaDtcbn07XG5cbnR5cGUgVGVzdEFzV3JhcHBlciA9IHtcbiAgPFVzZXIgZXh0ZW5kcyBDb250ZXh0W1widXNlclwiXT4oXG4gICAgdXNlcjogVXNlcixcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGZuOiBUZXN0RnVuY3Rpb24sXG4gICAgb3B0aW9ucz86IFRlc3RPcHRpb25zLFxuICApOiBUZXN0UmVzdWx0O1xuICBza2lwOiA8VXNlciBleHRlbmRzIENvbnRleHRbXCJ1c2VyXCJdPihcbiAgICB1c2VyOiBVc2VyLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgZm46IFRlc3RGdW5jdGlvbixcbiAgICBvcHRpb25zPzogVGVzdE9wdGlvbnMsXG4gICkgPT4gVGVzdFJlc3VsdDtcbiAgb25seTogPFVzZXIgZXh0ZW5kcyBDb250ZXh0W1widXNlclwiXT4oXG4gICAgdXNlcjogVXNlcixcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGZuOiBUZXN0RnVuY3Rpb24sXG4gICAgb3B0aW9ucz86IFRlc3RPcHRpb25zLFxuICApID0+IFRlc3RSZXN1bHQ7XG4gIHRvZG86ICh0aXRsZTogc3RyaW5nKSA9PiB2b2lkO1xufTtcblxuY29uc3QgZWFjaDogVGVzdEVhY2ggPSB2aXRlc3RUZXN0LmVhY2guYmluZCh2aXRlc3RUZXN0KTtcblxuZGVjbGFyZSBtb2R1bGUgXCJ2aXRlc3RcIiB7XG4gIGludGVyZmFjZSBUYXNrTWV0YSB7XG4gICAgdHJhY2VzOiBTZXJpYWxpemVkVHJhY2VbXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdGVzdDogVGVzdFdyYXBwZXIgPSBPYmplY3QuYXNzaWduKFxuICBhc3luYyAodGl0bGU6IHN0cmluZywgZm46IFRlc3RGdW5jdGlvbiwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIHZpdGVzdFRlc3QodGl0bGUsIG9wdGlvbnMsIGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICBhd2FpdCBydW5XaXRoTW9ja0NvbnRleHQoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZuKGNvbnRleHQpO1xuICAgICAgICAgIGNvbnRleHQudGFzay5tZXRhLnRyYWNlcyA9IE5haXRlLmdldEFsbFRyYWNlcygpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgY29udGV4dC50YXNrLm1ldGEudHJhY2VzID0gTmFpdGUuZ2V0QWxsVHJhY2VzKCk7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG4gIHtcbiAgICBza2lwOiBhc3luYyAodGl0bGU6IHN0cmluZywgZm46IFRlc3RGdW5jdGlvbiwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSA9PlxuICAgICAgdml0ZXN0VGVzdC5za2lwKHRpdGxlLCBvcHRpb25zLCBmbiksXG4gICAgb25seTogYXN5bmMgKHRpdGxlOiBzdHJpbmcsIGZuOiBUZXN0RnVuY3Rpb24sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykgPT4ge1xuICAgICAgcmV0dXJuIHZpdGVzdFRlc3Qub25seSh0aXRsZSwgb3B0aW9ucywgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuV2l0aE1vY2tDb250ZXh0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZm4oY29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdG9kbzogKHRpdGxlOiBzdHJpbmcpID0+IHZpdGVzdFRlc3QudG9kbyh0aXRsZSksXG4gICAgZWFjaCxcbiAgfSxcbik7XG5cbmV4cG9ydCBjb25zdCB0ZXN0QXM6IFRlc3RBc1dyYXBwZXIgPSBPYmplY3QuYXNzaWduKFxuICBhc3luYyA8VXNlciBleHRlbmRzIENvbnRleHRbXCJ1c2VyXCJdPihcbiAgICB1c2VyOiBVc2VyLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgZm46IFRlc3RGdW5jdGlvbixcbiAgICBvcHRpb25zPzogVGVzdE9wdGlvbnMsXG4gICkgPT4ge1xuICAgIHJldHVybiB2aXRlc3RUZXN0KHRpdGxlLCBvcHRpb25zLCBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgYXdhaXQgcnVuV2l0aENvbnRleHQoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5nZXRNb2NrQ29udGV4dCgpLFxuICAgICAgICAgIHVzZXIsXG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZm4oY29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSxcbiAge1xuICAgIHNraXA6IGFzeW5jIDxVc2VyIGV4dGVuZHMgQ29udGV4dFtcInVzZXJcIl0+KFxuICAgICAgX3VzZXI6IFVzZXIsXG4gICAgICB0aXRsZTogc3RyaW5nLFxuICAgICAgZm46IFRlc3RGdW5jdGlvbixcbiAgICAgIG9wdGlvbnM/OiBUZXN0T3B0aW9ucyxcbiAgICApID0+IHZpdGVzdFRlc3Quc2tpcCh0aXRsZSwgb3B0aW9ucywgZm4pLFxuICAgIG9ubHk6IGFzeW5jIDxVc2VyIGV4dGVuZHMgQ29udGV4dFtcInVzZXJcIl0+KFxuICAgICAgdXNlcjogVXNlcixcbiAgICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgICBmbjogVGVzdEZ1bmN0aW9uLFxuICAgICAgb3B0aW9ucz86IFRlc3RPcHRpb25zLFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHZpdGVzdFRlc3Qub25seSh0aXRsZSwgb3B0aW9ucywgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuV2l0aENvbnRleHQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uZ2V0TW9ja0NvbnRleHQoKSxcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBmbihjb250ZXh0KTtcbiAgICAgICAgICAgICAgY29udGV4dC50YXNrLm1ldGEudHJhY2VzID0gTmFpdGUuZ2V0QWxsVHJhY2VzKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQudGFzay5tZXRhLnRyYWNlcyA9IE5haXRlLmdldEFsbFRyYWNlcygpO1xuICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHRvZG86ICh0aXRsZTogc3RyaW5nKSA9PiB2aXRlc3RUZXN0LnRvZG8odGl0bGUpLFxuICB9LFxuKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSXNDLFlBQUE7QUFDSCxRQUFBO0FBQ0csV0FBQTtBQWV0QyxTQUFnQixVQUFVLElBQWlCLFNBQTRCO0NBQ3JFLE1BQU0sYUFBYSxTQUFTLGNBQWM7Q0FFMUMsVUFBVSxZQUFZO0VBQ3BCLElBQUksQ0FBQyxZQUVILE9BQU8sZ0JBQWdCO0VBRXpCLE1BQU0sT0FBTyxLQUFLLE1BQU0sT0FBTyxRQUFXLFVBQVU7Q0FDdEQsQ0FBQztDQUNELFdBQVcsWUFBWTtFQUNyQixNQUFNLEdBQUcsc0JBQXNCO0NBQ2pDLENBQUM7Q0FDRCxVQUFVLE9BQU8sRUFBRSxXQUFXO0VBQzVCLEdBQUcsY0FBYztFQUNqQixNQUFNLEdBQUcscUJBQXFCO0VBRTlCLE1BQU0sY0FBYyxpQkFBaUI7R0FDbkMsV0FBVyxLQUFLLE9BQU8sUUFBUTtHQUMvQixlQUFlLEtBQUssTUFBTTtHQUMxQixVQUFVLEtBQUs7R0FDZixjQUFjLEtBQUssTUFBTSxZQUFZO0dBQ3JDLFVBQVUsS0FBSyxVQUFVLFFBQVE7R0FDakMsUUFBUSxLQUFLLFFBQVEsU0FBUztHQUM5QixVQUFVLEtBQUssUUFBUSxZQUFZO0dBQ25DLE9BQU8sS0FBSyxRQUFRLFNBQVMsS0FDekI7SUFDRSxTQUFTLEtBQUssT0FBTyxPQUFPLEVBQUUsQ0FBQztJQUMvQixPQUFPLEtBQUssT0FBTyxPQUFPLEVBQUUsQ0FBQztHQUMvQixJQUNBO0dBQ0osUUFBUSxLQUFLLE1BQU0sVUFBVSxDQUFDO0VBQ2hDLENBQUM7Q0FDSCxDQUFDO0NBQ0QsZUFBZSxDQUFDLENBQUM7QUFDbkI7QUFFQSxTQUFTLGlC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
|