velocious 1.0.643 → 1.0.645
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -10
- package/build/authorization/ability.js +36 -13
- package/build/background-jobs/adapter.js +9 -0
- package/build/background-jobs/main.js +35 -10
- package/build/background-jobs/store.js +217 -38
- package/build/background-jobs/types.js +15 -0
- package/build/configuration-types.js +1 -1
- package/build/configuration.js +45 -9
- package/build/database/drivers/base-column.js +8 -0
- package/build/database/drivers/mssql/sql/update.js +1 -3
- package/build/database/drivers/mysql/sql/update.js +1 -3
- package/build/database/drivers/pgsql/column.js +22 -0
- package/build/database/drivers/pgsql/sql/update.js +1 -3
- package/build/database/drivers/sqlite/sql/alter-table.js +11 -1
- package/build/database/drivers/sqlite/sql/update.js +1 -3
- package/build/database/query/index.js +2 -2
- package/build/database/query/model-class-query.js +26 -10
- package/build/database/query/preloader/has-many.js +4 -1
- package/build/database/query/query-data.js +2 -1
- package/build/database/query/update-base.js +14 -0
- package/build/database/query/with-count.js +3 -1
- package/build/database/record/acts-as-list.js +37 -13
- package/build/database/record/attachments/store.js +336 -26
- package/build/database/record/auditing.js +6 -3
- package/build/database/record/index.js +197 -42
- package/build/database/record/instance-relationships/belongs-to.js +2 -1
- package/build/database/record/validators/uniqueness.js +8 -5
- package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
- package/build/frontend-model-controller.js +136 -53
- package/build/frontend-model-resource/base-resource.js +87 -37
- package/build/frontend-model-resource/velocious-attachment-resource.js +98 -31
- package/build/frontend-models/base.js +307 -59
- package/build/frontend-models/preloader.js +6 -3
- package/build/frontend-models/query.js +15 -6
- package/build/frontend-models/resource-definition.js +21 -2
- package/build/frontend-models/use-destroyed-event.js +1 -1
- package/build/frontend-models/use-model-class-event.js +2 -2
- package/build/frontend-models/use-updated-event.js +1 -1
- package/build/frontend-models/websocket-channel.js +256 -93
- package/build/frontend-models/websocket-publishers.js +218 -18
- package/build/http-server/client/websocket-session.js +13 -1
- package/build/http-server/websocket-channel.js +15 -2
- package/build/src/authorization/ability.d.ts +9 -3
- package/build/src/authorization/ability.d.ts.map +1 -1
- package/build/src/authorization/ability.js +33 -14
- package/build/src/background-jobs/adapter.d.ts +6 -0
- package/build/src/background-jobs/adapter.d.ts.map +1 -1
- package/build/src/background-jobs/adapter.js +9 -1
- package/build/src/background-jobs/main.d.ts +6 -0
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +34 -11
- package/build/src/background-jobs/store.d.ts +66 -12
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +191 -35
- package/build/src/background-jobs/types.d.ts +55 -0
- package/build/src/background-jobs/types.d.ts.map +1 -1
- package/build/src/background-jobs/types.js +16 -1
- package/build/src/configuration-types.d.ts +3 -3
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +2 -2
- package/build/src/configuration.d.ts +18 -8
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +38 -7
- package/build/src/database/drivers/base-column.d.ts +5 -0
- package/build/src/database/drivers/base-column.d.ts.map +1 -1
- package/build/src/database/drivers/base-column.js +8 -1
- package/build/src/database/drivers/mssql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/update.js +2 -4
- package/build/src/database/drivers/mysql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/update.js +2 -4
- package/build/src/database/drivers/pgsql/column.d.ts +5 -0
- package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/column.js +19 -1
- package/build/src/database/drivers/pgsql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/update.js +2 -4
- package/build/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/alter-table.js +6 -2
- package/build/src/database/drivers/sqlite/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/update.js +2 -4
- package/build/src/database/query/index.d.ts +4 -4
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +3 -3
- package/build/src/database/query/model-class-query.d.ts +8 -2
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +25 -11
- package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-many.js +4 -2
- package/build/src/database/query/query-data.d.ts.map +1 -1
- package/build/src/database/query/query-data.js +3 -2
- package/build/src/database/query/update-base.d.ts +7 -0
- package/build/src/database/query/update-base.d.ts.map +1 -1
- package/build/src/database/query/update-base.js +13 -1
- package/build/src/database/query/with-count.d.ts.map +1 -1
- package/build/src/database/query/with-count.js +3 -2
- package/build/src/database/record/acts-as-list.d.ts.map +1 -1
- package/build/src/database/record/acts-as-list.js +35 -14
- package/build/src/database/record/attachments/store.d.ts +67 -0
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +301 -25
- package/build/src/database/record/auditing.d.ts.map +1 -1
- package/build/src/database/record/auditing.js +7 -4
- package/build/src/database/record/index.d.ts +78 -26
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +171 -42
- package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/belongs-to.js +3 -2
- package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
- package/build/src/database/record/validators/uniqueness.js +8 -6
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +4 -4
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -12
- package/build/src/frontend-model-controller.d.ts +29 -8
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +122 -51
- package/build/src/frontend-model-resource/base-resource.d.ts +51 -24
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +83 -37
- package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts +45 -26
- package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/velocious-attachment-resource.js +89 -31
- package/build/src/frontend-models/base.d.ts +53 -20
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +275 -59
- package/build/src/frontend-models/preloader.d.ts.map +1 -1
- package/build/src/frontend-models/preloader.js +6 -4
- package/build/src/frontend-models/query.d.ts +2 -2
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +14 -7
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +20 -3
- package/build/src/frontend-models/use-destroyed-event.d.ts +1 -1
- package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-destroyed-event.js +2 -2
- package/build/src/frontend-models/use-model-class-event.d.ts +2 -2
- package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-model-class-event.js +3 -3
- package/build/src/frontend-models/use-updated-event.d.ts +1 -1
- package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-updated-event.js +2 -2
- package/build/src/frontend-models/websocket-channel.d.ts +60 -41
- package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-channel.js +225 -85
- package/build/src/frontend-models/websocket-publishers.d.ts +9 -0
- package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-publishers.js +190 -19
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +11 -2
- package/build/src/http-server/websocket-channel.d.ts +20 -8
- package/build/src/http-server/websocket-channel.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel.js +15 -3
- package/build/src/sync/assets/cache.d.ts +288 -0
- package/build/src/sync/assets/cache.d.ts.map +1 -0
- package/build/src/sync/assets/cache.js +883 -0
- package/build/src/sync/assets/types.d.ts +199 -0
- package/build/src/sync/assets/types.d.ts.map +1 -0
- package/build/src/sync/assets/types.js +56 -0
- package/build/src/sync/sync-api-client.d.ts.map +1 -1
- package/build/src/sync/sync-api-client.js +4 -3
- package/build/src/sync/sync-client.d.ts.map +1 -1
- package/build/src/sync/sync-client.js +3 -2
- package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
- package/build/src/sync/sync-envelope-replay-service.js +6 -5
- package/build/src/sync/sync-publisher.d.ts.map +1 -1
- package/build/src/sync/sync-publisher.js +4 -3
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts +2 -2
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +3 -3
- package/build/src/testing/test-profiler.d.ts +4 -4
- package/build/src/testing/test-profiler.d.ts.map +1 -1
- package/build/src/testing/test-profiler.js +3 -3
- package/build/src/testing/test-runner.d.ts +279 -117
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +503 -933
- package/build/src/testing/test.d.ts +11 -72
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +131 -284
- package/build/src/testing/velocious-attempt-executor.d.ts +54 -0
- package/build/src/testing/velocious-attempt-executor.d.ts.map +1 -0
- package/build/src/testing/velocious-attempt-executor.js +408 -0
- package/build/src/testing/velocious-runner-reporter.d.ts +67 -0
- package/build/src/testing/velocious-runner-reporter.d.ts.map +1 -0
- package/build/src/testing/velocious-runner-reporter.js +240 -0
- package/build/src/testing/velocious-suite-hook-executor.d.ts +19 -0
- package/build/src/testing/velocious-suite-hook-executor.d.ts.map +1 -0
- package/build/src/testing/velocious-suite-hook-executor.js +41 -0
- package/build/src/testing/velocious-test-arguments.d.ts +39 -0
- package/build/src/testing/velocious-test-arguments.d.ts.map +1 -0
- package/build/src/testing/velocious-test-arguments.js +55 -0
- package/build/src/utils/model-primary-key.d.ts +73 -0
- package/build/src/utils/model-primary-key.d.ts.map +1 -0
- package/build/src/utils/model-primary-key.js +144 -0
- package/build/src/utils/sha256-bytes-hex.d.ts +7 -0
- package/build/src/utils/sha256-bytes-hex.d.ts.map +1 -0
- package/build/src/utils/sha256-bytes-hex.js +117 -0
- package/build/src/utils/sha256-hex.d.ts +2 -4
- package/build/src/utils/sha256-hex.d.ts.map +1 -1
- package/build/src/utils/sha256-hex.js +6 -120
- package/build/sync/assets/cache.js +998 -0
- package/build/sync/assets/types.js +62 -0
- package/build/sync/sync-api-client.js +3 -2
- package/build/sync/sync-client.js +2 -1
- package/build/sync/sync-envelope-replay-service.js +5 -4
- package/build/sync/sync-publisher.js +3 -2
- package/build/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
- package/build/testing/test-profiler.js +2 -2
- package/build/testing/test-runner.js +496 -990
- package/build/testing/test.js +164 -306
- package/build/testing/velocious-attempt-executor.js +441 -0
- package/build/testing/velocious-runner-reporter.js +264 -0
- package/build/testing/velocious-suite-hook-executor.js +43 -0
- package/build/testing/velocious-test-arguments.js +64 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/utils/model-primary-key.js +171 -0
- package/build/utils/sha256-bytes-hex.js +132 -0
- package/build/utils/sha256-hex.js +7 -135
- package/package.json +5 -4
- package/src/authorization/ability.js +36 -13
- package/src/background-jobs/adapter.js +9 -0
- package/src/background-jobs/main.js +35 -10
- package/src/background-jobs/store.js +217 -38
- package/src/background-jobs/types.js +15 -0
- package/src/configuration-types.js +1 -1
- package/src/configuration.js +45 -9
- package/src/database/drivers/base-column.js +8 -0
- package/src/database/drivers/mssql/sql/update.js +1 -3
- package/src/database/drivers/mysql/sql/update.js +1 -3
- package/src/database/drivers/pgsql/column.js +22 -0
- package/src/database/drivers/pgsql/sql/update.js +1 -3
- package/src/database/drivers/sqlite/sql/alter-table.js +11 -1
- package/src/database/drivers/sqlite/sql/update.js +1 -3
- package/src/database/query/index.js +2 -2
- package/src/database/query/model-class-query.js +26 -10
- package/src/database/query/preloader/has-many.js +4 -1
- package/src/database/query/query-data.js +2 -1
- package/src/database/query/update-base.js +14 -0
- package/src/database/query/with-count.js +3 -1
- package/src/database/record/acts-as-list.js +37 -13
- package/src/database/record/attachments/store.js +336 -26
- package/src/database/record/auditing.js +6 -3
- package/src/database/record/index.js +197 -42
- package/src/database/record/instance-relationships/belongs-to.js +2 -1
- package/src/database/record/validators/uniqueness.js +8 -5
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
- package/src/frontend-model-controller.js +136 -53
- package/src/frontend-model-resource/base-resource.js +87 -37
- package/src/frontend-model-resource/velocious-attachment-resource.js +98 -31
- package/src/frontend-models/base.js +307 -59
- package/src/frontend-models/preloader.js +6 -3
- package/src/frontend-models/query.js +15 -6
- package/src/frontend-models/resource-definition.js +21 -2
- package/src/frontend-models/use-destroyed-event.js +1 -1
- package/src/frontend-models/use-model-class-event.js +2 -2
- package/src/frontend-models/use-updated-event.js +1 -1
- package/src/frontend-models/websocket-channel.js +256 -93
- package/src/frontend-models/websocket-publishers.js +218 -18
- package/src/http-server/client/websocket-session.js +13 -1
- package/src/http-server/websocket-channel.js +15 -2
- package/src/sync/assets/cache.js +998 -0
- package/src/sync/assets/types.js +62 -0
- package/src/sync/sync-api-client.js +3 -2
- package/src/sync/sync-client.js +2 -1
- package/src/sync/sync-envelope-replay-service.js +5 -4
- package/src/sync/sync-publisher.js +3 -2
- package/src/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
- package/src/testing/test-profiler.js +2 -2
- package/src/testing/test-runner.js +496 -990
- package/src/testing/test.js +164 -306
- package/src/testing/velocious-attempt-executor.js +441 -0
- package/src/testing/velocious-runner-reporter.js +264 -0
- package/src/testing/velocious-suite-hook-executor.js +43 -0
- package/src/testing/velocious-test-arguments.js +64 -0
- package/src/utils/model-primary-key.js +171 -0
- package/src/utils/sha256-bytes-hex.js +132 -0
- package/src/utils/sha256-hex.js +7 -135
- package/build/src/testing/testing-package-adapter.d.ts +0 -9
- package/build/src/testing/testing-package-adapter.d.ts.map +0 -1
- package/build/src/testing/testing-package-adapter.js +0 -69
- package/build/testing/testing-package-adapter.js +0 -76
- package/src/testing/testing-package-adapter.js +0 -76
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
export type FrontendModelPublisherResource = {
|
|
2
|
+
primaryKey: import("../utils/model-primary-key.js").ModelPrimaryKeyDefinition;
|
|
3
|
+
};
|
|
4
|
+
export type FrontendModelDestroyAuthorizationRecord = Record<string, import("./query.js").FrontendModelTransportValue>;
|
|
5
|
+
export type FrontendModelWebsocketRecord = import("../database/record/index.js").default & {
|
|
6
|
+
__frontendModelWebsocketAction?: "create" | "update";
|
|
7
|
+
__frontendModelWebsocketDestroyAuthorizationRecord?: FrontendModelDestroyAuthorizationRecord;
|
|
8
|
+
__frontendModelWebsocketPreviousIds?: Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>;
|
|
9
|
+
};
|
|
1
10
|
/** Shared channel name for all frontend-model lifecycle subscriptions. */
|
|
2
11
|
export declare const FRONTEND_MODELS_CHANNEL_NAME = "frontend-models";
|
|
3
12
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-publishers.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-publishers.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"websocket-publishers.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-publishers.js"],"names":[],"mappings":"AAQI,YAA2F,8BAA8B,GAA/G;IAAC,UAAU,EAAE,OAAO,+BAA+B,EAAE,yBAAyB,CAAA;CAAC,CAAgC;AACzH,YAA4E,uCAAuC,GAAzG,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,2BAA2B,CAAC,CAAyC;AACnH,YAAiU,4BAA4B,GAAnV,OAAO,6BAA6B,EAAE,OAAO,GAAG;IAAC,8BAA8B,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,kDAAkD,CAAC,EAAE,uCAAuC,CAAC;IAAC,mCAAmC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,+BAA+B,EAAE,oBAAoB,CAAC,CAAA;CAAC,CAA8B;AAOjW,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,oBAAoB,CAAA;AAa7D;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,SAAS,EAHhD,MAGgD,GAF9C,MAAM,CAIlB;AA4CD;;;;GAIG;AACH,wBAAsB,gDAAgD,CAAC,aAAa,EAHzE,OAAO,qBAAqB,EAAE,OAG2C,GAFvE,OAAO,CAAC,IAAI,CAAC,CA8HzB"}
|
|
@@ -3,8 +3,14 @@ import AuthorizationBaseResource from "../authorization/base-resource.js";
|
|
|
3
3
|
import { frontendModelResourcesWithBuiltInsForBackendProject } from "./built-in-resources.js";
|
|
4
4
|
import { frontendModelResourceDefinitionIsClass } from "./resource-definition.js";
|
|
5
5
|
import { serializeFrontendModelTransportValue } from "./transport-serialization.js";
|
|
6
|
+
import { modelPrimaryKeyCacheKey, readModelPrimaryKeyValue } from "../utils/model-primary-key.js";
|
|
7
|
+
/** @typedef {{primaryKey: import("../utils/model-primary-key.js").ModelPrimaryKeyDefinition}} FrontendModelPublisherResource */
|
|
8
|
+
/** @typedef {Record<string, import("./query.js").FrontendModelTransportValue>} FrontendModelDestroyAuthorizationRecord */
|
|
9
|
+
/** @typedef {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update", __frontendModelWebsocketDestroyAuthorizationRecord?: FrontendModelDestroyAuthorizationRecord, __frontendModelWebsocketPreviousIds?: Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>}} FrontendModelWebsocketRecord */
|
|
6
10
|
const modelClassesWithRegisteredHooks = new WeakSet();
|
|
7
11
|
const channelClassRegisteredConfigurations = new WeakSet();
|
|
12
|
+
/** @type {WeakMap<import("../configuration.js").default, WeakMap<typeof import("../database/record/index.js").default, Map<string, FrontendModelPublisherResource>>>} */
|
|
13
|
+
const publisherResourcesByConfiguration = new WeakMap();
|
|
8
14
|
/** Shared channel name for all frontend-model lifecycle subscriptions. */
|
|
9
15
|
export const FRONTEND_MODELS_CHANNEL_NAME = "frontend-models";
|
|
10
16
|
/**
|
|
@@ -51,7 +57,7 @@ function frontendModelResourcesFromAbilityResourcesList(abilityResources) {
|
|
|
51
57
|
// throw `requires a static ModelClass` during ability-resource discovery.
|
|
52
58
|
if (!resourceClass.ModelClass)
|
|
53
59
|
continue;
|
|
54
|
-
const modelName = resourceClass.modelClass().getModelName();
|
|
60
|
+
const modelName = resourceClass.resourceConfig().modelName || resourceClass.modelClass().getModelName();
|
|
55
61
|
resources[modelName] = resourceClass;
|
|
56
62
|
}
|
|
57
63
|
else if (resourceClass.prototype instanceof AuthorizationBaseResource) {
|
|
@@ -96,14 +102,32 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
|
|
|
96
102
|
const { default: FrontendModelWebsocketChannel } = await import("./websocket-channel.js");
|
|
97
103
|
configuration.registerWebsocketChannel(FRONTEND_MODELS_CHANNEL_NAME, FrontendModelWebsocketChannel);
|
|
98
104
|
}
|
|
99
|
-
for (const resourceClass of Object.
|
|
105
|
+
for (const [modelName, resourceClass] of Object.entries(allFrontendModels)) {
|
|
100
106
|
// An abstract base resource (no static ModelClass — e.g. an app's shared
|
|
101
107
|
// `BaseResource` that other resources extend) backs no model, so there is
|
|
102
108
|
// nothing to publish realtime events for. Skip it instead of throwing.
|
|
103
109
|
if (!resourceClass.ModelClass)
|
|
104
110
|
continue;
|
|
105
111
|
const modelClass = resourceClass.modelClass();
|
|
106
|
-
const
|
|
112
|
+
const resourceConfiguration = resourceClass.resourceConfig();
|
|
113
|
+
const configuredPrimaryKey = resourceConfiguration.primaryKey;
|
|
114
|
+
const modelPrimaryKey = modelClass.primaryKey();
|
|
115
|
+
const primaryKey = configuredPrimaryKey || (Array.isArray(modelPrimaryKey)
|
|
116
|
+
? modelPrimaryKey.map((columnName) => modelClass.resolveAttributeName(columnName) || columnName)
|
|
117
|
+
: modelClass.resolveAttributeName(modelPrimaryKey) || modelPrimaryKey);
|
|
118
|
+
let publisherResourcesByModelClass = publisherResourcesByConfiguration.get(configuration);
|
|
119
|
+
if (!publisherResourcesByModelClass) {
|
|
120
|
+
publisherResourcesByModelClass = new WeakMap();
|
|
121
|
+
publisherResourcesByConfiguration.set(configuration, publisherResourcesByModelClass);
|
|
122
|
+
}
|
|
123
|
+
let publisherResources = publisherResourcesByModelClass.get(modelClass);
|
|
124
|
+
if (!publisherResources) {
|
|
125
|
+
publisherResources = new Map();
|
|
126
|
+
publisherResourcesByModelClass.set(modelClass, publisherResources);
|
|
127
|
+
}
|
|
128
|
+
publisherResources.set(modelName, {
|
|
129
|
+
primaryKey
|
|
130
|
+
});
|
|
107
131
|
// Register lifecycle hooks once per model class, not per configuration. A model class belongs to a
|
|
108
132
|
// single backend project/config in production, so per-config registration only differs in tests where
|
|
109
133
|
// the same model class is reachable from multiple configs — there it attaches duplicate beforeCreate/
|
|
@@ -113,32 +137,175 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
|
|
|
113
137
|
continue;
|
|
114
138
|
modelClassesWithRegisteredHooks.add(modelClass);
|
|
115
139
|
modelClass.beforeCreate((model) => {
|
|
116
|
-
/** @type {
|
|
140
|
+
/** @type {FrontendModelWebsocketRecord} */ (model).__frontendModelWebsocketAction = "create";
|
|
117
141
|
});
|
|
118
|
-
modelClass.beforeUpdate((model) => {
|
|
119
|
-
/** @type {
|
|
142
|
+
modelClass.beforeUpdate(async (model) => {
|
|
143
|
+
const websocketModel = /** @type {FrontendModelWebsocketRecord} */ (model);
|
|
144
|
+
websocketModel.__frontendModelWebsocketAction = "update";
|
|
145
|
+
websocketModel.__frontendModelWebsocketPreviousIds = await frontendModelPreviousResourceIdentities(model);
|
|
146
|
+
});
|
|
147
|
+
modelClass.beforeDestroy(async (model) => {
|
|
148
|
+
const websocketModel = /** @type {FrontendModelWebsocketRecord} */ (model);
|
|
149
|
+
const persistedModel = await model
|
|
150
|
+
.queryForModel(model.getModelClass())
|
|
151
|
+
.find(model._persistedPrimaryKeyValue());
|
|
152
|
+
if (!persistedModel)
|
|
153
|
+
throw new Error(`Cannot capture websocket destroy authorization for missing ${model.getModelClass().name}`);
|
|
154
|
+
websocketModel.__frontendModelWebsocketPreviousIds = frontendModelResourceIdentities(persistedModel);
|
|
155
|
+
websocketModel.__frontendModelWebsocketDestroyAuthorizationRecord = frontendModelDestroyAuthorizationRecord(persistedModel);
|
|
120
156
|
});
|
|
121
157
|
modelClass.afterSave((model) => {
|
|
122
|
-
const modelWithWebsocketAction = /** @type {
|
|
158
|
+
const modelWithWebsocketAction = /** @type {FrontendModelWebsocketRecord} */ (model);
|
|
123
159
|
const action = modelWithWebsocketAction.__frontendModelWebsocketAction;
|
|
124
160
|
if (action !== "create" && action !== "update")
|
|
125
161
|
return;
|
|
162
|
+
const previousIds = modelWithWebsocketAction.__frontendModelWebsocketPreviousIds;
|
|
126
163
|
void model.connection().afterCommit(async () => {
|
|
127
|
-
|
|
128
|
-
action,
|
|
129
|
-
id: model.id(),
|
|
130
|
-
record: model.attributes()
|
|
131
|
-
});
|
|
164
|
+
broadcastFrontendModelEvents(model, action, previousIds);
|
|
132
165
|
});
|
|
133
166
|
delete modelWithWebsocketAction.__frontendModelWebsocketAction;
|
|
167
|
+
delete modelWithWebsocketAction.__frontendModelWebsocketPreviousIds;
|
|
134
168
|
});
|
|
135
169
|
modelClass.afterDestroy((model) => {
|
|
170
|
+
const websocketModel = /** @type {FrontendModelWebsocketRecord} */ (model);
|
|
171
|
+
const destroyAuthorizationRecord = websocketModel.__frontendModelWebsocketDestroyAuthorizationRecord;
|
|
172
|
+
const previousIds = websocketModel.__frontendModelWebsocketPreviousIds;
|
|
136
173
|
void model.connection().afterCommit(async () => {
|
|
137
|
-
|
|
138
|
-
action: "destroy",
|
|
139
|
-
id: model.id()
|
|
140
|
-
});
|
|
174
|
+
broadcastFrontendModelEvents(model, "destroy", previousIds, destroyAuthorizationRecord);
|
|
141
175
|
});
|
|
176
|
+
delete websocketModel.__frontendModelWebsocketDestroyAuthorizationRecord;
|
|
177
|
+
delete websocketModel.__frontendModelWebsocketPreviousIds;
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Returns every resource identity represented by the record before its pending changes or destruction.
|
|
183
|
+
* @param {import("../database/record/index.js").default} model - Backing model before update or destroy.
|
|
184
|
+
* @returns {Promise<Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>>} - Previous identities by resource name.
|
|
185
|
+
*/
|
|
186
|
+
async function frontendModelPreviousResourceIdentities(model) {
|
|
187
|
+
const publisherResources = publisherResourcesByConfiguration.get(model._getConfiguration())?.get(model.getModelClass());
|
|
188
|
+
/** @type {Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>} */
|
|
189
|
+
const previousIds = new Map();
|
|
190
|
+
if (!publisherResources)
|
|
191
|
+
return previousIds;
|
|
192
|
+
for (const [modelName, { primaryKey }] of publisherResources) {
|
|
193
|
+
const previousId = frontendModelResourceIdentity({ model, previous: true, primaryKey });
|
|
194
|
+
if (previousId !== null)
|
|
195
|
+
previousIds.set(modelName, previousId);
|
|
196
|
+
}
|
|
197
|
+
if (previousIds.size === publisherResources.size)
|
|
198
|
+
return previousIds;
|
|
199
|
+
const persistedModel = await model
|
|
200
|
+
.queryForModel(model.getModelClass())
|
|
201
|
+
.find(model._persistedPrimaryKeyValue());
|
|
202
|
+
for (const [modelName, { primaryKey }] of publisherResources) {
|
|
203
|
+
if (previousIds.has(modelName))
|
|
204
|
+
continue;
|
|
205
|
+
const persistedId = frontendModelResourceIdentity({ model: persistedModel, primaryKey });
|
|
206
|
+
if (persistedId !== null)
|
|
207
|
+
previousIds.set(modelName, persistedId);
|
|
208
|
+
}
|
|
209
|
+
return previousIds;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Returns every configured resource identity represented by a persisted backing record.
|
|
213
|
+
* @param {import("../database/record/index.js").default} model - Fully loaded persisted backing record.
|
|
214
|
+
* @returns {Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>} - Identities by resource name.
|
|
215
|
+
*/
|
|
216
|
+
function frontendModelResourceIdentities(model) {
|
|
217
|
+
const publisherResources = publisherResourcesByConfiguration.get(model._getConfiguration())?.get(model.getModelClass());
|
|
218
|
+
/** @type {Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>} */
|
|
219
|
+
const identities = new Map();
|
|
220
|
+
if (!publisherResources)
|
|
221
|
+
return identities;
|
|
222
|
+
for (const [modelName, { primaryKey }] of publisherResources) {
|
|
223
|
+
const id = frontendModelResourceIdentity({ model, primaryKey });
|
|
224
|
+
if (id !== null)
|
|
225
|
+
identities.set(modelName, id);
|
|
226
|
+
}
|
|
227
|
+
return identities;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Serializes the persisted record for server-side destroy authorization. Binary values
|
|
231
|
+
* use a dedicated byte-array marker because the shared transport serializer otherwise
|
|
232
|
+
* leaves Buffers to the JSON implementation used by the worker or Beacon transport.
|
|
233
|
+
* @param {import("../database/record/index.js").default} model - Fully loaded persisted backing record.
|
|
234
|
+
* @returns {FrontendModelDestroyAuthorizationRecord} - Column-keyed transport values.
|
|
235
|
+
*/
|
|
236
|
+
function frontendModelDestroyAuthorizationRecord(model) {
|
|
237
|
+
const serializationOptions = transportSerializationOptionsForConfiguration(model._getConfiguration());
|
|
238
|
+
/** @type {FrontendModelDestroyAuthorizationRecord} */
|
|
239
|
+
const authorizationRecord = {};
|
|
240
|
+
for (const [columnName, value] of Object.entries(model.rawAttributes())) {
|
|
241
|
+
authorizationRecord[columnName] = value instanceof Uint8Array
|
|
242
|
+
? { __velociousDestroyAuthorizationType: "binary", value: Array.from(value) }
|
|
243
|
+
: serializeFrontendModelTransportValue(value, serializationOptions);
|
|
244
|
+
}
|
|
245
|
+
if (Object.keys(authorizationRecord).length === 0) {
|
|
246
|
+
throw new Error(`Cannot capture websocket destroy authorization without attributes for ${model.getModelClass().name}`);
|
|
247
|
+
}
|
|
248
|
+
return authorizationRecord;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Reads a resource identity only when every identity attribute was loaded on the backing record.
|
|
252
|
+
* @param {object} args - Identity arguments.
|
|
253
|
+
* @param {import("../database/record/index.js").default} args.model - Backing model.
|
|
254
|
+
* @param {boolean} [args.previous] - Read values from before pending changes.
|
|
255
|
+
* @param {import("../utils/model-primary-key.js").ModelPrimaryKeyDefinition} args.primaryKey - Resource identity definition.
|
|
256
|
+
* @returns {import("../utils/model-primary-key.js").ModelPrimaryKeyValue | null} - Complete identity or null when unavailable.
|
|
257
|
+
*/
|
|
258
|
+
function frontendModelResourceIdentity({ model, previous = false, primaryKey }) {
|
|
259
|
+
const attributes = model.attributes();
|
|
260
|
+
const changes = model.changes();
|
|
261
|
+
/** @type {Record<string, import("../utils/model-primary-key.js").ModelPrimaryKeyScalar>} */
|
|
262
|
+
const identityAttributes = {};
|
|
263
|
+
const primaryKeyAttributes = Array.isArray(primaryKey) ? primaryKey : [primaryKey];
|
|
264
|
+
for (const attributeName of primaryKeyAttributes) {
|
|
265
|
+
const columnName = model.getModelClass().getColumnNameForAttributeName(attributeName);
|
|
266
|
+
let value;
|
|
267
|
+
if (previous && Object.hasOwn(changes, columnName)) {
|
|
268
|
+
value = changes[columnName][0];
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
if (!Object.hasOwn(attributes, attributeName))
|
|
272
|
+
return null;
|
|
273
|
+
value = attributes[attributeName];
|
|
274
|
+
}
|
|
275
|
+
if (typeof value !== "string" && typeof value !== "number")
|
|
276
|
+
return null;
|
|
277
|
+
identityAttributes[attributeName] = value;
|
|
278
|
+
}
|
|
279
|
+
return readModelPrimaryKeyValue(primaryKey, (attributeName) => identityAttributes[attributeName]);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Fans one backing-record lifecycle event out through every configured frontend-resource identity.
|
|
283
|
+
* @param {import("../database/record/index.js").default} model - Backing model instance.
|
|
284
|
+
* @param {"create" | "update" | "destroy"} action - Lifecycle action.
|
|
285
|
+
* @param {Map<string, import("../utils/model-primary-key.js").ModelPrimaryKeyValue>} [previousIds] - Persisted identities captured before update or destroy.
|
|
286
|
+
* @param {FrontendModelDestroyAuthorizationRecord} [destroyAuthorizationRecord] - Server-only pre-delete row used to authorize a destroyed record.
|
|
287
|
+
* @returns {void}
|
|
288
|
+
*/
|
|
289
|
+
function broadcastFrontendModelEvents(model, action, previousIds, destroyAuthorizationRecord) {
|
|
290
|
+
const configuration = model._getConfiguration();
|
|
291
|
+
const publisherResources = publisherResourcesByConfiguration.get(configuration)?.get(model.getModelClass());
|
|
292
|
+
if (!publisherResources)
|
|
293
|
+
return;
|
|
294
|
+
for (const [modelName, { primaryKey }] of publisherResources) {
|
|
295
|
+
const previousId = previousIds?.get(modelName);
|
|
296
|
+
const currentId = frontendModelResourceIdentity({ model, primaryKey });
|
|
297
|
+
const id = action === "destroy" ? previousId : currentId ?? previousId;
|
|
298
|
+
if (id === null || id === undefined)
|
|
299
|
+
continue;
|
|
300
|
+
const identityChanged = action === "update"
|
|
301
|
+
&& currentId !== null
|
|
302
|
+
&& previousId !== undefined
|
|
303
|
+
&& modelPrimaryKeyCacheKey(primaryKey, previousId) !== modelPrimaryKeyCacheKey(primaryKey, id);
|
|
304
|
+
broadcastFrontendModelEvent(configuration, modelName, {
|
|
305
|
+
action,
|
|
306
|
+
id,
|
|
307
|
+
...(destroyAuthorizationRecord !== undefined ? { destroyAuthorizationRecord } : {}),
|
|
308
|
+
...(identityChanged ? { previousId } : {})
|
|
142
309
|
});
|
|
143
310
|
}
|
|
144
311
|
}
|
|
@@ -148,7 +315,7 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
|
|
|
148
315
|
* transport serializer so Date/undefined/etc. survive the JSON hop.
|
|
149
316
|
* @param {import("../configuration.js").default} configuration - Configuration instance.
|
|
150
317
|
* @param {string} modelName - Model class name.
|
|
151
|
-
* @param {{action: "create" | "update" | "destroy", id:
|
|
318
|
+
* @param {{action: "create" | "update" | "destroy", destroyAuthorizationRecord?: FrontendModelDestroyAuthorizationRecord, id: import("../utils/model-primary-key.js").ModelPrimaryKeyValue, previousId?: import("../utils/model-primary-key.js").ModelPrimaryKeyValue, record?: Record<string, import("./query.js").FrontendModelTransportValue>}} event - Lifecycle event.
|
|
152
319
|
* @returns {void}
|
|
153
320
|
*/
|
|
154
321
|
function broadcastFrontendModelEvent(configuration, modelName, event) {
|
|
@@ -156,8 +323,12 @@ function broadcastFrontendModelEvent(configuration, modelName, event) {
|
|
|
156
323
|
action: event.action,
|
|
157
324
|
id: event.id,
|
|
158
325
|
model: modelName,
|
|
326
|
+
...(event.previousId !== undefined ? { previousId: event.previousId } : {}),
|
|
159
327
|
...(event.record ? { record: serializeFrontendModelTransportValue(event.record, transportSerializationOptionsForConfiguration(configuration)) } : {})
|
|
160
328
|
};
|
|
161
|
-
configuration.broadcastToChannel(FRONTEND_MODELS_CHANNEL_NAME, {
|
|
329
|
+
configuration.broadcastToChannel(FRONTEND_MODELS_CHANNEL_NAME, {
|
|
330
|
+
...(event.destroyAuthorizationRecord !== undefined ? { destroyAuthorizationRecord: event.destroyAuthorizationRecord } : {}),
|
|
331
|
+
model: modelName
|
|
332
|
+
}, body);
|
|
162
333
|
}
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXB1Ymxpc2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3dlYnNvY2tldC1wdWJsaXNoZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHlCQUF5QixNQUFNLG1DQUFtQyxDQUFBO0FBQ3pFLE9BQU8sRUFBQyxtREFBbUQsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNGLE9BQU8sRUFBQyxzQ0FBc0MsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQy9FLE9BQU8sRUFBQyxvQ0FBb0MsRUFBQyxNQUFNLDhCQUE4QixDQUFBO0FBRWpGLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUNyRCxNQUFNLG9DQUFvQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFMUQsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLGlCQUFpQixDQUFBO0FBRTdEOzs7O0dBSUc7QUFDSCxTQUFTLDZDQUE2QyxDQUFDLGFBQWE7SUFDbEUsT0FBTztRQUNMLFFBQVEsRUFBRSxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO0tBQzNFLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxTQUFTO0lBQ3pELE9BQU8sbUJBQW1CLFNBQVMsRUFBRSxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyw4Q0FBOEMsQ0FBQyxnQkFBZ0I7SUFDdEU7O29HQUVnRztJQUNoRyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELE9BQU8sZ0JBQWdCLEVBQUUsQ0FBQyxD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QkFDN0MsMkJBQTJCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsU0FBUyxFQUFFO29CQUNoRSxNQUFNLEVBQUUsU0FBUztvQkFDakIsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7aUJBQ2YsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDJCQUEyQixDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsS0FBSztJQUNsRSxNQUFNLElBQUksR0FBRztRQUNYLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDWixLQUFLLEVBQUUsU0FBUztRQUNoQixHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUUsb0NBQW9DLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSw2Q0FBNkMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNwSixDQUFBO0lBRUQsYUFBYSxDQUFDLGtCQUFrQixDQUFDLDRCQUE0QixFQUFFLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQzFGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEF1dGhvcml6YXRpb25CYXNlUmVzb3VyY2UgZnJvbSBcIi4uL2F1dGhvcml6YXRpb24vYmFzZS1yZXNvdXJjZS5qc1wiXG5pbXBvcnQge2Zyb250ZW5kTW9kZWxSZXNvdXJjZXNXaXRoQnVpbHRJbnNGb3JCYWNrZW5kUHJvamVjdH0gZnJvbSBcIi4vYnVpbHQtaW4tcmVzb3VyY2VzLmpzXCJcbmltcG9ydCB7ZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3N9IGZyb20gXCIuL3Jlc291cmNlLWRlZmluaXRpb24uanNcIlxuaW1wb3J0IHtzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWV9IGZyb20gXCIuL3RyYW5zcG9ydC1zZXJpYWxpemF0aW9uLmpzXCJcblxuY29uc3QgbW9kZWxDbGFzc2VzV2l0aFJlZ2lzdGVyZWRIb29rcyA9IG5ldyBXZWFrU2V0KClcbmNvbnN0IGNoYW5uZWxDbGFzc1JlZ2lzdGVyZWRDb25maWd1cmF0aW9ucyA9IG5ldyBXZWFrU2V0KClcblxuLyoqIFNoYXJlZCBjaGFubmVsIG5hbWUgZm9yIGFsbCBmcm9udGVuZC1tb2RlbCBsaWZlY3ljbGUgc3Vic2NyaXB0aW9ucy4gKi9cbmV4cG9ydCBjb25zdCBGUk9OVEVORF9NT0RFTFNfQ0hBTk5FTF9OQU1FID0gXCJmcm9udGVuZC1tb2RlbHNcIlxuXG4vKipcbiAqIFJ1bnMgdHJhbnNwb3J0IHNlcmlhbGl6YXRpb24gb3B0aW9ucyBmb3IgYSBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHJhbnNwb3J0LXNlcmlhbGl6YXRpb24uanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFNlcmlhbGl6YXRpb25PcHRpb25zfSAtIFNlcmlhbGl6YXRpb24gb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gdHJhbnNwb3J0U2VyaWFsaXphdGlvbk9wdGlvbnNGb3JDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pIHtcbiAgcmV0dXJuIHtcbiAgICB0aW1lWm9uZTogY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKS5nZXRUaW1lWm9uZShjb25maWd1cmF0aW9uKVxuICB9XG59XG5cbi8qKlxuICogUnVucyB0aGUgZnJvbnRlbmRNb2RlbEJyb2FkY2FzdENoYW5uZWxOYW1lIGhlbHBlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICogQHJldHVybnMge3N0cmluZ30gLSBCcm9hZGNhc3QgY2hhbm5lbCBuYW1lIChsZWdhY3ksIHJldGFpbmVkIGZvciBtaWdyYXRpb24gY29tcGF0aWJpbGl0eSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsQnJvYWRjYXN0Q2hhbm5lbE5hbWUobW9kZWxOYW1lKSB7XG4gIHJldHVybiBgZnJvbnRlbmQtbW9kZWxzOiR7bW9kZWxOYW1lfWBcbn1cblxuLyoqXG4gKiBSdW5zIGZyb250ZW5kIG1vZGVsIHJlc291cmNlcyBmcm9tIGFiaWxpdHkgcmVzb3VyY2VzIGxpc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuQWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlW119IGFiaWxpdHlSZXNvdXJjZXMgLSBBYmlsaXR5IHJlc291cmNlIGNsYXNzZXMuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGU+fSAtIFJlc291cmNlIGRlZmluaXRpb25zIGtleWVkIGJ5IG1vZGVsIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGcm9tQWJpbGl0eVJlc291cmNlc0xpc3QoYWJpbGl0eVJlc291cmNlcykge1xuICAvKipcbiAgICogUmVzb3VyY2VzLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGU+fSAqL1xuICBjb25zdCByZXNvdXJjZXMgPSB7fVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXR5UmVzb3VyY2VzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYWJpbGl0eSByZXNvdXJjZXMgdG8gYmUgYW4gYXJyYXkgYnV0IGdvdDogJHt0eXBlb2YgYWJpbGl0eVJlc291cmNlc31gKVxuICB9XG5cbiAgaWYgKGFiaWxpdHlSZXNvdXJjZXMubGVuZ3RoID09PSAwKSByZXR1cm4gcmVzb3VyY2VzXG5cbiAgZm9yIChjb25zdCByZXNvdXJjZUNsYXNzIG9mIGFiaWxpdHlSZXNvdXJjZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlc291cmNlQ2xhc3MgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhYmlsaXR5IHJlc291cmNlIHRvIGJlIGEgY2xhc3MgYnV0IGdvdDogJHt0eXBlb2YgcmVzb3VyY2VDbGFzc31gKVxuICAgIH1cblxuICAgIGlmIChmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyhyZXNvdXJjZUNsYXNzKSkge1xuICAgICAgLy8gQW4gYWJzdHJhY3QgYmFzZSByZXNvdXJjZSAobm8gc3RhdGljIE1vZGVsQ2xhc3Mg4oCUIGUuZy4gYW4gYXBwJ3Mgc2hhcmVkXG4gICAgICAvLyBgQmFzZVJlc291cmNlYCB0aGF0IG90aGVyIHJlc291cmNlcyBleHRlbmQpIGJhY2tzIG5vIG1vZGVsLCBzbyBpdCBpc24ndCBhXG4gICAgICAvLyBwdWJsaXNoYWJsZSBmcm9udGVuZCBtb2RlbC4gU2tpcCBpdCBpbnN0ZWFkIG9mIGxldHRpbmcgYG1vZGVsQ2xhc3MoKWBcbiAgICAgIC8vIHRocm93IGByZXF1aXJlcyBhIHN0YXRpYyBNb2RlbENsYXNzYCBkdXJpbmcgYWJpbGl0eS1yZXNvdXJjZSBkaXNjb3ZlcnkuXG4gICAgICBpZiAoIXJlc291cmNlQ2xhc3MuTW9kZWxDbGFzcykgY29udGludWVcblxuICAgICAgY29uc3QgbW9kZWxOYW1lID0gcmVzb3VyY2VDbGFzcy5tb2RlbENsYXNzKCkuZ2V0TW9kZWxOYW1lKClcblxuICAgICAgcmVzb3VyY2VzW21vZGVsTmFtZV0gPSByZXNvdXJjZUNsYXNzXG4gICAgfSBlbHNlIGlmIChyZXNvdXJjZUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEF1dGhvcml6YXRpb25CYXNlUmVzb3VyY2UpIHtcbiAgICAgIC8vIEF1dGhvcml6YXRpb24tb25seSByZXNvdXJjZSDigJQgdmFsaWQgYnV0IG5vdCByZWxldmFudCBmb3IgV2ViU29ja2V0IHB1Ymxpc2hpbmdcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGFiaWxpdHkgcmVzb3VyY2UgY2xhc3M6ICR7cmVzb3VyY2VDbGFzcy5uYW1lfS4gRXhwZWN0ZWQgQXV0aG9yaXphdGlvbkJhc2VSZXNvdXJjZSBvciBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIHN1YmNsYXNzLmApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc291cmNlc1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGVuc3VyZUZyb250ZW5kTW9kZWxXZWJzb2NrZXRQdWJsaXNoZXJzUmVnaXN0ZXJlZCBoZWxwZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUZyb250ZW5kTW9kZWxXZWJzb2NrZXRQdWJsaXNoZXJzUmVnaXN0ZXJlZChjb25maWd1cmF0aW9uKSB7XG4gIC8qKlxuICAgKiBBbGwgZnJvbnRlbmQgbW9kZWxzLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc1R5cGU+fSAqL1xuICBsZXQgYWxsRnJvbnRlbmRNb2RlbHMgPSB7fVxuXG4gIGZvciAoY29uc3QgYmFja2VuZFByb2plY3Qgb2YgY29uZmlndXJhdGlvbi5nZXRCYWNrZW5kUHJvamVjdHMoKSkge1xuICAgIGNvbnN0IHByb2plY3RSZXNvdXJjZXMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VzV2l0aEJ1aWx0SW5zRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG5cbiAgICBhbGxGcm9udGVuZE1vZGVscyA9IHsuLi5hbGxGcm9udGVuZE1vZGVscywgLi4ucHJvamVjdFJlc291cmNlc31cbiAgfVxuXG4gIC8vIEFsd2F5cyBtZXJnZSB0aGUgYWJpbGl0eSByZXNvbHZlcidzIHJlc291cmNlIGxpc3QgdG9vLiBBIHByb2plY3QgY2FuIGV4cG9zZSBzb21lXG4gIC8vIHJlc291cmNlcyBhcyBkaXNjb3ZlcmFibGUgYHNyYy9yZXNvdXJjZXMvKi5qc2AgZmlsZXMgKGNvbmZpZ3VyZWQgb3IgYXV0by1kaXNjb3ZlcmVkKVxuICAvLyBhbmQgb3RoZXJzIG9ubHkgdGhyb3VnaCBgZ2V0QWJpbGl0eVJlc291cmNlcygpYDsgYm90aCBzZXRzIG5lZWQgbGlmZWN5Y2xlIHB1Ymxpc2hlcnMsXG4gIC8vIHNvIHJlc291cmNlIGRpc2NvdmVyeSBtdXN0IG5vdCBzdXBwcmVzcyB0aGlzIGxpc3QuXG4gIGNvbnN0IGFiaWxpdHlSZXNvdXJjZXMgPSBjb25maWd1cmF0aW9uLmdldEFiaWxpdHlSZXNvdXJjZXMoKVxuXG4gIGFsbEZyb250ZW5kTW9kZWxzID0ge1xuICAgIC4uLmFsbEZyb250ZW5kTW9kZWxzLFxuICAgIC4uLmZyb250ZW5kTW9kZWxSZXNvdXJjZXNGcm9tQWJpbGl0eVJlc291cmNlc0xpc3QoYWJpbGl0eVJlc291cmNlcylcbiAgfVxuXG4gIC8vIFBoYXNlIDM6IHJlZ2lzdGVyIHRoZSBWMiBjaGFubmVsIGNsYXNzIG9uY2UgcGVyIGNvbmZpZ3VyYXRpb24gc29cbiAgLy8gYHN1YnNjcmliZUNoYW5uZWwoXCJmcm9udGVuZC1tb2RlbHNcIiwge3BhcmFtczoge21vZGVsfX0pYCBmaW5kcyBpdC5cbiAgLy8gRHluYW1pYyBpbXBvcnQga2VlcHMgc2VydmVyLW9ubHkgV2Vic29ja2V0UmVxdWVzdCArIE5vZGUgdXRpbGl0aWVzXG4gIC8vIG91dCBvZiBicm93c2VyIGJ1bmRsZXMgdGhhdCB0cmFuc2l0aXZlbHkgcHVsbCBpbiB0aGlzIG1vZHVsZSB2aWFcbiAgLy8gY29uZmlndXJhdGlvbiDihpIgbG9nZ2VyLlxuICBpZiAoIWNoYW5uZWxDbGFzc1JlZ2lzdGVyZWRDb25maWd1cmF0aW9ucy5oYXMoY29uZmlndXJhdGlvbikpIHtcbiAgICBjaGFubmVsQ2xhc3NSZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMuYWRkKGNvbmZpZ3VyYXRpb24pXG4gICAgY29uc3Qge2RlZmF1bHQ6IEZyb250ZW5kTW9kZWxXZWJzb2NrZXRDaGFubmVsfSA9IGF3YWl0IGltcG9ydChcIi4vd2Vic29ja2V0LWNoYW5uZWwuanNcIilcblxuICAgIGNvbmZpZ3VyYXRpb24ucmVnaXN0ZXJXZWJzb2NrZXRDaGFubmVsKEZST05URU5EX01PREVMU19DSEFOTkVMX05BTUUsIEZyb250ZW5kTW9kZWxXZWJzb2NrZXRDaGFubmVsKVxuICB9XG5cbiAgZm9yIChjb25zdCByZXNvdXJjZUNsYXNzIG9mIE9iamVjdC52YWx1ZXMoYWxsRnJvbnRlbmRNb2RlbHMpKSB7XG4gICAgLy8gQW4gYWJzdHJhY3QgYmFzZSByZXNvdXJjZSAobm8gc3RhdGljIE1vZGVsQ2xhc3Mg4oCUIGUuZy4gYW4gYXBwJ3Mgc2hhcmVkXG4gICAgLy8gYEJhc2VSZXNvdXJjZWAgdGhhdCBvdGhlciByZXNvdXJjZXMgZXh0ZW5kKSBiYWNrcyBubyBtb2RlbCwgc28gdGhlcmUgaXNcbiAgICAvLyBub3RoaW5nIHRvIHB1Ymxpc2ggcmVhbHRpbWUgZXZlbnRzIGZvci4gU2tpcCBpdCBpbnN0ZWFkIG9mIHRocm93aW5nLlxuICAgIGlmICghcmVzb3VyY2VDbGFzcy5Nb2RlbENsYXNzKSBjb250aW51ZVxuXG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IHJlc291cmNlQ2xhc3MubW9kZWxDbGFzcygpXG4gICAgY29uc3QgbW9kZWxOYW1lID0gbW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUoKVxuXG4gICAgLy8gUmVnaXN0ZXIgbGlmZWN5Y2xlIGhvb2tzIG9uY2UgcGVyIG1vZGVsIGNsYXNzLCBub3QgcGVyIGNvbmZpZ3VyYXRpb24uIEEgbW9kZWwgY2xhc3MgYmVsb25ncyB0byBhXG4gICAgLy8gc2luZ2xlIGJhY2tlbmQgcHJvamVjdC9jb25maWcgaW4gcHJvZHVjdGlvbiwgc28gcGVyLWNvbmZpZyByZWdpc3RyYXRpb24gb25seSBkaWZmZXJzIGluIHRlc3RzIHdoZXJlXG4gICAgLy8gdGhlIHNhbWUgbW9kZWwgY2xhc3MgaXMgcmVhY2hhYmxlIGZyb20gbXVsdGlwbGUgY29uZmlncyDigJQgdGhlcmUgaXQgYXR0YWNoZXMgZHVwbGljYXRlIGJlZm9yZUNyZWF0ZS9cbiAgICAvLyBhZnRlclNhdmUvYWZ0ZXJEZXN0cm95IGhvb2tzIHRoYXQgZG91YmxlLWZpcmUgYnJvYWRjYXN0cyAoYW5kIGxlYWsgYWNyb3NzIHNwZWNzKS4gVGhlIGhvb2tzIHJlYWQgdGhlXG4gICAgLy8gbW9kZWwncyBydW50aW1lIGNvbmZpZ3VyYXRpb24gd2hlbiBicm9hZGNhc3RpbmcsIHNvIGEgc2luZ2xlIHJlZ2lzdHJhdGlvbiBpcyBzdWZmaWNpZW50LlxuICAgIGlmIChtb2RlbENsYXNzZXNXaXRoUmVnaXN0ZXJlZEhvb2tzLmhhcyhtb2RlbENsYXNzKSkgY29udGludWVcblxuICAgIG1vZGVsQ2xhc3Nlc1dpdGhSZWdpc3RlcmVkSG9va3MuYWRkKG1vZGVsQ2xhc3MpXG5cbiAgICBtb2RlbENsYXNzLmJlZm9yZUNyZWF0ZSgobW9kZWwpID0+IHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgJiB7X19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uPzogXCJjcmVhdGVcIiB8IFwidXBkYXRlXCJ9fSAqLyAobW9kZWwpLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbiA9IFwiY3JlYXRlXCJcbiAgICB9KVxuXG4gICAgbW9kZWxDbGFzcy5iZWZvcmVVcGRhdGUoKG1vZGVsKSA9PiB7XG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0ICYge19fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbj86IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwifX0gKi8gKG1vZGVsKS5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb24gPSBcInVwZGF0ZVwiXG4gICAgfSlcblxuICAgIG1vZGVsQ2xhc3MuYWZ0ZXJTYXZlKChtb2RlbCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCAmIHtfX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb24/OiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIn19ICovIChtb2RlbClcbiAgICAgIGNvbnN0IGFjdGlvbiA9IG1vZGVsV2l0aFdlYnNvY2tldEFjdGlvbi5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb25cblxuICAgICAgaWYgKGFjdGlvbiAhPT0gXCJjcmVhdGVcIiAmJiBhY3Rpb24gIT09IFwidXBkYXRlXCIpIHJldHVyblxuXG4gICAgICB2b2lkIG1vZGVsLmNvbm5lY3Rpb24oKS5hZnRlckNvbW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgIGJyb2FkY2FzdEZyb250ZW5kTW9kZWxFdmVudChtb2RlbC5fZ2V0Q29uZmlndXJhdGlvbigpLCBtb2RlbE5hbWUsIHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgaWQ6IG1vZGVsLmlkKCksXG4gICAgICAgICAgcmVjb3JkOiBtb2RlbC5hdHRyaWJ1dGVzKClcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICBkZWxldGUgbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvblxuICAgIH0pXG5cbiAgICBtb2RlbENsYXNzLmFmdGVyRGVzdHJveSgobW9kZWwpID0+IHtcbiAgICAgIHZvaWQgbW9kZWwuY29ubmVjdGlvbigpLmFmdGVyQ29tbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgYnJvYWRjYXN0RnJvbnRlbmRNb2RlbEV2ZW50KG1vZGVsLl9nZXRDb25maWd1cmF0aW9uKCksIG1vZGVsTmFtZSwge1xuICAgICAgICAgIGFjdGlvbjogXCJkZXN0cm95XCIsXG4gICAgICAgICAgaWQ6IG1vZGVsLmlkKClcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEZhbnMgYSBsaWZlY3ljbGUgZXZlbnQgb3V0IHRvIGFsbCBWMiBcImZyb250ZW5kLW1vZGVsc1wiIHN1YnNjcmliZXJzXG4gKiB3aG9zZSBgcGFyYW1zLm1vZGVsYCBtYXRjaGVzLiBSZWNvcmQgYXR0cmlidXRlcyBnbyB0aHJvdWdoIHRoZVxuICogdHJhbnNwb3J0IHNlcmlhbGl6ZXIgc28gRGF0ZS91bmRlZmluZWQvZXRjLiBzdXJ2aXZlIHRoZSBKU09OIGhvcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICogQHBhcmFtIHt7YWN0aW9uOiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiLCBpZDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIHJlY29yZD86IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn19IGV2ZW50IC0gTGlmZWN5Y2xlIGV2ZW50LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGJyb2FkY2FzdEZyb250ZW5kTW9kZWxFdmVudChjb25maWd1cmF0aW9uLCBtb2RlbE5hbWUsIGV2ZW50KSB7XG4gIGNvbnN0IGJvZHkgPSB7XG4gICAgYWN0aW9uOiBldmVudC5hY3Rpb24sXG4gICAgaWQ6IGV2ZW50LmlkLFxuICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgLi4uKGV2ZW50LnJlY29yZCA/IHtyZWNvcmQ6IHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZShldmVudC5yZWNvcmQsIHRyYW5zcG9ydFNlcmlhbGl6YXRpb25PcHRpb25zRm9yQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKSl9IDoge30pXG4gIH1cblxuICBjb25maWd1cmF0aW9uLmJyb2FkY2FzdFRvQ2hhbm5lbChGUk9OVEVORF9NT0RFTFNfQ0hBTk5FTF9OQU1FLCB7bW9kZWw6IG1vZGVsTmFtZX0sIGJvZHkpXG59XG4iXX0=
|
|
334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXB1Ymxpc2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3dlYnNvY2tldC1wdWJsaXNoZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHlCQUF5QixNQUFNLG1DQUFtQyxDQUFBO0FBQ3pFLE9BQU8sRUFBQyxtREFBbUQsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQzNGLE9BQU8sRUFBQyxzQ0FBc0MsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQy9FLE9BQU8sRUFBQyxvQ0FBb0MsRUFBQyxNQUFNLDhCQUE4QixDQUFBO0FBQ2pGLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLCtCQUErQixDQUFBO0FBRS9GLGdJQUFnSTtBQUNoSSwwSEFBMEg7QUFDMUgsb1dBQW9XO0FBRXBXLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUNyRCxNQUFNLG9DQUFvQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFDMUQseUtBQXlLO0FBQ3pLLE1BQU0saUNBQWlDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUV2RCwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsaUJBQWlCLENBQUE7QUFFN0Q7Ozs7R0FJRztBQUNILFNBQVMsNkNBQTZDLENBQUMsYUFBYTtJQUNsRSxPQUFPO1FBQ0wsUUFBUSxFQUFFLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7S0FDM0UsQ0FBQTtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGlDQUFpQyxDQUFDLFNBQVM7SUFDekQsT0FBTyxtQkFBbUIsU0FBUyxFQUFFLENBQUE7QUFDdkMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLDhDQUE4QyxDQUFDLGdCQUFnQjtJQUN0RTs7b0dBRWdHO0lBQ2hHLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQTtJQUVwQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsT0FBTyxnQkFBZ0IsRUFBRSxDQUFDLENBQUE7SUFDbEcsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUVuRCxLQUFLLE1BQU0sYUFBYSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDN0MsSUFBSSxPQUFPLGFBQWEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxPQUFPLGFBQWEsRUFBRSxDQUFDLENBQUE7UUFDN0YsQ0FBQztRQUVELElBQUksc0NBQXNDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUMxRCx5RUFBeUU7WUFDekUsNEVBQTRFO1lBQzVFLHdFQUF3RTtZQUN4RSwwRUFBMEU7WUFDMUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVO2dCQUFFLFNBQVE7WUFFdkMsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUE7WUFFdkcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLGFBQWEsQ0FBQTtRQUN0QyxDQUFDO2FBQU0sSUFBSSxhQUFhLENBQUMsU0FBUyxZQUFZLHlCQUF5QixFQUFFLENBQUM7WUFDeEUsZ0ZBQWdGO1FBQ2xGLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsYUFBYSxDQUFDLElBQUksNkVBQTZFLENBQUMsQ0FBQTtRQUN4SixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnREFBZ0QsQ0FBQyxhQUFhO0lBQ2xGOztvR0FFZ0c7SUFDaEcsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUE7SUFFMUIsS0FBSyxNQUFNLGNBQWMsSUFBSSxhQUFhLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsbURBQW1ELENBQUMsY0FBYyxDQUFDLENBQUE7UUFFNUYsaUJBQWlCLEdBQUcsRUFBQyxHQUFHLGlCQUFpQixFQUFFLEdBQUcsZ0JBQWdCLEVBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBRUQsbUZBQW1GO0lBQ25GLHVGQUF1RjtJQUN2Rix3RkFBd0Y7SUFDeEYscURBQXFEO0lBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUE7SUFFNUQsaUJBQWlCLEdBQUc7UUFDbEIsR0FBRyxpQkFBaUI7UUFDcEIsR0FBRyw4Q0FBOEMsQ0FBQyxnQkFBZ0IsQ0FBQztLQUNwRSxDQUFBO0lBRUQsbUVBQW1FO0lBQ25FLHFFQUFxRTtJQUNyRSxxRUFBcUU7SUFDckUsbUVBQW1FO0lBQ25FLDBCQUEwQjtJQUMxQixJQUFJLENBQUMsb0NBQW9DLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDN0Qsb0NBQW9DLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3ZELE1BQU0sRUFBQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBRXZGLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw0QkFBNEIsRUFBRSw2QkFBNkIsQ0FBQyxDQUFBO0lBQ3JHLENBQUM7SUFFRCxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7UUFDM0UseUVBQXlFO1FBQ3pFLDBFQUEwRTtRQUMxRSx1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVO1lBQUUsU0FBUTtRQUV2QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDN0MsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDNUQsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQyxVQUFVLENBQUE7UUFDN0QsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQy9DLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7WUFDeEUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUM7WUFDaEcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQTtRQUN4RSxJQUFJLDhCQUE4QixHQUFHLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUV6RixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztZQUNwQyw4QkFBOEIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO1lBQzlDLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsOEJBQThCLENBQUMsQ0FBQTtRQUN0RixDQUFDO1FBRUQsSUFBSSxrQkFBa0IsR0FBRyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFdkUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDeEIsa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtZQUM5Qiw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLENBQUE7UUFDcEUsQ0FBQztRQUVELGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUU7WUFDaEMsVUFBVTtTQUNYLENBQUMsQ0FBQTtRQUVGLG1HQUFtRztRQUNuRyxzR0FBc0c7UUFDdEcsc0dBQXNHO1FBQ3RHLHVHQUF1RztRQUN2RywyRkFBMkY7UUFDM0YsSUFBSSwrQkFBK0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQUUsU0FBUTtRQUU3RCwrQkFBK0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFL0MsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2hDLDJDQUEyQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsOEJBQThCLEdBQUcsUUFBUSxDQUFBO1FBQy9GLENBQUMsQ0FBQyxDQUFBO1FBRUYsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxjQUFjLEdBQUcsMkNBQTJDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUUxRSxjQUFjLENBQUMsOEJBQThCLEdBQUcsUUFBUSxDQUFBO1lBQ3hELGNBQWMsQ0FBQyxtQ0FBbUMsR0FBRyxNQUFNLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNHLENBQUMsQ0FBQyxDQUFBO1FBRUYsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxjQUFjLEdBQUcsMkNBQTJDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUMxRSxNQUFNLGNBQWMsR0FBRyxNQUFNLEtBQUs7aUJBQy9CLGFBQWEsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFBO1lBRTFDLElBQUksQ0FBQyxjQUFjO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBRWhJLGNBQWMsQ0FBQyxtQ0FBbUMsR0FBRywrQkFBK0IsQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUNwRyxjQUFjLENBQUMsa0RBQWtELEdBQUcsdUNBQXVDLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDN0gsQ0FBQyxDQUFDLENBQUE7UUFFRixVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDN0IsTUFBTSx3QkFBd0IsR0FBRywyQ0FBMkMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BGLE1BQU0sTUFBTSxHQUFHLHdCQUF3QixDQUFDLDhCQUE4QixDQUFBO1lBRXRFLElBQUksTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssUUFBUTtnQkFBRSxPQUFNO1lBQ3RELE1BQU0sV0FBVyxHQUFHLHdCQUF3QixDQUFDLG1DQUFtQyxDQUFBO1lBRWhGLEtBQUssS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDN0MsNEJBQTRCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUMxRCxDQUFDLENBQUMsQ0FBQTtZQUNGLE9BQU8sd0JBQXdCLENBQUMsOEJBQThCLENBQUE7WUFDOUQsT0FBTyx3QkFBd0IsQ0FBQyxtQ0FBbUMsQ0FBQTtRQUNyRSxDQUFDLENBQUMsQ0FBQTtRQUVGLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQyxNQUFNLGNBQWMsR0FBRywyQ0FBMkMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQzFFLE1BQU0sMEJBQTBCLEdBQUcsY0FBYyxDQUFDLGtEQUFrRCxDQUFBO1lBQ3BHLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxtQ0FBbUMsQ0FBQTtZQUV0RSxLQUFLLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQzdDLDRCQUE0QixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixDQUFDLENBQUE7WUFDekYsQ0FBQyxDQUFDLENBQUE7WUFDRixPQUFPLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQTtZQUN4RSxPQUFPLGNBQWMsQ0FBQyxtQ0FBbUMsQ0FBQTtRQUMzRCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSx1Q0FBdUMsQ0FBQyxLQUFLO0lBQzFELE1BQU0sa0JBQWtCLEdBQUcsaUNBQWlDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZILHdGQUF3RjtJQUN4RixNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRTdCLElBQUksQ0FBQyxrQkFBa0I7UUFBRSxPQUFPLFdBQVcsQ0FBQTtJQUUzQyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQyxVQUFVLEVBQUMsQ0FBQyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDM0QsTUFBTSxVQUFVLEdBQUcsNkJBQTZCLENBQUMsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBRXJGLElBQUksVUFBVSxLQUFLLElBQUk7WUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLElBQUk7UUFBRSxPQUFPLFdBQVcsQ0FBQTtJQUVwRSxNQUFNLGNBQWMsR0FBRyxNQUFNLEtBQUs7U0FDL0IsYUFBYSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQTtJQUUxQyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBQyxVQUFVLEVBQUMsQ0FBQyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDM0QsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUFFLFNBQVE7UUFFeEMsTUFBTSxXQUFXLEdBQUcsNkJBQTZCLENBQUMsRUFBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFFdEYsSUFBSSxXQUFXLEtBQUssSUFBSTtZQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFFRCxPQUFPLFdBQVcsQ0FBQTtBQUNwQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsK0JBQStCLENBQUMsS0FBSztJQUM1QyxNQUFNLGtCQUFrQixHQUFHLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtJQUN2SCx3RkFBd0Y7SUFDeEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU1QixJQUFJLENBQUMsa0JBQWtCO1FBQUUsT0FBTyxVQUFVLENBQUE7SUFFMUMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUMsVUFBVSxFQUFDLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzNELE1BQU0sRUFBRSxHQUFHLDZCQUE2QixDQUFDLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFFN0QsSUFBSSxFQUFFLEtBQUssSUFBSTtZQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyx1Q0FBdUMsQ0FBQyxLQUFLO0lBQ3BELE1BQU0sb0JBQW9CLEdBQUcsNkNBQTZDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQTtJQUNyRyxzREFBc0Q7SUFDdEQsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUE7SUFFOUIsS0FBSyxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN4RSxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLFlBQVksVUFBVTtZQUMzRCxDQUFDLENBQUMsRUFBQyxtQ0FBbUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUM7WUFDM0UsQ0FBQyxDQUFDLG9DQUFvQyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO0lBQ3ZFLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5RUFBeUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7SUFDeEgsQ0FBQztJQUVELE9BQU8sbUJBQW1CLENBQUE7QUFDNUIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLDZCQUE2QixDQUFDLEVBQUMsS0FBSyxFQUFFLFFBQVEsR0FBRyxLQUFLLEVBQUUsVUFBVSxFQUFDO0lBQzFFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUNyQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDL0IsNEZBQTRGO0lBQzVGLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFBO0lBQzdCLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRWxGLEtBQUssTUFBTSxhQUFhLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsNkJBQTZCLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDckYsSUFBSSxLQUFLLENBQUE7UUFFVCxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ25ELEtBQUssR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFBO1lBRTFELEtBQUssR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDbkMsQ0FBQztRQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUV2RSxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUE7SUFDM0MsQ0FBQztJQUVELE9BQU8sd0JBQXdCLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO0FBQ25HLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSwwQkFBMEI7SUFDMUYsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUE7SUFDL0MsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO0lBRTNHLElBQUksQ0FBQyxrQkFBa0I7UUFBRSxPQUFNO0lBRS9CLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFDLFVBQVUsRUFBQyxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMzRCxNQUFNLFVBQVUsR0FBRyxXQUFXLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzlDLE1BQU0sU0FBUyxHQUFHLDZCQUE2QixDQUFDLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7UUFDcEUsTUFBTSxFQUFFLEdBQUcsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFBO1FBRXRFLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssU0FBUztZQUFFLFNBQVE7UUFFN0MsTUFBTSxlQUFlLEdBQUcsTUFBTSxLQUFLLFFBQVE7ZUFDdEMsU0FBUyxLQUFLLElBQUk7ZUFDbEIsVUFBVSxLQUFLLFNBQVM7ZUFDeEIsdUJBQXVCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoRywyQkFBMkIsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFO1lBQ3BELE1BQU07WUFDTixFQUFFO1lBQ0YsR0FBRyxDQUFDLDBCQUEwQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQywwQkFBMEIsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakYsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3pDLENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDJCQUEyQixDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsS0FBSztJQUNsRSxNQUFNLElBQUksR0FBRztRQUNYLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDWixLQUFLLEVBQUUsU0FBUztRQUNoQixHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxvQ0FBb0MsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLDZDQUE2QyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3BKLENBQUE7SUFFRCxhQUFhLENBQUMsa0JBQWtCLENBQUMsNEJBQTRCLEVBQUU7UUFDN0QsR0FBRyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLDBCQUEwQixFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6SCxLQUFLLEVBQUUsU0FBUztLQUNqQixFQUFFLElBQUksQ0FBQyxDQUFBO0FBQ1YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQXV0aG9yaXphdGlvbkJhc2VSZXNvdXJjZSBmcm9tIFwiLi4vYXV0aG9yaXphdGlvbi9iYXNlLXJlc291cmNlLmpzXCJcbmltcG9ydCB7ZnJvbnRlbmRNb2RlbFJlc291cmNlc1dpdGhCdWlsdEluc0ZvckJhY2tlbmRQcm9qZWN0fSBmcm9tIFwiLi9idWlsdC1pbi1yZXNvdXJjZXMuanNcIlxuaW1wb3J0IHtmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzc30gZnJvbSBcIi4vcmVzb3VyY2UtZGVmaW5pdGlvbi5qc1wiXG5pbXBvcnQge3NlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZX0gZnJvbSBcIi4vdHJhbnNwb3J0LXNlcmlhbGl6YXRpb24uanNcIlxuaW1wb3J0IHttb2RlbFByaW1hcnlLZXlDYWNoZUtleSwgcmVhZE1vZGVsUHJpbWFyeUtleVZhbHVlfSBmcm9tIFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIlxuXG4vKiogQHR5cGVkZWYge3twcmltYXJ5S2V5OiBpbXBvcnQoXCIuLi91dGlscy9tb2RlbC1wcmltYXJ5LWtleS5qc1wiKS5Nb2RlbFByaW1hcnlLZXlEZWZpbml0aW9ufX0gRnJvbnRlbmRNb2RlbFB1Ymxpc2hlclJlc291cmNlICovXG4vKiogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlPn0gRnJvbnRlbmRNb2RlbERlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0ICYge19fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbj86IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiLCBfX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXREZXN0cm95QXV0aG9yaXphdGlvblJlY29yZD86IEZyb250ZW5kTW9kZWxEZXN0cm95QXV0aG9yaXphdGlvblJlY29yZCwgX19mcm9udGVuZE1vZGVsV2Vic29ja2V0UHJldmlvdXNJZHM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi91dGlscy9tb2RlbC1wcmltYXJ5LWtleS5qc1wiKS5Nb2RlbFByaW1hcnlLZXlWYWx1ZT59fSBGcm9udGVuZE1vZGVsV2Vic29ja2V0UmVjb3JkICovXG5cbmNvbnN0IG1vZGVsQ2xhc3Nlc1dpdGhSZWdpc3RlcmVkSG9va3MgPSBuZXcgV2Vha1NldCgpXG5jb25zdCBjaGFubmVsQ2xhc3NSZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMgPSBuZXcgV2Vha1NldCgpXG4vKiogQHR5cGUge1dlYWtNYXA8aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBXZWFrTWFwPHR5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgTWFwPHN0cmluZywgRnJvbnRlbmRNb2RlbFB1Ymxpc2hlclJlc291cmNlPj4+fSAqL1xuY29uc3QgcHVibGlzaGVyUmVzb3VyY2VzQnlDb25maWd1cmF0aW9uID0gbmV3IFdlYWtNYXAoKVxuXG4vKiogU2hhcmVkIGNoYW5uZWwgbmFtZSBmb3IgYWxsIGZyb250ZW5kLW1vZGVsIGxpZmVjeWNsZSBzdWJzY3JpcHRpb25zLiAqL1xuZXhwb3J0IGNvbnN0IEZST05URU5EX01PREVMU19DSEFOTkVMX05BTUUgPSBcImZyb250ZW5kLW1vZGVsc1wiXG5cbi8qKlxuICogUnVucyB0cmFuc3BvcnQgc2VyaWFsaXphdGlvbiBvcHRpb25zIGZvciBhIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90cmFuc3BvcnQtc2VyaWFsaXphdGlvbi5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0U2VyaWFsaXphdGlvbk9wdGlvbnN9IC0gU2VyaWFsaXphdGlvbiBvcHRpb25zLlxuICovXG5mdW5jdGlvbiB0cmFuc3BvcnRTZXJpYWxpemF0aW9uT3B0aW9uc0ZvckNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbikge1xuICByZXR1cm4ge1xuICAgIHRpbWVab25lOiBjb25maWd1cmF0aW9uLmdldEVudmlyb25tZW50SGFuZGxlcigpLmdldFRpbWVab25lKGNvbmZpZ3VyYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBmcm9udGVuZE1vZGVsQnJvYWRjYXN0Q2hhbm5lbE5hbWUgaGVscGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIEJyb2FkY2FzdCBjaGFubmVsIG5hbWUgKGxlZ2FjeSwgcmV0YWluZWQgZm9yIG1pZ3JhdGlvbiBjb21wYXRpYmlsaXR5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxCcm9hZGNhc3RDaGFubmVsTmFtZShtb2RlbE5hbWUpIHtcbiAgcmV0dXJuIGBmcm9udGVuZC1tb2RlbHM6JHttb2RlbE5hbWV9YFxufVxuXG4vKipcbiAqIFJ1bnMgZnJvbnRlbmQgbW9kZWwgcmVzb3VyY2VzIGZyb20gYWJpbGl0eSByZXNvdXJjZXMgbGlzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5BYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVbXX0gYWJpbGl0eVJlc291cmNlcyAtIEFiaWxpdHkgcmVzb3VyY2UgY2xhc3Nlcy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZT59IC0gUmVzb3VyY2UgZGVmaW5pdGlvbnMga2V5ZWQgYnkgbW9kZWwgbmFtZS5cbiAqL1xuZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlc0Zyb21BYmlsaXR5UmVzb3VyY2VzTGlzdChhYmlsaXR5UmVzb3VyY2VzKSB7XG4gIC8qKlxuICAgKiBSZXNvdXJjZXMuXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNsYXNzVHlwZT59ICovXG4gIGNvbnN0IHJlc291cmNlcyA9IHt9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFiaWxpdHlSZXNvdXJjZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhYmlsaXR5IHJlc291cmNlcyB0byBiZSBhbiBhcnJheSBidXQgZ290OiAke3R5cGVvZiBhYmlsaXR5UmVzb3VyY2VzfWApXG4gIH1cblxuICBpZiAoYWJpbGl0eVJlc291cmNlcy5sZW5ndGggPT09IDApIHJldHVybiByZXNvdXJjZXNcblxuICBmb3IgKGNvbnN0IHJlc291cmNlQ2xhc3Mgb2YgYWJpbGl0eVJlc291cmNlcykge1xuICAgIGlmICh0eXBlb2YgcmVzb3VyY2VDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFiaWxpdHkgcmVzb3VyY2UgdG8gYmUgYSBjbGFzcyBidXQgZ290OiAke3R5cGVvZiByZXNvdXJjZUNsYXNzfWApXG4gICAgfVxuXG4gICAgaWYgKGZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb25Jc0NsYXNzKHJlc291cmNlQ2xhc3MpKSB7XG4gICAgICAvLyBBbiBhYnN0cmFjdCBiYXNlIHJlc291cmNlIChubyBzdGF0aWMgTW9kZWxDbGFzcyDigJQgZS5nLiBhbiBhcHAncyBzaGFyZWRcbiAgICAgIC8vIGBCYXNlUmVzb3VyY2VgIHRoYXQgb3RoZXIgcmVzb3VyY2VzIGV4dGVuZCkgYmFja3Mgbm8gbW9kZWwsIHNvIGl0IGlzbid0IGFcbiAgICAgIC8vIHB1Ymxpc2hhYmxlIGZyb250ZW5kIG1vZGVsLiBTa2lwIGl0IGluc3RlYWQgb2YgbGV0dGluZyBgbW9kZWxDbGFzcygpYFxuICAgICAgLy8gdGhyb3cgYHJlcXVpcmVzIGEgc3RhdGljIE1vZGVsQ2xhc3NgIGR1cmluZyBhYmlsaXR5LXJlc291cmNlIGRpc2NvdmVyeS5cbiAgICAgIGlmICghcmVzb3VyY2VDbGFzcy5Nb2RlbENsYXNzKSBjb250aW51ZVxuXG4gICAgICBjb25zdCBtb2RlbE5hbWUgPSByZXNvdXJjZUNsYXNzLnJlc291cmNlQ29uZmlnKCkubW9kZWxOYW1lIHx8IHJlc291cmNlQ2xhc3MubW9kZWxDbGFzcygpLmdldE1vZGVsTmFtZSgpXG5cbiAgICAgIHJlc291cmNlc1ttb2RlbE5hbWVdID0gcmVzb3VyY2VDbGFzc1xuICAgIH0gZWxzZSBpZiAocmVzb3VyY2VDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBBdXRob3JpemF0aW9uQmFzZVJlc291cmNlKSB7XG4gICAgICAvLyBBdXRob3JpemF0aW9uLW9ubHkgcmVzb3VyY2Ug4oCUIHZhbGlkIGJ1dCBub3QgcmVsZXZhbnQgZm9yIFdlYlNvY2tldCBwdWJsaXNoaW5nXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBhYmlsaXR5IHJlc291cmNlIGNsYXNzOiAke3Jlc291cmNlQ2xhc3MubmFtZX0uIEV4cGVjdGVkIEF1dGhvcml6YXRpb25CYXNlUmVzb3VyY2Ugb3IgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSBzdWJjbGFzcy5gKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXNvdXJjZXNcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBlbnN1cmVGcm9udGVuZE1vZGVsV2Vic29ja2V0UHVibGlzaGVyc1JlZ2lzdGVyZWQgaGVscGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVGcm9udGVuZE1vZGVsV2Vic29ja2V0UHVibGlzaGVyc1JlZ2lzdGVyZWQoY29uZmlndXJhdGlvbikge1xuICAvKipcbiAgICogQWxsIGZyb250ZW5kIG1vZGVscy5cbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NUeXBlPn0gKi9cbiAgbGV0IGFsbEZyb250ZW5kTW9kZWxzID0ge31cblxuICBmb3IgKGNvbnN0IGJhY2tlbmRQcm9qZWN0IG9mIGNvbmZpZ3VyYXRpb24uZ2V0QmFja2VuZFByb2plY3RzKCkpIHtcbiAgICBjb25zdCBwcm9qZWN0UmVzb3VyY2VzID0gZnJvbnRlbmRNb2RlbFJlc291cmNlc1dpdGhCdWlsdEluc0ZvckJhY2tlbmRQcm9qZWN0KGJhY2tlbmRQcm9qZWN0KVxuXG4gICAgYWxsRnJvbnRlbmRNb2RlbHMgPSB7Li4uYWxsRnJvbnRlbmRNb2RlbHMsIC4uLnByb2plY3RSZXNvdXJjZXN9XG4gIH1cblxuICAvLyBBbHdheXMgbWVyZ2UgdGhlIGFiaWxpdHkgcmVzb2x2ZXIncyByZXNvdXJjZSBsaXN0IHRvby4gQSBwcm9qZWN0IGNhbiBleHBvc2Ugc29tZVxuICAvLyByZXNvdXJjZXMgYXMgZGlzY292ZXJhYmxlIGBzcmMvcmVzb3VyY2VzLyouanNgIGZpbGVzIChjb25maWd1cmVkIG9yIGF1dG8tZGlzY292ZXJlZClcbiAgLy8gYW5kIG90aGVycyBvbmx5IHRocm91Z2ggYGdldEFiaWxpdHlSZXNvdXJjZXMoKWA7IGJvdGggc2V0cyBuZWVkIGxpZmVjeWNsZSBwdWJsaXNoZXJzLFxuICAvLyBzbyByZXNvdXJjZSBkaXNjb3ZlcnkgbXVzdCBub3Qgc3VwcHJlc3MgdGhpcyBsaXN0LlxuICBjb25zdCBhYmlsaXR5UmVzb3VyY2VzID0gY29uZmlndXJhdGlvbi5nZXRBYmlsaXR5UmVzb3VyY2VzKClcblxuICBhbGxGcm9udGVuZE1vZGVscyA9IHtcbiAgICAuLi5hbGxGcm9udGVuZE1vZGVscyxcbiAgICAuLi5mcm9udGVuZE1vZGVsUmVzb3VyY2VzRnJvbUFiaWxpdHlSZXNvdXJjZXNMaXN0KGFiaWxpdHlSZXNvdXJjZXMpXG4gIH1cblxuICAvLyBQaGFzZSAzOiByZWdpc3RlciB0aGUgVjIgY2hhbm5lbCBjbGFzcyBvbmNlIHBlciBjb25maWd1cmF0aW9uIHNvXG4gIC8vIGBzdWJzY3JpYmVDaGFubmVsKFwiZnJvbnRlbmQtbW9kZWxzXCIsIHtwYXJhbXM6IHttb2RlbH19KWAgZmluZHMgaXQuXG4gIC8vIER5bmFtaWMgaW1wb3J0IGtlZXBzIHNlcnZlci1vbmx5IFdlYnNvY2tldFJlcXVlc3QgKyBOb2RlIHV0aWxpdGllc1xuICAvLyBvdXQgb2YgYnJvd3NlciBidW5kbGVzIHRoYXQgdHJhbnNpdGl2ZWx5IHB1bGwgaW4gdGhpcyBtb2R1bGUgdmlhXG4gIC8vIGNvbmZpZ3VyYXRpb24g4oaSIGxvZ2dlci5cbiAgaWYgKCFjaGFubmVsQ2xhc3NSZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMuaGFzKGNvbmZpZ3VyYXRpb24pKSB7XG4gICAgY2hhbm5lbENsYXNzUmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zLmFkZChjb25maWd1cmF0aW9uKVxuICAgIGNvbnN0IHtkZWZhdWx0OiBGcm9udGVuZE1vZGVsV2Vic29ja2V0Q2hhbm5lbH0gPSBhd2FpdCBpbXBvcnQoXCIuL3dlYnNvY2tldC1jaGFubmVsLmpzXCIpXG5cbiAgICBjb25maWd1cmF0aW9uLnJlZ2lzdGVyV2Vic29ja2V0Q2hhbm5lbChGUk9OVEVORF9NT0RFTFNfQ0hBTk5FTF9OQU1FLCBGcm9udGVuZE1vZGVsV2Vic29ja2V0Q2hhbm5lbClcbiAgfVxuXG4gIGZvciAoY29uc3QgW21vZGVsTmFtZSwgcmVzb3VyY2VDbGFzc10gb2YgT2JqZWN0LmVudHJpZXMoYWxsRnJvbnRlbmRNb2RlbHMpKSB7XG4gICAgLy8gQW4gYWJzdHJhY3QgYmFzZSByZXNvdXJjZSAobm8gc3RhdGljIE1vZGVsQ2xhc3Mg4oCUIGUuZy4gYW4gYXBwJ3Mgc2hhcmVkXG4gICAgLy8gYEJhc2VSZXNvdXJjZWAgdGhhdCBvdGhlciByZXNvdXJjZXMgZXh0ZW5kKSBiYWNrcyBubyBtb2RlbCwgc28gdGhlcmUgaXNcbiAgICAvLyBub3RoaW5nIHRvIHB1Ymxpc2ggcmVhbHRpbWUgZXZlbnRzIGZvci4gU2tpcCBpdCBpbnN0ZWFkIG9mIHRocm93aW5nLlxuICAgIGlmICghcmVzb3VyY2VDbGFzcy5Nb2RlbENsYXNzKSBjb250aW51ZVxuXG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IHJlc291cmNlQ2xhc3MubW9kZWxDbGFzcygpXG4gICAgY29uc3QgcmVzb3VyY2VDb25maWd1cmF0aW9uID0gcmVzb3VyY2VDbGFzcy5yZXNvdXJjZUNvbmZpZygpXG4gICAgY29uc3QgY29uZmlndXJlZFByaW1hcnlLZXkgPSByZXNvdXJjZUNvbmZpZ3VyYXRpb24ucHJpbWFyeUtleVxuICAgIGNvbnN0IG1vZGVsUHJpbWFyeUtleSA9IG1vZGVsQ2xhc3MucHJpbWFyeUtleSgpXG4gICAgY29uc3QgcHJpbWFyeUtleSA9IGNvbmZpZ3VyZWRQcmltYXJ5S2V5IHx8IChBcnJheS5pc0FycmF5KG1vZGVsUHJpbWFyeUtleSlcbiAgICAgID8gbW9kZWxQcmltYXJ5S2V5Lm1hcCgoY29sdW1uTmFtZSkgPT4gbW9kZWxDbGFzcy5yZXNvbHZlQXR0cmlidXRlTmFtZShjb2x1bW5OYW1lKSB8fCBjb2x1bW5OYW1lKVxuICAgICAgOiBtb2RlbENsYXNzLnJlc29sdmVBdHRyaWJ1dGVOYW1lKG1vZGVsUHJpbWFyeUtleSkgfHwgbW9kZWxQcmltYXJ5S2V5KVxuICAgIGxldCBwdWJsaXNoZXJSZXNvdXJjZXNCeU1vZGVsQ2xhc3MgPSBwdWJsaXNoZXJSZXNvdXJjZXNCeUNvbmZpZ3VyYXRpb24uZ2V0KGNvbmZpZ3VyYXRpb24pXG5cbiAgICBpZiAoIXB1Ymxpc2hlclJlc291cmNlc0J5TW9kZWxDbGFzcykge1xuICAgICAgcHVibGlzaGVyUmVzb3VyY2VzQnlNb2RlbENsYXNzID0gbmV3IFdlYWtNYXAoKVxuICAgICAgcHVibGlzaGVyUmVzb3VyY2VzQnlDb25maWd1cmF0aW9uLnNldChjb25maWd1cmF0aW9uLCBwdWJsaXNoZXJSZXNvdXJjZXNCeU1vZGVsQ2xhc3MpXG4gICAgfVxuXG4gICAgbGV0IHB1Ymxpc2hlclJlc291cmNlcyA9IHB1Ymxpc2hlclJlc291cmNlc0J5TW9kZWxDbGFzcy5nZXQobW9kZWxDbGFzcylcblxuICAgIGlmICghcHVibGlzaGVyUmVzb3VyY2VzKSB7XG4gICAgICBwdWJsaXNoZXJSZXNvdXJjZXMgPSBuZXcgTWFwKClcbiAgICAgIHB1Ymxpc2hlclJlc291cmNlc0J5TW9kZWxDbGFzcy5zZXQobW9kZWxDbGFzcywgcHVibGlzaGVyUmVzb3VyY2VzKVxuICAgIH1cblxuICAgIHB1Ymxpc2hlclJlc291cmNlcy5zZXQobW9kZWxOYW1lLCB7XG4gICAgICBwcmltYXJ5S2V5XG4gICAgfSlcblxuICAgIC8vIFJlZ2lzdGVyIGxpZmVjeWNsZSBob29rcyBvbmNlIHBlciBtb2RlbCBjbGFzcywgbm90IHBlciBjb25maWd1cmF0aW9uLiBBIG1vZGVsIGNsYXNzIGJlbG9uZ3MgdG8gYVxuICAgIC8vIHNpbmdsZSBiYWNrZW5kIHByb2plY3QvY29uZmlnIGluIHByb2R1Y3Rpb24sIHNvIHBlci1jb25maWcgcmVnaXN0cmF0aW9uIG9ubHkgZGlmZmVycyBpbiB0ZXN0cyB3aGVyZVxuICAgIC8vIHRoZSBzYW1lIG1vZGVsIGNsYXNzIGlzIHJlYWNoYWJsZSBmcm9tIG11bHRpcGxlIGNvbmZpZ3Mg4oCUIHRoZXJlIGl0IGF0dGFjaGVzIGR1cGxpY2F0ZSBiZWZvcmVDcmVhdGUvXG4gICAgLy8gYWZ0ZXJTYXZlL2FmdGVyRGVzdHJveSBob29rcyB0aGF0IGRvdWJsZS1maXJlIGJyb2FkY2FzdHMgKGFuZCBsZWFrIGFjcm9zcyBzcGVjcykuIFRoZSBob29rcyByZWFkIHRoZVxuICAgIC8vIG1vZGVsJ3MgcnVudGltZSBjb25maWd1cmF0aW9uIHdoZW4gYnJvYWRjYXN0aW5nLCBzbyBhIHNpbmdsZSByZWdpc3RyYXRpb24gaXMgc3VmZmljaWVudC5cbiAgICBpZiAobW9kZWxDbGFzc2VzV2l0aFJlZ2lzdGVyZWRIb29rcy5oYXMobW9kZWxDbGFzcykpIGNvbnRpbnVlXG5cbiAgICBtb2RlbENsYXNzZXNXaXRoUmVnaXN0ZXJlZEhvb2tzLmFkZChtb2RlbENsYXNzKVxuXG4gICAgbW9kZWxDbGFzcy5iZWZvcmVDcmVhdGUoKG1vZGVsKSA9PiB7XG4gICAgICAvKiogQHR5cGUge0Zyb250ZW5kTW9kZWxXZWJzb2NrZXRSZWNvcmR9ICovIChtb2RlbCkuX19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uID0gXCJjcmVhdGVcIlxuICAgIH0pXG5cbiAgICBtb2RlbENsYXNzLmJlZm9yZVVwZGF0ZShhc3luYyAobW9kZWwpID0+IHtcbiAgICAgIGNvbnN0IHdlYnNvY2tldE1vZGVsID0gLyoqIEB0eXBlIHtGcm9udGVuZE1vZGVsV2Vic29ja2V0UmVjb3JkfSAqLyAobW9kZWwpXG5cbiAgICAgIHdlYnNvY2tldE1vZGVsLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbiA9IFwidXBkYXRlXCJcbiAgICAgIHdlYnNvY2tldE1vZGVsLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldFByZXZpb3VzSWRzID0gYXdhaXQgZnJvbnRlbmRNb2RlbFByZXZpb3VzUmVzb3VyY2VJZGVudGl0aWVzKG1vZGVsKVxuICAgIH0pXG5cbiAgICBtb2RlbENsYXNzLmJlZm9yZURlc3Ryb3koYXN5bmMgKG1vZGVsKSA9PiB7XG4gICAgICBjb25zdCB3ZWJzb2NrZXRNb2RlbCA9IC8qKiBAdHlwZSB7RnJvbnRlbmRNb2RlbFdlYnNvY2tldFJlY29yZH0gKi8gKG1vZGVsKVxuICAgICAgY29uc3QgcGVyc2lzdGVkTW9kZWwgPSBhd2FpdCBtb2RlbFxuICAgICAgICAucXVlcnlGb3JNb2RlbChtb2RlbC5nZXRNb2RlbENsYXNzKCkpXG4gICAgICAgIC5maW5kKG1vZGVsLl9wZXJzaXN0ZWRQcmltYXJ5S2V5VmFsdWUoKSlcblxuICAgICAgaWYgKCFwZXJzaXN0ZWRNb2RlbCkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2FwdHVyZSB3ZWJzb2NrZXQgZGVzdHJveSBhdXRob3JpemF0aW9uIGZvciBtaXNzaW5nICR7bW9kZWwuZ2V0TW9kZWxDbGFzcygpLm5hbWV9YClcblxuICAgICAgd2Vic29ja2V0TW9kZWwuX19mcm9udGVuZE1vZGVsV2Vic29ja2V0UHJldmlvdXNJZHMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VJZGVudGl0aWVzKHBlcnNpc3RlZE1vZGVsKVxuICAgICAgd2Vic29ja2V0TW9kZWwuX19mcm9udGVuZE1vZGVsV2Vic29ja2V0RGVzdHJveUF1dGhvcml6YXRpb25SZWNvcmQgPSBmcm9udGVuZE1vZGVsRGVzdHJveUF1dGhvcml6YXRpb25SZWNvcmQocGVyc2lzdGVkTW9kZWwpXG4gICAgfSlcblxuICAgIG1vZGVsQ2xhc3MuYWZ0ZXJTYXZlKChtb2RlbCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uID0gLyoqIEB0eXBlIHtGcm9udGVuZE1vZGVsV2Vic29ja2V0UmVjb3JkfSAqLyAobW9kZWwpXG4gICAgICBjb25zdCBhY3Rpb24gPSBtb2RlbFdpdGhXZWJzb2NrZXRBY3Rpb24uX19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uXG5cbiAgICAgIGlmIChhY3Rpb24gIT09IFwiY3JlYXRlXCIgJiYgYWN0aW9uICE9PSBcInVwZGF0ZVwiKSByZXR1cm5cbiAgICAgIGNvbnN0IHByZXZpb3VzSWRzID0gbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldFByZXZpb3VzSWRzXG5cbiAgICAgIHZvaWQgbW9kZWwuY29ubmVjdGlvbigpLmFmdGVyQ29tbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgYnJvYWRjYXN0RnJvbnRlbmRNb2RlbEV2ZW50cyhtb2RlbCwgYWN0aW9uLCBwcmV2aW91c0lkcylcbiAgICAgIH0pXG4gICAgICBkZWxldGUgbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvblxuICAgICAgZGVsZXRlIG1vZGVsV2l0aFdlYnNvY2tldEFjdGlvbi5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRQcmV2aW91c0lkc1xuICAgIH0pXG5cbiAgICBtb2RlbENsYXNzLmFmdGVyRGVzdHJveSgobW9kZWwpID0+IHtcbiAgICAgIGNvbnN0IHdlYnNvY2tldE1vZGVsID0gLyoqIEB0eXBlIHtGcm9udGVuZE1vZGVsV2Vic29ja2V0UmVjb3JkfSAqLyAobW9kZWwpXG4gICAgICBjb25zdCBkZXN0cm95QXV0aG9yaXphdGlvblJlY29yZCA9IHdlYnNvY2tldE1vZGVsLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldERlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkXG4gICAgICBjb25zdCBwcmV2aW91c0lkcyA9IHdlYnNvY2tldE1vZGVsLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldFByZXZpb3VzSWRzXG5cbiAgICAgIHZvaWQgbW9kZWwuY29ubmVjdGlvbigpLmFmdGVyQ29tbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgYnJvYWRjYXN0RnJvbnRlbmRNb2RlbEV2ZW50cyhtb2RlbCwgXCJkZXN0cm95XCIsIHByZXZpb3VzSWRzLCBkZXN0cm95QXV0aG9yaXphdGlvblJlY29yZClcbiAgICAgIH0pXG4gICAgICBkZWxldGUgd2Vic29ja2V0TW9kZWwuX19mcm9udGVuZE1vZGVsV2Vic29ja2V0RGVzdHJveUF1dGhvcml6YXRpb25SZWNvcmRcbiAgICAgIGRlbGV0ZSB3ZWJzb2NrZXRNb2RlbC5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRQcmV2aW91c0lkc1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGV2ZXJ5IHJlc291cmNlIGlkZW50aXR5IHJlcHJlc2VudGVkIGJ5IHRoZSByZWNvcmQgYmVmb3JlIGl0cyBwZW5kaW5nIGNoYW5nZXMgb3IgZGVzdHJ1Y3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbCAtIEJhY2tpbmcgbW9kZWwgYmVmb3JlIHVwZGF0ZSBvciBkZXN0cm95LlxuICogQHJldHVybnMge1Byb21pc2U8TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIikuTW9kZWxQcmltYXJ5S2V5VmFsdWU+Pn0gLSBQcmV2aW91cyBpZGVudGl0aWVzIGJ5IHJlc291cmNlIG5hbWUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxQcmV2aW91c1Jlc291cmNlSWRlbnRpdGllcyhtb2RlbCkge1xuICBjb25zdCBwdWJsaXNoZXJSZXNvdXJjZXMgPSBwdWJsaXNoZXJSZXNvdXJjZXNCeUNvbmZpZ3VyYXRpb24uZ2V0KG1vZGVsLl9nZXRDb25maWd1cmF0aW9uKCkpPy5nZXQobW9kZWwuZ2V0TW9kZWxDbGFzcygpKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3V0aWxzL21vZGVsLXByaW1hcnkta2V5LmpzXCIpLk1vZGVsUHJpbWFyeUtleVZhbHVlPn0gKi9cbiAgY29uc3QgcHJldmlvdXNJZHMgPSBuZXcgTWFwKClcblxuICBpZiAoIXB1Ymxpc2hlclJlc291cmNlcykgcmV0dXJuIHByZXZpb3VzSWRzXG5cbiAgZm9yIChjb25zdCBbbW9kZWxOYW1lLCB7cHJpbWFyeUtleX1dIG9mIHB1Ymxpc2hlclJlc291cmNlcykge1xuICAgIGNvbnN0IHByZXZpb3VzSWQgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VJZGVudGl0eSh7bW9kZWwsIHByZXZpb3VzOiB0cnVlLCBwcmltYXJ5S2V5fSlcblxuICAgIGlmIChwcmV2aW91c0lkICE9PSBudWxsKSBwcmV2aW91c0lkcy5zZXQobW9kZWxOYW1lLCBwcmV2aW91c0lkKVxuICB9XG5cbiAgaWYgKHByZXZpb3VzSWRzLnNpemUgPT09IHB1Ymxpc2hlclJlc291cmNlcy5zaXplKSByZXR1cm4gcHJldmlvdXNJZHNcblxuICBjb25zdCBwZXJzaXN0ZWRNb2RlbCA9IGF3YWl0IG1vZGVsXG4gICAgLnF1ZXJ5Rm9yTW9kZWwobW9kZWwuZ2V0TW9kZWxDbGFzcygpKVxuICAgIC5maW5kKG1vZGVsLl9wZXJzaXN0ZWRQcmltYXJ5S2V5VmFsdWUoKSlcblxuICBmb3IgKGNvbnN0IFttb2RlbE5hbWUsIHtwcmltYXJ5S2V5fV0gb2YgcHVibGlzaGVyUmVzb3VyY2VzKSB7XG4gICAgaWYgKHByZXZpb3VzSWRzLmhhcyhtb2RlbE5hbWUpKSBjb250aW51ZVxuXG4gICAgY29uc3QgcGVyc2lzdGVkSWQgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VJZGVudGl0eSh7bW9kZWw6IHBlcnNpc3RlZE1vZGVsLCBwcmltYXJ5S2V5fSlcblxuICAgIGlmIChwZXJzaXN0ZWRJZCAhPT0gbnVsbCkgcHJldmlvdXNJZHMuc2V0KG1vZGVsTmFtZSwgcGVyc2lzdGVkSWQpXG4gIH1cblxuICByZXR1cm4gcHJldmlvdXNJZHNcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGV2ZXJ5IGNvbmZpZ3VyZWQgcmVzb3VyY2UgaWRlbnRpdHkgcmVwcmVzZW50ZWQgYnkgYSBwZXJzaXN0ZWQgYmFja2luZyByZWNvcmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbCAtIEZ1bGx5IGxvYWRlZCBwZXJzaXN0ZWQgYmFja2luZyByZWNvcmQuXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIikuTW9kZWxQcmltYXJ5S2V5VmFsdWU+fSAtIElkZW50aXRpZXMgYnkgcmVzb3VyY2UgbmFtZS5cbiAqL1xuZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlSWRlbnRpdGllcyhtb2RlbCkge1xuICBjb25zdCBwdWJsaXNoZXJSZXNvdXJjZXMgPSBwdWJsaXNoZXJSZXNvdXJjZXNCeUNvbmZpZ3VyYXRpb24uZ2V0KG1vZGVsLl9nZXRDb25maWd1cmF0aW9uKCkpPy5nZXQobW9kZWwuZ2V0TW9kZWxDbGFzcygpKVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydChcIi4uL3V0aWxzL21vZGVsLXByaW1hcnkta2V5LmpzXCIpLk1vZGVsUHJpbWFyeUtleVZhbHVlPn0gKi9cbiAgY29uc3QgaWRlbnRpdGllcyA9IG5ldyBNYXAoKVxuXG4gIGlmICghcHVibGlzaGVyUmVzb3VyY2VzKSByZXR1cm4gaWRlbnRpdGllc1xuXG4gIGZvciAoY29uc3QgW21vZGVsTmFtZSwge3ByaW1hcnlLZXl9XSBvZiBwdWJsaXNoZXJSZXNvdXJjZXMpIHtcbiAgICBjb25zdCBpZCA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZUlkZW50aXR5KHttb2RlbCwgcHJpbWFyeUtleX0pXG5cbiAgICBpZiAoaWQgIT09IG51bGwpIGlkZW50aXRpZXMuc2V0KG1vZGVsTmFtZSwgaWQpXG4gIH1cblxuICByZXR1cm4gaWRlbnRpdGllc1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIHBlcnNpc3RlZCByZWNvcmQgZm9yIHNlcnZlci1zaWRlIGRlc3Ryb3kgYXV0aG9yaXphdGlvbi4gQmluYXJ5IHZhbHVlc1xuICogdXNlIGEgZGVkaWNhdGVkIGJ5dGUtYXJyYXkgbWFya2VyIGJlY2F1c2UgdGhlIHNoYXJlZCB0cmFuc3BvcnQgc2VyaWFsaXplciBvdGhlcndpc2VcbiAqIGxlYXZlcyBCdWZmZXJzIHRvIHRoZSBKU09OIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgdGhlIHdvcmtlciBvciBCZWFjb24gdHJhbnNwb3J0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWwgLSBGdWxseSBsb2FkZWQgcGVyc2lzdGVkIGJhY2tpbmcgcmVjb3JkLlxuICogQHJldHVybnMge0Zyb250ZW5kTW9kZWxEZXN0cm95QXV0aG9yaXphdGlvblJlY29yZH0gLSBDb2x1bW4ta2V5ZWQgdHJhbnNwb3J0IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZnJvbnRlbmRNb2RlbERlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkKG1vZGVsKSB7XG4gIGNvbnN0IHNlcmlhbGl6YXRpb25PcHRpb25zID0gdHJhbnNwb3J0U2VyaWFsaXphdGlvbk9wdGlvbnNGb3JDb25maWd1cmF0aW9uKG1vZGVsLl9nZXRDb25maWd1cmF0aW9uKCkpXG4gIC8qKiBAdHlwZSB7RnJvbnRlbmRNb2RlbERlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkfSAqL1xuICBjb25zdCBhdXRob3JpemF0aW9uUmVjb3JkID0ge31cblxuICBmb3IgKGNvbnN0IFtjb2x1bW5OYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9kZWwucmF3QXR0cmlidXRlcygpKSkge1xuICAgIGF1dGhvcml6YXRpb25SZWNvcmRbY29sdW1uTmFtZV0gPSB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbiAgICAgID8ge19fdmVsb2Npb3VzRGVzdHJveUF1dGhvcml6YXRpb25UeXBlOiBcImJpbmFyeVwiLCB2YWx1ZTogQXJyYXkuZnJvbSh2YWx1ZSl9XG4gICAgICA6IHNlcmlhbGl6ZUZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZSh2YWx1ZSwgc2VyaWFsaXphdGlvbk9wdGlvbnMpXG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMoYXV0aG9yaXphdGlvblJlY29yZCkubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2FwdHVyZSB3ZWJzb2NrZXQgZGVzdHJveSBhdXRob3JpemF0aW9uIHdpdGhvdXQgYXR0cmlidXRlcyBmb3IgJHttb2RlbC5nZXRNb2RlbENsYXNzKCkubmFtZX1gKVxuICB9XG5cbiAgcmV0dXJuIGF1dGhvcml6YXRpb25SZWNvcmRcbn1cblxuLyoqXG4gKiBSZWFkcyBhIHJlc291cmNlIGlkZW50aXR5IG9ubHkgd2hlbiBldmVyeSBpZGVudGl0eSBhdHRyaWJ1dGUgd2FzIGxvYWRlZCBvbiB0aGUgYmFja2luZyByZWNvcmQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIElkZW50aXR5IGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWwgLSBCYWNraW5nIG1vZGVsLlxuICogQHBhcmFtIHtib29sZWFufSBbYXJncy5wcmV2aW91c10gLSBSZWFkIHZhbHVlcyBmcm9tIGJlZm9yZSBwZW5kaW5nIGNoYW5nZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3V0aWxzL21vZGVsLXByaW1hcnkta2V5LmpzXCIpLk1vZGVsUHJpbWFyeUtleURlZmluaXRpb259IGFyZ3MucHJpbWFyeUtleSAtIFJlc291cmNlIGlkZW50aXR5IGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIikuTW9kZWxQcmltYXJ5S2V5VmFsdWUgfCBudWxsfSAtIENvbXBsZXRlIGlkZW50aXR5IG9yIG51bGwgd2hlbiB1bmF2YWlsYWJsZS5cbiAqL1xuZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlSWRlbnRpdHkoe21vZGVsLCBwcmV2aW91cyA9IGZhbHNlLCBwcmltYXJ5S2V5fSkge1xuICBjb25zdCBhdHRyaWJ1dGVzID0gbW9kZWwuYXR0cmlidXRlcygpXG4gIGNvbnN0IGNoYW5nZXMgPSBtb2RlbC5jaGFuZ2VzKClcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi91dGlscy9tb2RlbC1wcmltYXJ5LWtleS5qc1wiKS5Nb2RlbFByaW1hcnlLZXlTY2FsYXI+fSAqL1xuICBjb25zdCBpZGVudGl0eUF0dHJpYnV0ZXMgPSB7fVxuICBjb25zdCBwcmltYXJ5S2V5QXR0cmlidXRlcyA9IEFycmF5LmlzQXJyYXkocHJpbWFyeUtleSkgPyBwcmltYXJ5S2V5IDogW3ByaW1hcnlLZXldXG5cbiAgZm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIG9mIHByaW1hcnlLZXlBdHRyaWJ1dGVzKSB7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IG1vZGVsLmdldE1vZGVsQ2xhc3MoKS5nZXRDb2x1bW5OYW1lRm9yQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKVxuICAgIGxldCB2YWx1ZVxuXG4gICAgaWYgKHByZXZpb3VzICYmIE9iamVjdC5oYXNPd24oY2hhbmdlcywgY29sdW1uTmFtZSkpIHtcbiAgICAgIHZhbHVlID0gY2hhbmdlc1tjb2x1bW5OYW1lXVswXVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIU9iamVjdC5oYXNPd24oYXR0cmlidXRlcywgYXR0cmlidXRlTmFtZSkpIHJldHVybiBudWxsXG5cbiAgICAgIHZhbHVlID0gYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSByZXR1cm4gbnVsbFxuXG4gICAgaWRlbnRpdHlBdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID0gdmFsdWVcbiAgfVxuXG4gIHJldHVybiByZWFkTW9kZWxQcmltYXJ5S2V5VmFsdWUocHJpbWFyeUtleSwgKGF0dHJpYnV0ZU5hbWUpID0+IGlkZW50aXR5QXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSlcbn1cblxuLyoqXG4gKiBGYW5zIG9uZSBiYWNraW5nLXJlY29yZCBsaWZlY3ljbGUgZXZlbnQgb3V0IHRocm91Z2ggZXZlcnkgY29uZmlndXJlZCBmcm9udGVuZC1yZXNvdXJjZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsIC0gQmFja2luZyBtb2RlbCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7XCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIn0gYWN0aW9uIC0gTGlmZWN5Y2xlIGFjdGlvbi5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgaW1wb3J0KFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIikuTW9kZWxQcmltYXJ5S2V5VmFsdWU+fSBbcHJldmlvdXNJZHNdIC0gUGVyc2lzdGVkIGlkZW50aXRpZXMgY2FwdHVyZWQgYmVmb3JlIHVwZGF0ZSBvciBkZXN0cm95LlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsRGVzdHJveUF1dGhvcml6YXRpb25SZWNvcmR9IFtkZXN0cm95QXV0aG9yaXphdGlvblJlY29yZF0gLSBTZXJ2ZXItb25seSBwcmUtZGVsZXRlIHJvdyB1c2VkIHRvIGF1dGhvcml6ZSBhIGRlc3Ryb3llZCByZWNvcmQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYnJvYWRjYXN0RnJvbnRlbmRNb2RlbEV2ZW50cyhtb2RlbCwgYWN0aW9uLCBwcmV2aW91c0lkcywgZGVzdHJveUF1dGhvcml6YXRpb25SZWNvcmQpIHtcbiAgY29uc3QgY29uZmlndXJhdGlvbiA9IG1vZGVsLl9nZXRDb25maWd1cmF0aW9uKClcbiAgY29uc3QgcHVibGlzaGVyUmVzb3VyY2VzID0gcHVibGlzaGVyUmVzb3VyY2VzQnlDb25maWd1cmF0aW9uLmdldChjb25maWd1cmF0aW9uKT8uZ2V0KG1vZGVsLmdldE1vZGVsQ2xhc3MoKSlcblxuICBpZiAoIXB1Ymxpc2hlclJlc291cmNlcykgcmV0dXJuXG5cbiAgZm9yIChjb25zdCBbbW9kZWxOYW1lLCB7cHJpbWFyeUtleX1dIG9mIHB1Ymxpc2hlclJlc291cmNlcykge1xuICAgIGNvbnN0IHByZXZpb3VzSWQgPSBwcmV2aW91c0lkcz8uZ2V0KG1vZGVsTmFtZSlcbiAgICBjb25zdCBjdXJyZW50SWQgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VJZGVudGl0eSh7bW9kZWwsIHByaW1hcnlLZXl9KVxuICAgIGNvbnN0IGlkID0gYWN0aW9uID09PSBcImRlc3Ryb3lcIiA/IHByZXZpb3VzSWQgOiBjdXJyZW50SWQgPz8gcHJldmlvdXNJZFxuXG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBpZGVudGl0eUNoYW5nZWQgPSBhY3Rpb24gPT09IFwidXBkYXRlXCJcbiAgICAgICYmIGN1cnJlbnRJZCAhPT0gbnVsbFxuICAgICAgJiYgcHJldmlvdXNJZCAhPT0gdW5kZWZpbmVkXG4gICAgICAmJiBtb2RlbFByaW1hcnlLZXlDYWNoZUtleShwcmltYXJ5S2V5LCBwcmV2aW91c0lkKSAhPT0gbW9kZWxQcmltYXJ5S2V5Q2FjaGVLZXkocHJpbWFyeUtleSwgaWQpXG5cbiAgICBicm9hZGNhc3RGcm9udGVuZE1vZGVsRXZlbnQoY29uZmlndXJhdGlvbiwgbW9kZWxOYW1lLCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBpZCxcbiAgICAgIC4uLihkZXN0cm95QXV0aG9yaXphdGlvblJlY29yZCAhPT0gdW5kZWZpbmVkID8ge2Rlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkfSA6IHt9KSxcbiAgICAgIC4uLihpZGVudGl0eUNoYW5nZWQgPyB7cHJldmlvdXNJZH0gOiB7fSlcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogRmFucyBhIGxpZmVjeWNsZSBldmVudCBvdXQgdG8gYWxsIFYyIFwiZnJvbnRlbmQtbW9kZWxzXCIgc3Vic2NyaWJlcnNcbiAqIHdob3NlIGBwYXJhbXMubW9kZWxgIG1hdGNoZXMuIFJlY29yZCBhdHRyaWJ1dGVzIGdvIHRocm91Z2ggdGhlXG4gKiB0cmFuc3BvcnQgc2VyaWFsaXplciBzbyBEYXRlL3VuZGVmaW5lZC9ldGMuIHN1cnZpdmUgdGhlIEpTT04gaG9wLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcGFyYW0ge3thY3Rpb246IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIsIGRlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkPzogRnJvbnRlbmRNb2RlbERlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkLCBpZDogaW1wb3J0KFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIikuTW9kZWxQcmltYXJ5S2V5VmFsdWUsIHByZXZpb3VzSWQ/OiBpbXBvcnQoXCIuLi91dGlscy9tb2RlbC1wcmltYXJ5LWtleS5qc1wiKS5Nb2RlbFByaW1hcnlLZXlWYWx1ZSwgcmVjb3JkPzogUmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWU+fX0gZXZlbnQgLSBMaWZlY3ljbGUgZXZlbnQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYnJvYWRjYXN0RnJvbnRlbmRNb2RlbEV2ZW50KGNvbmZpZ3VyYXRpb24sIG1vZGVsTmFtZSwgZXZlbnQpIHtcbiAgY29uc3QgYm9keSA9IHtcbiAgICBhY3Rpb246IGV2ZW50LmFjdGlvbixcbiAgICBpZDogZXZlbnQuaWQsXG4gICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAuLi4oZXZlbnQucHJldmlvdXNJZCAhPT0gdW5kZWZpbmVkID8ge3ByZXZpb3VzSWQ6IGV2ZW50LnByZXZpb3VzSWR9IDoge30pLFxuICAgIC4uLihldmVudC5yZWNvcmQgPyB7cmVjb3JkOiBzZXJpYWxpemVGcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUoZXZlbnQucmVjb3JkLCB0cmFuc3BvcnRTZXJpYWxpemF0aW9uT3B0aW9uc0ZvckNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbikpfSA6IHt9KVxuICB9XG5cbiAgY29uZmlndXJhdGlvbi5icm9hZGNhc3RUb0NoYW5uZWwoRlJPTlRFTkRfTU9ERUxTX0NIQU5ORUxfTkFNRSwge1xuICAgIC4uLihldmVudC5kZXN0cm95QXV0aG9yaXphdGlvblJlY29yZCAhPT0gdW5kZWZpbmVkID8ge2Rlc3Ryb3lBdXRob3JpemF0aW9uUmVjb3JkOiBldmVudC5kZXN0cm95QXV0aG9yaXphdGlvblJlY29yZH0gOiB7fSksXG4gICAgbW9kZWw6IG1vZGVsTmFtZVxuICB9LCBib2R5KVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-session.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/websocket-session.js"],"names":[],"mappings":"AAMA,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAIpC,OAAO,gBAAgB,MAAM,yBAAyB,CAAA;AAItD,OAAO,gBAAgB,MAAM,wBAAwB,CAAA;AAIlD,YAAwa,uBAAuB,GAArb;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;CAAC,GAAG;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;CAAC,GAAG;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAyB;AAI/b,YAAkB,uBAAuB,GACzC;;;;IAAmB,UAAU,EAAlB,MAAM,CACjB;;;;IAAmB,UAAU,EAAlB,MAAM,CACjB;;;;IAAoB,QAAQ,EAAjB,OAAO,CACpB;CAAA,CAAA;AAGE,YAAkB,kBAAkB,GACpC;;;;IAAoC,SAAS,EAAlC,uBAAuB,CAClC;;;;IAAoC,OAAO,EAAhC,uBAAuB,CACpC;CAAA,CAAA;AAwED,MAAM,CAAC,OAAO,OAAO,yCAAyC;IAuB1D,uBAAuB;IAClB,aAAa,EADP,MAAM,EAAE;IAEd,iBAAiB;IACjB,kBAAkB;IAClB,cAAc;IACd,uBAAuB;IACvB,MAAM;IACN,aAAa;IACb,cAAc;IACd,cAAc;IACd,qBAAqB;IACrB,qBAAqB;IACrB,MAAM;IAGN,uBAAuB;IACvB,0BAA0B;IAC1B,oBAAoB;IACpB,uBAAuB;IACvB,4BAA4B;IAC5B,cAAc;IACd,yBAAyB;IAE9B;;+DAE2D;IACtD,SAAS,EADJ,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAGvD;;;;;OAKG;IACE,IAAI,EAFC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAIvD;;2EAEuE;IAClE,YAAY,EADP,GAAG,CAAC,MAAM,EAAE,OAAO,4BAA4B,EAAE,OAAO,CAAC;IAGnE;;6GAEyG;IACpG,qBAAqB,EADhB,GAAG,CAAC,MAAM,EAAE;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,yBAAyB,EAAE,OAAO,CAAA;KAAC,CAAC;IAGrG;;;;;;OAMG;IACE,SAAS,EAFJ,MAAM;IAIhB;;;OAGG;IACE,OAAO,EAFF,OAAO;IAIjB;;;OAGG;IACE,cAAc,EAFT,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAI9C;;qDAEiD;IAC5C,MAAM,EADD,OAAO,YAAY,EAAE,OAAO,GAAG,IAAI;IAG7C;;;;;;;OAOG;IACE,aAAa,EAFR,OAAO,CAAC,IAAI,CAAC;IAIvB;;;;;;OAMG;IACE,sBAAsB,EAFjB,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS;IAI5D,4BAA4B;IACvB,iBAAiB,EADX,MAAM,GAAG,IAAI;IAGxB;;;;;OAKG;IACE,mBAAmB,EAFd,MAAM,EAAE,GAAG,IAAI;IAIzB;;;;;OAKG;IACE,iBAAiB,EAFZ,MAAM,GAAG,IAAI;IAIvB;;;;;OAKG;IACE,gBAAgB,EAFX,MAAM;IAMhB;;;;;;OAMG;IACE,eAAe,EAFV,OAAO;IAIjB;;;;;;OAMG;IACE,eAAe,EAFV,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI;IA5JjD,MAAM,6DAAqB;IAC3B,aAAa,WAAY;IACzB,QAAQ,WAAY;IACpB,oBAAoB,gBAAY;IAChC,oBAAoB,gBAAY;IAChC,cAAc,gBAAY;IAC1B,mBAAmB,gBAAY;IAC/B;;sCAEkC;IAClC,YAAY,EADF,kBAAkB,EAAE,CACb;IAEjB;;;;;;;;OAQG;IACH,YAAY,EAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB,EAAC,EANvF;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO,CAChD;QAA2C,MAAM,EAAzC,OAAO,YAAY,EAAE,OAAO,CACpC;QAAyF,cAAc,AAAvG,CACA,EADQ,OAAO,cAAc,EAAE,OAAO,GAAG,OAAO,wBAAwB,EAAE,OAAO,CACjF;QAA8E,cAAc,AAA5F,CACA,EADQ,OAAO,8BAA8B,EAAE,uBAAuB,CACtE;QAA8F,qBAAqB,AAAnH,CACF,EADU,OAAO,CAAC,OAAO,8BAA8B,EAAE,uBAAuB,GAAG,IAAI,CAAC,CACxF;KACyF,EA0IzF;IAED;;;;OAIG;IACH,sBAAsB,IAFT,IAAI,CAYhB;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,YAAY,EAHnB,MAGmB,GAFjB,IAAI,CAIhB;IAED;;;OAGG;IACH,WAAW,IAFE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAIzD;IAED;;;OAGG;IACH,QAAQ,IAFK,OAAO,CAInB;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAHZ,MAGY,GAFV,IAAI,CAIhB;IAED,OAAO,SAYN;IAED,8DAA8D;IAC9D,eAAe,SAMd;IAED,8DAA8D;IAC9D,iBAAiB,SAOhB;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAHZ,MAGY,GAFV,OAAO,CAInB;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAHA,MAGA,GAFE,IAAI,CAahB;IAED;;;;;;OAMG;IACG,SAAS,CAAC,OAAO,EALZ,MAKY,EAAE,OAAO,EAJrB,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAIP,EAAE,OAAO,AAHtC,CACA,EADQ;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAGzC,GAFjC,OAAO,CAAC,IAAI,CAAC,CA2CzB;IAED;;;OAGG;IACG,iBAAiB,IAFV,OAAO,CAAC,IAAI,CAAC,CA+CzB;IAED;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAJP,OAAO,YAAY,EAAE,OAId,EAAE,EAAC,IAAI,EAAE,MAAW,EAAC,AAHpC,CACA,EADQ;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAGE,GAF/B,IAAI,CAyBhB;IAED;;;;OAIG;IACH,oBAAoB,CAAC,KAAK,EAHf,KAGe,GAFb,OAAO,CAWnB;IAED;;;;;OAKG;IACH,8BAA8B,CAAC,WAAW,EAJ/B,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAIG,EAAE,OAAO,EAHxC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGJ,GAFtC,KAAK,CA8BjB;IAED;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAHjB,uBAGiB,GAFf,OAAO,CAAC,IAAI,CAAC,CAOzB;IAED;;;;OAIG;IACG,kBAAkB,CAAC,IAAI,EAHlB,kBAGkB,GAFhB,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACG,eAAe,CAAC,IAAI,EAHf,kBAGe,GAFb,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,EAHnB,uBAGmB,GAFjB,OAAO,CAAC,IAAI,CAAC,CAazB;IAED;;;;;OAKG;IACG,yBAAyB,CAAC,OAAO,EAJ5B,uBAI4B,EAAE,QAAQ,EAHtC,MAAM,OAAO,CAAC,IAAI,CAGoB,GAFpC,OAAO,CAAC,IAAI,CAAC,CAgBzB;IAED;;;;;;OAMG;IACG,mBAAmB,CAAC,OAAO,EAHtB,uBAGsB,GAFpB,OAAO,CAAC,IAAI,CAAC,CA6HzB;IAED;;;OAGG;IACH,cAAc,IAFD,IAAI,CAsKhB;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,SAAS,EAHjB,MAGiB,GAFf,MAAM,CAkBlB;IAED;;;;OAIG;IACH,qBAAqB,CAAC,SAAS,EAHpB,MAGoB,GAFlB,MAAM,CAwClB;IAED;;;OAGG;IACH,yBAAyB,IAFZ,IAAI,CAOhB;IAED;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAHpB,MAGoB,GAFlB,uBAAuB,GAAG,IAAI,CAqB1C;IAED;;;;OAIG;IACH,wBAAwB,CAAC,SAAS,EAHvB,uBAGuB,GAFrB,IAAI,CAUhB;IAED;;;OAGG;IACH,uBAAuB,IAFV,IAAI,CAQhB;IAED;;;;OAIG;IACH,uBAAuB,CAAC,aAAa,EAH1B,MAG0B,GAFxB,IAAI,CAqBhB;IAED;;;OAGG;IACH,qBAAqB,IAFR,IAAI,CAOhB;IAED;;;;;;;OAOG;IACH,eAAe,CAAC,OAAO,EAHZ,MAGY,GAFV,OAAO,CAUnB;IAED;;;;;;;OAOG;IACH,sBAAsB,IAFT,OAAO,CAwBnB;IAED;;yBAEqB;IACrB,oBAAoB,IADP,IAAI,CAKhB;IAED;;;;;;;OAOG;IACH,eAAe,IAFF,IAAI,CAWhB;IAED;;;;;;;OAOG;IACH,cAAc,IAFD,IAAI,CAgBhB;IAED;;;OAGG;IACH,cAAc,IAFD,IAAI,CAOhB;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAJb,MAIa,EAAE,OAAO,EAHtB,MAGsB,GAFpB,IAAI,CAShB;IAED;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAHF,MAGE,GAFA,IAAI,CAwChB;IAED;;;;;OAKG;IACH,mBAAmB,IAFN,IAAI,CAUhB;IAED;;;;;OAKG;IACG,kBAAkB,CAAC,OAAO,EAJrB,MAIqB,EAAE,EAAC,WAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,mBAAmB,EAAC,AAH7G,CACA,EADQ;QAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,yBAAyB,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAGpF,GAFxG,OAAO,CAAC,OAAO,CAAC,CA6C5B;IAED;;;;OAIG;IACH,YAAY,CAAC,EAAC,WAAkB,EAAC,AAH9B,CACA,EADQ;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAGK,GAFzB,IAAI,CAuChB;IAED;;;;;OAKG;IACH,oBAAoB,IAFP,IAAI,CAchB;IAED;;;;;;OAMG;IACG,sBAAsB,IAFf,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAiBlD;IAED;;;;;;OAMG;IACG,iBAAiB,IAFV,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACG,aAAa,IAFN,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACG,sBAAsB,CAAC,YAAY,EAH9B,cAAc,GAAG,UAGa,GAF5B,OAAO,CAAC,IAAI,CAAC,CA8BzB;IAED;;;;;;;OAOG;IACG,oBAAoB,CAAC,OAAO,EAHvB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGrB,GAFrB,OAAO,CAAC,IAAI,CAAC,CAkFzB;IAED;;;;;;OAMG;IACG,oBAAoB,CAAC,MAAM,EAHtB,mBAAmB,GAAG,eAAe,GAAG,OAGlB,GAFpB,OAAO,CAAC,IAAI,CAAC,CAwBzB;IAED;;;;;;;OAOG;IACG,qBAAqB,CAAC,OAAO,EAHxB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGpB,GAFtB,OAAO,CAAC,IAAI,CAAC,CAkDzB;IAED;;;;OAIG;IACG,wBAAwB,CAAC,OAAO,EAH3B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGjB,GAFzB,OAAO,CAAC,IAAI,CAAC,CAyBzB;IAED;;;;;OAKG;IACG,sBAAsB,CAAC,OAAO,EAHzB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGnB,GAFvB,OAAO,CAAC,IAAI,CAAC,CA2BzB;IAED;;;;;;OAMG;IACG,uBAAuB,CAAC,OAAO,EAH1B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGlB,GAFxB,OAAO,CAAC,IAAI,CAAC,CAoFzB;IAED;;;;;;;;;OASG;IACG,mCAAmC,CAAC,EAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAC,EAL/E;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAwD,YAAY,EAA5D,OAAO,yBAAyB,EAAE,OAAO,CACjD;KAE+E,GAFrE,OAAO,CAAC,IAAI,CAAC,CAiCzB;IAED;;;;;OAKG;IACG,yBAAyB,CAAC,OAAO,EAH5B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGhB,GAF1B,OAAO,CAAC,IAAI,CAAC,CA4BzB;IAED;;;;;;OAMG;IACG,6BAA6B,IAFtB,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAEK,gBAAgB,kBAMrB;IAED;;;;OAIG;IACG,sBAAsB,CAAC,OAAO,EAHzB,gBAGyB,GAFvB,OAAO,CAAC,IAAI,CAAC,CAkCzB;IAED;;;;;OAKG;IACG,gBAAgB,CAAC,OAAO,EAJnB,gBAAgB,GAAG,SAIA,EAAE,MAAM,EAH3B,MAAM,GAAG,IAAI,GAAG,SAGW,GAFzB,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACG,gBAAgB,CAAC,QAAQ,EAHpB,MAAM,OAAO,CAAC,IAAI,CAGE,GAFlB,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;OAIG;IACG,0BAA0B,CAAC,EAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAC,EAHpD;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;KAG1C,GAFlD,OAAO,CAAC,IAAI,CAAC,CAuDzB;IAED;;;;;;;;OAQG;IACG,mBAAmB,CAAC,EAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAC,EANtF;QAAqB,OAAO,EAApB,MAAM,CACd;QAAiC,WAAW,EAApC,MAAM,GAAG,SAAS,CAC1B;QAAqB,mBAAmB,EAAhC,MAAM,CACd;QAAwE,kBAAkB,EAAlF,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CACjE;KAEsF,GAF5E,OAAO,CAAC,KAAK,GAAG;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC,CAmBhI;IAED;;;;;;OAMG;IACG,oBAAoB,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,EAJ9C;QAAqB,OAAO,EAApB,MAAM,CACd;QAA2G,WAAW,EAA9G;YAAC,QAAQ,EAAE,OAAO,CAAC;YAAC,eAAe,EAAE,MAAM,CAAC;YAAC,kBAAkB,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAC,CACpG;KAE8C,GAFpC,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;OAKG;IACG,kBAAkB,CAAC,OAAO,EAJrB,MAIqB,EAAE,WAAW,EAHlC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAGzD,GAFhC,OAAO,CAAC,IAAI,CAAC,CAsBzB;IAED;;;;OAIG;IACG,cAAc,CAAC,EAAC,OAAO,EAAE,MAAM,EAAC,EAH3B;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;KAG9C,GAFzB,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAe9C;IAED;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAJX,MAIW,EAAE,IAAI,EAHjB,MAGiB,GAFf,IAAI,CAMhB;IAEK,sBAAsB,kBAe3B;IAED;;;;OAIG;IACG,yBAAyB,CAAC,OAAO,EAH5B,uBAG4B,GAF1B,OAAO,CAAC,IAAI,CAAC,CAsCzB;IAEK,uBAAuB,kBAe5B;IAED;;;OAGG;IACH,aAAa,IAFA,MAAM,GAAG,SAAS,CAI9B;IAED;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAHd,OAAO,8BAA8B,EAAE,uBAGzB,GAFZ,IAAI,CAKhB;IAEK,6BAA6B,kBAyClC;IAED;;;;OAIG;IACG,+BAA+B,CAAC,EAAC,UAAU,EAAC,EAHvC;QAAC,UAAU,EAAE,OAAO,CAAA;KAGmB,GAFrC,OAAO,CAAC,IAAI,CAAC,CAgBzB;IAED;;;;OAIG;IACG,oBAAoB,CAAC,EAAC,UAAU,EAAC,EAH5B;QAAC,UAAU,EAAE,OAAO,CAAA;KAGQ,GAF1B,OAAO,CAAC,IAAI,CAAC,CAqCzB;CACF"}
|
|
1
|
+
{"version":3,"file":"websocket-session.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/websocket-session.js"],"names":[],"mappings":"AAMA,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAIpC,OAAO,gBAAgB,MAAM,yBAAyB,CAAA;AAItD,OAAO,gBAAgB,MAAM,wBAAwB,CAAA;AAIlD,YAAwa,uBAAuB,GAArb;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;CAAC,GAAG;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;CAAC,GAAG;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAyB;AAI/b,YAAkB,uBAAuB,GACzC;;;;IAAmB,UAAU,EAAlB,MAAM,CACjB;;;;IAAmB,UAAU,EAAlB,MAAM,CACjB;;;;IAAoB,QAAQ,EAAjB,OAAO,CACpB;CAAA,CAAA;AAGE,YAAkB,kBAAkB,GACpC;;;;IAAoC,SAAS,EAAlC,uBAAuB,CAClC;;;;IAAoC,OAAO,EAAhC,uBAAuB,CACpC;CAAA,CAAA;AAwED,MAAM,CAAC,OAAO,OAAO,yCAAyC;IAuB1D,uBAAuB;IAClB,aAAa,EADP,MAAM,EAAE;IAEd,iBAAiB;IACjB,kBAAkB;IAClB,cAAc;IACd,uBAAuB;IACvB,MAAM;IACN,aAAa;IACb,cAAc;IACd,cAAc;IACd,qBAAqB;IACrB,qBAAqB;IACrB,MAAM;IAGN,uBAAuB;IACvB,0BAA0B;IAC1B,oBAAoB;IACpB,uBAAuB;IACvB,4BAA4B;IAC5B,cAAc;IACd,yBAAyB;IAE9B;;+DAE2D;IACtD,SAAS,EADJ,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAGvD;;;;;OAKG;IACE,IAAI,EAFC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAIvD;;2EAEuE;IAClE,YAAY,EADP,GAAG,CAAC,MAAM,EAAE,OAAO,4BAA4B,EAAE,OAAO,CAAC;IAGnE;;6GAEyG;IACpG,qBAAqB,EADhB,GAAG,CAAC,MAAM,EAAE;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,yBAAyB,EAAE,OAAO,CAAA;KAAC,CAAC;IAGrG;;;;;;OAMG;IACE,SAAS,EAFJ,MAAM;IAIhB;;;OAGG;IACE,OAAO,EAFF,OAAO;IAIjB;;;OAGG;IACE,cAAc,EAFT,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAI9C;;qDAEiD;IAC5C,MAAM,EADD,OAAO,YAAY,EAAE,OAAO,GAAG,IAAI;IAG7C;;;;;;;OAOG;IACE,aAAa,EAFR,OAAO,CAAC,IAAI,CAAC;IAIvB;;;;;;OAMG;IACE,sBAAsB,EAFjB,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS;IAI5D,4BAA4B;IACvB,iBAAiB,EADX,MAAM,GAAG,IAAI;IAGxB;;;;;OAKG;IACE,mBAAmB,EAFd,MAAM,EAAE,GAAG,IAAI;IAIzB;;;;;OAKG;IACE,iBAAiB,EAFZ,MAAM,GAAG,IAAI;IAIvB;;;;;OAKG;IACE,gBAAgB,EAFX,MAAM;IAMhB;;;;;;OAMG;IACE,eAAe,EAFV,OAAO;IAIjB;;;;;;OAMG;IACE,eAAe,EAFV,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI;IA5JjD,MAAM,6DAAqB;IAC3B,aAAa,WAAY;IACzB,QAAQ,WAAY;IACpB,oBAAoB,gBAAY;IAChC,oBAAoB,gBAAY;IAChC,cAAc,gBAAY;IAC1B,mBAAmB,gBAAY;IAC/B;;sCAEkC;IAClC,YAAY,EADF,kBAAkB,EAAE,CACb;IAEjB;;;;;;;;OAQG;IACH,YAAY,EAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB,EAAC,EANvF;QAAuD,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO,CAChD;QAA2C,MAAM,EAAzC,OAAO,YAAY,EAAE,OAAO,CACpC;QAAyF,cAAc,AAAvG,CACA,EADQ,OAAO,cAAc,EAAE,OAAO,GAAG,OAAO,wBAAwB,EAAE,OAAO,CACjF;QAA8E,cAAc,AAA5F,CACA,EADQ,OAAO,8BAA8B,EAAE,uBAAuB,CACtE;QAA8F,qBAAqB,AAAnH,CACF,EADU,OAAO,CAAC,OAAO,8BAA8B,EAAE,uBAAuB,GAAG,IAAI,CAAC,CACxF;KACyF,EA0IzF;IAED;;;;OAIG;IACH,sBAAsB,IAFT,IAAI,CAYhB;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,YAAY,EAHnB,MAGmB,GAFjB,IAAI,CAIhB;IAED;;;OAGG;IACH,WAAW,IAFE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAIzD;IAED;;;OAGG;IACH,QAAQ,IAFK,OAAO,CAInB;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAHZ,MAGY,GAFV,IAAI,CAIhB;IAED,OAAO,SAYN;IAED,8DAA8D;IAC9D,eAAe,SAMd;IAED,8DAA8D;IAC9D,iBAAiB,SAOhB;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAHZ,MAGY,GAFV,OAAO,CAInB;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAHA,MAGA,GAFE,IAAI,CAahB;IAED;;;;;;OAMG;IACG,SAAS,CAAC,OAAO,EALZ,MAKY,EAAE,OAAO,EAJrB,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAIP,EAAE,OAAO,AAHtC,CACA,EADQ;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAGzC,GAFjC,OAAO,CAAC,IAAI,CAAC,CA2CzB;IAED;;;OAGG;IACG,iBAAiB,IAFV,OAAO,CAAC,IAAI,CAAC,CA+CzB;IAED;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAJP,OAAO,YAAY,EAAE,OAId,EAAE,EAAC,IAAI,EAAE,MAAW,EAAC,AAHpC,CACA,EADQ;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAGE,GAF/B,IAAI,CAyBhB;IAED;;;;OAIG;IACH,oBAAoB,CAAC,KAAK,EAHf,KAGe,GAFb,OAAO,CAWnB;IAED;;;;;OAKG;IACH,8BAA8B,CAAC,WAAW,EAJ/B,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAIG,EAAE,OAAO,EAHxC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGJ,GAFtC,KAAK,CA8BjB;IAED;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAHjB,uBAGiB,GAFf,OAAO,CAAC,IAAI,CAAC,CAOzB;IAED;;;;OAIG;IACG,kBAAkB,CAAC,IAAI,EAHlB,kBAGkB,GAFhB,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACG,eAAe,CAAC,IAAI,EAHf,kBAGe,GAFb,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,EAHnB,uBAGmB,GAFjB,OAAO,CAAC,IAAI,CAAC,CAazB;IAED;;;;;OAKG;IACG,yBAAyB,CAAC,OAAO,EAJ5B,uBAI4B,EAAE,QAAQ,EAHtC,MAAM,OAAO,CAAC,IAAI,CAGoB,GAFpC,OAAO,CAAC,IAAI,CAAC,CAgBzB;IAED;;;;;;OAMG;IACG,mBAAmB,CAAC,OAAO,EAHtB,uBAGsB,GAFpB,OAAO,CAAC,IAAI,CAAC,CA6HzB;IAED;;;OAGG;IACH,cAAc,IAFD,IAAI,CAsKhB;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,SAAS,EAHjB,MAGiB,GAFf,MAAM,CAkBlB;IAED;;;;OAIG;IACH,qBAAqB,CAAC,SAAS,EAHpB,MAGoB,GAFlB,MAAM,CAwClB;IAED;;;OAGG;IACH,yBAAyB,IAFZ,IAAI,CAOhB;IAED;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAHpB,MAGoB,GAFlB,uBAAuB,GAAG,IAAI,CAqB1C;IAED;;;;OAIG;IACH,wBAAwB,CAAC,SAAS,EAHvB,uBAGuB,GAFrB,IAAI,CAUhB;IAED;;;OAGG;IACH,uBAAuB,IAFV,IAAI,CAQhB;IAED;;;;OAIG;IACH,uBAAuB,CAAC,aAAa,EAH1B,MAG0B,GAFxB,IAAI,CAqBhB;IAED;;;OAGG;IACH,qBAAqB,IAFR,IAAI,CAOhB;IAED;;;;;;;OAOG;IACH,eAAe,CAAC,OAAO,EAHZ,MAGY,GAFV,OAAO,CAUnB;IAED;;;;;;;OAOG;IACH,sBAAsB,IAFT,OAAO,CAwBnB;IAED;;yBAEqB;IACrB,oBAAoB,IADP,IAAI,CAKhB;IAED;;;;;;;OAOG;IACH,eAAe,IAFF,IAAI,CAWhB;IAED;;;;;;;OAOG;IACH,cAAc,IAFD,IAAI,CAgBhB;IAED;;;OAGG;IACH,cAAc,IAFD,IAAI,CAOhB;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAJb,MAIa,EAAE,OAAO,EAHtB,MAGsB,GAFpB,IAAI,CAShB;IAED;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAHF,MAGE,GAFA,IAAI,CAwChB;IAED;;;;;OAKG;IACH,mBAAmB,IAFN,IAAI,CAUhB;IAED;;;;;OAKG;IACG,kBAAkB,CAAC,OAAO,EAJrB,MAIqB,EAAE,EAAC,WAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,mBAAmB,EAAC,AAH7G,CACA,EADQ;QAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,yBAAyB,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAGpF,GAFxG,OAAO,CAAC,OAAO,CAAC,CA6C5B;IAED;;;;OAIG;IACH,YAAY,CAAC,EAAC,WAAkB,EAAC,AAH9B,CACA,EADQ;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAGK,GAFzB,IAAI,CAuChB;IAED;;;;;OAKG;IACH,oBAAoB,IAFP,IAAI,CAchB;IAED;;;;;;OAMG;IACG,sBAAsB,IAFf,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAiBlD;IAED;;;;;;OAMG;IACG,iBAAiB,IAFV,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACG,aAAa,IAFN,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACG,sBAAsB,CAAC,YAAY,EAH9B,cAAc,GAAG,UAGa,GAF5B,OAAO,CAAC,IAAI,CAAC,CA8BzB;IAED;;;;;;;OAOG;IACG,oBAAoB,CAAC,OAAO,EAHvB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGrB,GAFrB,OAAO,CAAC,IAAI,CAAC,CAkFzB;IAED;;;;;;OAMG;IACG,oBAAoB,CAAC,MAAM,EAHtB,mBAAmB,GAAG,eAAe,GAAG,OAGlB,GAFpB,OAAO,CAAC,IAAI,CAAC,CAwBzB;IAED;;;;;;;OAOG;IACG,qBAAqB,CAAC,OAAO,EAHxB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGpB,GAFtB,OAAO,CAAC,IAAI,CAAC,CAkDzB;IAED;;;;OAIG;IACG,wBAAwB,CAAC,OAAO,EAH3B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGjB,GAFzB,OAAO,CAAC,IAAI,CAAC,CAyBzB;IAED;;;;;OAKG;IACG,sBAAsB,CAAC,OAAO,EAHzB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGnB,GAFvB,OAAO,CAAC,IAAI,CAAC,CA2BzB;IAED;;;;;;OAMG;IACG,uBAAuB,CAAC,OAAO,EAH1B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGlB,GAFxB,OAAO,CAAC,IAAI,CAAC,CAoFzB;IAED;;;;;;;;;OASG;IACG,mCAAmC,CAAC,EAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAC,EAL/E;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAwD,YAAY,EAA5D,OAAO,yBAAyB,EAAE,OAAO,CACjD;KAE+E,GAFrE,OAAO,CAAC,IAAI,CAAC,CA6CzB;IAED;;;;;OAKG;IACG,yBAAyB,CAAC,OAAO,EAH5B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGhB,GAF1B,OAAO,CAAC,IAAI,CAAC,CA4BzB;IAED;;;;;;OAMG;IACG,6BAA6B,IAFtB,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAEK,gBAAgB,kBAMrB;IAED;;;;OAIG;IACG,sBAAsB,CAAC,OAAO,EAHzB,gBAGyB,GAFvB,OAAO,CAAC,IAAI,CAAC,CAkCzB;IAED;;;;;OAKG;IACG,gBAAgB,CAAC,OAAO,EAJnB,gBAAgB,GAAG,SAIA,EAAE,MAAM,EAH3B,MAAM,GAAG,IAAI,GAAG,SAGW,GAFzB,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACG,gBAAgB,CAAC,QAAQ,EAHpB,MAAM,OAAO,CAAC,IAAI,CAGE,GAFlB,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;OAIG;IACG,0BAA0B,CAAC,EAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAC,EAHpD;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;KAG1C,GAFlD,OAAO,CAAC,IAAI,CAAC,CAuDzB;IAED;;;;;;;;OAQG;IACG,mBAAmB,CAAC,EAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAC,EANtF;QAAqB,OAAO,EAApB,MAAM,CACd;QAAiC,WAAW,EAApC,MAAM,GAAG,SAAS,CAC1B;QAAqB,mBAAmB,EAAhC,MAAM,CACd;QAAwE,kBAAkB,EAAlF,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CACjE;KAEsF,GAF5E,OAAO,CAAC,KAAK,GAAG;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC,CAmBhI;IAED;;;;;;OAMG;IACG,oBAAoB,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,EAJ9C;QAAqB,OAAO,EAApB,MAAM,CACd;QAA2G,WAAW,EAA9G;YAAC,QAAQ,EAAE,OAAO,CAAC;YAAC,eAAe,EAAE,MAAM,CAAC;YAAC,kBAAkB,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAA;SAAC,CACpG;KAE8C,GAFpC,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;OAKG;IACG,kBAAkB,CAAC,OAAO,EAJrB,MAIqB,EAAE,WAAW,EAHlC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAGzD,GAFhC,OAAO,CAAC,IAAI,CAAC,CAsBzB;IAED;;;;OAIG;IACG,cAAc,CAAC,EAAC,OAAO,EAAE,MAAM,EAAC,EAH3B;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;KAG9C,GAFzB,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAe9C;IAED;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAJX,MAIW,EAAE,IAAI,EAHjB,MAGiB,GAFf,IAAI,CAMhB;IAEK,sBAAsB,kBAe3B;IAED;;;;OAIG;IACG,yBAAyB,CAAC,OAAO,EAH5B,uBAG4B,GAF1B,OAAO,CAAC,IAAI,CAAC,CAsCzB;IAEK,uBAAuB,kBAe5B;IAED;;;OAGG;IACH,aAAa,IAFA,MAAM,GAAG,SAAS,CAI9B;IAED;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAHd,OAAO,8BAA8B,EAAE,uBAGzB,GAFZ,IAAI,CAKhB;IAEK,6BAA6B,kBAyClC;IAED;;;;OAIG;IACG,+BAA+B,CAAC,EAAC,UAAU,EAAC,EAHvC;QAAC,UAAU,EAAE,OAAO,CAAA;KAGmB,GAFrC,OAAO,CAAC,IAAI,CAAC,CAgBzB;IAED;;;;OAIG;IACG,oBAAoB,CAAC,EAAC,UAAU,EAAC,EAH5B;QAAC,UAAU,EAAE,OAAO,CAAA;KAGQ,GAF1B,OAAO,CAAC,IAAI,CAAC,CAqCzB;CACF"}
|