@stemy/backend 5.0.6 → 5.0.8
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/esm2020/public_api.mjs +11 -21
- package/esm2020/services/backend-provider.mjs +52 -9
- package/esm2020/services/configuration.mjs +1 -1
- package/esm2020/services/entities/lazy-asset.mjs +4 -3
- package/esm2020/services/job-manager.mjs +12 -17
- package/esm2020/services/lazy-assets.mjs +5 -3
- package/esm2020/utils.mjs +40 -14
- package/fesm2015/stemy-backend.mjs +286 -233
- package/fesm2015/stemy-backend.mjs.map +1 -1
- package/fesm2020/stemy-backend.mjs +282 -231
- package/fesm2020/stemy-backend.mjs.map +1 -1
- package/package.json +4 -4
- package/public_api.d.ts +1 -1
- package/services/backend-provider.d.ts +13 -4
- package/services/job-manager.d.ts +3 -2
- package/services/lazy-assets.d.ts +1 -1
- package/utils.d.ts +4 -0
package/esm2020/public_api.mjs
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { join } from "path";
|
|
2
|
-
import bodyParser from "body-parser";
|
|
3
2
|
import webToken from "jsonwebtoken";
|
|
4
3
|
import { container } from "tsyringe";
|
|
5
4
|
import { HttpError, useContainer as useRoutingContainer, useExpressServer } from "routing-controllers";
|
|
@@ -49,7 +48,7 @@ import { EmptyJob } from "./utilities/empty-job";
|
|
|
49
48
|
import { diContainers, isFunction, isString, isType, prepareUrlEmpty, valueToPromise, getDirName } from "./utils";
|
|
50
49
|
import { setupStatic } from "./static";
|
|
51
50
|
import { commands } from "./commands";
|
|
52
|
-
export { isNullOrUndefined, isDefined, getType, isObject, isArray, isBuffer, isBoolean, isDate, isPrimitive, isString, isFunction, isConstructor, isType, isInterface, ucFirst, lcFirst, isObjectId, firstItem, lastItem, regroup, uniqueItems, getValue, groupBy, convertValue, toImage, bufferToStream, streamToBuffer, copyStream, mkdirRecursive, deleteFile, readFile, readAndDeleteFile, writeFile, valueToPromise, promiseTimeout, getConstructorName, getFunctionParams, getFileName, getExtension, createIdString, idToString, createTransformer, broadcast, rand, random, multiSubscription, observableFromFunction, padLeft, padRight, camelCaseToDash, deleteFromBucket, filter, copy, assign, md5, runCommand, ConsoleColor, colorize, jsonHighlight, replaceSpecialChars, regexEscape, flatten, wrapError, getDirName, prepareUrl, prepareUrlSlash, prepareUrlEmpty, fileTypeFromBuffer, fileTypeFromStream } from "./utils";
|
|
51
|
+
export { isNullOrUndefined, isDefined, getType, isObject, isArray, isBuffer, isBoolean, isDate, isPrimitive, isString, isFunction, isConstructor, isType, isInterface, ucFirst, lcFirst, isObjectId, firstItem, lastItem, regroup, uniqueItems, getValue, groupBy, convertValue, toImage, bufferToStream, streamToBuffer, copyStream, mkdirRecursive, deleteFile, readFile, readAndDeleteFile, writeFile, valueToPromise, promiseTimeout, getConstructorName, getFunctionParams, getFileName, getExtension, createIdString, idToString, createTransformer, broadcast, rand, random, multiSubscription, observableFromFunction, padLeft, padRight, camelCaseToDash, gzipPromised, gunzipPromised, deleteFromBucket, filter, copy, assign, md5, runCommand, ConsoleColor, colorize, jsonHighlight, replaceSpecialChars, regexEscape, flatten, wrapError, getDirName, prepareUrl, prepareUrlSlash, prepareUrlEmpty, fileTypeFromBuffer, fileTypeFromStream } from "./utils";
|
|
53
52
|
export { IsFile, IsObjectId } from "./validators";
|
|
54
53
|
export { FIXTURE, JOB, TERMINAL_COMMAND, EXPRESS, HTTP_SERVER, SOCKET_SERVER, SOCKET_CONTROLLERS, PARAMETER, DI_CONTAINER, OPENAPI_VALIDATION, Type, Parameter } from "./common-types";
|
|
55
54
|
export { AssetProcessor } from "./services/asset-processor";
|
|
@@ -139,6 +138,8 @@ export function createServices() {
|
|
|
139
138
|
new Parameter("zmqBackPort", 3100),
|
|
140
139
|
new Parameter("zmqRemoteHost", "tcp://127.0.0.1"),
|
|
141
140
|
new Parameter("isWorker", false),
|
|
141
|
+
new Parameter("startWorker", false),
|
|
142
|
+
new Parameter("fixtures", true),
|
|
142
143
|
new Parameter("mainEndpoint", ""),
|
|
143
144
|
new Parameter("idChars", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"),
|
|
144
145
|
new Parameter("idSeparator", "-"),
|
|
@@ -344,28 +345,17 @@ export async function setupBackend(config, providers, parent) {
|
|
|
344
345
|
const configuration = diContainer.resolve(Configuration);
|
|
345
346
|
const bp = diContainer.resolve(BackendProvider);
|
|
346
347
|
if (config.restOptions) {
|
|
347
|
-
bp.express.use(bodyParser.json({
|
|
348
|
-
limit: configuration.hasParam("jsonLimit")
|
|
349
|
-
? configuration.resolve("jsonLimit")
|
|
350
|
-
: "250mb"
|
|
351
|
-
}));
|
|
352
348
|
useRoutingContainer(diContainer);
|
|
353
349
|
useExpressServer(bp.express, restOptions);
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
350
|
+
}
|
|
351
|
+
if (config.socketOptions) {
|
|
352
|
+
diContainer.register(SOCKET_CONTROLLERS, {
|
|
353
|
+
useValue: new SocketControllers({
|
|
354
|
+
io: bp.io,
|
|
355
|
+
...socketOptions,
|
|
356
|
+
})
|
|
361
357
|
});
|
|
362
358
|
}
|
|
363
|
-
diContainer.register(SOCKET_CONTROLLERS, {
|
|
364
|
-
useValue: new SocketControllers({
|
|
365
|
-
io: bp.io,
|
|
366
|
-
...socketOptions,
|
|
367
|
-
})
|
|
368
|
-
});
|
|
369
359
|
// Connect to mongo if necessary
|
|
370
360
|
if (configuration.hasParam("mongoUri") && configuration.resolve("mongoUri")) {
|
|
371
361
|
console.log("Connecting to MongoDB...");
|
|
@@ -376,4 +366,4 @@ export async function setupBackend(config, providers, parent) {
|
|
|
376
366
|
await setupStatic(config.rootFolder, diContainer);
|
|
377
367
|
return diContainer;
|
|
378
368
|
}
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sUUFBUSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUMsU0FBUyxFQUFzQixNQUFNLFVBQVUsQ0FBQztBQUN4RCxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksSUFBSSxtQkFBbUIsRUFDbkMsZ0JBQWdCLEVBQ25CLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUEyQixpQkFBaUIsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRS9FLE9BQU8sRUFDSCxZQUFZLEVBQ1osT0FBTyxFQUNQLE9BQU8sRUFDUCxXQUFXLEVBUVgsR0FBRyxFQUNILGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsU0FBUyxFQUVULGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBRW5CLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDOUUsT0FBTyxFQUFDLGtCQUFrQixJQUFJLHNCQUFzQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFFcEcsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDNUUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDMUUsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFFdkYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFFNUUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFFbEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ2hILE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDckMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLE9BQU8sRUFDUCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixXQUFXLEVBQ1gsUUFBUSxFQUNSLFVBQVUsRUFDVixhQUFhLEVBQ2IsTUFBTSxFQUNOLFdBQVcsRUFDWCxPQUFPLEVBQ1AsT0FBTyxFQUNQLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxFQUNSLE9BQU8sRUFDUCxXQUFXLEVBQ1gsUUFBUSxFQUNSLE9BQU8sRUFDUCxZQUFZLEVBQ1osT0FBTyxFQUNQLGNBQWMsRUFDZCxjQUFjLEVBQ2QsVUFBVSxFQUNWLGNBQWMsRUFDZCxVQUFVLEVBQ1YsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsY0FBYyxFQUNkLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxZQUFZLEVBQ1osY0FBYyxFQUNkLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsU0FBUyxFQUNULElBQUksRUFDSixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixPQUFPLEVBQ1AsUUFBUSxFQUNSLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLElBQUksRUFDSixNQUFNLEVBQ04sR0FBRyxFQUNILFVBQVUsRUFDVixZQUFZLEVBRVosUUFBUSxFQUNSLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLE9BQU8sRUFDUCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixlQUFlLEVBQ2YsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDckIsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFaEQsT0FBTyxFQUNILE9BQU8sRUFDUCxHQUFHLEVBQ0gsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixJQUFJLEVBcUJKLFNBQVMsRUFvQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRS9ELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUV4RSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUNuRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUUxRSxPQUFPLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQ0gsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFVBQVUsRUFDVixlQUFlLEVBQ2YsWUFBWSxFQUNaLFFBQVEsRUFDUixjQUFjLEVBQ2QsT0FBTyxFQUNWLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsR0FBYTtJQUMzQyxJQUFJLEdBQUcsQ0FBQyxJQUFJO1FBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQzlCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ25CLElBQUk7UUFDQSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBUSxDQUFDO0tBQ3JGO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDUixNQUFNLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDckU7SUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1YsTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsOENBQThDLENBQUMsQ0FBQztLQUM1RTtJQUNELEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUMxQixxQkFBcUI7SUFDckIsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7SUFDN0IsTUFBTSxNQUFNLEdBQUc7UUFDWCxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDO1FBQ3ZDLElBQUksU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuRSxzQ0FBc0M7WUFDdEMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQVcsQ0FBQztZQUNsRixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0IsT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzNFLENBQUMsQ0FBQztRQUNGLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELElBQUksU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQztRQUN0QyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7UUFDOUMsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQztRQUM5QixJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO1FBQ25DLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7UUFDakMsSUFBSSxTQUFTLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDO1FBQ25ELElBQUksU0FBUyxDQUFDLHNCQUFzQixFQUFFLG9DQUFvQyxDQUFDO1FBQzNFLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxzQ0FBc0MsQ0FBQztRQUNsRSxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQzdCLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUM7UUFDeEMsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztRQUNoQyxJQUFJLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDO1FBQ3BDLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUM7UUFDdEMsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUM1QixJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO1FBQzlCLElBQUksU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7UUFDbEMsSUFBSSxTQUFTLENBQUMsZUFBZSxFQUFFLGlCQUFpQixDQUFDO1FBQ2pELElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7UUFDaEMsSUFBSSxTQUFTLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztRQUNqQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsc0NBQXNDLENBQUM7UUFDaEUsSUFBSSxTQUFTLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQztRQUNqQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO1FBQ2hDLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDO1FBQ25DLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMxQyxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7UUFDekMsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUM1QixJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7S0FDdEMsQ0FBQztJQUVGLGtDQUFrQztJQUNsQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2xDLE9BQU87WUFDSCxPQUFPLEVBQUUsU0FBUztZQUNsQixRQUFRLEVBQUUsQ0FBQztTQUNkLENBQUE7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILG1CQUFtQjtJQUNuQixNQUFNLFFBQVEsR0FBRztRQUNiLGNBQWM7UUFDZCxhQUFhO1FBQ2IsTUFBTTtRQUNOLGVBQWU7UUFDZixLQUFLO1FBQ0wsY0FBYztRQUNkLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsUUFBUTtRQUNSLE9BQU87UUFDUCxZQUFZO1FBQ1osV0FBVztRQUNYLFVBQVU7UUFDVixVQUFVO1FBQ1YsTUFBTTtRQUNOLFVBQVU7UUFDVixXQUFXO1FBQ1gsY0FBYztRQUNkLE9BQU87UUFDUCxVQUFVO1FBQ1YsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixjQUFjO1FBQ2QsbUJBQW1CO1FBQ25CLFVBQVU7UUFDVixXQUFXO0tBQ0MsQ0FBQztJQUVqQixtQkFBbUI7SUFDbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUN0RSxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzlCLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQ2hDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxXQUFXLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUFDLE1BQXNCLEVBQUUsU0FBMkIsRUFBRSxNQUE2QjtJQUVqSCxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEQsTUFBTSxHQUFHLE1BQU0sSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUVwQyxrQkFBa0I7SUFDbEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNoRCxPQUFPO1lBQ0gsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxFQUFFLE9BQU87U0FDcEIsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0lBRUgsZ0JBQWdCO0lBQ2hCLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDakQsT0FBTztZQUNILE9BQU8sRUFBRSxTQUFTO1lBQ2xCLFFBQVEsRUFBRSxDQUFDO1NBQ2QsQ0FBQTtJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsY0FBYztJQUNkLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBc0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNsRixPQUFPO1lBQ0gsT0FBTyxFQUFFLEdBQUc7WUFDWixRQUFRLEVBQUUsT0FBTztTQUNwQixDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7SUFFSCxrQkFBa0I7SUFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQzlFLE9BQU87WUFDSCxPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLFFBQVEsRUFBRSxXQUFXO1NBQ3hCLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztJQUVILHNCQUFzQjtJQUN0QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUVsRCxpQkFBaUI7SUFDakIsTUFBTSxXQUFXLEdBQThCO1FBQzNDLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU07UUFDekMsbUJBQW1CLEVBQUUsS0FBSztRQUMxQixHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7S0FDaEMsQ0FBQztJQUNGLFdBQVcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM3QixXQUFXLEVBQUUsSUFBSTtRQUNqQixjQUFjLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztRQUN2QyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDekIsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO0tBQ0osRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLFdBQVcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztJQUN4RixXQUFXLENBQUMsV0FBVyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLENBQUM7U0FDeEksTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLENBQUM7U0FDeEgsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRWxELG1CQUFtQjtJQUNuQixNQUFNLGFBQWEsR0FBNkI7UUFDNUMsU0FBUyxFQUFFO1lBQ1AsR0FBRyxDQUFJLFNBQW9CO2dCQUN2QixPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUksU0FBUyxDQUFDLENBQUM7WUFDekMsQ0FBQztTQUNKO1FBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO0tBQ2xDLENBQUM7SUFDRixhQUFhLENBQUMsV0FBVyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQWtCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkcsYUFBYSxDQUFDLFdBQVcsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXBILG1CQUFtQjtJQUVuQixNQUFNLFlBQVksR0FBb0IsRUFBRSxDQUFDO0lBRXpDLG9DQUFvQztJQUNwQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEIsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFFSCxzQkFBc0I7SUFDdEIsWUFBWSxDQUFDLElBQUksQ0FDYixHQUFHLFlBQVksRUFDZixHQUFHLGdCQUFnQixFQUNuQixHQUFHLGNBQWMsRUFDakIsR0FBRyxZQUFZLEVBQ2YsR0FBRyxnQkFBZ0IsRUFDbkIsR0FBRyxXQUFXLENBQUMsV0FBMEIsRUFDekMsR0FBRyxXQUFXLENBQUMsV0FBMEIsRUFDekMsR0FBRyxhQUFhLENBQUMsV0FBMEIsRUFDM0MsR0FBRyxhQUFhLENBQUMsV0FBMEIsRUFDM0MsR0FBRyxTQUFTLEVBQ1o7UUFDSSxPQUFPLEVBQUUsT0FBTztRQUNoQixVQUFVLEVBQUUsQ0FBQyxTQUE4QixFQUFFLEVBQUU7WUFDM0MsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN0RCxDQUFDO0tBQ0osRUFDRDtRQUNJLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFVBQVUsRUFBRSxDQUFDLFNBQThCLEVBQUUsRUFBRTtZQUMzQyxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3JELENBQUM7S0FDSixFQUNEO1FBQ0ksT0FBTyxFQUFFLGFBQWE7UUFDdEIsVUFBVSxFQUFFLENBQUMsU0FBOEIsRUFBRSxFQUFFO1lBQzNDLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakQsQ0FBQztLQUNKLENBQ0osQ0FBQTtJQUVELFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDNUIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztnQkFBRSxPQUFPO1lBQzdDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLE9BQU87U0FDVjtRQUNELFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFlLENBQUMsQ0FBQztJQUM1RCxDQUFDLENBQUMsQ0FBQztJQUVILFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO1FBQy9CLFFBQVEsRUFBRSxXQUFXO0tBQ3hCLENBQUMsQ0FBQztJQUVILFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUU7UUFDckMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztLQUNwRCxDQUFDLENBQUM7SUFFSCxZQUFZLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDO0lBRXJFLGlCQUFpQjtJQUNqQixXQUFXLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxFQUFFLE1BQWMsRUFBRSxLQUFZLEVBQUUsRUFBRTtRQUN0RSxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE1BQU0sSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLCtDQUErQyxDQUFDLENBQUM7U0FDN0U7UUFDRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUU7Z0JBQ3BCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNsQixJQUFJO3dCQUNBLElBQUksTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFOzRCQUMxQyxPQUFPLElBQUksQ0FBQzt5QkFDZjtxQkFDSjtvQkFBQyxPQUFPLENBQUMsRUFBRTt3QkFDUixTQUFTLEdBQUcsQ0FBQyxDQUFDO3FCQUNqQjtpQkFDSjtnQkFDRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQzthQUNqRDtZQUNELE1BQU0sS0FBSyxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDLENBQUMsMkNBQTJDO2dCQUM3QyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUM7WUFDckMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUUsMkJBQTJCLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDakU7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDLENBQUM7SUFDRixXQUFXLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxFQUFFLE1BQWMsRUFBRSxFQUFFO1FBQ3RELElBQUk7WUFDQSxPQUFPLE1BQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNMLENBQUMsQ0FBQztJQUVGLGNBQWM7SUFDZCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFaEQsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO1FBQ3BCLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDM0IsS0FBSyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2dCQUN0QyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxPQUFPO1NBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ0osbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxQyxxQkFBcUI7UUFDckIsSUFBSSxPQUFPLEdBQVksSUFBSSxDQUFBO1FBQzNCLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNyQyxPQUFPLEdBQUcsT0FBTyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUM7aUJBQ3pDLE1BQU0sQ0FBQyxHQUFHLENBQUM7aUJBQ1gsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztLQUNOO0lBRUQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtRQUNyQyxRQUFRLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQztZQUM1QixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDVCxHQUFHLGFBQWE7U0FDbkIsQ0FBQztLQUNMLENBQUMsQ0FBQztJQUVILGdDQUFnQztJQUNoQyxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUN6RSxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RCxNQUFNLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7S0FDckQ7SUFFRCxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRWxELE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2pvaW59IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCBib2R5UGFyc2VyIGZyb20gXCJib2R5LXBhcnNlclwiO1xyXG5pbXBvcnQgd2ViVG9rZW4gZnJvbSBcImpzb253ZWJ0b2tlblwiO1xyXG5pbXBvcnQge2NvbnRhaW5lciwgRGVwZW5kZW5jeUNvbnRhaW5lcn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBBY3Rpb24sXHJcbiAgICBIdHRwRXJyb3IsXHJcbiAgICBSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zLFxyXG4gICAgdXNlQ29udGFpbmVyIGFzIHVzZVJvdXRpbmdDb250YWluZXIsXHJcbiAgICB1c2VFeHByZXNzU2VydmVyXHJcbn0gZnJvbSBcInJvdXRpbmctY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtTb2NrZXRDb250cm9sbGVyc09wdGlvbnMsIFNvY2tldENvbnRyb2xsZXJzfSBmcm9tIFwic29ja2V0LWNvbnRyb2xsZXJzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgRElfQ09OVEFJTkVSLFxyXG4gICAgRVhQUkVTUyxcclxuICAgIEZJWFRVUkUsXHJcbiAgICBIVFRQX1NFUlZFUixcclxuICAgIElCYWNrZW5kQ29uZmlnLFxyXG4gICAgSURlcGVuZGVuY3lDb250YWluZXIsXHJcbiAgICBJSm9iLFxyXG4gICAgSVBhZ2luYXRpb25QYXJhbXMsXHJcbiAgICBJUmVxdWVzdCxcclxuICAgIElUZXJtaW5hbENvbW1hbmQsXHJcbiAgICBJVXNlcixcclxuICAgIEpPQixcclxuICAgIE9QRU5BUElfVkFMSURBVElPTixcclxuICAgIFBhcmFtZXRlcixcclxuICAgIFBBUkFNRVRFUixcclxuICAgIFByb3ZpZGVyLFxyXG4gICAgU09DS0VUX1NFUlZFUixcclxuICAgIFNPQ0tFVF9DT05UUk9MTEVSUyxcclxuICAgIFRFUk1JTkFMX0NPTU1BTkQsXHJcbiAgICBUeXBlXHJcbn0gZnJvbSBcIi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5pbXBvcnQge0Fzc2V0UHJvY2Vzc29yfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3NldC1wcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtBc3NldFJlc29sdmVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3NldC1yZXNvbHZlclwiO1xyXG5pbXBvcnQge0Fzc2V0c30gZnJvbSBcIi4vc2VydmljZXMvYXNzZXRzXCI7XHJcbmltcG9ydCB7QmFja2VuZFByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9iYWNrZW5kLXByb3ZpZGVyXCI7XHJcbmltcG9ydCB7Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL2NhY2hlXCI7XHJcbmltcG9ydCB7Q2FjaGVQcm9jZXNzb3J9IGZyb20gXCIuL3NlcnZpY2VzL2NhY2hlLXByb2Nlc3NvclwiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtFbmRwb2ludFByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9lbmRwb2ludC1wcm92aWRlclwiO1xyXG5pbXBvcnQge0ZpeHR1cmVzfSBmcm9tIFwiLi9zZXJ2aWNlcy9maXh0dXJlc1wiO1xyXG5pbXBvcnQge0dhbGxlcnl9IGZyb20gXCIuL3NlcnZpY2VzL2dhbGxlcnlcIjtcclxuaW1wb3J0IHtHYWxsZXJ5Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL2dhbGxlcnktY2FjaGVcIjtcclxuaW1wb3J0IHtJZEdlbmVyYXRvcn0gZnJvbSBcIi4vc2VydmljZXMvaWQtZ2VuZXJhdG9yXCI7XHJcbmltcG9ydCB7Sm9iTWFuYWdlcn0gZnJvbSBcIi4vc2VydmljZXMvam9iLW1hbmFnZXJcIjtcclxuaW1wb3J0IHtMYXp5QXNzZXRzfSBmcm9tIFwiLi9zZXJ2aWNlcy9sYXp5LWFzc2V0c1wiO1xyXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4vc2VydmljZXMvbG9nZ2VyXCI7XHJcbmltcG9ydCB7TWFpbFNlbmRlcn0gZnJvbSBcIi4vc2VydmljZXMvbWFpbC1zZW5kZXJcIjtcclxuaW1wb3J0IHtNZW1vcnlDYWNoZX0gZnJvbSBcIi4vc2VydmljZXMvbWVtb3J5LWNhY2hlXCI7XHJcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL3NlcnZpY2VzL21vbmdvLWNvbm5lY3RvclwiO1xyXG5pbXBvcnQge09wZW5BcGl9IGZyb20gXCIuL3NlcnZpY2VzL29wZW4tYXBpXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3Nlc30gZnJvbSBcIi4vc2VydmljZXMvcHJvZ3Jlc3Nlc1wiO1xyXG5pbXBvcnQge1RlbXBsYXRlUmVuZGVyZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3RlbXBsYXRlLXJlbmRlcmVyXCI7XHJcbmltcG9ydCB7VGVybWluYWxNYW5hZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy90ZXJtaW5hbC1tYW5hZ2VyXCI7XHJcbmltcG9ydCB7VG9rZW5HZW5lcmF0b3J9IGZyb20gXCIuL3NlcnZpY2VzL3Rva2VuLWdlbmVyYXRvclwiO1xyXG5pbXBvcnQge1RyYW5zbGF0aW9uUHJvdmlkZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXByb3ZpZGVyXCI7XHJcbmltcG9ydCB7VHJhbnNsYXRvcn0gZnJvbSBcIi4vc2VydmljZXMvdHJhbnNsYXRvclwiO1xyXG5pbXBvcnQge1VzZXJNYW5hZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy91c2VyLW1hbmFnZXJcIjtcclxuXHJcbmltcG9ydCB7QXNzZXRzQ29udHJvbGxlcn0gZnJvbSBcIi4vcmVzdC1jb250cm9sbGVycy9hc3NldHMuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge0F1dGhDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL2F1dGguY29udHJvbGxlclwiO1xyXG5pbXBvcnQge0dhbGxlcnlDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL2dhbGxlcnkuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge1Byb2dyZXNzZXNDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL3Byb2dyZXNzZXMuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge1Rlcm1pbmFsQ29udHJvbGxlciBhcyBUZXJtaW5hbFJlc3RDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL3Rlcm1pbmFsLmNvbnRyb2xsZXJcIjtcclxuXHJcbmltcG9ydCB7RXJyb3JIYW5kbGVyTWlkZGxld2FyZX0gZnJvbSBcIi4vcmVzdC1taWRkbGV3YXJlcy9lcnJvci1oYW5kbGVyLm1pZGRsZXdhcmVcIjtcclxuaW1wb3J0IHtDb250YWluZXJNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL2NvbnRhaW5lci5taWRkbGV3YXJlXCI7XHJcbmltcG9ydCB7TGFuZ3VhZ2VNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL2xhbmd1YWdlLm1pZGRsZXdhcmVcIjtcclxuaW1wb3J0IHtSZXF1ZXN0RW5kZWRNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL3JlcXVlc3QtZW5kZWQubWlkZGxld2FyZVwiO1xyXG5pbXBvcnQge1JlcXVlc3RTdGFydGVkTWlkZGxld2FyZX0gZnJvbSBcIi4vcmVzdC1taWRkbGV3YXJlcy9yZXF1ZXN0LXN0YXJ0ZWQubWlkZGxld2FyZVwiO1xyXG5cclxuaW1wb3J0IHtQcm9ncmVzc0NvbnRyb2xsZXJ9IGZyb20gXCIuL3NvY2tldC1jb250cm9sbGVycy9wcm9ncmVzcy5jb250cm9sbGVyXCI7XHJcbmltcG9ydCB7VGVybWluYWxDb250cm9sbGVyfSBmcm9tIFwiLi9zb2NrZXQtY29udHJvbGxlcnMvdGVybWluYWwuY29udHJvbGxlclwiO1xyXG5cclxuaW1wb3J0IHtDb21wcmVzc2lvbk1pZGRsZXdhcmV9IGZyb20gXCIuL3NvY2tldC1taWRkbGV3YXJlcy9jb21wcmVzc2lvbi5taWRkbGV3YXJlXCI7XHJcblxyXG5pbXBvcnQge0RpQ29udGFpbmVyfSBmcm9tIFwiLi91dGlsaXRpZXMvZGktY29udGFpbmVyXCI7XHJcbmltcG9ydCB7RW1wdHlKb2J9IGZyb20gXCIuL3V0aWxpdGllcy9lbXB0eS1qb2JcIjtcclxuaW1wb3J0IHtkaUNvbnRhaW5lcnMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc1R5cGUsIHByZXBhcmVVcmxFbXB0eSwgdmFsdWVUb1Byb21pc2UsIGdldERpck5hbWV9IGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCB7c2V0dXBTdGF0aWN9IGZyb20gXCIuL3N0YXRpY1wiO1xyXG5pbXBvcnQge2NvbW1hbmRzfSBmcm9tIFwiLi9jb21tYW5kc1wiO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIEZpbHRlclByZWRpY2F0ZSxcclxuICAgIGlzTnVsbE9yVW5kZWZpbmVkLFxyXG4gICAgaXNEZWZpbmVkLFxyXG4gICAgZ2V0VHlwZSxcclxuICAgIGlzT2JqZWN0LFxyXG4gICAgaXNBcnJheSxcclxuICAgIGlzQnVmZmVyLFxyXG4gICAgaXNCb29sZWFuLFxyXG4gICAgaXNEYXRlLFxyXG4gICAgaXNQcmltaXRpdmUsXHJcbiAgICBpc1N0cmluZyxcclxuICAgIGlzRnVuY3Rpb24sXHJcbiAgICBpc0NvbnN0cnVjdG9yLFxyXG4gICAgaXNUeXBlLFxyXG4gICAgaXNJbnRlcmZhY2UsXHJcbiAgICB1Y0ZpcnN0LFxyXG4gICAgbGNGaXJzdCxcclxuICAgIGlzT2JqZWN0SWQsXHJcbiAgICBmaXJzdEl0ZW0sXHJcbiAgICBsYXN0SXRlbSxcclxuICAgIHJlZ3JvdXAsXHJcbiAgICB1bmlxdWVJdGVtcyxcclxuICAgIGdldFZhbHVlLFxyXG4gICAgZ3JvdXBCeSxcclxuICAgIGNvbnZlcnRWYWx1ZSxcclxuICAgIHRvSW1hZ2UsXHJcbiAgICBidWZmZXJUb1N0cmVhbSxcclxuICAgIHN0cmVhbVRvQnVmZmVyLFxyXG4gICAgY29weVN0cmVhbSxcclxuICAgIG1rZGlyUmVjdXJzaXZlLFxyXG4gICAgZGVsZXRlRmlsZSxcclxuICAgIHJlYWRGaWxlLFxyXG4gICAgcmVhZEFuZERlbGV0ZUZpbGUsXHJcbiAgICB3cml0ZUZpbGUsXHJcbiAgICB2YWx1ZVRvUHJvbWlzZSxcclxuICAgIHByb21pc2VUaW1lb3V0LFxyXG4gICAgZ2V0Q29uc3RydWN0b3JOYW1lLFxyXG4gICAgZ2V0RnVuY3Rpb25QYXJhbXMsXHJcbiAgICBnZXRGaWxlTmFtZSxcclxuICAgIGdldEV4dGVuc2lvbixcclxuICAgIGNyZWF0ZUlkU3RyaW5nLFxyXG4gICAgaWRUb1N0cmluZyxcclxuICAgIGNyZWF0ZVRyYW5zZm9ybWVyLFxyXG4gICAgYnJvYWRjYXN0LFxyXG4gICAgcmFuZCxcclxuICAgIHJhbmRvbSxcclxuICAgIG11bHRpU3Vic2NyaXB0aW9uLFxyXG4gICAgb2JzZXJ2YWJsZUZyb21GdW5jdGlvbixcclxuICAgIHBhZExlZnQsXHJcbiAgICBwYWRSaWdodCxcclxuICAgIGNhbWVsQ2FzZVRvRGFzaCxcclxuICAgIGRlbGV0ZUZyb21CdWNrZXQsXHJcbiAgICBmaWx0ZXIsXHJcbiAgICBjb3B5LFxyXG4gICAgYXNzaWduLFxyXG4gICAgbWQ1LFxyXG4gICAgcnVuQ29tbWFuZCxcclxuICAgIENvbnNvbGVDb2xvcixcclxuICAgIElKc29uQ29sb3JzLFxyXG4gICAgY29sb3JpemUsXHJcbiAgICBqc29uSGlnaGxpZ2h0LFxyXG4gICAgcmVwbGFjZVNwZWNpYWxDaGFycyxcclxuICAgIHJlZ2V4RXNjYXBlLFxyXG4gICAgZmxhdHRlbixcclxuICAgIHdyYXBFcnJvcixcclxuICAgIGdldERpck5hbWUsXHJcbiAgICBwcmVwYXJlVXJsLFxyXG4gICAgcHJlcGFyZVVybFNsYXNoLFxyXG4gICAgcHJlcGFyZVVybEVtcHR5LFxyXG4gICAgZmlsZVR5cGVGcm9tQnVmZmVyLFxyXG4gICAgZmlsZVR5cGVGcm9tU3RyZWFtXHJcbn0gZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCB7SXNGaWxlLCBJc09iamVjdElkfSBmcm9tIFwiLi92YWxpZGF0b3JzXCI7XHJcblxyXG5leHBvcnQge1xyXG4gICAgRklYVFVSRSxcclxuICAgIEpPQixcclxuICAgIFRFUk1JTkFMX0NPTU1BTkQsXHJcbiAgICBFWFBSRVNTLFxyXG4gICAgSFRUUF9TRVJWRVIsXHJcbiAgICBTT0NLRVRfU0VSVkVSLFxyXG4gICAgU09DS0VUX0NPTlRST0xMRVJTLFxyXG4gICAgUEFSQU1FVEVSLFxyXG4gICAgRElfQ09OVEFJTkVSLFxyXG4gICAgT1BFTkFQSV9WQUxJREFUSU9OLFxyXG4gICAgVHlwZSxcclxuICAgIEZhY3RvcnlQcm92aWRlcixcclxuICAgIElEZXBlbmRlbmN5Q29udGFpbmVyLFxyXG4gICAgQ2xhc3NCYXNlZFByb3ZpZGVyLFxyXG4gICAgVmFsdWVCYXNlZFByb3ZpZGVyLFxyXG4gICAgRmFjdG9yeUJhc2VkUHJvdmlkZXIsXHJcbiAgICBUb2tlbkJhc2VkUHJvdmlkZXIsXHJcbiAgICBTeXJpbmdlUHJvdmlkZXIsXHJcbiAgICBQcm92aWRlcixcclxuICAgIENvbnN0cnVjdG9yLFxyXG4gICAgSW5mZXJHZW5lcmljLFxyXG4gICAgUGlja01hdGNoaW5nLFxyXG4gICAgT21pdEZpcnN0QXJnLFxyXG4gICAgSU1hdGNoRmllbGQsXHJcbiAgICBJUHJvamVjdE9wdGlvbnMsXHJcbiAgICBJVW53aW5kT3B0aW9ucyxcclxuICAgIElGaXh0dXJlLFxyXG4gICAgSUZpeHR1cmVPdXRwdXQsXHJcbiAgICBTY2hlbWFDb252ZXJ0ZXIsXHJcbiAgICBPcGVuQXBpVmFsaWRhdGlvbixcclxuICAgIFBhcmFtUmVzb2x2ZXIsXHJcbiAgICBQYXJhbWV0ZXIsXHJcbiAgICBTb2NrZXRQYXJhbSxcclxuICAgIFNvY2tldFBhcmFtcyxcclxuICAgIElTb2NrZXRNZXNzYWdlLFxyXG4gICAgSU1lc3NhZ2VCcmlkZ2UsXHJcbiAgICBJSm9iLFxyXG4gICAgSUpvYlRhc2ssXHJcbiAgICBKb2JQYXJhbXMsXHJcbiAgICBKb2JTY2hlZHVsZVJhbmdlLFxyXG4gICAgSm9iU2NoZWR1bGVUaW1lLFxyXG4gICAgSVRlcm1pbmFsRmlsZSxcclxuICAgIElUZXJtaW5hbCxcclxuICAgIElUZXJtaW5hbENvbW1hbmQsXHJcbiAgICBJUHJvZ3Jlc3MsXHJcbiAgICBJQXNzZXRDcm9wSW5mbyxcclxuICAgIElBc3NldE1ldGEsXHJcbiAgICBJQXNzZXRJbWFnZVBhcmFtcyxcclxuICAgIElBc3NldCxcclxuICAgIElMYXp5QXNzZXQsXHJcbiAgICBJVXNlcixcclxuICAgIElDbGllbnRTb2NrZXQsXHJcbiAgICBJUmVxdWVzdEJhc2UsXHJcbiAgICBJUmVxdWVzdCxcclxuICAgIElHYWxsZXJ5SW1hZ2UsXHJcbiAgICBJR2FsbGVyeVNpemUsXHJcbiAgICBJR2FsbGVyeUltYWdlSGFuZGxlcixcclxuICAgIElUcmFuc2xhdGlvbnMsXHJcbiAgICBJUGFnaW5hdGlvbk1ldGEsXHJcbiAgICBJUGFnaW5hdGlvbkJhc2UsXHJcbiAgICBJUGFnaW5hdGlvbixcclxuICAgIElQYWdpbmF0aW9uUGFyYW1zLFxyXG4gICAgRm9udEZvcm1hdCxcclxuICAgIElGaWxlVHlwZSxcclxuICAgIFJvdXRpbmdPcHRpb25zLFxyXG4gICAgU29ja2V0T3B0aW9ucyxcclxuICAgIElCYWNrZW5kQ29uZmlnXHJcbn0gZnJvbSBcIi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5leHBvcnQge0Fzc2V0UHJvY2Vzc29yfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3NldC1wcm9jZXNzb3JcIjtcclxuZXhwb3J0IHtBc3NldFJlc29sdmVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3NldC1yZXNvbHZlclwiO1xyXG5leHBvcnQge0Fzc2V0c30gZnJvbSBcIi4vc2VydmljZXMvYXNzZXRzXCI7XHJcbmV4cG9ydCB7QmFja2VuZFByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9iYWNrZW5kLXByb3ZpZGVyXCI7XHJcbmV4cG9ydCB7Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL2NhY2hlXCI7XHJcbmV4cG9ydCB7Q2FjaGVQcm9jZXNzb3J9IGZyb20gXCIuL3NlcnZpY2VzL2NhY2hlLXByb2Nlc3NvclwiO1xyXG5leHBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb25cIjtcclxuZXhwb3J0IHtFbmRwb2ludFByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9lbmRwb2ludC1wcm92aWRlclwiO1xyXG5leHBvcnQge0ZpeHR1cmVzfSBmcm9tIFwiLi9zZXJ2aWNlcy9maXh0dXJlc1wiO1xyXG5leHBvcnQge0dhbGxlcnl9IGZyb20gXCIuL3NlcnZpY2VzL2dhbGxlcnlcIjtcclxuZXhwb3J0IHtHYWxsZXJ5Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL2dhbGxlcnktY2FjaGVcIjtcclxuZXhwb3J0IHtJZEdlbmVyYXRvcn0gZnJvbSBcIi4vc2VydmljZXMvaWQtZ2VuZXJhdG9yXCI7XHJcbmV4cG9ydCB7Sm9iTWFuYWdlcn0gZnJvbSBcIi4vc2VydmljZXMvam9iLW1hbmFnZXJcIjtcclxuZXhwb3J0IHtMYXp5QXNzZXRzfSBmcm9tIFwiLi9zZXJ2aWNlcy9sYXp5LWFzc2V0c1wiO1xyXG5leHBvcnQge0xvZ2dlcn0gZnJvbSBcIi4vc2VydmljZXMvbG9nZ2VyXCI7XHJcbmV4cG9ydCB7TWFpbFNlbmRlcn0gZnJvbSBcIi4vc2VydmljZXMvbWFpbC1zZW5kZXJcIjtcclxuZXhwb3J0IHtNZW1vcnlDYWNoZX0gZnJvbSBcIi4vc2VydmljZXMvbWVtb3J5LWNhY2hlXCI7XHJcbmV4cG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL3NlcnZpY2VzL21vbmdvLWNvbm5lY3RvclwiO1xyXG5leHBvcnQge09wZW5BcGl9IGZyb20gXCIuL3NlcnZpY2VzL29wZW4tYXBpXCI7XHJcbmV4cG9ydCB7UHJvZ3Jlc3Nlc30gZnJvbSBcIi4vc2VydmljZXMvcHJvZ3Jlc3Nlc1wiO1xyXG5leHBvcnQge1RlbXBsYXRlUmVuZGVyZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3RlbXBsYXRlLXJlbmRlcmVyXCI7XHJcbmV4cG9ydCB7VGVybWluYWxNYW5hZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy90ZXJtaW5hbC1tYW5hZ2VyXCI7XHJcbmV4cG9ydCB7VG9rZW5HZW5lcmF0b3J9IGZyb20gXCIuL3NlcnZpY2VzL3Rva2VuLWdlbmVyYXRvclwiO1xyXG5leHBvcnQge1RyYW5zbGF0aW9uUHJvdmlkZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXByb3ZpZGVyXCI7XHJcbmV4cG9ydCB7VHJhbnNsYXRvcn0gZnJvbSBcIi4vc2VydmljZXMvdHJhbnNsYXRvclwiO1xyXG5leHBvcnQge1VzZXJNYW5hZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy91c2VyLW1hbmFnZXJcIjtcclxuXHJcbmV4cG9ydCB7QXNzZXRJbWFnZVBhcmFtc30gZnJvbSBcIi4vcmVxdWVzdHMvYXNzZXQtaW1hZ2UtcGFyYW1zXCI7XHJcblxyXG5leHBvcnQge0F1dGhDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL2F1dGguY29udHJvbGxlclwiO1xyXG5leHBvcnQge0dhbGxlcnlDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL2dhbGxlcnkuY29udHJvbGxlclwiO1xyXG5cclxuZXhwb3J0IHtFcnJvckhhbmRsZXJNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL2Vycm9yLWhhbmRsZXIubWlkZGxld2FyZVwiO1xyXG5leHBvcnQge0xhbmd1YWdlTWlkZGxld2FyZX0gZnJvbSBcIi4vcmVzdC1taWRkbGV3YXJlcy9sYW5ndWFnZS5taWRkbGV3YXJlXCI7XHJcblxyXG5leHBvcnQge0Jhc2VEb2MsIERvY3VtZW50QXJyYXksIFByaW1pdGl2ZUFycmF5fSBmcm9tIFwiLi91dGlsaXRpZXMvYmFzZS1kb2NcIjtcclxuZXhwb3J0IHtJc0RvY3VtZW50ZWQsIEpzb25SZXNwb25zZSwgUmVzcG9uc2VUeXBlfSBmcm9tIFwiLi91dGlsaXRpZXMvZGVjb3JhdG9yc1wiO1xyXG5leHBvcnQge0xhenlBc3NldEdlbmVyYXRvcn0gZnJvbSBcIi4vdXRpbGl0aWVzL2xhenktYXNzZXQtZ2VuZXJhdG9yXCI7XHJcbmV4cG9ydCB7XHJcbiAgICBSZXNvbHZlRW50aXR5LFxyXG4gICAgcGFnaW5hdGVBZ2dyZWdhdGlvbnMsXHJcbiAgICBoeWRyYXRlUG9wdWxhdGVkLFxyXG4gICAgdW53aW5kU3RhZ2UsXHJcbiAgICBwcm9qZWN0U3RhZ2UsXHJcbiAgICBtYXRjaEZpZWxkU3RhZ2VzLFxyXG4gICAgbWF0Y2hGaWVsZCxcclxuICAgIG1hdGNoU3RhZ2UsXHJcbiAgICBsZXRzTG9va3VwU3RhZ2UsXHJcbiAgICBsb29rdXBTdGFnZXMsXHJcbiAgICBwYWdpbmF0ZSxcclxuICAgIGluamVjdFNlcnZpY2VzLFxyXG4gICAgc2VydmljZVxyXG59IGZyb20gXCIuL3V0aWxpdGllcy9tb25nb29zZVwiO1xyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVVc2VyKHJlcTogSVJlcXVlc3QpOiBQcm9taXNlPElVc2VyPiB7XHJcbiAgICBpZiAocmVxLnVzZXIpIHJldHVybiByZXEudXNlcjtcclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHJlcS5jb250YWluZXI7XHJcbiAgICBjb25zdCBhdXRoID0gcmVxLmhlYWRlcihcIkF1dGhvcml6YXRpb25cIikgfHwgXCJcIjtcclxuICAgIGxldCBwYXlsb2FkID0gbnVsbDtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gY29udGFpbmVyLnJlc29sdmUoQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgcGF5bG9hZCA9IHdlYlRva2VuLnZlcmlmeShhdXRoLnNwbGl0KFwiIFwiKVsxXSwgY29uZmlnLnJlc29sdmUoXCJqd3RTZWNyZXRcIikpIGFzIGFueTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKDQwMSwgYEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gKCR7ZS5tZXNzYWdlfSlgKTtcclxuICAgIH1cclxuICAgIGlmICghcGF5bG9hZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDAxLCBgQXV0aGVudGljYXRpb24gZmFpbGVkLiAoTWF5YmUgaW52YWxpZCB0b2tlbilgKTtcclxuICAgIH1cclxuICAgIHJlcS51c2VyID0gYXdhaXQgY29udGFpbmVyLnJlc29sdmUoVXNlck1hbmFnZXIpLmdldEJ5SWQocGF5bG9hZC5pZCk7XHJcbiAgICByZXR1cm4gcmVxLnVzZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTZXJ2aWNlcygpOiBJRGVwZW5kZW5jeUNvbnRhaW5lciB7XHJcbiAgICAvLyBMaXN0IG9mIHBhcmFtZXRlcnNcclxuICAgIGNvbnN0IGRpck5hbWUgPSBnZXREaXJOYW1lKCk7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBbXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInNlcnZpY2VOYW1lXCIsIFwiQmFja2VuZFwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwic2VydmljZVBhc3N3b3JkXCIsIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KSksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInNlcnZpY2VVcmxcIiwgXCJodHRwOi8vbG9jYWxob3N0OjMwMDBcIiwgKHZhbHVlLCBoZWxwZXIpID0+IHtcclxuICAgICAgICAgICAgLy8gUmVwbGFjZSBwb3J0IG51bWJlciB0byBlbXB0eSBzdHJpbmdcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gcHJlcGFyZVVybEVtcHR5KGAke3ZhbHVlfWAucmVwbGFjZSgvOlswLTldKyQvLCBcIlwiKSwgaGVscGVyKSBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBoZWxwZXIoXCJhcHBQb3J0XCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gKCFwb3J0IHx8IHBvcnQgPT09IDgwIHx8IHBvcnQgPT09IDQ0MykgPyB1cmwgOiBgJHt1cmx9OiR7cG9ydH1gO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJ0ZW1wbGF0ZXNEaXJcIiwgam9pbihkaXJOYW1lLCBcInRlbXBsYXRlc1wiKSksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImdhbGxlcnlEaXJcIiwgam9pbihkaXJOYW1lLCBcImdhbGxlcnlcIikpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJjYWNoZURpclwiLCBqb2luKGRpck5hbWUsIFwiY2FjaGVcIikpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJkZWZhdWx0TGFuZ3VhZ2VcIiwgXCJlblwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwic210cEhvc3RcIiwgXCJzbXRwLnNlbmRncmlkLm5ldFwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwic210cFBvcnRcIiwgNTg3KSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwic210cFVzZXJcIiwgXCJhcGlrZXlcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInNtdHBQYXNzd29yZFwiLCBcIlwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwibWFpbFNlbmRlckFkZHJlc3NcIiwgXCJpbmZvQHN0ZW15Lmh1XCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJ0cmFuc2xhdGlvbnNUZW1wbGF0ZVwiLCBcImh0dHBzOi8vdHJhbnNsYXRpb24uc2VydmljZS9bbGFuZ11cIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImp3dFNlY3JldFwiLCBcImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSlNVekkxTmlKOVwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwibW9uZ29VcmlcIiwgXCJcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcIm1vbmdvRGJcIiwgXCJub2RlLWJhY2tlbmRcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcIm1vbmdvVXNlclwiLCBudWxsKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwibW9uZ29QYXNzd29yZFwiLCBudWxsKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwibm9kZUVudlwiLCBcInByb2R1Y3Rpb25cIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImFwcFBvcnRcIiwgODApLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJ6bXFQb3J0XCIsIDMwMDApLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJ6bXFCYWNrUG9ydFwiLCAzMTAwKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiem1xUmVtb3RlSG9zdFwiLCBcInRjcDovLzEyNy4wLjAuMVwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiaXNXb3JrZXJcIiwgZmFsc2UpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJtYWluRW5kcG9pbnRcIiwgXCJcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImlkQ2hhcnNcIiwgXCIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImlkU2VwYXJhdG9yXCIsIFwiLVwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiaWRQcmVmaXhcIiwgXCJJRC1cIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImlkUGFydHNcIiwgWzQsIDRdKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwianNvbkxpbWl0XCIsIFwiMjUwbWJcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImpvYlRpbWVvdXRcIiwgNSAqIDYwICogMTAwMCksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImNhY2hlQ29sbGVjdGlvblwiLCBcImNhY2hlXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJsb2dUYWdzXCIsIFtdKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiaWdub3JlZExvZ1RhZ3NcIiwgW10pLFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHBhcmFtZXRlcnMgdG8gcHJvdmlkZXJzXHJcbiAgICBjb25zdCBwYXJhbVByb3ZpZGVycyA9IHBhcmFtcy5tYXAocCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogUEFSQU1FVEVSLFxyXG4gICAgICAgICAgICB1c2VWYWx1ZTogcFxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIExpc3Qgb2Ygc2VydmljZXNcclxuICAgIGNvbnN0IHNlcnZpY2VzID0gW1xyXG4gICAgICAgIEFzc2V0UHJvY2Vzc29yLFxyXG4gICAgICAgIEFzc2V0UmVzb2x2ZXIsXHJcbiAgICAgICAgQXNzZXRzLFxyXG4gICAgICAgIEJhY2tlbmRQcm92aWRlcixcclxuICAgICAgICBDYWNoZSxcclxuICAgICAgICBDYWNoZVByb2Nlc3NvcixcclxuICAgICAgICBDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIEVuZHBvaW50UHJvdmlkZXIsXHJcbiAgICAgICAgRml4dHVyZXMsXHJcbiAgICAgICAgR2FsbGVyeSxcclxuICAgICAgICBHYWxsZXJ5Q2FjaGUsXHJcbiAgICAgICAgSWRHZW5lcmF0b3IsXHJcbiAgICAgICAgSm9iTWFuYWdlcixcclxuICAgICAgICBMYXp5QXNzZXRzLFxyXG4gICAgICAgIExvZ2dlcixcclxuICAgICAgICBNYWlsU2VuZGVyLFxyXG4gICAgICAgIE1lbW9yeUNhY2hlLFxyXG4gICAgICAgIE1vbmdvQ29ubmVjdG9yLFxyXG4gICAgICAgIE9wZW5BcGksXHJcbiAgICAgICAgUHJvZ3Jlc3NlcyxcclxuICAgICAgICBUZW1wbGF0ZVJlbmRlcmVyLFxyXG4gICAgICAgIFRlcm1pbmFsTWFuYWdlcixcclxuICAgICAgICBUb2tlbkdlbmVyYXRvcixcclxuICAgICAgICBUcmFuc2xhdGlvblByb3ZpZGVyLFxyXG4gICAgICAgIFRyYW5zbGF0b3IsXHJcbiAgICAgICAgVXNlck1hbmFnZXJcclxuICAgIF0gYXMgVHlwZTxhbnk+W107XHJcblxyXG4gICAgLy8gQ3JlYXRlIGNvbnRhaW5lclxyXG4gICAgY29uc3QgZGlDb250YWluZXIgPSBuZXcgRGlDb250YWluZXIoY29udGFpbmVyLmNyZWF0ZUNoaWxkQ29udGFpbmVyKCkpO1xyXG4gICAgcGFyYW1Qcm92aWRlcnMuZm9yRWFjaChwcm92aWRlciA9PiB7XHJcbiAgICAgICAgZGlDb250YWluZXIucmVnaXN0ZXIocHJvdmlkZXIucHJvdmlkZSwgcHJvdmlkZXIpO1xyXG4gICAgfSk7XHJcbiAgICBzZXJ2aWNlcy5mb3JFYWNoKHNlcnZpY2UgPT4ge1xyXG4gICAgICAgIGlmICghY29udGFpbmVyLmlzUmVnaXN0ZXJlZChzZXJ2aWNlKSlcclxuICAgICAgICAgICAgZGlDb250YWluZXIucmVnaXN0ZXIoc2VydmljZSwgc2VydmljZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkaUNvbnRhaW5lcjtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwQmFja2VuZChjb25maWc6IElCYWNrZW5kQ29uZmlnLCBwcm92aWRlcnM/OiBQcm92aWRlcjxhbnk+W10sIHBhcmVudD86IElEZXBlbmRlbmN5Q29udGFpbmVyKTogUHJvbWlzZTxJRGVwZW5kZW5jeUNvbnRhaW5lcj4ge1xyXG5cclxuICAgIHByb3ZpZGVycyA9IEFycmF5LmlzQXJyYXkocHJvdmlkZXJzKSA/IHByb3ZpZGVycyA6IFtdO1xyXG4gICAgcGFyZW50ID0gcGFyZW50IHx8IGNyZWF0ZVNlcnZpY2VzKCk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGZpeHR1cmVzXHJcbiAgICBjb25zdCBmaXh0dXJlVHlwZXMgPSAoY29uZmlnLmZpeHR1cmVzIHx8IFtdKTtcclxuICAgIGNvbnN0IGZpeHR1cmVQcm92aWRlcnMgPSBmaXh0dXJlVHlwZXMubWFwKGZpeHR1cmUgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEZJWFRVUkUsXHJcbiAgICAgICAgICAgIHVzZUNsYXNzOiBmaXh0dXJlXHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBwYXJhbXNcclxuICAgIGNvbnN0IHBhcmFtUHJvdmlkZXJzID0gKGNvbmZpZy5wYXJhbXMgfHwgW10pLm1hcChwID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBQQVJBTUVURVIsXHJcbiAgICAgICAgICAgIHVzZVZhbHVlOiBwXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGpvYnNcclxuICAgIGNvbnN0IGpvYlByb3ZpZGVycyA9IFtFbXB0eUpvYiBhcyBUeXBlPElKb2I+XS5jb25jYXQoY29uZmlnLmpvYnMgfHwgW10pLm1hcChqb2JUeXBlID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBKT0IsXHJcbiAgICAgICAgICAgIHVzZVZhbHVlOiBqb2JUeXBlXHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBjb21tYW5kc1xyXG4gICAgY29uc3QgY29tbWFuZFByb3ZpZGVycyA9IGNvbW1hbmRzLmNvbmNhdChjb25maWcuY29tbWFuZHMgfHwgW10pLm1hcChjb21tYW5kVHlwZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogVEVSTUlOQUxfQ09NTUFORCxcclxuICAgICAgICAgICAgdXNlQ2xhc3M6IGNvbW1hbmRUeXBlXHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBESSBjb250YWluZXJcclxuICAgIGNvbnN0IGRpQ29udGFpbmVyID0gcGFyZW50LmNyZWF0ZUNoaWxkQ29udGFpbmVyKCk7XHJcblxyXG4gICAgLy8gU2V0dXAgcmVzdCBBUElcclxuICAgIGNvbnN0IHJlc3RPcHRpb25zOiBSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zID0ge1xyXG4gICAgICAgIHJvdXRlUHJlZml4OiBjb25maWcucm91dGVQcmVmaXggfHwgXCIvYXBpXCIsXHJcbiAgICAgICAgZGVmYXVsdEVycm9ySGFuZGxlcjogZmFsc2UsXHJcbiAgICAgICAgLi4uKGNvbmZpZy5yZXN0T3B0aW9ucyB8fCB7fSlcclxuICAgIH07XHJcbiAgICByZXN0T3B0aW9ucy5jb3JzID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgY3JlZGVudGlhbHM6IHRydWUsXHJcbiAgICAgICAgZXhwb3NlZEhlYWRlcnM6IFtcImNvbnRlbnQtZGlzcG9zaXRpb25cIl0sXHJcbiAgICAgICAgb3JpZ2luOiAob3JpZ2luLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9LCByZXN0T3B0aW9ucy5jb3JzIHx8IHt9KTtcclxuICAgIHJlc3RPcHRpb25zLnJvdXRlUHJlZml4ID0gcmVzdE9wdGlvbnMucm91dGVQcmVmaXggPT0gXCIvXCIgPyBcIlwiIDogcmVzdE9wdGlvbnMucm91dGVQcmVmaXg7XHJcbiAgICByZXN0T3B0aW9ucy5taWRkbGV3YXJlcyA9IFtFcnJvckhhbmRsZXJNaWRkbGV3YXJlLCBDb250YWluZXJNaWRkbGV3YXJlLCBMYW5ndWFnZU1pZGRsZXdhcmUsIFJlcXVlc3RTdGFydGVkTWlkZGxld2FyZSwgUmVxdWVzdEVuZGVkTWlkZGxld2FyZV1cclxuICAgICAgICAuY29uY2F0KHJlc3RPcHRpb25zLm1pZGRsZXdhcmVzIGFzIGFueSB8fCBbXSk7XHJcbiAgICByZXN0T3B0aW9ucy5jb250cm9sbGVycyA9IFtBc3NldHNDb250cm9sbGVyLCBBdXRoQ29udHJvbGxlciwgR2FsbGVyeUNvbnRyb2xsZXIsIFByb2dyZXNzZXNDb250cm9sbGVyLCBUZXJtaW5hbFJlc3RDb250cm9sbGVyXVxyXG4gICAgICAgIC5jb25jYXQocmVzdE9wdGlvbnMuY29udHJvbGxlcnMgYXMgYW55IHx8IFtdKTtcclxuXHJcbiAgICAvLyBTZXR1cCBzb2NrZXQgQVBJXHJcbiAgICBjb25zdCBzb2NrZXRPcHRpb25zOiBTb2NrZXRDb250cm9sbGVyc09wdGlvbnMgPSB7XHJcbiAgICAgICAgY29udGFpbmVyOiB7XHJcbiAgICAgICAgICAgIGdldDxUPihzb21lQ2xhc3M6IFR5cGU8YW55Pik6IFQge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpQ29udGFpbmVyLmdldDxUPihzb21lQ2xhc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi4oY29uZmlnLnNvY2tldE9wdGlvbnMgfHwge30pXHJcbiAgICB9O1xyXG4gICAgc29ja2V0T3B0aW9ucy5taWRkbGV3YXJlcyA9IFtDb21wcmVzc2lvbk1pZGRsZXdhcmVdLmNvbmNhdChzb2NrZXRPcHRpb25zLm1pZGRsZXdhcmVzIGFzIGFueSB8fCBbXSk7XHJcbiAgICBzb2NrZXRPcHRpb25zLmNvbnRyb2xsZXJzID0gW1Byb2dyZXNzQ29udHJvbGxlciwgVGVybWluYWxDb250cm9sbGVyXS5jb25jYXQoc29ja2V0T3B0aW9ucy5jb250cm9sbGVycyBhcyBhbnkgfHwgW10pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBwcm92aWRlcnNcclxuXHJcbiAgICBjb25zdCBhbGxQcm92aWRlcnM6IFByb3ZpZGVyPGFueT5bXSA9IFtdO1xyXG5cclxuICAgIC8vIEFkZCBtdWx0aSB0b2tlbnMgdG8gc3ViIGNvbnRhaW5lclxyXG4gICAgW1BBUkFNRVRFUl0uZm9yRWFjaChwcm92aWRlID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBwYXJlbnQucmVzb2x2ZUFsbChwcm92aWRlKTtcclxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh1c2VWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGFsbFByb3ZpZGVycy5wdXNoKHtwcm92aWRlLCB1c2VWYWx1ZX0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQWRkIG90aGVyIHByb3ZpZGVyc1xyXG4gICAgYWxsUHJvdmlkZXJzLnB1c2goXHJcbiAgICAgICAgLi4uZml4dHVyZVR5cGVzLFxyXG4gICAgICAgIC4uLmZpeHR1cmVQcm92aWRlcnMsXHJcbiAgICAgICAgLi4ucGFyYW1Qcm92aWRlcnMsXHJcbiAgICAgICAgLi4uam9iUHJvdmlkZXJzLFxyXG4gICAgICAgIC4uLmNvbW1hbmRQcm92aWRlcnMsXHJcbiAgICAgICAgLi4ucmVzdE9wdGlvbnMubWlkZGxld2FyZXMgYXMgVHlwZTxhbnk+W10sXHJcbiAgICAgICAgLi4ucmVzdE9wdGlvbnMuY29udHJvbGxlcnMgYXMgVHlwZTxhbnk+W10sXHJcbiAgICAgICAgLi4uc29ja2V0T3B0aW9ucy5taWRkbGV3YXJlcyBhcyBUeXBlPGFueT5bXSxcclxuICAgICAgICAuLi5zb2NrZXRPcHRpb25zLmNvbnRyb2xsZXJzIGFzIFR5cGU8YW55PltdLFxyXG4gICAgICAgIC4uLnByb3ZpZGVycyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEVYUFJFU1MsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IChjb250YWluZXI6IERlcGVuZGVuY3lDb250YWluZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXIucmVzb2x2ZShCYWNrZW5kUHJvdmlkZXIpLmV4cHJlc3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogSFRUUF9TRVJWRVIsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IChjb250YWluZXI6IERlcGVuZGVuY3lDb250YWluZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXIucmVzb2x2ZShCYWNrZW5kUHJvdmlkZXIpLnNlcnZlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBTT0NLRVRfU0VSVkVSLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoY29udGFpbmVyOiBEZXBlbmRlbmN5Q29udGFpbmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyLnJlc29sdmUoQmFja2VuZFByb3ZpZGVyKS5pbztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIClcclxuXHJcbiAgICBhbGxQcm92aWRlcnMuZm9yRWFjaChwcm92aWRlciA9PiB7XHJcbiAgICAgICAgaWYgKGlzVHlwZShwcm92aWRlcikpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5pc1JlZ2lzdGVyZWQocHJvdmlkZXIpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGRpQ29udGFpbmVyLnJlZ2lzdGVyKHByb3ZpZGVyLCBwcm92aWRlcik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlDb250YWluZXIucmVnaXN0ZXIocHJvdmlkZXIucHJvdmlkZSwgcHJvdmlkZXIgYXMgYW55KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRpQ29udGFpbmVyLnJlZ2lzdGVyKERJX0NPTlRBSU5FUiwge1xyXG4gICAgICAgIHVzZVZhbHVlOiBkaUNvbnRhaW5lclxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlDb250YWluZXIucmVnaXN0ZXIoT1BFTkFQSV9WQUxJREFUSU9OLCB7XHJcbiAgICAgICAgdXNlVmFsdWU6IGNvbmZpZy5jdXN0b21WYWxpZGF0aW9uIHx8ICgoKSA9PiBudWxsKVxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlDb250YWluZXJzLmFwcENvbnRhaW5lciA9IGRpQ29udGFpbmVycy5hcHBDb250YWluZXIgfHwgZGlDb250YWluZXI7XHJcblxyXG4gICAgLy8gQXV0aGVudGljYXRpb25cclxuICAgIHJlc3RPcHRpb25zLmF1dGhvcml6YXRpb25DaGVja2VyID0gYXN5bmMgKGFjdGlvbjogQWN0aW9uLCByb2xlczogYW55W10pID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgcmVzb2x2ZVVzZXIoYWN0aW9uLnJlcXVlc3QpO1xyXG4gICAgICAgIGlmICghdXNlcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKDQwMSwgXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIChVc2VyIGNhbid0IGJlIGZvdW5kLilcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVzZXJSb2xlcyA9IEFycmF5LmlzQXJyYXkodXNlci5yb2xlcykgPyB1c2VyLnJvbGVzIDogW107XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm9sZXMpICYmIHJvbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGxhc3RFcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJvbGUgb2Ygcm9sZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJvbGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF3YWl0IHZhbHVlVG9Qcm9taXNlKHJvbGUodXNlciwgYWN0aW9uKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1c2VyUm9sZXMuaW5kZXhPZihyb2xlKSA+PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9ICFsYXN0RXJyb3IgfHwgKCFsYXN0RXJyb3IubWVzc2FnZSAmJiAhaXNTdHJpbmcobGFzdEVycm9yKSlcclxuICAgICAgICAgICAgICAgID8gXCJVc2VyIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyByZXNvdXJjZVwiXHJcbiAgICAgICAgICAgICAgICA6IGxhc3RFcnJvci5tZXNzYWdlIHx8IGxhc3RFcnJvcjtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDEsIGBBdXRoZW50aWNhdGlvbiBmYWlsZWQuICgke2Vycm9yfSlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgcmVzdE9wdGlvbnMuY3VycmVudFVzZXJDaGVja2VyID0gYXN5bmMgKGFjdGlvbjogQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc29sdmVVc2VyKGFjdGlvbi5yZXF1ZXN0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8gRmluYWwgc2V0dXBcclxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBkaUNvbnRhaW5lci5yZXNvbHZlKENvbmZpZ3VyYXRpb24pO1xyXG4gICAgY29uc3QgYnAgPSBkaUNvbnRhaW5lci5yZXNvbHZlKEJhY2tlbmRQcm92aWRlcik7XHJcblxyXG4gICAgaWYgKGNvbmZpZy5yZXN0T3B0aW9ucykge1xyXG4gICAgICAgIGJwLmV4cHJlc3MudXNlKGJvZHlQYXJzZXIuanNvbih7XHJcbiAgICAgICAgICAgIGxpbWl0OiBjb25maWd1cmF0aW9uLmhhc1BhcmFtKFwianNvbkxpbWl0XCIpXHJcbiAgICAgICAgICAgICAgICA/IGNvbmZpZ3VyYXRpb24ucmVzb2x2ZShcImpzb25MaW1pdFwiKVxyXG4gICAgICAgICAgICAgICAgOiBcIjI1MG1iXCJcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdXNlUm91dGluZ0NvbnRhaW5lcihkaUNvbnRhaW5lcik7XHJcbiAgICAgICAgdXNlRXhwcmVzc1NlcnZlcihicC5leHByZXNzLCByZXN0T3B0aW9ucyk7XHJcbiAgICAgICAgLy8gU2V0dXAgcmVzdCBhaSBkb2NzXHJcbiAgICAgICAgbGV0IG9wZW5BcGk6IE9wZW5BcGkgPSBudWxsXHJcbiAgICAgICAgYnAuZXhwcmVzcy5nZXQoXCIvYXBpLWRvY3NcIiwgKHJlcSwgcmVzKSA9PiB7XHJcbiAgICAgICAgICAgIG9wZW5BcGkgPSBvcGVuQXBpIHx8IGRpQ29udGFpbmVyLmdldChPcGVuQXBpKTtcclxuICAgICAgICAgICAgcmVzLmhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIilcclxuICAgICAgICAgICAgICAgIC5zdGF0dXMoMjAwKVxyXG4gICAgICAgICAgICAgICAgLmVuZChvcGVuQXBpLmFwaURvY3NTdHIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRpQ29udGFpbmVyLnJlZ2lzdGVyKFNPQ0tFVF9DT05UUk9MTEVSUywge1xyXG4gICAgICAgIHVzZVZhbHVlOiBuZXcgU29ja2V0Q29udHJvbGxlcnMoe1xyXG4gICAgICAgICAgICBpbzogYnAuaW8sXHJcbiAgICAgICAgICAgIC4uLnNvY2tldE9wdGlvbnMsXHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENvbm5lY3QgdG8gbW9uZ28gaWYgbmVjZXNzYXJ5XHJcbiAgICBpZiAoY29uZmlndXJhdGlvbi5oYXNQYXJhbShcIm1vbmdvVXJpXCIpICYmIGNvbmZpZ3VyYXRpb24ucmVzb2x2ZShcIm1vbmdvVXJpXCIpKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW5nIHRvIE1vbmdvREIuLi5cIik7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdG9yID0gZGlDb250YWluZXIucmVzb2x2ZShNb25nb0Nvbm5lY3Rvcik7XHJcbiAgICAgICAgYXdhaXQgY29ubmVjdG9yLmNvbm5lY3QoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gTW9uZ29EQi5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgc2V0dXBTdGF0aWMoY29uZmlnLnJvb3RGb2xkZXIsIGRpQ29udGFpbmVyKTtcclxuXHJcbiAgICByZXR1cm4gZGlDb250YWluZXI7XHJcbn1cclxuIl19
|
|
369
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFMUIsT0FBTyxRQUFRLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxTQUFTLEVBQXNCLE1BQU0sVUFBVSxDQUFDO0FBQ3hELE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxJQUFJLG1CQUFtQixFQUNuQyxnQkFBZ0IsRUFDbkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQTJCLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFL0UsT0FBTyxFQUNILFlBQVksRUFDWixPQUFPLEVBQ1AsT0FBTyxFQUNQLFdBQVcsRUFRWCxHQUFHLEVBQ0gsa0JBQWtCLEVBQ2xCLFNBQVMsRUFDVCxTQUFTLEVBRVQsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFFbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9B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TSxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RCxNQUFNLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7S0FDckQ7SUFFRCxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRWxELE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2pvaW59IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCBib2R5UGFyc2VyIGZyb20gXCJib2R5LXBhcnNlclwiO1xyXG5pbXBvcnQgd2ViVG9rZW4gZnJvbSBcImpzb253ZWJ0b2tlblwiO1xyXG5pbXBvcnQge2NvbnRhaW5lciwgRGVwZW5kZW5jeUNvbnRhaW5lcn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBBY3Rpb24sXHJcbiAgICBIdHRwRXJyb3IsXHJcbiAgICBSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zLFxyXG4gICAgdXNlQ29udGFpbmVyIGFzIHVzZVJvdXRpbmdDb250YWluZXIsXHJcbiAgICB1c2VFeHByZXNzU2VydmVyXHJcbn0gZnJvbSBcInJvdXRpbmctY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtTb2NrZXRDb250cm9sbGVyc09wdGlvbnMsIFNvY2tldENvbnRyb2xsZXJzfSBmcm9tIFwic29ja2V0LWNvbnRyb2xsZXJzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgRElfQ09OVEFJTkVSLFxyXG4gICAgRVhQUkVTUyxcclxuICAgIEZJWFRVUkUsXHJcbiAgICBIVFRQX1NFUlZFUixcclxuICAgIElCYWNrZW5kQ29uZmlnLFxyXG4gICAgSURlcGVuZGVuY3lDb250YWluZXIsXHJcbiAgICBJSm9iLFxyXG4gICAgSVBhZ2luYXRpb25QYXJhbXMsXHJcbiAgICBJUmVxdWVzdCxcclxuICAgIElUZXJtaW5hbENvbW1hbmQsXHJcbiAgICBJVXNlcixcclxuICAgIEpPQixcclxuICAgIE9QRU5BUElfVkFMSURBVElPTixcclxuICAgIFBhcmFtZXRlcixcclxuICAgIFBBUkFNRVRFUixcclxuICAgIFByb3ZpZGVyLFxyXG4gICAgU09DS0VUX1NFUlZFUixcclxuICAgIFNPQ0tFVF9DT05UUk9MTEVSUyxcclxuICAgIFRFUk1JTkFMX0NPTU1BTkQsXHJcbiAgICBUeXBlXHJcbn0gZnJvbSBcIi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5pbXBvcnQge0Fzc2V0UHJvY2Vzc29yfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3NldC1wcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtBc3NldFJlc29sdmVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3NldC1yZXNvbHZlclwiO1xyXG5pbXBvcnQge0Fzc2V0c30gZnJvbSBcIi4vc2VydmljZXMvYXNzZXRzXCI7XHJcbmltcG9ydCB7QmFja2VuZFByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9iYWNrZW5kLXByb3ZpZGVyXCI7XHJcbmltcG9ydCB7Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL2NhY2hlXCI7XHJcbmltcG9ydCB7Q2FjaGVQcm9jZXNzb3J9IGZyb20gXCIuL3NlcnZpY2VzL2NhY2hlLXByb2Nlc3NvclwiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtFbmRwb2ludFByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9lbmRwb2ludC1wcm92aWRlclwiO1xyXG5pbXBvcnQge0ZpeHR1cmVzfSBmcm9tIFwiLi9zZXJ2aWNlcy9maXh0dXJlc1wiO1xyXG5pbXBvcnQge0dhbGxlcnl9IGZyb20gXCIuL3NlcnZpY2VzL2dhbGxlcnlcIjtcclxuaW1wb3J0IHtHYWxsZXJ5Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL2dhbGxlcnktY2FjaGVcIjtcclxuaW1wb3J0IHtJZEdlbmVyYXRvcn0gZnJvbSBcIi4vc2VydmljZXMvaWQtZ2VuZXJhdG9yXCI7XHJcbmltcG9ydCB7Sm9iTWFuYWdlcn0gZnJvbSBcIi4vc2VydmljZXMvam9iLW1hbmFnZXJcIjtcclxuaW1wb3J0IHtMYXp5QXNzZXRzfSBmcm9tIFwiLi9zZXJ2aWNlcy9sYXp5LWFzc2V0c1wiO1xyXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4vc2VydmljZXMvbG9nZ2VyXCI7XHJcbmltcG9ydCB7TWFpbFNlbmRlcn0gZnJvbSBcIi4vc2VydmljZXMvbWFpbC1zZW5kZXJcIjtcclxuaW1wb3J0IHtNZW1vcnlDYWNoZX0gZnJvbSBcIi4vc2VydmljZXMvbWVtb3J5LWNhY2hlXCI7XHJcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL3NlcnZpY2VzL21vbmdvLWNvbm5lY3RvclwiO1xyXG5pbXBvcnQge09wZW5BcGl9IGZyb20gXCIuL3NlcnZpY2VzL29wZW4tYXBpXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3Nlc30gZnJvbSBcIi4vc2VydmljZXMvcHJvZ3Jlc3Nlc1wiO1xyXG5pbXBvcnQge1RlbXBsYXRlUmVuZGVyZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3RlbXBsYXRlLXJlbmRlcmVyXCI7XHJcbmltcG9ydCB7VGVybWluYWxNYW5hZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy90ZXJtaW5hbC1tYW5hZ2VyXCI7XHJcbmltcG9ydCB7VG9rZW5HZW5lcmF0b3J9IGZyb20gXCIuL3NlcnZpY2VzL3Rva2VuLWdlbmVyYXRvclwiO1xyXG5pbXBvcnQge1RyYW5zbGF0aW9uUHJvdmlkZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXByb3ZpZGVyXCI7XHJcbmltcG9ydCB7VHJhbnNsYXRvcn0gZnJvbSBcIi4vc2VydmljZXMvdHJhbnNsYXRvclwiO1xyXG5pbXBvcnQge1VzZXJNYW5hZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy91c2VyLW1hbmFnZXJcIjtcclxuXHJcbmltcG9ydCB7QXNzZXRzQ29udHJvbGxlcn0gZnJvbSBcIi4vcmVzdC1jb250cm9sbGVycy9hc3NldHMuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge0F1dGhDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL2F1dGguY29udHJvbGxlclwiO1xyXG5pbXBvcnQge0dhbGxlcnlDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL2dhbGxlcnkuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge1Byb2dyZXNzZXNDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL3Byb2dyZXNzZXMuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge1Rlcm1pbmFsQ29udHJvbGxlciBhcyBUZXJtaW5hbFJlc3RDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL3Rlcm1pbmFsLmNvbnRyb2xsZXJcIjtcclxuXHJcbmltcG9ydCB7RXJyb3JIYW5kbGVyTWlkZGxld2FyZX0gZnJvbSBcIi4vcmVzdC1taWRkbGV3YXJlcy9lcnJvci1oYW5kbGVyLm1pZGRsZXdhcmVcIjtcclxuaW1wb3J0IHtDb250YWluZXJNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL2NvbnRhaW5lci5taWRkbGV3YXJlXCI7XHJcbmltcG9ydCB7TGFuZ3VhZ2VNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL2xhbmd1YWdlLm1pZGRsZXdhcmVcIjtcclxuaW1wb3J0IHtSZXF1ZXN0RW5kZWRNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL3JlcXVlc3QtZW5kZWQubWlkZGxld2FyZVwiO1xyXG5pbXBvcnQge1JlcXVlc3RTdGFydGVkTWlkZGxld2FyZX0gZnJvbSBcIi4vcmVzdC1taWRkbGV3YXJlcy9yZXF1ZXN0LXN0YXJ0ZWQubWlkZGxld2FyZVwiO1xyXG5cclxuaW1wb3J0IHtQcm9ncmVzc0NvbnRyb2xsZXJ9IGZyb20gXCIuL3NvY2tldC1jb250cm9sbGVycy9wcm9ncmVzcy5jb250cm9sbGVyXCI7XHJcbmltcG9ydCB7VGVybWluYWxDb250cm9sbGVyfSBmcm9tIFwiLi9zb2NrZXQtY29udHJvbGxlcnMvdGVybWluYWwuY29udHJvbGxlclwiO1xyXG5cclxuaW1wb3J0IHtDb21wcmVzc2lvbk1pZGRsZXdhcmV9IGZyb20gXCIuL3NvY2tldC1taWRkbGV3YXJlcy9jb21wcmVzc2lvbi5taWRkbGV3YXJlXCI7XHJcblxyXG5pbXBvcnQge0RpQ29udGFpbmVyfSBmcm9tIFwiLi91dGlsaXRpZXMvZGktY29udGFpbmVyXCI7XHJcbmltcG9ydCB7RW1wdHlKb2J9IGZyb20gXCIuL3V0aWxpdGllcy9lbXB0eS1qb2JcIjtcclxuaW1wb3J0IHtkaUNvbnRhaW5lcnMsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc1R5cGUsIHByZXBhcmVVcmxFbXB0eSwgdmFsdWVUb1Byb21pc2UsIGdldERpck5hbWV9IGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCB7c2V0dXBTdGF0aWN9IGZyb20gXCIuL3N0YXRpY1wiO1xyXG5pbXBvcnQge2NvbW1hbmRzfSBmcm9tIFwiLi9jb21tYW5kc1wiO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIEZpbHRlclByZWRpY2F0ZSxcclxuICAgIGlzTnVsbE9yVW5kZWZpbmVkLFxyXG4gICAgaXNEZWZpbmVkLFxyXG4gICAgZ2V0VHlwZSxcclxuICAgIGlzT2JqZWN0LFxyXG4gICAgaXNBcnJheSxcclxuICAgIGlzQnVmZmVyLFxyXG4gICAgaXNCb29sZWFuLFxyXG4gICAgaXNEYXRlLFxyXG4gICAgaXNQcmltaXRpdmUsXHJcbiAgICBpc1N0cmluZyxcclxuICAgIGlzRnVuY3Rpb24sXHJcbiAgICBpc0NvbnN0cnVjdG9yLFxyXG4gICAgaXNUeXBlLFxyXG4gICAgaXNJbnRlcmZhY2UsXHJcbiAgICB1Y0ZpcnN0LFxyXG4gICAgbGNGaXJzdCxcclxuICAgIGlzT2JqZWN0SWQsXHJcbiAgICBmaXJzdEl0ZW0sXHJcbiAgICBsYXN0SXRlbSxcclxuICAgIHJlZ3JvdXAsXHJcbiAgICB1bmlxdWVJdGVtcyxcclxuICAgIGdldFZhbHVlLFxyXG4gICAgZ3JvdXBCeSxcclxuICAgIGNvbnZlcnRWYWx1ZSxcclxuICAgIHRvSW1hZ2UsXHJcbiAgICBidWZmZXJUb1N0cmVhbSxcclxuICAgIHN0cmVhbVRvQnVmZmVyLFxyXG4gICAgY29weVN0cmVhbSxcclxuICAgIG1rZGlyUmVjdXJzaXZlLFxyXG4gICAgZGVsZXRlRmlsZSxcclxuICAgIHJlYWRGaWxlLFxyXG4gICAgcmVhZEFuZERlbGV0ZUZpbGUsXHJcbiAgICB3cml0ZUZpbGUsXHJcbiAgICB2YWx1ZVRvUHJvbWlzZSxcclxuICAgIHByb21pc2VUaW1lb3V0LFxyXG4gICAgZ2V0Q29uc3RydWN0b3JOYW1lLFxyXG4gICAgZ2V0RnVuY3Rpb25QYXJhbXMsXHJcbiAgICBnZXRGaWxlTmFtZSxcclxuICAgIGdldEV4dGVuc2lvbixcclxuICAgIGNyZWF0ZUlkU3RyaW5nLFxyXG4gICAgaWRUb1N0cmluZyxcclxuICAgIGNyZWF0ZVRyYW5zZm9ybWVyLFxyXG4gICAgYnJvYWRjYXN0LFxyXG4gICAgcmFuZCxcclxuICAgIHJhbmRvbSxcclxuICAgIG11bHRpU3Vic2NyaXB0aW9uLFxyXG4gICAgb2JzZXJ2YWJsZUZyb21GdW5jdGlvbixcclxuICAgIHBhZExlZnQsXHJcbiAgICBwYWRSaWdodCxcclxuICAgIGNhbWVsQ2FzZVRvRGFzaCxcclxuICAgIGd6aXBQcm9taXNlZCxcclxuICAgIGd1bnppcFByb21pc2VkLFxyXG4gICAgZGVsZXRlRnJvbUJ1Y2tldCxcclxuICAgIGZpbHRlcixcclxuICAgIGNvcHksXHJcbiAgICBhc3NpZ24sXHJcbiAgICBtZDUsXHJcbiAgICBydW5Db21tYW5kLFxyXG4gICAgQ29uc29sZUNvbG9yLFxyXG4gICAgSUpzb25Db2xvcnMsXHJcbiAgICBjb2xvcml6ZSxcclxuICAgIGpzb25IaWdobGlnaHQsXHJcbiAgICByZXBsYWNlU3BlY2lhbENoYXJzLFxyXG4gICAgcmVnZXhFc2NhcGUsXHJcbiAgICBmbGF0dGVuLFxyXG4gICAgd3JhcEVycm9yLFxyXG4gICAgZ2V0RGlyTmFtZSxcclxuICAgIHByZXBhcmVVcmwsXHJcbiAgICBwcmVwYXJlVXJsU2xhc2gsXHJcbiAgICBwcmVwYXJlVXJsRW1wdHksXHJcbiAgICBmaWxlVHlwZUZyb21CdWZmZXIsXHJcbiAgICBmaWxlVHlwZUZyb21TdHJlYW1cclxufSBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuZXhwb3J0IHtJc0ZpbGUsIElzT2JqZWN0SWR9IGZyb20gXCIuL3ZhbGlkYXRvcnNcIjtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBGSVhUVVJFLFxyXG4gICAgSk9CLFxyXG4gICAgVEVSTUlOQUxfQ09NTUFORCxcclxuICAgIEVYUFJFU1MsXHJcbiAgICBIVFRQX1NFUlZFUixcclxuICAgIFNPQ0tFVF9TRVJWRVIsXHJcbiAgICBTT0NLRVRfQ09OVFJPTExFUlMsXHJcbiAgICBQQVJBTUVURVIsXHJcbiAgICBESV9DT05UQUlORVIsXHJcbiAgICBPUEVOQVBJX1ZBTElEQVRJT04sXHJcbiAgICBUeXBlLFxyXG4gICAgRmFjdG9yeVByb3ZpZGVyLFxyXG4gICAgSURlcGVuZGVuY3lDb250YWluZXIsXHJcbiAgICBDbGFzc0Jhc2VkUHJvdmlkZXIsXHJcbiAgICBWYWx1ZUJhc2VkUHJvdmlkZXIsXHJcbiAgICBGYWN0b3J5QmFzZWRQcm92aWRlcixcclxuICAgIFRva2VuQmFzZWRQcm92aWRlcixcclxuICAgIFN5cmluZ2VQcm92aWRlcixcclxuICAgIFByb3ZpZGVyLFxyXG4gICAgQ29uc3RydWN0b3IsXHJcbiAgICBJbmZlckdlbmVyaWMsXHJcbiAgICBQaWNrTWF0Y2hpbmcsXHJcbiAgICBPbWl0Rmlyc3RBcmcsXHJcbiAgICBJTWF0Y2hGaWVsZCxcclxuICAgIElQcm9qZWN0T3B0aW9ucyxcclxuICAgIElVbndpbmRPcHRpb25zLFxyXG4gICAgSUZpeHR1cmUsXHJcbiAgICBJRml4dHVyZU91dHB1dCxcclxuICAgIFNjaGVtYUNvbnZlcnRlcixcclxuICAgIE9wZW5BcGlWYWxpZGF0aW9uLFxyXG4gICAgUGFyYW1SZXNvbHZlcixcclxuICAgIFBhcmFtZXRlcixcclxuICAgIFNvY2tldFBhcmFtLFxyXG4gICAgU29ja2V0UGFyYW1zLFxyXG4gICAgSVNvY2tldE1lc3NhZ2UsXHJcbiAgICBJTWVzc2FnZUJyaWRnZSxcclxuICAgIElKb2IsXHJcbiAgICBJSm9iVGFzayxcclxuICAgIEpvYlBhcmFtcyxcclxuICAgIEpvYlNjaGVkdWxlUmFuZ2UsXHJcbiAgICBKb2JTY2hlZHVsZVRpbWUsXHJcbiAgICBJVGVybWluYWxGaWxlLFxyXG4gICAgSVRlcm1pbmFsLFxyXG4gICAgSVRlcm1pbmFsQ29tbWFuZCxcclxuICAgIElQcm9ncmVzcyxcclxuICAgIElBc3NldENyb3BJbmZvLFxyXG4gICAgSUFzc2V0TWV0YSxcclxuICAgIElBc3NldEltYWdlUGFyYW1zLFxyXG4gICAgSUFzc2V0LFxyXG4gICAgSUxhenlBc3NldCxcclxuICAgIElVc2VyLFxyXG4gICAgSUNsaWVudFNvY2tldCxcclxuICAgIElSZXF1ZXN0QmFzZSxcclxuICAgIElSZXF1ZXN0LFxyXG4gICAgSUdhbGxlcnlJbWFnZSxcclxuICAgIElHYWxsZXJ5U2l6ZSxcclxuICAgIElHYWxsZXJ5SW1hZ2VIYW5kbGVyLFxyXG4gICAgSVRyYW5zbGF0aW9ucyxcclxuICAgIElQYWdpbmF0aW9uTWV0YSxcclxuICAgIElQYWdpbmF0aW9uQmFzZSxcclxuICAgIElQYWdpbmF0aW9uLFxyXG4gICAgSVBhZ2luYXRpb25QYXJhbXMsXHJcbiAgICBGb250Rm9ybWF0LFxyXG4gICAgSUZpbGVUeXBlLFxyXG4gICAgUm91dGluZ09wdGlvbnMsXHJcbiAgICBTb2NrZXRPcHRpb25zLFxyXG4gICAgSUJhY2tlbmRDb25maWdcclxufSBmcm9tIFwiLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmV4cG9ydCB7QXNzZXRQcm9jZXNzb3J9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2V0LXByb2Nlc3NvclwiO1xyXG5leHBvcnQge0Fzc2V0UmVzb2x2ZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2V0LXJlc29sdmVyXCI7XHJcbmV4cG9ydCB7QXNzZXRzfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3NldHNcIjtcclxuZXhwb3J0IHtCYWNrZW5kUHJvdmlkZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2JhY2tlbmQtcHJvdmlkZXJcIjtcclxuZXhwb3J0IHtDYWNoZX0gZnJvbSBcIi4vc2VydmljZXMvY2FjaGVcIjtcclxuZXhwb3J0IHtDYWNoZVByb2Nlc3Nvcn0gZnJvbSBcIi4vc2VydmljZXMvY2FjaGUtcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4vc2VydmljZXMvY29uZmlndXJhdGlvblwiO1xyXG5leHBvcnQge0VuZHBvaW50UHJvdmlkZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2VuZHBvaW50LXByb3ZpZGVyXCI7XHJcbmV4cG9ydCB7Rml4dHVyZXN9IGZyb20gXCIuL3NlcnZpY2VzL2ZpeHR1cmVzXCI7XHJcbmV4cG9ydCB7R2FsbGVyeX0gZnJvbSBcIi4vc2VydmljZXMvZ2FsbGVyeVwiO1xyXG5leHBvcnQge0dhbGxlcnlDYWNoZX0gZnJvbSBcIi4vc2VydmljZXMvZ2FsbGVyeS1jYWNoZVwiO1xyXG5leHBvcnQge0lkR2VuZXJhdG9yfSBmcm9tIFwiLi9zZXJ2aWNlcy9pZC1nZW5lcmF0b3JcIjtcclxuZXhwb3J0IHtKb2JNYW5hZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy9qb2ItbWFuYWdlclwiO1xyXG5leHBvcnQge0xhenlBc3NldHN9IGZyb20gXCIuL3NlcnZpY2VzL2xhenktYXNzZXRzXCI7XHJcbmV4cG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy9sb2dnZXJcIjtcclxuZXhwb3J0IHtNYWlsU2VuZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9tYWlsLXNlbmRlclwiO1xyXG5leHBvcnQge01lbW9yeUNhY2hlfSBmcm9tIFwiLi9zZXJ2aWNlcy9tZW1vcnktY2FjaGVcIjtcclxuZXhwb3J0IHtNb25nb0Nvbm5lY3Rvcn0gZnJvbSBcIi4vc2VydmljZXMvbW9uZ28tY29ubmVjdG9yXCI7XHJcbmV4cG9ydCB7T3BlbkFwaX0gZnJvbSBcIi4vc2VydmljZXMvb3Blbi1hcGlcIjtcclxuZXhwb3J0IHtQcm9ncmVzc2VzfSBmcm9tIFwiLi9zZXJ2aWNlcy9wcm9ncmVzc2VzXCI7XHJcbmV4cG9ydCB7VGVtcGxhdGVSZW5kZXJlcn0gZnJvbSBcIi4vc2VydmljZXMvdGVtcGxhdGUtcmVuZGVyZXJcIjtcclxuZXhwb3J0IHtUZXJtaW5hbE1hbmFnZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3Rlcm1pbmFsLW1hbmFnZXJcIjtcclxuZXhwb3J0IHtUb2tlbkdlbmVyYXRvcn0gZnJvbSBcIi4vc2VydmljZXMvdG9rZW4tZ2VuZXJhdG9yXCI7XHJcbmV4cG9ydCB7VHJhbnNsYXRpb25Qcm92aWRlcn0gZnJvbSBcIi4vc2VydmljZXMvdHJhbnNsYXRpb24tcHJvdmlkZXJcIjtcclxuZXhwb3J0IHtUcmFuc2xhdG9yfSBmcm9tIFwiLi9zZXJ2aWNlcy90cmFuc2xhdG9yXCI7XHJcbmV4cG9ydCB7VXNlck1hbmFnZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3VzZXItbWFuYWdlclwiO1xyXG5cclxuZXhwb3J0IHtBc3NldEltYWdlUGFyYW1zfSBmcm9tIFwiLi9yZXF1ZXN0cy9hc3NldC1pbWFnZS1wYXJhbXNcIjtcclxuXHJcbmV4cG9ydCB7QXV0aENvbnRyb2xsZXJ9IGZyb20gXCIuL3Jlc3QtY29udHJvbGxlcnMvYXV0aC5jb250cm9sbGVyXCI7XHJcbmV4cG9ydCB7R2FsbGVyeUNvbnRyb2xsZXJ9IGZyb20gXCIuL3Jlc3QtY29udHJvbGxlcnMvZ2FsbGVyeS5jb250cm9sbGVyXCI7XHJcblxyXG5leHBvcnQge0Vycm9ySGFuZGxlck1pZGRsZXdhcmV9IGZyb20gXCIuL3Jlc3QtbWlkZGxld2FyZXMvZXJyb3ItaGFuZGxlci5taWRkbGV3YXJlXCI7XHJcbmV4cG9ydCB7TGFuZ3VhZ2VNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL2xhbmd1YWdlLm1pZGRsZXdhcmVcIjtcclxuXHJcbmV4cG9ydCB7QmFzZURvYywgRG9jdW1lbnRBcnJheSwgUHJpbWl0aXZlQXJyYXl9IGZyb20gXCIuL3V0aWxpdGllcy9iYXNlLWRvY1wiO1xyXG5leHBvcnQge0lzRG9jdW1lbnRlZCwgSnNvblJlc3BvbnNlLCBSZXNwb25zZVR5cGV9IGZyb20gXCIuL3V0aWxpdGllcy9kZWNvcmF0b3JzXCI7XHJcbmV4cG9ydCB7TGF6eUFzc2V0R2VuZXJhdG9yfSBmcm9tIFwiLi91dGlsaXRpZXMvbGF6eS1hc3NldC1nZW5lcmF0b3JcIjtcclxuZXhwb3J0IHtcclxuICAgIFJlc29sdmVFbnRpdHksXHJcbiAgICBwYWdpbmF0ZUFnZ3JlZ2F0aW9ucyxcclxuICAgIGh5ZHJhdGVQb3B1bGF0ZWQsXHJcbiAgICB1bndpbmRTdGFnZSxcclxuICAgIHByb2plY3RTdGFnZSxcclxuICAgIG1hdGNoRmllbGRTdGFnZXMsXHJcbiAgICBtYXRjaEZpZWxkLFxyXG4gICAgbWF0Y2hTdGFnZSxcclxuICAgIGxldHNMb29rdXBTdGFnZSxcclxuICAgIGxvb2t1cFN0YWdlcyxcclxuICAgIHBhZ2luYXRlLFxyXG4gICAgaW5qZWN0U2VydmljZXMsXHJcbiAgICBzZXJ2aWNlXHJcbn0gZnJvbSBcIi4vdXRpbGl0aWVzL21vbmdvb3NlXCI7XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVVzZXIocmVxOiBJUmVxdWVzdCk6IFByb21pc2U8SVVzZXI+IHtcclxuICAgIGlmIChyZXEudXNlcikgcmV0dXJuIHJlcS51c2VyO1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gcmVxLmNvbnRhaW5lcjtcclxuICAgIGNvbnN0IGF1dGggPSByZXEuaGVhZGVyKFwiQXV0aG9yaXphdGlvblwiKSB8fCBcIlwiO1xyXG4gICAgbGV0IHBheWxvYWQgPSBudWxsO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBjb250YWluZXIucmVzb2x2ZShDb25maWd1cmF0aW9uKTtcclxuICAgICAgICBwYXlsb2FkID0gd2ViVG9rZW4udmVyaWZ5KGF1dGguc3BsaXQoXCIgXCIpWzFdLCBjb25maWcucmVzb2x2ZShcImp3dFNlY3JldFwiKSkgYXMgYW55O1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDAxLCBgQXV0aGVudGljYXRpb24gZmFpbGVkLiAoJHtlLm1lc3NhZ2V9KWApO1xyXG4gICAgfVxyXG4gICAgaWYgKCFwYXlsb2FkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDEsIGBBdXRoZW50aWNhdGlvbiBmYWlsZWQuIChNYXliZSBpbnZhbGlkIHRva2VuKWApO1xyXG4gICAgfVxyXG4gICAgcmVxLnVzZXIgPSBhd2FpdCBjb250YWluZXIucmVzb2x2ZShVc2VyTWFuYWdlcikuZ2V0QnlJZChwYXlsb2FkLmlkKTtcclxuICAgIHJldHVybiByZXEudXNlcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlcnZpY2VzKCk6IElEZXBlbmRlbmN5Q29udGFpbmVyIHtcclxuICAgIC8vIExpc3Qgb2YgcGFyYW1ldGVyc1xyXG4gICAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcclxuICAgIGNvbnN0IHBhcmFtcyA9IFtcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwic2VydmljZU5hbWVcIiwgXCJCYWNrZW5kXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJzZXJ2aWNlUGFzc3dvcmRcIiwgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDcpKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwic2VydmljZVVybFwiLCBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiLCAodmFsdWUsIGhlbHBlcikgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHBvcnQgbnVtYmVyIHRvIGVtcHR5IHN0cmluZ1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBwcmVwYXJlVXJsRW1wdHkoYCR7dmFsdWV9YC5yZXBsYWNlKC86WzAtOV0rJC8sIFwiXCIpLCBoZWxwZXIpIGFzIHN0cmluZztcclxuICAgICAgICAgICAgY29uc3QgcG9ydCA9IGhlbHBlcihcImFwcFBvcnRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiAoIXBvcnQgfHwgcG9ydCA9PT0gODAgfHwgcG9ydCA9PT0gNDQzKSA/IHVybCA6IGAke3VybH06JHtwb3J0fWA7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInRlbXBsYXRlc0RpclwiLCBqb2luKGRpck5hbWUsIFwidGVtcGxhdGVzXCIpKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiZ2FsbGVyeURpclwiLCBqb2luKGRpck5hbWUsIFwiZ2FsbGVyeVwiKSksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImNhY2hlRGlyXCIsIGpvaW4oZGlyTmFtZSwgXCJjYWNoZVwiKSksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImRlZmF1bHRMYW5ndWFnZVwiLCBcImVuXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJzbXRwSG9zdFwiLCBcInNtdHAuc2VuZGdyaWQubmV0XCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJzbXRwUG9ydFwiLCA1ODcpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJzbXRwVXNlclwiLCBcImFwaWtleVwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwic210cFBhc3N3b3JkXCIsIFwiXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJtYWlsU2VuZGVyQWRkcmVzc1wiLCBcImluZm9Ac3RlbXkuaHVcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInRyYW5zbGF0aW9uc1RlbXBsYXRlXCIsIFwiaHR0cHM6Ly90cmFuc2xhdGlvbi5zZXJ2aWNlL1tsYW5nXVwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiand0U2VjcmV0XCIsIFwiZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKU1V6STFOaUo5XCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJtb25nb1VyaVwiLCBcIlwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwibW9uZ29EYlwiLCBcIm5vZGUtYmFja2VuZFwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwibW9uZ29Vc2VyXCIsIG51bGwpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJtb25nb1Bhc3N3b3JkXCIsIG51bGwpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJub2RlRW52XCIsIFwicHJvZHVjdGlvblwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiYXBwUG9ydFwiLCA4MCksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInptcVBvcnRcIiwgMzAwMCksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInptcUJhY2tQb3J0XCIsIDMxMDApLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJ6bXFSZW1vdGVIb3N0XCIsIFwidGNwOi8vMTI3LjAuMC4xXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJpc1dvcmtlclwiLCBmYWxzZSksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInN0YXJ0V29ya2VyXCIsIGZhbHNlKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiZml4dHVyZXNcIiwgdHJ1ZSksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcIm1haW5FbmRwb2ludFwiLCBcIlwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiaWRDaGFyc1wiLCBcIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiaWRTZXBhcmF0b3JcIiwgXCItXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJpZFByZWZpeFwiLCBcIklELVwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiaWRQYXJ0c1wiLCBbNCwgNF0pLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJqc29uTGltaXRcIiwgXCIyNTBtYlwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiam9iVGltZW91dFwiLCA1ICogNjAgKiAxMDAwKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiY2FjaGVDb2xsZWN0aW9uXCIsIFwiY2FjaGVcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImxvZ1RhZ3NcIiwgW10pLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJpZ25vcmVkTG9nVGFnc1wiLCBbXSksXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIENvbnZlcnQgcGFyYW1ldGVycyB0byBwcm92aWRlcnNcclxuICAgIGNvbnN0IHBhcmFtUHJvdmlkZXJzID0gcGFyYW1zLm1hcChwID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBQQVJBTUVURVIsXHJcbiAgICAgICAgICAgIHVzZVZhbHVlOiBwXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gTGlzdCBvZiBzZXJ2aWNlc1xyXG4gICAgY29uc3Qgc2VydmljZXMgPSBbXHJcbiAgICAgICAgQXNzZXRQcm9jZXNzb3IsXHJcbiAgICAgICAgQXNzZXRSZXNvbHZlcixcclxuICAgICAgICBBc3NldHMsXHJcbiAgICAgICAgQmFja2VuZFByb3ZpZGVyLFxyXG4gICAgICAgIENhY2hlLFxyXG4gICAgICAgIENhY2hlUHJvY2Vzc29yLFxyXG4gICAgICAgIENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgRW5kcG9pbnRQcm92aWRlcixcclxuICAgICAgICBGaXh0dXJlcyxcclxuICAgICAgICBHYWxsZXJ5LFxyXG4gICAgICAgIEdhbGxlcnlDYWNoZSxcclxuICAgICAgICBJZEdlbmVyYXRvcixcclxuICAgICAgICBKb2JNYW5hZ2VyLFxyXG4gICAgICAgIExhenlBc3NldHMsXHJcbiAgICAgICAgTG9nZ2VyLFxyXG4gICAgICAgIE1haWxTZW5kZXIsXHJcbiAgICAgICAgTWVtb3J5Q2FjaGUsXHJcbiAgICAgICAgTW9uZ29Db25uZWN0b3IsXHJcbiAgICAgICAgT3BlbkFwaSxcclxuICAgICAgICBQcm9ncmVzc2VzLFxyXG4gICAgICAgIFRlbXBsYXRlUmVuZGVyZXIsXHJcbiAgICAgICAgVGVybWluYWxNYW5hZ2VyLFxyXG4gICAgICAgIFRva2VuR2VuZXJhdG9yLFxyXG4gICAgICAgIFRyYW5zbGF0aW9uUHJvdmlkZXIsXHJcbiAgICAgICAgVHJhbnNsYXRvcixcclxuICAgICAgICBVc2VyTWFuYWdlclxyXG4gICAgXSBhcyBUeXBlPGFueT5bXTtcclxuXHJcbiAgICAvLyBDcmVhdGUgY29udGFpbmVyXHJcbiAgICBjb25zdCBkaUNvbnRhaW5lciA9IG5ldyBEaUNvbnRhaW5lcihjb250YWluZXIuY3JlYXRlQ2hpbGRDb250YWluZXIoKSk7XHJcbiAgICBwYXJhbVByb3ZpZGVycy5mb3JFYWNoKHByb3ZpZGVyID0+IHtcclxuICAgICAgICBkaUNvbnRhaW5lci5yZWdpc3Rlcihwcm92aWRlci5wcm92aWRlLCBwcm92aWRlcik7XHJcbiAgICB9KTtcclxuICAgIHNlcnZpY2VzLmZvckVhY2goc2VydmljZSA9PiB7XHJcbiAgICAgICAgaWYgKCFjb250YWluZXIuaXNSZWdpc3RlcmVkKHNlcnZpY2UpKVxyXG4gICAgICAgICAgICBkaUNvbnRhaW5lci5yZWdpc3RlcihzZXJ2aWNlLCBzZXJ2aWNlKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRpQ29udGFpbmVyO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0dXBCYWNrZW5kKGNvbmZpZzogSUJhY2tlbmRDb25maWcsIHByb3ZpZGVycz86IFByb3ZpZGVyPGFueT5bXSwgcGFyZW50PzogSURlcGVuZGVuY3lDb250YWluZXIpOiBQcm9taXNlPElEZXBlbmRlbmN5Q29udGFpbmVyPiB7XHJcblxyXG4gICAgcHJvdmlkZXJzID0gQXJyYXkuaXNBcnJheShwcm92aWRlcnMpID8gcHJvdmlkZXJzIDogW107XHJcbiAgICBwYXJlbnQgPSBwYXJlbnQgfHwgY3JlYXRlU2VydmljZXMoKTtcclxuXHJcbiAgICAvLyBDcmVhdGUgZml4dHVyZXNcclxuICAgIGNvbnN0IGZpeHR1cmVUeXBlcyA9IChjb25maWcuZml4dHVyZXMgfHwgW10pO1xyXG4gICAgY29uc3QgZml4dHVyZVByb3ZpZGVycyA9IGZpeHR1cmVUeXBlcy5tYXAoZml4dHVyZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogRklYVFVSRSxcclxuICAgICAgICAgICAgdXNlQ2xhc3M6IGZpeHR1cmVcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHBhcmFtc1xyXG4gICAgY29uc3QgcGFyYW1Qcm92aWRlcnMgPSAoY29uZmlnLnBhcmFtcyB8fCBbXSkubWFwKHAgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFBBUkFNRVRFUixcclxuICAgICAgICAgICAgdXNlVmFsdWU6IHBcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVhdGUgam9ic1xyXG4gICAgY29uc3Qgam9iUHJvdmlkZXJzID0gW0VtcHR5Sm9iIGFzIFR5cGU8SUpvYj5dLmNvbmNhdChjb25maWcuam9icyB8fCBbXSkubWFwKGpvYlR5cGUgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEpPQixcclxuICAgICAgICAgICAgdXNlVmFsdWU6IGpvYlR5cGVcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGNvbW1hbmRzXHJcbiAgICBjb25zdCBjb21tYW5kUHJvdmlkZXJzID0gY29tbWFuZHMuY29uY2F0KGNvbmZpZy5jb21tYW5kcyB8fCBbXSkubWFwKGNvbW1hbmRUeXBlID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBURVJNSU5BTF9DT01NQU5ELFxyXG4gICAgICAgICAgICB1c2VDbGFzczogY29tbWFuZFR5cGVcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIERJIGNvbnRhaW5lclxyXG4gICAgY29uc3QgZGlDb250YWluZXIgPSBwYXJlbnQuY3JlYXRlQ2hpbGRDb250YWluZXIoKTtcclxuXHJcbiAgICAvLyBTZXR1cCByZXN0IEFQSVxyXG4gICAgY29uc3QgcmVzdE9wdGlvbnM6IFJvdXRpbmdDb250cm9sbGVyc09wdGlvbnMgPSB7XHJcbiAgICAgICAgcm91dGVQcmVmaXg6IGNvbmZpZy5yb3V0ZVByZWZpeCB8fCBcIi9hcGlcIixcclxuICAgICAgICBkZWZhdWx0RXJyb3JIYW5kbGVyOiBmYWxzZSxcclxuICAgICAgICAuLi4oY29uZmlnLnJlc3RPcHRpb25zIHx8IHt9KVxyXG4gICAgfTtcclxuICAgIHJlc3RPcHRpb25zLmNvcnMgPSBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICBjcmVkZW50aWFsczogdHJ1ZSxcclxuICAgICAgICBleHBvc2VkSGVhZGVyczogW1wiY29udGVudC1kaXNwb3NpdGlvblwiXSxcclxuICAgICAgICBvcmlnaW46IChvcmlnaW4sIGNhbGxiYWNrKSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIHJlc3RPcHRpb25zLmNvcnMgfHwge30pO1xyXG4gICAgcmVzdE9wdGlvbnMucm91dGVQcmVmaXggPSByZXN0T3B0aW9ucy5yb3V0ZVByZWZpeCA9PSBcIi9cIiA/IFwiXCIgOiByZXN0T3B0aW9ucy5yb3V0ZVByZWZpeDtcclxuICAgIHJlc3RPcHRpb25zLm1pZGRsZXdhcmVzID0gW0Vycm9ySGFuZGxlck1pZGRsZXdhcmUsIENvbnRhaW5lck1pZGRsZXdhcmUsIExhbmd1YWdlTWlkZGxld2FyZSwgUmVxdWVzdFN0YXJ0ZWRNaWRkbGV3YXJlLCBSZXF1ZXN0RW5kZWRNaWRkbGV3YXJlXVxyXG4gICAgICAgIC5jb25jYXQocmVzdE9wdGlvbnMubWlkZGxld2FyZXMgYXMgYW55IHx8IFtdKTtcclxuICAgIHJlc3RPcHRpb25zLmNvbnRyb2xsZXJzID0gW0Fzc2V0c0NvbnRyb2xsZXIsIEF1dGhDb250cm9sbGVyLCBHYWxsZXJ5Q29udHJvbGxlciwgUHJvZ3Jlc3Nlc0NvbnRyb2xsZXIsIFRlcm1pbmFsUmVzdENvbnRyb2xsZXJdXHJcbiAgICAgICAgLmNvbmNhdChyZXN0T3B0aW9ucy5jb250cm9sbGVycyBhcyBhbnkgfHwgW10pO1xyXG5cclxuICAgIC8vIFNldHVwIHNvY2tldCBBUElcclxuICAgIGNvbnN0IHNvY2tldE9wdGlvbnM6IFNvY2tldENvbnRyb2xsZXJzT3B0aW9ucyA9IHtcclxuICAgICAgICBjb250YWluZXI6IHtcclxuICAgICAgICAgICAgZ2V0PFQ+KHNvbWVDbGFzczogVHlwZTxhbnk+KTogVCB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlDb250YWluZXIuZ2V0PFQ+KHNvbWVDbGFzcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLihjb25maWcuc29ja2V0T3B0aW9ucyB8fCB7fSlcclxuICAgIH07XHJcbiAgICBzb2NrZXRPcHRpb25zLm1pZGRsZXdhcmVzID0gW0NvbXByZXNzaW9uTWlkZGxld2FyZV0uY29uY2F0KHNvY2tldE9wdGlvbnMubWlkZGxld2FyZXMgYXMgYW55IHx8IFtdKTtcclxuICAgIHNvY2tldE9wdGlvbnMuY29udHJvbGxlcnMgPSBbUHJvZ3Jlc3NDb250cm9sbGVyLCBUZXJtaW5hbENvbnRyb2xsZXJdLmNvbmNhdChzb2NrZXRPcHRpb25zLmNvbnRyb2xsZXJzIGFzIGFueSB8fCBbXSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHByb3ZpZGVyc1xyXG5cclxuICAgIGNvbnN0IGFsbFByb3ZpZGVyczogUHJvdmlkZXI8YW55PltdID0gW107XHJcblxyXG4gICAgLy8gQWRkIG11bHRpIHRva2VucyB0byBzdWIgY29udGFpbmVyXHJcbiAgICBbUEFSQU1FVEVSXS5mb3JFYWNoKHByb3ZpZGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHBhcmVudC5yZXNvbHZlQWxsKHByb3ZpZGUpO1xyXG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKHVzZVZhbHVlID0+IHtcclxuICAgICAgICAgICAgYWxsUHJvdmlkZXJzLnB1c2goe3Byb3ZpZGUsIHVzZVZhbHVlfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBZGQgb3RoZXIgcHJvdmlkZXJzXHJcbiAgICBhbGxQcm92aWRlcnMucHVzaChcclxuICAgICAgICAuLi5maXh0dXJlVHlwZXMsXHJcbiAgICAgICAgLi4uZml4dHVyZVByb3ZpZGVycyxcclxuICAgICAgICAuLi5wYXJhbVByb3ZpZGVycyxcclxuICAgICAgICAuLi5qb2JQcm92aWRlcnMsXHJcbiAgICAgICAgLi4uY29tbWFuZFByb3ZpZGVycyxcclxuICAgICAgICAuLi5yZXN0T3B0aW9ucy5taWRkbGV3YXJlcyBhcyBUeXBlPGFueT5bXSxcclxuICAgICAgICAuLi5yZXN0T3B0aW9ucy5jb250cm9sbGVycyBhcyBUeXBlPGFueT5bXSxcclxuICAgICAgICAuLi5zb2NrZXRPcHRpb25zLm1pZGRsZXdhcmVzIGFzIFR5cGU8YW55PltdLFxyXG4gICAgICAgIC4uLnNvY2tldE9wdGlvbnMuY29udHJvbGxlcnMgYXMgVHlwZTxhbnk+W10sXHJcbiAgICAgICAgLi4ucHJvdmlkZXJzLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogRVhQUkVTUyxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKGNvbnRhaW5lcjogRGVwZW5kZW5jeUNvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5yZXNvbHZlKEJhY2tlbmRQcm92aWRlcikuZXhwcmVzcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBIVFRQX1NFUlZFUixcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKGNvbnRhaW5lcjogRGVwZW5kZW5jeUNvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5yZXNvbHZlKEJhY2tlbmRQcm92aWRlcikuc2VydmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFNPQ0tFVF9TRVJWRVIsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IChjb250YWluZXI6IERlcGVuZGVuY3lDb250YWluZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXIucmVzb2x2ZShCYWNrZW5kUHJvdmlkZXIpLmlvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgKVxyXG5cclxuICAgIGFsbFByb3ZpZGVycy5mb3JFYWNoKHByb3ZpZGVyID0+IHtcclxuICAgICAgICBpZiAoaXNUeXBlKHByb3ZpZGVyKSkge1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVyLmlzUmVnaXN0ZXJlZChwcm92aWRlcikpIHJldHVybjtcclxuICAgICAgICAgICAgZGlDb250YWluZXIucmVnaXN0ZXIocHJvdmlkZXIsIHByb3ZpZGVyKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkaUNvbnRhaW5lci5yZWdpc3Rlcihwcm92aWRlci5wcm92aWRlLCBwcm92aWRlciBhcyBhbnkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZGlDb250YWluZXIucmVnaXN0ZXIoRElfQ09OVEFJTkVSLCB7XHJcbiAgICAgICAgdXNlVmFsdWU6IGRpQ29udGFpbmVyXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaUNvbnRhaW5lci5yZWdpc3RlcihPUEVOQVBJX1ZBTElEQVRJT04sIHtcclxuICAgICAgICB1c2VWYWx1ZTogY29uZmlnLmN1c3RvbVZhbGlkYXRpb24gfHwgKCgpID0+IG51bGwpXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaUNvbnRhaW5lcnMuYXBwQ29udGFpbmVyID0gZGlDb250YWluZXJzLmFwcENvbnRhaW5lciB8fCBkaUNvbnRhaW5lcjtcclxuXHJcbiAgICAvLyBBdXRoZW50aWNhdGlvblxyXG4gICAgcmVzdE9wdGlvbnMuYXV0aG9yaXphdGlvbkNoZWNrZXIgPSBhc3luYyAoYWN0aW9uOiBBY3Rpb24sIHJvbGVzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCByZXNvbHZlVXNlcihhY3Rpb24ucmVxdWVzdCk7XHJcbiAgICAgICAgaWYgKCF1c2VyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDAxLCBcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gKFVzZXIgY2FuJ3QgYmUgZm91bmQuKVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXNlclJvbGVzID0gQXJyYXkuaXNBcnJheSh1c2VyLnJvbGVzKSA/IHVzZXIucm9sZXMgOiBbXTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb2xlcykgJiYgcm9sZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbGFzdEVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgZm9yIChsZXQgcm9sZSBvZiByb2xlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocm9sZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgdmFsdWVUb1Byb21pc2Uocm9sZSh1c2VyLCBhY3Rpb24pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJSb2xlcy5pbmRleE9mKHJvbGUpID49IDApIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gIWxhc3RFcnJvciB8fCAoIWxhc3RFcnJvci5tZXNzYWdlICYmICFpc1N0cmluZyhsYXN0RXJyb3IpKVxyXG4gICAgICAgICAgICAgICAgPyBcIlVzZXIgZG9lc24ndCBoYXZlIGFjY2VzcyB0byB0aGlzIHJlc291cmNlXCJcclxuICAgICAgICAgICAgICAgIDogbGFzdEVycm9yLm1lc3NhZ2UgfHwgbGFzdEVycm9yO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKDQwMSwgYEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gKCR7ZXJyb3J9KWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICByZXN0T3B0aW9ucy5jdXJyZW50VXNlckNoZWNrZXIgPSBhc3luYyAoYWN0aW9uOiBBY3Rpb24pID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzb2x2ZVVzZXIoYWN0aW9uLnJlcXVlc3QpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBGaW5hbCBzZXR1cFxyXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGRpQ29udGFpbmVyLnJlc29sdmUoQ29uZmlndXJhdGlvbik7XHJcbiAgICBjb25zdCBicCA9IGRpQ29udGFpbmVyLnJlc29sdmUoQmFja2VuZFByb3ZpZGVyKTtcclxuXHJcbiAgICBpZiAoY29uZmlnLnJlc3RPcHRpb25zKSB7XHJcbiAgICAgICAgdXNlUm91dGluZ0NvbnRhaW5lcihkaUNvbnRhaW5lcik7XHJcbiAgICAgICAgdXNlRXhwcmVzc1NlcnZlcihicC5leHByZXNzLCByZXN0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5zb2NrZXRPcHRpb25zKSB7XHJcbiAgICAgICAgZGlDb250YWluZXIucmVnaXN0ZXIoU09DS0VUX0NPTlRST0xMRVJTLCB7XHJcbiAgICAgICAgICAgIHVzZVZhbHVlOiBuZXcgU29ja2V0Q29udHJvbGxlcnMoe1xyXG4gICAgICAgICAgICAgICAgaW86IGJwLmlvLFxyXG4gICAgICAgICAgICAgICAgLi4uc29ja2V0T3B0aW9ucyxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb25uZWN0IHRvIG1vbmdvIGlmIG5lY2Vzc2FyeVxyXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaGFzUGFyYW0oXCJtb25nb1VyaVwiKSAmJiBjb25maWd1cmF0aW9uLnJlc29sdmUoXCJtb25nb1VyaVwiKSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ29ubmVjdGluZyB0byBNb25nb0RCLi4uXCIpO1xyXG4gICAgICAgIGNvbnN0IGNvbm5lY3RvciA9IGRpQ29udGFpbmVyLnJlc29sdmUoTW9uZ29Db25uZWN0b3IpO1xyXG4gICAgICAgIGF3YWl0IGNvbm5lY3Rvci5jb25uZWN0KCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIE1vbmdvREIuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IHNldHVwU3RhdGljKGNvbmZpZy5yb290Rm9sZGVyLCBkaUNvbnRhaW5lcik7XHJcblxyXG4gICAgcmV0dXJuIGRpQ29udGFpbmVyO1xyXG59XHJcbiJdfQ==
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
2
|
import { createServer } from "http";
|
|
3
|
-
import express_ from "express";
|
|
4
|
-
import { singleton } from "tsyringe";
|
|
5
3
|
import { Server as SocketServer } from "socket.io";
|
|
4
|
+
import express_ from "express";
|
|
5
|
+
import { inject, singleton } from "tsyringe";
|
|
6
|
+
import bodyParser from 'body-parser';
|
|
7
|
+
import { Configuration } from './configuration';
|
|
8
|
+
import { DI_CONTAINER } from '../common-types';
|
|
9
|
+
import { OpenApi } from './open-api';
|
|
10
|
+
import { JobManager } from './job-manager';
|
|
11
|
+
import { Fixtures } from './fixtures';
|
|
6
12
|
const express = express_;
|
|
7
13
|
let BackendProvider = class BackendProvider {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
11
|
-
this.server = createServer(this.express);
|
|
14
|
+
constructor(config, container) {
|
|
15
|
+
this.config = config;
|
|
16
|
+
this.container = container;
|
|
12
17
|
}
|
|
13
18
|
get io() {
|
|
14
19
|
this.ioServer = this.ioServer || new SocketServer(this.server, {
|
|
@@ -23,10 +28,48 @@ let BackendProvider = class BackendProvider {
|
|
|
23
28
|
});
|
|
24
29
|
return this.ioServer;
|
|
25
30
|
}
|
|
31
|
+
get express() {
|
|
32
|
+
if (!this.expressApp) {
|
|
33
|
+
this.expressApp = express();
|
|
34
|
+
this.expressApp.set("trust proxy", true);
|
|
35
|
+
this.expressApp.use(bodyParser.json({
|
|
36
|
+
limit: this.config.resolve("jsonLimit")
|
|
37
|
+
}));
|
|
38
|
+
this.expressApp.get("/api-docs", (req, res) => {
|
|
39
|
+
this.openApi = this.openApi || this.container.get(OpenApi);
|
|
40
|
+
res.header("Content-Type", "application/json")
|
|
41
|
+
.status(200)
|
|
42
|
+
.end(this.openApi.apiDocsStr);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return this.expressApp;
|
|
46
|
+
}
|
|
47
|
+
get server() {
|
|
48
|
+
this.httpServer = this.httpServer || createServer(this.express);
|
|
49
|
+
return this.httpServer;
|
|
50
|
+
}
|
|
51
|
+
async quickStart() {
|
|
52
|
+
const port = this.config.resolve("appPort");
|
|
53
|
+
const isWorker = this.config.resolve("isWorker");
|
|
54
|
+
if (isWorker || this.config.resolve("startWorker")) {
|
|
55
|
+
await this.container.resolve(JobManager).startProcessing();
|
|
56
|
+
if (isWorker) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (this.config.resolve("fixtures")) {
|
|
61
|
+
const fixtures = this.container.resolve(Fixtures);
|
|
62
|
+
await fixtures.load();
|
|
63
|
+
}
|
|
64
|
+
return new Promise(resolve => {
|
|
65
|
+
this.server.listen(port, () => resolve(`Service listening on port ${port}!`));
|
|
66
|
+
});
|
|
67
|
+
}
|
|
26
68
|
};
|
|
27
69
|
BackendProvider = __decorate([
|
|
28
70
|
singleton(),
|
|
29
|
-
|
|
71
|
+
__param(1, inject(DI_CONTAINER)),
|
|
72
|
+
__metadata("design:paramtypes", [Configuration, Object])
|
|
30
73
|
], BackendProvider);
|
|
31
74
|
export { BackendProvider };
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9iYWNrZW5kLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFTLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxNQUFNLElBQUksWUFBWSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2pELE9BQU8sUUFBbUIsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDM0MsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsWUFBWSxFQUF1QixNQUFNLGlCQUFpQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUdsQixJQUFNLGVBQWUsR0FBckIsTUFBTSxlQUFlO0lBMkN4QixZQUFxQixNQUFxQixFQUNFLFNBQStCO1FBRHRELFdBQU0sR0FBTixNQUFNLENBQWU7UUFDRSxjQUFTLEdBQVQsU0FBUyxDQUFzQjtJQUMzRSxDQUFDO0lBM0NELElBQUksRUFBRTtRQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzNELElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFO2dCQUNGLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixjQUFjLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDdkMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFO29CQUN6QixRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN6QixDQUFDO2FBQ0o7U0FDSixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7YUFDMUMsQ0FBQyxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUM7cUJBQ3pDLE1BQU0sQ0FBQyxHQUFHLENBQUM7cUJBQ1gsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUE7U0FDTDtRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFXRCxLQUFLLENBQUMsVUFBVTtRQUNaLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2hELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0QsSUFBSSxRQUFRLEVBQUU7Z0JBQ1YsT0FBTzthQUNWO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0osQ0FBQTtBQWhFWSxlQUFlO0lBRDNCLFNBQVMsRUFBRTtJQTZDSyxXQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtxQ0FESixhQUFhO0dBM0NqQyxlQUFlLENBZ0UzQjtTQWhFWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjcmVhdGVTZXJ2ZXIsIFNlcnZlcn0gZnJvbSBcImh0dHBcIjtcclxuaW1wb3J0IHtTZXJ2ZXIgYXMgU29ja2V0U2VydmVyfSBmcm9tIFwic29ja2V0LmlvXCI7XHJcbmltcG9ydCBleHByZXNzXywge0V4cHJlc3N9IGZyb20gXCJleHByZXNzXCI7XHJcbmltcG9ydCB7aW5qZWN0LCBzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQgYm9keVBhcnNlciBmcm9tICdib2R5LXBhcnNlcic7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnLi9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHtESV9DT05UQUlORVIsIElEZXBlbmRlbmN5Q29udGFpbmVyfSBmcm9tICcuLi9jb21tb24tdHlwZXMnO1xyXG5pbXBvcnQge09wZW5BcGl9IGZyb20gJy4vb3Blbi1hcGknO1xyXG5pbXBvcnQge0pvYk1hbmFnZXJ9IGZyb20gJy4vam9iLW1hbmFnZXInO1xyXG5pbXBvcnQge0ZpeHR1cmVzfSBmcm9tICcuL2ZpeHR1cmVzJztcclxuXHJcbmNvbnN0IGV4cHJlc3MgPSBleHByZXNzXztcclxuXHJcbkBzaW5nbGV0b24oKVxyXG5leHBvcnQgY2xhc3MgQmFja2VuZFByb3ZpZGVyIHtcclxuXHJcbiAgICBnZXQgaW8oKTogU29ja2V0U2VydmVyIHtcclxuICAgICAgICB0aGlzLmlvU2VydmVyID0gdGhpcy5pb1NlcnZlciB8fCBuZXcgU29ja2V0U2VydmVyKHRoaXMuc2VydmVyLCB7XHJcbiAgICAgICAgICAgIHBhdGg6IFwiL3NvY2tldFwiLFxyXG4gICAgICAgICAgICBjb3JzOiB7XHJcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGV4cG9zZWRIZWFkZXJzOiBbXCJjb250ZW50LWRpc3Bvc2l0aW9uXCJdLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luOiAob3JpZ2luLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW9TZXJ2ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cHJlc3MoKTogRXhwcmVzcyB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmV4cHJlc3NBcHApIHtcclxuICAgICAgICAgICAgdGhpcy5leHByZXNzQXBwID0gZXhwcmVzcygpO1xyXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3NBcHAuc2V0KFwidHJ1c3QgcHJveHlcIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc0FwcC51c2UoYm9keVBhcnNlci5qc29uKHtcclxuICAgICAgICAgICAgICAgIGxpbWl0OiB0aGlzLmNvbmZpZy5yZXNvbHZlKFwianNvbkxpbWl0XCIpXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgdGhpcy5leHByZXNzQXBwLmdldChcIi9hcGktZG9jc1wiLCAocmVxLCByZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkFwaSA9IHRoaXMub3BlbkFwaSB8fCB0aGlzLmNvbnRhaW5lci5nZXQoT3BlbkFwaSk7XHJcbiAgICAgICAgICAgICAgICByZXMuaGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGF0dXMoMjAwKVxyXG4gICAgICAgICAgICAgICAgICAgIC5lbmQodGhpcy5vcGVuQXBpLmFwaURvY3NTdHIpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzQXBwO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZXJ2ZXIoKTogU2VydmVyIHtcclxuICAgICAgICB0aGlzLmh0dHBTZXJ2ZXIgPSB0aGlzLmh0dHBTZXJ2ZXIgfHwgY3JlYXRlU2VydmVyKHRoaXMuZXhwcmVzcyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgaW9TZXJ2ZXI6IFNvY2tldFNlcnZlcjtcclxuICAgIHByb3RlY3RlZCBodHRwU2VydmVyOiBTZXJ2ZXI7XHJcbiAgICBwcm90ZWN0ZWQgZXhwcmVzc0FwcDogRXhwcmVzcztcclxuICAgIHByb3RlY3RlZCBvcGVuQXBpOiBPcGVuQXBpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbixcclxuICAgICAgICAgICAgICAgIEBpbmplY3QoRElfQ09OVEFJTkVSKSBwcm90ZWN0ZWQgY29udGFpbmVyOiBJRGVwZW5kZW5jeUNvbnRhaW5lcikge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHF1aWNrU3RhcnQoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy5jb25maWcucmVzb2x2ZShcImFwcFBvcnRcIik7XHJcbiAgICAgICAgY29uc3QgaXNXb3JrZXIgPSB0aGlzLmNvbmZpZy5yZXNvbHZlKFwiaXNXb3JrZXJcIik7XHJcbiAgICAgICAgaWYgKGlzV29ya2VyIHx8IHRoaXMuY29uZmlnLnJlc29sdmUoXCJzdGFydFdvcmtlclwiKSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5yZXNvbHZlKEpvYk1hbmFnZXIpLnN0YXJ0UHJvY2Vzc2luZygpO1xyXG4gICAgICAgICAgICBpZiAoaXNXb3JrZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb25maWcucmVzb2x2ZShcImZpeHR1cmVzXCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVzID0gdGhpcy5jb250YWluZXIucmVzb2x2ZShGaXh0dXJlcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGZpeHR1cmVzLmxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlcnZlci5saXN0ZW4ocG9ydCwgKCkgPT4gcmVzb2x2ZShgU2VydmljZSBsaXN0ZW5pbmcgb24gcG9ydCAke3BvcnR9IWApKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -63,4 +63,4 @@ Configuration = __decorate([
|
|
|
63
63
|
__metadata("design:paramtypes", [Array])
|
|
64
64
|
], Configuration);
|
|
65
65
|
export { Configuration };
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM5QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLFNBQVMsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRzVFLElBQU0sYUFBYSxHQUFuQixNQUFNLGFBQWE7SUFLdEIsWUFBa0MsTUFBbUI7UUFDakQsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRVMsR0FBRyxDQUFDLEtBQWdCO1FBQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN6RCxhQUFhLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDaEQsYUFBYSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDO0lBQzlDLENBQUM7SUFFUyxZQUFZLENBQUMsS0FBZ0IsRUFBRSxlQUF5QjtRQUM5RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNoQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDdkUsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDakMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUMxRCxPQUFPLENBQUMsR0FBRyxDQUNQLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQ3pELFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFDMUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQ3RDLElBQUksUUFBUSxHQUFHLEVBQ2YsS0FBSyxDQUNSLENBQUM7WUFDRixPQUFPLEtBQUssQ0FBQztTQUNoQjthQUFNLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FDUCxRQUFRLENBQUMsZ0NBQWdDLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUNqRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQzFDLEtBQUssQ0FBQyxZQUFZLEVBQ2xCLEtBQUssQ0FDUixDQUFDO1lBQ0YsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUNQLFFBQVEsQ0FBQywyQkFBMkIsRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQzVELFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFDMUMsS0FBSyxDQUFDLFlBQVksQ0FDckIsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVk7UUFDakIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVk7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRVMsZUFBZSxDQUFDLElBQVksRUFBRSxlQUF5QjtRQUM3RCxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQy9GO1FBQ0QsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxvQ0FBb0MsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztTQUN0RTtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0osQ0FBQTtBQTNFWSxhQUFhO0lBRHpCLFNBQVMsRUFBRTtJQU1LLFdBQUEsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBOztHQUx4QixhQUFhLENBMkV6QjtTQTNFWSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RBbGwsIHNpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xyXG5cclxuaW1wb3J0IHtQQVJBTUVURVIsIFBhcmFtZXRlcn0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge2NvbG9yaXplLCBDb25zb2xlQ29sb3IsIGNvbnZlcnRWYWx1ZSwgZ2V0VHlwZSwgaXNGdW5jdGlvbn0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5Ac2luZ2xldG9uKClcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb24ge1xyXG5cclxuICAgIHByb3RlY3RlZCBwYXJhbU1hcDoge1tuYW1lOiBzdHJpbmddOiBQYXJhbWV0ZXJ9O1xyXG4gICAgcHJvdGVjdGVkIHBhcmFtVmFsdWVzOiB7W25hbWU6IHN0cmluZ106IGFueX07XHJcblxyXG4gICAgY29uc3RydWN0b3IoQGluamVjdEFsbChQQVJBTUVURVIpIHBhcmFtczogUGFyYW1ldGVyW10pIHtcclxuICAgICAgICBkb3RlbnYuY29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5wYXJhbU1hcCA9IHt9O1xyXG4gICAgICAgIHRoaXMucGFyYW1WYWx1ZXMgPSB7fTtcclxuICAgICAgICAocGFyYW1zIHx8IFtdKS5mb3JFYWNoKHBhcmFtID0+IHRoaXMuYWRkKHBhcmFtKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFkZChwYXJhbTogUGFyYW1ldGVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdQYXJhbSA9IHRoaXMucGFyYW1NYXBbcGFyYW0ubmFtZV0gfHwgcGFyYW07XHJcbiAgICAgICAgZXhpc3RpbmdQYXJhbS5kZWZhdWx0VmFsdWUgPSBwYXJhbS5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgZXhpc3RpbmdQYXJhbS5yZXNvbHZlciA9IHBhcmFtLnJlc29sdmVyIHx8IGV4aXN0aW5nUGFyYW0ucmVzb2x2ZXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbU1hcFtwYXJhbS5uYW1lXSA9IGV4aXN0aW5nUGFyYW07XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlc29sdmVWYWx1ZShwYXJhbTogUGFyYW1ldGVyLCBhbHJlYWR5UmVzb2x2ZWQ6IHN0cmluZ1tdKTogYW55IHtcclxuICAgICAgICBjb25zdCBlbnZOYW1lID0gcGFyYW0ubmFtZS5yZXBsYWNlKC9cXC4/KFtBLVp8MC05XSspL2csIGZ1bmN0aW9uICh4LCB5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIl9cIiArIHkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgIH0pLnJlcGxhY2UoL1xcLi9naSwgXCJfXCIpLnJlcGxhY2UoL15fLywgXCJcIikudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBlbnZWYWx1ZSA9IHByb2Nlc3MuZW52W2Vudk5hbWVdO1xyXG4gICAgICAgIGNvbnN0IGhlbHBlciA9IChwOiBzdHJpbmcpID0+IHRoaXMucmVzb2x2ZUludGVybmFsKHAsIGFscmVhZHlSZXNvbHZlZCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBlbnZWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlzRnVuY3Rpb24ocGFyYW0ucmVzb2x2ZXIpXHJcbiAgICAgICAgICAgICAgICA/IHBhcmFtLnJlc29sdmVyKGVudlZhbHVlLCBoZWxwZXIpXHJcbiAgICAgICAgICAgICAgICA6IGNvbnZlcnRWYWx1ZShlbnZWYWx1ZSwgZ2V0VHlwZShwYXJhbS5kZWZhdWx0VmFsdWUpKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICBjb2xvcml6ZShgUHJvY2Vzc2luZyBwYXJhbSB2YWx1ZWAsIENvbnNvbGVDb2xvci5GZ1llbGxvdyksXHJcbiAgICAgICAgICAgICAgICBjb2xvcml6ZShwYXJhbS5uYW1lLCBDb25zb2xlQ29sb3IuRmdHcmVlbiksXHJcbiAgICAgICAgICAgICAgICBjb2xvcml6ZShlbnZOYW1lLCBDb25zb2xlQ29sb3IuRmdCbHVlKSxcclxuICAgICAgICAgICAgICAgIGBcIiR7ZW52VmFsdWV9XCJgLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihwYXJhbS5yZXNvbHZlcikpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbS5yZXNvbHZlcihwYXJhbS5kZWZhdWx0VmFsdWUsIGhlbHBlcik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgY29sb3JpemUoYFByb2Nlc3NpbmcgZGVmYXVsdCBwYXJhbSB2YWx1ZWAsIENvbnNvbGVDb2xvci5GZ1llbGxvdyksXHJcbiAgICAgICAgICAgICAgICBjb2xvcml6ZShwYXJhbS5uYW1lLCBDb25zb2xlQ29sb3IuRmdHcmVlbiksXHJcbiAgICAgICAgICAgICAgICBwYXJhbS5kZWZhdWx0VmFsdWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICBjb2xvcml6ZShgVXNpbmcgZGVmYXVsdCBwYXJhbSB2YWx1ZWAsIENvbnNvbGVDb2xvci5GZ1llbGxvdyksXHJcbiAgICAgICAgICAgIGNvbG9yaXplKHBhcmFtLm5hbWUsIENvbnNvbGVDb2xvci5GZ0dyZWVuKSxcclxuICAgICAgICAgICAgcGFyYW0uZGVmYXVsdFZhbHVlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtLmRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNQYXJhbShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLnBhcmFtTWFwW25hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc29sdmUobmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlSW50ZXJuYWwobmFtZSwgW10pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCByZXNvbHZlSW50ZXJuYWwobmFtZTogc3RyaW5nLCBhbHJlYWR5UmVzb2x2ZWQ6IHN0cmluZ1tdKTogYW55IHtcclxuICAgICAgICBpZiAoYWxyZWFkeVJlc29sdmVkLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZDogJHthbHJlYWR5UmVzb2x2ZWQuam9pbihcIiAtPiBcIil9IC0+ICR7bmFtZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWxyZWFkeVJlc29sdmVkLnB1c2gobmFtZSk7XHJcbiAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLnBhcmFtTWFwW25hbWVdO1xyXG4gICAgICAgIGlmICghcGFyYW0pIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyIHdpdGggbmFtZTogJyR7bmFtZX0nIGRvZXMgbm90IGV4aXN0cyBpbiBjb25maWd1cmF0aW9uYCk7XHJcbiAgICAgICAgaWYgKCEobmFtZSBpbiB0aGlzLnBhcmFtVmFsdWVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtVmFsdWVzW25hbWVdID0gdGhpcy5yZXNvbHZlVmFsdWUocGFyYW0sIGFscmVhZHlSZXNvbHZlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtVmFsdWVzW25hbWVdO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ObjectId } from "bson";
|
|
2
|
-
import { deleteFromBucket } from "../../utils";
|
|
2
|
+
import { deleteFromBucket, gunzipPromised } from "../../utils";
|
|
3
3
|
import { BaseEntity } from "./base-entity";
|
|
4
4
|
export class LazyAsset extends BaseEntity {
|
|
5
5
|
constructor(id, data, collection, logger, assets, progresses) {
|
|
@@ -67,7 +67,8 @@ export class LazyAsset extends BaseEntity {
|
|
|
67
67
|
this.data.progressId = (await this.progresses.create()).id;
|
|
68
68
|
this.data.assetId = null;
|
|
69
69
|
await this.save();
|
|
70
|
-
|
|
70
|
+
const jobParams = JSON.parse(await gunzipPromised(this.data.jobParams));
|
|
71
|
+
await this.progresses.jobMan.enqueueWithName(this.data.jobName, { ...jobParams, lazyId: this.id, fromLoad });
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGllcy9sYXp5LWFzc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHOUIsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGNBQWMsRUFBVyxNQUFNLGFBQWEsQ0FBQztBQUd2RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3pDLE1BQU0sT0FBTyxTQUFVLFNBQVEsVUFBc0I7SUFzQmpELFlBQVksRUFBWSxFQUNaLElBQXlCLEVBQ3pCLFVBQXNCLEVBQ1osTUFBYyxFQUNkLE1BQWMsRUFDZCxVQUFzQjtRQUN4QyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUhWLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUU1QyxDQUFDO0lBM0JELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQVdELEtBQUssQ0FBQyxNQUFNO1FBQ1IsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFD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RSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO0lBQy9HLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29sbGVjdGlvbn0gZnJvbSBcIm1vbmdvZGJcIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuXHJcbmltcG9ydCB7SUFzc2V0LCBJTGF6eUFzc2V0fSBmcm9tIFwiLi4vLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7ZGVsZXRlRnJvbUJ1Y2tldCwgZ3VuemlwUHJvbWlzZWQsIGlzT2JqZWN0fSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcclxuaW1wb3J0IHtBc3NldHN9IGZyb20gXCIuLi9hc3NldHNcIjtcclxuaW1wb3J0IHtQcm9ncmVzc2VzfSBmcm9tIFwiLi4vcHJvZ3Jlc3Nlc1wiO1xyXG5pbXBvcnQge0Jhc2VFbnRpdHl9IGZyb20gXCIuL2Jhc2UtZW50aXR5XCI7XHJcbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi4vbG9nZ2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTGF6eUFzc2V0IGV4dGVuZHMgQmFzZUVudGl0eTxJTGF6eUFzc2V0PiBpbXBsZW1lbnRzIElMYXp5QXNzZXQge1xyXG5cclxuICAgIGdldCBqb2JOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5qb2JOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBqb2JQYXJhbXMoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmpvYlBhcmFtcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgam9iUXVlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5qb2JRdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByb2dyZXNzSWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnByb2dyZXNzSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGFzc2V0SWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmFzc2V0SWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoaWQ6IE9iamVjdElkLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogUGFydGlhbDxJTGF6eUFzc2V0PixcclxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgbG9nZ2VyOiBMb2dnZXIsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgYXNzZXRzOiBBc3NldHMsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgcHJvZ3Jlc3NlczogUHJvZ3Jlc3Nlcykge1xyXG4gICAgICAgIHN1cGVyKGlkLCBkYXRhLCBjb2xsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1bmxpbmsoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmxvYWQoKTtcclxuICAgICAgICBpZiAoIXRoaXMucHJvZ3Jlc3NJZCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZGVsZXRlT25lKHtfaWQ6IHRoaXMubUlkfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWxldGVGcm9tQnVja2V0KHRoaXMuYXNzZXRzLmJ1Y2tldCwgbmV3IE9iamVjdElkKHRoaXMuYXNzZXRJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0V29ya2luZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxvYWQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzZXMuZ2V0KHRoaXMucHJvZ3Jlc3NJZCkudGhlbihwID0+IHtcclxuICAgICAgICAgICAgICAgIHA/LmNhbmNlbCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFdvcmtpbmdPbkFzc2V0KGZhbHNlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhcImxhenktYXNzZXRzXCIsIGBTdGFydGVkIHdvcmtpbmcgb24gbGF6eSBhc3NldDogJHt0aGlzLmlkfWApO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwibGF6eS1hc3NldHNcIiwgYENhbid0IHN0YXJ0IHdvcmtpbmcgb24gbGF6eSBhc3NldDogJHt0aGlzLmlkfVxcblJlYXNvbjogJHtyZWFzb259YCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRBc3NldCgpOiBQcm9taXNlPElBc3NldD4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWQpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmFzc2V0SWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNzZXRzLnJlYWQodGhpcy5hc3NldElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NJZCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2dyZXNzZXMud2FpdFRvRmluaXNoKHRoaXMucHJvZ3Jlc3NJZCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRBc3NldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0V29ya2luZ09uQXNzZXQodHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFzc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgd3JpdGVBc3NldChhc3NldDogSUFzc2V0KTogUHJvbWlzZTxJQXNzZXQ+IHtcclxuICAgICAgICB0aGlzLmRhdGEuYXNzZXRJZCA9IGFzc2V0LmlkO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xyXG4gICAgICAgIHJldHVybiBhc3NldDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RhcnRXb3JraW5nT25Bc3NldChmcm9tTG9hZDogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnByb2dyZXNzSWQgPSAoYXdhaXQgdGhpcy5wcm9ncmVzc2VzLmNyZWF0ZSgpKS5pZDtcclxuICAgICAgICB0aGlzLmRhdGEuYXNzZXRJZCA9IG51bGw7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgY29uc3Qgam9iUGFyYW1zID0gSlNPTi5wYXJzZShhd2FpdCBndW56aXBQcm9taXNlZCh0aGlzLmRhdGEuam9iUGFyYW1zKSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9ncmVzc2VzLmpvYk1hbi5lbnF1ZXVlV2l0aE5hbWUodGhpcy5kYXRhLmpvYk5hbWUsIHsuLi5qb2JQYXJhbXMsIGxhenlJZDogdGhpcy5pZCwgZnJvbUxvYWR9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|