@stemy/backend 6.0.2 → 6.0.4
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/common-types.d.ts +4 -1
- package/esm2022/common-types.mjs +3 -1
- package/esm2022/public_api.mjs +15 -4
- package/esm2022/services/drivers/asset-fallback-driver.mjs +35 -0
- package/esm2022/services/drivers/asset-grid.driver.mjs +1 -3
- package/esm2022/services/drivers/asset-local.driver.mjs +1 -3
- package/esm2022/services/drivers/asset-storage-proxy.driver.mjs +43 -0
- package/esm2022/services/drivers/fallback-readable.mjs +34 -0
- package/esm2022/services/drivers/fallback-streams.mjs +72 -0
- package/esm2022/services/entities/asset.mjs +4 -10
- package/esm2022/services/job-manager.mjs +61 -50
- package/fesm2022/stemy-backend.mjs +213 -63
- package/fesm2022/stemy-backend.mjs.map +1 -1
- package/package.json +2 -1
- package/public_api.d.ts +1 -0
- package/services/drivers/asset-fallback-driver.d.ts +11 -0
- package/services/drivers/asset-grid.driver.d.ts +0 -1
- package/services/drivers/asset-local.driver.d.ts +0 -1
- package/services/drivers/asset-storage-proxy.driver.d.ts +14 -0
- package/services/drivers/fallback-readable.d.ts +2 -0
- package/services/drivers/fallback-streams.d.ts +9 -0
- package/services/job-manager.d.ts +4 -6
package/common-types.d.ts
CHANGED
|
@@ -77,6 +77,8 @@ export declare const DI_CONTAINER: InjectionToken<IDependencyContainer>;
|
|
|
77
77
|
export declare const OPENAPI_VALIDATION: InjectionToken<OpenApiValidation>;
|
|
78
78
|
export declare const LOCAL_DIR: InjectionToken<string>;
|
|
79
79
|
export declare const ASSET_DRIVER: InjectionToken<IAssetDriver>;
|
|
80
|
+
export declare const ASSET_MAIN_DRIVER: InjectionToken<IAssetDriver>;
|
|
81
|
+
export declare const ASSET_FALLBACK_DRIVER: InjectionToken<IAssetDriver>;
|
|
80
82
|
export interface IMatchField {
|
|
81
83
|
field: string;
|
|
82
84
|
filter: any;
|
|
@@ -224,7 +226,6 @@ export interface IAssetUploadOpts {
|
|
|
224
226
|
contentType?: string;
|
|
225
227
|
}
|
|
226
228
|
export interface IAssetDriver {
|
|
227
|
-
readonly metaCollection: string;
|
|
228
229
|
openUploadStream(filename: string, opts?: IAssetUploadOpts): IAssetUploadStream;
|
|
229
230
|
openDownloadStream(id: ObjectId): Readable;
|
|
230
231
|
delete(id: ObjectId): Promise<void>;
|
|
@@ -322,4 +323,6 @@ export interface IBackendConfig {
|
|
|
322
323
|
customValidation?: SchemaConverter | SchemaObject;
|
|
323
324
|
assetLocalDir?: string;
|
|
324
325
|
assetDriver?: Type<IAssetDriver>;
|
|
326
|
+
assetMainDriver?: Type<IAssetDriver>;
|
|
327
|
+
assetFallbackDriver?: Type<IAssetDriver>;
|
|
325
328
|
}
|
package/esm2022/common-types.mjs
CHANGED
|
@@ -13,6 +13,8 @@ export const DI_CONTAINER = Symbol.for("di-container-token");
|
|
|
13
13
|
export const OPENAPI_VALIDATION = Symbol.for("openapi-validation-token");
|
|
14
14
|
export const LOCAL_DIR = Symbol.for('asset-local-dir');
|
|
15
15
|
export const ASSET_DRIVER = Symbol.for('assets-driver');
|
|
16
|
+
export const ASSET_MAIN_DRIVER = Symbol.for('assets-main-driver');
|
|
17
|
+
export const ASSET_FALLBACK_DRIVER = Symbol.for('assets-fallback-driver');
|
|
16
18
|
export class Parameter {
|
|
17
19
|
name;
|
|
18
20
|
defaultValue;
|
|
@@ -23,4 +25,4 @@ export class Parameter {
|
|
|
23
25
|
this.resolver = resolver;
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsdUJBQXVCO0FBRXZCLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUM7QUEwRTdCLDJCQUEyQjtBQUUzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQTZCLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUF5QixNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRWpFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFdkcsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUE0QixNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBMkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRW5GLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTdGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFzQyxNQUFNLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFNUcsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUE4QixNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFbEYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUF5QyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFbkcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUU1RyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQTJCLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUUvRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFpQ3RGLE1BQU0sT0FBTyxTQUFTO0lBRUc7SUFBcUI7SUFBMEI7SUFBcEUsWUFBcUIsSUFBWSxFQUFTLFlBQWlCLEVBQVMsV0FBMEIsSUFBSTtRQUE3RSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQUs7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFzQjtJQUVsRyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlcnZlcn0gZnJvbSBcImh0dHBcIjtcclxuaW1wb3J0IHtSZXF1ZXN0LCBFeHByZXNzfSBmcm9tIFwiZXhwcmVzc1wiO1xyXG5pbXBvcnQge1NvY2tldCwgU2VydmVyIGFzIFNvY2tldFNlcnZlcn0gZnJvbSBcInNvY2tldC5pb1wiO1xyXG5pbXBvcnQge1JvdXRpbmdDb250cm9sbGVyc09wdGlvbnN9IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCB7U29ja2V0Q29udHJvbGxlcnMsIFNvY2tldENvbnRyb2xsZXJzT3B0aW9uc30gZnJvbSBcInNvY2tldC1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgQ2xhc3NQcm92aWRlcixcclxuICAgIERlcGVuZGVuY3lDb250YWluZXIsXHJcbiAgICBJbmplY3Rpb25Ub2tlbixcclxuICAgIFRva2VuUHJvdmlkZXIsXHJcbiAgICBWYWx1ZVByb3ZpZGVyLFxyXG4gICAgUmVnaXN0cmF0aW9uT3B0aW9uc1xyXG59IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge1NjaGVtYU9iamVjdH0gZnJvbSBcIm9wZW5hcGkzLXRzXCI7XHJcbmltcG9ydCB7UmVhZGFibGUsIFdyaXRhYmxlfSBmcm9tIFwic3RyZWFtXCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7QW55RXhwcmVzc2lvbiwgRXhwcmVzc2lvbn0gZnJvbSBcIm1vbmdvb3NlXCI7XHJcbmltcG9ydCB7SUNvbW1hbmRBcmdzLCBJU3VnZ2VzdGlvbiwgSVRlcm1pbmFsIGFzIElUZXJtaW5hbEJhc2V9IGZyb20gXCJAc3RlbXkvdGVybWluYWwtY29tbWFuZHMtYWRkb25cIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuXHJcbi8vIC0tLSBESSBmdW5jdGlvbnMgLS0tXHJcblxyXG5leHBvcnQgY29uc3QgVHlwZSA9IEZ1bmN0aW9uO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUeXBlPFQgPSBvYmplY3Q+IGV4dGVuZHMgRnVuY3Rpb24ge1xyXG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmFjdG9yeVByb3ZpZGVyPFQ+IHtcclxuICAgIHVzZUZhY3Rvcnk6IChkYzogSURlcGVuZGVuY3lDb250YWluZXIpID0+IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRyZWUge1xyXG4gICAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xyXG4gICAgcmVzb2x2ZVNlcnZpY2UoKTogYW55O1xyXG4gICAgcmVzb2x2ZUxlYXZlcygpOiBNYXA8c3RyaW5nLCBJVHJlZT47XHJcbiAgICByZXNvbHZlU2VydmljZXMoKTogTWFwPHN0cmluZywgYW55PjtcclxuICAgIHJlc29sdmVBbmNlc3RvcihwYXRoOiBzdHJpbmcpOiBJVHJlZTtcclxuICAgIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZywgdGhyb3dFcnJvcj86IGJvb2xlYW4pOiBJVHJlZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRGVwZW5kZW5jeUNvbnRhaW5lciB7XHJcbiAgICByZWFkb25seSBwYXJlbnQ6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVhZG9ubHkgdHJlZTogSVRyZWU7XHJcbiAgICByZWFkb25seSByZWdpc3RlcmVkVG9rZW5zOiBSZWFkb25seUFycmF5PEluamVjdGlvblRva2VuPjtcclxuICAgIGNyZWF0ZUNoaWxkQ29udGFpbmVyKCk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogVmFsdWVQcm92aWRlcjxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogRmFjdG9yeVByb3ZpZGVyPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlcjxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4sIHByb3ZpZGVyOiBUb2tlblByb3ZpZGVyPFQ+LCBvcHRpb25zPzogUmVnaXN0cmF0aW9uT3B0aW9ucyk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogQ2xhc3NQcm92aWRlcjxUPiwgb3B0aW9ucz86IFJlZ2lzdHJhdGlvbk9wdGlvbnMpOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcHJvdmlkZXI6IFR5cGU8VD4sIG9wdGlvbnM/OiBSZWdpc3RyYXRpb25PcHRpb25zKTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlclNpbmdsZXRvbjxUPihmcm9tOiBJbmplY3Rpb25Ub2tlbjxUPiwgdG86IEluamVjdGlvblRva2VuPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlclNpbmdsZXRvbjxUPih0b2tlbjogVHlwZTxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXJUeXBlPFQ+KGZyb206IEluamVjdGlvblRva2VuPFQ+LCB0bzogSW5qZWN0aW9uVG9rZW48VD4pOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVySW5zdGFuY2U8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBpbnN0YW5jZTogVCk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgZ2V0PFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFQ7XHJcbiAgICByZXNvbHZlPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFQ7XHJcbiAgICByZXNvbHZlQWxsPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFRbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGFzc0Jhc2VkUHJvdmlkZXI8VD4gZXh0ZW5kcyBDbGFzc1Byb3ZpZGVyPFQ+IHtcclxuICAgIHByb3ZpZGU6IEluamVjdGlvblRva2VuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZhbHVlQmFzZWRQcm92aWRlcjxUPiBleHRlbmRzIFZhbHVlUHJvdmlkZXI8VD4ge1xyXG4gICAgcHJvdmlkZTogSW5qZWN0aW9uVG9rZW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmFjdG9yeUJhc2VkUHJvdmlkZXI8VD4gZXh0ZW5kcyBGYWN0b3J5UHJvdmlkZXI8VD4ge1xyXG4gICAgcHJvdmlkZTogSW5qZWN0aW9uVG9rZW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5CYXNlZFByb3ZpZGVyPFQ+IGV4dGVuZHMgVG9rZW5Qcm92aWRlcjxUPiB7XHJcbiAgICBwcm92aWRlOiBJbmplY3Rpb25Ub2tlbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU3lyaW5nZVByb3ZpZGVyPFQ+ID0gVHlwZTxUPiB8IENsYXNzUHJvdmlkZXI8VD4gfCBWYWx1ZVByb3ZpZGVyPFQ+IHwgRmFjdG9yeVByb3ZpZGVyPFQ+IHwgVG9rZW5Qcm92aWRlcjxUPjtcclxuXHJcbmV4cG9ydCB0eXBlIFByb3ZpZGVyPFQ+ID0gVHlwZTxUPiB8IENsYXNzQmFzZWRQcm92aWRlcjxUPiB8IFZhbHVlQmFzZWRQcm92aWRlcjxUPiB8IEZhY3RvcnlCYXNlZFByb3ZpZGVyPFQ+IHwgVG9rZW5CYXNlZFByb3ZpZGVyPFQ+O1xyXG5cclxuLy8gLS0tIFVzZWZ1bCBnZW5lcmljIHR5cGVzIC0tLVxyXG5cclxuZXhwb3J0IHR5cGUgQ29uc3RydWN0b3I8VCA9IG9iamVjdD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUXHJcblxyXG5leHBvcnQgdHlwZSBJbmZlckdlbmVyaWM8VD4gPSBUIGV4dGVuZHMgVHlwZTxpbmZlciBCPiA/IEIgOiBuZXZlcjtcclxuXHJcbmV4cG9ydCB0eXBlIFBpY2tNYXRjaGluZzxULCBWPiA9IHsgW0sgaW4ga2V5b2YgVCBhcyBUW0tdIGV4dGVuZHMgViA/IEsgOiBuZXZlcl06IFRbS10gfVxyXG5cclxuZXhwb3J0IHR5cGUgT21pdEZpcnN0QXJnPEY+ID0gRiBleHRlbmRzICh4OiBhbnksIC4uLmFyZ3M6IGluZmVyIFApID0+IGluZmVyIFIgPyAoLi4uYXJnczogUCkgPT4gUiA6IG5ldmVyO1xyXG5cclxuLy8gLS0tIE9wZW5BcGkgLS0tXHJcblxyXG5leHBvcnQgdHlwZSBTY2hlbWFDb252ZXJ0ZXIgPSAobWV0YTogYW55LCBvcHRpb25zOiBhbnkpID0+IFNjaGVtYU9iamVjdDtcclxuXHJcbmV4cG9ydCB0eXBlIE9wZW5BcGlWYWxpZGF0aW9uID0gU2NoZW1hQ29udmVydGVyIHwgU2NoZW1hT2JqZWN0O1xyXG5cclxuLy8gLS0tIEluamVjdGlvbiB0b2tlbnMgLS0tXHJcblxyXG5leHBvcnQgY29uc3QgRklYVFVSRTogSW5qZWN0aW9uVG9rZW48SUZpeHR1cmU+ID0gU3ltYm9sLmZvcihcImZpeHR1cmUtdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgSk9COiBJbmplY3Rpb25Ub2tlbjxJSm9iPiA9IFN5bWJvbC5mb3IoXCJqb2ItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgVEVSTUlOQUxfQ09NTUFORDogSW5qZWN0aW9uVG9rZW48SVRlcm1pbmFsQ29tbWFuZD4gPSBTeW1ib2wuZm9yKFwidGVybWluYWwtY29tbWFuZC10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBFWFBSRVNTOiBJbmplY3Rpb25Ub2tlbjxFeHByZXNzPiA9IFN5bWJvbC5mb3IoXCJleHByZXNzLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEhUVFBfU0VSVkVSOiBJbmplY3Rpb25Ub2tlbjxTZXJ2ZXI+ID0gU3ltYm9sLmZvcihcImh0dHAtc2VydmVyLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNPQ0tFVF9TRVJWRVI6IEluamVjdGlvblRva2VuPFNvY2tldFNlcnZlcj4gPSBTeW1ib2wuZm9yKFwic29ja2V0LXNlcnZlci10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBTT0NLRVRfQ09OVFJPTExFUlM6IEluamVjdGlvblRva2VuPFNvY2tldENvbnRyb2xsZXJzPiA9IFN5bWJvbC5mb3IoXCJzb2NrZXQtY29udHJvbGxlcnMtdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgUEFSQU1FVEVSOiBJbmplY3Rpb25Ub2tlbjxQYXJhbWV0ZXI+ID0gU3ltYm9sLmZvcihcInBhcmFtZXRlci10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBESV9DT05UQUlORVI6IEluamVjdGlvblRva2VuPElEZXBlbmRlbmN5Q29udGFpbmVyPiA9IFN5bWJvbC5mb3IoXCJkaS1jb250YWluZXItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgT1BFTkFQSV9WQUxJREFUSU9OOiBJbmplY3Rpb25Ub2tlbjxPcGVuQXBpVmFsaWRhdGlvbj4gPSBTeW1ib2wuZm9yKFwib3BlbmFwaS12YWxpZGF0aW9uLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IExPQ0FMX0RJUjogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IFN5bWJvbC5mb3IoJ2Fzc2V0LWxvY2FsLWRpcicpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEFTU0VUX0RSSVZFUjogSW5qZWN0aW9uVG9rZW48SUFzc2V0RHJpdmVyPiA9IFN5bWJvbC5mb3IoJ2Fzc2V0cy1kcml2ZXInKTtcclxuXHJcbi8vIC0tLSBNb25nbyBpbnRlcmZhY2VzIGFuZCB0eXBlc1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTWF0Y2hGaWVsZCB7XHJcbiAgICBmaWVsZDogc3RyaW5nO1xyXG4gICAgZmlsdGVyOiBhbnk7XHJcbiAgICB3aGVuOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9qZWN0T3B0aW9ucyB7XHJcbiAgICBbZmllbGQ6IHN0cmluZ106IEFueUV4cHJlc3Npb24gfCBFeHByZXNzaW9uIHwgSVByb2plY3RPcHRpb25zO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVbndpbmRPcHRpb25zIHtcclxuICAgIHBhdGg6IHN0cmluZztcclxuICAgIGluY2x1ZGVBcnJheUluZGV4Pzogc3RyaW5nO1xyXG4gICAgcHJlc2VydmVOdWxsQW5kRW1wdHlBcnJheXM/OiBib29sZWFuO1xyXG59XHJcblxyXG4vLyAtLS0gSW50ZXJmYWNlcyBhbmQgdXRpbGl0eSBjbGFzc2VzIC0tLVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRml4dHVyZSB7XHJcbiAgICBsb2FkKG91dHB1dD86IElGaXh0dXJlT3V0cHV0KTogUHJvbWlzZTxhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaXh0dXJlT3V0cHV0IHtcclxuICAgIHdyaXRlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbiAgICB3cml0ZWxuKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFBhcmFtUmVzb2x2ZXIgPSAodmFsdWU6IHN0cmluZywgaGVscGVyPzogKHBhcmFtOiBzdHJpbmcpID0+IGFueSkgPT4gYW55O1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhcmFtZXRlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgbmFtZTogc3RyaW5nLCBwdWJsaWMgZGVmYXVsdFZhbHVlOiBhbnksIHB1YmxpYyByZXNvbHZlcjogUGFyYW1SZXNvbHZlciA9IG51bGwpIHtcclxuXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFNvY2tldFBhcmFtID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IFNvY2tldFBhcmFtcztcclxuXHJcbmV4cG9ydCB0eXBlIFNvY2tldFBhcmFtcyA9IHtcclxuICAgIFtuYW1lOiBzdHJpbmddOiBTb2NrZXRQYXJhbSB8IEFycmF5PFNvY2tldFBhcmFtPjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEpvYlBhcmFtcyA9IFNvY2tldFBhcmFtcztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNvY2tldE1lc3NhZ2Uge1xyXG4gICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgcGFyYW1zOiBTb2NrZXRQYXJhbXM7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1lc3NhZ2VCcmlkZ2Uge1xyXG4gICAgc2VuZE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nLCBwYXJhbXM/OiBTb2NrZXRQYXJhbXMpOiB2b2lkO1xyXG59XHJcblxyXG4vLyAtLS0gSk9CUyAtLS1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUpvYiB7XHJcbiAgICBwcm9jZXNzKG1lc3NhZ2luZz86IElNZXNzYWdlQnJpZGdlKTogUHJvbWlzZTxhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElKb2JUYXNrIHtcclxuICAgIHN0YXJ0OiAoKSA9PiB2b2lkO1xyXG4gICAgc3RvcDogKCkgPT4gdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBKb2JTY2hlZHVsZVJhbmdlIHtcclxuICAgIG1pbjogbnVtYmVyO1xyXG4gICAgbWF4OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEpvYlNjaGVkdWxlVGltZSA9IHN0cmluZyB8IG51bWJlciB8IEpvYlNjaGVkdWxlUmFuZ2UgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+O1xyXG5cclxuLy8gLS0tIENPTU1BTkRTICYgVEVSTUlOQUwgLS0tXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUZXJtaW5hbEZpbGUgZXh0ZW5kcyBJU3VnZ2VzdGlvbiB7XHJcbiAgICBjb250ZW50Pzogc3RyaW5nO1xyXG4gICAgYnVmZmVyPzogQnVmZmVyO1xyXG4gICAgYWNjZXB0Pzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUZXJtaW5hbCBleHRlbmRzIElUZXJtaW5hbEJhc2Uge1xyXG4gICAgc3VnZ2VzdEZpbGVzKGFjY2VwdDogc3RyaW5nKTogUHJvbWlzZTxJVGVybWluYWxGaWxlW10+O1xyXG4gICAgZG93bmxvYWRGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGJ1ZmZlcjogQnVmZmVyKTogUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVGVybWluYWxDb21tYW5kIHtcclxuICAgIG5hbWU/OiBzdHJpbmc7XHJcbiAgICBleGVjdXRlKGFyZ3M6IElDb21tYW5kQXJncywgdGVybWluYWw6IElUZXJtaW5hbCk6IFByb21pc2U8YW55PjtcclxuICAgIHN1Z2dlc3Q/KGFyZ3M6IElDb21tYW5kQXJncywgdGVybWluYWw6IElUZXJtaW5hbCk6IFByb21pc2U8QXJyYXk8c3RyaW5nIHwgSVN1Z2dlc3Rpb24+PjtcclxufVxyXG5cclxuLy8gLS0tIEFTU0VUUyAtLS1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVByb2dyZXNzIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBjdXJyZW50OiBudW1iZXI7XHJcbiAgICBtYXg6IG51bWJlcjtcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIGVycm9yOiBzdHJpbmc7XHJcbiAgICBjYW5jZWxlZDogYm9vbGVhbjtcclxuICAgIHBlcmNlbnQ6IG51bWJlcjtcclxuICAgIHJlbWFpbmluZzogbnVtYmVyO1xyXG4gICAgc2V0TWVzc2FnZUJyaWRnZShtZXNzYWdlQnJpZGdlOiBJTWVzc2FnZUJyaWRnZSk6IHRoaXM7XHJcbiAgICBjcmVhdGVTdWJQcm9ncmVzcyhwcm9ncmVzc1ZhbHVlOiBudW1iZXIsIG1heD86IG51bWJlciwgbWVzc2FnZT86IHN0cmluZyk6IFByb21pc2U8SVByb2dyZXNzPjtcclxuICAgIHNldE1heChtYXg6IG51bWJlcik6IFByb21pc2U8YW55PjtcclxuICAgIHNldE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgc2V0RXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8YW55PjtcclxuICAgIGFkdmFuY2UodmFsdWU/OiBudW1iZXIpOiBQcm9taXNlPGFueT47XHJcbiAgICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgc2F2ZSgpOiBQcm9taXNlPGFueT47XHJcbiAgICBsb2FkKCk6IFByb21pc2U8dGhpcz47XHJcbiAgICB0b0pTT04oKTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldENyb3BJbmZvIHtcclxuICAgIHg6IG51bWJlcjtcclxuICAgIHk6IG51bWJlcjtcclxuICAgIHc6IG51bWJlcjtcclxuICAgIGg6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSW1hZ2VNZXRhIHtcclxuICAgIGNyb3A/OiBJQXNzZXRDcm9wSW5mbztcclxuICAgIGNyb3BCZWZvcmU/OiBJQXNzZXRDcm9wSW5mbztcclxuICAgIGNyb3BBZnRlcj86IElBc3NldENyb3BJbmZvO1xyXG4gICAgY2FudmFzU2NhbGVYPzogbnVtYmVyO1xyXG4gICAgY2FudmFzU2NhbGVZPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldE1ldGEgZXh0ZW5kcyBJSW1hZ2VNZXRhIHtcclxuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xyXG4gICAgZXh0ZW5zaW9uPzogc3RyaW5nO1xyXG4gICAgY2xhc3NpZmllZD86IGJvb2xlYW47XHJcbiAgICBkb3dubG9hZENvdW50PzogbnVtYmVyO1xyXG4gICAgZmlyc3REb3dubG9hZD86IERhdGU7XHJcbiAgICBsYXN0RG93bmxvYWQ/OiBEYXRlO1xyXG4gICAgcHJldmlldz86IE9iamVjdElkIHwgc3RyaW5nO1xyXG4gICAgcHVibGljVXJsPzogc3RyaW5nO1xyXG5cclxuICAgIFtwcm9wOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFzc2V0SW1hZ2VQYXJhbXMge1xyXG4gICAgcm90YXRpb24/OiBudW1iZXI7XHJcbiAgICBjYW52YXNTY2FsZVg/OiBudW1iZXI7XHJcbiAgICBjYW52YXNTY2FsZVk/OiBudW1iZXI7XHJcbiAgICBzY2FsZVg/OiBudW1iZXI7XHJcbiAgICBzY2FsZVk/OiBudW1iZXI7XHJcbiAgICBsYXp5PzogYm9vbGVhbjtcclxuICAgIGNyb3A/OiBzdHJpbmcgfCBib29sZWFuO1xyXG4gICAgY3JvcEJlZm9yZT86IHN0cmluZyB8IGJvb2xlYW4gfCBJQXNzZXRDcm9wSW5mbztcclxuICAgIGNyb3BBZnRlcj86IHN0cmluZyB8IGJvb2xlYW4gfCBJQXNzZXRDcm9wSW5mbztcclxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXQge1xyXG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZztcclxuICAgIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBjb250ZW50VHlwZTogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgbWV0YWRhdGE6IElBc3NldE1ldGE7XHJcbiAgICByZWFkb25seSBzdHJlYW06IFJlYWRhYmxlO1xyXG4gICAgdW5saW5rKCk6IFByb21pc2U8c3RyaW5nPjtcclxuICAgIHNldE1ldGEobWV0YTogUGFydGlhbDxJQXNzZXRNZXRhPik6IFByb21pc2U8YW55PjtcclxuICAgIGdldEJ1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj47XHJcbiAgICBkb3dubG9hZChtZXRhZGF0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFJlYWRhYmxlPjtcclxuICAgIGRvd25sb2FkSW1hZ2UocGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMsIG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+O1xyXG4gICAgZ2V0SW1hZ2UocGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMpOiBQcm9taXNlPFJlYWRhYmxlPjtcclxuICAgIHNhdmUoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgbG9hZCgpOiBQcm9taXNlPHRoaXM+O1xyXG4gICAgdG9KU09OKCk6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRVcGxvYWRTdHJlYW0gZXh0ZW5kcyBXcml0YWJsZSB7XHJcbiAgICBpZD86IE9iamVjdElkO1xyXG4gICAgZG9uZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFzc2V0VXBsb2FkT3B0cyB7XHJcbiAgICBjaHVua1NpemVCeXRlcz86IG51bWJlcjtcclxuICAgIG1ldGFkYXRhPzogSUFzc2V0TWV0YTtcclxuICAgIGNvbnRlbnRUeXBlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldERyaXZlciB7XHJcbiAgICByZWFkb25seSBtZXRhQ29sbGVjdGlvbjogc3RyaW5nO1xyXG4gICAgb3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCBvcHRzPzogSUFzc2V0VXBsb2FkT3B0cyk6IElBc3NldFVwbG9hZFN0cmVhbTtcclxuICAgIG9wZW5Eb3dubG9hZFN0cmVhbShpZDogT2JqZWN0SWQpOiBSZWFkYWJsZTtcclxuICAgIGRlbGV0ZShpZDogT2JqZWN0SWQpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMYXp5QXNzZXQge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGpvYk5hbWU6IHN0cmluZztcclxuICAgIGpvYlBhcmFtczogYW55O1xyXG4gICAgam9iUXVlOiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkQXQ6IERhdGU7XHJcbiAgICB1cGRhdGVkQXQ6IERhdGU7XHJcbiAgICBwcm9ncmVzc0lkPzogc3RyaW5nO1xyXG4gICAgYXNzZXRJZD86IHN0cmluZztcclxuICAgIHVubGluaygpOiBQcm9taXNlPHN0cmluZz47XHJcbiAgICBzdGFydFdvcmtpbmcoKTogdm9pZDtcclxuICAgIGxvYWRBc3NldCgpOiBQcm9taXNlPElBc3NldD47XHJcbiAgICB3cml0ZUFzc2V0KGFzc2V0OiBJQXNzZXQpOiBQcm9taXNlPElBc3NldD47XHJcbiAgICBzYXZlKCk6IFByb21pc2U8YW55PjtcclxuICAgIGxvYWQoKTogUHJvbWlzZTx0aGlzPjtcclxuICAgIHRvSlNPTigpOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xyXG4gICAgX2lkPzogc3RyaW5nO1xyXG4gICAgaWQ/OiBzdHJpbmc7XHJcbiAgICBlbWFpbD86IHN0cmluZztcclxuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xyXG4gICAgcm9sZXM6IHN0cmluZ1tdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDbGllbnRTb2NrZXQgZXh0ZW5kcyBTb2NrZXQge1xyXG4gICAgaW50ZXJlc3RlZFByb2dyZXNzZXM6IFNldDxzdHJpbmc+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElSZXF1ZXN0QmFzZTxUPiBleHRlbmRzIFJlcXVlc3Qge1xyXG4gICAgaWQ/OiBzdHJpbmc7XHJcbiAgICBzdGFydGVkPzogTW9tZW50O1xyXG4gICAgZW5kZWQ/OiBNb21lbnQ7XHJcbiAgICBjb250YWluZXI/OiBEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmc7XHJcbiAgICB1c2VyPzogVDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVxdWVzdCBleHRlbmRzIElSZXF1ZXN0QmFzZTxJVXNlcj4ge1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR2FsbGVyeUltYWdlIHtcclxuICAgIGZvbGRlcjogc3RyaW5nO1xyXG4gICAgdGh1bWI6IHN0cmluZztcclxuICAgIGJpZzogc3RyaW5nO1xyXG4gICAgc2VydmUoaWQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPlxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHYWxsZXJ5U2l6ZSB7XHJcbiAgICB3aWR0aD86IG51bWJlcjtcclxuICAgIGhlaWdodD86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR2FsbGVyeUltYWdlSGFuZGxlciB7XHJcbiAgICBnZXRPcmlnaW5hbCgpOiBQcm9taXNlPEJ1ZmZlcj47XHJcbiAgICB3cml0ZVJlc3VsdChpc1RodW1iOiBib29sZWFuLCBidWZmZXI6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBoYXNSZXN1bHQoaXNUaHVtYjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBzZXJ2ZVJlc3VsdChpc1RodW1iOiBib29sZWFuKTogUHJvbWlzZTxCdWZmZXI+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUcmFuc2xhdGlvbnMge1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYWdpbmF0aW9uTWV0YSB7XHJcbiAgICB0b3RhbDogbnVtYmVyO1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYWdpbmF0aW9uQmFzZTxUPiB7XHJcbiAgICBjb3VudDogbnVtYmVyXHJcbiAgICBpdGVtczogVFtdO1xyXG4gICAgbWV0YT86IElQYWdpbmF0aW9uTWV0YTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGFnaW5hdGlvbiBleHRlbmRzIElQYWdpbmF0aW9uQmFzZTxhbnk+IHtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2luYXRpb25QYXJhbXMge1xyXG4gICAgcGFnZTogbnVtYmVyO1xyXG4gICAgbGltaXQ6IG51bWJlcjtcclxuICAgIHNvcnQ/OiBzdHJpbmc7XHJcbiAgICBwb3B1bGF0ZT86IHN0cmluZ1tdO1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBGb250Rm9ybWF0ID0gXCJvcGVudHlwZVwiIHwgXCJ0cnVldHlwZVwiIHwgXCJ3b2ZmXCIgfCBcIndvZmYyXCIgfCBcImRhdGFmb3JrXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlVHlwZSB7XHJcbiAgICBleHQ6IHN0cmluZztcclxuICAgIG1pbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUm91dGluZ09wdGlvbnMgPSBSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zO1xyXG5cclxuZXhwb3J0IHR5cGUgU29ja2V0T3B0aW9ucyA9IE9taXQ8U29ja2V0Q29udHJvbGxlcnNPcHRpb25zLCBcImNvbnRhaW5lclwiPjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJhY2tlbmRDb25maWcge1xyXG4gICAgcm9vdEZvbGRlcj86IHN0cmluZztcclxuICAgIHJvdXRlUHJlZml4Pzogc3RyaW5nO1xyXG4gICAgcGFyYW1zPzogUGFyYW1ldGVyW107XHJcbiAgICBmaXh0dXJlcz86IFR5cGU8SUZpeHR1cmU+W107XHJcbiAgICBqb2JzPzogVHlwZTxJSm9iPltdO1xyXG4gICAgY29tbWFuZHM/OiBUeXBlPElUZXJtaW5hbENvbW1hbmQ+W107XHJcbiAgICByZXN0T3B0aW9ucz86IFJvdXRpbmdPcHRpb25zO1xyXG4gICAgc29ja2V0T3B0aW9ucz86IFNvY2tldE9wdGlvbnM7XHJcbiAgICBjdXN0b21WYWxpZGF0aW9uPzogU2NoZW1hQ29udmVydGVyIHwgU2NoZW1hT2JqZWN0O1xyXG4gICAgYXNzZXRMb2NhbERpcj86IHN0cmluZztcclxuICAgIGFzc2V0RHJpdmVyPzogVHlwZTxJQXNzZXREcml2ZXI+O1xyXG59XHJcbiJdfQ==
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsdUJBQXVCO0FBRXZCLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUM7QUEwRTdCLDJCQUEyQjtBQUUzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQTZCLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUF5QixNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRWpFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFdkcsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUE0QixNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBMkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRW5GLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTdGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFzQyxNQUFNLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFNUcsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUE4QixNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFbEYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUF5QyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFbkcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUU1RyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQTJCLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUUvRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFdEYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQWlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUVoRyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBaUN4RyxNQUFNLE9BQU8sU0FBUztJQUVHO0lBQXFCO0lBQTBCO0lBQXBFLFlBQXFCLElBQVksRUFBUyxZQUFpQixFQUFTLFdBQTBCLElBQUk7UUFBN0UsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFLO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7SUFFbEcsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXJ2ZXJ9IGZyb20gXCJodHRwXCI7XHJcbmltcG9ydCB7UmVxdWVzdCwgRXhwcmVzc30gZnJvbSBcImV4cHJlc3NcIjtcclxuaW1wb3J0IHtTb2NrZXQsIFNlcnZlciBhcyBTb2NrZXRTZXJ2ZXJ9IGZyb20gXCJzb2NrZXQuaW9cIjtcclxuaW1wb3J0IHtSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge1NvY2tldENvbnRyb2xsZXJzLCBTb2NrZXRDb250cm9sbGVyc09wdGlvbnN9IGZyb20gXCJzb2NrZXQtY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtcclxuICAgIENsYXNzUHJvdmlkZXIsXHJcbiAgICBEZXBlbmRlbmN5Q29udGFpbmVyLFxyXG4gICAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgICBUb2tlblByb3ZpZGVyLFxyXG4gICAgVmFsdWVQcm92aWRlcixcclxuICAgIFJlZ2lzdHJhdGlvbk9wdGlvbnNcclxufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtTY2hlbWFPYmplY3R9IGZyb20gXCJvcGVuYXBpMy10c1wiO1xyXG5pbXBvcnQge1JlYWRhYmxlLCBXcml0YWJsZX0gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQge0FueUV4cHJlc3Npb24sIEV4cHJlc3Npb259IGZyb20gXCJtb25nb29zZVwiO1xyXG5pbXBvcnQge0lDb21tYW5kQXJncywgSVN1Z2dlc3Rpb24sIElUZXJtaW5hbCBhcyBJVGVybWluYWxCYXNlfSBmcm9tIFwiQHN0ZW15L3Rlcm1pbmFsLWNvbW1hbmRzLWFkZG9uXCI7XHJcbmltcG9ydCB7T2JqZWN0SWR9IGZyb20gXCJic29uXCI7XHJcblxyXG4vLyAtLS0gREkgZnVuY3Rpb25zIC0tLVxyXG5cclxuZXhwb3J0IGNvbnN0IFR5cGUgPSBGdW5jdGlvbjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHlwZTxUID0gb2JqZWN0PiBleHRlbmRzIEZ1bmN0aW9uIHtcclxuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiBUO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZhY3RvcnlQcm92aWRlcjxUPiB7XHJcbiAgICB1c2VGYWN0b3J5OiAoZGM6IElEZXBlbmRlbmN5Q29udGFpbmVyKSA9PiBUO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUcmVlIHtcclxuICAgIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcclxuICAgIHJlc29sdmVTZXJ2aWNlKCk6IGFueTtcclxuICAgIHJlc29sdmVMZWF2ZXMoKTogTWFwPHN0cmluZywgSVRyZWU+O1xyXG4gICAgcmVzb2x2ZVNlcnZpY2VzKCk6IE1hcDxzdHJpbmcsIGFueT47XHJcbiAgICByZXNvbHZlQW5jZXN0b3IocGF0aDogc3RyaW5nKTogSVRyZWU7XHJcbiAgICByZXNvbHZlUGF0aChwYXRoOiBzdHJpbmcsIHRocm93RXJyb3I/OiBib29sZWFuKTogSVRyZWU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSURlcGVuZGVuY3lDb250YWluZXIge1xyXG4gICAgcmVhZG9ubHkgcGFyZW50OiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlYWRvbmx5IHRyZWU6IElUcmVlO1xyXG4gICAgcmVhZG9ubHkgcmVnaXN0ZXJlZFRva2VuczogUmVhZG9ubHlBcnJheTxJbmplY3Rpb25Ub2tlbj47XHJcbiAgICBjcmVhdGVDaGlsZENvbnRhaW5lcigpOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8VD4pOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcHJvdmlkZXI6IEZhY3RvcnlQcm92aWRlcjxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogVG9rZW5Qcm92aWRlcjxUPiwgb3B0aW9ucz86IFJlZ2lzdHJhdGlvbk9wdGlvbnMpOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcHJvdmlkZXI6IENsYXNzUHJvdmlkZXI8VD4sIG9wdGlvbnM/OiBSZWdpc3RyYXRpb25PcHRpb25zKTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlcjxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4sIHByb3ZpZGVyOiBUeXBlPFQ+LCBvcHRpb25zPzogUmVnaXN0cmF0aW9uT3B0aW9ucyk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXJTaW5nbGV0b248VD4oZnJvbTogSW5qZWN0aW9uVG9rZW48VD4sIHRvOiBJbmplY3Rpb25Ub2tlbjxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXJTaW5nbGV0b248VD4odG9rZW46IFR5cGU8VD4pOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyVHlwZTxUPihmcm9tOiBJbmplY3Rpb25Ub2tlbjxUPiwgdG86IEluamVjdGlvblRva2VuPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3Rlckluc3RhbmNlPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgaW5zdGFuY2U6IFQpOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIGdldDxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4pOiBUO1xyXG4gICAgcmVzb2x2ZTxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4pOiBUO1xyXG4gICAgcmVzb2x2ZUFsbDxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4pOiBUW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xhc3NCYXNlZFByb3ZpZGVyPFQ+IGV4dGVuZHMgQ2xhc3NQcm92aWRlcjxUPiB7XHJcbiAgICBwcm92aWRlOiBJbmplY3Rpb25Ub2tlbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWYWx1ZUJhc2VkUHJvdmlkZXI8VD4gZXh0ZW5kcyBWYWx1ZVByb3ZpZGVyPFQ+IHtcclxuICAgIHByb3ZpZGU6IEluamVjdGlvblRva2VuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZhY3RvcnlCYXNlZFByb3ZpZGVyPFQ+IGV4dGVuZHMgRmFjdG9yeVByb3ZpZGVyPFQ+IHtcclxuICAgIHByb3ZpZGU6IEluamVjdGlvblRva2VuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuQmFzZWRQcm92aWRlcjxUPiBleHRlbmRzIFRva2VuUHJvdmlkZXI8VD4ge1xyXG4gICAgcHJvdmlkZTogSW5qZWN0aW9uVG9rZW47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFN5cmluZ2VQcm92aWRlcjxUPiA9IFR5cGU8VD4gfCBDbGFzc1Byb3ZpZGVyPFQ+IHwgVmFsdWVQcm92aWRlcjxUPiB8IEZhY3RvcnlQcm92aWRlcjxUPiB8IFRva2VuUHJvdmlkZXI8VD47XHJcblxyXG5leHBvcnQgdHlwZSBQcm92aWRlcjxUPiA9IFR5cGU8VD4gfCBDbGFzc0Jhc2VkUHJvdmlkZXI8VD4gfCBWYWx1ZUJhc2VkUHJvdmlkZXI8VD4gfCBGYWN0b3J5QmFzZWRQcm92aWRlcjxUPiB8IFRva2VuQmFzZWRQcm92aWRlcjxUPjtcclxuXHJcbi8vIC0tLSBVc2VmdWwgZ2VuZXJpYyB0eXBlcyAtLS1cclxuXHJcbmV4cG9ydCB0eXBlIENvbnN0cnVjdG9yPFQgPSBvYmplY3Q+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVFxyXG5cclxuZXhwb3J0IHR5cGUgSW5mZXJHZW5lcmljPFQ+ID0gVCBleHRlbmRzIFR5cGU8aW5mZXIgQj4gPyBCIDogbmV2ZXI7XHJcblxyXG5leHBvcnQgdHlwZSBQaWNrTWF0Y2hpbmc8VCwgVj4gPSB7IFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzIFYgPyBLIDogbmV2ZXJdOiBUW0tdIH1cclxuXHJcbmV4cG9ydCB0eXBlIE9taXRGaXJzdEFyZzxGPiA9IEYgZXh0ZW5kcyAoeDogYW55LCAuLi5hcmdzOiBpbmZlciBQKSA9PiBpbmZlciBSID8gKC4uLmFyZ3M6IFApID0+IFIgOiBuZXZlcjtcclxuXHJcbi8vIC0tLSBPcGVuQXBpIC0tLVxyXG5cclxuZXhwb3J0IHR5cGUgU2NoZW1hQ29udmVydGVyID0gKG1ldGE6IGFueSwgb3B0aW9uczogYW55KSA9PiBTY2hlbWFPYmplY3Q7XHJcblxyXG5leHBvcnQgdHlwZSBPcGVuQXBpVmFsaWRhdGlvbiA9IFNjaGVtYUNvbnZlcnRlciB8IFNjaGVtYU9iamVjdDtcclxuXHJcbi8vIC0tLSBJbmplY3Rpb24gdG9rZW5zIC0tLVxyXG5cclxuZXhwb3J0IGNvbnN0IEZJWFRVUkU6IEluamVjdGlvblRva2VuPElGaXh0dXJlPiA9IFN5bWJvbC5mb3IoXCJmaXh0dXJlLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEpPQjogSW5qZWN0aW9uVG9rZW48SUpvYj4gPSBTeW1ib2wuZm9yKFwiam9iLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRFUk1JTkFMX0NPTU1BTkQ6IEluamVjdGlvblRva2VuPElUZXJtaW5hbENvbW1hbmQ+ID0gU3ltYm9sLmZvcihcInRlcm1pbmFsLWNvbW1hbmQtdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgRVhQUkVTUzogSW5qZWN0aW9uVG9rZW48RXhwcmVzcz4gPSBTeW1ib2wuZm9yKFwiZXhwcmVzcy10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBIVFRQX1NFUlZFUjogSW5qZWN0aW9uVG9rZW48U2VydmVyPiA9IFN5bWJvbC5mb3IoXCJodHRwLXNlcnZlci10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBTT0NLRVRfU0VSVkVSOiBJbmplY3Rpb25Ub2tlbjxTb2NrZXRTZXJ2ZXI+ID0gU3ltYm9sLmZvcihcInNvY2tldC1zZXJ2ZXItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgU09DS0VUX0NPTlRST0xMRVJTOiBJbmplY3Rpb25Ub2tlbjxTb2NrZXRDb250cm9sbGVycz4gPSBTeW1ib2wuZm9yKFwic29ja2V0LWNvbnRyb2xsZXJzLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBUkFNRVRFUjogSW5qZWN0aW9uVG9rZW48UGFyYW1ldGVyPiA9IFN5bWJvbC5mb3IoXCJwYXJhbWV0ZXItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgRElfQ09OVEFJTkVSOiBJbmplY3Rpb25Ub2tlbjxJRGVwZW5kZW5jeUNvbnRhaW5lcj4gPSBTeW1ib2wuZm9yKFwiZGktY29udGFpbmVyLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9QRU5BUElfVkFMSURBVElPTjogSW5qZWN0aW9uVG9rZW48T3BlbkFwaVZhbGlkYXRpb24+ID0gU3ltYm9sLmZvcihcIm9wZW5hcGktdmFsaWRhdGlvbi10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBMT0NBTF9ESVI6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBTeW1ib2wuZm9yKCdhc3NldC1sb2NhbC1kaXInKTtcclxuXHJcbmV4cG9ydCBjb25zdCBBU1NFVF9EUklWRVI6IEluamVjdGlvblRva2VuPElBc3NldERyaXZlcj4gPSBTeW1ib2wuZm9yKCdhc3NldHMtZHJpdmVyJyk7XHJcblxyXG5leHBvcnQgY29uc3QgQVNTRVRfTUFJTl9EUklWRVI6IEluamVjdGlvblRva2VuPElBc3NldERyaXZlcj4gPSBTeW1ib2wuZm9yKCdhc3NldHMtbWFpbi1kcml2ZXInKTtcclxuXHJcbmV4cG9ydCBjb25zdCBBU1NFVF9GQUxMQkFDS19EUklWRVI6IEluamVjdGlvblRva2VuPElBc3NldERyaXZlcj4gPSBTeW1ib2wuZm9yKCdhc3NldHMtZmFsbGJhY2stZHJpdmVyJyk7XHJcblxyXG4vLyAtLS0gTW9uZ28gaW50ZXJmYWNlcyBhbmQgdHlwZXNcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1hdGNoRmllbGQge1xyXG4gICAgZmllbGQ6IHN0cmluZztcclxuICAgIGZpbHRlcjogYW55O1xyXG4gICAgd2hlbjogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUHJvamVjdE9wdGlvbnMge1xyXG4gICAgW2ZpZWxkOiBzdHJpbmddOiBBbnlFeHByZXNzaW9uIHwgRXhwcmVzc2lvbiB8IElQcm9qZWN0T3B0aW9ucztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVW53aW5kT3B0aW9ucyB7XHJcbiAgICBwYXRoOiBzdHJpbmc7XHJcbiAgICBpbmNsdWRlQXJyYXlJbmRleD86IHN0cmluZztcclxuICAgIHByZXNlcnZlTnVsbEFuZEVtcHR5QXJyYXlzPzogYm9vbGVhbjtcclxufVxyXG5cclxuLy8gLS0tIEludGVyZmFjZXMgYW5kIHV0aWxpdHkgY2xhc3NlcyAtLS1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpeHR1cmUge1xyXG4gICAgbG9hZChvdXRwdXQ/OiBJRml4dHVyZU91dHB1dCk6IFByb21pc2U8YW55PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRml4dHVyZU91dHB1dCB7XHJcbiAgICB3cml0ZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gICAgd3JpdGVsbihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQYXJhbVJlc29sdmVyID0gKHZhbHVlOiBzdHJpbmcsIGhlbHBlcj86IChwYXJhbTogc3RyaW5nKSA9PiBhbnkpID0+IGFueTtcclxuXHJcbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG5hbWU6IHN0cmluZywgcHVibGljIGRlZmF1bHRWYWx1ZTogYW55LCBwdWJsaWMgcmVzb2x2ZXI6IFBhcmFtUmVzb2x2ZXIgPSBudWxsKSB7XHJcblxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBTb2NrZXRQYXJhbSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBTb2NrZXRQYXJhbXM7XHJcblxyXG5leHBvcnQgdHlwZSBTb2NrZXRQYXJhbXMgPSB7XHJcbiAgICBbbmFtZTogc3RyaW5nXTogU29ja2V0UGFyYW0gfCBBcnJheTxTb2NrZXRQYXJhbT47XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBKb2JQYXJhbXMgPSBTb2NrZXRQYXJhbXM7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElTb2NrZXRNZXNzYWdlIHtcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIHBhcmFtczogU29ja2V0UGFyYW1zO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNZXNzYWdlQnJpZGdlIHtcclxuICAgIHNlbmRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgcGFyYW1zPzogU29ja2V0UGFyYW1zKTogdm9pZDtcclxufVxyXG5cclxuLy8gLS0tIEpPQlMgLS0tXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElKb2Ige1xyXG4gICAgcHJvY2VzcyhtZXNzYWdpbmc/OiBJTWVzc2FnZUJyaWRnZSk6IFByb21pc2U8YW55PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSm9iVGFzayB7XHJcbiAgICBzdGFydDogKCkgPT4gdm9pZDtcclxuICAgIHN0b3A6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSm9iU2NoZWR1bGVSYW5nZSB7XHJcbiAgICBtaW46IG51bWJlcjtcclxuICAgIG1heDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBKb2JTY2hlZHVsZVRpbWUgPSBzdHJpbmcgfCBudW1iZXIgfCBKb2JTY2hlZHVsZVJhbmdlIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuXHJcbi8vIC0tLSBDT01NQU5EUyAmIFRFUk1JTkFMIC0tLVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVGVybWluYWxGaWxlIGV4dGVuZHMgSVN1Z2dlc3Rpb24ge1xyXG4gICAgY29udGVudD86IHN0cmluZztcclxuICAgIGJ1ZmZlcj86IEJ1ZmZlcjtcclxuICAgIGFjY2VwdD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVGVybWluYWwgZXh0ZW5kcyBJVGVybWluYWxCYXNlIHtcclxuICAgIHN1Z2dlc3RGaWxlcyhhY2NlcHQ6IHN0cmluZyk6IFByb21pc2U8SVRlcm1pbmFsRmlsZVtdPjtcclxuICAgIGRvd25sb2FkRmlsZShmaWxlbmFtZTogc3RyaW5nLCBidWZmZXI6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRlcm1pbmFsQ29tbWFuZCB7XHJcbiAgICBuYW1lPzogc3RyaW5nO1xyXG4gICAgZXhlY3V0ZShhcmdzOiBJQ29tbWFuZEFyZ3MsIHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPGFueT47XHJcbiAgICBzdWdnZXN0PyhhcmdzOiBJQ29tbWFuZEFyZ3MsIHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPEFycmF5PHN0cmluZyB8IElTdWdnZXN0aW9uPj47XHJcbn1cclxuXHJcbi8vIC0tLSBBU1NFVFMgLS0tXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9ncmVzcyB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY3VycmVudDogbnVtYmVyO1xyXG4gICAgbWF4OiBudW1iZXI7XHJcbiAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBlcnJvcjogc3RyaW5nO1xyXG4gICAgY2FuY2VsZWQ6IGJvb2xlYW47XHJcbiAgICBwZXJjZW50OiBudW1iZXI7XHJcbiAgICByZW1haW5pbmc6IG51bWJlcjtcclxuICAgIHNldE1lc3NhZ2VCcmlkZ2UobWVzc2FnZUJyaWRnZTogSU1lc3NhZ2VCcmlkZ2UpOiB0aGlzO1xyXG4gICAgY3JlYXRlU3ViUHJvZ3Jlc3MocHJvZ3Jlc3NWYWx1ZTogbnVtYmVyLCBtYXg/OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBQcm9taXNlPElQcm9ncmVzcz47XHJcbiAgICBzZXRNYXgobWF4OiBudW1iZXIpOiBQcm9taXNlPGFueT47XHJcbiAgICBzZXRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8YW55PjtcclxuICAgIHNldEVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XHJcbiAgICBhZHZhbmNlKHZhbHVlPzogbnVtYmVyKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgY2FuY2VsKCk6IFByb21pc2U8YW55PjtcclxuICAgIHNhdmUoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgbG9hZCgpOiBQcm9taXNlPHRoaXM+O1xyXG4gICAgdG9KU09OKCk6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRDcm9wSW5mbyB7XHJcbiAgICB4OiBudW1iZXI7XHJcbiAgICB5OiBudW1iZXI7XHJcbiAgICB3OiBudW1iZXI7XHJcbiAgICBoOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlTWV0YSB7XHJcbiAgICBjcm9wPzogSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQmVmb3JlPzogSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQWZ0ZXI/OiBJQXNzZXRDcm9wSW5mbztcclxuICAgIGNhbnZhc1NjYWxlWD86IG51bWJlcjtcclxuICAgIGNhbnZhc1NjYWxlWT86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRNZXRhIGV4dGVuZHMgSUltYWdlTWV0YSB7XHJcbiAgICBmaWxlbmFtZT86IHN0cmluZztcclxuICAgIGV4dGVuc2lvbj86IHN0cmluZztcclxuICAgIGNsYXNzaWZpZWQ/OiBib29sZWFuO1xyXG4gICAgZG93bmxvYWRDb3VudD86IG51bWJlcjtcclxuICAgIGZpcnN0RG93bmxvYWQ/OiBEYXRlO1xyXG4gICAgbGFzdERvd25sb2FkPzogRGF0ZTtcclxuICAgIHByZXZpZXc/OiBPYmplY3RJZCB8IHN0cmluZztcclxuICAgIHB1YmxpY1VybD86IHN0cmluZztcclxuXHJcbiAgICBbcHJvcDogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldEltYWdlUGFyYW1zIHtcclxuICAgIHJvdGF0aW9uPzogbnVtYmVyO1xyXG4gICAgY2FudmFzU2NhbGVYPzogbnVtYmVyO1xyXG4gICAgY2FudmFzU2NhbGVZPzogbnVtYmVyO1xyXG4gICAgc2NhbGVYPzogbnVtYmVyO1xyXG4gICAgc2NhbGVZPzogbnVtYmVyO1xyXG4gICAgbGF6eT86IGJvb2xlYW47XHJcbiAgICBjcm9wPzogc3RyaW5nIHwgYm9vbGVhbjtcclxuICAgIGNyb3BCZWZvcmU/OiBzdHJpbmcgfCBib29sZWFuIHwgSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQWZ0ZXI/OiBzdHJpbmcgfCBib29sZWFuIHwgSUFzc2V0Q3JvcEluZm87XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFzc2V0IHtcclxuICAgIHJlYWRvbmx5IGlkOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBmaWxlbmFtZTogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgY29udGVudFR5cGU6IHN0cmluZztcclxuICAgIHJlYWRvbmx5IG1ldGFkYXRhOiBJQXNzZXRNZXRhO1xyXG4gICAgcmVhZG9ubHkgc3RyZWFtOiBSZWFkYWJsZTtcclxuICAgIHVubGluaygpOiBQcm9taXNlPHN0cmluZz47XHJcbiAgICBzZXRNZXRhKG1ldGE6IFBhcnRpYWw8SUFzc2V0TWV0YT4pOiBQcm9taXNlPGFueT47XHJcbiAgICBnZXRCdWZmZXIoKTogUHJvbWlzZTxCdWZmZXI+O1xyXG4gICAgZG93bmxvYWQobWV0YWRhdGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxSZWFkYWJsZT47XHJcbiAgICBkb3dubG9hZEltYWdlKHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zLCBtZXRhZGF0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFJlYWRhYmxlPjtcclxuICAgIGdldEltYWdlKHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zKTogUHJvbWlzZTxSZWFkYWJsZT47XHJcbiAgICBzYXZlKCk6IFByb21pc2U8YW55PjtcclxuICAgIGxvYWQoKTogUHJvbWlzZTx0aGlzPjtcclxuICAgIHRvSlNPTigpOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFzc2V0VXBsb2FkU3RyZWFtIGV4dGVuZHMgV3JpdGFibGUge1xyXG4gICAgaWQ/OiBPYmplY3RJZDtcclxuICAgIGRvbmU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldFVwbG9hZE9wdHMge1xyXG4gICAgY2h1bmtTaXplQnl0ZXM/OiBudW1iZXI7XHJcbiAgICBtZXRhZGF0YT86IElBc3NldE1ldGE7XHJcbiAgICBjb250ZW50VHlwZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXREcml2ZXIge1xyXG4gICAgb3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCBvcHRzPzogSUFzc2V0VXBsb2FkT3B0cyk6IElBc3NldFVwbG9hZFN0cmVhbTtcclxuICAgIG9wZW5Eb3dubG9hZFN0cmVhbShpZDogT2JqZWN0SWQpOiBSZWFkYWJsZTtcclxuICAgIGRlbGV0ZShpZDogT2JqZWN0SWQpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMYXp5QXNzZXQge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGpvYk5hbWU6IHN0cmluZztcclxuICAgIGpvYlBhcmFtczogYW55O1xyXG4gICAgam9iUXVlOiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkQXQ6IERhdGU7XHJcbiAgICB1cGRhdGVkQXQ6IERhdGU7XHJcbiAgICBwcm9ncmVzc0lkPzogc3RyaW5nO1xyXG4gICAgYXNzZXRJZD86IHN0cmluZztcclxuICAgIHVubGluaygpOiBQcm9taXNlPHN0cmluZz47XHJcbiAgICBzdGFydFdvcmtpbmcoKTogdm9pZDtcclxuICAgIGxvYWRBc3NldCgpOiBQcm9taXNlPElBc3NldD47XHJcbiAgICB3cml0ZUFzc2V0KGFzc2V0OiBJQXNzZXQpOiBQcm9taXNlPElBc3NldD47XHJcbiAgICBzYXZlKCk6IFByb21pc2U8YW55PjtcclxuICAgIGxvYWQoKTogUHJvbWlzZTx0aGlzPjtcclxuICAgIHRvSlNPTigpOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xyXG4gICAgX2lkPzogc3RyaW5nO1xyXG4gICAgaWQ/OiBzdHJpbmc7XHJcbiAgICBlbWFpbD86IHN0cmluZztcclxuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xyXG4gICAgcm9sZXM6IHN0cmluZ1tdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDbGllbnRTb2NrZXQgZXh0ZW5kcyBTb2NrZXQge1xyXG4gICAgaW50ZXJlc3RlZFByb2dyZXNzZXM6IFNldDxzdHJpbmc+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElSZXF1ZXN0QmFzZTxUPiBleHRlbmRzIFJlcXVlc3Qge1xyXG4gICAgaWQ/OiBzdHJpbmc7XHJcbiAgICBzdGFydGVkPzogTW9tZW50O1xyXG4gICAgZW5kZWQ/OiBNb21lbnQ7XHJcbiAgICBjb250YWluZXI/OiBEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmc7XHJcbiAgICB1c2VyPzogVDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVxdWVzdCBleHRlbmRzIElSZXF1ZXN0QmFzZTxJVXNlcj4ge1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR2FsbGVyeUltYWdlIHtcclxuICAgIGZvbGRlcjogc3RyaW5nO1xyXG4gICAgdGh1bWI6IHN0cmluZztcclxuICAgIGJpZzogc3RyaW5nO1xyXG4gICAgc2VydmUoaWQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPlxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHYWxsZXJ5U2l6ZSB7XHJcbiAgICB3aWR0aD86IG51bWJlcjtcclxuICAgIGhlaWdodD86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR2FsbGVyeUltYWdlSGFuZGxlciB7XHJcbiAgICBnZXRPcmlnaW5hbCgpOiBQcm9taXNlPEJ1ZmZlcj47XHJcbiAgICB3cml0ZVJlc3VsdChpc1RodW1iOiBib29sZWFuLCBidWZmZXI6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBoYXNSZXN1bHQoaXNUaHVtYjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBzZXJ2ZVJlc3VsdChpc1RodW1iOiBib29sZWFuKTogUHJvbWlzZTxCdWZmZXI+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUcmFuc2xhdGlvbnMge1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYWdpbmF0aW9uTWV0YSB7XHJcbiAgICB0b3RhbDogbnVtYmVyO1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYWdpbmF0aW9uQmFzZTxUPiB7XHJcbiAgICBjb3VudDogbnVtYmVyXHJcbiAgICBpdGVtczogVFtdO1xyXG4gICAgbWV0YT86IElQYWdpbmF0aW9uTWV0YTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGFnaW5hdGlvbiBleHRlbmRzIElQYWdpbmF0aW9uQmFzZTxhbnk+IHtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2luYXRpb25QYXJhbXMge1xyXG4gICAgcGFnZTogbnVtYmVyO1xyXG4gICAgbGltaXQ6IG51bWJlcjtcclxuICAgIHNvcnQ/OiBzdHJpbmc7XHJcbiAgICBwb3B1bGF0ZT86IHN0cmluZ1tdO1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBGb250Rm9ybWF0ID0gXCJvcGVudHlwZVwiIHwgXCJ0cnVldHlwZVwiIHwgXCJ3b2ZmXCIgfCBcIndvZmYyXCIgfCBcImRhdGFmb3JrXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlVHlwZSB7XHJcbiAgICBleHQ6IHN0cmluZztcclxuICAgIG1pbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUm91dGluZ09wdGlvbnMgPSBSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zO1xyXG5cclxuZXhwb3J0IHR5cGUgU29ja2V0T3B0aW9ucyA9IE9taXQ8U29ja2V0Q29udHJvbGxlcnNPcHRpb25zLCBcImNvbnRhaW5lclwiPjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJhY2tlbmRDb25maWcge1xyXG4gICAgcm9vdEZvbGRlcj86IHN0cmluZztcclxuICAgIHJvdXRlUHJlZml4Pzogc3RyaW5nO1xyXG4gICAgcGFyYW1zPzogUGFyYW1ldGVyW107XHJcbiAgICBmaXh0dXJlcz86IFR5cGU8SUZpeHR1cmU+W107XHJcbiAgICBqb2JzPzogVHlwZTxJSm9iPltdO1xyXG4gICAgY29tbWFuZHM/OiBUeXBlPElUZXJtaW5hbENvbW1hbmQ+W107XHJcbiAgICByZXN0T3B0aW9ucz86IFJvdXRpbmdPcHRpb25zO1xyXG4gICAgc29ja2V0T3B0aW9ucz86IFNvY2tldE9wdGlvbnM7XHJcbiAgICBjdXN0b21WYWxpZGF0aW9uPzogU2NoZW1hQ29udmVydGVyIHwgU2NoZW1hT2JqZWN0O1xyXG4gICAgYXNzZXRMb2NhbERpcj86IHN0cmluZztcclxuICAgIGFzc2V0RHJpdmVyPzogVHlwZTxJQXNzZXREcml2ZXI+O1xyXG4gICAgYXNzZXRNYWluRHJpdmVyPzogVHlwZTxJQXNzZXREcml2ZXI+O1xyXG4gICAgYXNzZXRGYWxsYmFja0RyaXZlcj86IFR5cGU8SUFzc2V0RHJpdmVyPjtcclxufVxyXG4iXX0=
|
package/esm2022/public_api.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import webToken from "jsonwebtoken";
|
|
|
3
3
|
import { container } from "tsyringe";
|
|
4
4
|
import { HttpError, useContainer as useRoutingContainer, useExpressServer } from "routing-controllers";
|
|
5
5
|
import { SocketControllers } from "socket-controllers";
|
|
6
|
-
import { ASSET_DRIVER, DI_CONTAINER, EXPRESS, FIXTURE, HTTP_SERVER, JOB, LOCAL_DIR, OPENAPI_VALIDATION, Parameter, PARAMETER, SOCKET_CONTROLLERS, SOCKET_SERVER, TERMINAL_COMMAND } from "./common-types";
|
|
6
|
+
import { ASSET_DRIVER, ASSET_MAIN_DRIVER, ASSET_FALLBACK_DRIVER, DI_CONTAINER, EXPRESS, FIXTURE, HTTP_SERVER, JOB, LOCAL_DIR, OPENAPI_VALIDATION, Parameter, PARAMETER, SOCKET_CONTROLLERS, SOCKET_SERVER, TERMINAL_COMMAND } from "./common-types";
|
|
7
7
|
import { AssetProcessor } from "./services/asset-processor";
|
|
8
8
|
import { AssetResolver } from "./services/asset-resolver";
|
|
9
9
|
import { Assets } from "./services/assets";
|
|
@@ -45,16 +45,19 @@ import { TerminalController } from "./socket-controllers/terminal.controller";
|
|
|
45
45
|
import { CompressionMiddleware } from "./socket-middlewares/compression.middleware";
|
|
46
46
|
import { DiContainer } from "./utilities/di-container";
|
|
47
47
|
import { EmptyJob } from "./utilities/empty-job";
|
|
48
|
-
import { diContainers, getDirName, isFunction, isString, isType, prepareUrlEmpty, valueToPromise } from "./utils";
|
|
48
|
+
import { diContainers, getDirName, isFunction, isString, isType, prepareUrl, prepareUrlEmpty, valueToPromise } from "./utils";
|
|
49
49
|
import { setupStatic } from "./static";
|
|
50
50
|
import { commands } from "./commands";
|
|
51
51
|
import { fixtures } from './fixtures';
|
|
52
52
|
import { AssetGridDriver } from "./services/drivers/asset-grid.driver";
|
|
53
|
+
import { AssetLocalDriver } from "./services/drivers/asset-local.driver";
|
|
54
|
+
import { AssetFallbackDriver } from "./services/drivers/asset-fallback-driver";
|
|
53
55
|
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 } from "./utils";
|
|
54
56
|
export { IsFile, IsObjectId } from "./validators";
|
|
55
57
|
export { FIXTURE, JOB, TERMINAL_COMMAND, EXPRESS, HTTP_SERVER, SOCKET_SERVER, SOCKET_CONTROLLERS, PARAMETER, DI_CONTAINER, OPENAPI_VALIDATION, Type, Parameter } from "./common-types";
|
|
56
58
|
export { AssetLocalDriver } from "./services/drivers/asset-local.driver";
|
|
57
59
|
export { AssetGridDriver } from "./services/drivers/asset-grid.driver";
|
|
60
|
+
export { AssetStorageProxyDriver } from "./services/drivers/asset-storage-proxy.driver";
|
|
58
61
|
export { AssetProcessor } from "./services/asset-processor";
|
|
59
62
|
export { AssetResolver } from "./services/asset-resolver";
|
|
60
63
|
export { Assets } from "./services/assets";
|
|
@@ -136,6 +139,8 @@ export function createServices() {
|
|
|
136
139
|
new Parameter("mongoDb", "node-backend"),
|
|
137
140
|
new Parameter("mongoUser", null),
|
|
138
141
|
new Parameter("mongoPassword", null),
|
|
142
|
+
new Parameter("storageProxyUri", "http://localhost:4500/", prepareUrl),
|
|
143
|
+
new Parameter("storageProxyBucket", "something"),
|
|
139
144
|
new Parameter("nodeEnv", "production"),
|
|
140
145
|
new Parameter("appPort", 80),
|
|
141
146
|
new Parameter("zmqPort", 3000),
|
|
@@ -309,7 +314,13 @@ export async function setupBackend(config, providers, parent) {
|
|
|
309
314
|
useValue: config.assetLocalDir || "assets_files"
|
|
310
315
|
});
|
|
311
316
|
diContainer.register(ASSET_DRIVER, {
|
|
312
|
-
useClass: config.assetDriver ||
|
|
317
|
+
useClass: config.assetDriver || AssetFallbackDriver
|
|
318
|
+
});
|
|
319
|
+
diContainer.register(ASSET_MAIN_DRIVER, {
|
|
320
|
+
useClass: config.assetMainDriver || AssetGridDriver
|
|
321
|
+
});
|
|
322
|
+
diContainer.register(ASSET_FALLBACK_DRIVER, {
|
|
323
|
+
useClass: config.assetFallbackDriver || AssetLocalDriver
|
|
313
324
|
});
|
|
314
325
|
diContainers.appContainer = diContainers.appContainer || diContainer;
|
|
315
326
|
// Authentication
|
|
@@ -375,4 +386,4 @@ export async function setupBackend(config, providers, parent) {
|
|
|
375
386
|
await setupStatic(config.rootFolder, diContainer);
|
|
376
387
|
return diContainer;
|
|
377
388
|
}
|
|
378
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxRQUFRLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxTQUFTLEVBQXNCLE1BQU0sVUFBVSxDQUFDO0FBQ3hELE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxJQUFJLG1CQUFtQixFQUNuQyxnQkFBZ0IsRUFDbkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsaUJBQWlCLEVBQTJCLE1BQU0sb0JBQW9CLENBQUM7QUFFL0UsT0FBTyxFQUNILFlBQVksRUFDWixZQUFZLEVBQ1osT0FBTyxFQUNQLE9BQU8sRUFDUCxXQUFXLEVBTVgsR0FBRyxFQUFFLFNBQVMsRUFDZCxrQkFBa0IsRUFDbEIsU0FBUyxFQUNULFNBQVMsRUFFVCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGdCQUFnQixFQUVuQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDdEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxrQkFBa0IsSUFBSSxzQkFBc0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBRXBHLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBRXZGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBRTVFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBRWxGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUNoSCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFckUsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsT0FBTyxFQUNQLFFBQVEsRUFDUixPQUFPLEVBQ1AsUUFBUSxFQUNSLFNBQVMsRUFDVCxNQUFNLEVBQ04sV0FBVyxFQUNYLFFBQVEsRUFDUixVQUFVLEVBQ1YsYUFBYSxFQUNiLE1BQU0sRUFDTixXQUFXLEVBQ1gsT0FBTyxFQUNQLE9BQU8sRUFDUCxVQUFVLEVBQ1YsU0FBUyxFQUNULFFBQVEsRUFDUixPQUFPLEVBQ1AsV0FBVyxFQUNYLFFBQVEsRUFDUixPQUFPLEVBQ1AsWUFBWSxFQUNaLE9BQU8sRUFDUCxjQUFjLEVBQ2QsY0FBYyxFQUNkLFVBQVUsRUFDVixjQUFjLEVBQ2QsVUFBVSxFQUNWLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGNBQWMsRUFDZCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxJQUFJLEVBQ0osTUFBTSxFQUNOLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsT0FBTyxFQUNQLFFBQVEsRUFDUixlQUFlLEVBQ2YsWUFBWSxFQUNaLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLElBQUksRUFDSixNQUFNLEVBQ04sR0FBRyxFQUNILFVBQVUsRUFDVixZQUFZLEVBRVosUUFBUSxFQUNSLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLE9BQU8sRUFDUCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixlQUFlLEVBQ2YsZUFBZSxFQUNmLGtCQUFrQixFQUNyQixNQUFNLFNBQVMsQ0FBQztBQUVqQixPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVoRCxPQUFPLEVBQ0gsT0FBTyxFQUNQLEdBQUcsRUFDSCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFdBQVcsRUFDWCxhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLFNBQVMsRUFDVCxZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLElBQUksRUFxQkosU0FBUyxFQXdDWixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRS9ELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUV4RSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUNuRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUUxRSxPQUFPLEVBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQ0gsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFVBQVUsRUFDVixlQUFlLEVBQ2YsWUFBWSxFQUNaLFFBQVEsRUFDUixjQUFjLEVBQ2QsT0FBTyxFQUNWLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsR0FBYTtJQUMzQyxJQUFJLEdBQUcsQ0FBQyxJQUFJO1FBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQzlCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ25CLElBQUksQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFRLENBQUM7SUFDdEYsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLDhDQUE4QyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUMxQixxQkFBcUI7SUFDckIsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7SUFDN0IsTUFBTSxNQUFNLEdBQUc7UUFDWCxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDO1FBQ3ZDLElBQUksU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuRSxzQ0FBc0M7WUFDdEMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQVcsQ0FBQztZQUNsRixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0IsT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzNFLENBQUMsQ0FBQztRQUNGLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELElBQUksU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQztRQUN0QyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7UUFDOUMsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQztRQUM5QixJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDO1FBQ25DLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7UUFDakMsSUFBSSxTQUFTLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDO1FBQ25ELElBQUksU0FBUyxDQUFDLHNCQUFzQixFQUFFLG9DQUFvQyxDQUFDO1FBQzNFLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxzQ0FBc0MsQ0FBQztRQUNsRSxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQzdCLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUM7UUFDeEMsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztRQUNoQyxJQUFJLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDO1FBQ3BDLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUM7UUFDdEMsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUM1QixJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO1FBQzlCLElBQUksU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7UUFDbEMsSUFBSSxTQUFTLENBQUMsZUFBZSxFQUFFLGlCQUFpQixDQUFDO1FBQ2pELElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7UUFDaEMsSUFBSSxTQUFTLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztRQUNuQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO1FBQy9CLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7UUFDakMsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLHNDQUFzQyxDQUFDO1FBQ2hFLElBQUksU0FBUyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUM7UUFDakMsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQztRQUNoQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQztRQUNuQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDMUMsSUFBSSxTQUFTLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1FBQ3pDLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7UUFDNUIsSUFBSSxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO0tBQ3RDLENBQUM7SUFFRixrQ0FBa0M7SUFDbEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsQyxPQUFPO1lBQ0gsT0FBTyxFQUFFLFNBQVM7WUFDbEIsUUFBUSxFQUFFLENBQUM7U0FDZCxDQUFBO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxtQkFBbUI7SUFDbkIsTUFBTSxRQUFRLEdBQUc7UUFDYixjQUFjO1FBQ2QsYUFBYTtRQUNiLE1BQU07UUFDTixlQUFlO1FBQ2YsS0FBSztRQUNMLGNBQWM7UUFDZCxhQUFhO1FBQ2IsZ0JBQWdCO1FBQ2hCLFFBQVE7UUFDUixPQUFPO1FBQ1AsWUFBWTtRQUNaLFdBQVc7UUFDWCxVQUFVO1FBQ1YsVUFBVTtRQUNWLE1BQU07UUFDTixVQUFVO1FBQ1YsV0FBVztRQUNYLGNBQWM7UUFDZCxPQUFPO1FBQ1AsVUFBVTtRQUNWLGdCQUFnQjtRQUNoQixlQUFlO1FBQ2YsY0FBYztRQUNkLG1CQUFtQjtRQUNuQixVQUFVO1FBQ1YsV0FBVztLQUNDLENBQUM7SUFFakIsbUJBQW1CO0lBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7SUFDdEUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUM5QixXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDSCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztZQUNoQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FBQyxNQUFzQixFQUFFLFNBQTJCLEVBQUUsTUFBNkI7SUFFakgsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RELE1BQU0sR0FBRyxNQUFNLElBQUksY0FBYyxFQUFFLENBQUM7SUFFcEMsa0JBQWtCO0lBQ2xCLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMxRSxPQUFPO1lBQ0gsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxFQUFFLE9BQU87U0FDcEIsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0lBRUgsZ0JBQWdCO0lBQ2hCLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDakQsT0FBTztZQUNILE9BQU8sRUFBRSxTQUFTO1lBQ2xCLFFBQVEsRUFBRSxDQUFDO1NBQ2QsQ0FBQTtJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsY0FBYztJQUNkLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBc0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNsRixPQUFPO1lBQ0gsT0FBTyxFQUFFLEdBQUc7WUFDWixRQUFRLEVBQUUsT0FBTztTQUNwQixDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7SUFFSCxrQkFBa0I7SUFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQzlFLE9BQU87WUFDSCxPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLFFBQVEsRUFBRSxXQUFXO1NBQ3hCLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztJQUVILHNCQUFzQjtJQUN0QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUVsRCxpQkFBaUI7SUFDakIsTUFBTSxXQUFXLEdBQThCO1FBQzNDLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU07UUFDekMsbUJBQW1CLEVBQUUsS0FBSztRQUMxQixHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7S0FDaEMsQ0FBQztJQUNGLFdBQVcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM3QixXQUFXLEVBQUUsSUFBSTtRQUNqQixjQUFjLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztRQUN2QyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDekIsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO0tBQ0osRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLFdBQVcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztJQUN4RixXQUFXLENBQUMsV0FBVyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLENBQUM7U0FDeEksTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLENBQUM7U0FDeEgsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRWxELG1CQUFtQjtJQUNuQixNQUFNLGFBQWEsR0FBNkI7UUFDNUMsU0FBUyxFQUFFO1lBQ1AsR0FBRyxDQUFJLFNBQW9CO2dCQUN2QixPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUksU0FBUyxDQUFDLENBQUM7WUFDekMsQ0FBQztTQUNKO1FBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO0tBQ2xDLENBQUM7SUFDRixhQUFhLENBQUMsV0FBVyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQWtCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkcsYUFBYSxDQUFDLFdBQVcsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXBILG1CQUFtQjtJQUVuQixNQUFNLFlBQVksR0FBb0IsRUFBRSxDQUFDO0lBRXpDLG9DQUFvQztJQUNwQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEIsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFFSCxzQkFBc0I7SUFDdEIsWUFBWSxDQUFDLElBQUksQ0FDYixHQUFHLGdCQUFnQixFQUNuQixHQUFHLGNBQWMsRUFDakIsR0FBRyxZQUFZLEVBQ2YsR0FBRyxnQkFBZ0IsRUFDbkIsR0FBRyxXQUFXLENBQUMsV0FBMEIsRUFDekMsR0FBRyxXQUFXLENBQUMsV0FBMEIsRUFDekMsR0FBRyxhQUFhLENBQUMsV0FBMEIsRUFDM0MsR0FBRyxhQUFhLENBQUMsV0FBMEIsRUFDM0MsR0FBRyxTQUFTLEVBQ1o7UUFDSSxPQUFPLEVBQUUsT0FBTztRQUNoQixVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ2hELENBQUM7S0FDSixFQUNEO1FBQ0ksT0FBTyxFQUFFLFdBQVc7UUFDcEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMvQyxDQUFDO0tBQ0osRUFDRDtRQUNJLE9BQU8sRUFBRSxhQUFhO1FBQ3RCLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNkLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0MsQ0FBQztLQUNKLENBQ0osQ0FBQTtJQUVELFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDNUIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNuQixJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO2dCQUFFLE9BQU87WUFDN0MsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDekMsT0FBTztRQUNYLENBQUM7UUFDRCxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBZSxDQUFDLENBQUM7SUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTtRQUMvQixRQUFRLEVBQUUsV0FBVztLQUN4QixDQUFDLENBQUM7SUFFSCxXQUFXLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFO1FBQ3JDLFFBQVEsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7S0FDcEQsQ0FBQyxDQUFDO0lBRUgsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7UUFDNUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxhQUFhLElBQUksY0FBYztLQUNuRCxDQUFDLENBQUM7SUFFSCxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTtRQUMvQixRQUFRLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxlQUFlO0tBQ2xELENBQUMsQ0FBQztJQUVILFlBQVksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLFlBQVksSUFBSSxXQUFXLENBQUM7SUFFckUsaUJBQWlCO0lBQ2pCLFdBQVcsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFFLEtBQVksRUFBRSxFQUFFO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixNQUFNLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSwrQ0FBK0MsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNyQixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNuQixJQUFJLENBQUM7d0JBQ0QsSUFBSSxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDM0MsT0FBTyxJQUFJLENBQUM7d0JBQ2hCLENBQUM7b0JBQ0wsQ0FBQztvQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUNULFNBQVMsR0FBRyxDQUFDLENBQUM7b0JBQ2xCLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQztZQUNsRCxDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3BFLENBQUMsQ0FBQywyQ0FBMkM7Z0JBQzdDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQztZQUNyQyxNQUFNLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0lBQ0YsV0FBVyxDQUFDLGtCQUFrQixHQUFHLEtBQUssRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUN0RCxJQUFJLENBQUM7WUFDRCxPQUFPLE1BQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixjQUFjO0lBQ2QsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6RCxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRWhELElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUU7WUFDckMsUUFBUSxFQUFFLElBQUksaUJBQWlCLENBQUM7Z0JBQzVCLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFDVCxHQUFHLGFBQWE7YUFDbkIsQ0FBQztTQUNMLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUMxRSxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RCxNQUFNLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFbEQsT0FBTyxXQUFXLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7am9pbn0gZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IHdlYlRva2VuIGZyb20gXCJqc29ud2VidG9rZW5cIjtcclxuaW1wb3J0IHtjb250YWluZXIsIERlcGVuZGVuY3lDb250YWluZXJ9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgQWN0aW9uLFxyXG4gICAgSHR0cEVycm9yLFxyXG4gICAgUm91dGluZ0NvbnRyb2xsZXJzT3B0aW9ucyxcclxuICAgIHVzZUNvbnRhaW5lciBhcyB1c2VSb3V0aW5nQ29udGFpbmVyLFxyXG4gICAgdXNlRXhwcmVzc1NlcnZlclxyXG59IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCB7U29ja2V0Q29udHJvbGxlcnMsIFNvY2tldENvbnRyb2xsZXJzT3B0aW9uc30gZnJvbSBcInNvY2tldC1jb250cm9sbGVyc1wiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFTU0VUX0RSSVZFUixcclxuICAgIERJX0NPTlRBSU5FUixcclxuICAgIEVYUFJFU1MsXHJcbiAgICBGSVhUVVJFLFxyXG4gICAgSFRUUF9TRVJWRVIsXHJcbiAgICBJQmFja2VuZENvbmZpZyxcclxuICAgIElEZXBlbmRlbmN5Q29udGFpbmVyLFxyXG4gICAgSUpvYixcclxuICAgIElSZXF1ZXN0LFxyXG4gICAgSVVzZXIsXHJcbiAgICBKT0IsIExPQ0FMX0RJUixcclxuICAgIE9QRU5BUElfVkFMSURBVElPTixcclxuICAgIFBhcmFtZXRlcixcclxuICAgIFBBUkFNRVRFUixcclxuICAgIFByb3ZpZGVyLFxyXG4gICAgU09DS0VUX0NPTlRST0xMRVJTLFxyXG4gICAgU09DS0VUX1NFUlZFUixcclxuICAgIFRFUk1JTkFMX0NPTU1BTkQsXHJcbiAgICBUeXBlXHJcbn0gZnJvbSBcIi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5pbXBvcnQge0Fzc2V0UHJvY2Vzc29yfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3NldC1wcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtBc3NldFJlc29sdmVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3NldC1yZXNvbHZlclwiO1xyXG5pbXBvcnQge0Fzc2V0c30gZnJvbSBcIi4vc2VydmljZXMvYXNzZXRzXCI7XHJcbmltcG9ydCB7QmFja2VuZFByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9iYWNrZW5kLXByb3ZpZGVyXCI7XHJcbmltcG9ydCB7Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL2NhY2hlXCI7XHJcbmltcG9ydCB7Q2FjaGVQcm9jZXNzb3J9IGZyb20gXCIuL3NlcnZpY2VzL2NhY2hlLXByb2Nlc3NvclwiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtFbmRwb2ludFByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9lbmRwb2ludC1wcm92aWRlclwiO1xyXG5pbXBvcnQge0ZpeHR1cmVzfSBmcm9tIFwiLi9zZXJ2aWNlcy9maXh0dXJlc1wiO1xyXG5pbXBvcnQge0dhbGxlcnl9IGZyb20gXCIuL3NlcnZpY2VzL2dhbGxlcnlcIjtcclxuaW1wb3J0IHtHYWxsZXJ5Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL2dhbGxlcnktY2FjaGVcIjtcclxuaW1wb3J0IHtJZEdlbmVyYXRvcn0gZnJvbSBcIi4vc2VydmljZXMvaWQtZ2VuZXJhdG9yXCI7XHJcbmltcG9ydCB7Sm9iTWFuYWdlcn0gZnJvbSBcIi4vc2VydmljZXMvam9iLW1hbmFnZXJcIjtcclxuaW1wb3J0IHtMYXp5QXNzZXRzfSBmcm9tIFwiLi9zZXJ2aWNlcy9sYXp5LWFzc2V0c1wiO1xyXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4vc2VydmljZXMvbG9nZ2VyXCI7XHJcbmltcG9ydCB7TWFpbFNlbmRlcn0gZnJvbSBcIi4vc2VydmljZXMvbWFpbC1zZW5kZXJcIjtcclxuaW1wb3J0IHtNZW1vcnlDYWNoZX0gZnJvbSBcIi4vc2VydmljZXMvbWVtb3J5LWNhY2hlXCI7XHJcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL3NlcnZpY2VzL21vbmdvLWNvbm5lY3RvclwiO1xyXG5pbXBvcnQge09wZW5BcGl9IGZyb20gXCIuL3NlcnZpY2VzL29wZW4tYXBpXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3Nlc30gZnJvbSBcIi4vc2VydmljZXMvcHJvZ3Jlc3Nlc1wiO1xyXG5pbXBvcnQge1RlbXBsYXRlUmVuZGVyZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3RlbXBsYXRlLXJlbmRlcmVyXCI7XHJcbmltcG9ydCB7VGVybWluYWxNYW5hZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy90ZXJtaW5hbC1tYW5hZ2VyXCI7XHJcbmltcG9ydCB7VG9rZW5HZW5lcmF0b3J9IGZyb20gXCIuL3NlcnZpY2VzL3Rva2VuLWdlbmVyYXRvclwiO1xyXG5pbXBvcnQge1RyYW5zbGF0aW9uUHJvdmlkZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXByb3ZpZGVyXCI7XHJcbmltcG9ydCB7VHJhbnNsYXRvcn0gZnJvbSBcIi4vc2VydmljZXMvdHJhbnNsYXRvclwiO1xyXG5pbXBvcnQge1VzZXJNYW5hZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy91c2VyLW1hbmFnZXJcIjtcclxuXHJcbmltcG9ydCB7QXNzZXRzQ29udHJvbGxlcn0gZnJvbSBcIi4vcmVzdC1jb250cm9sbGVycy9hc3NldHMuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge0F1dGhDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL2F1dGguY29udHJvbGxlclwiO1xyXG5pbXBvcnQge0dhbGxlcnlDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL2dhbGxlcnkuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge1Byb2dyZXNzZXNDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL3Byb2dyZXNzZXMuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge1Rlcm1pbmFsQ29udHJvbGxlciBhcyBUZXJtaW5hbFJlc3RDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL3Rlcm1pbmFsLmNvbnRyb2xsZXJcIjtcclxuXHJcbmltcG9ydCB7RXJyb3JIYW5kbGVyTWlkZGxld2FyZX0gZnJvbSBcIi4vcmVzdC1taWRkbGV3YXJlcy9lcnJvci1oYW5kbGVyLm1pZGRsZXdhcmVcIjtcclxuaW1wb3J0IHtDb250YWluZXJNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL2NvbnRhaW5lci5taWRkbGV3YXJlXCI7XHJcbmltcG9ydCB7TGFuZ3VhZ2VNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL2xhbmd1YWdlLm1pZGRsZXdhcmVcIjtcclxuaW1wb3J0IHtSZXF1ZXN0RW5kZWRNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL3JlcXVlc3QtZW5kZWQubWlkZGxld2FyZVwiO1xyXG5pbXBvcnQge1JlcXVlc3RTdGFydGVkTWlkZGxld2FyZX0gZnJvbSBcIi4vcmVzdC1taWRkbGV3YXJlcy9yZXF1ZXN0LXN0YXJ0ZWQubWlkZGxld2FyZVwiO1xyXG5cclxuaW1wb3J0IHtQcm9ncmVzc0NvbnRyb2xsZXJ9IGZyb20gXCIuL3NvY2tldC1jb250cm9sbGVycy9wcm9ncmVzcy5jb250cm9sbGVyXCI7XHJcbmltcG9ydCB7VGVybWluYWxDb250cm9sbGVyfSBmcm9tIFwiLi9zb2NrZXQtY29udHJvbGxlcnMvdGVybWluYWwuY29udHJvbGxlclwiO1xyXG5cclxuaW1wb3J0IHtDb21wcmVzc2lvbk1pZGRsZXdhcmV9IGZyb20gXCIuL3NvY2tldC1taWRkbGV3YXJlcy9jb21wcmVzc2lvbi5taWRkbGV3YXJlXCI7XHJcblxyXG5pbXBvcnQge0RpQ29udGFpbmVyfSBmcm9tIFwiLi91dGlsaXRpZXMvZGktY29udGFpbmVyXCI7XHJcbmltcG9ydCB7RW1wdHlKb2J9IGZyb20gXCIuL3V0aWxpdGllcy9lbXB0eS1qb2JcIjtcclxuaW1wb3J0IHtkaUNvbnRhaW5lcnMsIGdldERpck5hbWUsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc1R5cGUsIHByZXBhcmVVcmxFbXB0eSwgdmFsdWVUb1Byb21pc2V9IGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCB7c2V0dXBTdGF0aWN9IGZyb20gXCIuL3N0YXRpY1wiO1xyXG5pbXBvcnQge2NvbW1hbmRzfSBmcm9tIFwiLi9jb21tYW5kc1wiO1xyXG5pbXBvcnQge2ZpeHR1cmVzfSBmcm9tICcuL2ZpeHR1cmVzJztcclxuaW1wb3J0IHtBc3NldEdyaWREcml2ZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2RyaXZlcnMvYXNzZXQtZ3JpZC5kcml2ZXJcIjtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBGaWx0ZXJQcmVkaWNhdGUsXHJcbiAgICBpc051bGxPclVuZGVmaW5lZCxcclxuICAgIGlzRGVmaW5lZCxcclxuICAgIGdldFR5cGUsXHJcbiAgICBpc09iamVjdCxcclxuICAgIGlzQXJyYXksXHJcbiAgICBpc0J1ZmZlcixcclxuICAgIGlzQm9vbGVhbixcclxuICAgIGlzRGF0ZSxcclxuICAgIGlzUHJpbWl0aXZlLFxyXG4gICAgaXNTdHJpbmcsXHJcbiAgICBpc0Z1bmN0aW9uLFxyXG4gICAgaXNDb25zdHJ1Y3RvcixcclxuICAgIGlzVHlwZSxcclxuICAgIGlzSW50ZXJmYWNlLFxyXG4gICAgdWNGaXJzdCxcclxuICAgIGxjRmlyc3QsXHJcbiAgICBpc09iamVjdElkLFxyXG4gICAgZmlyc3RJdGVtLFxyXG4gICAgbGFzdEl0ZW0sXHJcbiAgICByZWdyb3VwLFxyXG4gICAgdW5pcXVlSXRlbXMsXHJcbiAgICBnZXRWYWx1ZSxcclxuICAgIGdyb3VwQnksXHJcbiAgICBjb252ZXJ0VmFsdWUsXHJcbiAgICB0b0ltYWdlLFxyXG4gICAgYnVmZmVyVG9TdHJlYW0sXHJcbiAgICBzdHJlYW1Ub0J1ZmZlcixcclxuICAgIGNvcHlTdHJlYW0sXHJcbiAgICBta2RpclJlY3Vyc2l2ZSxcclxuICAgIGRlbGV0ZUZpbGUsXHJcbiAgICByZWFkRmlsZSxcclxuICAgIHJlYWRBbmREZWxldGVGaWxlLFxyXG4gICAgd3JpdGVGaWxlLFxyXG4gICAgdmFsdWVUb1Byb21pc2UsXHJcbiAgICBwcm9taXNlVGltZW91dCxcclxuICAgIGdldENvbnN0cnVjdG9yTmFtZSxcclxuICAgIGdldEZ1bmN0aW9uUGFyYW1zLFxyXG4gICAgZ2V0RmlsZU5hbWUsXHJcbiAgICBnZXRFeHRlbnNpb24sXHJcbiAgICBjcmVhdGVJZFN0cmluZyxcclxuICAgIGlkVG9TdHJpbmcsXHJcbiAgICBjcmVhdGVUcmFuc2Zvcm1lcixcclxuICAgIGJyb2FkY2FzdCxcclxuICAgIHJhbmQsXHJcbiAgICByYW5kb20sXHJcbiAgICBtdWx0aVN1YnNjcmlwdGlvbixcclxuICAgIG9ic2VydmFibGVGcm9tRnVuY3Rpb24sXHJcbiAgICBwYWRMZWZ0LFxyXG4gICAgcGFkUmlnaHQsXHJcbiAgICBjYW1lbENhc2VUb0Rhc2gsXHJcbiAgICBnemlwUHJvbWlzZWQsXHJcbiAgICBndW56aXBQcm9taXNlZCxcclxuICAgIGRlbGV0ZUZyb21CdWNrZXQsXHJcbiAgICBmaWx0ZXIsXHJcbiAgICBjb3B5LFxyXG4gICAgYXNzaWduLFxyXG4gICAgbWQ1LFxyXG4gICAgcnVuQ29tbWFuZCxcclxuICAgIENvbnNvbGVDb2xvcixcclxuICAgIElKc29uQ29sb3JzLFxyXG4gICAgY29sb3JpemUsXHJcbiAgICBqc29uSGlnaGxpZ2h0LFxyXG4gICAgcmVwbGFjZVNwZWNpYWxDaGFycyxcclxuICAgIHJlZ2V4RXNjYXBlLFxyXG4gICAgZmxhdHRlbixcclxuICAgIHdyYXBFcnJvcixcclxuICAgIGdldERpck5hbWUsXHJcbiAgICBwcmVwYXJlVXJsLFxyXG4gICAgcHJlcGFyZVVybFNsYXNoLFxyXG4gICAgcHJlcGFyZVVybEVtcHR5LFxyXG4gICAgZmlsZVR5cGVGcm9tQnVmZmVyXHJcbn0gZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCB7SXNGaWxlLCBJc09iamVjdElkfSBmcm9tIFwiLi92YWxpZGF0b3JzXCI7XHJcblxyXG5leHBvcnQge1xyXG4gICAgRklYVFVSRSxcclxuICAgIEpPQixcclxuICAgIFRFUk1JTkFMX0NPTU1BTkQsXHJcbiAgICBFWFBSRVNTLFxyXG4gICAgSFRUUF9TRVJWRVIsXHJcbiAgICBTT0NLRVRfU0VSVkVSLFxyXG4gICAgU09DS0VUX0NPTlRST0xMRVJTLFxyXG4gICAgUEFSQU1FVEVSLFxyXG4gICAgRElfQ09OVEFJTkVSLFxyXG4gICAgT1BFTkFQSV9WQUxJREFUSU9OLFxyXG4gICAgVHlwZSxcclxuICAgIEZhY3RvcnlQcm92aWRlcixcclxuICAgIElEZXBlbmRlbmN5Q29udGFpbmVyLFxyXG4gICAgQ2xhc3NCYXNlZFByb3ZpZGVyLFxyXG4gICAgVmFsdWVCYXNlZFByb3ZpZGVyLFxyXG4gICAgRmFjdG9yeUJhc2VkUHJvdmlkZXIsXHJcbiAgICBUb2tlbkJhc2VkUHJvdmlkZXIsXHJcbiAgICBTeXJpbmdlUHJvdmlkZXIsXHJcbiAgICBQcm92aWRlcixcclxuICAgIENvbnN0cnVjdG9yLFxyXG4gICAgSW5mZXJHZW5lcmljLFxyXG4gICAgUGlja01hdGNoaW5nLFxyXG4gICAgT21pdEZpcnN0QXJnLFxyXG4gICAgSU1hdGNoRmllbGQsXHJcbiAgICBJUHJvamVjdE9wdGlvbnMsXHJcbiAgICBJVW53aW5kT3B0aW9ucyxcclxuICAgIElGaXh0dXJlLFxyXG4gICAgSUZpeHR1cmVPdXRwdXQsXHJcbiAgICBTY2hlbWFDb252ZXJ0ZXIsXHJcbiAgICBPcGVuQXBpVmFsaWRhdGlvbixcclxuICAgIFBhcmFtUmVzb2x2ZXIsXHJcbiAgICBQYXJhbWV0ZXIsXHJcbiAgICBTb2NrZXRQYXJhbSxcclxuICAgIFNvY2tldFBhcmFtcyxcclxuICAgIElTb2NrZXRNZXNzYWdlLFxyXG4gICAgSU1lc3NhZ2VCcmlkZ2UsXHJcbiAgICBJSm9iLFxyXG4gICAgSUpvYlRhc2ssXHJcbiAgICBKb2JQYXJhbXMsXHJcbiAgICBKb2JTY2hlZHVsZVJhbmdlLFxyXG4gICAgSm9iU2NoZWR1bGVUaW1lLFxyXG4gICAgSVRlcm1pbmFsRmlsZSxcclxuICAgIElUZXJtaW5hbCxcclxuICAgIElUZXJtaW5hbENvbW1hbmQsXHJcbiAgICBJUHJvZ3Jlc3MsXHJcbiAgICBJQXNzZXRDcm9wSW5mbyxcclxuICAgIElJbWFnZU1ldGEsXHJcbiAgICBJQXNzZXRNZXRhLFxyXG4gICAgSUFzc2V0SW1hZ2VQYXJhbXMsXHJcbiAgICBJQXNzZXQsXHJcbiAgICBJQXNzZXRVcGxvYWRTdHJlYW0sXHJcbiAgICBJQXNzZXRVcGxvYWRPcHRzLFxyXG4gICAgSUFzc2V0RHJpdmVyLFxyXG4gICAgSUxhenlBc3NldCxcclxuICAgIElVc2VyLFxyXG4gICAgSUNsaWVudFNvY2tldCxcclxuICAgIElSZXF1ZXN0QmFzZSxcclxuICAgIElSZXF1ZXN0LFxyXG4gICAgSUdhbGxlcnlJbWFnZSxcclxuICAgIElHYWxsZXJ5U2l6ZSxcclxuICAgIElHYWxsZXJ5SW1hZ2VIYW5kbGVyLFxyXG4gICAgSVRyYW5zbGF0aW9ucyxcclxuICAgIElQYWdpbmF0aW9uTWV0YSxcclxuICAgIElQYWdpbmF0aW9uQmFzZSxcclxuICAgIElQYWdpbmF0aW9uLFxyXG4gICAgSVBhZ2luYXRpb25QYXJhbXMsXHJcbiAgICBGb250Rm9ybWF0LFxyXG4gICAgSUZpbGVUeXBlLFxyXG4gICAgUm91dGluZ09wdGlvbnMsXHJcbiAgICBTb2NrZXRPcHRpb25zLFxyXG4gICAgSUJhY2tlbmRDb25maWdcclxufSBmcm9tIFwiLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmV4cG9ydCB7QXNzZXRMb2NhbERyaXZlcn0gZnJvbSBcIi4vc2VydmljZXMvZHJpdmVycy9hc3NldC1sb2NhbC5kcml2ZXJcIjtcclxuZXhwb3J0IHtBc3NldEdyaWREcml2ZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2RyaXZlcnMvYXNzZXQtZ3JpZC5kcml2ZXJcIjtcclxuZXhwb3J0IHtBc3NldFByb2Nlc3Nvcn0gZnJvbSBcIi4vc2VydmljZXMvYXNzZXQtcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCB7QXNzZXRSZXNvbHZlcn0gZnJvbSBcIi4vc2VydmljZXMvYXNzZXQtcmVzb2x2ZXJcIjtcclxuZXhwb3J0IHtBc3NldHN9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2V0c1wiO1xyXG5leHBvcnQge0JhY2tlbmRQcm92aWRlcn0gZnJvbSBcIi4vc2VydmljZXMvYmFja2VuZC1wcm92aWRlclwiO1xyXG5leHBvcnQge0NhY2hlfSBmcm9tIFwiLi9zZXJ2aWNlcy9jYWNoZVwiO1xyXG5leHBvcnQge0NhY2hlUHJvY2Vzc29yfSBmcm9tIFwiLi9zZXJ2aWNlcy9jYWNoZS1wcm9jZXNzb3JcIjtcclxuZXhwb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uXCI7XHJcbmV4cG9ydCB7RW5kcG9pbnRQcm92aWRlcn0gZnJvbSBcIi4vc2VydmljZXMvZW5kcG9pbnQtcHJvdmlkZXJcIjtcclxuZXhwb3J0IHtGaXh0dXJlc30gZnJvbSBcIi4vc2VydmljZXMvZml4dHVyZXNcIjtcclxuZXhwb3J0IHtHYWxsZXJ5fSBmcm9tIFwiLi9zZXJ2aWNlcy9nYWxsZXJ5XCI7XHJcbmV4cG9ydCB7R2FsbGVyeUNhY2hlfSBmcm9tIFwiLi9zZXJ2aWNlcy9nYWxsZXJ5LWNhY2hlXCI7XHJcbmV4cG9ydCB7SWRHZW5lcmF0b3J9IGZyb20gXCIuL3NlcnZpY2VzL2lkLWdlbmVyYXRvclwiO1xyXG5leHBvcnQge0pvYk1hbmFnZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2pvYi1tYW5hZ2VyXCI7XHJcbmV4cG9ydCB7TGF6eUFzc2V0c30gZnJvbSBcIi4vc2VydmljZXMvbGF6eS1hc3NldHNcIjtcclxuZXhwb3J0IHtMb2dnZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2xvZ2dlclwiO1xyXG5leHBvcnQge01haWxTZW5kZXJ9IGZyb20gXCIuL3NlcnZpY2VzL21haWwtc2VuZGVyXCI7XHJcbmV4cG9ydCB7TWVtb3J5Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL21lbW9yeS1jYWNoZVwiO1xyXG5leHBvcnQge01vbmdvQ29ubmVjdG9yfSBmcm9tIFwiLi9zZXJ2aWNlcy9tb25nby1jb25uZWN0b3JcIjtcclxuZXhwb3J0IHtPcGVuQXBpfSBmcm9tIFwiLi9zZXJ2aWNlcy9vcGVuLWFwaVwiO1xyXG5leHBvcnQge1Byb2dyZXNzZXN9IGZyb20gXCIuL3NlcnZpY2VzL3Byb2dyZXNzZXNcIjtcclxuZXhwb3J0IHtUZW1wbGF0ZVJlbmRlcmVyfSBmcm9tIFwiLi9zZXJ2aWNlcy90ZW1wbGF0ZS1yZW5kZXJlclwiO1xyXG5leHBvcnQge1Rlcm1pbmFsTWFuYWdlcn0gZnJvbSBcIi4vc2VydmljZXMvdGVybWluYWwtbWFuYWdlclwiO1xyXG5leHBvcnQge1Rva2VuR2VuZXJhdG9yfSBmcm9tIFwiLi9zZXJ2aWNlcy90b2tlbi1nZW5lcmF0b3JcIjtcclxuZXhwb3J0IHtUcmFuc2xhdGlvblByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1wcm92aWRlclwiO1xyXG5leHBvcnQge1RyYW5zbGF0b3J9IGZyb20gXCIuL3NlcnZpY2VzL3RyYW5zbGF0b3JcIjtcclxuZXhwb3J0IHtVc2VyTWFuYWdlcn0gZnJvbSBcIi4vc2VydmljZXMvdXNlci1tYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQge0Fzc2V0SW1hZ2VQYXJhbXN9IGZyb20gXCIuL3JlcXVlc3RzL2Fzc2V0LWltYWdlLXBhcmFtc1wiO1xyXG5cclxuZXhwb3J0IHtBdXRoQ29udHJvbGxlcn0gZnJvbSBcIi4vcmVzdC1jb250cm9sbGVycy9hdXRoLmNvbnRyb2xsZXJcIjtcclxuZXhwb3J0IHtHYWxsZXJ5Q29udHJvbGxlcn0gZnJvbSBcIi4vcmVzdC1jb250cm9sbGVycy9nYWxsZXJ5LmNvbnRyb2xsZXJcIjtcclxuXHJcbmV4cG9ydCB7RXJyb3JIYW5kbGVyTWlkZGxld2FyZX0gZnJvbSBcIi4vcmVzdC1taWRkbGV3YXJlcy9lcnJvci1oYW5kbGVyLm1pZGRsZXdhcmVcIjtcclxuZXhwb3J0IHtMYW5ndWFnZU1pZGRsZXdhcmV9IGZyb20gXCIuL3Jlc3QtbWlkZGxld2FyZXMvbGFuZ3VhZ2UubWlkZGxld2FyZVwiO1xyXG5cclxuZXhwb3J0IHtCYXNlRG9jLCBEb2N1bWVudEFycmF5LCBQcmltaXRpdmVBcnJheX0gZnJvbSBcIi4vdXRpbGl0aWVzL2Jhc2UtZG9jXCI7XHJcbmV4cG9ydCB7SXNEb2N1bWVudGVkLCBKc29uUmVzcG9uc2UsIFJlc3BvbnNlVHlwZX0gZnJvbSBcIi4vdXRpbGl0aWVzL2RlY29yYXRvcnNcIjtcclxuZXhwb3J0IHtMYXp5QXNzZXRHZW5lcmF0b3J9IGZyb20gXCIuL3V0aWxpdGllcy9sYXp5LWFzc2V0LWdlbmVyYXRvclwiO1xyXG5leHBvcnQge1xyXG4gICAgUmVzb2x2ZUVudGl0eSxcclxuICAgIHBhZ2luYXRlQWdncmVnYXRpb25zLFxyXG4gICAgaHlkcmF0ZVBvcHVsYXRlZCxcclxuICAgIHVud2luZFN0YWdlLFxyXG4gICAgcHJvamVjdFN0YWdlLFxyXG4gICAgbWF0Y2hGaWVsZFN0YWdlcyxcclxuICAgIG1hdGNoRmllbGQsXHJcbiAgICBtYXRjaFN0YWdlLFxyXG4gICAgbGV0c0xvb2t1cFN0YWdlLFxyXG4gICAgbG9va3VwU3RhZ2VzLFxyXG4gICAgcGFnaW5hdGUsXHJcbiAgICBpbmplY3RTZXJ2aWNlcyxcclxuICAgIHNlcnZpY2VcclxufSBmcm9tIFwiLi91dGlsaXRpZXMvbW9uZ29vc2VcIjtcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlVXNlcihyZXE6IElSZXF1ZXN0KTogUHJvbWlzZTxJVXNlcj4ge1xyXG4gICAgaWYgKHJlcS51c2VyKSByZXR1cm4gcmVxLnVzZXI7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSByZXEuY29udGFpbmVyO1xyXG4gICAgY29uc3QgYXV0aCA9IHJlcS5oZWFkZXIoXCJBdXRob3JpemF0aW9uXCIpIHx8IFwiXCI7XHJcbiAgICBsZXQgcGF5bG9hZCA9IG51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGNvbnRhaW5lci5yZXNvbHZlKENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIHBheWxvYWQgPSB3ZWJUb2tlbi52ZXJpZnkoYXV0aC5zcGxpdChcIiBcIilbMV0sIGNvbmZpZy5yZXNvbHZlKFwiand0U2VjcmV0XCIpKSBhcyBhbnk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDEsIGBBdXRoZW50aWNhdGlvbiBmYWlsZWQuICgke2UubWVzc2FnZX0pYCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXBheWxvYWQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKDQwMSwgYEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gKE1heWJlIGludmFsaWQgdG9rZW4pYCk7XHJcbiAgICB9XHJcbiAgICByZXEudXNlciA9IGF3YWl0IGNvbnRhaW5lci5yZXNvbHZlKFVzZXJNYW5hZ2VyKS5nZXRCeUlkKHBheWxvYWQuaWQpO1xyXG4gICAgcmV0dXJuIHJlcS51c2VyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VydmljZXMoKTogSURlcGVuZGVuY3lDb250YWluZXIge1xyXG4gICAgLy8gTGlzdCBvZiBwYXJhbWV0ZXJzXHJcbiAgICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xyXG4gICAgY29uc3QgcGFyYW1zID0gW1xyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJzZXJ2aWNlTmFtZVwiLCBcIkJhY2tlbmRcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInNlcnZpY2VQYXNzd29yZFwiLCBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJzZXJ2aWNlVXJsXCIsIFwiaHR0cDovL2xvY2FsaG9zdDozMDAwXCIsICh2YWx1ZSwgaGVscGVyKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgcG9ydCBudW1iZXIgdG8gZW1wdHkgc3RyaW5nXHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHByZXBhcmVVcmxFbXB0eShgJHt2YWx1ZX1gLnJlcGxhY2UoLzpbMC05XSskLywgXCJcIiksIGhlbHBlcikgYXMgc3RyaW5nO1xyXG4gICAgICAgICAgICBjb25zdCBwb3J0ID0gaGVscGVyKFwiYXBwUG9ydFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuICghcG9ydCB8fCBwb3J0ID09PSA4MCB8fCBwb3J0ID09PSA0NDMpID8gdXJsIDogYCR7dXJsfToke3BvcnR9YDtcclxuICAgICAgICB9KSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwidGVtcGxhdGVzRGlyXCIsIGpvaW4oZGlyTmFtZSwgXCJ0ZW1wbGF0ZXNcIikpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJnYWxsZXJ5RGlyXCIsIGpvaW4oZGlyTmFtZSwgXCJnYWxsZXJ5XCIpKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiY2FjaGVEaXJcIiwgam9pbihkaXJOYW1lLCBcImNhY2hlXCIpKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiZGVmYXVsdExhbmd1YWdlXCIsIFwiZW5cIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInNtdHBIb3N0XCIsIFwic210cC5zZW5kZ3JpZC5uZXRcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInNtdHBQb3J0XCIsIDU4NyksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInNtdHBVc2VyXCIsIFwiYXBpa2V5XCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJzbXRwUGFzc3dvcmRcIiwgXCJcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcIm1haWxTZW5kZXJBZGRyZXNzXCIsIFwiaW5mb0BzdGVteS5odVwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwidHJhbnNsYXRpb25zVGVtcGxhdGVcIiwgXCJodHRwczovL3RyYW5zbGF0aW9uLnNlcnZpY2UvW2xhbmddXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJqd3RTZWNyZXRcIiwgXCJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpTVXpJMU5pSjlcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcIm1vbmdvVXJpXCIsIFwiXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJtb25nb0RiXCIsIFwibm9kZS1iYWNrZW5kXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJtb25nb1VzZXJcIiwgbnVsbCksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcIm1vbmdvUGFzc3dvcmRcIiwgbnVsbCksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcIm5vZGVFbnZcIiwgXCJwcm9kdWN0aW9uXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJhcHBQb3J0XCIsIDgwKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiem1xUG9ydFwiLCAzMDAwKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiem1xQmFja1BvcnRcIiwgMzEwMCksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInptcVJlbW90ZUhvc3RcIiwgXCJ0Y3A6Ly8xMjcuMC4wLjFcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImlzV29ya2VyXCIsIGZhbHNlKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwic3RhcnRXb3JrZXJcIiwgZmFsc2UpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJmaXh0dXJlc1wiLCB0cnVlKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwibWFpbkVuZHBvaW50XCIsIFwiXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJpZENoYXJzXCIsIFwiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJpZFNlcGFyYXRvclwiLCBcIi1cIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImlkUHJlZml4XCIsIFwiSUQtXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJpZFBhcnRzXCIsIFs0LCA0XSksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImpzb25MaW1pdFwiLCBcIjI1MG1iXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJqb2JUaW1lb3V0XCIsIDUgKiA2MCAqIDEwMDApLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJjYWNoZUNvbGxlY3Rpb25cIiwgXCJjYWNoZVwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwibG9nVGFnc1wiLCBbXSksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImlnbm9yZWRMb2dUYWdzXCIsIFtdKSxcclxuICAgIF07XHJcblxyXG4gICAgLy8gQ29udmVydCBwYXJhbWV0ZXJzIHRvIHByb3ZpZGVyc1xyXG4gICAgY29uc3QgcGFyYW1Qcm92aWRlcnMgPSBwYXJhbXMubWFwKHAgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFBBUkFNRVRFUixcclxuICAgICAgICAgICAgdXNlVmFsdWU6IHBcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBMaXN0IG9mIHNlcnZpY2VzXHJcbiAgICBjb25zdCBzZXJ2aWNlcyA9IFtcclxuICAgICAgICBBc3NldFByb2Nlc3NvcixcclxuICAgICAgICBBc3NldFJlc29sdmVyLFxyXG4gICAgICAgIEFzc2V0cyxcclxuICAgICAgICBCYWNrZW5kUHJvdmlkZXIsXHJcbiAgICAgICAgQ2FjaGUsXHJcbiAgICAgICAgQ2FjaGVQcm9jZXNzb3IsXHJcbiAgICAgICAgQ29uZmlndXJhdGlvbixcclxuICAgICAgICBFbmRwb2ludFByb3ZpZGVyLFxyXG4gICAgICAgIEZpeHR1cmVzLFxyXG4gICAgICAgIEdhbGxlcnksXHJcbiAgICAgICAgR2FsbGVyeUNhY2hlLFxyXG4gICAgICAgIElkR2VuZXJhdG9yLFxyXG4gICAgICAgIEpvYk1hbmFnZXIsXHJcbiAgICAgICAgTGF6eUFzc2V0cyxcclxuICAgICAgICBMb2dnZXIsXHJcbiAgICAgICAgTWFpbFNlbmRlcixcclxuICAgICAgICBNZW1vcnlDYWNoZSxcclxuICAgICAgICBNb25nb0Nvbm5lY3RvcixcclxuICAgICAgICBPcGVuQXBpLFxyXG4gICAgICAgIFByb2dyZXNzZXMsXHJcbiAgICAgICAgVGVtcGxhdGVSZW5kZXJlcixcclxuICAgICAgICBUZXJtaW5hbE1hbmFnZXIsXHJcbiAgICAgICAgVG9rZW5HZW5lcmF0b3IsXHJcbiAgICAgICAgVHJhbnNsYXRpb25Qcm92aWRlcixcclxuICAgICAgICBUcmFuc2xhdG9yLFxyXG4gICAgICAgIFVzZXJNYW5hZ2VyXHJcbiAgICBdIGFzIFR5cGU8YW55PltdO1xyXG5cclxuICAgIC8vIENyZWF0ZSBjb250YWluZXJcclxuICAgIGNvbnN0IGRpQ29udGFpbmVyID0gbmV3IERpQ29udGFpbmVyKGNvbnRhaW5lci5jcmVhdGVDaGlsZENvbnRhaW5lcigpKTtcclxuICAgIHBhcmFtUHJvdmlkZXJzLmZvckVhY2gocHJvdmlkZXIgPT4ge1xyXG4gICAgICAgIGRpQ29udGFpbmVyLnJlZ2lzdGVyKHByb3ZpZGVyLnByb3ZpZGUsIHByb3ZpZGVyKTtcclxuICAgIH0pO1xyXG4gICAgc2VydmljZXMuZm9yRWFjaChzZXJ2aWNlID0+IHtcclxuICAgICAgICBpZiAoIWNvbnRhaW5lci5pc1JlZ2lzdGVyZWQoc2VydmljZSkpXHJcbiAgICAgICAgICAgIGRpQ29udGFpbmVyLnJlZ2lzdGVyKHNlcnZpY2UsIHNlcnZpY2UpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGlDb250YWluZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cEJhY2tlbmQoY29uZmlnOiBJQmFja2VuZENvbmZpZywgcHJvdmlkZXJzPzogUHJvdmlkZXI8YW55PltdLCBwYXJlbnQ/OiBJRGVwZW5kZW5jeUNvbnRhaW5lcik6IFByb21pc2U8SURlcGVuZGVuY3lDb250YWluZXI+IHtcclxuXHJcbiAgICBwcm92aWRlcnMgPSBBcnJheS5pc0FycmF5KHByb3ZpZGVycykgPyBwcm92aWRlcnMgOiBbXTtcclxuICAgIHBhcmVudCA9IHBhcmVudCB8fCBjcmVhdGVTZXJ2aWNlcygpO1xyXG5cclxuICAgIC8vIENyZWF0ZSBmaXh0dXJlc1xyXG4gICAgY29uc3QgZml4dHVyZVByb3ZpZGVycyA9IGZpeHR1cmVzLmNvbmNhdChjb25maWcuZml4dHVyZXMgfHwgW10pLm1hcChmaXh0dXJlID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBGSVhUVVJFLFxyXG4gICAgICAgICAgICB1c2VDbGFzczogZml4dHVyZVxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVhdGUgcGFyYW1zXHJcbiAgICBjb25zdCBwYXJhbVByb3ZpZGVycyA9IChjb25maWcucGFyYW1zIHx8IFtdKS5tYXAocCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogUEFSQU1FVEVSLFxyXG4gICAgICAgICAgICB1c2VWYWx1ZTogcFxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBqb2JzXHJcbiAgICBjb25zdCBqb2JQcm92aWRlcnMgPSBbRW1wdHlKb2IgYXMgVHlwZTxJSm9iPl0uY29uY2F0KGNvbmZpZy5qb2JzIHx8IFtdKS5tYXAoam9iVHlwZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogSk9CLFxyXG4gICAgICAgICAgICB1c2VWYWx1ZTogam9iVHlwZVxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVhdGUgY29tbWFuZHNcclxuICAgIGNvbnN0IGNvbW1hbmRQcm92aWRlcnMgPSBjb21tYW5kcy5jb25jYXQoY29uZmlnLmNvbW1hbmRzIHx8IFtdKS5tYXAoY29tbWFuZFR5cGUgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFRFUk1JTkFMX0NPTU1BTkQsXHJcbiAgICAgICAgICAgIHVzZUNsYXNzOiBjb21tYW5kVHlwZVxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVhdGUgREkgY29udGFpbmVyXHJcbiAgICBjb25zdCBkaUNvbnRhaW5lciA9IHBhcmVudC5jcmVhdGVDaGlsZENvbnRhaW5lcigpO1xyXG5cclxuICAgIC8vIFNldHVwIHJlc3QgQVBJXHJcbiAgICBjb25zdCByZXN0T3B0aW9uczogUm91dGluZ0NvbnRyb2xsZXJzT3B0aW9ucyA9IHtcclxuICAgICAgICByb3V0ZVByZWZpeDogY29uZmlnLnJvdXRlUHJlZml4IHx8IFwiL2FwaVwiLFxyXG4gICAgICAgIGRlZmF1bHRFcnJvckhhbmRsZXI6IGZhbHNlLFxyXG4gICAgICAgIC4uLihjb25maWcucmVzdE9wdGlvbnMgfHwge30pXHJcbiAgICB9O1xyXG4gICAgcmVzdE9wdGlvbnMuY29ycyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgIGNyZWRlbnRpYWxzOiB0cnVlLFxyXG4gICAgICAgIGV4cG9zZWRIZWFkZXJzOiBbXCJjb250ZW50LWRpc3Bvc2l0aW9uXCJdLFxyXG4gICAgICAgIG9yaWdpbjogKG9yaWdpbiwgY2FsbGJhY2spID0+IHtcclxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgcmVzdE9wdGlvbnMuY29ycyB8fCB7fSk7XHJcbiAgICByZXN0T3B0aW9ucy5yb3V0ZVByZWZpeCA9IHJlc3RPcHRpb25zLnJvdXRlUHJlZml4ID09IFwiL1wiID8gXCJcIiA6IHJlc3RPcHRpb25zLnJvdXRlUHJlZml4O1xyXG4gICAgcmVzdE9wdGlvbnMubWlkZGxld2FyZXMgPSBbRXJyb3JIYW5kbGVyTWlkZGxld2FyZSwgQ29udGFpbmVyTWlkZGxld2FyZSwgTGFuZ3VhZ2VNaWRkbGV3YXJlLCBSZXF1ZXN0U3RhcnRlZE1pZGRsZXdhcmUsIFJlcXVlc3RFbmRlZE1pZGRsZXdhcmVdXHJcbiAgICAgICAgLmNvbmNhdChyZXN0T3B0aW9ucy5taWRkbGV3YXJlcyBhcyBhbnkgfHwgW10pO1xyXG4gICAgcmVzdE9wdGlvbnMuY29udHJvbGxlcnMgPSBbQXNzZXRzQ29udHJvbGxlciwgQXV0aENvbnRyb2xsZXIsIEdhbGxlcnlDb250cm9sbGVyLCBQcm9ncmVzc2VzQ29udHJvbGxlciwgVGVybWluYWxSZXN0Q29udHJvbGxlcl1cclxuICAgICAgICAuY29uY2F0KHJlc3RPcHRpb25zLmNvbnRyb2xsZXJzIGFzIGFueSB8fCBbXSk7XHJcblxyXG4gICAgLy8gU2V0dXAgc29ja2V0IEFQSVxyXG4gICAgY29uc3Qgc29ja2V0T3B0aW9uczogU29ja2V0Q29udHJvbGxlcnNPcHRpb25zID0ge1xyXG4gICAgICAgIGNvbnRhaW5lcjoge1xyXG4gICAgICAgICAgICBnZXQ8VD4oc29tZUNsYXNzOiBUeXBlPGFueT4pOiBUIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkaUNvbnRhaW5lci5nZXQ8VD4oc29tZUNsYXNzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4uKGNvbmZpZy5zb2NrZXRPcHRpb25zIHx8IHt9KVxyXG4gICAgfTtcclxuICAgIHNvY2tldE9wdGlvbnMubWlkZGxld2FyZXMgPSBbQ29tcHJlc3Npb25NaWRkbGV3YXJlXS5jb25jYXQoc29ja2V0T3B0aW9ucy5taWRkbGV3YXJlcyBhcyBhbnkgfHwgW10pO1xyXG4gICAgc29ja2V0T3B0aW9ucy5jb250cm9sbGVycyA9IFtQcm9ncmVzc0NvbnRyb2xsZXIsIFRlcm1pbmFsQ29udHJvbGxlcl0uY29uY2F0KHNvY2tldE9wdGlvbnMuY29udHJvbGxlcnMgYXMgYW55IHx8IFtdKTtcclxuXHJcbiAgICAvLyBDcmVhdGUgcHJvdmlkZXJzXHJcblxyXG4gICAgY29uc3QgYWxsUHJvdmlkZXJzOiBQcm92aWRlcjxhbnk+W10gPSBbXTtcclxuXHJcbiAgICAvLyBBZGQgbXVsdGkgdG9rZW5zIHRvIHN1YiBjb250YWluZXJcclxuICAgIFtQQVJBTUVURVJdLmZvckVhY2gocHJvdmlkZSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gcGFyZW50LnJlc29sdmVBbGwocHJvdmlkZSk7XHJcbiAgICAgICAgdmFsdWVzLmZvckVhY2godXNlVmFsdWUgPT4ge1xyXG4gICAgICAgICAgICBhbGxQcm92aWRlcnMucHVzaCh7cHJvdmlkZSwgdXNlVmFsdWV9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFkZCBvdGhlciBwcm92aWRlcnNcclxuICAgIGFsbFByb3ZpZGVycy5wdXNoKFxyXG4gICAgICAgIC4uLmZpeHR1cmVQcm92aWRlcnMsXHJcbiAgICAgICAgLi4ucGFyYW1Qcm92aWRlcnMsXHJcbiAgICAgICAgLi4uam9iUHJvdmlkZXJzLFxyXG4gICAgICAgIC4uLmNvbW1hbmRQcm92aWRlcnMsXHJcbiAgICAgICAgLi4ucmVzdE9wdGlvbnMubWlkZGxld2FyZXMgYXMgVHlwZTxhbnk+W10sXHJcbiAgICAgICAgLi4ucmVzdE9wdGlvbnMuY29udHJvbGxlcnMgYXMgVHlwZTxhbnk+W10sXHJcbiAgICAgICAgLi4uc29ja2V0T3B0aW9ucy5taWRkbGV3YXJlcyBhcyBUeXBlPGFueT5bXSxcclxuICAgICAgICAuLi5zb2NrZXRPcHRpb25zLmNvbnRyb2xsZXJzIGFzIFR5cGU8YW55PltdLFxyXG4gICAgICAgIC4uLnByb3ZpZGVycyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEVYUFJFU1MsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGN0ciA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3RyLnJlc29sdmUoQmFja2VuZFByb3ZpZGVyKS5leHByZXNzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEhUVFBfU0VSVkVSLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBjdHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0ci5yZXNvbHZlKEJhY2tlbmRQcm92aWRlcikuc2VydmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFNPQ0tFVF9TRVJWRVIsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGN0ciA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3RyLnJlc29sdmUoQmFja2VuZFByb3ZpZGVyKS5pbztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIClcclxuXHJcbiAgICBhbGxQcm92aWRlcnMuZm9yRWFjaChwcm92aWRlciA9PiB7XHJcbiAgICAgICAgaWYgKGlzVHlwZShwcm92aWRlcikpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5pc1JlZ2lzdGVyZWQocHJvdmlkZXIpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGRpQ29udGFpbmVyLnJlZ2lzdGVyKHByb3ZpZGVyLCBwcm92aWRlcik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlDb250YWluZXIucmVnaXN0ZXIocHJvdmlkZXIucHJvdmlkZSwgcHJvdmlkZXIgYXMgYW55KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRpQ29udGFpbmVyLnJlZ2lzdGVyKERJX0NPTlRBSU5FUiwge1xyXG4gICAgICAgIHVzZVZhbHVlOiBkaUNvbnRhaW5lclxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlDb250YWluZXIucmVnaXN0ZXIoT1BFTkFQSV9WQUxJREFUSU9OLCB7XHJcbiAgICAgICAgdXNlVmFsdWU6IGNvbmZpZy5jdXN0b21WYWxpZGF0aW9uIHx8ICgoKSA9PiBudWxsKVxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlDb250YWluZXIucmVnaXN0ZXIoTE9DQUxfRElSLCB7XHJcbiAgICAgICAgdXNlVmFsdWU6IGNvbmZpZy5hc3NldExvY2FsRGlyIHx8IFwiYXNzZXRzX2ZpbGVzXCJcclxuICAgIH0pO1xyXG5cclxuICAgIGRpQ29udGFpbmVyLnJlZ2lzdGVyKEFTU0VUX0RSSVZFUiwge1xyXG4gICAgICAgIHVzZUNsYXNzOiBjb25maWcuYXNzZXREcml2ZXIgfHwgQXNzZXRHcmlkRHJpdmVyXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaUNvbnRhaW5lcnMuYXBwQ29udGFpbmVyID0gZGlDb250YWluZXJzLmFwcENvbnRhaW5lciB8fCBkaUNvbnRhaW5lcjtcclxuXHJcbiAgICAvLyBBdXRoZW50aWNhdGlvblxyXG4gICAgcmVzdE9wdGlvbnMuYXV0aG9yaXphdGlvbkNoZWNrZXIgPSBhc3luYyAoYWN0aW9uOiBBY3Rpb24sIHJvbGVzOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCByZXNvbHZlVXNlcihhY3Rpb24ucmVxdWVzdCk7XHJcbiAgICAgICAgaWYgKCF1c2VyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDAxLCBcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gKFVzZXIgY2FuJ3QgYmUgZm91bmQuKVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXNlclJvbGVzID0gQXJyYXkuaXNBcnJheSh1c2VyLnJvbGVzKSA/IHVzZXIucm9sZXMgOiBbXTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb2xlcykgJiYgcm9sZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbGFzdEVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgZm9yIChsZXQgcm9sZSBvZiByb2xlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocm9sZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgdmFsdWVUb1Byb21pc2Uocm9sZSh1c2VyLCBhY3Rpb24pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJSb2xlcy5pbmRleE9mKHJvbGUpID49IDApIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gIWxhc3RFcnJvciB8fCAoIWxhc3RFcnJvci5tZXNzYWdlICYmICFpc1N0cmluZyhsYXN0RXJyb3IpKVxyXG4gICAgICAgICAgICAgICAgPyBcIlVzZXIgZG9lc24ndCBoYXZlIGFjY2VzcyB0byB0aGlzIHJlc291cmNlXCJcclxuICAgICAgICAgICAgICAgIDogbGFzdEVycm9yLm1lc3NhZ2UgfHwgbGFzdEVycm9yO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKDQwMSwgYEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gKCR7ZXJyb3J9KWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICByZXN0T3B0aW9ucy5jdXJyZW50VXNlckNoZWNrZXIgPSBhc3luYyAoYWN0aW9uOiBBY3Rpb24pID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzb2x2ZVVzZXIoYWN0aW9uLnJlcXVlc3QpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBGaW5hbCBzZXR1cFxyXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGRpQ29udGFpbmVyLnJlc29sdmUoQ29uZmlndXJhdGlvbik7XHJcbiAgICBjb25zdCBicCA9IGRpQ29udGFpbmVyLnJlc29sdmUoQmFja2VuZFByb3ZpZGVyKTtcclxuXHJcbiAgICBpZiAoY29uZmlnLnJlc3RPcHRpb25zKSB7XHJcbiAgICAgICAgdXNlUm91dGluZ0NvbnRhaW5lcihkaUNvbnRhaW5lcik7XHJcbiAgICAgICAgdXNlRXhwcmVzc1NlcnZlcihicC5leHByZXNzLCByZXN0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5zb2NrZXRPcHRpb25zKSB7XHJcbiAgICAgICAgZGlDb250YWluZXIucmVnaXN0ZXIoU09DS0VUX0NPTlRST0xMRVJTLCB7XHJcbiAgICAgICAgICAgIHVzZVZhbHVlOiBuZXcgU29ja2V0Q29udHJvbGxlcnMoe1xyXG4gICAgICAgICAgICAgICAgaW86IGJwLmlvLFxyXG4gICAgICAgICAgICAgICAgLi4uc29ja2V0T3B0aW9ucyxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb25uZWN0IHRvIG1vbmdvIGlmIG5lY2Vzc2FyeVxyXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaGFzUGFyYW0oXCJtb25nb1VyaVwiKSAmJiBjb25maWd1cmF0aW9uLnJlc29sdmUoXCJtb25nb1VyaVwiKSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ29ubmVjdGluZyB0byBNb25nb0RCLi4uXCIpO1xyXG4gICAgICAgIGNvbnN0IGNvbm5lY3RvciA9IGRpQ29udGFpbmVyLnJlc29sdmUoTW9uZ29Db25uZWN0b3IpO1xyXG4gICAgICAgIGF3YWl0IGNvbm5lY3Rvci5jb25uZWN0KCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIE1vbmdvREIuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IHNldHVwU3RhdGljKGNvbmZpZy5yb290Rm9sZGVyLCBkaUNvbnRhaW5lcik7XHJcblxyXG4gICAgcmV0dXJuIGRpQ29udGFpbmVyO1xyXG59XHJcbiJdfQ==
|
|
389
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxRQUFRLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxTQUFTLEVBQXNCLE1BQU0sVUFBVSxDQUFDO0FBQ3hELE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxJQUFJLG1CQUFtQixFQUNuQyxnQkFBZ0IsRUFDbkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsaUJBQWlCLEVBQTJCLE1BQU0sb0JBQW9CLENBQUM7QUFFL0UsT0FBTyxFQUNILFlBQVksRUFDWixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixPQUFPLEVBQ1AsT0FBTyxFQUNQLFdBQVcsRUFNWCxHQUFHLEVBQUUsU0FBUyxFQUNkLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsU0FBUyxFQUVULGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsZ0JBQWdCLEVBRW5CLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzlE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Q0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEQsTUFBTSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRWxELE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2pvaW59IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB3ZWJUb2tlbiBmcm9tIFwianNvbndlYnRva2VuXCI7XHJcbmltcG9ydCB7Y29udGFpbmVyLCBEZXBlbmRlbmN5Q29udGFpbmVyfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtcclxuICAgIEFjdGlvbixcclxuICAgIEh0dHBFcnJvcixcclxuICAgIFJvdXRpbmdDb250cm9sbGVyc09wdGlvbnMsXHJcbiAgICB1c2VDb250YWluZXIgYXMgdXNlUm91dGluZ0NvbnRhaW5lcixcclxuICAgIHVzZUV4cHJlc3NTZXJ2ZXJcclxufSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge1NvY2tldENvbnRyb2xsZXJzLCBTb2NrZXRDb250cm9sbGVyc09wdGlvbnN9IGZyb20gXCJzb2NrZXQtY29udHJvbGxlcnNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBBU1NFVF9EUklWRVIsXHJcbiAgICBBU1NFVF9NQUlOX0RSSVZFUixcclxuICAgIEFTU0VUX0ZBTExCQUNLX0RSSVZFUixcclxuICAgIERJX0NPTlRBSU5FUixcclxuICAgIEVYUFJFU1MsXHJcbiAgICBGSVhUVVJFLFxyXG4gICAgSFRUUF9TRVJWRVIsXHJcbiAgICBJQmFja2VuZENvbmZpZyxcclxuICAgIElEZXBlbmRlbmN5Q29udGFpbmVyLFxyXG4gICAgSUpvYixcclxuICAgIElSZXF1ZXN0LFxyXG4gICAgSVVzZXIsXHJcbiAgICBKT0IsIExPQ0FMX0RJUixcclxuICAgIE9QRU5BUElfVkFMSURBVElPTixcclxuICAgIFBhcmFtZXRlcixcclxuICAgIFBBUkFNRVRFUixcclxuICAgIFByb3ZpZGVyLFxyXG4gICAgU09DS0VUX0NPTlRST0xMRVJTLFxyXG4gICAgU09DS0VUX1NFUlZFUixcclxuICAgIFRFUk1JTkFMX0NPTU1BTkQsXHJcbiAgICBUeXBlXHJcbn0gZnJvbSBcIi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5pbXBvcnQge0Fzc2V0UHJvY2Vzc29yfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3NldC1wcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtBc3NldFJlc29sdmVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3NldC1yZXNvbHZlclwiO1xyXG5pbXBvcnQge0Fzc2V0c30gZnJvbSBcIi4vc2VydmljZXMvYXNzZXRzXCI7XHJcbmltcG9ydCB7QmFja2VuZFByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9iYWNrZW5kLXByb3ZpZGVyXCI7XHJcbmltcG9ydCB7Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL2NhY2hlXCI7XHJcbmltcG9ydCB7Q2FjaGVQcm9jZXNzb3J9IGZyb20gXCIuL3NlcnZpY2VzL2NhY2hlLXByb2Nlc3NvclwiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtFbmRwb2ludFByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9lbmRwb2ludC1wcm92aWRlclwiO1xyXG5pbXBvcnQge0ZpeHR1cmVzfSBmcm9tIFwiLi9zZXJ2aWNlcy9maXh0dXJlc1wiO1xyXG5pbXBvcnQge0dhbGxlcnl9IGZyb20gXCIuL3NlcnZpY2VzL2dhbGxlcnlcIjtcclxuaW1wb3J0IHtHYWxsZXJ5Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL2dhbGxlcnktY2FjaGVcIjtcclxuaW1wb3J0IHtJZEdlbmVyYXRvcn0gZnJvbSBcIi4vc2VydmljZXMvaWQtZ2VuZXJhdG9yXCI7XHJcbmltcG9ydCB7Sm9iTWFuYWdlcn0gZnJvbSBcIi4vc2VydmljZXMvam9iLW1hbmFnZXJcIjtcclxuaW1wb3J0IHtMYXp5QXNzZXRzfSBmcm9tIFwiLi9zZXJ2aWNlcy9sYXp5LWFzc2V0c1wiO1xyXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4vc2VydmljZXMvbG9nZ2VyXCI7XHJcbmltcG9ydCB7TWFpbFNlbmRlcn0gZnJvbSBcIi4vc2VydmljZXMvbWFpbC1zZW5kZXJcIjtcclxuaW1wb3J0IHtNZW1vcnlDYWNoZX0gZnJvbSBcIi4vc2VydmljZXMvbWVtb3J5LWNhY2hlXCI7XHJcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL3NlcnZpY2VzL21vbmdvLWNvbm5lY3RvclwiO1xyXG5pbXBvcnQge09wZW5BcGl9IGZyb20gXCIuL3NlcnZpY2VzL29wZW4tYXBpXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3Nlc30gZnJvbSBcIi4vc2VydmljZXMvcHJvZ3Jlc3Nlc1wiO1xyXG5pbXBvcnQge1RlbXBsYXRlUmVuZGVyZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3RlbXBsYXRlLXJlbmRlcmVyXCI7XHJcbmltcG9ydCB7VGVybWluYWxNYW5hZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy90ZXJtaW5hbC1tYW5hZ2VyXCI7XHJcbmltcG9ydCB7VG9rZW5HZW5lcmF0b3J9IGZyb20gXCIuL3NlcnZpY2VzL3Rva2VuLWdlbmVyYXRvclwiO1xyXG5pbXBvcnQge1RyYW5zbGF0aW9uUHJvdmlkZXJ9IGZyb20gXCIuL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXByb3ZpZGVyXCI7XHJcbmltcG9ydCB7VHJhbnNsYXRvcn0gZnJvbSBcIi4vc2VydmljZXMvdHJhbnNsYXRvclwiO1xyXG5pbXBvcnQge1VzZXJNYW5hZ2VyfSBmcm9tIFwiLi9zZXJ2aWNlcy91c2VyLW1hbmFnZXJcIjtcclxuXHJcbmltcG9ydCB7QXNzZXRzQ29udHJvbGxlcn0gZnJvbSBcIi4vcmVzdC1jb250cm9sbGVycy9hc3NldHMuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge0F1dGhDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL2F1dGguY29udHJvbGxlclwiO1xyXG5pbXBvcnQge0dhbGxlcnlDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL2dhbGxlcnkuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge1Byb2dyZXNzZXNDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL3Byb2dyZXNzZXMuY29udHJvbGxlclwiO1xyXG5pbXBvcnQge1Rlcm1pbmFsQ29udHJvbGxlciBhcyBUZXJtaW5hbFJlc3RDb250cm9sbGVyfSBmcm9tIFwiLi9yZXN0LWNvbnRyb2xsZXJzL3Rlcm1pbmFsLmNvbnRyb2xsZXJcIjtcclxuXHJcbmltcG9ydCB7RXJyb3JIYW5kbGVyTWlkZGxld2FyZX0gZnJvbSBcIi4vcmVzdC1taWRkbGV3YXJlcy9lcnJvci1oYW5kbGVyLm1pZGRsZXdhcmVcIjtcclxuaW1wb3J0IHtDb250YWluZXJNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL2NvbnRhaW5lci5taWRkbGV3YXJlXCI7XHJcbmltcG9ydCB7TGFuZ3VhZ2VNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL2xhbmd1YWdlLm1pZGRsZXdhcmVcIjtcclxuaW1wb3J0IHtSZXF1ZXN0RW5kZWRNaWRkbGV3YXJlfSBmcm9tIFwiLi9yZXN0LW1pZGRsZXdhcmVzL3JlcXVlc3QtZW5kZWQubWlkZGxld2FyZVwiO1xyXG5pbXBvcnQge1JlcXVlc3RTdGFydGVkTWlkZGxld2FyZX0gZnJvbSBcIi4vcmVzdC1taWRkbGV3YXJlcy9yZXF1ZXN0LXN0YXJ0ZWQubWlkZGxld2FyZVwiO1xyXG5cclxuaW1wb3J0IHtQcm9ncmVzc0NvbnRyb2xsZXJ9IGZyb20gXCIuL3NvY2tldC1jb250cm9sbGVycy9wcm9ncmVzcy5jb250cm9sbGVyXCI7XHJcbmltcG9ydCB7VGVybWluYWxDb250cm9sbGVyfSBmcm9tIFwiLi9zb2NrZXQtY29udHJvbGxlcnMvdGVybWluYWwuY29udHJvbGxlclwiO1xyXG5cclxuaW1wb3J0IHtDb21wcmVzc2lvbk1pZGRsZXdhcmV9IGZyb20gXCIuL3NvY2tldC1taWRkbGV3YXJlcy9jb21wcmVzc2lvbi5taWRkbGV3YXJlXCI7XHJcblxyXG5pbXBvcnQge0RpQ29udGFpbmVyfSBmcm9tIFwiLi91dGlsaXRpZXMvZGktY29udGFpbmVyXCI7XHJcbmltcG9ydCB7RW1wdHlKb2J9IGZyb20gXCIuL3V0aWxpdGllcy9lbXB0eS1qb2JcIjtcclxuaW1wb3J0IHtkaUNvbnRhaW5lcnMsIGdldERpck5hbWUsIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBpc1R5cGUsIHByZXBhcmVVcmwsIHByZXBhcmVVcmxFbXB0eSwgdmFsdWVUb1Byb21pc2V9IGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCB7c2V0dXBTdGF0aWN9IGZyb20gXCIuL3N0YXRpY1wiO1xyXG5pbXBvcnQge2NvbW1hbmRzfSBmcm9tIFwiLi9jb21tYW5kc1wiO1xyXG5pbXBvcnQge2ZpeHR1cmVzfSBmcm9tICcuL2ZpeHR1cmVzJztcclxuaW1wb3J0IHtBc3NldEdyaWREcml2ZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2RyaXZlcnMvYXNzZXQtZ3JpZC5kcml2ZXJcIjtcclxuaW1wb3J0IHtBc3NldExvY2FsRHJpdmVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9kcml2ZXJzL2Fzc2V0LWxvY2FsLmRyaXZlclwiO1xyXG5pbXBvcnQge0Fzc2V0RmFsbGJhY2tEcml2ZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2RyaXZlcnMvYXNzZXQtZmFsbGJhY2stZHJpdmVyXCI7XHJcblxyXG5leHBvcnQge1xyXG4gICAgRmlsdGVyUHJlZGljYXRlLFxyXG4gICAgaXNOdWxsT3JVbmRlZmluZWQsXHJcbiAgICBpc0RlZmluZWQsXHJcbiAgICBnZXRUeXBlLFxyXG4gICAgaXNPYmplY3QsXHJcbiAgICBpc0FycmF5LFxyXG4gICAgaXNCdWZmZXIsXHJcbiAgICBpc0Jvb2xlYW4sXHJcbiAgICBpc0RhdGUsXHJcbiAgICBpc1ByaW1pdGl2ZSxcclxuICAgIGlzU3RyaW5nLFxyXG4gICAgaXNGdW5jdGlvbixcclxuICAgIGlzQ29uc3RydWN0b3IsXHJcbiAgICBpc1R5cGUsXHJcbiAgICBpc0ludGVyZmFjZSxcclxuICAgIHVjRmlyc3QsXHJcbiAgICBsY0ZpcnN0LFxyXG4gICAgaXNPYmplY3RJZCxcclxuICAgIGZpcnN0SXRlbSxcclxuICAgIGxhc3RJdGVtLFxyXG4gICAgcmVncm91cCxcclxuICAgIHVuaXF1ZUl0ZW1zLFxyXG4gICAgZ2V0VmFsdWUsXHJcbiAgICBncm91cEJ5LFxyXG4gICAgY29udmVydFZhbHVlLFxyXG4gICAgdG9JbWFnZSxcclxuICAgIGJ1ZmZlclRvU3RyZWFtLFxyXG4gICAgc3RyZWFtVG9CdWZmZXIsXHJcbiAgICBjb3B5U3RyZWFtLFxyXG4gICAgbWtkaXJSZWN1cnNpdmUsXHJcbiAgICBkZWxldGVGaWxlLFxyXG4gICAgcmVhZEZpbGUsXHJcbiAgICByZWFkQW5kRGVsZXRlRmlsZSxcclxuICAgIHdyaXRlRmlsZSxcclxuICAgIHZhbHVlVG9Qcm9taXNlLFxyXG4gICAgcHJvbWlzZVRpbWVvdXQsXHJcbiAgICBnZXRDb25zdHJ1Y3Rvck5hbWUsXHJcbiAgICBnZXRGdW5jdGlvblBhcmFtcyxcclxuICAgIGdldEZpbGVOYW1lLFxyXG4gICAgZ2V0RXh0ZW5zaW9uLFxyXG4gICAgY3JlYXRlSWRTdHJpbmcsXHJcbiAgICBpZFRvU3RyaW5nLFxyXG4gICAgY3JlYXRlVHJhbnNmb3JtZXIsXHJcbiAgICBicm9hZGNhc3QsXHJcbiAgICByYW5kLFxyXG4gICAgcmFuZG9tLFxyXG4gICAgbXVsdGlTdWJzY3JpcHRpb24sXHJcbiAgICBvYnNlcnZhYmxlRnJvbUZ1bmN0aW9uLFxyXG4gICAgcGFkTGVmdCxcclxuICAgIHBhZFJpZ2h0LFxyXG4gICAgY2FtZWxDYXNlVG9EYXNoLFxyXG4gICAgZ3ppcFByb21pc2VkLFxyXG4gICAgZ3VuemlwUHJvbWlzZWQsXHJcbiAgICBkZWxldGVGcm9tQnVja2V0LFxyXG4gICAgZmlsdGVyLFxyXG4gICAgY29weSxcclxuICAgIGFzc2lnbixcclxuICAgIG1kNSxcclxuICAgIHJ1bkNvbW1hbmQsXHJcbiAgICBDb25zb2xlQ29sb3IsXHJcbiAgICBJSnNvbkNvbG9ycyxcclxuICAgIGNvbG9yaXplLFxyXG4gICAganNvbkhpZ2hsaWdodCxcclxuICAgIHJlcGxhY2VTcGVjaWFsQ2hhcnMsXHJcbiAgICByZWdleEVzY2FwZSxcclxuICAgIGZsYXR0ZW4sXHJcbiAgICB3cmFwRXJyb3IsXHJcbiAgICBnZXREaXJOYW1lLFxyXG4gICAgcHJlcGFyZVVybCxcclxuICAgIHByZXBhcmVVcmxTbGFzaCxcclxuICAgIHByZXBhcmVVcmxFbXB0eSxcclxuICAgIGZpbGVUeXBlRnJvbUJ1ZmZlclxyXG59IGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQge0lzRmlsZSwgSXNPYmplY3RJZH0gZnJvbSBcIi4vdmFsaWRhdG9yc1wiO1xyXG5cclxuZXhwb3J0IHtcclxuICAgIEZJWFRVUkUsXHJcbiAgICBKT0IsXHJcbiAgICBURVJNSU5BTF9DT01NQU5ELFxyXG4gICAgRVhQUkVTUyxcclxuICAgIEhUVFBfU0VSVkVSLFxyXG4gICAgU09DS0VUX1NFUlZFUixcclxuICAgIFNPQ0tFVF9DT05UUk9MTEVSUyxcclxuICAgIFBBUkFNRVRFUixcclxuICAgIERJX0NPTlRBSU5FUixcclxuICAgIE9QRU5BUElfVkFMSURBVElPTixcclxuICAgIFR5cGUsXHJcbiAgICBGYWN0b3J5UHJvdmlkZXIsXHJcbiAgICBJRGVwZW5kZW5jeUNvbnRhaW5lcixcclxuICAgIENsYXNzQmFzZWRQcm92aWRlcixcclxuICAgIFZhbHVlQmFzZWRQcm92aWRlcixcclxuICAgIEZhY3RvcnlCYXNlZFByb3ZpZGVyLFxyXG4gICAgVG9rZW5CYXNlZFByb3ZpZGVyLFxyXG4gICAgU3lyaW5nZVByb3ZpZGVyLFxyXG4gICAgUHJvdmlkZXIsXHJcbiAgICBDb25zdHJ1Y3RvcixcclxuICAgIEluZmVyR2VuZXJpYyxcclxuICAgIFBpY2tNYXRjaGluZyxcclxuICAgIE9taXRGaXJzdEFyZyxcclxuICAgIElNYXRjaEZpZWxkLFxyXG4gICAgSVByb2plY3RPcHRpb25zLFxyXG4gICAgSVVud2luZE9wdGlvbnMsXHJcbiAgICBJRml4dHVyZSxcclxuICAgIElGaXh0dXJlT3V0cHV0LFxyXG4gICAgU2NoZW1hQ29udmVydGVyLFxyXG4gICAgT3BlbkFwaVZhbGlkYXRpb24sXHJcbiAgICBQYXJhbVJlc29sdmVyLFxyXG4gICAgUGFyYW1ldGVyLFxyXG4gICAgU29ja2V0UGFyYW0sXHJcbiAgICBTb2NrZXRQYXJhbXMsXHJcbiAgICBJU29ja2V0TWVzc2FnZSxcclxuICAgIElNZXNzYWdlQnJpZGdlLFxyXG4gICAgSUpvYixcclxuICAgIElKb2JUYXNrLFxyXG4gICAgSm9iUGFyYW1zLFxyXG4gICAgSm9iU2NoZWR1bGVSYW5nZSxcclxuICAgIEpvYlNjaGVkdWxlVGltZSxcclxuICAgIElUZXJtaW5hbEZpbGUsXHJcbiAgICBJVGVybWluYWwsXHJcbiAgICBJVGVybWluYWxDb21tYW5kLFxyXG4gICAgSVByb2dyZXNzLFxyXG4gICAgSUFzc2V0Q3JvcEluZm8sXHJcbiAgICBJSW1hZ2VNZXRhLFxyXG4gICAgSUFzc2V0TWV0YSxcclxuICAgIElBc3NldEltYWdlUGFyYW1zLFxyXG4gICAgSUFzc2V0LFxyXG4gICAgSUFzc2V0VXBsb2FkU3RyZWFtLFxyXG4gICAgSUFzc2V0VXBsb2FkT3B0cyxcclxuICAgIElBc3NldERyaXZlcixcclxuICAgIElMYXp5QXNzZXQsXHJcbiAgICBJVXNlcixcclxuICAgIElDbGllbnRTb2NrZXQsXHJcbiAgICBJUmVxdWVzdEJhc2UsXHJcbiAgICBJUmVxdWVzdCxcclxuICAgIElHYWxsZXJ5SW1hZ2UsXHJcbiAgICBJR2FsbGVyeVNpemUsXHJcbiAgICBJR2FsbGVyeUltYWdlSGFuZGxlcixcclxuICAgIElUcmFuc2xhdGlvbnMsXHJcbiAgICBJUGFnaW5hdGlvbk1ldGEsXHJcbiAgICBJUGFnaW5hdGlvbkJhc2UsXHJcbiAgICBJUGFnaW5hdGlvbixcclxuICAgIElQYWdpbmF0aW9uUGFyYW1zLFxyXG4gICAgRm9udEZvcm1hdCxcclxuICAgIElGaWxlVHlwZSxcclxuICAgIFJvdXRpbmdPcHRpb25zLFxyXG4gICAgU29ja2V0T3B0aW9ucyxcclxuICAgIElCYWNrZW5kQ29uZmlnXHJcbn0gZnJvbSBcIi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5leHBvcnQge0Fzc2V0TG9jYWxEcml2ZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2RyaXZlcnMvYXNzZXQtbG9jYWwuZHJpdmVyXCI7XHJcbmV4cG9ydCB7QXNzZXRHcmlkRHJpdmVyfSBmcm9tIFwiLi9zZXJ2aWNlcy9kcml2ZXJzL2Fzc2V0LWdyaWQuZHJpdmVyXCI7XHJcbmV4cG9ydCB7QXNzZXRTdG9yYWdlUHJveHlEcml2ZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2RyaXZlcnMvYXNzZXQtc3RvcmFnZS1wcm94eS5kcml2ZXJcIjtcclxuZXhwb3J0IHtBc3NldFByb2Nlc3Nvcn0gZnJvbSBcIi4vc2VydmljZXMvYXNzZXQtcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCB7QXNzZXRSZXNvbHZlcn0gZnJvbSBcIi4vc2VydmljZXMvYXNzZXQtcmVzb2x2ZXJcIjtcclxuZXhwb3J0IHtBc3NldHN9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2V0c1wiO1xyXG5leHBvcnQge0JhY2tlbmRQcm92aWRlcn0gZnJvbSBcIi4vc2VydmljZXMvYmFja2VuZC1wcm92aWRlclwiO1xyXG5leHBvcnQge0NhY2hlfSBmcm9tIFwiLi9zZXJ2aWNlcy9jYWNoZVwiO1xyXG5leHBvcnQge0NhY2hlUHJvY2Vzc29yfSBmcm9tIFwiLi9zZXJ2aWNlcy9jYWNoZS1wcm9jZXNzb3JcIjtcclxuZXhwb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tIFwiLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uXCI7XHJcbmV4cG9ydCB7RW5kcG9pbnRQcm92aWRlcn0gZnJvbSBcIi4vc2VydmljZXMvZW5kcG9pbnQtcHJvdmlkZXJcIjtcclxuZXhwb3J0IHtGaXh0dXJlc30gZnJvbSBcIi4vc2VydmljZXMvZml4dHVyZXNcIjtcclxuZXhwb3J0IHtHYWxsZXJ5fSBmcm9tIFwiLi9zZXJ2aWNlcy9nYWxsZXJ5XCI7XHJcbmV4cG9ydCB7R2FsbGVyeUNhY2hlfSBmcm9tIFwiLi9zZXJ2aWNlcy9nYWxsZXJ5LWNhY2hlXCI7XHJcbmV4cG9ydCB7SWRHZW5lcmF0b3J9IGZyb20gXCIuL3NlcnZpY2VzL2lkLWdlbmVyYXRvclwiO1xyXG5leHBvcnQge0pvYk1hbmFnZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2pvYi1tYW5hZ2VyXCI7XHJcbmV4cG9ydCB7TGF6eUFzc2V0c30gZnJvbSBcIi4vc2VydmljZXMvbGF6eS1hc3NldHNcIjtcclxuZXhwb3J0IHtMb2dnZXJ9IGZyb20gXCIuL3NlcnZpY2VzL2xvZ2dlclwiO1xyXG5leHBvcnQge01haWxTZW5kZXJ9IGZyb20gXCIuL3NlcnZpY2VzL21haWwtc2VuZGVyXCI7XHJcbmV4cG9ydCB7TWVtb3J5Q2FjaGV9IGZyb20gXCIuL3NlcnZpY2VzL21lbW9yeS1jYWNoZVwiO1xyXG5leHBvcnQge01vbmdvQ29ubmVjdG9yfSBmcm9tIFwiLi9zZXJ2aWNlcy9tb25nby1jb25uZWN0b3JcIjtcclxuZXhwb3J0IHtPcGVuQXBpfSBmcm9tIFwiLi9zZXJ2aWNlcy9vcGVuLWFwaVwiO1xyXG5leHBvcnQge1Byb2dyZXNzZXN9IGZyb20gXCIuL3NlcnZpY2VzL3Byb2dyZXNzZXNcIjtcclxuZXhwb3J0IHtUZW1wbGF0ZVJlbmRlcmVyfSBmcm9tIFwiLi9zZXJ2aWNlcy90ZW1wbGF0ZS1yZW5kZXJlclwiO1xyXG5leHBvcnQge1Rlcm1pbmFsTWFuYWdlcn0gZnJvbSBcIi4vc2VydmljZXMvdGVybWluYWwtbWFuYWdlclwiO1xyXG5leHBvcnQge1Rva2VuR2VuZXJhdG9yfSBmcm9tIFwiLi9zZXJ2aWNlcy90b2tlbi1nZW5lcmF0b3JcIjtcclxuZXhwb3J0IHtUcmFuc2xhdGlvblByb3ZpZGVyfSBmcm9tIFwiLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1wcm92aWRlclwiO1xyXG5leHBvcnQge1RyYW5zbGF0b3J9IGZyb20gXCIuL3NlcnZpY2VzL3RyYW5zbGF0b3JcIjtcclxuZXhwb3J0IHtVc2VyTWFuYWdlcn0gZnJvbSBcIi4vc2VydmljZXMvdXNlci1tYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQge0Fzc2V0SW1hZ2VQYXJhbXN9IGZyb20gXCIuL3JlcXVlc3RzL2Fzc2V0LWltYWdlLXBhcmFtc1wiO1xyXG5cclxuZXhwb3J0IHtBdXRoQ29udHJvbGxlcn0gZnJvbSBcIi4vcmVzdC1jb250cm9sbGVycy9hdXRoLmNvbnRyb2xsZXJcIjtcclxuZXhwb3J0IHtHYWxsZXJ5Q29udHJvbGxlcn0gZnJvbSBcIi4vcmVzdC1jb250cm9sbGVycy9nYWxsZXJ5LmNvbnRyb2xsZXJcIjtcclxuXHJcbmV4cG9ydCB7RXJyb3JIYW5kbGVyTWlkZGxld2FyZX0gZnJvbSBcIi4vcmVzdC1taWRkbGV3YXJlcy9lcnJvci1oYW5kbGVyLm1pZGRsZXdhcmVcIjtcclxuZXhwb3J0IHtMYW5ndWFnZU1pZGRsZXdhcmV9IGZyb20gXCIuL3Jlc3QtbWlkZGxld2FyZXMvbGFuZ3VhZ2UubWlkZGxld2FyZVwiO1xyXG5cclxuZXhwb3J0IHtCYXNlRG9jLCBEb2N1bWVudEFycmF5LCBQcmltaXRpdmVBcnJheX0gZnJvbSBcIi4vdXRpbGl0aWVzL2Jhc2UtZG9jXCI7XHJcbmV4cG9ydCB7SXNEb2N1bWVudGVkLCBKc29uUmVzcG9uc2UsIFJlc3BvbnNlVHlwZX0gZnJvbSBcIi4vdXRpbGl0aWVzL2RlY29yYXRvcnNcIjtcclxuZXhwb3J0IHtMYXp5QXNzZXRHZW5lcmF0b3J9IGZyb20gXCIuL3V0aWxpdGllcy9sYXp5LWFzc2V0LWdlbmVyYXRvclwiO1xyXG5leHBvcnQge1xyXG4gICAgUmVzb2x2ZUVudGl0eSxcclxuICAgIHBhZ2luYXRlQWdncmVnYXRpb25zLFxyXG4gICAgaHlkcmF0ZVBvcHVsYXRlZCxcclxuICAgIHVud2luZFN0YWdlLFxyXG4gICAgcHJvamVjdFN0YWdlLFxyXG4gICAgbWF0Y2hGaWVsZFN0YWdlcyxcclxuICAgIG1hdGNoRmllbGQsXHJcbiAgICBtYXRjaFN0YWdlLFxyXG4gICAgbGV0c0xvb2t1cFN0YWdlLFxyXG4gICAgbG9va3VwU3RhZ2VzLFxyXG4gICAgcGFnaW5hdGUsXHJcbiAgICBpbmplY3RTZXJ2aWNlcyxcclxuICAgIHNlcnZpY2VcclxufSBmcm9tIFwiLi91dGlsaXRpZXMvbW9uZ29vc2VcIjtcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlVXNlcihyZXE6IElSZXF1ZXN0KTogUHJvbWlzZTxJVXNlcj4ge1xyXG4gICAgaWYgKHJlcS51c2VyKSByZXR1cm4gcmVxLnVzZXI7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSByZXEuY29udGFpbmVyO1xyXG4gICAgY29uc3QgYXV0aCA9IHJlcS5oZWFkZXIoXCJBdXRob3JpemF0aW9uXCIpIHx8IFwiXCI7XHJcbiAgICBsZXQgcGF5bG9hZCA9IG51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGNvbnRhaW5lci5yZXNvbHZlKENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIHBheWxvYWQgPSB3ZWJUb2tlbi52ZXJpZnkoYXV0aC5zcGxpdChcIiBcIilbMV0sIGNvbmZpZy5yZXNvbHZlKFwiand0U2VjcmV0XCIpKSBhcyBhbnk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDEsIGBBdXRoZW50aWNhdGlvbiBmYWlsZWQuICgke2UubWVzc2FnZX0pYCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXBheWxvYWQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKDQwMSwgYEF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gKE1heWJlIGludmFsaWQgdG9rZW4pYCk7XHJcbiAgICB9XHJcbiAgICByZXEudXNlciA9IGF3YWl0IGNvbnRhaW5lci5yZXNvbHZlKFVzZXJNYW5hZ2VyKS5nZXRCeUlkKHBheWxvYWQuaWQpO1xyXG4gICAgcmV0dXJuIHJlcS51c2VyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VydmljZXMoKTogSURlcGVuZGVuY3lDb250YWluZXIge1xyXG4gICAgLy8gTGlzdCBvZiBwYXJhbWV0ZXJzXHJcbiAgICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xyXG4gICAgY29uc3QgcGFyYW1zID0gW1xyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJzZXJ2aWNlTmFtZVwiLCBcIkJhY2tlbmRcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInNlcnZpY2VQYXNzd29yZFwiLCBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJzZXJ2aWNlVXJsXCIsIFwiaHR0cDovL2xvY2FsaG9zdDozMDAwXCIsICh2YWx1ZSwgaGVscGVyKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgcG9ydCBudW1iZXIgdG8gZW1wdHkgc3RyaW5nXHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHByZXBhcmVVcmxFbXB0eShgJHt2YWx1ZX1gLnJlcGxhY2UoLzpbMC05XSskLywgXCJcIiksIGhlbHBlcikgYXMgc3RyaW5nO1xyXG4gICAgICAgICAgICBjb25zdCBwb3J0ID0gaGVscGVyKFwiYXBwUG9ydFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuICghcG9ydCB8fCBwb3J0ID09PSA4MCB8fCBwb3J0ID09PSA0NDMpID8gdXJsIDogYCR7dXJsfToke3BvcnR9YDtcclxuICAgICAgICB9KSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwidGVtcGxhdGVzRGlyXCIsIGpvaW4oZGlyTmFtZSwgXCJ0ZW1wbGF0ZXNcIikpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJnYWxsZXJ5RGlyXCIsIGpvaW4oZGlyTmFtZSwgXCJnYWxsZXJ5XCIpKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiY2FjaGVEaXJcIiwgam9pbihkaXJOYW1lLCBcImNhY2hlXCIpKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiZGVmYXVsdExhbmd1YWdlXCIsIFwiZW5cIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInNtdHBIb3N0XCIsIFwic210cC5zZW5kZ3JpZC5uZXRcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInNtdHBQb3J0XCIsIDU4NyksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInNtdHBVc2VyXCIsIFwiYXBpa2V5XCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJzbXRwUGFzc3dvcmRcIiwgXCJcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcIm1haWxTZW5kZXJBZGRyZXNzXCIsIFwiaW5mb0BzdGVteS5odVwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwidHJhbnNsYXRpb25zVGVtcGxhdGVcIiwgXCJodHRwczovL3RyYW5zbGF0aW9uLnNlcnZpY2UvW2xhbmddXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJqd3RTZWNyZXRcIiwgXCJleUowZVhBaU9pSktWMVFpTENKaGJHY2lPaUpTVXpJMU5pSjlcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcIm1vbmdvVXJpXCIsIFwiXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJtb25nb0RiXCIsIFwibm9kZS1iYWNrZW5kXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJtb25nb1VzZXJcIiwgbnVsbCksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcIm1vbmdvUGFzc3dvcmRcIiwgbnVsbCksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInN0b3JhZ2VQcm94eVVyaVwiLCBcImh0dHA6Ly9sb2NhbGhvc3Q6NDUwMC9cIiwgcHJlcGFyZVVybCksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcInN0b3JhZ2VQcm94eUJ1Y2tldFwiLCBcInNvbWV0aGluZ1wiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwibm9kZUVudlwiLCBcInByb2R1Y3Rpb25cIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImFwcFBvcnRcIiwgODApLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJ6bXFQb3J0XCIsIDMwMDApLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJ6bXFCYWNrUG9ydFwiLCAzMTAwKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiem1xUmVtb3RlSG9zdFwiLCBcInRjcDovLzEyNy4wLjAuMVwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiaXNXb3JrZXJcIiwgZmFsc2UpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJzdGFydFdvcmtlclwiLCBmYWxzZSksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImZpeHR1cmVzXCIsIHRydWUpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJtYWluRW5kcG9pbnRcIiwgXCJcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImlkQ2hhcnNcIiwgXCIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImlkU2VwYXJhdG9yXCIsIFwiLVwiKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiaWRQcmVmaXhcIiwgXCJJRC1cIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImlkUGFydHNcIiwgWzQsIDRdKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwianNvbkxpbWl0XCIsIFwiMjUwbWJcIiksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImpvYlRpbWVvdXRcIiwgNSAqIDYwICogMTAwMCksXHJcbiAgICAgICAgbmV3IFBhcmFtZXRlcihcImNhY2hlQ29sbGVjdGlvblwiLCBcImNhY2hlXCIpLFxyXG4gICAgICAgIG5ldyBQYXJhbWV0ZXIoXCJsb2dUYWdzXCIsIFtdKSxcclxuICAgICAgICBuZXcgUGFyYW1ldGVyKFwiaWdub3JlZExvZ1RhZ3NcIiwgW10pLFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHBhcmFtZXRlcnMgdG8gcHJvdmlkZXJzXHJcbiAgICBjb25zdCBwYXJhbVByb3ZpZGVycyA9IHBhcmFtcy5tYXAocCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogUEFSQU1FVEVSLFxyXG4gICAgICAgICAgICB1c2VWYWx1ZTogcFxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIExpc3Qgb2Ygc2VydmljZXNcclxuICAgIGNvbnN0IHNlcnZpY2VzID0gW1xyXG4gICAgICAgIEFzc2V0UHJvY2Vzc29yLFxyXG4gICAgICAgIEFzc2V0UmVzb2x2ZXIsXHJcbiAgICAgICAgQXNzZXRzLFxyXG4gICAgICAgIEJhY2tlbmRQcm92aWRlcixcclxuICAgICAgICBDYWNoZSxcclxuICAgICAgICBDYWNoZVByb2Nlc3NvcixcclxuICAgICAgICBDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIEVuZHBvaW50UHJvdmlkZXIsXHJcbiAgICAgICAgRml4dHVyZXMsXHJcbiAgICAgICAgR2FsbGVyeSxcclxuICAgICAgICBHYWxsZXJ5Q2FjaGUsXHJcbiAgICAgICAgSWRHZW5lcmF0b3IsXHJcbiAgICAgICAgSm9iTWFuYWdlcixcclxuICAgICAgICBMYXp5QXNzZXRzLFxyXG4gICAgICAgIExvZ2dlcixcclxuICAgICAgICBNYWlsU2VuZGVyLFxyXG4gICAgICAgIE1lbW9yeUNhY2hlLFxyXG4gICAgICAgIE1vbmdvQ29ubmVjdG9yLFxyXG4gICAgICAgIE9wZW5BcGksXHJcbiAgICAgICAgUHJvZ3Jlc3NlcyxcclxuICAgICAgICBUZW1wbGF0ZVJlbmRlcmVyLFxyXG4gICAgICAgIFRlcm1pbmFsTWFuYWdlcixcclxuICAgICAgICBUb2tlbkdlbmVyYXRvcixcclxuICAgICAgICBUcmFuc2xhdGlvblByb3ZpZGVyLFxyXG4gICAgICAgIFRyYW5zbGF0b3IsXHJcbiAgICAgICAgVXNlck1hbmFnZXJcclxuICAgIF0gYXMgVHlwZTxhbnk+W107XHJcblxyXG4gICAgLy8gQ3JlYXRlIGNvbnRhaW5lclxyXG4gICAgY29uc3QgZGlDb250YWluZXIgPSBuZXcgRGlDb250YWluZXIoY29udGFpbmVyLmNyZWF0ZUNoaWxkQ29udGFpbmVyKCkpO1xyXG4gICAgcGFyYW1Qcm92aWRlcnMuZm9yRWFjaChwcm92aWRlciA9PiB7XHJcbiAgICAgICAgZGlDb250YWluZXIucmVnaXN0ZXIocHJvdmlkZXIucHJvdmlkZSwgcHJvdmlkZXIpO1xyXG4gICAgfSk7XHJcbiAgICBzZXJ2aWNlcy5mb3JFYWNoKHNlcnZpY2UgPT4ge1xyXG4gICAgICAgIGlmICghY29udGFpbmVyLmlzUmVnaXN0ZXJlZChzZXJ2aWNlKSlcclxuICAgICAgICAgICAgZGlDb250YWluZXIucmVnaXN0ZXIoc2VydmljZSwgc2VydmljZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkaUNvbnRhaW5lcjtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldHVwQmFja2VuZChjb25maWc6IElCYWNrZW5kQ29uZmlnLCBwcm92aWRlcnM/OiBQcm92aWRlcjxhbnk+W10sIHBhcmVudD86IElEZXBlbmRlbmN5Q29udGFpbmVyKTogUHJvbWlzZTxJRGVwZW5kZW5jeUNvbnRhaW5lcj4ge1xyXG5cclxuICAgIHByb3ZpZGVycyA9IEFycmF5LmlzQXJyYXkocHJvdmlkZXJzKSA/IHByb3ZpZGVycyA6IFtdO1xyXG4gICAgcGFyZW50ID0gcGFyZW50IHx8IGNyZWF0ZVNlcnZpY2VzKCk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGZpeHR1cmVzXHJcbiAgICBjb25zdCBmaXh0dXJlUHJvdmlkZXJzID0gZml4dHVyZXMuY29uY2F0KGNvbmZpZy5maXh0dXJlcyB8fCBbXSkubWFwKGZpeHR1cmUgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEZJWFRVUkUsXHJcbiAgICAgICAgICAgIHVzZUNsYXNzOiBmaXh0dXJlXHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBwYXJhbXNcclxuICAgIGNvbnN0IHBhcmFtUHJvdmlkZXJzID0gKGNvbmZpZy5wYXJhbXMgfHwgW10pLm1hcChwID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBQQVJBTUVURVIsXHJcbiAgICAgICAgICAgIHVzZVZhbHVlOiBwXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGpvYnNcclxuICAgIGNvbnN0IGpvYlByb3ZpZGVycyA9IFtFbXB0eUpvYiBhcyBUeXBlPElKb2I+XS5jb25jYXQoY29uZmlnLmpvYnMgfHwgW10pLm1hcChqb2JUeXBlID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBKT0IsXHJcbiAgICAgICAgICAgIHVzZVZhbHVlOiBqb2JUeXBlXHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBjb21tYW5kc1xyXG4gICAgY29uc3QgY29tbWFuZFByb3ZpZGVycyA9IGNvbW1hbmRzLmNvbmNhdChjb25maWcuY29tbWFuZHMgfHwgW10pLm1hcChjb21tYW5kVHlwZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogVEVSTUlOQUxfQ09NTUFORCxcclxuICAgICAgICAgICAgdXNlQ2xhc3M6IGNvbW1hbmRUeXBlXHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBESSBjb250YWluZXJcclxuICAgIGNvbnN0IGRpQ29udGFpbmVyID0gcGFyZW50LmNyZWF0ZUNoaWxkQ29udGFpbmVyKCk7XHJcblxyXG4gICAgLy8gU2V0dXAgcmVzdCBBUElcclxuICAgIGNvbnN0IHJlc3RPcHRpb25zOiBSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zID0ge1xyXG4gICAgICAgIHJvdXRlUHJlZml4OiBjb25maWcucm91dGVQcmVmaXggfHwgXCIvYXBpXCIsXHJcbiAgICAgICAgZGVmYXVsdEVycm9ySGFuZGxlcjogZmFsc2UsXHJcbiAgICAgICAgLi4uKGNvbmZpZy5yZXN0T3B0aW9ucyB8fCB7fSlcclxuICAgIH07XHJcbiAgICByZXN0T3B0aW9ucy5jb3JzID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgY3JlZGVudGlhbHM6IHRydWUsXHJcbiAgICAgICAgZXhwb3NlZEhlYWRlcnM6IFtcImNvbnRlbnQtZGlzcG9zaXRpb25cIl0sXHJcbiAgICAgICAgb3JpZ2luOiAob3JpZ2luLCBjYWxsYmFjaykgPT4ge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9LCByZXN0T3B0aW9ucy5jb3JzIHx8IHt9KTtcclxuICAgIHJlc3RPcHRpb25zLnJvdXRlUHJlZml4ID0gcmVzdE9wdGlvbnMucm91dGVQcmVmaXggPT0gXCIvXCIgPyBcIlwiIDogcmVzdE9wdGlvbnMucm91dGVQcmVmaXg7XHJcbiAgICByZXN0T3B0aW9ucy5taWRkbGV3YXJlcyA9IFtFcnJvckhhbmRsZXJNaWRkbGV3YXJlLCBDb250YWluZXJNaWRkbGV3YXJlLCBMYW5ndWFnZU1pZGRsZXdhcmUsIFJlcXVlc3RTdGFydGVkTWlkZGxld2FyZSwgUmVxdWVzdEVuZGVkTWlkZGxld2FyZV1cclxuICAgICAgICAuY29uY2F0KHJlc3RPcHRpb25zLm1pZGRsZXdhcmVzIGFzIGFueSB8fCBbXSk7XHJcbiAgICByZXN0T3B0aW9ucy5jb250cm9sbGVycyA9IFtBc3NldHNDb250cm9sbGVyLCBBdXRoQ29udHJvbGxlciwgR2FsbGVyeUNvbnRyb2xsZXIsIFByb2dyZXNzZXNDb250cm9sbGVyLCBUZXJtaW5hbFJlc3RDb250cm9sbGVyXVxyXG4gICAgICAgIC5jb25jYXQocmVzdE9wdGlvbnMuY29udHJvbGxlcnMgYXMgYW55IHx8IFtdKTtcclxuXHJcbiAgICAvLyBTZXR1cCBzb2NrZXQgQVBJXHJcbiAgICBjb25zdCBzb2NrZXRPcHRpb25zOiBTb2NrZXRDb250cm9sbGVyc09wdGlvbnMgPSB7XHJcbiAgICAgICAgY29udGFpbmVyOiB7XHJcbiAgICAgICAgICAgIGdldDxUPihzb21lQ2xhc3M6IFR5cGU8YW55Pik6IFQge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpQ29udGFpbmVyLmdldDxUPihzb21lQ2xhc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi4oY29uZmlnLnNvY2tldE9wdGlvbnMgfHwge30pXHJcbiAgICB9O1xyXG4gICAgc29ja2V0T3B0aW9ucy5taWRkbGV3YXJlcyA9IFtDb21wcmVzc2lvbk1pZGRsZXdhcmVdLmNvbmNhdChzb2NrZXRPcHRpb25zLm1pZGRsZXdhcmVzIGFzIGFueSB8fCBbXSk7XHJcbiAgICBzb2NrZXRPcHRpb25zLmNvbnRyb2xsZXJzID0gW1Byb2dyZXNzQ29udHJvbGxlciwgVGVybWluYWxDb250cm9sbGVyXS5jb25jYXQoc29ja2V0T3B0aW9ucy5jb250cm9sbGVycyBhcyBhbnkgfHwgW10pO1xyXG5cclxuICAgIC8vIENyZWF0ZSBwcm92aWRlcnNcclxuXHJcbiAgICBjb25zdCBhbGxQcm92aWRlcnM6IFByb3ZpZGVyPGFueT5bXSA9IFtdO1xyXG5cclxuICAgIC8vIEFkZCBtdWx0aSB0b2tlbnMgdG8gc3ViIGNvbnRhaW5lclxyXG4gICAgW1BBUkFNRVRFUl0uZm9yRWFjaChwcm92aWRlID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBwYXJlbnQucmVzb2x2ZUFsbChwcm92aWRlKTtcclxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh1c2VWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGFsbFByb3ZpZGVycy5wdXNoKHtwcm92aWRlLCB1c2VWYWx1ZX0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQWRkIG90aGVyIHByb3ZpZGVyc1xyXG4gICAgYWxsUHJvdmlkZXJzLnB1c2goXHJcbiAgICAgICAgLi4uZml4dHVyZVByb3ZpZGVycyxcclxuICAgICAgICAuLi5wYXJhbVByb3ZpZGVycyxcclxuICAgICAgICAuLi5qb2JQcm92aWRlcnMsXHJcbiAgICAgICAgLi4uY29tbWFuZFByb3ZpZGVycyxcclxuICAgICAgICAuLi5yZXN0T3B0aW9ucy5taWRkbGV3YXJlcyBhcyBUeXBlPGFueT5bXSxcclxuICAgICAgICAuLi5yZXN0T3B0aW9ucy5jb250cm9sbGVycyBhcyBUeXBlPGFueT5bXSxcclxuICAgICAgICAuLi5zb2NrZXRPcHRpb25zLm1pZGRsZXdhcmVzIGFzIFR5cGU8YW55PltdLFxyXG4gICAgICAgIC4uLnNvY2tldE9wdGlvbnMuY29udHJvbGxlcnMgYXMgVHlwZTxhbnk+W10sXHJcbiAgICAgICAgLi4ucHJvdmlkZXJzLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogRVhQUkVTUyxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogY3RyID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdHIucmVzb2x2ZShCYWNrZW5kUHJvdmlkZXIpLmV4cHJlc3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogSFRUUF9TRVJWRVIsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGN0ciA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3RyLnJlc29sdmUoQmFja2VuZFByb3ZpZGVyKS5zZXJ2ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogU09DS0VUX1NFUlZFUixcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogY3RyID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdHIucmVzb2x2ZShCYWNrZW5kUHJvdmlkZXIpLmlvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgKVxyXG5cclxuICAgIGFsbFByb3ZpZGVycy5mb3JFYWNoKHByb3ZpZGVyID0+IHtcclxuICAgICAgICBpZiAoaXNUeXBlKHByb3ZpZGVyKSkge1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVyLmlzUmVnaXN0ZXJlZChwcm92aWRlcikpIHJldHVybjtcclxuICAgICAgICAgICAgZGlDb250YWluZXIucmVnaXN0ZXIocHJvdmlkZXIsIHByb3ZpZGVyKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkaUNvbnRhaW5lci5yZWdpc3Rlcihwcm92aWRlci5wcm92aWRlLCBwcm92aWRlciBhcyBhbnkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZGlDb250YWluZXIucmVnaXN0ZXIoRElfQ09OVEFJTkVSLCB7XHJcbiAgICAgICAgdXNlVmFsdWU6IGRpQ29udGFpbmVyXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaUNvbnRhaW5lci5yZWdpc3RlcihPUEVOQVBJX1ZBTElEQVRJT04sIHtcclxuICAgICAgICB1c2VWYWx1ZTogY29uZmlnLmN1c3RvbVZhbGlkYXRpb24gfHwgKCgpID0+IG51bGwpXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaUNvbnRhaW5lci5yZWdpc3RlcihMT0NBTF9ESVIsIHtcclxuICAgICAgICB1c2VWYWx1ZTogY29uZmlnLmFzc2V0TG9jYWxEaXIgfHwgXCJhc3NldHNfZmlsZXNcIlxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlDb250YWluZXIucmVnaXN0ZXIoQVNTRVRfRFJJVkVSLCB7XHJcbiAgICAgICAgdXNlQ2xhc3M6IGNvbmZpZy5hc3NldERyaXZlciB8fCBBc3NldEZhbGxiYWNrRHJpdmVyXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaUNvbnRhaW5lci5yZWdpc3RlcihBU1NFVF9NQUlOX0RSSVZFUiwge1xyXG4gICAgICAgIHVzZUNsYXNzOiBjb25maWcuYXNzZXRNYWluRHJpdmVyIHx8IEFzc2V0R3JpZERyaXZlclxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlDb250YWluZXIucmVnaXN0ZXIoQVNTRVRfRkFMTEJBQ0tfRFJJVkVSLCB7XHJcbiAgICAgICAgdXNlQ2xhc3M6IGNvbmZpZy5hc3NldEZhbGxiYWNrRHJpdmVyIHx8IEFzc2V0TG9jYWxEcml2ZXJcclxuICAgIH0pO1xyXG5cclxuICAgIGRpQ29udGFpbmVycy5hcHBDb250YWluZXIgPSBkaUNvbnRhaW5lcnMuYXBwQ29udGFpbmVyIHx8IGRpQ29udGFpbmVyO1xyXG5cclxuICAgIC8vIEF1dGhlbnRpY2F0aW9uXHJcbiAgICByZXN0T3B0aW9ucy5hdXRob3JpemF0aW9uQ2hlY2tlciA9IGFzeW5jIChhY3Rpb246IEFjdGlvbiwgcm9sZXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHJlc29sdmVVc2VyKGFjdGlvbi5yZXF1ZXN0KTtcclxuICAgICAgICBpZiAoIXVzZXIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcig0MDEsIFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiAoVXNlciBjYW4ndCBiZSBmb3VuZC4pXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1c2VyUm9sZXMgPSBBcnJheS5pc0FycmF5KHVzZXIucm9sZXMpID8gdXNlci5yb2xlcyA6IFtdO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvbGVzKSAmJiByb2xlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0RXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKGxldCByb2xlIG9mIHJvbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyb2xlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhd2FpdCB2YWx1ZVRvUHJvbWlzZShyb2xlKHVzZXIsIGFjdGlvbikpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlclJvbGVzLmluZGV4T2Yocm9sZSkgPj0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSAhbGFzdEVycm9yIHx8ICghbGFzdEVycm9yLm1lc3NhZ2UgJiYgIWlzU3RyaW5nKGxhc3RFcnJvcikpXHJcbiAgICAgICAgICAgICAgICA/IFwiVXNlciBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvIHRoaXMgcmVzb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgOiBsYXN0RXJyb3IubWVzc2FnZSB8fCBsYXN0RXJyb3I7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDAxLCBgQXV0aGVudGljYXRpb24gZmFpbGVkLiAoJHtlcnJvcn0pYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIHJlc3RPcHRpb25zLmN1cnJlbnRVc2VyQ2hlY2tlciA9IGFzeW5jIChhY3Rpb246IEFjdGlvbikgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXNvbHZlVXNlcihhY3Rpb24ucmVxdWVzdCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEZpbmFsIHNldHVwXHJcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gZGlDb250YWluZXIucmVzb2x2ZShDb25maWd1cmF0aW9uKTtcclxuICAgIGNvbnN0IGJwID0gZGlDb250YWluZXIucmVzb2x2ZShCYWNrZW5kUHJvdmlkZXIpO1xyXG5cclxuICAgIGlmIChjb25maWcucmVzdE9wdGlvbnMpIHtcclxuICAgICAgICB1c2VSb3V0aW5nQ29udGFpbmVyKGRpQ29udGFpbmVyKTtcclxuICAgICAgICB1c2VFeHByZXNzU2VydmVyKGJwLmV4cHJlc3MsIHJlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLnNvY2tldE9wdGlvbnMpIHtcclxuICAgICAgICBkaUNvbnRhaW5lci5yZWdpc3RlcihTT0NLRVRfQ09OVFJPTExFUlMsIHtcclxuICAgICAgICAgICAgdXNlVmFsdWU6IG5ldyBTb2NrZXRDb250cm9sbGVycyh7XHJcbiAgICAgICAgICAgICAgICBpbzogYnAuaW8sXHJcbiAgICAgICAgICAgICAgICAuLi5zb2NrZXRPcHRpb25zLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbm5lY3QgdG8gbW9uZ28gaWYgbmVjZXNzYXJ5XHJcbiAgICBpZiAoY29uZmlndXJhdGlvbi5oYXNQYXJhbShcIm1vbmdvVXJpXCIpICYmIGNvbmZpZ3VyYXRpb24ucmVzb2x2ZShcIm1vbmdvVXJpXCIpKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW5nIHRvIE1vbmdvREIuLi5cIik7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdG9yID0gZGlDb250YWluZXIucmVzb2x2ZShNb25nb0Nvbm5lY3Rvcik7XHJcbiAgICAgICAgYXdhaXQgY29ubmVjdG9yLmNvbm5lY3QoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gTW9uZ29EQi5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgc2V0dXBTdGF0aWMoY29uZmlnLnJvb3RGb2xkZXIsIGRpQ29udGFpbmVyKTtcclxuXHJcbiAgICByZXR1cm4gZGlDb250YWluZXI7XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
+
import { inject, injectable } from "tsyringe";
|
|
3
|
+
import { ASSET_FALLBACK_DRIVER, ASSET_MAIN_DRIVER } from "../../common-types";
|
|
4
|
+
import { createFallbackReadable, createFallbackWritable } from "./fallback-streams";
|
|
5
|
+
let AssetFallbackDriver = class AssetFallbackDriver {
|
|
6
|
+
main;
|
|
7
|
+
fallback;
|
|
8
|
+
constructor(main, fallback) {
|
|
9
|
+
this.main = main;
|
|
10
|
+
this.fallback = fallback;
|
|
11
|
+
}
|
|
12
|
+
openDownloadStream(id) {
|
|
13
|
+
return createFallbackReadable(this.main.openDownloadStream(id), () => this.fallback.openDownloadStream(id));
|
|
14
|
+
}
|
|
15
|
+
openUploadStream(filename, opts) {
|
|
16
|
+
return createFallbackWritable(this.main.openUploadStream(filename, opts), () => this.fallback.openUploadStream(filename, opts));
|
|
17
|
+
}
|
|
18
|
+
async delete(id) {
|
|
19
|
+
try {
|
|
20
|
+
await this.main.delete(id);
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
console.log("Failed to delete from primary: ", e.message);
|
|
24
|
+
await this.fallback.delete(id);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
AssetFallbackDriver = __decorate([
|
|
29
|
+
injectable(),
|
|
30
|
+
__param(0, inject(ASSET_MAIN_DRIVER)),
|
|
31
|
+
__param(1, inject(ASSET_FALLBACK_DRIVER)),
|
|
32
|
+
__metadata("design:paramtypes", [Object, Object])
|
|
33
|
+
], AssetFallbackDriver);
|
|
34
|
+
export { AssetFallbackDriver };
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtZmFsbGJhY2stZHJpdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2RyaXZlcnMvYXNzZXQtZmFsbGJhY2stZHJpdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUU1QyxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUlwQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRzNFLElBQU0sbUJBQW1CLEdBQXpCLE1BQU0sbUJBQW1CO0lBRXFCO0lBQ0k7SUFEckQsWUFBaUQsSUFBa0IsRUFDZCxRQUFzQjtRQUQxQixTQUFJLEdBQUosSUFBSSxDQUFjO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBYztJQUMzRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsRUFBWTtRQUMzQixPQUFPLHNCQUFzQixDQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxFQUNoQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUM3QyxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsSUFBdUI7UUFDdEQsT0FBTyxzQkFBc0IsQ0FDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQzFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUN2RCxDQUFDO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBWTtRQUNyQixJQUFJLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0wsQ0FBQztDQUNKLENBQUE7QUE1QlksbUJBQW1CO0lBRC9CLFVBQVUsRUFBRTtJQUdJLFdBQUEsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDekIsV0FBQSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQTs7R0FIakMsbUJBQW1CLENBNEIvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhZGFibGV9IGZyb20gXCJzdHJlYW1cIjtcclxuaW1wb3J0IHtpbmplY3QsIGluamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQge1xyXG4gICAgQVNTRVRfRkFMTEJBQ0tfRFJJVkVSLFxyXG4gICAgQVNTRVRfTUFJTl9EUklWRVIsXHJcbiAgICBJQXNzZXREcml2ZXIsXHJcbiAgICBJQXNzZXRVcGxvYWRPcHRzLFxyXG4gICAgSUFzc2V0VXBsb2FkU3RyZWFtXHJcbn0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge2NyZWF0ZUZhbGxiYWNrUmVhZGFibGUsIGNyZWF0ZUZhbGxiYWNrV3JpdGFibGV9IGZyb20gXCIuL2ZhbGxiYWNrLXN0cmVhbXNcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFzc2V0RmFsbGJhY2tEcml2ZXIgaW1wbGVtZW50cyBJQXNzZXREcml2ZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBpbmplY3QoQVNTRVRfTUFJTl9EUklWRVIpIHByb3RlY3RlZCBtYWluOiBJQXNzZXREcml2ZXIsXHJcbiAgICAgICAgICAgICAgICBAaW5qZWN0KEFTU0VUX0ZBTExCQUNLX0RSSVZFUikgcHJvdGVjdGVkIGZhbGxiYWNrOiBJQXNzZXREcml2ZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRG93bmxvYWRTdHJlYW0oaWQ6IE9iamVjdElkKTogUmVhZGFibGUge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVGYWxsYmFja1JlYWRhYmxlKFxyXG4gICAgICAgICAgICB0aGlzLm1haW4ub3BlbkRvd25sb2FkU3RyZWFtKGlkKSxcclxuICAgICAgICAgICAgKCkgPT4gdGhpcy5mYWxsYmFjay5vcGVuRG93bmxvYWRTdHJlYW0oaWQpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuVXBsb2FkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIG9wdHM/OiBJQXNzZXRVcGxvYWRPcHRzKTogSUFzc2V0VXBsb2FkU3RyZWFtIHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlRmFsbGJhY2tXcml0YWJsZShcclxuICAgICAgICAgICAgdGhpcy5tYWluLm9wZW5VcGxvYWRTdHJlYW0oZmlsZW5hbWUsIG9wdHMpLFxyXG4gICAgICAgICAgICAoKSA9PiB0aGlzLmZhbGxiYWNrLm9wZW5VcGxvYWRTdHJlYW0oZmlsZW5hbWUsIG9wdHMpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGUoaWQ6IE9iamVjdElkKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5tYWluLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZhaWxlZCB0byBkZWxldGUgZnJvbSBwcmltYXJ5OiBcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5mYWxsYmFjay5kZWxldGUoaWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -3,11 +3,9 @@ import { injectable } from "tsyringe";
|
|
|
3
3
|
import { GridFSBucket as BucketImpl } from 'mongodb/lib/gridfs';
|
|
4
4
|
import { MongoConnector } from "../mongo-connector";
|
|
5
5
|
let AssetGridDriver = class AssetGridDriver {
|
|
6
|
-
metaCollection;
|
|
7
6
|
bucket;
|
|
8
7
|
constructor(connector) {
|
|
9
8
|
this.bucket = new BucketImpl(connector.database, { bucketName: 'assets' });
|
|
10
|
-
this.metaCollection = "assets.files";
|
|
11
9
|
}
|
|
12
10
|
openUploadStream(filename, opts) {
|
|
13
11
|
return this.bucket.openUploadStream(filename, opts);
|
|
@@ -24,4 +22,4 @@ AssetGridDriver = __decorate([
|
|
|
24
22
|
__metadata("design:paramtypes", [MongoConnector])
|
|
25
23
|
], AssetGridDriver);
|
|
26
24
|
export { AssetGridDriver };
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtZ3JpZC5kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZHJpdmVycy9hc3NldC1ncmlkLmRyaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVwQyxPQUFPLEVBQUMsWUFBWSxJQUFJLFVBQVUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUczQyxJQUFNLGVBQWUsR0FBckIsTUFBTSxlQUFlO0lBRWQsTUFBTSxDQUFlO0lBRS9CLFlBQVksU0FBeUI7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsSUFBdUI7UUFDdEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsRUFBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0osQ0FBQTtBQW5CWSxlQUFlO0lBRDNCLFVBQVUsRUFBRTtxQ0FLYyxjQUFjO0dBSjVCLGVBQWUsQ0FtQjNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlfSBmcm9tIFwidHN5cmluZ2VcIjtcbmltcG9ydCB7R3JpZEZTQnVja2V0LCBPYmplY3RJZH0gZnJvbSAnbW9uZ29kYic7XG5pbXBvcnQge0dyaWRGU0J1Y2tldCBhcyBCdWNrZXRJbXBsfSBmcm9tICdtb25nb2RiL2xpYi9ncmlkZnMnO1xuXG5pbXBvcnQge0lBc3NldERyaXZlciwgSUFzc2V0VXBsb2FkT3B0c30gZnJvbSAnLi4vLi4vY29tbW9uLXR5cGVzJztcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuLi9tb25nby1jb25uZWN0b3JcIjtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFzc2V0R3JpZERyaXZlciBpbXBsZW1lbnRzIElBc3NldERyaXZlciB7XG5cbiAgICBwcm90ZWN0ZWQgYnVja2V0OiBHcmlkRlNCdWNrZXQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb25uZWN0b3I6IE1vbmdvQ29ubmVjdG9yKSB7XG4gICAgICAgIHRoaXMuYnVja2V0ID0gbmV3IEJ1Y2tldEltcGwoY29ubmVjdG9yLmRhdGFiYXNlLCB7YnVja2V0TmFtZTogJ2Fzc2V0cyd9KTtcbiAgICB9XG5cbiAgICBvcGVuVXBsb2FkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIG9wdHM/OiBJQXNzZXRVcGxvYWRPcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Y2tldC5vcGVuVXBsb2FkU3RyZWFtKGZpbGVuYW1lLCBvcHRzKTtcbiAgICB9XG5cbiAgICBvcGVuRG93bmxvYWRTdHJlYW0oaWQ6IE9iamVjdElkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Y2tldC5vcGVuRG93bmxvYWRTdHJlYW0oaWQpO1xuICAgIH1cblxuICAgIGRlbGV0ZShpZDogT2JqZWN0SWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVja2V0LmRlbGV0ZShpZCk7XG4gICAgfVxufVxuIl19
|
|
@@ -6,10 +6,8 @@ import { Types } from 'mongoose';
|
|
|
6
6
|
import { LOCAL_DIR } from '../../common-types';
|
|
7
7
|
let AssetLocalDriver = class AssetLocalDriver {
|
|
8
8
|
dir;
|
|
9
|
-
metaCollection;
|
|
10
9
|
constructor(dir) {
|
|
11
10
|
this.dir = dir;
|
|
12
|
-
this.metaCollection = "assets.local";
|
|
13
11
|
}
|
|
14
12
|
openUploadStream(filename, opts) {
|
|
15
13
|
const id = new Types.ObjectId();
|
|
@@ -38,4 +36,4 @@ AssetLocalDriver = __decorate([
|
|
|
38
36
|
__metadata("design:paramtypes", [String])
|
|
39
37
|
], AssetLocalDriver);
|
|
40
38
|
export { AssetLocalDriver };
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbG9jYWwuZHJpdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2RyaXZlcnMvYXNzZXQtbG9jYWwuZHJpdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzVDLE9BQU8sRUFBQyxFQUFFLEVBQUUsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFL0IsT0FBTyxFQUFxRCxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUcxRixJQUFNLGdCQUFnQixHQUF0QixNQUFNLGdCQUFnQjtJQUVnQjtJQUF6QyxZQUF5QyxHQUFXO1FBQVgsUUFBRyxHQUFILEdBQUcsQ0FBUTtJQUNwRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsUUFBZ0IsRUFBRSxJQUF1QjtRQUN0RCxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDOUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsR0FBRyxXQUFXLENBQXVCLENBQUM7UUFDMUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNwQixNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDckIsU0FBUyxDQUFDLEdBQUcsR0FBRyxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDM0MsU0FBUyxDQUFDLEdBQUcsR0FBRyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4RSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFZO1FBQzNCLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQVk7UUFDZixPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7Q0FDSixDQUFBO0FBM0JZLGdCQUFnQjtJQUQ1QixVQUFVLEVBQUU7SUFHSSxXQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTs7R0FGckIsZ0JBQWdCLENBMkI1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlUmVhZFN0cmVhbSwgY3JlYXRlV3JpdGVTdHJlYW0sIG1rZGlyU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtpbmplY3QsIGluamVjdGFibGV9IGZyb20gXCJ0c3lyaW5nZVwiO1xuaW1wb3J0IHtybSwgd3JpdGVGaWxlfSBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgdHlwZSB7T2JqZWN0SWR9IGZyb20gJ21vbmdvZGInO1xuaW1wb3J0IHtUeXBlc30gZnJvbSAnbW9uZ29vc2UnO1xuXG5pbXBvcnQge0lBc3NldERyaXZlciwgSUFzc2V0VXBsb2FkT3B0cywgSUFzc2V0VXBsb2FkU3RyZWFtLCBMT0NBTF9ESVJ9IGZyb20gJy4uLy4uL2NvbW1vbi10eXBlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBc3NldExvY2FsRHJpdmVyIGltcGxlbWVudHMgSUFzc2V0RHJpdmVyIHtcblxuICAgIGNvbnN0cnVjdG9yKEBpbmplY3QoTE9DQUxfRElSKSBwcm90ZWN0ZWQgZGlyOiBzdHJpbmcpIHtcbiAgICB9XG5cbiAgICBvcGVuVXBsb2FkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIG9wdHM/OiBJQXNzZXRVcGxvYWRPcHRzKSB7XG4gICAgICAgIGNvbnN0IGlkID0gbmV3IFR5cGVzLk9iamVjdElkKCk7XG4gICAgICAgIGNvbnN0IGRpciA9IGAke3RoaXMuZGlyfS8ke2lkLnRvSGV4U3RyaW5nKCl9YDtcbiAgICAgICAgbWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKGAke2Rpcn0vZmlsZS5iaW5gKSBhcyBJQXNzZXRVcGxvYWRTdHJlYW07XG4gICAgICAgIHN0cmVhbS5pZCA9IGlkO1xuICAgICAgICBzdHJlYW0uZG9uZSA9IGZhbHNlO1xuICAgICAgICBzdHJlYW0ub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgICAgIHdyaXRlRmlsZShgJHtkaXJ9L2ZpbGVuYW1lLnR4dGAsIGZpbGVuYW1lKTtcbiAgICAgICAgICAgIHdyaXRlRmlsZShgJHtkaXJ9L21ldGFkYXRhLmpzb25gLCBKU09OLnN0cmluZ2lmeShvcHRzPy5tZXRhZGF0YSB8fCB7fSkpO1xuICAgICAgICAgICAgc3RyZWFtLmRvbmUgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9XG5cbiAgICBvcGVuRG93bmxvYWRTdHJlYW0oaWQ6IE9iamVjdElkKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSZWFkU3RyZWFtKGAke3RoaXMuZGlyfS8ke2lkLnRvSGV4U3RyaW5nKCl9L2ZpbGUuYmluYCwge2F1dG9DbG9zZTogdHJ1ZSwgZW1pdENsb3NlOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgZGVsZXRlKGlkOiBPYmplY3RJZCkge1xuICAgICAgICByZXR1cm4gcm0oYCR7dGhpcy5kaXJ9LyR7aWQudG9IZXhTdHJpbmcoKX1gLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { injectable } from "tsyringe";
|
|
3
|
+
import { ObjectId } from "bson";
|
|
4
|
+
import got from "got";
|
|
5
|
+
import { Configuration } from "../configuration";
|
|
6
|
+
let AssetStorageProxyDriver = class AssetStorageProxyDriver {
|
|
7
|
+
config;
|
|
8
|
+
baseUrl;
|
|
9
|
+
url;
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.baseUrl = this.config.resolve("storageProxyUri");
|
|
13
|
+
this.url = this.baseUrl + this.config.resolve("storageProxyBucket");
|
|
14
|
+
}
|
|
15
|
+
openDownloadStream(id) {
|
|
16
|
+
return got.stream.get(this.getUrl(id));
|
|
17
|
+
}
|
|
18
|
+
openUploadStream(_, opts) {
|
|
19
|
+
const id = new ObjectId();
|
|
20
|
+
const stream = got.stream.put(this.getUrl(id), { headers: {
|
|
21
|
+
'Content-Type': opts?.contentType || 'application/octet-stream'
|
|
22
|
+
} });
|
|
23
|
+
stream.done = false;
|
|
24
|
+
stream.on('finish', () => {
|
|
25
|
+
stream.id = id;
|
|
26
|
+
stream.done = true;
|
|
27
|
+
});
|
|
28
|
+
return stream;
|
|
29
|
+
}
|
|
30
|
+
async delete(id) {
|
|
31
|
+
console.log("DELETE", id.toHexString());
|
|
32
|
+
await got.delete(this.getUrl(id));
|
|
33
|
+
}
|
|
34
|
+
getUrl(id) {
|
|
35
|
+
return `${this.url}/${id.toHexString()}`;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
AssetStorageProxyDriver = __decorate([
|
|
39
|
+
injectable(),
|
|
40
|
+
__metadata("design:paramtypes", [Configuration])
|
|
41
|
+
], AssetStorageProxyDriver);
|
|
42
|
+
export { AssetStorageProxyDriver };
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc3RvcmFnZS1wcm94eS5kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZHJpdmVycy9hc3NldC1zdG9yYWdlLXByb3h5LmRyaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUV0QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFHeEMsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBdUI7SUFLVjtJQUhiLE9BQU8sQ0FBUztJQUNoQixHQUFHLENBQVM7SUFFckIsWUFBc0IsTUFBcUI7UUFBckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVk7UUFDM0IsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLENBQVMsRUFBRSxJQUF1QjtRQUMvQyxNQUFNLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUU7Z0JBQ2pELGNBQWMsRUFBRSxJQUFJLEVBQUUsV0FBVyxJQUFJLDBCQUEwQjthQUNsRSxFQUFDLENBQXVCLENBQUM7UUFDOUIsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDcEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFZO1FBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVTLE1BQU0sQ0FBQyxFQUFZO1FBQ3pCLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO0lBQzdDLENBQUM7Q0FDSixDQUFBO0FBbkNZLHVCQUF1QjtJQURuQyxVQUFVLEVBQUU7cUNBTXFCLGFBQWE7R0FMbEMsdUJBQXVCLENBbUNuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhZGFibGV9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7aW5qZWN0YWJsZX0gZnJvbSBcInRzeXJpbmdlXCI7XG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IGdvdCBmcm9tIFwiZ290XCI7XG5pbXBvcnQge0lBc3NldERyaXZlciwgSUFzc2V0VXBsb2FkT3B0cywgSUFzc2V0VXBsb2FkU3RyZWFtfSBmcm9tIFwiLi4vLi4vY29tbW9uLXR5cGVzXCI7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuLi9jb25maWd1cmF0aW9uXCI7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBc3NldFN0b3JhZ2VQcm94eURyaXZlciBpbXBsZW1lbnRzIElBc3NldERyaXZlciB7XG5cbiAgICByZWFkb25seSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IHRoaXMuY29uZmlnLnJlc29sdmUoXCJzdG9yYWdlUHJveHlVcmlcIik7XG4gICAgICAgIHRoaXMudXJsID0gdGhpcy5iYXNlVXJsICsgdGhpcy5jb25maWcucmVzb2x2ZShcInN0b3JhZ2VQcm94eUJ1Y2tldFwiKTtcbiAgICB9XG5cbiAgICBvcGVuRG93bmxvYWRTdHJlYW0oaWQ6IE9iamVjdElkKTogUmVhZGFibGUge1xuICAgICAgICByZXR1cm4gZ290LnN0cmVhbS5nZXQodGhpcy5nZXRVcmwoaWQpKTtcbiAgICB9XG5cbiAgICBvcGVuVXBsb2FkU3RyZWFtKF86IHN0cmluZywgb3B0cz86IElBc3NldFVwbG9hZE9wdHMpOiBJQXNzZXRVcGxvYWRTdHJlYW0ge1xuICAgICAgICBjb25zdCBpZCA9IG5ldyBPYmplY3RJZCgpO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBnb3Quc3RyZWFtLnB1dCh0aGlzLmdldFVybChpZCksIHtoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IG9wdHM/LmNvbnRlbnRUeXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgICAgICAgICB9fSkgYXMgSUFzc2V0VXBsb2FkU3RyZWFtO1xuICAgICAgICBzdHJlYW0uZG9uZSA9IGZhbHNlO1xuICAgICAgICBzdHJlYW0ub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgICAgICAgIHN0cmVhbS5pZCA9IGlkO1xuICAgICAgICAgICAgc3RyZWFtLmRvbmUgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9XG5cbiAgICBhc3luYyBkZWxldGUoaWQ6IE9iamVjdElkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiREVMRVRFXCIsIGlkLnRvSGV4U3RyaW5nKCkpO1xuICAgICAgICBhd2FpdCBnb3QuZGVsZXRlKHRoaXMuZ2V0VXJsKGlkKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFVybChpZDogT2JqZWN0SWQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy51cmx9LyR7aWQudG9IZXhTdHJpbmcoKX1gO1xuICAgIH1cbn1cbiJdfQ==
|