velocious 1.0.289 → 1.0.291
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/build/src/configuration-types.d.ts +2 -27
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +2 -5
- package/build/src/database/record/index.d.ts +5 -0
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +3 -2
- package/build/src/environment-handlers/node.js +2 -2
- package/build/src/frontend-model-controller.js +2 -2
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +2 -40
- package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-publishers.js +8 -21
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-definition.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/resource-definition.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wEAHW,OAAO,2BAA2B,EAAE,2BAA2B,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,yBAAyB,CAAC,
|
|
1
|
+
{"version":3,"file":"resource-definition.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/resource-definition.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wEAHW,OAAO,2BAA2B,EAAE,2BAA2B,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,yBAAyB,CAAC,CAc5D;AAED;;;GAGG;AACH,8DAHW,OAAO,GACL,KAAK,IAAI,OAAO,yBAAyB,CAIrD;AAED;;;GAGG;AACH,6EAHW,OAAO,GACL,OAAO,yBAAyB,GAAG,IAAI,CAInD;AAED;;;GAGG;AACH,qFAHW,OAAO,GACL,OAAO,2BAA2B,EAAE,4CAA4C,GAAG,IAAI,CAMnG;AAmND;;;;GAIG;AACH,qDAJW,MAAM,sBACN,OAAO,GACL,MAAM,CAclB;AAED;;;;;;GAMG;AACH,8FALG;IAAqB,WAAW,EAAxB,MAAM;IACO,SAAS,EAAtB,MAAM;IACQ,kBAAkB,EAAhC,OAAO;CACf,GAAU,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,CA2BrG;AAED;;;;;GAKG;AACH,oFAJG;IAAgF,eAAe,EAAvF,OAAO,2BAA2B,EAAE,2BAA2B,EAAE;IACpD,WAAW,EAAxB,MAAM;CACd,GAAU;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,CAAA;CAAC,GAAG,IAAI,CA8DxJ;sCAxXqC,6CAA6C"}
|
|
@@ -15,27 +15,7 @@ export function frontendModelResourcesForBackendProject(backendProject) {
|
|
|
15
15
|
}
|
|
16
16
|
return resources;
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
if (resourcesRequireContext === undefined) {
|
|
20
|
-
return {};
|
|
21
|
-
}
|
|
22
|
-
if (typeof resourcesRequireContext !== "function" || typeof resourcesRequireContext.keys !== "function") {
|
|
23
|
-
throw new Error("Expected backend project frontendModelsRequireContext to be a webpack-style require context");
|
|
24
|
-
}
|
|
25
|
-
/** @type {Record<string, typeof FrontendModelBaseResource>} */
|
|
26
|
-
const resolvedResources = {};
|
|
27
|
-
for (const resourcePath of resourcesRequireContext.keys()) {
|
|
28
|
-
const importedModule = resourcesRequireContext(resourcePath);
|
|
29
|
-
const resourceDefinition = importedModule?.default;
|
|
30
|
-
if (!frontendModelResourceDefinitionIsClass(resourceDefinition))
|
|
31
|
-
continue;
|
|
32
|
-
const modelName = frontendModelModelNameFromResourcePath(resourcePath, resourceDefinition);
|
|
33
|
-
if (resolvedResources[modelName]) {
|
|
34
|
-
throw new Error(`Duplicate frontend model resource definition for '${modelName}' from '${resourcePath}'`);
|
|
35
|
-
}
|
|
36
|
-
resolvedResources[modelName] = resourceDefinition;
|
|
37
|
-
}
|
|
38
|
-
return resolvedResources;
|
|
18
|
+
return {};
|
|
39
19
|
}
|
|
40
20
|
/**
|
|
41
21
|
* @param {unknown} value - Candidate resource definition.
|
|
@@ -339,24 +319,6 @@ export function frontendModelCustomCommandForPath({ backendProjects, currentPath
|
|
|
339
319
|
}
|
|
340
320
|
return null;
|
|
341
321
|
}
|
|
342
|
-
/**
|
|
343
|
-
* Infer frontend model names from an `index.js`-aware require-context path heuristic so layouts like `./users/index.js` still resolve to `User`.
|
|
344
|
-
* @param {string} resourcePath - Require-context resource path.
|
|
345
|
-
* @param {typeof FrontendModelBaseResource} resourceDefinition - Frontend-model resource class.
|
|
346
|
-
* @returns {string} - Backing model class name.
|
|
347
|
-
*/
|
|
348
|
-
function frontendModelModelNameFromResourcePath(resourcePath, resourceDefinition) {
|
|
349
|
-
void resourceDefinition;
|
|
350
|
-
const pathWithoutPrefix = resourcePath.replace(/^\.\//, "");
|
|
351
|
-
const pathWithoutExtension = pathWithoutPrefix.replace(/\.[^.]+$/, "");
|
|
352
|
-
const pathSegments = pathWithoutExtension.split("/").filter(Boolean);
|
|
353
|
-
const lastSegment = pathSegments.at(-1);
|
|
354
|
-
const modelSegment = lastSegment === "index" ? pathSegments.at(-2) : lastSegment;
|
|
355
|
-
if (!modelSegment) {
|
|
356
|
-
throw new Error(`Could not infer frontend model name from resource path '${resourcePath}'`);
|
|
357
|
-
}
|
|
358
|
-
return inflection.camelize(inflection.singularize(modelSegment));
|
|
359
|
-
}
|
|
360
322
|
/**
|
|
361
323
|
* @param {string} path - Path value.
|
|
362
324
|
* @returns {string} - Normalized path with leading slash and no trailing slash.
|
|
@@ -368,4 +330,4 @@ function normalizeFrontendModelResourcePathForMatch(path) {
|
|
|
368
330
|
}
|
|
369
331
|
return withLeadingSlash;
|
|
370
332
|
}
|
|
371
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZC1tb2RlbHMvcmVzb3VyY2UtZGVmaW5pdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyx5QkFBeUIsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNuRixPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMsd0NBQXdDLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQTtBQUV4Rjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsdUNBQXVDLENBQUMsY0FBYztJQUNwRSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFBO0lBRS9DLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUN6RixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE1BQU0sdUJBQXVCLEdBQUcsY0FBYyxDQUFDLDRCQUE0QixDQUFBO0lBRTNFLElBQUksdUJBQXVCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUMsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsSUFBSSxPQUFPLHVCQUF1QixLQUFLLFVBQVUsSUFBSSxPQUFPLHVCQUF1QixDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN4RyxNQUFNLElBQUksS0FBSyxDQUFDLDZGQUE2RixDQUFDLENBQUE7SUFDaEgsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQTtJQUU1QixLQUFLLE1BQU0sWUFBWSxJQUFJLHVC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QUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLFdBQVcsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFBO0lBRWhGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxZQUFZLEdBQUcsQ0FBQyxDQUFBO0lBQzdGLENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO0FBQ2xFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLDBDQUEwQyxDQUFDLElBQUk7SUFDdEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUE7SUFFakUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEMsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRCxPQUFPLGdCQUFnQixDQUFBO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZX0gZnJvbSBcIi4vcmVzb3VyY2UtY29uZmlnLXZhbGlkYXRpb24uanNcIlxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5CYWNrZW5kUHJvamVjdENvbmZpZ3VyYXRpb259IGJhY2tlbmRQcm9qZWN0IC0gQmFja2VuZCBwcm9qZWN0IGNvbmZpZy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB0eXBlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZT59IC0gUmVzb3VyY2UgZGVmaW5pdGlvbnMga2V5ZWQgYnkgbW9kZWwgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdChiYWNrZW5kUHJvamVjdCkge1xuICBjb25zdCByZXNvdXJjZXMgPSBiYWNrZW5kUHJvamVjdC5mcm9udGVuZE1vZGVsc1xuXG4gIGlmIChyZXNvdXJjZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghcmVzb3VyY2VzIHx8IHR5cGVvZiByZXNvdXJjZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmFja2VuZCBwcm9qZWN0IGZyb250ZW5kTW9kZWxzIG9iamVjdCBidXQgZ290OiAke3Jlc291cmNlc31gKVxuICAgIH1cblxuICAgIHJldHVybiByZXNvdXJjZXNcbiAgfVxuXG4gIGNvbnN0IHJlc291cmNlc1JlcXVpcmVDb250ZXh0ID0gYmFja2VuZFByb2plY3QuZnJvbnRlbmRNb2RlbHNSZXF1aXJlQ29udGV4dFxuXG4gIGlmIChyZXNvdXJjZXNSZXF1aXJlQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBpZiAodHlwZW9mIHJlc291cmNlc1JlcXVpcmVDb250ZXh0ICE9PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHJlc291cmNlc1JlcXVpcmVDb250ZXh0LmtleXMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGJhY2tlbmQgcHJvamVjdCBmcm9udGVuZE1vZGVsc1JlcXVpcmVDb250ZXh0IHRvIGJlIGEgd2VicGFjay1zdHlsZSByZXF1aXJlIGNvbnRleHRcIilcbiAgfVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2U+fSAqL1xuICBjb25zdCByZXNvbHZlZFJlc291cmNlcyA9IHt9XG5cbiAgZm9yIChjb25zdCByZXNvdXJjZVBhdGggb2YgcmVzb3VyY2VzUmVxdWlyZUNvbnRleHQua2V5cygpKSB7XG4gICAgY29uc3QgaW1wb3J0ZWRNb2R1bGUgPSByZXNvdXJjZXNSZXF1aXJlQ29udGV4dChyZXNvdXJjZVBhdGgpXG4gICAgY29uc3QgcmVzb3VyY2VEZWZpbml0aW9uID0gaW1wb3J0ZWRNb2R1bGU/LmRlZmF1bHRcblxuICAgIGlmICghZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3MocmVzb3VyY2VEZWZpbml0aW9uKSkgY29udGludWVcblxuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGZyb250ZW5kTW9kZWxNb2RlbE5hbWVGcm9tUmVzb3VyY2VQYXRoKHJlc291cmNlUGF0aCwgcmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gICAgaWYgKHJlc29sdmVkUmVzb3VyY2VzW21vZGVsTmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGRlZmluaXRpb24gZm9yICcke21vZGVsTmFtZX0nIGZyb20gJyR7cmVzb3VyY2VQYXRofSdgKVxuICAgIH1cblxuICAgIHJlc29sdmVkUmVzb3VyY2VzW21vZGVsTmFtZV0gPSByZXNvdXJjZURlZmluaXRpb25cbiAgfVxuXG4gIHJldHVybiByZXNvbHZlZFJlc291cmNlc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgcmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyB0eXBlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZX0gLSBXaGV0aGVyIHZhbHVlIGlzIGEgcmVzb3VyY2UgY2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiYgKHZhbHVlID09PSBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIHx8IHZhbHVlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2UpXG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSByZXNvdXJjZURlZmluaXRpb24gLSBSZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge3R5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIHwgbnVsbH0gLSBSZXNvdXJjZSBjbGFzcyB3aGVuIGRlZmluaXRpb24gaXMgY2xhc3MtYmFzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VDbGFzc0Zyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbikge1xuICByZXR1cm4gZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3MocmVzb3VyY2VEZWZpbml0aW9uKSA/IHJlc291cmNlRGVmaW5pdGlvbiA6IG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IHJlc291cmNlRGVmaW5pdGlvbiAtIFJlc291cmNlIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Ob3JtYWxpemVkRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbiB8IG51bGx9IC0gTm9ybWFsaXplZCByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbkZyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbikge1xuICBpZiAoIWZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb25Jc0NsYXNzKHJlc291cmNlRGVmaW5pdGlvbikpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24ocmVzb3VyY2VEZWZpbml0aW9uLnJlc291cmNlQ29uZmlnKCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb259IHJlc291cmNlQ29uZmlndXJhdGlvbiAtIFJhdyByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb259IC0gTm9ybWFsaXplZCByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uKHJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICBjb25zdCByZXN0QXJncyA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi8gKHsuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb259KVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIFtcbiAgICBcImFiaWxpdGllc1wiLFxuICAgIFwiYXR0cmlidXRlc1wiLFxuICAgIFwiYXR0YWNobWVudHNcIixcbiAgICBcImJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHNcIixcbiAgICBcImJ1aWx0SW5NZW1iZXJDb21tYW5kc1wiLFxuICAgIFwiY29sbGVjdGlvbkNvbW1hbmRzXCIsXG4gICAgXCJjb21tYW5kc1wiLFxuICAgIFwibWVtYmVyQ29tbWFuZHNcIixcbiAgICBcIm1vZGVsTmFtZVwiLFxuICAgIFwicGF0aFwiLFxuICAgIFwicHJpbWFyeUtleVwiLFxuICAgIFwicmVsYXRpb25zaGlwc1wiLFxuICAgIFwic2VydmVyXCJcbiAgXSkge1xuICAgIGRlbGV0ZSByZXN0QXJnc1trZXldXG4gIH1cblxuICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRDb21tYW5kcyA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmRzKHJlc291cmNlQ29uZmlndXJhdGlvbilcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc291cmNlQ29uZmlndXJhdGlvbixcbiAgICBhYmlsaXRpZXM6IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUFiaWxpdGllcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24uYWJpbGl0aWVzKSxcbiAgICBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVkQ29tbWFuZHMuYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICBidWlsdEluTWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZWRDb21tYW5kcy5idWlsdEluTWVtYmVyQ29tbWFuZHMsXG4gICAgY29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVkQ29tbWFuZHMuY29sbGVjdGlvbkNvbW1hbmRzLFxuICAgIG1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVkQ29tbWFuZHMubWVtYmVyQ29tbWFuZHNcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkfSBhYmlsaXRpZXMgLSBSZXNvdXJjZSBhYmlsaXRpZXMgY29uZmlnLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBhYmlsaXRpZXMgY29uZmlnLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXRpZXMoYWJpbGl0aWVzKSB7XG4gIGlmICghYWJpbGl0aWVzKSB7XG4gICAgcmV0dXJuIHtmaW5kOiBcInJlYWRcIiwgaW5kZXg6IFwicmVhZFwifVxuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFiaWxpdGllcykpIHtcbiAgICByZXR1cm4gYWJpbGl0aWVzXG4gIH1cblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fVxuXG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJtYW5hZ2VcIikpIHtcbiAgICBub3JtYWxpemVkLmNyZWF0ZSA9IFwibWFuYWdlXCJcbiAgICBub3JtYWxpemVkLmRlc3Ryb3kgPSBcIm1hbmFnZVwiXG4gICAgbm9ybWFsaXplZC5maW5kID0gXCJtYW5hZ2VcIlxuICAgIG5vcm1hbGl6ZWQuaW5kZXggPSBcIm1hbmFnZVwiXG4gICAgbm9ybWFsaXplZC51cGRhdGUgPSBcIm1hbmFnZVwiXG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFxuICB9XG5cbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcImNyZWF0ZVwiKSkgbm9ybWFsaXplZC5jcmVhdGUgPSBcImNyZWF0ZVwiXG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJkZXN0cm95XCIpKSBub3JtYWxpemVkLmRlc3Ryb3kgPSBcImRlc3Ryb3lcIlxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwicmVhZFwiKSkge1xuICAgIG5vcm1hbGl6ZWQuZmluZCA9IFwicmVhZFwiXG4gICAgbm9ybWFsaXplZC5pbmRleCA9IFwicmVhZFwiXG4gIH1cbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcInVwZGF0ZVwiKSkgbm9ybWFsaXplZC51cGRhdGUgPSBcInVwZGF0ZVwiXG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbn0gcmVzb3VyY2VDb25maWd1cmF0aW9uIC0gUmF3IHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7e2J1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGJ1aWx0SW5NZW1iZXJDb21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgY29sbGVjdGlvbkNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBtZW1iZXJDb21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPn19IC0gTm9ybWFsaXplZCBjb21tYW5kIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmRzKHJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICBjb25zdCBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLmJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHNcbiAgY29uc3QgYnVpbHRJbk1lbWJlckNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLmJ1aWx0SW5NZW1iZXJDb21tYW5kc1xuICBjb25zdCBjdXN0b21Db2xsZWN0aW9uQ29tbWFuZHMgPSByZXNvdXJjZUNvbmZpZ3VyYXRpb24uY29sbGVjdGlvbkNvbW1hbmRzXG4gIGNvbnN0IGN1c3RvbU1lbWJlckNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLm1lbWJlckNvbW1hbmRzXG4gIGNvbnN0IG5vcm1hbGl6ZWRCdWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzID0gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEJ1aWx0SW5Db21tYW5kcyh7XG4gICAgY29tbWFuZERlZmF1bHRzOiB7XG4gICAgICBjcmVhdGU6IFwiY3JlYXRlXCIsXG4gICAgICBpbmRleDogXCJpbmRleFwiXG4gICAgfSxcbiAgICBjb21tYW5kc0NvbmZpZzogYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICBtb2RlbE5hbWU6IFwiQ29sbGVjdGlvbkNvbW1hbmRcIlxuICB9KVxuICBjb25zdCBub3JtYWxpemVkQnVpbHRJbk1lbWJlckNvbW1hbmRzID0gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEJ1aWx0SW5Db21tYW5kcyh7XG4gICAgY29tbWFuZERlZmF1bHRzOiB7XG4gICAgICBhdHRhY2g6IFwiYXR0YWNoXCIsXG4gICAgICBkZXN0cm95OiBcImRlc3Ryb3lcIixcbiAgICAgIGRvd25sb2FkOiBcImRvd25sb2FkXCIsXG4gICAgICBmaW5kOiBcImZpbmRcIixcbiAgICAgIHVwZGF0ZTogXCJ1cGRhdGVcIixcbiAgICAgIHVybDogXCJ1cmxcIlxuICAgIH0sXG4gICAgY29tbWFuZHNDb25maWc6IGJ1aWx0SW5NZW1iZXJDb21tYW5kcyxcbiAgICBtb2RlbE5hbWU6IFwiTWVtYmVyQ29tbWFuZFwiXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVkQnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICBidWlsdEluTWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZWRCdWlsdEluTWVtYmVyQ29tbWFuZHMsXG4gICAgY29sbGVjdGlvbkNvbW1hbmRzOiBub3JtYWxpemVGcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZHMoe2NvbW1hbmRzQ29uZmlnOiBjdXN0b21Db2xsZWN0aW9uQ29tbWFuZHMsIG1vZGVsTmFtZTogXCJDb2xsZWN0aW9uQ29tbWFuZFwifSksXG4gICAgbWVtYmVyQ29tbWFuZHM6IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxDdXN0b21Db21tYW5kcyh7Y29tbWFuZHNDb25maWc6IGN1c3RvbU1lbWJlckNvbW1hbmRzLCBtb2RlbE5hbWU6IFwiTWVtYmVyQ29tbWFuZFwifSlcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBhcmdzLmNvbW1hbmREZWZhdWx0cyAtIEJ1aWx0LWluIGRlZmF1bHQgY29tbWFuZCBuYW1lcy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkfSBhcmdzLmNvbW1hbmRzQ29uZmlnIC0gQnVpbHQtaW4gY29tbWFuZHMgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubW9kZWxOYW1lIC0gRGlhZ25vc3RpYyBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBidWlsdC1pbiBjb21tYW5kIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEJ1aWx0SW5Db21tYW5kcyh7Y29tbWFuZERlZmF1bHRzLCBjb21tYW5kc0NvbmZpZywgbW9kZWxOYW1lfSkge1xuICBpZiAoIWNvbW1hbmRzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNvbW1hbmREZWZhdWx0c1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY29tbWFuZHNDb25maWcpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRDb21tYW5kcyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGNvbW1hbmRUeXBlIG9mIGNvbW1hbmRzQ29uZmlnKSB7XG4gICAgICBjb25zdCBkZWZhdWx0Q29tbWFuZE5hbWUgPSBjb21tYW5kRGVmYXVsdHNbY29tbWFuZFR5cGVdXG5cbiAgICAgIGlmICghZGVmYXVsdENvbW1hbmROYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBidWlsdC1pbiBmcm9udGVuZCBtb2RlbCBjb21tYW5kICcke2NvbW1hbmRUeXBlfScgZm9yICR7bW9kZWxOYW1lfWApXG4gICAgICB9XG5cbiAgICAgIG5vcm1hbGl6ZWRDb21tYW5kc1tjb21tYW5kVHlwZV0gPSB2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lKHtcbiAgICAgICAgY29tbWFuZE5hbWU6IGRlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgICAgY29tbWFuZFR5cGU6IGRlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgICAgbW9kZWxOYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkQ29tbWFuZHNcbiAgfVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0ge31cblxuICBmb3IgKGNvbnN0IFtjb21tYW5kVHlwZSwgY29tbWFuZE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbW1hbmRzQ29uZmlnKSkge1xuICAgIGlmICghY29tbWFuZERlZmF1bHRzW2NvbW1hbmRUeXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGJ1aWx0LWluIGZyb250ZW5kIG1vZGVsIGNvbW1hbmQgJyR7Y29tbWFuZFR5cGV9JyBmb3IgJHttb2RlbE5hbWV9YClcbiAgICB9XG5cbiAgICBub3JtYWxpemVkQ29tbWFuZHNbY29tbWFuZFR5cGVdID0gdmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZSh7XG4gICAgICBjb21tYW5kTmFtZSxcbiAgICAgIGNvbW1hbmRUeXBlOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNvbW1hbmRUeXBlKSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZENvbW1hbmRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBzdHJpbmdbXSB8IHVuZGVmaW5lZH0gYXJncy5jb21tYW5kc0NvbmZpZyAtIEN1c3RvbSBjb21tYW5kcyBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tb2RlbE5hbWUgLSBEaWFnbm9zdGljIG1vZGVsIG5hbWUuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gLSBOb3JtYWxpemVkIGN1c3RvbSBjb21tYW5kIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRzKHtjb21tYW5kc0NvbmZpZywgbW9kZWxOYW1lfSkge1xuICBpZiAoIWNvbW1hbmRzQ29uZmlnKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShjb21tYW5kc0NvbmZpZykpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0ge31cblxuICAgIGZvciAoY29uc3QgY29tbWFuZE5hbWUgb2YgY29tbWFuZHNDb25maWcpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlZENvbW1hbmROYW1lID0gdmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZSh7XG4gICAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgICBjb21tYW5kVHlwZTogY29tbWFuZE5hbWUsXG4gICAgICAgIG1vZGVsTmFtZVxuICAgICAgfSlcblxuICAgICAgbm9ybWFsaXplZENvbW1hbmRzW2luZmxlY3Rpb24uY2FtZWxpemUodmFsaWRhdGVkQ29tbWFuZE5hbWUsIHRydWUpXSA9IHZhbGlkYXRlZENvbW1hbmROYW1lXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRDb21tYW5kc1xuICB9XG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBub3JtYWxpemVkQ29tbWFuZHMgPSB7fVxuXG4gIGZvciAoY29uc3QgbWV0aG9kTmFtZSBvZiBPYmplY3Qua2V5cyhjb21tYW5kc0NvbmZpZykpIHtcbiAgICBjb25zdCBjb21tYW5kTmFtZSA9IGNvbW1hbmRzQ29uZmlnW21ldGhvZE5hbWVdXG5cbiAgICBub3JtYWxpemVkQ29tbWFuZHNbbWV0aG9kTmFtZV0gPSB2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lKHtcbiAgICAgIGNvbW1hbmROYW1lLFxuICAgICAgY29tbWFuZFR5cGU6IGNvbW1hbmROYW1lLFxuICAgICAgbW9kZWxOYW1lXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkQ29tbWFuZHNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lIC0gTW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gTm9ybWFsaXplZCByZXNvdXJjZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aChtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbikge1xuICBjb25zdCByZXNvdXJjZUNvbmZpZ3VyYXRpb24gPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gIGlmICghcmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGRlZmluaXRpb24gZm9yICR7bW9kZWxOYW1lfWApXG4gIH1cblxuICBpZiAocmVzb3VyY2VDb25maWd1cmF0aW9uLnBhdGgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2VDb25maWd1cmF0aW9uLnBhdGhcbiAgfVxuXG4gIHJldHVybiBgLyR7aW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi5wbHVyYWxpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKG1vZGVsTmFtZSkpKX1gXG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jb21tYW5kTmFtZSAtIENvbW1hbmQgcGF0aCBzZWdtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubW9kZWxOYW1lIC0gTW9kZWwgY2xhc3MgbmFtZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gYXJncy5yZXNvdXJjZURlZmluaXRpb24gLSBSZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge1wiZGVzdHJveVwiIHwgXCJmaW5kXCIgfCBcImluZGV4XCIgfCBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiYXR0YWNoXCIgfCBcImRvd25sb2FkXCIgfCBcInVybFwiIHwgbnVsbH0gLSBGcm9udGVuZCBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsQWN0aW9uRm9yQ29tbWFuZCh7Y29tbWFuZE5hbWUsIG1vZGVsTmFtZSwgcmVzb3VyY2VEZWZpbml0aW9ufSkge1xuICBjb25zdCByZXNvdXJjZUNvbmZpZ3VyYXRpb24gPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gIGlmICghcmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZyb250ZW5kIG1vZGVsIHJlc291cmNlIGRlZmluaXRpb24gZm9yICR7bW9kZWxOYW1lfWApXG4gIH1cblxuICBmb3IgKGNvbnN0IFthY3Rpb24sIGNvbmZpZ3VyZWRDb21tYW5kTmFtZV0gb2YgT2JqZWN0LmVudHJpZXMoe1xuICAgIC4uLnJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzLFxuICAgIC4uLnJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluTWVtYmVyQ29tbWFuZHNcbiAgfSkpIHtcbiAgICBpZiAoY29uZmlndXJlZENvbW1hbmROYW1lID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG5cbiAgICBjb25zdCB2YWxpZGF0ZWRDb21tYW5kTmFtZSA9IHZhbGlkYXRlRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZE5hbWUoe1xuICAgICAgY29tbWFuZE5hbWU6IGNvbmZpZ3VyZWRDb21tYW5kTmFtZSxcbiAgICAgIGNvbW1hbmRUeXBlOiAvKiogQHR5cGUge1wiYXR0YWNoXCIgfCBcImNyZWF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcImRvd25sb2FkXCIgfCBcImZpbmRcIiB8IFwiaW5kZXhcIiB8IFwidXBkYXRlXCIgfCBcInVybFwifSAqLyAoYWN0aW9uKSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH0pXG5cbiAgICBpZiAoY29tbWFuZE5hbWUgPT09IHZhbGlkYXRlZENvbW1hbmROYW1lKSB7XG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtcImF0dGFjaFwiIHwgXCJjcmVhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJkb3dubG9hZFwiIHwgXCJmaW5kXCIgfCBcImluZGV4XCIgfCBcInVwZGF0ZVwiIHwgXCJ1cmxcIn0gKi8gKGFjdGlvbilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkJhY2tlbmRQcm9qZWN0Q29uZmlndXJhdGlvbltdfSBhcmdzLmJhY2tlbmRQcm9qZWN0cyAtIEJhY2tlbmQgcHJvamVjdHMgdG8gc2Nhbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmN1cnJlbnRQYXRoIC0gUmVxdWVzdCBwYXRoIHdpdGhvdXQgcXVlcnkuXG4gKiBAcmV0dXJucyB7e2NvbW1hbmROYW1lOiBzdHJpbmcsIG1lbWJlcklkPzogc3RyaW5nLCBtZXRob2ROYW1lOiBzdHJpbmcsIG1vZGVsTmFtZTogc3RyaW5nLCByZXNvdXJjZVBhdGg6IHN0cmluZywgc2NvcGU6IFwiY29sbGVjdGlvblwiIHwgXCJtZW1iZXJcIn0gfCBudWxsfSAtIE1hdGNoZWQgY3VzdG9tIGNvbW1hbmQgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZEZvclBhdGgoe2JhY2tlbmRQcm9qZWN0cywgY3VycmVudFBhdGh9KSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDdXJyZW50UGF0aCA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGhGb3JNYXRjaChjdXJyZW50UGF0aClcblxuICBmb3IgKGNvbnN0IGJhY2tlbmRQcm9qZWN0IG9mIGJhY2tlbmRQcm9qZWN0cykge1xuICAgIGNvbnN0IHJlc291cmNlcyA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGb3JCYWNrZW5kUHJvamVjdChiYWNrZW5kUHJvamVjdClcblxuICAgIGZvciAoY29uc3QgbW9kZWxOYW1lIGluIHJlc291cmNlcykge1xuICAgICAgY29uc3QgcmVzb3VyY2VEZWZpbml0aW9uID0gcmVzb3VyY2VzW21vZGVsTmFtZV1cbiAgICAgIGNvbnN0IHJlc291cmNlQ29uZmlndXJhdGlvbiA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25Gcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pXG5cbiAgICAgIGlmICghcmVzb3VyY2VDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc291cmNlUGF0aCA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGhGb3JNYXRjaChmcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoKG1vZGVsTmFtZSwgcmVzb3VyY2VEZWZpbml0aW9uKSlcbiAgICAgIGNvbnN0IGV4cGVjdGVkUHJlZml4ID0gYCR7cmVzb3VyY2VQYXRofS9gXG5cbiAgICAgIGlmICghbm9ybWFsaXplZEN1cnJlbnRQYXRoLnN0YXJ0c1dpdGgoZXhwZWN0ZWRQcmVmaXgpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IG5vcm1hbGl6ZWRDdXJyZW50UGF0aFxuICAgICAgICAuc2xpY2UoZXhwZWN0ZWRQcmVmaXgubGVuZ3RoKVxuICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcblxuICAgICAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZENvbGxlY3Rpb25Db21tYW5kID0gT2JqZWN0LmVudHJpZXMocmVzb3VyY2VDb25maWd1cmF0aW9uLmNvbGxlY3Rpb25Db21tYW5kcylcbiAgICAgICAgICAuZmluZCgoWywgY29tbWFuZE5hbWVdKSA9PiBjb21tYW5kTmFtZSA9PT0gcGF0aFNlZ21lbnRzWzBdKVxuXG4gICAgICAgIGlmIChtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tbWFuZE5hbWU6IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZFsxXSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZFswXSxcbiAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlUGF0aCxcbiAgICAgICAgICAgIHNjb3BlOiBcImNvbGxlY3Rpb25cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBjb25zdCBtYXRjaGVkTWVtYmVyQ29tbWFuZCA9IE9iamVjdC5lbnRyaWVzKHJlc291cmNlQ29uZmlndXJhdGlvbi5tZW1iZXJDb21tYW5kcylcbiAgICAgICAgICAuZmluZCgoWywgY29tbWFuZE5hbWVdKSA9PiBjb21tYW5kTmFtZSA9PT0gcGF0aFNlZ21lbnRzWzFdKVxuXG4gICAgICAgIGlmIChtYXRjaGVkTWVtYmVyQ29tbWFuZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZTogbWF0Y2hlZE1lbWJlckNvbW1hbmRbMV0sXG4gICAgICAgICAgICBtZW1iZXJJZDogZGVjb2RlVVJJQ29tcG9uZW50KHBhdGhTZWdtZW50c1swXSksXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBtYXRjaGVkTWVtYmVyQ29tbWFuZFswXSxcbiAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlUGF0aCxcbiAgICAgICAgICAgIHNjb3BlOiBcIm1lbWJlclwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBJbmZlciBmcm9udGVuZCBtb2RlbCBuYW1lcyBmcm9tIGFuIGBpbmRleC5qc2AtYXdhcmUgcmVxdWlyZS1jb250ZXh0IHBhdGggaGV1cmlzdGljIHNvIGxheW91dHMgbGlrZSBgLi91c2Vycy9pbmRleC5qc2Agc3RpbGwgcmVzb2x2ZSB0byBgVXNlcmAuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVzb3VyY2VQYXRoIC0gUmVxdWlyZS1jb250ZXh0IHJlc291cmNlIHBhdGguXG4gKiBAcGFyYW0ge3R5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlfSByZXNvdXJjZURlZmluaXRpb24gLSBGcm9udGVuZC1tb2RlbCByZXNvdXJjZSBjbGFzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQmFja2luZyBtb2RlbCBjbGFzcyBuYW1lLlxuICovXG5mdW5jdGlvbiBmcm9udGVuZE1vZGVsTW9kZWxOYW1lRnJvbVJlc291cmNlUGF0aChyZXNvdXJjZVBhdGgsIHJlc291cmNlRGVmaW5pdGlvbikge1xuICB2b2lkIHJlc291cmNlRGVmaW5pdGlvblxuXG4gIGNvbnN0IHBhdGhXaXRob3V0UHJlZml4ID0gcmVzb3VyY2VQYXRoLnJlcGxhY2UoL15cXC5cXC8vLCBcIlwiKVxuICBjb25zdCBwYXRoV2l0aG91dEV4dGVuc2lvbiA9IHBhdGhXaXRob3V0UHJlZml4LnJlcGxhY2UoL1xcLlteLl0rJC8sIFwiXCIpXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGhXaXRob3V0RXh0ZW5zaW9uLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbilcbiAgY29uc3QgbGFzdFNlZ21lbnQgPSBwYXRoU2VnbWVudHMuYXQoLTEpXG4gIGNvbnN0IG1vZGVsU2VnbWVudCA9IGxhc3RTZWdtZW50ID09PSBcImluZGV4XCIgPyBwYXRoU2VnbWVudHMuYXQoLTIpIDogbGFzdFNlZ21lbnRcblxuICBpZiAoIW1vZGVsU2VnbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGluZmVyIGZyb250ZW5kIG1vZGVsIG5hbWUgZnJvbSByZXNvdXJjZSBwYXRoICcke3Jlc291cmNlUGF0aH0nYClcbiAgfVxuXG4gIHJldHVybiBpbmZsZWN0aW9uLmNhbWVsaXplKGluZmxlY3Rpb24uc2luZ3VsYXJpemUobW9kZWxTZWdtZW50KSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFBhdGggdmFsdWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIE5vcm1hbGl6ZWQgcGF0aCB3aXRoIGxlYWRpbmcgc2xhc2ggYW5kIG5vIHRyYWlsaW5nIHNsYXNoLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoRm9yTWF0Y2gocGF0aCkge1xuICBjb25zdCB3aXRoTGVhZGluZ1NsYXNoID0gcGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IHBhdGggOiBgLyR7cGF0aH1gXG5cbiAgaWYgKHdpdGhMZWFkaW5nU2xhc2gubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiB3aXRoTGVhZGluZ1NsYXNoLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgfVxuXG4gIHJldHVybiB3aXRoTGVhZGluZ1NsYXNoXG59XG4iXX0=
|
|
333
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mcm9udGVuZC1tb2RlbHMvcmVzb3VyY2UtZGVmaW5pdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyx5QkFBeUIsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNuRixPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMsd0NBQXdDLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQTtBQUV4Rjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsdUNBQXVDLENBQUMsY0FBYztJQUNwRSxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFBO0lBRS9DLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUN6RixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQ0FBc0MsQ0FBQyxLQUFLO0lBQzFELE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxLQUFLLHlCQUF5QixJQUFJLEtBQUssQ0FBQyxTQUFTLFlBQVkseUJBQXlCLENBQUMsQ0FBQTtBQUNySSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdDQUF3QyxDQUFDLGtCQUFrQjtJQUN6RSxPQUFPLHNDQUFzQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFDL0YsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxnREFBZ0QsQ0FBQyxrQkFBa0I7SUFDakYsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLGtCQUFrQixDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFNUUsT0FBTywyQ0FBMkMsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFBO0FBQ3pGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLDJDQUEyQyxDQUFDLHFCQUFxQjtJQUN4RSxNQUFNLFFBQVEsR0FBRyxrQ0FBa0MsQ0FBQyxDQUFDLEVBQUMsR0FBRyxxQkFBcUIsRUFBQyxDQUFDLENBQUE7SUFFaEYsS0FBSyxNQUFNLEdBQUcsSUFBSTtRQUNoQixXQUFXO1FBQ1gsWUFBWTtRQUNaLGFBQWE7UUFDYiwyQkFBMkI7UUFDM0IsdUJBQXVCO1FBQ3ZCLG9CQUFvQjtRQUNwQixVQUFVO1FBQ1YsZ0JBQWdCO1FBQ2hCLFdBQVc7UUFDWCxNQUFNO1FBQ04sWUFBWTtRQUNaLGVBQWU7UUFDZixRQUFRO0tBQ1QsRUFBRSxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUV2QixNQUFNLGtCQUFrQixHQUFHLHNDQUFzQyxDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFFeEYsT0FBTztRQUNMLEdBQUcscUJBQXFCO1FBQ3hCLFNBQVMsRUFBRSx1Q0FBdUMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUM7UUFDbkYseUJBQXlCLEVBQUUsa0JBQWtCLENBQUMseUJBQXlCO1FBQ3ZFLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDLHFCQUFxQjtRQUMvRCxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxrQkFBa0I7UUFDekQsY0FBYyxFQUFFLGtCQUFrQixDQUFDLGNBQWM7S0FDbEQsQ0FBQTtBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHVDQUF1QyxDQUFDLFNBQVM7SUFDeEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0lBRXJCLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFBO1FBQzVCLFVBQVUsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFBO1FBQzdCLFVBQVUsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFBO1FBQzFCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFBO1FBQzNCLFVBQVUsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFBO1FBRTVCLE9BQU8sVUFBVSxDQUFBO0lBQ25CLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUE7SUFDOUQsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUFFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFBO0lBQ2pFLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQy9CLFVBQVUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO1FBQ3hCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFBO0lBQzNCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUE7SUFFOUQsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsc0NBQXNDLENBQUMscUJBQXFCO0lBQ25FLE1BQU0seUJBQXlCLEdBQUcscUJBQXFCLENBQUMseUJBQXlCLENBQUE7SUFDakYsTUFBTSxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQTtJQUN6RSxNQUFNLHdCQUF3QixHQUFHLHFCQUFxQixDQUFDLGtCQUFrQixDQUFBO0lBQ3pFLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUMsY0FBYyxDQUFBO0lBQ2pFLE1BQU0sbUNBQW1DLEdBQUcscUNBQXFDLENBQUM7UUFDaEYsZUFBZSxFQUFFO1lBQ2YsTUFBTSxFQUFFLFFBQVE7WUFDaEIsS0FBSyxFQUFFLE9BQU87U0FDZjtRQUNELGNBQWMsRUFBRSx5QkFBeUI7UUFDekMsU0FBUyxFQUFFLG1CQUFtQjtLQUMvQixDQUFDLENBQUE7SUFDRixNQUFNLCtCQUErQixHQUFHLHFDQUFxQyxDQUFDO1FBQzVFLGVBQWUsRUFBRTtZQUNmLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLElBQUksRUFBRSxNQUFNO1lBQ1osTUFBTSxFQUFFLFFBQVE7WUFDaEIsR0FBRyxFQUFFLEtBQUs7U0FDWDtRQUNELGNBQWMsRUFBRSxxQkFBcUI7UUFDckMsU0FBUyxFQUFFLGVBQWU7S0FDM0IsQ0FBQyxDQUFBO0lBRUYsT0FBTztRQUNMLHlCQUF5QixFQUFFLG1DQUFtQztRQUM5RCxxQkFBcUIsRUFBRSwrQkFBK0I7UUFDdEQsa0JBQWtCLEVBQUUsb0NBQW9DLENBQUMsRUFBQyxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFDLENBQUM7UUFDcEksY0FBYyxFQUFFLG9DQUFvQyxDQUFDLEVBQUMsY0FBYyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUMsQ0FBQztLQUN6SCxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMscUNBQXFDLENBQUMsRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBQztJQUN6RixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsT0FBTyxlQUFlLENBQUE7SUFDeEIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ2xDLHFDQUFxQztRQUNyQyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUU3QixLQUFLLE1BQU0sV0FBVyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRXZELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxXQUFXLFNBQVMsU0FBUyxFQUFFLENBQUMsQ0FBQTtZQUM5RixDQUFDO1lBRUQsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEdBQUcsd0NBQXdDLENBQUM7Z0JBQ3pFLFdBQVcsRUFBRSxrQkFBa0I7Z0JBQy9CLFdBQVcsRUFBRSxrQkFBa0I7Z0JBQy9CLFNBQVM7YUFDVixDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsT0FBTyxrQkFBa0IsQ0FBQTtJQUMzQixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFBO0lBRTdCLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDeEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLFdBQVcsU0FBUyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBQzlGLENBQUM7UUFFRCxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsR0FBRyx3Q0FBd0MsQ0FBQztZQUN6RSxXQUFXO1lBQ1gsV0FBVyxFQUFFLHFCQUFxQixDQUFDLENBQUMsV0FBVyxDQUFDO1lBQ2hELFNBQVM7U0FDVixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQTtBQUMzQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLG9DQUFvQyxDQUFDLEVBQUMsY0FBYyxFQUFFLFNBQVMsRUFBQztJQUN2RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDbEMscUNBQXFDO1FBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFBO1FBRTdCLEtBQUssTUFBTSxXQUFXLElBQUksY0FBYyxFQUFFLENBQUM7WUFDekMsTUFBTSxvQkFBb0IsR0FBRyx3Q0FBd0MsQ0FBQztnQkFDcEUsV0FBVztnQkFDWCxXQUFXLEVBQUUsV0FBVztnQkFDeEIsU0FBUzthQUNWLENBQUMsQ0FBQTtZQUVGLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxvQkFBb0IsQ0FBQTtRQUM1RixDQUFDO1FBRUQsT0FBTyxrQkFBa0IsQ0FBQTtJQUMzQixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFBO0lBRTdCLEtBQUssTUFBTSxVQUFVLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3JELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUU5QyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsR0FBRyx3Q0FBd0MsQ0FBQztZQUN4RSxXQUFXO1lBQ1gsV0FBVyxFQUFFLFdBQVc7WUFDeEIsU0FBUztTQUNWLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxPQUFPLGtCQUFrQixDQUFBO0FBQzNCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxrQkFBa0I7SUFDckUsTUFBTSxxQkFBcUIsR0FBRyxnREFBZ0QsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBRWxHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDaEYsQ0FBQztJQUVELElBQUkscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUE7SUFDbkMsQ0FBQztJQUVELE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUMzRixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBQztJQUN4RixNQUFNLHFCQUFxQixHQUFHLGdEQUFnRCxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFFbEcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsU0FBUyxFQUFFLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBRUQsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMzRCxHQUFHLHFCQUFxQixDQUFDLHlCQUF5QjtRQUNsRCxHQUFHLHFCQUFxQixDQUFDLHFCQUFxQjtLQUMvQyxDQUFDLEVBQUUsQ0FBQztRQUNILElBQUkscUJBQXFCLEtBQUssU0FBUztZQUFFLFNBQVE7UUFFakQsTUFBTSxvQkFBb0IsR0FBRyx3Q0FBd0MsQ0FBQztZQUNwRSxXQUFXLEVBQUUscUJBQXFCO1lBQ2xDLFdBQVcsRUFBRSxpR0FBaUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN2SCxTQUFTO1NBQ1YsQ0FBQyxDQUFBO1FBRUYsSUFBSSxXQUFXLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztZQUN6QyxPQUFPLGlHQUFpRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbkgsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxFQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUM7SUFDOUUsTUFBTSxxQkFBcUIsR0FBRywwQ0FBMEMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUVyRixLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzdDLE1BQU0sU0FBUyxHQUFHLHVDQUF1QyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRXpFLEtBQUssTUFBTSxTQUFTLElBQUksU0FBUyxFQUFFLENBQUM7WUFDbEMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDL0MsTUFBTSxxQkFBcUIsR0FBRyxnREFBZ0QsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1lBRWxHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUMzQixTQUFRO1lBQ1YsQ0FBQztZQUVELE1BQU0sWUFBWSxHQUFHLDBDQUEwQyxDQUFDLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUE7WUFDekgsTUFBTSxjQUFjLEdBQUcsR0FBRyxZQUFZLEdBQUcsQ0FBQTtZQUV6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELFNBQVE7WUFDVixDQUFDO1lBRUQsTUFBTSxZQUFZLEdBQUcscUJBQXFCO2lCQUN2QyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztpQkFDNUIsS0FBSyxDQUFDLEdBQUcsQ0FBQztpQkFDVixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7WUFFbEIsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUM7cUJBQ3RGLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUU3RCxJQUFJLHdCQUF3QixFQUFFLENBQUM7b0JBQzdCLE9BQU87d0JBQ0wsV0FBVyxFQUFFLHdCQUF3QixDQUFDLENBQUMsQ0FBQzt3QkFDeEMsVUFBVSxFQUFFLHdCQUF3QixDQUFDLENBQUMsQ0FBQzt3QkFDdkMsU0FBUzt3QkFDVCxZQUFZO3dCQUNaLEtBQUssRUFBRSxZQUFZO3FCQUNwQixDQUFBO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDO3FCQUM5RSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFFN0QsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO29CQUN6QixPQUFPO3dCQUNMLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7d0JBQ3BDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzdDLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7d0JBQ25DLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixLQUFLLEVBQUUsUUFBUTtxQkFDaEIsQ0FBQTtnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUywwQ0FBMEMsQ0FBQyxJQUFJO0lBQ3RELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFBO0lBRWpFLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQTtBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2UgZnJvbSBcIi4uL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZE5hbWV9IGZyb20gXCIuL3Jlc291cmNlLWNvbmZpZy12YWxpZGF0aW9uLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuQmFja2VuZFByb2plY3RDb25maWd1cmF0aW9ufSBiYWNrZW5kUHJvamVjdCAtIEJhY2tlbmQgcHJvamVjdCBjb25maWcuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgdHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2U+fSAtIFJlc291cmNlIGRlZmluaXRpb25zIGtleWVkIGJ5IG1vZGVsIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpIHtcbiAgY29uc3QgcmVzb3VyY2VzID0gYmFja2VuZFByb2plY3QuZnJvbnRlbmRNb2RlbHNcblxuICBpZiAocmVzb3VyY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXJlc291cmNlcyB8fCB0eXBlb2YgcmVzb3VyY2VzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJhY2tlbmQgcHJvamVjdCBmcm9udGVuZE1vZGVscyBvYmplY3QgYnV0IGdvdDogJHtyZXNvdXJjZXN9YClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb3VyY2VzXG4gIH1cblxuICByZXR1cm4ge31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHJlc291cmNlIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgdHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2V9IC0gV2hldGhlciB2YWx1ZSBpcyBhIHJlc291cmNlIGNsYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlRGVmaW5pdGlvbklzQ2xhc3ModmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmICh2YWx1ZSA9PT0gRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSB8fCB2YWx1ZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHt0eXBlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSB8IG51bGx9IC0gUmVzb3VyY2UgY2xhc3Mgd2hlbiBkZWZpbml0aW9uIGlzIGNsYXNzLWJhc2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlQ2xhc3NGcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pIHtcbiAgcmV0dXJuIGZyb250ZW5kTW9kZWxSZXNvdXJjZURlZmluaXRpb25Jc0NsYXNzKHJlc291cmNlRGVmaW5pdGlvbikgPyByZXNvdXJjZURlZmluaXRpb24gOiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSByZXNvdXJjZURlZmluaXRpb24gLSBSZXNvdXJjZSBkZWZpbml0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuTm9ybWFsaXplZEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb24gfCBudWxsfSAtIE5vcm1hbGl6ZWQgcmVzb3VyY2UgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb25Gcm9tRGVmaW5pdGlvbihyZXNvdXJjZURlZmluaXRpb24pIHtcbiAgaWYgKCFmcm9udGVuZE1vZGVsUmVzb3VyY2VEZWZpbml0aW9uSXNDbGFzcyhyZXNvdXJjZURlZmluaXRpb24pKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uKHJlc291cmNlRGVmaW5pdGlvbi5yZXNvdXJjZUNvbmZpZygpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9ufSByZXNvdXJjZUNvbmZpZ3VyYXRpb24gLSBSYXcgcmVzb3VyY2UgY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLk5vcm1hbGl6ZWRGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9ufSAtIE5vcm1hbGl6ZWQgcmVzb3VyY2UgY29uZmlndXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbihyZXNvdXJjZUNvbmZpZ3VyYXRpb24pIHtcbiAgY29uc3QgcmVzdEFyZ3MgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovICh7Li4ucmVzb3VyY2VDb25maWd1cmF0aW9ufSlcblxuICBmb3IgKGNvbnN0IGtleSBvZiBbXG4gICAgXCJhYmlsaXRpZXNcIixcbiAgICBcImF0dHJpYnV0ZXNcIixcbiAgICBcImF0dGFjaG1lbnRzXCIsXG4gICAgXCJidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXCIsXG4gICAgXCJidWlsdEluTWVtYmVyQ29tbWFuZHNcIixcbiAgICBcImNvbGxlY3Rpb25Db21tYW5kc1wiLFxuICAgIFwiY29tbWFuZHNcIixcbiAgICBcIm1lbWJlckNvbW1hbmRzXCIsXG4gICAgXCJtb2RlbE5hbWVcIixcbiAgICBcInBhdGhcIixcbiAgICBcInByaW1hcnlLZXlcIixcbiAgICBcInJlbGF0aW9uc2hpcHNcIixcbiAgICBcInNlcnZlclwiXG4gIF0pIHtcbiAgICBkZWxldGUgcmVzdEFyZ3Nba2V5XVxuICB9XG5cbiAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICBjb25zdCBub3JtYWxpemVkQ29tbWFuZHMgPSBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24pXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24sXG4gICAgYWJpbGl0aWVzOiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VBYmlsaXRpZXMocmVzb3VyY2VDb25maWd1cmF0aW9uLmFiaWxpdGllcyksXG4gICAgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplZENvbW1hbmRzLmJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgYnVpbHRJbk1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVkQ29tbWFuZHMuYnVpbHRJbk1lbWJlckNvbW1hbmRzLFxuICAgIGNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplZENvbW1hbmRzLmNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICBtZW1iZXJDb21tYW5kczogbm9ybWFsaXplZENvbW1hbmRzLm1lbWJlckNvbW1hbmRzXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBzdHJpbmdbXSB8IHVuZGVmaW5lZH0gYWJpbGl0aWVzIC0gUmVzb3VyY2UgYWJpbGl0aWVzIGNvbmZpZy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAtIE5vcm1hbGl6ZWQgYWJpbGl0aWVzIGNvbmZpZy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlQWJpbGl0aWVzKGFiaWxpdGllcykge1xuICBpZiAoIWFiaWxpdGllcykge1xuICAgIHJldHVybiB7ZmluZDogXCJyZWFkXCIsIGluZGV4OiBcInJlYWRcIn1cbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXRpZXMpKSB7XG4gICAgcmV0dXJuIGFiaWxpdGllc1xuICB9XG5cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICBjb25zdCBub3JtYWxpemVkID0ge31cblxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwibWFuYWdlXCIpKSB7XG4gICAgbm9ybWFsaXplZC5jcmVhdGUgPSBcIm1hbmFnZVwiXG4gICAgbm9ybWFsaXplZC5kZXN0cm95ID0gXCJtYW5hZ2VcIlxuICAgIG5vcm1hbGl6ZWQuZmluZCA9IFwibWFuYWdlXCJcbiAgICBub3JtYWxpemVkLmluZGV4ID0gXCJtYW5hZ2VcIlxuICAgIG5vcm1hbGl6ZWQudXBkYXRlID0gXCJtYW5hZ2VcIlxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxuXG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJjcmVhdGVcIikpIG5vcm1hbGl6ZWQuY3JlYXRlID0gXCJjcmVhdGVcIlxuICBpZiAoYWJpbGl0aWVzLmluY2x1ZGVzKFwiZGVzdHJveVwiKSkgbm9ybWFsaXplZC5kZXN0cm95ID0gXCJkZXN0cm95XCJcbiAgaWYgKGFiaWxpdGllcy5pbmNsdWRlcyhcInJlYWRcIikpIHtcbiAgICBub3JtYWxpemVkLmZpbmQgPSBcInJlYWRcIlxuICAgIG5vcm1hbGl6ZWQuaW5kZXggPSBcInJlYWRcIlxuICB9XG4gIGlmIChhYmlsaXRpZXMuaW5jbHVkZXMoXCJ1cGRhdGVcIikpIG5vcm1hbGl6ZWQudXBkYXRlID0gXCJ1cGRhdGVcIlxuXG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ3VyYXRpb259IHJlc291cmNlQ29uZmlndXJhdGlvbiAtIFJhdyByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge3tidWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBidWlsdEluTWVtYmVyQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGNvbGxlY3Rpb25Db21tYW5kczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgbWVtYmVyQ29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz59fSAtIE5vcm1hbGl6ZWQgY29tbWFuZCBjb25maWd1cmF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24pIHtcbiAgY29uc3QgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluQ29sbGVjdGlvbkNvbW1hbmRzXG4gIGNvbnN0IGJ1aWx0SW5NZW1iZXJDb21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5idWlsdEluTWVtYmVyQ29tbWFuZHNcbiAgY29uc3QgY3VzdG9tQ29sbGVjdGlvbkNvbW1hbmRzID0gcmVzb3VyY2VDb25maWd1cmF0aW9uLmNvbGxlY3Rpb25Db21tYW5kc1xuICBjb25zdCBjdXN0b21NZW1iZXJDb21tYW5kcyA9IHJlc291cmNlQ29uZmlndXJhdGlvbi5tZW1iZXJDb21tYW5kc1xuICBjb25zdCBub3JtYWxpemVkQnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxCdWlsdEluQ29tbWFuZHMoe1xuICAgIGNvbW1hbmREZWZhdWx0czoge1xuICAgICAgY3JlYXRlOiBcImNyZWF0ZVwiLFxuICAgICAgaW5kZXg6IFwiaW5kZXhcIlxuICAgIH0sXG4gICAgY29tbWFuZHNDb25maWc6IGJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgbW9kZWxOYW1lOiBcIkNvbGxlY3Rpb25Db21tYW5kXCJcbiAgfSlcbiAgY29uc3Qgbm9ybWFsaXplZEJ1aWx0SW5NZW1iZXJDb21tYW5kcyA9IG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxCdWlsdEluQ29tbWFuZHMoe1xuICAgIGNvbW1hbmREZWZhdWx0czoge1xuICAgICAgYXR0YWNoOiBcImF0dGFjaFwiLFxuICAgICAgZGVzdHJveTogXCJkZXN0cm95XCIsXG4gICAgICBkb3dubG9hZDogXCJkb3dubG9hZFwiLFxuICAgICAgZmluZDogXCJmaW5kXCIsXG4gICAgICB1cGRhdGU6IFwidXBkYXRlXCIsXG4gICAgICB1cmw6IFwidXJsXCJcbiAgICB9LFxuICAgIGNvbW1hbmRzQ29uZmlnOiBidWlsdEluTWVtYmVyQ29tbWFuZHMsXG4gICAgbW9kZWxOYW1lOiBcIk1lbWJlckNvbW1hbmRcIlxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplZEJ1aWx0SW5Db2xsZWN0aW9uQ29tbWFuZHMsXG4gICAgYnVpbHRJbk1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVkQnVpbHRJbk1lbWJlckNvbW1hbmRzLFxuICAgIGNvbGxlY3Rpb25Db21tYW5kczogbm9ybWFsaXplRnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRzKHtjb21tYW5kc0NvbmZpZzogY3VzdG9tQ29sbGVjdGlvbkNvbW1hbmRzLCBtb2RlbE5hbWU6IFwiQ29sbGVjdGlvbkNvbW1hbmRcIn0pLFxuICAgIG1lbWJlckNvbW1hbmRzOiBub3JtYWxpemVGcm9udGVuZE1vZGVsQ3VzdG9tQ29tbWFuZHMoe2NvbW1hbmRzQ29uZmlnOiBjdXN0b21NZW1iZXJDb21tYW5kcywgbW9kZWxOYW1lOiBcIk1lbWJlckNvbW1hbmRcIn0pXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gYXJncy5jb21tYW5kRGVmYXVsdHMgLSBCdWlsdC1pbiBkZWZhdWx0IGNvbW1hbmQgbmFtZXMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBzdHJpbmdbXSB8IHVuZGVmaW5lZH0gYXJncy5jb21tYW5kc0NvbmZpZyAtIEJ1aWx0LWluIGNvbW1hbmRzIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1vZGVsTmFtZSAtIERpYWdub3N0aWMgbW9kZWwgbmFtZS5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAtIE5vcm1hbGl6ZWQgYnVpbHQtaW4gY29tbWFuZCBjb25maWcuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxCdWlsdEluQ29tbWFuZHMoe2NvbW1hbmREZWZhdWx0cywgY29tbWFuZHNDb25maWcsIG1vZGVsTmFtZX0pIHtcbiAgaWYgKCFjb21tYW5kc0NvbmZpZykge1xuICAgIHJldHVybiBjb21tYW5kRGVmYXVsdHNcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGNvbW1hbmRzQ29uZmlnKSkge1xuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBjb25zdCBub3JtYWxpemVkQ29tbWFuZHMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBjb21tYW5kVHlwZSBvZiBjb21tYW5kc0NvbmZpZykge1xuICAgICAgY29uc3QgZGVmYXVsdENvbW1hbmROYW1lID0gY29tbWFuZERlZmF1bHRzW2NvbW1hbmRUeXBlXVxuXG4gICAgICBpZiAoIWRlZmF1bHRDb21tYW5kTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYnVpbHQtaW4gZnJvbnRlbmQgbW9kZWwgY29tbWFuZCAnJHtjb21tYW5kVHlwZX0nIGZvciAke21vZGVsTmFtZX1gKVxuICAgICAgfVxuXG4gICAgICBub3JtYWxpemVkQ29tbWFuZHNbY29tbWFuZFR5cGVdID0gdmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZSh7XG4gICAgICAgIGNvbW1hbmROYW1lOiBkZWZhdWx0Q29tbWFuZE5hbWUsXG4gICAgICAgIGNvbW1hbmRUeXBlOiBkZWZhdWx0Q29tbWFuZE5hbWUsXG4gICAgICAgIG1vZGVsTmFtZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZENvbW1hbmRzXG4gIH1cblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IG5vcm1hbGl6ZWRDb21tYW5kcyA9IHt9XG5cbiAgZm9yIChjb25zdCBbY29tbWFuZFR5cGUsIGNvbW1hbmROYW1lXSBvZiBPYmplY3QuZW50cmllcyhjb21tYW5kc0NvbmZpZykpIHtcbiAgICBpZiAoIWNvbW1hbmREZWZhdWx0c1tjb21tYW5kVHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBidWlsdC1pbiBmcm9udGVuZCBtb2RlbCBjb21tYW5kICcke2NvbW1hbmRUeXBlfScgZm9yICR7bW9kZWxOYW1lfWApXG4gICAgfVxuXG4gICAgbm9ybWFsaXplZENvbW1hbmRzW2NvbW1hbmRUeXBlXSA9IHZhbGlkYXRlRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZE5hbWUoe1xuICAgICAgY29tbWFuZE5hbWUsXG4gICAgICBjb21tYW5kVHlwZTogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChjb21tYW5kVHlwZSksXG4gICAgICBtb2RlbE5hbWVcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRDb21tYW5kc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgc3RyaW5nW10gfCB1bmRlZmluZWR9IGFyZ3MuY29tbWFuZHNDb25maWcgLSBDdXN0b20gY29tbWFuZHMgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubW9kZWxOYW1lIC0gRGlhZ25vc3RpYyBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IC0gTm9ybWFsaXplZCBjdXN0b20gY29tbWFuZCBjb25maWcuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb250ZW5kTW9kZWxDdXN0b21Db21tYW5kcyh7Y29tbWFuZHNDb25maWcsIG1vZGVsTmFtZX0pIHtcbiAgaWYgKCFjb21tYW5kc0NvbmZpZykge1xuICAgIHJldHVybiB7fVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY29tbWFuZHNDb25maWcpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRDb21tYW5kcyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGNvbW1hbmROYW1lIG9mIGNvbW1hbmRzQ29uZmlnKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZWRDb21tYW5kTmFtZSA9IHZhbGlkYXRlRnJvbnRlbmRNb2RlbFJlc291cmNlQ29tbWFuZE5hbWUoe1xuICAgICAgICBjb21tYW5kTmFtZSxcbiAgICAgICAgY29tbWFuZFR5cGU6IGNvbW1hbmROYW1lLFxuICAgICAgICBtb2RlbE5hbWVcbiAgICAgIH0pXG5cbiAgICAgIG5vcm1hbGl6ZWRDb21tYW5kc1tpbmZsZWN0aW9uLmNhbWVsaXplKHZhbGlkYXRlZENvbW1hbmROYW1lLCB0cnVlKV0gPSB2YWxpZGF0ZWRDb21tYW5kTmFtZVxuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkQ29tbWFuZHNcbiAgfVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3Qgbm9ybWFsaXplZENvbW1hbmRzID0ge31cblxuICBmb3IgKGNvbnN0IG1ldGhvZE5hbWUgb2YgT2JqZWN0LmtleXMoY29tbWFuZHNDb25maWcpKSB7XG4gICAgY29uc3QgY29tbWFuZE5hbWUgPSBjb21tYW5kc0NvbmZpZ1ttZXRob2ROYW1lXVxuXG4gICAgbm9ybWFsaXplZENvbW1hbmRzW21ldGhvZE5hbWVdID0gdmFsaWRhdGVGcm9udGVuZE1vZGVsUmVzb3VyY2VDb21tYW5kTmFtZSh7XG4gICAgICBjb21tYW5kTmFtZSxcbiAgICAgIGNvbW1hbmRUeXBlOiBjb21tYW5kTmFtZSxcbiAgICAgIG1vZGVsTmFtZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZENvbW1hbmRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHJlc291cmNlRGVmaW5pdGlvbiAtIFJlc291cmNlIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIE5vcm1hbGl6ZWQgcmVzb3VyY2UgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb250ZW5kTW9kZWxSZXNvdXJjZVBhdGgobW9kZWxOYW1lLCByZXNvdXJjZURlZmluaXRpb24pIHtcbiAgY29uc3QgcmVzb3VyY2VDb25maWd1cmF0aW9uID0gZnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbkZyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbilcblxuICBpZiAoIXJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmcm9udGVuZCBtb2RlbCByZXNvdXJjZSBkZWZpbml0aW9uIGZvciAke21vZGVsTmFtZX1gKVxuICB9XG5cbiAgaWYgKHJlc291cmNlQ29uZmlndXJhdGlvbi5wYXRoKSB7XG4gICAgcmV0dXJuIHJlc291cmNlQ29uZmlndXJhdGlvbi5wYXRoXG4gIH1cblxuICByZXR1cm4gYC8ke2luZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24ucGx1cmFsaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShtb2RlbE5hbWUpKSl9YFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY29tbWFuZE5hbWUgLSBDb21tYW5kIHBhdGggc2VnbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1vZGVsTmFtZSAtIE1vZGVsIGNsYXNzIG5hbWUuXG4gKiBAcGFyYW0ge3Vua25vd259IGFyZ3MucmVzb3VyY2VEZWZpbml0aW9uIC0gUmVzb3VyY2UgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHtcImRlc3Ryb3lcIiB8IFwiZmluZFwiIHwgXCJpbmRleFwiIHwgXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImF0dGFjaFwiIHwgXCJkb3dubG9hZFwiIHwgXCJ1cmxcIiB8IG51bGx9IC0gRnJvbnRlbmQgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEFjdGlvbkZvckNvbW1hbmQoe2NvbW1hbmROYW1lLCBtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbn0pIHtcbiAgY29uc3QgcmVzb3VyY2VDb25maWd1cmF0aW9uID0gZnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlndXJhdGlvbkZyb21EZWZpbml0aW9uKHJlc291cmNlRGVmaW5pdGlvbilcblxuICBpZiAoIXJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmcm9udGVuZCBtb2RlbCByZXNvdXJjZSBkZWZpbml0aW9uIGZvciAke21vZGVsTmFtZX1gKVxuICB9XG5cbiAgZm9yIChjb25zdCBbYWN0aW9uLCBjb25maWd1cmVkQ29tbWFuZE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHtcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbkNvbGxlY3Rpb25Db21tYW5kcyxcbiAgICAuLi5yZXNvdXJjZUNvbmZpZ3VyYXRpb24uYnVpbHRJbk1lbWJlckNvbW1hbmRzXG4gIH0pKSB7XG4gICAgaWYgKGNvbmZpZ3VyZWRDb21tYW5kTmFtZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZVxuXG4gICAgY29uc3QgdmFsaWRhdGVkQ29tbWFuZE5hbWUgPSB2YWxpZGF0ZUZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbW1hbmROYW1lKHtcbiAgICAgIGNvbW1hbmROYW1lOiBjb25maWd1cmVkQ29tbWFuZE5hbWUsXG4gICAgICBjb21tYW5kVHlwZTogLyoqIEB0eXBlIHtcImF0dGFjaFwiIHwgXCJjcmVhdGVcIiB8IFwiZGVzdHJveVwiIHwgXCJkb3dubG9hZFwiIHwgXCJmaW5kXCIgfCBcImluZGV4XCIgfCBcInVwZGF0ZVwiIHwgXCJ1cmxcIn0gKi8gKGFjdGlvbiksXG4gICAgICBtb2RlbE5hbWVcbiAgICB9KVxuXG4gICAgaWYgKGNvbW1hbmROYW1lID09PSB2YWxpZGF0ZWRDb21tYW5kTmFtZSkge1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7XCJhdHRhY2hcIiB8IFwiY3JlYXRlXCIgfCBcImRlc3Ryb3lcIiB8IFwiZG93bmxvYWRcIiB8IFwiZmluZFwiIHwgXCJpbmRleFwiIHwgXCJ1cGRhdGVcIiB8IFwidXJsXCJ9ICovIChhY3Rpb24pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5CYWNrZW5kUHJvamVjdENvbmZpZ3VyYXRpb25bXX0gYXJncy5iYWNrZW5kUHJvamVjdHMgLSBCYWNrZW5kIHByb2plY3RzIHRvIHNjYW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jdXJyZW50UGF0aCAtIFJlcXVlc3QgcGF0aCB3aXRob3V0IHF1ZXJ5LlxuICogQHJldHVybnMge3tjb21tYW5kTmFtZTogc3RyaW5nLCBtZW1iZXJJZD86IHN0cmluZywgbWV0aG9kTmFtZTogc3RyaW5nLCBtb2RlbE5hbWU6IHN0cmluZywgcmVzb3VyY2VQYXRoOiBzdHJpbmcsIHNjb3BlOiBcImNvbGxlY3Rpb25cIiB8IFwibWVtYmVyXCJ9IHwgbnVsbH0gLSBNYXRjaGVkIGN1c3RvbSBjb21tYW5kIG1ldGFkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEN1c3RvbUNvbW1hbmRGb3JQYXRoKHtiYWNrZW5kUHJvamVjdHMsIGN1cnJlbnRQYXRofSkge1xuICBjb25zdCBub3JtYWxpemVkQ3VycmVudFBhdGggPSBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoRm9yTWF0Y2goY3VycmVudFBhdGgpXG5cbiAgZm9yIChjb25zdCBiYWNrZW5kUHJvamVjdCBvZiBiYWNrZW5kUHJvamVjdHMpIHtcbiAgICBjb25zdCByZXNvdXJjZXMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBpbiByZXNvdXJjZXMpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlRGVmaW5pdGlvbiA9IHJlc291cmNlc1ttb2RlbE5hbWVdXG4gICAgICBjb25zdCByZXNvdXJjZUNvbmZpZ3VyYXRpb24gPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd1cmF0aW9uRnJvbURlZmluaXRpb24ocmVzb3VyY2VEZWZpbml0aW9uKVxuXG4gICAgICBpZiAoIXJlc291cmNlQ29uZmlndXJhdGlvbikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNvdXJjZVBhdGggPSBub3JtYWxpemVGcm9udGVuZE1vZGVsUmVzb3VyY2VQYXRoRm9yTWF0Y2goZnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aChtb2RlbE5hbWUsIHJlc291cmNlRGVmaW5pdGlvbikpXG4gICAgICBjb25zdCBleHBlY3RlZFByZWZpeCA9IGAke3Jlc291cmNlUGF0aH0vYFxuXG4gICAgICBpZiAoIW5vcm1hbGl6ZWRDdXJyZW50UGF0aC5zdGFydHNXaXRoKGV4cGVjdGVkUHJlZml4KSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBub3JtYWxpemVkQ3VycmVudFBhdGhcbiAgICAgICAgLnNsaWNlKGV4cGVjdGVkUHJlZml4Lmxlbmd0aClcbiAgICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG5cbiAgICAgIGlmIChwYXRoU2VnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRDb2xsZWN0aW9uQ29tbWFuZCA9IE9iamVjdC5lbnRyaWVzKHJlc291cmNlQ29uZmlndXJhdGlvbi5jb2xsZWN0aW9uQ29tbWFuZHMpXG4gICAgICAgICAgLmZpbmQoKFssIGNvbW1hbmROYW1lXSkgPT4gY29tbWFuZE5hbWUgPT09IHBhdGhTZWdtZW50c1swXSlcblxuICAgICAgICBpZiAobWF0Y2hlZENvbGxlY3Rpb25Db21tYW5kKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbW1hbmROYW1lOiBtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmRbMV0sXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBtYXRjaGVkQ29sbGVjdGlvbkNvbW1hbmRbMF0sXG4gICAgICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICBzY29wZTogXCJjb2xsZWN0aW9uXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE1lbWJlckNvbW1hbmQgPSBPYmplY3QuZW50cmllcyhyZXNvdXJjZUNvbmZpZ3VyYXRpb24ubWVtYmVyQ29tbWFuZHMpXG4gICAgICAgICAgLmZpbmQoKFssIGNvbW1hbmROYW1lXSkgPT4gY29tbWFuZE5hbWUgPT09IHBhdGhTZWdtZW50c1sxXSlcblxuICAgICAgICBpZiAobWF0Y2hlZE1lbWJlckNvbW1hbmQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tbWFuZE5hbWU6IG1hdGNoZWRNZW1iZXJDb21tYW5kWzFdLFxuICAgICAgICAgICAgbWVtYmVySWQ6IGRlY29kZVVSSUNvbXBvbmVudChwYXRoU2VnbWVudHNbMF0pLFxuICAgICAgICAgICAgbWV0aG9kTmFtZTogbWF0Y2hlZE1lbWJlckNvbW1hbmRbMF0sXG4gICAgICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZVBhdGgsXG4gICAgICAgICAgICBzY29wZTogXCJtZW1iZXJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBQYXRoIHZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ30gLSBOb3JtYWxpemVkIHBhdGggd2l0aCBsZWFkaW5nIHNsYXNoIGFuZCBubyB0cmFpbGluZyBzbGFzaC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRnJvbnRlbmRNb2RlbFJlc291cmNlUGF0aEZvck1hdGNoKHBhdGgpIHtcbiAgY29uc3Qgd2l0aExlYWRpbmdTbGFzaCA9IHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogYC8ke3BhdGh9YFxuXG4gIGlmICh3aXRoTGVhZGluZ1NsYXNoLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gd2l0aExlYWRpbmdTbGFzaC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gIH1cblxuICByZXR1cm4gd2l0aExlYWRpbmdTbGFzaFxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-publishers.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-publishers.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH,6DAHW,MAAM,GACJ,MAAM,CAIlB;
|
|
1
|
+
{"version":3,"file":"websocket-publishers.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-publishers.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH,6DAHW,MAAM,GACJ,MAAM,CAIlB;AA4ED;;;GAGG;AACH,gFAHW,OAAO,qBAAqB,EAAE,OAAO,GACnC,OAAO,CAAC,IAAI,CAAC,CAwEzB"}
|
|
@@ -25,21 +25,13 @@ async function resolveAbilityResourcesList(configuration) {
|
|
|
25
25
|
const explicit = configuration.getAbilityResources();
|
|
26
26
|
if (explicit && explicit.length > 0)
|
|
27
27
|
return explicit;
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
// available during initialization — catch and return empty in that case.
|
|
28
|
+
// Resolve from the ability resolver by calling it with a synthetic context.
|
|
29
|
+
// The resolver must handle undefined request/response gracefully.
|
|
31
30
|
const resolver = configuration.getAbilityResolver?.();
|
|
32
31
|
if (typeof resolver === "function") {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return ability.resources;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
// Resolver requires request context (e.g. reads request.path()) which is
|
|
41
|
-
// unavailable during initialization. Use configuration.setAbilityResources()
|
|
42
|
-
// or backendProjects.frontendModels for explicit registration instead.
|
|
32
|
+
const ability = await resolver({ configuration, params: {}, request: /** @type {any} */ (undefined), response: /** @type {any} */ (undefined) });
|
|
33
|
+
if (ability?.resources && Array.isArray(ability.resources)) {
|
|
34
|
+
return ability.resources;
|
|
43
35
|
}
|
|
44
36
|
}
|
|
45
37
|
return [];
|
|
@@ -88,17 +80,12 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
|
|
|
88
80
|
const modelClasses = configuration.getModelClasses();
|
|
89
81
|
/** @type {Record<string, typeof FrontendModelBaseResource>} */
|
|
90
82
|
let allFrontendModels = {};
|
|
91
|
-
let hasExplicitConfig = false;
|
|
92
83
|
for (const backendProject of configuration.getBackendProjects()) {
|
|
93
|
-
if (backendProject.frontendModels !== undefined || backendProject.frontendModelsRequireContext !== undefined) {
|
|
94
|
-
hasExplicitConfig = true;
|
|
95
|
-
}
|
|
96
84
|
const projectResources = frontendModelResourcesForBackendProject(backendProject);
|
|
97
85
|
allFrontendModels = { ...allFrontendModels, ...projectResources };
|
|
98
86
|
}
|
|
99
|
-
// Auto-discover from ability resources
|
|
100
|
-
|
|
101
|
-
if (!hasExplicitConfig) {
|
|
87
|
+
// Auto-discover from ability resources when backend projects didn't provide any
|
|
88
|
+
if (Object.keys(allFrontendModels).length === 0) {
|
|
102
89
|
const abilityResources = await resolveAbilityResourcesList(configuration);
|
|
103
90
|
allFrontendModels = frontendModelResourcesFromAbilityResourcesList(abilityResources);
|
|
104
91
|
}
|
|
@@ -146,4 +133,4 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
|
|
|
146
133
|
});
|
|
147
134
|
}
|
|
148
135
|
}
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXB1Ymxpc2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3dlYnNvY2tldC1wdWJsaXNoZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHlCQUF5QixNQUFNLG1DQUFtQyxDQUFBO0FBQ3pFLE9BQU8seUJBQXlCLE1BQU0sNkNBQTZDLENBQUE7QUFDbkYsT0FBTyxFQUFDLHVDQUF1QyxFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFFaEYsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBRTFEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxTQUFTO0lBQ3pELE9BQU8sbUJBQW1CLFNBQVMsRUFBRSxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNIOzs7R0FHRztBQUNILEtBQUssVUFBVSwyQkFBMkIsQ0FBQyxhQUFhO0lBQ3RELCtDQUErQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtJQUVwRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxPQUFPLFFBQVEsQ0FBQTtJQUVwRCwwRUFBMEU7SUFDMUUseUVBQXlFO0lBQ3pFLHlFQUF5RTtJQUN6RSxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFBO0lBRXJELElBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsRUFBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFD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ZSBmcm9tIFwiLi4vYXV0aG9yaXphdGlvbi9iYXNlLXJlc291cmNlLmpzXCJcbmltcG9ydCBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCJcbmltcG9ydCB7ZnJvbnRlbmRNb2RlbFJlc291cmNlc0ZvckJhY2tlbmRQcm9qZWN0fSBmcm9tIFwiLi9yZXNvdXJjZS1kZWZpbml0aW9uLmpzXCJcblxuY29uc3QgcmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zQnlNb2RlbENsYXNzID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICogQHJldHVybnMge3N0cmluZ30gLSBCcm9hZGNhc3QgY2hhbm5lbCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEJyb2FkY2FzdENoYW5uZWxOYW1lKG1vZGVsTmFtZSkge1xuICByZXR1cm4gYGZyb250ZW5kLW1vZGVsczoke21vZGVsTmFtZX1gXG59XG5cbi8qKlxuICogQnVpbGRzIGEgZnJvbnRlbmQgbW9kZWxzIG1hcCBmcm9tIHRoZSBjb25maWd1cmF0aW9uJ3MgYWJpbGl0eSByZXNvdXJjZXMuXG4gKiBFYWNoIHJlc291cmNlIGNsYXNzIHdpdGggYSBzdGF0aWMgTW9kZWxDbGFzcyBwcm9wZXJ0eSBpcyBrZXllZCBieSBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHR5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlPn0gLSBSZXNvdXJjZSBkZWZpbml0aW9ucyBrZXllZCBieSBtb2RlbCBuYW1lLlxuICovXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuQWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlW10+fSAtIFJlc29sdmVkIGFiaWxpdHkgcmVzb3VyY2VzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQWJpbGl0eVJlc291cmNlc0xpc3QoY29uZmlndXJhdGlvbikge1xuICAvLyBGaXJzdCBjaGVjayBleHBsaWNpdGx5IHNldCBhYmlsaXR5IHJlc291cmNlc1xuICBjb25zdCBleHBsaWNpdCA9IGNvbmZpZ3VyYXRpb24uZ2V0QWJpbGl0eVJlc291cmNlcygpXG5cbiAgaWYgKGV4cGxpY2l0ICYmIGV4cGxpY2l0Lmxlbmd0aCA+IDApIHJldHVybiBleHBsaWNpdFxuXG4gIC8vIFRyeSB0byByZXNvbHZlIGZyb20gdGhlIGFiaWxpdHkgcmVzb2x2ZXIgYnkgY2FsbGluZyBpdCB3aXRoIGEgc3ludGhldGljXG4gIC8vIGNvbnRleHQuIFRoZSByZXNvbHZlciBtYXkgYWNjZXNzIHJlcXVlc3QvcmVzcG9uc2UgbWV0aG9kcyB3aGljaCBhcmVuJ3RcbiAgLy8gYXZhaWxhYmxlIGR1cmluZyBpbml0aWFsaXphdGlvbiDigJQgY2F0Y2ggYW5kIHJldHVybiBlbXB0eSBpbiB0aGF0IGNhc2UuXG4gIGNvbnN0IHJlc29sdmVyID0gY29uZmlndXJhdGlvbi5nZXRBYmlsaXR5UmVzb2x2ZXI/LigpXG5cbiAgaWYgKHR5cGVvZiByZXNvbHZlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFiaWxpdHkgPSBhd2FpdCByZXNvbHZlcih7Y29uZmlndXJhdGlvbiwgcGFyYW1zOiB7fSwgcmVxdWVzdDogLyoqIEB0eXBlIHthbnl9ICovICh1bmRlZmluZWQpLCByZXNwb25zZTogLyoqIEB0eXBlIHthbnl9ICovICh1bmRlZmluZWQpfSlcblxuICAgICAgaWYgKGFiaWxpdHk/LnJlc291cmNlcyAmJiBBcnJheS5pc0FycmF5KGFiaWxpdHkucmVzb3VyY2VzKSkge1xuICAgICAgICByZXR1cm4gYWJpbGl0eS5yZXNvdXJjZXNcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFJlc29sdmVyIHJlcXVpcmVzIHJlcXVlc3QgY29udGV4dCAoZS5nLiByZWFkcyByZXF1ZXN0LnBhdGgoKSkgd2hpY2ggaXNcbiAgICAgIC8vIHVuYXZhaWxhYmxlIGR1cmluZyBpbml0aWFsaXphdGlvbi4gVXNlIGNvbmZpZ3VyYXRpb24uc2V0QWJpbGl0eVJlc291cmNlcygpXG4gICAgICAvLyBvciBiYWNrZW5kUHJvamVjdHMuZnJvbnRlbmRNb2RlbHMgZm9yIGV4cGxpY2l0IHJlZ2lzdHJhdGlvbiBpbnN0ZWFkLlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5BYmlsaXR5UmVzb3VyY2VDbGFzc1R5cGVbXX0gYWJpbGl0eVJlc291cmNlcyAtIEFiaWxpdHkgcmVzb3VyY2UgY2xhc3Nlcy5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB0eXBlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZT59IC0gUmVzb3VyY2UgZGVmaW5pdGlvbnMga2V5ZWQgYnkgbW9kZWwgbmFtZS5cbiAqL1xuZnVuY3Rpb24gZnJvbnRlbmRNb2RlbFJlc291cmNlc0Zyb21BYmlsaXR5UmVzb3VyY2VzTGlzdChhYmlsaXR5UmVzb3VyY2VzKSB7XG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2U+fSAqL1xuICBjb25zdCByZXNvdXJjZXMgPSB7fVxuXG4gIGlmICghYWJpbGl0eVJlc291cmNlcyB8fCBhYmlsaXR5UmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc291cmNlc1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXR5UmVzb3VyY2VzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYWJpbGl0eSByZXNvdXJjZXMgdG8gYmUgYW4gYXJyYXkgYnV0IGdvdDogJHt0eXBlb2YgYWJpbGl0eVJlc291cmNlc31gKVxuICB9XG5cbiAgZm9yIChjb25zdCByZXNvdXJjZUNsYXNzIG9mIGFiaWxpdHlSZXNvdXJjZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlc291cmNlQ2xhc3MgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhYmlsaXR5IHJlc291cmNlIHRvIGJlIGEgY2xhc3MgYnV0IGdvdDogJHt0eXBlb2YgcmVzb3VyY2VDbGFzc31gKVxuICAgIH1cblxuICAgIGlmIChyZXNvdXJjZUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlfSAqLyAocmVzb3VyY2VDbGFzcykuTW9kZWxDbGFzc1xuXG4gICAgICBpZiAoIW1vZGVsQ2xhc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXNvdXJjZSBjbGFzcyAke3Jlc291cmNlQ2xhc3MubmFtZX0gaXMgbWlzc2luZyBhIHN0YXRpYyBNb2RlbENsYXNzIHByb3BlcnR5YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgbW9kZWxOYW1lID0gbW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUoKVxuXG4gICAgICBpZiAoIW1vZGVsTmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIGNsYXNzICR7bW9kZWxDbGFzcy5uYW1lfSByZXR1cm5lZCBlbXB0eSBtb2RlbCBuYW1lIGZyb20gZ2V0TW9kZWxOYW1lKClgKVxuICAgICAgfVxuXG4gICAgICByZXNvdXJjZXNbbW9kZWxOYW1lXSA9IC8qKiBAdHlwZSB7dHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2V9ICovIChyZXNvdXJjZUNsYXNzKVxuICAgIH0gZWxzZSBpZiAocmVzb3VyY2VDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBBdXRob3JpemF0aW9uQmFzZVJlc291cmNlKSB7XG4gICAgICAvLyBBdXRob3JpemF0aW9uLW9ubHkgcmVzb3VyY2Ug4oCUIHZhbGlkIGJ1dCBub3QgcmVsZXZhbnQgZm9yIFdlYlNvY2tldCBwdWJsaXNoaW5nXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBhYmlsaXR5IHJlc291cmNlIGNsYXNzOiAke3Jlc291cmNlQ2xhc3MubmFtZX0uIEV4cGVjdGVkIEF1dGhvcml6YXRpb25CYXNlUmVzb3VyY2Ugb3IgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSBzdWJjbGFzcy5gKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXNvdXJjZXNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUZyb250ZW5kTW9kZWxXZWJzb2NrZXRQdWJsaXNoZXJzUmVnaXN0ZXJlZChjb25maWd1cmF0aW9uKSB7XG4gIGNvbnN0IG1vZGVsQ2xhc3NlcyA9IGNvbmZpZ3VyYXRpb24uZ2V0TW9kZWxDbGFzc2VzKClcblxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHR5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlPn0gKi9cbiAgbGV0IGFsbEZyb250ZW5kTW9kZWxzID0ge31cbiAgbGV0IGhhc0V4cGxpY2l0Q29uZmlnID0gZmFsc2VcblxuICBmb3IgKGNvbnN0IGJhY2tlbmRQcm9qZWN0IG9mIGNvbmZpZ3VyYXRpb24uZ2V0QmFja2VuZFByb2plY3RzKCkpIHtcbiAgICBpZiAoYmFja2VuZFByb2plY3QuZnJvbnRlbmRNb2RlbHMgIT09IHVuZGVmaW5lZCB8fCBiYWNrZW5kUHJvamVjdC5mcm9udGVuZE1vZGVsc1JlcXVpcmVDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0V4cGxpY2l0Q29uZmlnID0gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHByb2plY3RSZXNvdXJjZXMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG5cbiAgICBhbGxGcm9udGVuZE1vZGVscyA9IHsuLi5hbGxGcm9udGVuZE1vZGVscywgLi4ucHJvamVjdFJlc291cmNlc31cbiAgfVxuXG4gIC8vIEF1dG8tZGlzY292ZXIgZnJvbSBhYmlsaXR5IHJlc291cmNlcyBvbmx5IHdoZW4gbm8gYmFja2VuZCBwcm9qZWN0XG4gIC8vIGV4cGxpY2l0bHkgZGVmaW5lcyBmcm9udGVuZE1vZGVscyBvciBmcm9udGVuZE1vZGVsc1JlcXVpcmVDb250ZXh0XG4gIGlmICghaGFzRXhwbGljaXRDb25maWcpIHtcbiAgICBjb25zdCBhYmlsaXR5UmVzb3VyY2VzID0gYXdhaXQgcmVzb2x2ZUFiaWxpdHlSZXNvdXJjZXNMaXN0KGNvbmZpZ3VyYXRpb24pXG5cbiAgICBhbGxGcm9udGVuZE1vZGVscyA9IGZyb250ZW5kTW9kZWxSZXNvdXJjZXNGcm9tQWJpbGl0eVJlc291cmNlc0xpc3QoYWJpbGl0eVJlc291cmNlcylcbiAgfVxuXG4gIGZvciAoY29uc3QgbW9kZWxOYW1lIG9mIE9iamVjdC5rZXlzKGFsbEZyb250ZW5kTW9kZWxzKSkge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzZXNbbW9kZWxOYW1lXVxuXG4gICAgaWYgKCFtb2RlbENsYXNzKSBjb250aW51ZVxuXG4gICAgbGV0IHJlZ2lzdGVyZWRDb25maWd1cmF0aW9ucyA9IHJlZ2lzdGVyZWRDb25maWd1cmF0aW9uc0J5TW9kZWxDbGFzcy5nZXQobW9kZWxDbGFzcylcblxuICAgIGlmICghcmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zKSB7XG4gICAgICByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMgPSBuZXcgV2Vha1NldCgpXG4gICAgICByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnNCeU1vZGVsQ2xhc3Muc2V0KG1vZGVsQ2xhc3MsIHJlZ2lzdGVyZWRDb25maWd1cmF0aW9ucylcbiAgICB9XG5cbiAgICBpZiAocmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zLmhhcyhjb25maWd1cmF0aW9uKSkgY29udGludWVcblxuICAgIHJlZ2lzdGVyZWRDb25maWd1cmF0aW9ucy5hZGQoY29uZmlndXJhdGlvbilcblxuICAgIG1vZGVsQ2xhc3MuYmVmb3JlQ3JlYXRlKChtb2RlbCkgPT4ge1xuICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCAmIHtfX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb24/OiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIn19ICovIChtb2RlbCkuX19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uID0gXCJjcmVhdGVcIlxuICAgIH0pXG5cbiAgICBtb2RlbENsYXNzLmJlZm9yZVVwZGF0ZSgobW9kZWwpID0+IHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgJiB7X19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uPzogXCJjcmVhdGVcIiB8IFwidXBkYXRlXCJ9fSAqLyAobW9kZWwpLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbiA9IFwidXBkYXRlXCJcbiAgICB9KVxuXG4gICAgbW9kZWxDbGFzcy5hZnRlclNhdmUoKG1vZGVsKSA9PiB7XG4gICAgICBjb25zdCBtb2RlbFdpdGhXZWJzb2NrZXRBY3Rpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0ICYge19fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbj86IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwifX0gKi8gKG1vZGVsKVxuICAgICAgY29uc3QgYWN0aW9uID0gbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvblxuXG4gICAgICBpZiAoYWN0aW9uICE9PSBcImNyZWF0ZVwiICYmIGFjdGlvbiAhPT0gXCJ1cGRhdGVcIikgcmV0dXJuXG5cbiAgICAgIHZvaWQgbW9kZWwuZ2V0TW9kZWxDbGFzcygpLmNvbm5lY3Rpb24oKS5hZnRlckNvbW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0V2Vic29ja2V0RXZlbnRzKCk/LnB1Ymxpc2goZnJvbnRlbmRNb2RlbEJyb2FkY2FzdENoYW5uZWxOYW1lKG1vZGVsTmFtZSksIHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgaWQ6IG1vZGVsLmlkKCksXG4gICAgICAgICAgcmVjb3JkOiBtb2RlbC5hdHRyaWJ1dGVzKCksXG4gICAgICAgICAgbW9kZWxOYW1lXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgZGVsZXRlIG1vZGVsV2l0aFdlYnNvY2tldEFjdGlvbi5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb25cbiAgICB9KVxuXG4gICAgbW9kZWxDbGFzcy5hZnRlckRlc3Ryb3koKG1vZGVsKSA9PiB7XG4gICAgICB2b2lkIG1vZGVsLmdldE1vZGVsQ2xhc3MoKS5jb25uZWN0aW9uKCkuYWZ0ZXJDb21taXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25maWd1cmF0aW9uLmdldFdlYnNvY2tldEV2ZW50cygpPy5wdWJsaXNoKGZyb250ZW5kTW9kZWxCcm9hZGNhc3RDaGFubmVsTmFtZShtb2RlbE5hbWUpLCB7XG4gICAgICAgICAgYWN0aW9uOiBcImRlc3Ryb3lcIixcbiAgICAgICAgICBpZDogbW9kZWwuaWQoKSxcbiAgICAgICAgICBtb2RlbE5hbWVcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXB1Ymxpc2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3dlYnNvY2tldC1wdWJsaXNoZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHlCQUF5QixNQUFNLG1DQUFtQyxDQUFBO0FBQ3pFLE9BQU8seUJBQXlCLE1BQU0sNkNBQTZDLENBQUE7QUFDbkYsT0FBTyxFQUFDLHVDQUF1QyxFQUFDLE1BQU0sMEJBQTBCLENBQUE7QUFFaEYsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBRTFEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxTQUFTO0lBQ3pELE9BQU8sbUJBQW1CLFNBQVMsRUFBRSxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNIOzs7R0FHRztBQUNILEtBQUssVUFBVSwyQkFBMkIsQ0FBQyxhQUFhO0lBQ3RELCtDQUErQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtJQUVwRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxPQUFPLFFBQVEsQ0FBQTtJQUVwRCw0RUFBNEU7SUFDNUUsa0VBQWtFO0lBQ2xFLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUE7SUFFckQsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxFQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFDLENBQUMsQ0FBQTtRQUU5SSxJQUFJLE9BQU8sRUFBRSxT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SyxJQUFJLEVBQUU7Z0JBQzdELGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDeEYsTUFBTTtvQkFDTixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtvQkFDZCxNQUFNLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRTtvQkFDMUIsU0FBUztpQkFDVixDQUFDLENBQUE7WUFDSixDQUFDLENBQUMsQ0FBQTtZQUNGLE9BQU8sd0JBQXdCLENBQUMsOEJBQThCLENBQUE7UUFDaEUsQ0FBQyxDQUFDLENBQUE7UUFFRixVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDaEMsS0FBSyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUM3RCxhQUFhLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLENBQUMsaUNBQWlDLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ3hGLE1BQU0sRUFBRSxTQUFTO29CQUNqQixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtvQkFDZCxTQUFTO2lCQUNWLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQXV0aG9yaXphdGlvbkJhc2VSZXNvdXJjZSBmcm9tIFwiLi4vYXV0aG9yaXphdGlvbi9iYXNlLXJlc291cmNlLmpzXCJcbmltcG9ydCBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCJcbmltcG9ydCB7ZnJvbnRlbmRNb2RlbFJlc291cmNlc0ZvckJhY2tlbmRQcm9qZWN0fSBmcm9tIFwiLi9yZXNvdXJjZS1kZWZpbml0aW9uLmpzXCJcblxuY29uc3QgcmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zQnlNb2RlbENsYXNzID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgLSBNb2RlbCBjbGFzcyBuYW1lLlxuICogQHJldHVybnMge3N0cmluZ30gLSBCcm9hZGNhc3QgY2hhbm5lbCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbnRlbmRNb2RlbEJyb2FkY2FzdENoYW5uZWxOYW1lKG1vZGVsTmFtZSkge1xuICByZXR1cm4gYGZyb250ZW5kLW1vZGVsczoke21vZGVsTmFtZX1gXG59XG5cbi8qKlxuICogQnVpbGRzIGEgZnJvbnRlbmQgbW9kZWxzIG1hcCBmcm9tIHRoZSBjb25maWd1cmF0aW9uJ3MgYWJpbGl0eSByZXNvdXJjZXMuXG4gKiBFYWNoIHJlc291cmNlIGNsYXNzIHdpdGggYSBzdGF0aWMgTW9kZWxDbGFzcyBwcm9wZXJ0eSBpcyBrZXllZCBieSBtb2RlbCBuYW1lLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHR5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlPn0gLSBSZXNvdXJjZSBkZWZpbml0aW9ucyBrZXllZCBieSBtb2RlbCBuYW1lLlxuICovXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuQWJpbGl0eVJlc291cmNlQ2xhc3NUeXBlW10+fSAtIFJlc29sdmVkIGFiaWxpdHkgcmVzb3VyY2VzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQWJpbGl0eVJlc291cmNlc0xpc3QoY29uZmlndXJhdGlvbikge1xuICAvLyBGaXJzdCBjaGVjayBleHBsaWNpdGx5IHNldCBhYmlsaXR5IHJlc291cmNlc1xuICBjb25zdCBleHBsaWNpdCA9IGNvbmZpZ3VyYXRpb24uZ2V0QWJpbGl0eVJlc291cmNlcygpXG5cbiAgaWYgKGV4cGxpY2l0ICYmIGV4cGxpY2l0Lmxlbmd0aCA+IDApIHJldHVybiBleHBsaWNpdFxuXG4gIC8vIFJlc29sdmUgZnJvbSB0aGUgYWJpbGl0eSByZXNvbHZlciBieSBjYWxsaW5nIGl0IHdpdGggYSBzeW50aGV0aWMgY29udGV4dC5cbiAgLy8gVGhlIHJlc29sdmVyIG11c3QgaGFuZGxlIHVuZGVmaW5lZCByZXF1ZXN0L3Jlc3BvbnNlIGdyYWNlZnVsbHkuXG4gIGNvbnN0IHJlc29sdmVyID0gY29uZmlndXJhdGlvbi5nZXRBYmlsaXR5UmVzb2x2ZXI/LigpXG5cbiAgaWYgKHR5cGVvZiByZXNvbHZlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc3QgYWJpbGl0eSA9IGF3YWl0IHJlc29sdmVyKHtjb25maWd1cmF0aW9uLCBwYXJhbXM6IHt9LCByZXF1ZXN0OiAvKiogQHR5cGUge2FueX0gKi8gKHVuZGVmaW5lZCksIHJlc3BvbnNlOiAvKiogQHR5cGUge2FueX0gKi8gKHVuZGVmaW5lZCl9KVxuXG4gICAgaWYgKGFiaWxpdHk/LnJlc291cmNlcyAmJiBBcnJheS5pc0FycmF5KGFiaWxpdHkucmVzb3VyY2VzKSkge1xuICAgICAgcmV0dXJuIGFiaWxpdHkucmVzb3VyY2VzXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtdXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkFiaWxpdHlSZXNvdXJjZUNsYXNzVHlwZVtdfSBhYmlsaXR5UmVzb3VyY2VzIC0gQWJpbGl0eSByZXNvdXJjZSBjbGFzc2VzLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHR5cGVvZiBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlPn0gLSBSZXNvdXJjZSBkZWZpbml0aW9ucyBrZXllZCBieSBtb2RlbCBuYW1lLlxuICovXG5mdW5jdGlvbiBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRnJvbUFiaWxpdHlSZXNvdXJjZXNMaXN0KGFiaWxpdHlSZXNvdXJjZXMpIHtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB0eXBlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZT59ICovXG4gIGNvbnN0IHJlc291cmNlcyA9IHt9XG5cbiAgaWYgKCFhYmlsaXR5UmVzb3VyY2VzIHx8IGFiaWxpdHlSZXNvdXJjZXMubGVuZ3RoID09PSAwKSByZXR1cm4gcmVzb3VyY2VzXG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFiaWxpdHlSZXNvdXJjZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhYmlsaXR5IHJlc291cmNlcyB0byBiZSBhbiBhcnJheSBidXQgZ290OiAke3R5cGVvZiBhYmlsaXR5UmVzb3VyY2VzfWApXG4gIH1cblxuICBmb3IgKGNvbnN0IHJlc291cmNlQ2xhc3Mgb2YgYWJpbGl0eVJlc291cmNlcykge1xuICAgIGlmICh0eXBlb2YgcmVzb3VyY2VDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFiaWxpdHkgcmVzb3VyY2UgdG8gYmUgYSBjbGFzcyBidXQgZ290OiAke3R5cGVvZiByZXNvdXJjZUNsYXNzfWApXG4gICAgfVxuXG4gICAgaWYgKHJlc291cmNlQ2xhc3MucHJvdG90eXBlIGluc3RhbmNlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSkge1xuICAgICAgY29uc3QgbW9kZWxDbGFzcyA9IC8qKiBAdHlwZSB7dHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2V9ICovIChyZXNvdXJjZUNsYXNzKS5Nb2RlbENsYXNzXG5cbiAgICAgIGlmICghbW9kZWxDbGFzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlc291cmNlIGNsYXNzICR7cmVzb3VyY2VDbGFzcy5uYW1lfSBpcyBtaXNzaW5nIGEgc3RhdGljIE1vZGVsQ2xhc3MgcHJvcGVydHlgKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtb2RlbE5hbWUgPSBtb2RlbENsYXNzLmdldE1vZGVsTmFtZSgpXG5cbiAgICAgIGlmICghbW9kZWxOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgY2xhc3MgJHttb2RlbENsYXNzLm5hbWV9IHJldHVybmVkIGVtcHR5IG1vZGVsIG5hbWUgZnJvbSBnZXRNb2RlbE5hbWUoKWApXG4gICAgICB9XG5cbiAgICAgIHJlc291cmNlc1ttb2RlbE5hbWVdID0gLyoqIEB0eXBlIHt0eXBlb2YgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZX0gKi8gKHJlc291cmNlQ2xhc3MpXG4gICAgfSBlbHNlIGlmIChyZXNvdXJjZUNsYXNzLnByb3RvdHlwZSBpbnN0YW5jZW9mIEF1dGhvcml6YXRpb25CYXNlUmVzb3VyY2UpIHtcbiAgICAgIC8vIEF1dGhvcml6YXRpb24tb25seSByZXNvdXJjZSDigJQgdmFsaWQgYnV0IG5vdCByZWxldmFudCBmb3IgV2ViU29ja2V0IHB1Ymxpc2hpbmdcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGFiaWxpdHkgcmVzb3VyY2UgY2xhc3M6ICR7cmVzb3VyY2VDbGFzcy5uYW1lfS4gRXhwZWN0ZWQgQXV0aG9yaXphdGlvbkJhc2VSZXNvdXJjZSBvciBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIHN1YmNsYXNzLmApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc291cmNlc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRnJvbnRlbmRNb2RlbFdlYnNvY2tldFB1Ymxpc2hlcnNSZWdpc3RlcmVkKGNvbmZpZ3VyYXRpb24pIHtcbiAgY29uc3QgbW9kZWxDbGFzc2VzID0gY29uZmlndXJhdGlvbi5nZXRNb2RlbENsYXNzZXMoKVxuXG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2U+fSAqL1xuICBsZXQgYWxsRnJvbnRlbmRNb2RlbHMgPSB7fVxuXG4gIGZvciAoY29uc3QgYmFja2VuZFByb2plY3Qgb2YgY29uZmlndXJhdGlvbi5nZXRCYWNrZW5kUHJvamVjdHMoKSkge1xuICAgIGNvbnN0IHByb2plY3RSZXNvdXJjZXMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRm9yQmFja2VuZFByb2plY3QoYmFja2VuZFByb2plY3QpXG5cbiAgICBhbGxGcm9udGVuZE1vZGVscyA9IHsuLi5hbGxGcm9udGVuZE1vZGVscywgLi4ucHJvamVjdFJlc291cmNlc31cbiAgfVxuXG4gIC8vIEF1dG8tZGlzY292ZXIgZnJvbSBhYmlsaXR5IHJlc291cmNlcyB3aGVuIGJhY2tlbmQgcHJvamVjdHMgZGlkbid0IHByb3ZpZGUgYW55XG4gIGlmIChPYmplY3Qua2V5cyhhbGxGcm9udGVuZE1vZGVscykubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3QgYWJpbGl0eVJlc291cmNlcyA9IGF3YWl0IHJlc29sdmVBYmlsaXR5UmVzb3VyY2VzTGlzdChjb25maWd1cmF0aW9uKVxuXG4gICAgYWxsRnJvbnRlbmRNb2RlbHMgPSBmcm9udGVuZE1vZGVsUmVzb3VyY2VzRnJvbUFiaWxpdHlSZXNvdXJjZXNMaXN0KGFiaWxpdHlSZXNvdXJjZXMpXG4gIH1cblxuICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBvZiBPYmplY3Qua2V5cyhhbGxGcm9udGVuZE1vZGVscykpIHtcbiAgICBjb25zdCBtb2RlbENsYXNzID0gbW9kZWxDbGFzc2VzW21vZGVsTmFtZV1cblxuICAgIGlmICghbW9kZWxDbGFzcykgY29udGludWVcblxuICAgIGxldCByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMgPSByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnNCeU1vZGVsQ2xhc3MuZ2V0KG1vZGVsQ2xhc3MpXG5cbiAgICBpZiAoIXJlZ2lzdGVyZWRDb25maWd1cmF0aW9ucykge1xuICAgICAgcmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zID0gbmV3IFdlYWtTZXQoKVxuICAgICAgcmVnaXN0ZXJlZENvbmZpZ3VyYXRpb25zQnlNb2RlbENsYXNzLnNldChtb2RlbENsYXNzLCByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMpXG4gICAgfVxuXG4gICAgaWYgKHJlZ2lzdGVyZWRDb25maWd1cmF0aW9ucy5oYXMoY29uZmlndXJhdGlvbikpIGNvbnRpbnVlXG5cbiAgICByZWdpc3RlcmVkQ29uZmlndXJhdGlvbnMuYWRkKGNvbmZpZ3VyYXRpb24pXG5cbiAgICBtb2RlbENsYXNzLmJlZm9yZUNyZWF0ZSgobW9kZWwpID0+IHtcbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgJiB7X19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uPzogXCJjcmVhdGVcIiB8IFwidXBkYXRlXCJ9fSAqLyAobW9kZWwpLl9fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbiA9IFwiY3JlYXRlXCJcbiAgICB9KVxuXG4gICAgbW9kZWxDbGFzcy5iZWZvcmVVcGRhdGUoKG1vZGVsKSA9PiB7XG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0ICYge19fZnJvbnRlbmRNb2RlbFdlYnNvY2tldEFjdGlvbj86IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwifX0gKi8gKG1vZGVsKS5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb24gPSBcInVwZGF0ZVwiXG4gICAgfSlcblxuICAgIG1vZGVsQ2xhc3MuYWZ0ZXJTYXZlKChtb2RlbCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxXaXRoV2Vic29ja2V0QWN0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCAmIHtfX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb24/OiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIn19ICovIChtb2RlbClcbiAgICAgIGNvbnN0IGFjdGlvbiA9IG1vZGVsV2l0aFdlYnNvY2tldEFjdGlvbi5fX2Zyb250ZW5kTW9kZWxXZWJzb2NrZXRBY3Rpb25cblxuICAgICAgaWYgKGFjdGlvbiAhPT0gXCJjcmVhdGVcIiAmJiBhY3Rpb24gIT09IFwidXBkYXRlXCIpIHJldHVyblxuXG4gICAgICB2b2lkIG1vZGVsLmdldE1vZGVsQ2xhc3MoKS5jb25uZWN0aW9uKCkuYWZ0ZXJDb21taXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25maWd1cmF0aW9uLmdldFdlYnNvY2tldEV2ZW50cygpPy5wdWJsaXNoKGZyb250ZW5kTW9kZWxCcm9hZGNhc3RDaGFubmVsTmFtZShtb2RlbE5hbWUpLCB7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGlkOiBtb2RlbC5pZCgpLFxuICAgICAgICAgIHJlY29yZDogbW9kZWwuYXR0cmlidXRlcygpLFxuICAgICAgICAgIG1vZGVsTmFtZVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIGRlbGV0ZSBtb2RlbFdpdGhXZWJzb2NrZXRBY3Rpb24uX19mcm9udGVuZE1vZGVsV2Vic29ja2V0QWN0aW9uXG4gICAgfSlcblxuICAgIG1vZGVsQ2xhc3MuYWZ0ZXJEZXN0cm95KChtb2RlbCkgPT4ge1xuICAgICAgdm9pZCBtb2RlbC5nZXRNb2RlbENsYXNzKCkuY29ubmVjdGlvbigpLmFmdGVyQ29tbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uZmlndXJhdGlvbi5nZXRXZWJzb2NrZXRFdmVudHMoKT8ucHVibGlzaChmcm9udGVuZE1vZGVsQnJvYWRjYXN0Q2hhbm5lbE5hbWUobW9kZWxOYW1lKSwge1xuICAgICAgICAgIGFjdGlvbjogXCJkZXN0cm95XCIsXG4gICAgICAgICAgaWQ6IG1vZGVsLmlkKCksXG4gICAgICAgICAgbW9kZWxOYW1lXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
|