@workflow/builders 5.0.0-beta.6 → 5.0.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/apply-swc-transform.js +1 -1
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +2 -1
- package/dist/build-queue.js +1 -1
- package/dist/config-helpers.js +1 -1
- package/dist/constants.js +1 -1
- package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
- package/dist/discover-entries-esbuild-plugin.js +3 -2
- package/dist/discover-entries-esbuild-plugin.test.js +1 -1
- package/dist/esbuild-tsconfig.js +1 -1
- package/dist/esbuild-tsconfig.test.js +1 -1
- package/dist/external-package-warning.test.js +1 -1
- package/dist/get-input-files.test.js +1 -1
- package/dist/index.js +1 -1
- package/dist/module-specifier.js +1 -1
- package/dist/module-specifier.test.js +1 -1
- package/dist/node-module-esbuild-plugin.js +1 -1
- package/dist/node-module-esbuild-plugin.test.js +1 -1
- package/dist/pseudo-package-esbuild-plugin.js +1 -1
- package/dist/pseudo-package-esbuild-plugin.test.js +1 -1
- package/dist/request-converter.js +1 -1
- package/dist/resolve-sourcemap.test.js +1 -1
- package/dist/serde-checker.js +1 -1
- package/dist/standalone.js +1 -1
- package/dist/swc-esbuild-plugin.js +1 -1
- package/dist/swc-esbuild-plugin.test.js +1 -1
- package/dist/transform-utils.js +1 -1
- package/dist/transform-utils.test.js +1 -1
- package/dist/types.js +1 -1
- package/dist/vercel-build-output-api.d.ts.map +1 -1
- package/dist/vercel-build-output-api.js +4 -1
- package/dist/workflow-alias.js +1 -1
- package/dist/workflow-alias.test.js +1 -1
- package/dist/workflows-extractor.js +1 -1
- package/package.json +4 -4
- package/dist/apply-swc-transform.js.map +0 -1
- package/dist/base-builder.js.map +0 -1
- package/dist/build-queue.js.map +0 -1
- package/dist/config-helpers.js.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/discover-entries-esbuild-plugin.js.map +0 -1
- package/dist/discover-entries-esbuild-plugin.test.js.map +0 -1
- package/dist/esbuild-tsconfig.js.map +0 -1
- package/dist/esbuild-tsconfig.test.js.map +0 -1
- package/dist/external-package-warning.test.js.map +0 -1
- package/dist/get-input-files.test.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/module-specifier.js.map +0 -1
- package/dist/module-specifier.test.js.map +0 -1
- package/dist/node-module-esbuild-plugin.js.map +0 -1
- package/dist/node-module-esbuild-plugin.test.js.map +0 -1
- package/dist/pseudo-package-esbuild-plugin.js.map +0 -1
- package/dist/pseudo-package-esbuild-plugin.test.js.map +0 -1
- package/dist/request-converter.js.map +0 -1
- package/dist/resolve-sourcemap.test.js.map +0 -1
- package/dist/serde-checker.js.map +0 -1
- package/dist/standalone.js.map +0 -1
- package/dist/swc-esbuild-plugin.js.map +0 -1
- package/dist/swc-esbuild-plugin.test.js.map +0 -1
- package/dist/transform-utils.js.map +0 -1
- package/dist/transform-utils.test.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/vercel-build-output-api.js.map +0 -1
- package/dist/workflow-alias.js.map +0 -1
- package/dist/workflow-alias.test.js.map +0 -1
- package/dist/workflows-extractor.js.map +0 -1
|
@@ -1473,4 +1473,4 @@ function analyzeTransitiveCall(funcName, stepDeclarations, context, functionMap,
|
|
|
1473
1473
|
}
|
|
1474
1474
|
return { nodes, edges, entryNodeIds, exitNodeIds };
|
|
1475
1475
|
}
|
|
1476
|
-
//# sourceMappingURL=workflows-extractor.js.map
|
|
1476
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3dzLWV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93b3JrZmxvd3MtZXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLCtFQUErRTtBQUMvRSxZQUFZO0FBQ1osK0VBQStFO0FBRS9FOzs7O0dBSUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsWUFBb0I7SUFDL0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUNwRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFnQjtJQUN4QyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLFlBQVk7WUFDZixPQUFRLElBQW1CLENBQUMsS0FBSyxDQUFDO1FBRXBDLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sTUFBTSxDQUFFLElBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQyxLQUFLLGdCQUFnQjtZQUNuQixPQUFPLE1BQU0sQ0FBRSxJQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckMsS0FBSyxlQUFlO1lBQ2xCLE9BQU8sSUFBSyxJQUFZLENBQUMsS0FBSyxHQUFHLENBQUM7UUFFcEMsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7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QUFDO0lBQ0gsQ0FBQztZQUFTLENBQUM7UUFDVCxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24sXG4gIEJsb2NrU3RhdGVtZW50LFxuICBDYWxsRXhwcmVzc2lvbixcbiAgRXhwcmVzc2lvbixcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgRnVuY3Rpb25FeHByZXNzaW9uLFxuICBJZGVudGlmaWVyLFxuICBNZW1iZXJFeHByZXNzaW9uLFxuICBQcm9ncmFtLFxuICBTdGF0ZW1lbnQsXG4gIFZhcmlhYmxlRGVjbGFyYXRpb24sXG59IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgeyBwYXJzZVN5bmMgfSBmcm9tICdAc3djL2NvcmUnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb25zdGFudHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBXb3JrZmxvdyBwcmltaXRpdmVzIHRoYXQgc2hvdWxkIGJlIHNob3duIGFzIG5vZGVzIGluIHRoZSBncmFwaC5cbiAqIFRoZXNlIGFyZSBidWlsdC1pbiB3b3JrZmxvdyBmdW5jdGlvbnMgdGhhdCByZXByZXNlbnQgbWVhbmluZ2Z1bFxuICogcGF1c2VzIG9yIHdhaXQgcG9pbnRzIGluIHRoZSB3b3JrZmxvdyBleGVjdXRpb24uXG4gKi9cbmNvbnN0IFdPUktGTE9XX1BSSU1JVElWRVMgPSBuZXcgU2V0KFsnc2xlZXAnLCAnY3JlYXRlSG9vaycsICdjcmVhdGVXZWJob29rJ10pO1xuXG4vKipcbiAqIEV4dHJhY3QgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG5hbWUgZnJvbSBhIHN0ZXBJZC5cbiAqIHN0ZXBJZCBmb3JtYXQ6IFwic3RlcC8vcGF0aC90by9maWxlLnRzLy9mdW5jdGlvbk5hbWVcIlxuICogVGhlIGJ1bmRsZXIgbWF5IHJlbmFtZSBmdW5jdGlvbnMgdG8gYXZvaWQgY29sbGlzaW9ucyAoZS5nLiBhZGQgLT4gYWRkMiksXG4gKiBidXQgdGhlIHN0ZXBJZCBjb250YWlucyB0aGUgb3JpZ2luYWwgVHlwZVNjcmlwdCBmdW5jdGlvbiBuYW1lLlxuICovXG5mdW5jdGlvbiBnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJZDogc3RyaW5nLCBmYWxsYmFja05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gc3RlcElkLnNwbGl0KCcvLycpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMiA/IHBhcnRzWzJdIDogZmFsbGJhY2tOYW1lO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYSByZWFkYWJsZSBjb25kaXRpb24gdGV4dCBmcm9tIGFuIEV4cHJlc3Npb24gQVNUIG5vZGUuXG4gKiBSZWN1cnNpdmVseSBidWlsZHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbmRpdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZGl0aW9uVGV4dChleHByOiBFeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICBjYXNlICdJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiAoZXhwciBhcyBJZGVudGlmaWVyKS52YWx1ZTtcblxuICAgIGNhc2UgJ0Jvb2xlYW5MaXRlcmFsJzpcbiAgICAgIHJldHVybiBTdHJpbmcoKGV4cHIgYXMgYW55KS52YWx1ZSk7XG5cbiAgICBjYXNlICdOdW1lcmljTGl0ZXJhbCc6XG4gICAgICByZXR1cm4gU3RyaW5nKChleHByIGFzIGFueSkudmFsdWUpO1xuXG4gICAgY2FzZSAnU3RyaW5nTGl0ZXJhbCc6XG4gICAgICByZXR1cm4gYFwiJHsoZXhwciBhcyBhbnkpLnZhbHVlfVwiYDtcblxuICAgIGNhc2UgJ0JpbmFyeUV4cHJlc3Npb24nOiB7XG4gICAgICBjb25zdCBiaW4gPSBleHByIGFzIGFueTtcbiAgICAgIGNvbnN0IGxlZnQgPSBnZXRDb25kaXRpb25UZXh0KGJpbi5sZWZ0KTtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gZ2V0Q29uZGl0aW9uVGV4dChiaW4ucmlnaHQpO1xuICAgICAgcmV0dXJuIGAke2xlZnR9ICR7YmluLm9wZXJhdG9yfSAke3JpZ2h0fWA7XG4gICAgfVxuXG4gICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzoge1xuICAgICAgY29uc3QgdW5hcnkgPSBleHByIGFzIGFueTtcbiAgICAgIGNvbnN0IGFyZyA9IGdldENvbmRpdGlvblRleHQodW5hcnkuYXJndW1lbnQpO1xuICAgICAgcmV0dXJuIGAke3VuYXJ5Lm9wZXJhdG9yfSR7YXJnfWA7XG4gICAgfVxuXG4gICAgY2FzZSAnTWVtYmVyRXhwcmVzc2lvbic6IHtcbiAgICAgIGNvbnN0IG1lbWJlciA9IGV4cHIgYXMgTWVtYmVyRXhwcmVzc2lvbjtcbiAgICAgIGNvbnN0IG9iaiA9IGdldENvbmRpdGlvblRleHQobWVtYmVyLm9iamVjdCk7XG4gICAgICBpZiAobWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICByZXR1cm4gYCR7b2JqfS4keyhtZW1iZXIucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWV9YDtcbiAgICAgIH1cbiAgICAgIGlmIChtZW1iZXIucHJvcGVydHkudHlwZSA9PT0gJ0NvbXB1dGVkJykge1xuICAgICAgICBjb25zdCBjb21wdXRlZCA9IChtZW1iZXIucHJvcGVydHkgYXMgYW55KS5leHByZXNzaW9uO1xuICAgICAgICByZXR1cm4gYCR7b2JqfVske2dldENvbmRpdGlvblRleHQoY29tcHV0ZWQpfV1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBjYXNlICdDYWxsRXhwcmVzc2lvbic6IHtcbiAgICAgIGNvbnN0IGNhbGwgPSBleHByIGFzIENhbGxFeHByZXNzaW9uO1xuICAgICAgY29uc3QgY2FsbGVlID0gY2FsbC5jYWxsZWU7XG4gICAgICAvLyBIYW5kbGUgY2FsbGVlIHdoaWNoIGNvdWxkIGJlIEV4cHJlc3Npb24sIFN1cGVyLCBvciBJbXBvcnRcbiAgICAgIGlmIChjYWxsZWUudHlwZSA9PT0gJ1N1cGVyJyB8fCBjYWxsZWUudHlwZSA9PT0gJ0ltcG9ydCcpIHtcbiAgICAgICAgcmV0dXJuIGAke2NhbGxlZS50eXBlLnRvTG93ZXJDYXNlKCl9KClgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAke2dldENvbmRpdGlvblRleHQoY2FsbGVlIGFzIEV4cHJlc3Npb24pfSgpYDtcbiAgICB9XG5cbiAgICBjYXNlICdQYXJlbnRoZXNpc0V4cHJlc3Npb24nOiB7XG4gICAgICBjb25zdCBwYXJlbiA9IGV4cHIgYXMgYW55O1xuICAgICAgcmV0dXJuIGAoJHtnZXRDb25kaXRpb25UZXh0KHBhcmVuLmV4cHJlc3Npb24pfSlgO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ2NvbmRpdGlvbic7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW50ZXJuYWwgVHlwZXMgKHVzZWQgZHVyaW5nIGV4dHJhY3Rpb24gb25seSlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuaW50ZXJmYWNlIEZ1bmN0aW9uSW5mbyB7XG4gIG5hbWU6IHN0cmluZztcbiAgYm9keTogQmxvY2tTdGF0ZW1lbnQgfCBFeHByZXNzaW9uIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgaXNTdGVwOiBib29sZWFuO1xuICBzdGVwSWQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBBbmFseXNpc0NvbnRleHQge1xuICBwYXJhbGxlbENvdW50ZXI6IG51bWJlcjtcbiAgbG9vcENvdW50ZXI6IG51bWJlcjtcbiAgY29uZGl0aW9uYWxDb3VudGVyOiBudW1iZXI7XG4gIG5vZGVDb3VudGVyOiBudW1iZXI7XG4gIGluTG9vcDogc3RyaW5nIHwgbnVsbDtcbiAgaW5Db25kaXRpb25hbDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRyYWNrcyB2YXJpYWJsZXMgYXNzaWduZWQgZnJvbSBjcmVhdGVXZWJob29rKCkgb3IgY3JlYXRlSG9vaygpICovXG4gIHdlYmhvb2tWYXJpYWJsZXM6IFNldDxzdHJpbmc+O1xuICAvKiogVHJhY2tzIGFycmF5IHZhcmlhYmxlcyB0aGF0IGhhdmUgc3RlcCBjYWxscyBwdXNoZWQgaW50byB0aGVtIChmb3IgUHJvbWlzZS5hbGwgcGF0dGVybikgKi9cbiAgcHJvbWlzZUFycmF5czogTWFwPHN0cmluZywgTWFuaWZlc3ROb2RlW10+OyAvLyBhcnJheU5hbWUgLT4gbGlzdCBvZiBub2Rlc1xufVxuXG5pbnRlcmZhY2UgQW5hbHlzaXNSZXN1bHQge1xuICBub2RlczogTWFuaWZlc3ROb2RlW107XG4gIGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXTtcbiAgZW50cnlOb2RlSWRzOiBzdHJpbmdbXTtcbiAgZXhpdE5vZGVJZHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE5vZGUgbWV0YWRhdGEgZm9yIGNvbnRyb2wgZmxvdyBzZW1hbnRpY3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb2RlTWV0YWRhdGEge1xuICBsb29wSWQ/OiBzdHJpbmc7XG4gIGxvb3BJc0F3YWl0PzogYm9vbGVhbjtcbiAgY29uZGl0aW9uYWxJZD86IHN0cmluZztcbiAgY29uZGl0aW9uYWxCcmFuY2g/OiAnVGhlbicgfCAnRWxzZSc7XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgcGFyYWxsZWxNZXRob2Q/OiBzdHJpbmc7XG4gIC8qKiBTdGVwIGlzIHBhc3NlZCBhcyBhIHJlZmVyZW5jZSAoY2FsbGJhY2svdG9vbCkgcmF0aGVyIHRoYW4gZGlyZWN0bHkgY2FsbGVkICovXG4gIGlzU3RlcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKiBDb250ZXh0IHdoZXJlIHRoZSBzdGVwIHJlZmVyZW5jZSB3YXMgZm91bmQgKGUuZy4sIFwidG9vbHMuZ2V0V2VhdGhlci5leGVjdXRlXCIpICovXG4gIHJlZmVyZW5jZUNvbnRleHQ/OiBzdHJpbmc7XG4gIC8qKiBUaGlzIG5vZGUgaXMgYSB0b29sIHN0ZXAgY29ubmVjdGVkIHRvIGEgRHVyYWJsZUFnZW50ICovXG4gIGlzVG9vbD86IGJvb2xlYW47XG4gIC8qKiBUaGUgbmFtZSBvZiB0aGUgdG9vbCAoa2V5IGluIHRvb2xzIG9iamVjdCkgKi9cbiAgdG9vbE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGlzIG5vZGUgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgdG9vbHMgKGltcG9ydGVkIHZhcmlhYmxlKSAqL1xuICBpc1Rvb2xzQ29sbGVjdGlvbj86IGJvb2xlYW47XG4gIC8qKiBUaGUgdmFyaWFibGUgbmFtZSBvZiB0aGUgdG9vbHMgY29sbGVjdGlvbiAqL1xuICB0b29sc1ZhcmlhYmxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdyYXBoIG5vZGUgZm9yIHdvcmtmbG93IHZpc3VhbGl6YXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5pZmVzdE5vZGUge1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGRhdGE6IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIG5vZGVLaW5kOiBzdHJpbmc7XG4gICAgc3RlcElkPzogc3RyaW5nO1xuICB9O1xuICBtZXRhZGF0YT86IE5vZGVNZXRhZGF0YTtcbn1cblxuLyoqXG4gKiBHcmFwaCBlZGdlIGZvciB3b3JrZmxvdyBjb250cm9sIGZsb3dcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5pZmVzdEVkZ2Uge1xuICBpZDogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbiAgdGFyZ2V0OiBzdHJpbmc7XG4gIHR5cGU6ICdkZWZhdWx0JyB8ICdsb29wJyB8ICdjb25kaXRpb25hbCcgfCAncGFyYWxsZWwnIHwgJ3Rvb2wnO1xuICBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHcmFwaCBkYXRhIGZvciBhIHNpbmdsZSB3b3JrZmxvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93R3JhcGhEYXRhIHtcbiAgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdO1xuICBlZGdlczogTWFuaWZlc3RFZGdlW107XG59XG5cbi8qKlxuICogU3RlcCBlbnRyeSBpbiB0aGUgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5pZmVzdFN0ZXBFbnRyeSB7XG4gIHN0ZXBJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdvcmtmbG93IGVudHJ5IGluIHRoZSBtYW5pZmVzdCAoaW5jbHVkZXMgZ3JhcGggZGF0YSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5pZmVzdFdvcmtmbG93RW50cnkge1xuICB3b3JrZmxvd0lkOiBzdHJpbmc7XG4gIGdyYXBoOiBXb3JrZmxvd0dyYXBoRGF0YTtcbn1cblxuLyoqXG4gKiBNYW5pZmVzdCBzdHJ1Y3R1cmUgLSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBhbGwgd29ya2Zsb3cgbWV0YWRhdGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5pZmVzdCB7XG4gIHZlcnNpb246IHN0cmluZztcbiAgc3RlcHM6IHtcbiAgICBbZmlsZVBhdGg6IHN0cmluZ106IHtcbiAgICAgIFtzdGVwTmFtZTogc3RyaW5nXTogTWFuaWZlc3RTdGVwRW50cnk7XG4gICAgfTtcbiAgfTtcbiAgd29ya2Zsb3dzOiB7XG4gICAgW2ZpbGVQYXRoOiBzdHJpbmddOiB7XG4gICAgICBbd29ya2Zsb3dOYW1lOiBzdHJpbmddOiBNYW5pZmVzdFdvcmtmbG93RW50cnk7XG4gICAgfTtcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEV4dHJhY3Rpb24gRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEV4dHJhY3RzIHdvcmtmbG93IGdyYXBocyBmcm9tIGEgYnVuZGxlZCB3b3JrZmxvdyBmaWxlLlxuICogUmV0dXJucyB3b3JrZmxvdyBlbnRyaWVzIG9yZ2FuaXplZCBieSBmaWxlIHBhdGgsIHJlYWR5IGZvciBtZXJnaW5nIGludG8gTWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0V29ya2Zsb3dHcmFwaHMoYnVuZGxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx7XG4gIFtmaWxlUGF0aDogc3RyaW5nXToge1xuICAgIFt3b3JrZmxvd05hbWU6IHN0cmluZ106IE1hbmlmZXN0V29ya2Zsb3dFbnRyeTtcbiAgfTtcbn0+IHtcbiAgY29uc3QgYnVuZGxlQ29kZSA9IGF3YWl0IHJlYWRGaWxlKGJ1bmRsZVBhdGgsICd1dGYtOCcpO1xuXG4gIHRyeSB7XG4gICAgbGV0IGFjdHVhbFdvcmtmbG93Q29kZSA9IGJ1bmRsZUNvZGU7XG5cbiAgICBjb25zdCBidW5kbGVBc3QgPSBwYXJzZVN5bmMoYnVuZGxlQ29kZSwge1xuICAgICAgc3ludGF4OiAnZWNtYXNjcmlwdCcsXG4gICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgd29ya2Zsb3dDb2RlVmFsdWUgPSBleHRyYWN0V29ya2Zsb3dDb2RlRnJvbUJ1bmRsZShidW5kbGVBc3QpO1xuICAgIGlmICh3b3JrZmxvd0NvZGVWYWx1ZSkge1xuICAgICAgYWN0dWFsV29ya2Zsb3dDb2RlID0gd29ya2Zsb3dDb2RlVmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgYXN0ID0gcGFyc2VTeW5jKGFjdHVhbFdvcmtmbG93Q29kZSwge1xuICAgICAgc3ludGF4OiAnZWNtYXNjcmlwdCcsXG4gICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RlcERlY2xhcmF0aW9ucyA9IGV4dHJhY3RTdGVwRGVjbGFyYXRpb25zKGFjdHVhbFdvcmtmbG93Q29kZSk7XG4gICAgY29uc3QgZnVuY3Rpb25NYXAgPSBidWlsZEZ1bmN0aW9uTWFwKGFzdCwgc3RlcERlY2xhcmF0aW9ucyk7XG4gICAgY29uc3QgdmFyaWFibGVNYXAgPSBidWlsZFZhcmlhYmxlTWFwKGFzdCk7XG5cbiAgICByZXR1cm4gZXh0cmFjdFdvcmtmbG93cyhhc3QsIHN0ZXBEZWNsYXJhdGlvbnMsIGZ1bmN0aW9uTWFwLCB2YXJpYWJsZU1hcCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGV4dHJhY3Qgd29ya2Zsb3cgZ3JhcGhzIGZyb20gYnVuZGxlOicsIGVycm9yKTtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSB3b3JrZmxvd0NvZGUgc3RyaW5nIHZhbHVlIGZyb20gYSBwYXJzZWQgYnVuZGxlIEFTVFxuICovXG5mdW5jdGlvbiBleHRyYWN0V29ya2Zsb3dDb2RlRnJvbUJ1bmRsZShhc3Q6IFByb2dyYW0pOiBzdHJpbmcgfCBudWxsIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlY2wgb2YgaXRlbS5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgZGVjbC5pZC52YWx1ZSA9PT0gJ3dvcmtmbG93Q29kZScgJiZcbiAgICAgICAgICBkZWNsLmluaXRcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGRlY2wuaW5pdC50eXBlID09PSAnVGVtcGxhdGVMaXRlcmFsJykge1xuICAgICAgICAgICAgcmV0dXJuIGRlY2wuaW5pdC5xdWFzaXMubWFwKChxKSA9PiBxLmNvb2tlZCB8fCBxLnJhdykuam9pbignJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZWNsLmluaXQudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjbC5pbml0LnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHN0ZXAgZGVjbGFyYXRpb25zIHVzaW5nIHJlZ2V4IGZvciBzcGVlZFxuICovXG5mdW5jdGlvbiBleHRyYWN0U3RlcERlY2xhcmF0aW9ucyhcbiAgYnVuZGxlQ29kZTogc3RyaW5nXG4pOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+IHtcbiAgY29uc3Qgc3RlcERlY2xhcmF0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+KCk7XG5cbiAgY29uc3Qgc3RlcFBhdHRlcm4gPVxuICAgIC92YXIgKFxcdyspID0gZ2xvYmFsVGhpc1xcW1N5bWJvbFxcLmZvclxcKFwiV09SS0ZMT1dfVVNFX1NURVBcIlxcKVxcXVxcKFwiKFteXCJdKylcIlxcKS9nO1xuXG4gIGNvbnN0IGxpbmVzID0gYnVuZGxlQ29kZS5zcGxpdCgnXFxuJyk7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIHN0ZXBQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gICAgY29uc3QgbWF0Y2ggPSBzdGVwUGF0dGVybi5leGVjKGxpbmUpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgWywgdmFyTmFtZSwgc3RlcElkXSA9IG1hdGNoO1xuICAgICAgc3RlcERlY2xhcmF0aW9ucy5zZXQodmFyTmFtZSwgeyBzdGVwSWQgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ZXBEZWNsYXJhdGlvbnM7XG59XG5cbi8qKlxuICogRXh0cmFjdCBpbmxpbmUgc3RlcCBkZWNsYXJhdGlvbnMgZnJvbSB3aXRoaW4gYSBmdW5jdGlvbiBib2R5LlxuICogVGhlc2UgYXJlIHN0ZXBzIGRlZmluZWQgYXMgdmFyaWFibGUgZGVjbGFyYXRpb25zIGluc2lkZSBhIHdvcmtmbG93IGZ1bmN0aW9uLlxuICogUGF0dGVybjogdmFyL2NvbnN0IHZhck5hbWUgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwSWRcIilcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdElubGluZVN0ZXBEZWNsYXJhdGlvbnMoXG4gIHN0bXRzOiBTdGF0ZW1lbnRbXVxuKTogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PiB7XG4gIGNvbnN0IGlubGluZVN0ZXBzID0gbmV3IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4oKTtcblxuICBmb3IgKGNvbnN0IHN0bXQgb2Ygc3RtdHMpIHtcbiAgICBpZiAoc3RtdC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IHZhckRlY2wgPSBzdG10IGFzIFZhcmlhYmxlRGVjbGFyYXRpb247XG4gICAgICBmb3IgKGNvbnN0IGRlY2wgb2YgdmFyRGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgZGVjbC5pbml0Py50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGNhbGxFeHByID0gZGVjbC5pbml0IGFzIENhbGxFeHByZXNzaW9uO1xuICAgICAgICAgIC8vIENoZWNrIGZvciBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwSWRcIikgcGF0dGVyblxuICAgICAgICAgIGlmIChjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICBjb25zdCBtZW1iZXIgPSBjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIG9iamVjdCBpcyBnbG9iYWxUaGlzXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1lbWJlci5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgICAgIChtZW1iZXIub2JqZWN0IGFzIElkZW50aWZpZXIpLnZhbHVlID09PSAnZ2xvYmFsVGhpcycgJiZcbiAgICAgICAgICAgICAgbWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdDb21wdXRlZCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBGb3IgY29tcHV0ZWQgbWVtYmVyIGFjY2VzcyBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoLi4uKV0sXG4gICAgICAgICAgICAgIC8vIHRoZSBwcm9wZXJ0eSBpcyBhIENvbXB1dGVkIHR5cGUgY29udGFpbmluZyB0aGUgZXhwcmVzc2lvblxuICAgICAgICAgICAgICBjb25zdCBjb21wdXRlZEV4cHIgPSAobWVtYmVyLnByb3BlcnR5IGFzIGFueSkuZXhwcmVzc2lvbjtcbiAgICAgICAgICAgICAgaWYgKGNvbXB1dGVkRXhwcj8udHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN5bWJvbENhbGwgPSBjb21wdXRlZEV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIilcbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sQ2FsbC5jYWxsZWUudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzeW1ib2xNZW1iZXIgPSBzeW1ib2xDYWxsLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xNZW1iZXIub2JqZWN0LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAoc3ltYm9sTWVtYmVyLm9iamVjdCBhcyBJZGVudGlmaWVyKS52YWx1ZSA9PT0gJ1N5bWJvbCcgJiZcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sTWVtYmVyLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAoc3ltYm9sTWVtYmVyLnByb3BlcnR5IGFzIElkZW50aWZpZXIpLnZhbHVlID09PSAnZm9yJyAmJlxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xDYWxsLmFyZ3VtZW50cy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbENhbGwuYXJndW1lbnRzWzBdLmV4cHJlc3Npb24udHlwZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAnU3RyaW5nTGl0ZXJhbCcgJiZcbiAgICAgICAgICAgICAgICAgICAgKHN5bWJvbENhbGwuYXJndW1lbnRzWzBdLmV4cHJlc3Npb24gYXMgYW55KS52YWx1ZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAnV09SS0ZMT1dfVVNFX1NURVAnXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgc3RlcElkIGZyb20gdGhlIG91dGVyIGNhbGwgYXJndW1lbnRzXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsRXhwci5hcmd1bWVudHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxFeHByLmFyZ3VtZW50c1swXS5leHByZXNzaW9uLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJ1xuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGVwSWQgPSAoY2FsbEV4cHIuYXJndW1lbnRzWzBdLmV4cHJlc3Npb24gYXMgYW55KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhck5hbWUgPSAoZGVjbC5pZCBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVTdGVwcy5zZXQodmFyTmFtZSwgeyBzdGVwSWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5saW5lU3RlcHM7XG59XG5cbi8qKlxuICogQnVpbGQgYSBtYXAgb2YgYWxsIGZ1bmN0aW9ucyBpbiB0aGUgYnVuZGxlIGZvciB0cmFuc2l0aXZlIHN0ZXAgcmVzb2x1dGlvblxuICovXG5mdW5jdGlvbiBidWlsZEZ1bmN0aW9uTWFwKFxuICBhc3Q6IFByb2dyYW0sXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT5cbik6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4ge1xuICBjb25zdCBmdW5jdGlvbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+KCk7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCBmdW5jID0gaXRlbSBhcyBGdW5jdGlvbkRlY2xhcmF0aW9uO1xuICAgICAgaWYgKGZ1bmMuaWRlbnRpZmllcikge1xuICAgICAgICBjb25zdCBuYW1lID0gZnVuYy5pZGVudGlmaWVyLnZhbHVlO1xuICAgICAgICBjb25zdCBpc1N0ZXAgPSBzdGVwRGVjbGFyYXRpb25zLmhhcyhuYW1lKTtcbiAgICAgICAgZnVuY3Rpb25NYXAuc2V0KG5hbWUsIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGJvZHk6IGZ1bmMuYm9keSxcbiAgICAgICAgICBpc1N0ZXAsXG4gICAgICAgICAgc3RlcElkOiBpc1N0ZXAgPyBzdGVwRGVjbGFyYXRpb25zLmdldChuYW1lKT8uc3RlcElkIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXRlbS50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IHZhckRlY2wgPSBpdGVtIGFzIFZhcmlhYmxlRGVjbGFyYXRpb247XG4gICAgICBmb3IgKGNvbnN0IGRlY2wgb2YgdmFyRGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgaWYgKGRlY2wuaWQudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmIGRlY2wuaW5pdCkge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSBkZWNsLmlkLnZhbHVlO1xuICAgICAgICAgIGNvbnN0IGlzU3RlcCA9IHN0ZXBEZWNsYXJhdGlvbnMuaGFzKG5hbWUpO1xuXG4gICAgICAgICAgaWYgKGRlY2wuaW5pdC50eXBlID09PSAnRnVuY3Rpb25FeHByZXNzaW9uJykge1xuICAgICAgICAgICAgY29uc3QgZnVuY0V4cHIgPSBkZWNsLmluaXQgYXMgRnVuY3Rpb25FeHByZXNzaW9uO1xuICAgICAgICAgICAgZnVuY3Rpb25NYXAuc2V0KG5hbWUsIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgYm9keTogZnVuY0V4cHIuYm9keSxcbiAgICAgICAgICAgICAgaXNTdGVwLFxuICAgICAgICAgICAgICBzdGVwSWQ6IGlzU3RlcCA/IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KG5hbWUpPy5zdGVwSWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlY2wuaW5pdC50eXBlID09PSAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICBjb25zdCBhcnJvd0Z1bmMgPSBkZWNsLmluaXQgYXMgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247XG4gICAgICAgICAgICBmdW5jdGlvbk1hcC5zZXQobmFtZSwge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBib2R5OiBhcnJvd0Z1bmMuYm9keSxcbiAgICAgICAgICAgICAgaXNTdGVwLFxuICAgICAgICAgICAgICBzdGVwSWQ6IGlzU3RlcCA/IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KG5hbWUpPy5zdGVwSWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb25NYXA7XG59XG5cbi8qKlxuICogQnVpbGQgYSBtYXAgb2YgdmFyaWFibGUgZGVmaW5pdGlvbnMgKG9iamVjdHMpIGZvciB0b29sIHJlc29sdXRpb25cbiAqIFRoaXMgYWxsb3dzIHVzIHRvIHJlc29sdmUgdG9vbHMgb2JqZWN0cyB0byB0aGUgYWN0dWFsIHRvb2xzIG9iamVjdFxuICovXG5mdW5jdGlvbiBidWlsZFZhcmlhYmxlTWFwKGFzdDogUHJvZ3JhbSk6IE1hcDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCB2YXJpYWJsZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCB2YXJEZWNsID0gaXRlbSBhcyBWYXJpYWJsZURlY2xhcmF0aW9uO1xuICAgICAgZm9yIChjb25zdCBkZWNsIG9mIHZhckRlY2wuZGVjbGFyYXRpb25zKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWNsLnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0b3InICYmXG4gICAgICAgICAgZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBkZWNsLmluaXQ/LnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJ1xuICAgICAgICApIHtcbiAgICAgICAgICB2YXJpYWJsZU1hcC5zZXQoZGVjbC5pZC52YWx1ZSwgZGVjbC5pbml0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YXJpYWJsZU1hcDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHdvcmtmbG93cyBmcm9tIEFTVFxuICovXG5mdW5jdGlvbiBleHRyYWN0V29ya2Zsb3dzKFxuICBhc3Q6IFByb2dyYW0sXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGZ1bmN0aW9uTWFwOiBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+LFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PlxuKToge1xuICBbZmlsZVBhdGg6IHN0cmluZ106IHtcbiAgICBbd29ya2Zsb3dOYW1lOiBzdHJpbmddOiBNYW5pZmVzdFdvcmtmbG93RW50cnk7XG4gIH07XG59IHtcbiAgY29uc3QgcmVzdWx0OiB7XG4gICAgW2ZpbGVQYXRoOiBzdHJpbmddOiB7XG4gICAgICBbd29ya2Zsb3dOYW1lOiBzdHJpbmddOiBNYW5pZmVzdFdvcmtmbG93RW50cnk7XG4gICAgfTtcbiAgfSA9IHt9O1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBhc3QuYm9keSkge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdGdW5jdGlvbkRlY2xhcmF0aW9uJykge1xuICAgICAgY29uc3QgZnVuYyA9IGl0ZW0gYXMgRnVuY3Rpb25EZWNsYXJhdGlvbjtcbiAgICAgIGlmICghZnVuYy5pZGVudGlmaWVyKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qgd29ya2Zsb3dOYW1lID0gZnVuYy5pZGVudGlmaWVyLnZhbHVlO1xuICAgICAgY29uc3Qgd29ya2Zsb3dJZCA9IGZpbmRXb3JrZmxvd0lkKGFzdCwgd29ya2Zsb3dOYW1lKTtcbiAgICAgIGlmICghd29ya2Zsb3dJZCkgY29udGludWU7XG5cbiAgICAgIC8vIEV4dHJhY3QgZmlsZSBwYXRoIGFuZCBhY3R1YWwgd29ya2Zsb3cgbmFtZSBmcm9tIHdvcmtmbG93SWQ6IFwid29ya2Zsb3cvL3BhdGgvdG8vZmlsZS50cy8vZnVuY3Rpb25OYW1lXCJcbiAgICAgIC8vIFRoZSBidW5kbGVyIG1heSByZW5hbWUgZnVuY3Rpb25zIHRvIGF2b2lkIGNvbGxpc2lvbnMgKGUuZy4gYWRkVGVuV29ya2Zsb3cgLT4gYWRkVGVuV29ya2Zsb3cyKSxcbiAgICAgIC8vIGJ1dCB0aGUgd29ya2Zsb3dJZCBjb250YWlucyB0aGUgb3JpZ2luYWwgVHlwZVNjcmlwdCBmdW5jdGlvbiBuYW1lLlxuICAgICAgY29uc3QgcGFydHMgPSB3b3JrZmxvd0lkLnNwbGl0KCcvLycpO1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMV0gOiAndW5rbm93bic7XG4gICAgICBjb25zdCBhY3R1YWxXb3JrZmxvd05hbWUgPSBwYXJ0cy5sZW5ndGggPiAyID8gcGFydHNbMl0gOiB3b3JrZmxvd05hbWU7XG5cbiAgICAgIGNvbnN0IGdyYXBoID0gYW5hbHl6ZVdvcmtmbG93RnVuY3Rpb24oXG4gICAgICAgIGZ1bmMsXG4gICAgICAgIHdvcmtmbG93TmFtZSxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuXG4gICAgICBpZiAoIXJlc3VsdFtmaWxlUGF0aF0pIHtcbiAgICAgICAgcmVzdWx0W2ZpbGVQYXRoXSA9IHt9O1xuICAgICAgfVxuXG4gICAgICByZXN1bHRbZmlsZVBhdGhdW2FjdHVhbFdvcmtmbG93TmFtZV0gPSB7XG4gICAgICAgIHdvcmtmbG93SWQsXG4gICAgICAgIGdyYXBoLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZpbmQgd29ya2Zsb3dJZCBhc3NpZ25tZW50IGZvciBhIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGZpbmRXb3JrZmxvd0lkKGFzdDogUHJvZ3JhbSwgZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGFzdC5ib2R5KSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0V4cHJlc3Npb25TdGF0ZW1lbnQnKSB7XG4gICAgICBjb25zdCBleHByID0gaXRlbS5leHByZXNzaW9uO1xuICAgICAgaWYgKGV4cHIudHlwZSA9PT0gJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJykge1xuICAgICAgICBjb25zdCBsZWZ0ID0gZXhwci5sZWZ0O1xuICAgICAgICBpZiAobGVmdC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICBjb25zdCBvYmogPSBsZWZ0Lm9iamVjdDtcbiAgICAgICAgICBjb25zdCBwcm9wID0gbGVmdC5wcm9wZXJ0eTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBvYmoudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgICBvYmoudmFsdWUgPT09IGZ1bmN0aW9uTmFtZSAmJlxuICAgICAgICAgICAgcHJvcC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAgIHByb3AudmFsdWUgPT09ICd3b3JrZmxvd0lkJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBleHByLnJpZ2h0O1xuICAgICAgICAgICAgaWYgKHJpZ2h0LnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgICAgICAgICByZXR1cm4gcmlnaHQudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEFuYWx5emUgYSB3b3JrZmxvdyBmdW5jdGlvbiBhbmQgYnVpbGQgaXRzIGdyYXBoXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVXb3JrZmxvd0Z1bmN0aW9uKFxuICBmdW5jOiBGdW5jdGlvbkRlY2xhcmF0aW9uLFxuICB3b3JrZmxvd05hbWU6IHN0cmluZyxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgZnVuY3Rpb25NYXA6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4sXG4gIHZhcmlhYmxlTWFwOiBNYXA8c3RyaW5nLCBhbnk+XG4pOiBXb3JrZmxvd0dyYXBoRGF0YSB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcblxuICAvLyBBZGQgc3RhcnQgbm9kZVxuICBub2Rlcy5wdXNoKHtcbiAgICBpZDogJ3N0YXJ0JyxcbiAgICB0eXBlOiAnd29ya2Zsb3dTdGFydCcsXG4gICAgZGF0YToge1xuICAgICAgbGFiZWw6IGBTdGFydDogJHt3b3JrZmxvd05hbWV9YCxcbiAgICAgIG5vZGVLaW5kOiAnd29ya2Zsb3dfc3RhcnQnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCA9IHtcbiAgICBwYXJhbGxlbENvdW50ZXI6IDAsXG4gICAgbG9vcENvdW50ZXI6IDAsXG4gICAgY29uZGl0aW9uYWxDb3VudGVyOiAwLFxuICAgIG5vZGVDb3VudGVyOiAwLFxuICAgIGluTG9vcDogbnVsbCxcbiAgICBpbkNvbmRpdGlvbmFsOiBudWxsLFxuICAgIHdlYmhvb2tWYXJpYWJsZXM6IG5ldyBTZXQoKSxcbiAgICBwcm9taXNlQXJyYXlzOiBuZXcgTWFwKCksXG4gIH07XG5cbiAgbGV0IHByZXZFeGl0SWRzID0gWydzdGFydCddO1xuXG4gIGlmIChmdW5jLmJvZHk/LnN0bXRzKSB7XG4gICAgLy8gRXh0cmFjdCBpbmxpbmUgc3RlcCBkZWNsYXJhdGlvbnMgZnJvbSB0aGUgd29ya2Zsb3cgYm9keVxuICAgIC8vIFRoZXNlIGFyZSBzdGVwcyBkZWZpbmVkIGFzIHZhcmlhYmxlcyBpbnNpZGUgdGhlIHdvcmtmbG93IGZ1bmN0aW9uXG4gICAgY29uc3QgaW5saW5lU3RlcHMgPSBleHRyYWN0SW5saW5lU3RlcERlY2xhcmF0aW9ucyhmdW5jLmJvZHkuc3RtdHMpO1xuXG4gICAgLy8gTWVyZ2UgaW5saW5lIHN0ZXBzIHdpdGggZ2xvYmFsIHN0ZXAgZGVjbGFyYXRpb25zXG4gICAgY29uc3QgbWVyZ2VkU3RlcERlY2xhcmF0aW9ucyA9IG5ldyBNYXAoc3RlcERlY2xhcmF0aW9ucyk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgaW5mb10gb2YgaW5saW5lU3RlcHMpIHtcbiAgICAgIG1lcmdlZFN0ZXBEZWNsYXJhdGlvbnMuc2V0KG5hbWUsIGluZm8pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3RtdCBvZiBmdW5jLmJvZHkuc3RtdHMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFuYWx5emVTdGF0ZW1lbnQoXG4gICAgICAgIHN0bXQsXG4gICAgICAgIG1lcmdlZFN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgbm9kZXMucHVzaCguLi5yZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuXG4gICAgICBmb3IgKGNvbnN0IHByZXZJZCBvZiBwcmV2RXhpdElkcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgcmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgIGNvbnN0IGVkZ2VJZCA9IGBlXyR7cHJldklkfV8ke2VudHJ5SWR9YDtcbiAgICAgICAgICBpZiAoIWVkZ2VzLmZpbmQoKGUpID0+IGUuaWQgPT09IGVkZ2VJZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSByZXN1bHQubm9kZXMuZmluZCgobikgPT4gbi5pZCA9PT0gZW50cnlJZCk7XG4gICAgICAgICAgICAvLyBPbmx5IHVzZSAncGFyYWxsZWwnIHR5cGUgZm9yIHBhcmFsbGVsIGdyb3VwIGNvbm5lY3Rpb25zXG4gICAgICAgICAgICAvLyBTZXF1ZW50aWFsIGNvbm5lY3Rpb25zIChpbmNsdWRpbmcgdG8vZnJvbSBsb29wcykgc2hvdWxkIGJlICdkZWZhdWx0J1xuICAgICAgICAgICAgY29uc3QgZWRnZVR5cGUgPSB0YXJnZXROb2RlPy5tZXRhZGF0YT8ucGFyYWxsZWxHcm91cElkXG4gICAgICAgICAgICAgID8gJ3BhcmFsbGVsJ1xuICAgICAgICAgICAgICA6ICdkZWZhdWx0JztcbiAgICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgICBpZDogZWRnZUlkLFxuICAgICAgICAgICAgICBzb3VyY2U6IHByZXZJZCxcbiAgICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgICB0eXBlOiBlZGdlVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0LmV4aXROb2RlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcHJldkV4aXRJZHMgPSByZXN1bHQuZXhpdE5vZGVJZHM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGVuZCBub2RlXG4gIG5vZGVzLnB1c2goe1xuICAgIGlkOiAnZW5kJyxcbiAgICB0eXBlOiAnd29ya2Zsb3dFbmQnLFxuICAgIGRhdGE6IHtcbiAgICAgIGxhYmVsOiAnUmV0dXJuJyxcbiAgICAgIG5vZGVLaW5kOiAnd29ya2Zsb3dfZW5kJyxcbiAgICB9LFxuICB9KTtcblxuICBmb3IgKGNvbnN0IHByZXZJZCBvZiBwcmV2RXhpdElkcykge1xuICAgIGVkZ2VzLnB1c2goe1xuICAgICAgaWQ6IGBlXyR7cHJldklkfV9lbmRgLFxuICAgICAgc291cmNlOiBwcmV2SWQsXG4gICAgICB0YXJnZXQ6ICdlbmQnLFxuICAgICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzIH07XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzdGF0ZW1lbnQgb3IgYmxvY2sgY29udGFpbnMgYXdhaXQgZXhwcmVzc2lvbnMgKHJlY3Vyc2l2ZWx5KVxuICogVXNlZCB0byBkZXRlcm1pbmUgaWYgYSBmb3Ivd2hpbGUgbG9vcCBpcyB0cnVseSBhIGxvb3BpbmcgZXhlY3V0aW9uIHBhdHRlcm5cbiAqIHZzIGp1c3QgY29sbGVjdGluZyBwcm9taXNlcyBmb3IgcGFyYWxsZWwgZXhlY3V0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKG5vZGU6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAoIW5vZGUpIHJldHVybiBmYWxzZTtcblxuICAvLyBEaXJlY3QgYXdhaXQgZXhwcmVzc2lvblxuICBpZiAobm9kZS50eXBlID09PSAnQXdhaXRFeHByZXNzaW9uJykgcmV0dXJuIHRydWU7XG5cbiAgLy8gQ2hlY2sgYmxvY2sgc3RhdGVtZW50c1xuICBpZiAobm9kZS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnICYmIG5vZGUuc3RtdHMpIHtcbiAgICByZXR1cm4gbm9kZS5zdG10cy5zb21lKChzdG10OiBhbnkpID0+IGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKHN0bXQpKTtcbiAgfVxuXG4gIC8vIENoZWNrIGV4cHJlc3Npb24gc3RhdGVtZW50c1xuICBpZiAobm9kZS50eXBlID09PSAnRXhwcmVzc2lvblN0YXRlbWVudCcgJiYgbm9kZS5leHByZXNzaW9uKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbik7XG4gIH1cblxuICAvLyBDaGVjayB2YXJpYWJsZSBkZWNsYXJhdGlvbnNcbiAgaWYgKG5vZGUudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nICYmIG5vZGUuZGVjbGFyYXRpb25zKSB7XG4gICAgcmV0dXJuIG5vZGUuZGVjbGFyYXRpb25zLnNvbWUoXG4gICAgICAoZGVjbDogYW55KSA9PiBkZWNsLmluaXQgJiYgY29udGFpbnNBd2FpdEV4cHJlc3Npb24oZGVjbC5pbml0KVxuICAgICk7XG4gIH1cblxuICAvLyBDaGVjayBpZiBzdGF0ZW1lbnRzXG4gIGlmIChub2RlLnR5cGUgPT09ICdJZlN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZS5jb25zZXF1ZW50KSB8fFxuICAgICAgY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZS5hbHRlcm5hdGUpXG4gICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBzdGF0ZW1lbnRzXG4gIGlmIChcbiAgICBub2RlLnR5cGUgPT09ICdGb3JTdGF0ZW1lbnQnIHx8XG4gICAgbm9kZS50eXBlID09PSAnV2hpbGVTdGF0ZW1lbnQnIHx8XG4gICAgbm9kZS50eXBlID09PSAnRm9yT2ZTdGF0ZW1lbnQnIHx8XG4gICAgbm9kZS50eXBlID09PSAnRm9ySW5TdGF0ZW1lbnQnXG4gICkge1xuICAgIHJldHVybiBjb250YWluc0F3YWl0RXhwcmVzc2lvbihub2RlLmJvZHkpO1xuICB9XG5cbiAgLy8gQ2hlY2sgYXNzaWdubWVudCBleHByZXNzaW9ucyAoZS5nLiwgcmVzdWx0ID0gYXdhaXQgZG9Xb3JrKCkpXG4gIGlmIChub2RlLnR5cGUgPT09ICdBc3NpZ25tZW50RXhwcmVzc2lvbicpIHtcbiAgICByZXR1cm4gY29udGFpbnNBd2FpdEV4cHJlc3Npb24obm9kZS5yaWdodCk7XG4gIH1cblxuICAvLyBDaGVjayBjYWxsIGV4cHJlc3Npb25zIChmb3IgYXdhaXQgaW4gYXJndW1lbnRzKVxuICBpZiAobm9kZS50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgaWYgKG5vZGUuYXJndW1lbnRzKSB7XG4gICAgICByZXR1cm4gbm9kZS5hcmd1bWVudHMuc29tZSgoYXJnOiBhbnkpID0+XG4gICAgICAgIGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKGFyZy5leHByZXNzaW9uIHx8IGFyZylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEFuYWx5emUgYSBzdGF0ZW1lbnQgYW5kIGV4dHJhY3Qgc3RlcCBjYWxscyB3aXRoIHByb3BlciBDRkcgc3RydWN0dXJlXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVTdGF0ZW1lbnQoXG4gIHN0bXQ6IFN0YXRlbWVudCxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgY29udGV4dDogQW5hbHlzaXNDb250ZXh0LFxuICBmdW5jdGlvbk1hcDogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPixcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT5cbik6IEFuYWx5c2lzUmVzdWx0IHtcbiAgY29uc3Qgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdID0gW107XG4gIGNvbnN0IGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXSA9IFtdO1xuICBsZXQgZW50cnlOb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgZXhpdE5vZGVJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHN0bXQudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgY29uc3QgdmFyRGVjbCA9IHN0bXQgYXMgVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgICBmb3IgKGNvbnN0IGRlY2wgb2YgdmFyRGVjbC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgIGlmIChkZWNsLmluaXQpIHtcbiAgICAgICAgLy8gVHJhY2sgd2ViaG9vay9ob29rIHZhcmlhYmxlIGFzc2lnbm1lbnRzOiBjb25zdCB3ZWJob29rID0gY3JlYXRlV2ViaG9vaygpXG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWNsLmlkLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgICAgIGRlY2wuaW5pdC50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nICYmXG4gICAgICAgICAgKGRlY2wuaW5pdCBhcyBDYWxsRXhwcmVzc2lvbikuY2FsbGVlLnR5cGUgPT09ICdJZGVudGlmaWVyJ1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBmdW5jTmFtZSA9ICgoZGVjbC5pbml0IGFzIENhbGxFeHByZXNzaW9uKS5jYWxsZWUgYXMgSWRlbnRpZmllcilcbiAgICAgICAgICAgIC52YWx1ZTtcbiAgICAgICAgICBpZiAoZnVuY05hbWUgPT09ICdjcmVhdGVXZWJob29rJyB8fCBmdW5jTmFtZSA9PT0gJ2NyZWF0ZUhvb2snKSB7XG4gICAgICAgICAgICBjb250ZXh0LndlYmhvb2tWYXJpYWJsZXMuYWRkKChkZWNsLmlkIGFzIElkZW50aWZpZXIpLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmFjayBlbXB0eSBhcnJheSBhc3NpZ25tZW50cyBmb3IgUHJvbWlzZS5hbGwgcGF0dGVybjogY29uc3QgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICBkZWNsLmluaXQudHlwZSA9PT0gJ0FycmF5RXhwcmVzc2lvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudHMgPSAoZGVjbC5pbml0IGFzIGFueSkuZWxlbWVudHM7XG4gICAgICAgICAgLy8gRW1wdHkgYXJyYXk6IGVsZW1lbnRzIGlzIHVuZGVmaW5lZCwgbnVsbCwgb3IgZW1wdHkgYXJyYXlcbiAgICAgICAgICBpZiAoIWVsZW1lbnRzIHx8IGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgdmFyTmFtZSA9IChkZWNsLmlkIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgY29udGV4dC5wcm9taXNlQXJyYXlzLnNldCh2YXJOYW1lLCBbXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYW5hbHl6ZUV4cHJlc3Npb24oXG4gICAgICAgICAgZGVjbC5pbml0LFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgICApO1xuICAgICAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4ucmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgaWYgKGVudHJ5Tm9kZUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBlbnRyeU5vZGVJZHMgPSByZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3QgcHJldklkIG9mIGV4aXROb2RlSWRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgcmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogYGVfJHtwcmV2SWR9XyR7ZW50cnlJZH1gLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogcHJldklkLFxuICAgICAgICAgICAgICAgIHRhcmdldDogZW50cnlJZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleGl0Tm9kZUlkcyA9IHJlc3VsdC5leGl0Tm9kZUlkcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnRXhwcmVzc2lvblN0YXRlbWVudCcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgIHN0bXQuZXhwcmVzc2lvbixcbiAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICB2YXJpYWJsZU1hcFxuICAgICk7XG4gICAgbm9kZXMucHVzaCguLi5yZXN1bHQubm9kZXMpO1xuICAgIGVkZ2VzLnB1c2goLi4ucmVzdWx0LmVkZ2VzKTtcbiAgICBlbnRyeU5vZGVJZHMgPSByZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgIGV4aXROb2RlSWRzID0gcmVzdWx0LmV4aXROb2RlSWRzO1xuICB9XG5cbiAgaWYgKHN0bXQudHlwZSA9PT0gJ0lmU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IHNhdmVkQ29uZGl0aW9uYWwgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgY29uc3QgY29uZGl0aW9uYWxJZCA9IGBjb25kXyR7Y29udGV4dC5jb25kaXRpb25hbENvdW50ZXIrK31gO1xuICAgIGNvbnRleHQuaW5Db25kaXRpb25hbCA9IGNvbmRpdGlvbmFsSWQ7XG5cbiAgICAvLyBBbmFseXplIHRoZSBcInRoZW5cIiBicmFuY2ggZmlyc3QgdG8gY2hlY2sgaWYgaXQgaGFzIGFueSB3b3JrZmxvdy1yZWxldmFudCBub2Rlc1xuICAgIGxldCB0aGVuUmVzdWx0OiBBbmFseXNpc1Jlc3VsdDtcbiAgICBpZiAoc3RtdC5jb25zZXF1ZW50LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICAgIHRoZW5SZXN1bHQgPSBhbmFseXplQmxvY2soXG4gICAgICAgIHN0bXQuY29uc2VxdWVudC5zdG10cyxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIYW5kbGUgc2luZ2xlLXN0YXRlbWVudCBjb25zZXF1ZW50IChubyBicmFjZXMpXG4gICAgICB0aGVuUmVzdWx0ID0gYW5hbHl6ZVN0YXRlbWVudChcbiAgICAgICAgc3RtdC5jb25zZXF1ZW50LFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQW5hbHl6ZSB0aGUgXCJlbHNlXCIgYnJhbmNoIGlmIGl0IGV4aXN0c1xuICAgIGxldCBlbHNlUmVzdWx0OiBBbmFseXNpc1Jlc3VsdCB8IG51bGwgPSBudWxsO1xuICAgIGlmIChzdG10LmFsdGVybmF0ZSkge1xuICAgICAgaWYgKHN0bXQuYWx0ZXJuYXRlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICAgICAgZWxzZVJlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgICAgICBzdG10LmFsdGVybmF0ZS5zdG10cyxcbiAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEhhbmRsZSBzaW5nbGUtc3RhdGVtZW50IGFsdGVybmF0ZSAobm8gYnJhY2VzKSBvciBlbHNlLWlmXG4gICAgICAgIGVsc2VSZXN1bHQgPSBhbmFseXplU3RhdGVtZW50KFxuICAgICAgICAgIHN0bXQuYWx0ZXJuYXRlLFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9ubHkgY3JlYXRlIGNvbmRpdGlvbmFsIG5vZGUgaWYgYXQgbGVhc3Qgb25lIGJyYW5jaCBoYXMgd29ya2Zsb3ctcmVsZXZhbnQgbm9kZXMuXG4gICAgLy8gVGhpcyBhdm9pZHMgY3JlYXRpbmcgbm9kZXMgZm9yIHJ1bnRpbWUgYXNzZXJ0aW9ucyBsaWtlIGBpZiAoIWN0eCkgeyB0aHJvdyAuLi4gfWBcbiAgICBjb25zdCB0aGVuSGFzTm9kZXMgPSB0aGVuUmVzdWx0Lm5vZGVzLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgZWxzZUhhc05vZGVzID0gZWxzZVJlc3VsdCA/IGVsc2VSZXN1bHQubm9kZXMubGVuZ3RoID4gMCA6IGZhbHNlO1xuXG4gICAgaWYgKHRoZW5IYXNOb2RlcyB8fCBlbHNlSGFzTm9kZXMpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29uZGl0aW9uYWwgZGVjaXNpb24gbm9kZVxuICAgICAgY29uc3QgY29uZGl0aW9uVGV4dCA9IGdldENvbmRpdGlvblRleHQoc3RtdC50ZXN0KTtcbiAgICAgIGNvbnN0IGNvbmROb2RlSWQgPSBgJHtjb25kaXRpb25hbElkfV9ub2RlYDtcbiAgICAgIGNvbnN0IGNvbmRNZXRhZGF0YTogTm9kZU1ldGFkYXRhID0ge307XG4gICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgY29uZE1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb25kTm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICBpZDogY29uZE5vZGVJZCxcbiAgICAgICAgdHlwZTogJ2NvbmRpdGlvbmFsJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGxhYmVsOiBjb25kaXRpb25UZXh0LFxuICAgICAgICAgIG5vZGVLaW5kOiAnY29uZGl0aW9uYWwnLFxuICAgICAgICB9LFxuICAgICAgICBtZXRhZGF0YTpcbiAgICAgICAgICBPYmplY3Qua2V5cyhjb25kTWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBjb25kTWV0YWRhdGEgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgbm9kZXMucHVzaChjb25kTm9kZSk7XG5cbiAgICAgIC8vIFRoZSBjb25kaXRpb25hbCBub2RlIGlzIHRoZSBlbnRyeSBwb2ludFxuICAgICAgZW50cnlOb2RlSWRzLnB1c2goY29uZE5vZGVJZCk7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGVuUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgIGlmICghbm9kZS5tZXRhZGF0YSkgbm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICBub2RlLm1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb25kaXRpb25hbElkO1xuICAgICAgICBub2RlLm1ldGFkYXRhLmNvbmRpdGlvbmFsQnJhbmNoID0gJ1RoZW4nO1xuICAgICAgfVxuXG4gICAgICBub2Rlcy5wdXNoKC4uLnRoZW5SZXN1bHQubm9kZXMpO1xuICAgICAgZWRnZXMucHVzaCguLi50aGVuUmVzdWx0LmVkZ2VzKTtcblxuICAgICAgLy8gQ3JlYXRlIGVkZ2UgZnJvbSBjb25kaXRpb25hbCBub2RlIHRvIFwidGhlblwiIGJyYW5jaCB3aXRoIFwidHJ1ZVwiIGxhYmVsXG4gICAgICBmb3IgKGNvbnN0IHRoZW5FbnRyeUlkIG9mIHRoZW5SZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgIGlkOiBgZV8ke2NvbmROb2RlSWR9XyR7dGhlbkVudHJ5SWR9X3RydWVgLFxuICAgICAgICAgIHNvdXJjZTogY29uZE5vZGVJZCxcbiAgICAgICAgICB0YXJnZXQ6IHRoZW5FbnRyeUlkLFxuICAgICAgICAgIHR5cGU6ICdjb25kaXRpb25hbCcsXG4gICAgICAgICAgbGFiZWw6ICd0cnVlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnRoZW5SZXN1bHQuZXhpdE5vZGVJZHMpO1xuXG4gICAgICBpZiAoZWxzZVJlc3VsdCkge1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZWxzZVJlc3VsdC5ub2Rlcykge1xuICAgICAgICAgIGlmICghbm9kZS5tZXRhZGF0YSkgbm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICAgIG5vZGUubWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbmRpdGlvbmFsSWQ7XG4gICAgICAgICAgbm9kZS5tZXRhZGF0YS5jb25kaXRpb25hbEJyYW5jaCA9ICdFbHNlJztcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGVzLnB1c2goLi4uZWxzZVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4uZWxzZVJlc3VsdC5lZGdlcyk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGVkZ2UgZnJvbSBjb25kaXRpb25hbCBub2RlIHRvIFwiZWxzZVwiIGJyYW5jaCB3aXRoIFwiZmFsc2VcIiBsYWJlbFxuICAgICAgICBmb3IgKGNvbnN0IGVsc2VFbnRyeUlkIG9mIGVsc2VSZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICBpZDogYGVfJHtjb25kTm9kZUlkfV8ke2Vsc2VFbnRyeUlkfV9mYWxzZWAsXG4gICAgICAgICAgICBzb3VyY2U6IGNvbmROb2RlSWQsXG4gICAgICAgICAgICB0YXJnZXQ6IGVsc2VFbnRyeUlkLFxuICAgICAgICAgICAgdHlwZTogJ2NvbmRpdGlvbmFsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnZmFsc2UnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4uZWxzZVJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE5vdGU6IFdoZW4gdGhlcmUncyBubyBlbHNlIGJyYW5jaCwgd2UgZG9uJ3QgYWRkIHRoZSBjb25kaXRpb25hbCBub2RlIGFzIGFuIGV4aXQuXG4gICAgLy8gVGhlIHRoZW4tYnJhbmNoIGV4aXRzIGFyZSB0aGUgb25seSBleGl0cy4gVGhpcyBtZWFucyB0aGUgZ3JhcGggc2hvd3MgdGhlIFwidHJ1ZVwiIHBhdGg7XG4gICAgLy8gdGhlIFwiZmFsc2VcIiBjYXNlICh3aGVuIGNvbmRpdGlvbiBpcyBmYWxzZSBhbmQgdGhlcmUncyBubyBlbHNlKSBpbXBsaWNpdGx5IG1lYW5zXG4gICAgLy8gZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIG5vIHN0ZXBzIGZyb20gdGhpcyBpZiBzdGF0ZW1lbnQuXG4gICAgLy9cbiAgICAvLyBXaGVuIGJvdGggYnJhbmNoZXMgaGF2ZSBubyB3b3JrZmxvdy1yZWxldmFudCBub2RlcyAoZS5nLiwgcnVudGltZSBhc3NlcnRpb25zIGxpa2VcbiAgICAvLyBgaWYgKCFjdHgpIHsgdGhyb3cgLi4uIH1gKSwgd2Ugc2tpcCBjcmVhdGluZyB0aGUgY29uZGl0aW9uYWwgbm9kZSBlbnRpcmVseS5cblxuICAgIGNvbnRleHQuaW5Db25kaXRpb25hbCA9IHNhdmVkQ29uZGl0aW9uYWw7XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnV2hpbGVTdGF0ZW1lbnQnIHx8IHN0bXQudHlwZSA9PT0gJ0ZvclN0YXRlbWVudCcpIHtcbiAgICBjb25zdCBib2R5ID1cbiAgICAgIHN0bXQudHlwZSA9PT0gJ1doaWxlU3RhdGVtZW50JyA/IHN0bXQuYm9keSA6IChzdG10IGFzIGFueSkuYm9keTtcblxuICAgIC8vIE9ubHkgdHJlYXQgYXMgYSBsb29wIGlmIHRoZSBib2R5IGNvbnRhaW5zIGF3YWl0IGV4cHJlc3Npb25zXG4gICAgLy8gT3RoZXJ3aXNlIGl0J3MgbGlrZWx5IGEgXCJjb2xsZWN0IHByb21pc2VzXCIgcGF0dGVybiAoZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbilcbiAgICBjb25zdCBoYXNBd2FpdCA9IGNvbnRhaW5zQXdhaXRFeHByZXNzaW9uKGJvZHkpO1xuXG4gICAgY29uc3QgbG9vcElkID0gaGFzQXdhaXQgPyBgbG9vcF8ke2NvbnRleHQubG9vcENvdW50ZXIrK31gIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNhdmVkTG9vcCA9IGNvbnRleHQuaW5Mb29wO1xuICAgIGlmIChsb29wSWQpIHtcbiAgICAgIGNvbnRleHQuaW5Mb29wID0gbG9vcElkO1xuICAgIH1cblxuICAgIGlmIChib2R5LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICAgIGNvbnN0IGxvb3BSZXN1bHQgPSBhbmFseXplQmxvY2soXG4gICAgICAgIGJvZHkuc3RtdHMsXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgLy8gT25seSBhZGQgbG9vcCBtZXRhZGF0YSBpZiB0aGlzIGlzIHRydWx5IGEgbG9vcGluZyBwYXR0ZXJuXG4gICAgICBpZiAobG9vcElkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBsb29wUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBsb29wSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaCguLi5sb29wUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubG9vcFJlc3VsdC5lZGdlcyk7XG4gICAgICBlbnRyeU5vZGVJZHMgPSBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICAgIGV4aXROb2RlSWRzID0gbG9vcFJlc3VsdC5leGl0Tm9kZUlkcztcblxuICAgICAgLy8gT25seSBjcmVhdGUgbG9vcC1iYWNrIGVkZ2VzIGlmIHRoaXMgaXMgdHJ1bHkgYSBsb29waW5nIHBhdHRlcm5cbiAgICAgIGlmIChsb29wSWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBleGl0SWQgb2YgbG9vcFJlc3VsdC5leGl0Tm9kZUlkcykge1xuICAgICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcykge1xuICAgICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBgZV8ke2V4aXRJZH1fYmFja18ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgICAgc291cmNlOiBleGl0SWQsXG4gICAgICAgICAgICAgIHRhcmdldDogZW50cnlJZCxcbiAgICAgICAgICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBzaW5nbGUtc3RhdGVtZW50IGJvZHkgKG5vIGJyYWNlcylcbiAgICAgIGNvbnN0IGxvb3BSZXN1bHQgPSBhbmFseXplU3RhdGVtZW50KFxuICAgICAgICBib2R5LFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG5cbiAgICAgIC8vIE9ubHkgYWRkIGxvb3AgbWV0YWRhdGEgaWYgdGhpcyBpcyB0cnVseSBhIGxvb3BpbmcgcGF0dGVyblxuICAgICAgaWYgKGxvb3BJZCkge1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbG9vcFJlc3VsdC5ub2Rlcykge1xuICAgICAgICAgIGlmICghbm9kZS5tZXRhZGF0YSkgbm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElkID0gbG9vcElkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vZGVzLnB1c2goLi4ubG9vcFJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLmxvb3BSZXN1bHQuZWRnZXMpO1xuICAgICAgZW50cnlOb2RlSWRzID0gbG9vcFJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgICBleGl0Tm9kZUlkcyA9IGxvb3BSZXN1bHQuZXhpdE5vZGVJZHM7XG5cbiAgICAgIC8vIE9ubHkgY3JlYXRlIGxvb3AtYmFjayBlZGdlcyBpZiB0aGlzIGlzIHRydWx5IGEgbG9vcGluZyBwYXR0ZXJuXG4gICAgICBpZiAobG9vcElkKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXhpdElkIG9mIGxvb3BSZXN1bHQuZXhpdE5vZGVJZHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgbG9vcFJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICAgIGVkZ2VzLnB1c2goe1xuICAgICAgICAgICAgICBpZDogYGVfJHtleGl0SWR9X2JhY2tfJHtlbnRyeUlkfWAsXG4gICAgICAgICAgICAgIHNvdXJjZTogZXhpdElkLFxuICAgICAgICAgICAgICB0YXJnZXQ6IGVudHJ5SWQsXG4gICAgICAgICAgICAgIHR5cGU6ICdsb29wJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHQuaW5Mb29wID0gc2F2ZWRMb29wO1xuICB9XG5cbiAgaWYgKHN0bXQudHlwZSA9PT0gJ0Zvck9mU3RhdGVtZW50Jykge1xuICAgIGNvbnN0IGxvb3BJZCA9IGBsb29wXyR7Y29udGV4dC5sb29wQ291bnRlcisrfWA7XG4gICAgY29uc3Qgc2F2ZWRMb29wID0gY29udGV4dC5pbkxvb3A7XG4gICAgY29udGV4dC5pbkxvb3AgPSBsb29wSWQ7XG5cbiAgICBjb25zdCBpc0F3YWl0ID0gKHN0bXQgYXMgYW55KS5pc0F3YWl0IHx8IChzdG10IGFzIGFueSkuYXdhaXQ7XG4gICAgY29uc3QgYm9keSA9IChzdG10IGFzIGFueSkuYm9keTtcblxuICAgIGlmIChib2R5LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICAgIGNvbnN0IGxvb3BSZXN1bHQgPSBhbmFseXplQmxvY2soXG4gICAgICAgIGJvZHkuc3RtdHMsXG4gICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICB2YXJpYWJsZU1hcFxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIGxvb3BSZXN1bHQubm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElkID0gbG9vcElkO1xuICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJc0F3YWl0ID0gaXNBd2FpdDtcbiAgICAgIH1cblxuICAgICAgbm9kZXMucHVzaCguLi5sb29wUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubG9vcFJlc3VsdC5lZGdlcyk7XG4gICAgICBlbnRyeU5vZGVJZHMgPSBsb29wUmVzdWx0LmVudHJ5Tm9kZUlkcztcbiAgICAgIGV4aXROb2RlSWRzID0gbG9vcFJlc3VsdC5leGl0Tm9kZUlkcztcblxuICAgICAgZm9yIChjb25zdCBleGl0SWQgb2YgbG9vcFJlc3VsdC5leGl0Tm9kZUlkcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgbG9vcFJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBgZV8ke2V4aXRJZH1fYmFja18ke2VudHJ5SWR9YCxcbiAgICAgICAgICAgIHNvdXJjZTogZXhpdElkLFxuICAgICAgICAgICAgdGFyZ2V0OiBlbnRyeUlkLFxuICAgICAgICAgICAgdHlwZTogJ2xvb3AnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBzaW5nbGUtc3RhdGVtZW50IGJvZHkgKG5vIGJyYWNlcylcbiAgICAgIGNvbnN0IGxvb3BSZXN1bHQgPSBhbmFseXplU3RhdGVtZW50KFxuICAgICAgICBib2R5LFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICk7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBsb29wUmVzdWx0Lm5vZGVzKSB7XG4gICAgICAgIGlmICghbm9kZS5tZXRhZGF0YSkgbm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICBub2RlLm1ldGFkYXRhLmxvb3BJZCA9IGxvb3BJZDtcbiAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSXNBd2FpdCA9IGlzQXdhaXQ7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzLnB1c2goLi4ubG9vcFJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLmxvb3BSZXN1bHQuZWRnZXMpO1xuICAgICAgZW50cnlOb2RlSWRzID0gbG9vcFJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgICBleGl0Tm9kZUlkcyA9IGxvb3BSZXN1bHQuZXhpdE5vZGVJZHM7XG5cbiAgICAgIGZvciAoY29uc3QgZXhpdElkIG9mIGxvb3BSZXN1bHQuZXhpdE5vZGVJZHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeUlkIG9mIGxvb3BSZXN1bHQuZW50cnlOb2RlSWRzKSB7XG4gICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICBpZDogYGVfJHtleGl0SWR9X2JhY2tfJHtlbnRyeUlkfWAsXG4gICAgICAgICAgICBzb3VyY2U6IGV4aXRJZCxcbiAgICAgICAgICAgIHRhcmdldDogZW50cnlJZCxcbiAgICAgICAgICAgIHR5cGU6ICdsb29wJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHQuaW5Mb29wID0gc2F2ZWRMb29wO1xuICB9XG5cbiAgLy8gSGFuZGxlIHBsYWluIEJsb2NrU3RhdGVtZW50IChiYXJlIGJsb2NrcyBsaWtlIHsgLi4uIH0pXG4gIGlmIChzdG10LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICBjb25zdCBibG9ja1Jlc3VsdCA9IGFuYWx5emVCbG9jayhcbiAgICAgIChzdG10IGFzIEJsb2NrU3RhdGVtZW50KS5zdG10cyxcbiAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICB2YXJpYWJsZU1hcFxuICAgICk7XG4gICAgbm9kZXMucHVzaCguLi5ibG9ja1Jlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5ibG9ja1Jlc3VsdC5lZGdlcyk7XG4gICAgZW50cnlOb2RlSWRzID0gYmxvY2tSZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgIGV4aXROb2RlSWRzID0gYmxvY2tSZXN1bHQuZXhpdE5vZGVJZHM7XG4gIH1cblxuICBpZiAoc3RtdC50eXBlID09PSAnUmV0dXJuU3RhdGVtZW50JyAmJiAoc3RtdCBhcyBhbnkpLmFyZ3VtZW50KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYW5hbHl6ZUV4cHJlc3Npb24oXG4gICAgICAoc3RtdCBhcyBhbnkpLmFyZ3VtZW50LFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmdW5jdGlvbk1hcCxcbiAgICAgIHZhcmlhYmxlTWFwXG4gICAgKTtcbiAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuICAgIGVudHJ5Tm9kZUlkcyA9IHJlc3VsdC5lbnRyeU5vZGVJZHM7XG4gICAgZXhpdE5vZGVJZHMgPSByZXN1bHQuZXhpdE5vZGVJZHM7XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbn1cblxuLyoqXG4gKiBBbmFseXplIGEgYmxvY2sgb2Ygc3RhdGVtZW50cyB3aXRoIHByb3BlciBzZXF1ZW50aWFsIGNoYWluaW5nXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVCbG9jayhcbiAgc3RtdHM6IFN0YXRlbWVudFtdLFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQsXG4gIGZ1bmN0aW9uTWFwOiBNYXA8c3RyaW5nLCBGdW5jdGlvbkluZm8+LFxuICB2YXJpYWJsZU1hcDogTWFwPHN0cmluZywgYW55PlxuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGxldCBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBjdXJyZW50RXhpdElkczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHN0bXQgb2Ygc3RtdHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhbmFseXplU3RhdGVtZW50KFxuICAgICAgc3RtdCxcbiAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICBjb250ZXh0LFxuICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICB2YXJpYWJsZU1hcFxuICAgICk7XG5cbiAgICBpZiAocmVzdWx0Lm5vZGVzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICBub2Rlcy5wdXNoKC4uLnJlc3VsdC5ub2Rlcyk7XG4gICAgZWRnZXMucHVzaCguLi5yZXN1bHQuZWRnZXMpO1xuXG4gICAgaWYgKGVudHJ5Tm9kZUlkcy5sZW5ndGggPT09IDAgJiYgcmVzdWx0LmVudHJ5Tm9kZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICBlbnRyeU5vZGVJZHMgPSByZXN1bHQuZW50cnlOb2RlSWRzO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50RXhpdElkcy5sZW5ndGggPiAwICYmIHJlc3VsdC5lbnRyeU5vZGVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBwcmV2SWQgb2YgY3VycmVudEV4aXRJZHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeUlkIG9mIHJlc3VsdC5lbnRyeU5vZGVJZHMpIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gcmVzdWx0Lm5vZGVzLmZpbmQoKG4pID0+IG4uaWQgPT09IGVudHJ5SWQpO1xuICAgICAgICAgIGNvbnN0IGVkZ2VUeXBlID0gdGFyZ2V0Tm9kZT8ubWV0YWRhdGE/LnBhcmFsbGVsR3JvdXBJZFxuICAgICAgICAgICAgPyAncGFyYWxsZWwnXG4gICAgICAgICAgICA6ICdkZWZhdWx0JztcbiAgICAgICAgICBlZGdlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBgZV8ke3ByZXZJZH1fJHtlbnRyeUlkfWAsXG4gICAgICAgICAgICBzb3VyY2U6IHByZXZJZCxcbiAgICAgICAgICAgIHRhcmdldDogZW50cnlJZCxcbiAgICAgICAgICAgIHR5cGU6IGVkZ2VUeXBlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5leGl0Tm9kZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICBjdXJyZW50RXhpdElkcyA9IHJlc3VsdC5leGl0Tm9kZUlkcztcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHM6IGN1cnJlbnRFeGl0SWRzIH07XG59XG5cbi8qKlxuICogQW5hbHl6ZSBhbiBleHByZXNzaW9uIGFuZCBleHRyYWN0IHN0ZXAgY2FsbHNcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZUV4cHJlc3Npb24oXG4gIGV4cHI6IEV4cHJlc3Npb24sXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCxcbiAgZnVuY3Rpb25NYXA6IE1hcDxzdHJpbmcsIEZ1bmN0aW9uSW5mbz4sXG4gIHZhcmlhYmxlTWFwOiBNYXA8c3RyaW5nLCBhbnk+LFxuICB2aXNpdGVkRnVuY3Rpb25zOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKVxuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGNvbnN0IGVudHJ5Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZXhpdE5vZGVJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGV4cHIudHlwZSA9PT0gJ0F3YWl0RXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCBhd2FpdGVkRXhwciA9IGV4cHIuYXJndW1lbnQ7XG4gICAgaWYgKGF3YWl0ZWRFeHByLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicpIHtcbiAgICAgIGNvbnN0IGNhbGxFeHByID0gYXdhaXRlZEV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG5cbiAgICAgIC8vIENoZWNrIGZvciBQcm9taXNlLmFsbC9yYWNlL2FsbFNldHRsZWQvYW55XG4gICAgICBpZiAoY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICBjb25zdCBtZW1iZXIgPSBjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1lbWJlci5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAgICAgKG1lbWJlci5vYmplY3QgYXMgSWRlbnRpZmllcikudmFsdWUgPT09ICdQcm9taXNlJyAmJlxuICAgICAgICAgIG1lbWJlci5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbWV0aG9kID0gKG1lbWJlci5wcm9wZXJ0eSBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgICBpZiAoWydhbGwnLCAncmFjZScsICdhbGxTZXR0bGVkJywgJ2FueSddLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFsbGVsSWQgPSBgcGFyYWxsZWxfJHtjb250ZXh0LnBhcmFsbGVsQ291bnRlcisrfWA7XG5cbiAgICAgICAgICAgIGlmIChjYWxsRXhwci5hcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBhcmcgPSBjYWxsRXhwci5hcmd1bWVudHNbMF0uZXhwcmVzc2lvbjtcbiAgICAgICAgICAgICAgaWYgKGFyZy50eXBlID09PSAnQXJyYXlFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhcmcuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Py5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1SZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZWxlbVJlc3VsdC5ub2Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5tZXRhZGF0YSkgbm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEucGFyYWxsZWxHcm91cElkID0gcGFyYWxsZWxJZDtcbiAgICAgICAgICAgICAgICAgICAgICBub2RlLm1ldGFkYXRhLnBhcmFsbGVsTWV0aG9kID0gbWV0aG9kO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5tZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKC4uLmVsZW1SZXN1bHQubm9kZXMpO1xuICAgICAgICAgICAgICAgICAgICBlZGdlcy5wdXNoKC4uLmVsZW1SZXN1bHQuZWRnZXMpO1xuICAgICAgICAgICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaCguLi5lbGVtUmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICAgICAgICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4uZWxlbVJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGFyZy50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgICAgICAgICAgICBjb250ZXh0LnByb21pc2VBcnJheXMuaGFzKChhcmcgYXMgSWRlbnRpZmllcikudmFsdWUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBQcm9taXNlLmFsbCh2YXJpYWJsZU5hbWUpIHdoZXJlIHZhcmlhYmxlIHdhcyBidWlsdCB2aWEgcHVzaCgpXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlOYW1lID0gKGFyZyBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFja2VkTm9kZXMgPSBjb250ZXh0LnByb21pc2VBcnJheXMuZ2V0KGFycmF5TmFtZSk7XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgcGFyYWxsZWxHcm91cElkIHRvIGFsbCBub2RlcyB0aGF0IHdlcmUgcHVzaGVkIHRvIHRoaXMgYXJyYXlcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tlZE5vZGVzICYmIHRyYWNrZWROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRyYWNrZWROb2RlIG9mIHRyYWNrZWROb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRyYWNrZWROb2RlLm1ldGFkYXRhKSB0cmFja2VkTm9kZS5tZXRhZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0cmFja2VkTm9kZS5tZXRhZGF0YS5wYXJhbGxlbEdyb3VwSWQgPSBwYXJhbGxlbElkO1xuICAgICAgICAgICAgICAgICAgICB0cmFja2VkTm9kZS5tZXRhZGF0YS5wYXJhbGxlbE1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdHJhY2tlZE5vZGUubWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRyYWNrZWQgbm9kZSBJRHMgZm9yIHByb3BlciBlZGdlIGNvbm5lY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKHRyYWNrZWROb2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaCh0cmFja2VkTm9kZS5pZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBub24tYXJyYXkgYXJndW1lbnRzIGxpa2UgYXJyYXkubWFwKHN0ZXBGbilcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdSZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgICAgICAgICAgICB2YXJpYWJsZU1hcCxcbiAgICAgICAgICAgICAgICAgIHZpc2l0ZWRGdW5jdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGFyZ1Jlc3VsdC5ub2Rlcykge1xuICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLm1ldGFkYXRhKSBub2RlLm1ldGFkYXRhID0ge307XG4gICAgICAgICAgICAgICAgICBub2RlLm1ldGFkYXRhLnBhcmFsbGVsR3JvdXBJZCA9IHBhcmFsbGVsSWQ7XG4gICAgICAgICAgICAgICAgICBub2RlLm1ldGFkYXRhLnBhcmFsbGVsTWV0aG9kID0gbWV0aG9kO1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaCguLi5hcmdSZXN1bHQubm9kZXMpO1xuICAgICAgICAgICAgICAgIGVkZ2VzLnB1c2goLi4uYXJnUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaCguLi5hcmdSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLmFyZ1Jlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZ3VsYXIgY2FsbCAtIGNoZWNrIGlmIGl0J3MgYSBzdGVwLCB3b3JrZmxvdyBwcmltaXRpdmUsIG9yIGhlbHBlciBmdW5jdGlvblxuICAgICAgaWYgKGNhbGxFeHByLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgY29uc3QgZnVuY05hbWUgPSAoY2FsbEV4cHIuY2FsbGVlIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KGZ1bmNOYW1lKTtcblxuICAgICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcblxuICAgICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbGFiZWw6IGdldE9yaWdpbmFsU3RlcE5hbWUoc3RlcEluZm8uc3RlcElkLCBmdW5jTmFtZSksXG4gICAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKFdPUktGTE9XX1BSSU1JVElWRVMuaGFzKGZ1bmNOYW1lKSkge1xuICAgICAgICAgIC8vIEhhbmRsZSB3b3JrZmxvdyBwcmltaXRpdmVzIGxpa2Ugc2xlZXBcbiAgICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcblxuICAgICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICAgIHR5cGU6ICdwcmltaXRpdmUnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICAgICAgICAgIG5vZGVLaW5kOiAncHJpbWl0aXZlJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXRhZGF0YTogT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2l0aXZlUmVzdWx0ID0gYW5hbHl6ZVRyYW5zaXRpdmVDYWxsKFxuICAgICAgICAgICAgZnVuY05hbWUsXG4gICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgICAgdmFyaWFibGVNYXAsXG4gICAgICAgICAgICB2aXNpdGVkRnVuY3Rpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnRyYW5zaXRpdmVSZXN1bHQubm9kZXMpO1xuICAgICAgICAgIGVkZ2VzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5lZGdlcyk7XG4gICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWxzbyBhbmFseXplIHRoZSBhcmd1bWVudHMgb2YgYXdhaXRlZCBjYWxscyBmb3Igc3RlcCByZWZlcmVuY2VzIGluIG9iamVjdHNcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIGNhbGxFeHByLmFyZ3VtZW50cykge1xuICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24/LnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgICAgIGNvbnN0IHJlZlJlc3VsdCA9IGFuYWx5emVPYmplY3RGb3JTdGVwUmVmZXJlbmNlcyhcbiAgICAgICAgICAgIGFyZy5leHByZXNzaW9uLFxuICAgICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgbm9kZXMucHVzaCguLi5yZWZSZXN1bHQubm9kZXMpO1xuICAgICAgICAgIGVkZ2VzLnB1c2goLi4ucmVmUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaCguLi5yZWZSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYXdhaXQgb24gYSB3ZWJob29rL2hvb2sgdmFyaWFibGU6IGF3YWl0IHdlYmhvb2tcbiAgICBpZiAoYXdhaXRlZEV4cHIudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBjb25zdCB2YXJOYW1lID0gKGF3YWl0ZWRFeHByIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgaWYgKGNvbnRleHQud2ViaG9va1ZhcmlhYmxlcy5oYXModmFyTmFtZSkpIHtcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IE5vZGVNZXRhZGF0YSA9IHt9O1xuXG4gICAgICAgIGlmIChjb250ZXh0LmluTG9vcCkge1xuICAgICAgICAgIG1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICBtZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29udGV4dC5pbkNvbmRpdGlvbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgdHlwZTogJ3ByaW1pdGl2ZScsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbGFiZWw6ICdhd2FpdFdlYmhvb2snLFxuICAgICAgICAgICAgbm9kZUtpbmQ6ICdwcmltaXRpdmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0YWRhdGE6IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPiAwID8gbWV0YWRhdGEgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE5vbi1hd2FpdGVkIGNhbGwgZXhwcmVzc2lvblxuICBpZiAoZXhwci50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nKSB7XG4gICAgY29uc3QgY2FsbEV4cHIgPSBleHByIGFzIENhbGxFeHByZXNzaW9uO1xuICAgIGlmIChjYWxsRXhwci5jYWxsZWUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBjb25zdCBmdW5jTmFtZSA9IChjYWxsRXhwci5jYWxsZWUgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KGZ1bmNOYW1lKTtcblxuICAgICAgaWYgKHN0ZXBJbmZvKSB7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcblxuICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICBtZXRhZGF0YS5sb29wSWQgPSBjb250ZXh0LmluTG9vcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGV4dC5pbkNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgbWV0YWRhdGEuY29uZGl0aW9uYWxJZCA9IGNvbnRleHQuaW5Db25kaXRpb25hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogZ2V0T3JpZ2luYWxTdGVwTmFtZShzdGVwSW5mby5zdGVwSWQsIGZ1bmNOYW1lKSxcbiAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICBzdGVwSWQ6IHN0ZXBJbmZvLnN0ZXBJZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiBPYmplY3Qua2V5cyhtZXRhZGF0YSkubGVuZ3RoID4gMCA/IG1ldGFkYXRhIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuXG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgIH0gZWxzZSBpZiAoV09SS0ZMT1dfUFJJTUlUSVZFUy5oYXMoZnVuY05hbWUpKSB7XG4gICAgICAgIC8vIEhhbmRsZSBub24tYXdhaXRlZCB3b3JrZmxvdyBwcmltaXRpdmVzIGxpa2UgY3JlYXRlSG9vaywgY3JlYXRlV2ViaG9va1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICBjb25zdCBtZXRhZGF0YTogTm9kZU1ldGFkYXRhID0ge307XG5cbiAgICAgICAgaWYgKGNvbnRleHQuaW5Mb29wKSB7XG4gICAgICAgICAgbWV0YWRhdGEubG9vcElkID0gY29udGV4dC5pbkxvb3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQuaW5Db25kaXRpb25hbCkge1xuICAgICAgICAgIG1ldGFkYXRhLmNvbmRpdGlvbmFsSWQgPSBjb250ZXh0LmluQ29uZGl0aW9uYWw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICB0eXBlOiAncHJpbWl0aXZlJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogZnVuY05hbWUsXG4gICAgICAgICAgICBub2RlS2luZDogJ3ByaW1pdGl2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXRhZGF0YTogT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcblxuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0cmFuc2l0aXZlUmVzdWx0ID0gYW5hbHl6ZVRyYW5zaXRpdmVDYWxsKFxuICAgICAgICAgIGZ1bmNOYW1lLFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICB2YXJpYWJsZU1hcCxcbiAgICAgICAgICB2aXNpdGVkRnVuY3Rpb25zXG4gICAgICAgICk7XG4gICAgICAgIG5vZGVzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4udHJhbnNpdGl2ZVJlc3VsdC5lZGdlcyk7XG4gICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnRyYW5zaXRpdmVSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi50cmFuc2l0aXZlUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBmb3Igc3RlcCByZWZlcmVuY2VzIGluIG9iamVjdCBsaXRlcmFsc1xuICBpZiAoZXhwci50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCByZWZSZXN1bHQgPSBhbmFseXplT2JqZWN0Rm9yU3RlcFJlZmVyZW5jZXMoXG4gICAgICBleHByLFxuICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgIGNvbnRleHQsXG4gICAgICAnJ1xuICAgICk7XG4gICAgbm9kZXMucHVzaCguLi5yZWZSZXN1bHQubm9kZXMpO1xuICAgIGVkZ2VzLnB1c2goLi4ucmVmUmVzdWx0LmVkZ2VzKTtcbiAgICBlbnRyeU5vZGVJZHMucHVzaCguLi5yZWZSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gIH1cblxuICAvLyBDaGVjayBmb3Igc3RlcCByZWZlcmVuY2VzIGFuZCBzdGVwIGNhbGxzIGluIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzXG4gIC8vIFNraXAgZm9yIGFycmF5IG1ldGhvZHMgKG1hcCwgZm9yRWFjaCwgZXRjLikgd2hpY2ggaGF2ZSBhIHNwZWNpYWxpemVkIGhhbmRsZXIgYmVsb3dcbiAgaWYgKGV4cHIudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IGNhbGxFeHByID0gZXhwciBhcyBDYWxsRXhwcmVzc2lvbjtcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gYXJyYXkgbWV0aG9kIGNhbGwgLSBpZiBzbywgc2tpcCB0aGUgZ2VuZXJpYyBoYW5kbGVyXG4gICAgLy8gYW5kIGxldCB0aGUgc3BlY2lhbGl6ZWQgaGFuZGxlciBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24gaGFuZGxlIGl0XG4gICAgY29uc3QgaXNBcnJheU1ldGhvZENhbGwgPVxuICAgICAgY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJlxuICAgICAgKGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uKS5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicgJiZcbiAgICAgIFsnbWFwJywgJ2ZvckVhY2gnLCAnZmlsdGVyJywgJ2ZpbmQnLCAnc29tZScsICdldmVyeScsICdmbGF0TWFwJ10uaW5jbHVkZXMoXG4gICAgICAgICgoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLnByb3BlcnR5IGFzIElkZW50aWZpZXIpLnZhbHVlXG4gICAgICApO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIC5wdXNoKCkgY2FsbCBvbiBhIHRyYWNrZWQgcHJvbWlzZSBhcnJheVxuICAgIC8vIFBhdHRlcm46IHByb21pc2VzLnB1c2goc3RlcENhbGwoKSlcbiAgICBsZXQgcHVzaEFycmF5TmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKFxuICAgICAgY2FsbEV4cHIuY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJlxuICAgICAgKGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uKS5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgICAoY2FsbEV4cHIuY2FsbGVlIGFzIE1lbWJlckV4cHJlc3Npb24pLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgKChjYWxsRXhwci5jYWxsZWUgYXMgTWVtYmVyRXhwcmVzc2lvbikucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWUgPT09XG4gICAgICAgICdwdXNoJ1xuICAgICkge1xuICAgICAgY29uc3Qgb2JqTmFtZSA9IChcbiAgICAgICAgKGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uKS5vYmplY3QgYXMgSWRlbnRpZmllclxuICAgICAgKS52YWx1ZTtcbiAgICAgIGlmIChjb250ZXh0LnByb21pc2VBcnJheXMuaGFzKG9iak5hbWUpKSB7XG4gICAgICAgIHB1c2hBcnJheU5hbWUgPSBvYmpOYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYXJnIG9mIGNhbGxFeHByLmFyZ3VtZW50cykge1xuICAgICAgaWYgKGFyZy5leHByZXNzaW9uKSB7XG4gICAgICAgIC8vIEZvciBhcnJheSBtZXRob2QgY2FsbHMsIHNraXAgc3RlcCBpZGVudGlmaWVyIGRldGVjdGlvbiBoZXJlXG4gICAgICAgIC8vIHNpbmNlIHdlIGhhdmUgYSBzcGVjaWFsaXplZCBoYW5kbGVyIGZvciB0aG9zZVxuICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24udHlwZSA9PT0gJ0lkZW50aWZpZXInICYmICFpc0FycmF5TWV0aG9kQ2FsbCkge1xuICAgICAgICAgIGNvbnN0IGFyZ05hbWUgPSAoYXJnLmV4cHJlc3Npb24gYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgICAgY29uc3Qgc3RlcEluZm8gPSBzdGVwRGVjbGFyYXRpb25zLmdldChhcmdOYW1lKTtcbiAgICAgICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBgJHtnZXRPcmlnaW5hbFN0ZXBOYW1lKHN0ZXBJbmZvLnN0ZXBJZCwgYXJnTmFtZSl9IChyZWYpYCxcbiAgICAgICAgICAgICAgICBub2RlS2luZDogJ3N0ZXAnLFxuICAgICAgICAgICAgICAgIHN0ZXBJZDogc3RlcEluZm8uc3RlcElkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIGlzU3RlcFJlZmVyZW5jZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VDb250ZXh0OiAnZnVuY3Rpb24gYXJndW1lbnQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBIYW5kbGUgc3RlcCBjYWxscyBwYXNzZWQgYXMgYXJndW1lbnRzIChlLmcuLCBwcm9taXNlcy5wdXNoKHN0ZXBDYWxsKCkpKVxuICAgICAgICAvLyBOb3RlOiBEb24ndCBhZGQgbG9vcElkIGhlcmUgLSB0aGVzZSBhcmUgbm9uLWF3YWl0ZWQgY2FsbHMgYmVpbmcgY29sbGVjdGVkXG4gICAgICAgIC8vIGZvciBwYXJhbGxlbCBleGVjdXRpb24gKGxpa2UgUHJvbWlzZS5hbGwpLCBub3QgdHJ1bHkgbG9vcGluZyBjYWxsc1xuICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24udHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJykge1xuICAgICAgICAgIGNvbnN0IGFyZ0NhbGxFeHByID0gYXJnLmV4cHJlc3Npb24gYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgICAgICAgaWYgKGFyZ0NhbGxFeHByLmNhbGxlZS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmNOYW1lID0gKGFyZ0NhbGxFeHByLmNhbGxlZSBhcyBJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoZnVuY05hbWUpO1xuICAgICAgICAgICAgaWYgKHN0ZXBJbmZvKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgLy8gRG9uJ3QgYWRkIGxvb3BJZCAtIHRoaXMgaXMgYSBub24tYXdhaXRlZCBjYWxsLCBsaWtlbHkgYmVpbmdcbiAgICAgICAgICAgICAgLy8gY29sbGVjdGVkIGZvciBwYXJhbGxlbCBleGVjdXRpb24gKFByb21pc2UuYWxsIHBhdHRlcm4pXG4gICAgICAgICAgICAgIGlmIChjb250ZXh0LmluQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29udGV4dC5pbkNvbmRpdGlvbmFsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0T3JpZ2luYWxTdGVwTmFtZShzdGVwSW5mby5zdGVwSWQsIGZ1bmNOYW1lKSxcbiAgICAgICAgICAgICAgICAgIG5vZGVLaW5kOiAnc3RlcCcsXG4gICAgICAgICAgICAgICAgICBzdGVwSWQ6IHN0ZXBJbmZvLnN0ZXBJZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOlxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBiZWluZyBwdXNoZWQgdG8gYSB0cmFja2VkIHByb21pc2UgYXJyYXksIHN0b3JlIHRoZSBub2RlXG4gICAgICAgICAgICAgIC8vIHNvIHdlIGNhbiBhcHBseSBwYXJhbGxlbEdyb3VwSWQgd2hlbiBQcm9taXNlLmFsbCBpcyByZWFjaGVkXG4gICAgICAgICAgICAgIGlmIChwdXNoQXJyYXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhY2tlZE5vZGVzID0gY29udGV4dC5wcm9taXNlQXJyYXlzLmdldChwdXNoQXJyYXlOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tlZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICB0cmFja2VkTm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24udHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVmUmVzdWx0ID0gYW5hbHl6ZU9iamVjdEZvclN0ZXBSZWZlcmVuY2VzKFxuICAgICAgICAgICAgYXJnLmV4cHJlc3Npb24sXG4gICAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBub2Rlcy5wdXNoKC4uLnJlZlJlc3VsdC5ub2Rlcyk7XG4gICAgICAgICAgZWRnZXMucHVzaCguLi5yZWZSZXN1bHQuZWRnZXMpO1xuICAgICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4ucmVmUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGZvciBzdGVwIHJlZmVyZW5jZXMgaW4gJ25ldycgZXhwcmVzc2lvbnNcbiAgaWYgKGV4cHIudHlwZSA9PT0gJ05ld0V4cHJlc3Npb24nKSB7XG4gICAgY29uc3QgbmV3RXhwciA9IGV4cHIgYXMgYW55O1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIER1cmFibGVBZ2VudCBpbnN0YW50aWF0aW9uXG4gICAgY29uc3QgaXNEdXJhYmxlQWdlbnQgPVxuICAgICAgbmV3RXhwci5jYWxsZWU/LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgICAgbmV3RXhwci5jYWxsZWU/LnZhbHVlID09PSAnRHVyYWJsZUFnZW50JztcblxuICAgIGlmIChpc0R1cmFibGVBZ2VudCAmJiBuZXdFeHByLmFyZ3VtZW50cz8ubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQ3JlYXRlIGEgbm9kZSBmb3IgdGhlIER1cmFibGVBZ2VudCBpdHNlbGZcbiAgICAgIGNvbnN0IGFnZW50Tm9kZUlkID0gYG5vZGVfJHtjb250ZXh0Lm5vZGVDb3VudGVyKyt9YDtcbiAgICAgIGNvbnN0IGFnZW50Tm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICBpZDogYWdlbnROb2RlSWQsXG4gICAgICAgIHR5cGU6ICdhZ2VudCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsYWJlbDogJ0R1cmFibGVBZ2VudCcsXG4gICAgICAgICAgbm9kZUtpbmQ6ICdhZ2VudCcsXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgaXNTdGVwUmVmZXJlbmNlOiB0cnVlLFxuICAgICAgICAgIHJlZmVyZW5jZUNvbnRleHQ6ICdEdXJhYmxlQWdlbnQnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIG5vZGVzLnB1c2goYWdlbnROb2RlKTtcbiAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKGFnZW50Tm9kZUlkKTtcblxuICAgICAgLy8gTG9vayBmb3IgdG9vbHMgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAgICAgIGNvbnN0IG9wdGlvbnNBcmcgPSBuZXdFeHByLmFyZ3VtZW50c1swXT8uZXhwcmVzc2lvbjtcbiAgICAgIGlmIChvcHRpb25zQXJnPy50eXBlID09PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgY29uc3QgdG9vbHNSZXN1bHQgPSBhbmFseXplRHVyYWJsZUFnZW50VG9vbHMoXG4gICAgICAgICAgb3B0aW9uc0FyZyxcbiAgICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgYWdlbnROb2RlSWQsXG4gICAgICAgICAgdmFyaWFibGVNYXBcbiAgICAgICAgKTtcbiAgICAgICAgbm9kZXMucHVzaCguLi50b29sc1Jlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4udG9vbHNSZXN1bHQuZWRnZXMpO1xuXG4gICAgICAgIC8vIElmIHdlIGZvdW5kIHRvb2xzLCB0aGV5IGFyZSB0aGUgZXhpdCBub2Rlc1xuICAgICAgICBpZiAodG9vbHNSZXN1bHQuZXhpdE5vZGVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goLi4udG9vbHNSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2goYWdlbnROb2RlSWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKGFnZW50Tm9kZUlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5ld0V4cHIuYXJndW1lbnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBuZXdFeHByLmFyZ3VtZW50cykge1xuICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24/LnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgICAgIGNvbnN0IHJlZlJlc3VsdCA9IGFuYWx5emVPYmplY3RGb3JTdGVwUmVmZXJlbmNlcyhcbiAgICAgICAgICAgIGFyZy5leHByZXNzaW9uLFxuICAgICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgbm9kZXMucHVzaCguLi5yZWZSZXN1bHQubm9kZXMpO1xuICAgICAgICAgIGVkZ2VzLnB1c2goLi4ucmVmUmVzdWx0LmVkZ2VzKTtcbiAgICAgICAgICBlbnRyeU5vZGVJZHMucHVzaCguLi5yZWZSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnJlZlJlc3VsdC5leGl0Tm9kZUlkcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgQXNzaWdubWVudEV4cHJlc3Npb24gLSBhbmFseXplIHRoZSByaWdodC1oYW5kIHNpZGVcbiAgaWYgKGV4cHIudHlwZSA9PT0gJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJykge1xuICAgIGNvbnN0IGFzc2lnbkV4cHIgPSBleHByIGFzIGFueTtcbiAgICBpZiAoYXNzaWduRXhwci5yaWdodCkge1xuICAgICAgY29uc3QgcmlnaHRSZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgICAgYXNzaWduRXhwci5yaWdodCxcbiAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZnVuY3Rpb25NYXAsXG4gICAgICAgIHZhcmlhYmxlTWFwLFxuICAgICAgICB2aXNpdGVkRnVuY3Rpb25zXG4gICAgICApO1xuICAgICAgbm9kZXMucHVzaCguLi5yaWdodFJlc3VsdC5ub2Rlcyk7XG4gICAgICBlZGdlcy5wdXNoKC4uLnJpZ2h0UmVzdWx0LmVkZ2VzKTtcbiAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLnJpZ2h0UmVzdWx0LmVudHJ5Tm9kZUlkcyk7XG4gICAgICBleGl0Tm9kZUlkcy5wdXNoKC4uLnJpZ2h0UmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgTWVtYmVyRXhwcmVzc2lvbiBjYWxscyBsaWtlIGFycmF5Lm1hcChzdGVwRm4pIHdoZXJlIHN0ZXAgaXMgcGFzc2VkIGFzIGNhbGxiYWNrXG4gIGlmIChleHByLnR5cGUgPT09ICdDYWxsRXhwcmVzc2lvbicpIHtcbiAgICBjb25zdCBjYWxsRXhwciA9IGV4cHIgYXMgQ2FsbEV4cHJlc3Npb247XG4gICAgaWYgKGNhbGxFeHByLmNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgIGNvbnN0IG1lbWJlciA9IGNhbGxFeHByLmNhbGxlZSBhcyBNZW1iZXJFeHByZXNzaW9uO1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIG1ldGhvZCBjYWxsIGxpa2UgLm1hcCgpLCAuZm9yRWFjaCgpLCAuZmlsdGVyKCkgZXRjLlxuICAgICAgaWYgKG1lbWJlci5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IChtZW1iZXIucHJvcGVydHkgYXMgSWRlbnRpZmllcikudmFsdWU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBbXG4gICAgICAgICAgICAnbWFwJyxcbiAgICAgICAgICAgICdmb3JFYWNoJyxcbiAgICAgICAgICAgICdmaWx0ZXInLFxuICAgICAgICAgICAgJ2ZpbmQnLFxuICAgICAgICAgICAgJ3NvbWUnLFxuICAgICAgICAgICAgJ2V2ZXJ5JyxcbiAgICAgICAgICAgICdmbGF0TWFwJyxcbiAgICAgICAgICBdLmluY2x1ZGVzKG1ldGhvZE5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIGFueSBhcmd1bWVudCBpcyBhIHN0ZXAgZnVuY3Rpb24gcmVmZXJlbmNlXG4gICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgY2FsbEV4cHIuYXJndW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoYXJnLmV4cHJlc3Npb24/LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgICAgICBjb25zdCBhcmdOYW1lID0gKGFyZy5leHByZXNzaW9uIGFzIElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICAgICAgICBjb25zdCBzdGVwSW5mbyA9IHN0ZXBEZWNsYXJhdGlvbnMuZ2V0KGFyZ05hbWUpO1xuICAgICAgICAgICAgICBpZiAoc3RlcEluZm8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhOiBOb2RlTWV0YWRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkxvb3ApIHtcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmxvb3BJZCA9IGNvbnRleHQuaW5Mb29wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5pbkNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICBtZXRhZGF0YS5jb25kaXRpb25hbElkID0gY29udGV4dC5pbkNvbmRpdGlvbmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0ZXAnLFxuICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0T3JpZ2luYWxTdGVwTmFtZShzdGVwSW5mby5zdGVwSWQsIGFyZ05hbWUpLFxuICAgICAgICAgICAgICAgICAgICBub2RlS2luZDogJ3N0ZXAnLFxuICAgICAgICAgICAgICAgICAgICBzdGVwSWQ6IHN0ZXBJbmZvLnN0ZXBJZCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBtZXRhZGF0YTpcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMobWV0YWRhdGEpLmxlbmd0aCA+IDAgPyBtZXRhZGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgICAgICAgICBleGl0Tm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBub2RlcywgZWRnZXMsIGVudHJ5Tm9kZUlkcywgZXhpdE5vZGVJZHMgfTtcbn1cblxuLyoqXG4gKiBBbmFseXplIER1cmFibGVBZ2VudCB0b29scyBwcm9wZXJ0eSB0byBleHRyYWN0IHRvb2wgbm9kZXNcbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZUR1cmFibGVBZ2VudFRvb2xzKFxuICBvcHRpb25zT2JqOiBhbnksXG4gIHN0ZXBEZWNsYXJhdGlvbnM6IE1hcDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfT4sXG4gIGNvbnRleHQ6IEFuYWx5c2lzQ29udGV4dCxcbiAgYWdlbnROb2RlSWQ6IHN0cmluZyxcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT5cbik6IEFuYWx5c2lzUmVzdWx0IHtcbiAgY29uc3Qgbm9kZXM6IE1hbmlmZXN0Tm9kZVtdID0gW107XG4gIGNvbnN0IGVkZ2VzOiBNYW5pZmVzdEVkZ2VbXSA9IFtdO1xuICBjb25zdCBlbnRyeU5vZGVJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGV4aXROb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICghb3B0aW9uc09iai5wcm9wZXJ0aWVzKVxuICAgIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRvb2xzIGZyb20gYW4gT2JqZWN0RXhwcmVzc2lvblxuICBmdW5jdGlvbiBleHRyYWN0VG9vbHNGcm9tT2JqZWN0KHRvb2xzT2JqOiBhbnkpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHRvb2xQcm9wIG9mIHRvb2xzT2JqLnByb3BlcnRpZXMgfHwgW10pIHtcbiAgICAgIGlmICh0b29sUHJvcC50eXBlICE9PSAnS2V5VmFsdWVQcm9wZXJ0eScpIGNvbnRpbnVlO1xuXG4gICAgICBsZXQgdG9vbE5hbWUgPSAnJztcbiAgICAgIGlmICh0b29sUHJvcC5rZXkudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgIHRvb2xOYW1lID0gdG9vbFByb3Aua2V5LnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRvb2xOYW1lKSBjb250aW51ZTtcblxuICAgICAgLy8gTG9vayBmb3IgZXhlY3V0ZSBwcm9wZXJ0eSBpbiB0aGUgdG9vbCBkZWZpbml0aW9uXG4gICAgICBpZiAodG9vbFByb3AudmFsdWUudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5uZXJQcm9wIG9mIHRvb2xQcm9wLnZhbHVlLnByb3BlcnRpZXMgfHwgW10pIHtcbiAgICAgICAgICBpZiAoaW5uZXJQcm9wLnR5cGUgIT09ICdLZXlWYWx1ZVByb3BlcnR5JykgY29udGludWU7XG5cbiAgICAgICAgICBsZXQgaW5uZXJLZXkgPSAnJztcbiAgICAgICAgICBpZiAoaW5uZXJQcm9wLmtleS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICAgIGlubmVyS2V5ID0gaW5uZXJQcm9wLmtleS52YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5uZXJLZXkgPT09ICdleGVjdXRlJyAmJiBpbm5lclByb3AudmFsdWUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwTmFtZSA9IGlubmVyUHJvcC52YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBJbmZvID0gc3RlcERlY2xhcmF0aW9ucy5nZXQoc3RlcE5hbWUpO1xuXG4gICAgICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICAgICAgY29uc3Qgbm9kZTogTWFuaWZlc3ROb2RlID0ge1xuICAgICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgICB0eXBlOiAndG9vbCcsXG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogc3RlcE5hbWUsXG4gICAgICAgICAgICAgICAgbm9kZUtpbmQ6ICd0b29sJyxcbiAgICAgICAgICAgICAgICBzdGVwSWQ6IHN0ZXBJbmZvPy5zdGVwSWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgaXNUb29sOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvb2xOYW1lOiB0b29sTmFtZSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VDb250ZXh0OiBgdG9vbHMuJHt0b29sTmFtZX0uZXhlY3V0ZWAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcblxuICAgICAgICAgICAgLy8gQ29ubmVjdCBhZ2VudCB0byB0aGlzIHRvb2wgd2l0aCB0b29sIGVkZ2UgdHlwZVxuICAgICAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBgZV8ke2FnZW50Tm9kZUlkfV8ke25vZGVJZH1gLFxuICAgICAgICAgICAgICBzb3VyY2U6IGFnZW50Tm9kZUlkLFxuICAgICAgICAgICAgICB0YXJnZXQ6IG5vZGVJZCxcbiAgICAgICAgICAgICAgdHlwZTogJ3Rvb2wnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmluZCB0aGUgJ3Rvb2xzJyBwcm9wZXJ0eVxuICBmb3IgKGNvbnN0IHByb3Agb2Ygb3B0aW9uc09iai5wcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHByb3AudHlwZSAhPT0gJ0tleVZhbHVlUHJvcGVydHknKSBjb250aW51ZTtcblxuICAgIGxldCBrZXlOYW1lID0gJyc7XG4gICAgaWYgKHByb3Aua2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAga2V5TmFtZSA9IHByb3Aua2V5LnZhbHVlO1xuICAgIH1cblxuICAgIGlmIChrZXlOYW1lICE9PSAndG9vbHMnKSBjb250aW51ZTtcblxuICAgIC8vIEhhbmRsZSBpbmxpbmUgdG9vbHMgb2JqZWN0XG4gICAgaWYgKHByb3AudmFsdWUudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICBleHRyYWN0VG9vbHNGcm9tT2JqZWN0KHByb3AudmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0b29scyBhcyBhIHZhcmlhYmxlIHJlZmVyZW5jZSAtIHJlc29sdmUgaXQgZnJvbSB2YXJpYWJsZU1hcFxuICAgIGlmIChwcm9wLnZhbHVlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgY29uc3QgdG9vbHNWYXJOYW1lID0gcHJvcC52YWx1ZS52YWx1ZTtcblxuICAgICAgLy8gVHJ5IHRvIHJlc29sdmUgdGhlIHZhcmlhYmxlIGZyb20gdGhlIHZhcmlhYmxlTWFwIChidW5kbGVkIGNvZGUpXG4gICAgICBjb25zdCByZXNvbHZlZFRvb2xzT2JqID0gdmFyaWFibGVNYXAuZ2V0KHRvb2xzVmFyTmFtZSk7XG5cbiAgICAgIGlmIChyZXNvbHZlZFRvb2xzT2JqICYmIHJlc29sdmVkVG9vbHNPYmoudHlwZSA9PT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAgIC8vIFN1Y2Nlc3NmdWxseSByZXNvbHZlZCAtIGV4dHJhY3QgaW5kaXZpZHVhbCB0b29sc1xuICAgICAgICBleHRyYWN0VG9vbHNGcm9tT2JqZWN0KHJlc29sdmVkVG9vbHNPYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmFsbGJhY2s6IGNyZWF0ZSBhIHBsYWNlaG9sZGVyIG5vZGUgaWYgd2UgY2FuJ3QgcmVzb2x2ZVxuICAgICAgICBjb25zdCBub2RlSWQgPSBgbm9kZV8ke2NvbnRleHQubm9kZUNvdW50ZXIrK31gO1xuICAgICAgICBjb25zdCBub2RlOiBNYW5pZmVzdE5vZGUgPSB7XG4gICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICB0eXBlOiAndG9vbCcsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgbGFiZWw6IGAke3Rvb2xzVmFyTmFtZX1gLFxuICAgICAgICAgICAgbm9kZUtpbmQ6ICd0b29sJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBpc1Rvb2xzQ29sbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIHRvb2xzVmFyaWFibGU6IHRvb2xzVmFyTmFtZSxcbiAgICAgICAgICAgIHJlZmVyZW5jZUNvbnRleHQ6IGB0b29sczoke3Rvb2xzVmFyTmFtZX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIGV4aXROb2RlSWRzLnB1c2gobm9kZUlkKTtcblxuICAgICAgICAvLyBDb25uZWN0IGFnZW50IHRvIHRvb2xzIHdpdGggdG9vbCBlZGdlIHR5cGVcbiAgICAgICAgZWRnZXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGBlXyR7YWdlbnROb2RlSWR9XyR7bm9kZUlkfWAsXG4gICAgICAgICAgc291cmNlOiBhZ2VudE5vZGVJZCxcbiAgICAgICAgICB0YXJnZXQ6IG5vZGVJZCxcbiAgICAgICAgICB0eXBlOiAndG9vbCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xufVxuXG4vKipcbiAqIEFuYWx5emUgYW4gb2JqZWN0IGV4cHJlc3Npb24gZm9yIHN0ZXAgcmVmZXJlbmNlc1xuICovXG5mdW5jdGlvbiBhbmFseXplT2JqZWN0Rm9yU3RlcFJlZmVyZW5jZXMoXG4gIG9iajogYW55LFxuICBzdGVwRGVjbGFyYXRpb25zOiBNYXA8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0+LFxuICBjb250ZXh0OiBBbmFseXNpc0NvbnRleHQsXG4gIHBhdGg6IHN0cmluZ1xuKTogQW5hbHlzaXNSZXN1bHQge1xuICBjb25zdCBub2RlczogTWFuaWZlc3ROb2RlW10gPSBbXTtcbiAgY29uc3QgZWRnZXM6IE1hbmlmZXN0RWRnZVtdID0gW107XG4gIGNvbnN0IGVudHJ5Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZXhpdE5vZGVJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKCFvYmoucHJvcGVydGllcykgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIG9iai5wcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHByb3AudHlwZSAhPT0gJ0tleVZhbHVlUHJvcGVydHknKSBjb250aW51ZTtcblxuICAgIGxldCBrZXlOYW1lID0gJyc7XG4gICAgaWYgKHByb3Aua2V5LnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAga2V5TmFtZSA9IHByb3Aua2V5LnZhbHVlO1xuICAgIH0gZWxzZSBpZiAocHJvcC5rZXkudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICBrZXlOYW1lID0gcHJvcC5rZXkudmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFBhdGggPSBwYXRoID8gYCR7cGF0aH0uJHtrZXlOYW1lfWAgOiBrZXlOYW1lO1xuXG4gICAgaWYgKHByb3AudmFsdWUudHlwZSA9PT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICBjb25zdCB2YWx1ZU5hbWUgPSBwcm9wLnZhbHVlLnZhbHVlO1xuICAgICAgY29uc3Qgc3RlcEluZm8gPSBzdGVwRGVjbGFyYXRpb25zLmdldCh2YWx1ZU5hbWUpO1xuICAgICAgaWYgKHN0ZXBJbmZvKSB7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGBub2RlXyR7Y29udGV4dC5ub2RlQ291bnRlcisrfWA7XG4gICAgICAgIGNvbnN0IG5vZGU6IE1hbmlmZXN0Tm9kZSA9IHtcbiAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgIHR5cGU6ICdzdGVwJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYWJlbDogYCR7Z2V0T3JpZ2luYWxTdGVwTmFtZShzdGVwSW5mby5zdGVwSWQsIHZhbHVlTmFtZSl9ICh0b29sKWAsXG4gICAgICAgICAgICBub2RlS2luZDogJ3N0ZXAnLFxuICAgICAgICAgICAgc3RlcElkOiBzdGVwSW5mby5zdGVwSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgaXNTdGVwUmVmZXJlbmNlOiB0cnVlLFxuICAgICAgICAgICAgcmVmZXJlbmNlQ29udGV4dDogY3VycmVudFBhdGgsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZW50cnlOb2RlSWRzLnB1c2gobm9kZUlkKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wLnZhbHVlLnR5cGUgPT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgY29uc3QgbmVzdGVkUmVzdWx0ID0gYW5hbHl6ZU9iamVjdEZvclN0ZXBSZWZlcmVuY2VzKFxuICAgICAgICBwcm9wLnZhbHVlLFxuICAgICAgICBzdGVwRGVjbGFyYXRpb25zLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjdXJyZW50UGF0aFxuICAgICAgKTtcbiAgICAgIG5vZGVzLnB1c2goLi4ubmVzdGVkUmVzdWx0Lm5vZGVzKTtcbiAgICAgIGVkZ2VzLnB1c2goLi4ubmVzdGVkUmVzdWx0LmVkZ2VzKTtcbiAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLm5lc3RlZFJlc3VsdC5lbnRyeU5vZGVJZHMpO1xuICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5uZXN0ZWRSZXN1bHQuZXhpdE5vZGVJZHMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG5vZGVzLCBlZGdlcywgZW50cnlOb2RlSWRzLCBleGl0Tm9kZUlkcyB9O1xufVxuXG4vKipcbiAqIEFuYWx5emUgYSB0cmFuc2l0aXZlIGZ1bmN0aW9uIGNhbGwgdG8gZmluZCBzdGVwIGNhbGxzIHdpdGhpbiBoZWxwZXIgZnVuY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGFuYWx5emVUcmFuc2l0aXZlQ2FsbChcbiAgZnVuY05hbWU6IHN0cmluZyxcbiAgc3RlcERlY2xhcmF0aW9uczogTWFwPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9PixcbiAgY29udGV4dDogQW5hbHlzaXNDb250ZXh0LFxuICBmdW5jdGlvbk1hcDogTWFwPHN0cmluZywgRnVuY3Rpb25JbmZvPixcbiAgdmFyaWFibGVNYXA6IE1hcDxzdHJpbmcsIGFueT4sXG4gIHZpc2l0ZWRGdW5jdGlvbnM6IFNldDxzdHJpbmc+XG4pOiBBbmFseXNpc1Jlc3VsdCB7XG4gIGNvbnN0IG5vZGVzOiBNYW5pZmVzdE5vZGVbXSA9IFtdO1xuICBjb25zdCBlZGdlczogTWFuaWZlc3RFZGdlW10gPSBbXTtcbiAgY29uc3QgZW50cnlOb2RlSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleGl0Tm9kZUlkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAodmlzaXRlZEZ1bmN0aW9ucy5oYXMoZnVuY05hbWUpKSB7XG4gICAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG4gIH1cblxuICBjb25zdCBmdW5jSW5mbyA9IGZ1bmN0aW9uTWFwLmdldChmdW5jTmFtZSk7XG4gIGlmICghZnVuY0luZm8gfHwgZnVuY0luZm8uaXNTdGVwKSB7XG4gICAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG4gIH1cblxuICB2aXNpdGVkRnVuY3Rpb25zLmFkZChmdW5jTmFtZSk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoZnVuY0luZm8uYm9keSkge1xuICAgICAgaWYgKGZ1bmNJbmZvLmJvZHkudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50Jykge1xuICAgICAgICBjb25zdCBib2R5UmVzdWx0ID0gYW5hbHl6ZUJsb2NrKFxuICAgICAgICAgIGZ1bmNJbmZvLmJvZHkuc3RtdHMsXG4gICAgICAgICAgc3RlcERlY2xhcmF0aW9ucyxcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGZ1bmN0aW9uTWFwLFxuICAgICAgICAgIHZhcmlhYmxlTWFwXG4gICAgICAgICk7XG4gICAgICAgIG5vZGVzLnB1c2goLi4uYm9keVJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4uYm9keVJlc3VsdC5lZGdlcyk7XG4gICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLmJvZHlSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5ib2R5UmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGV4cHJSZXN1bHQgPSBhbmFseXplRXhwcmVzc2lvbihcbiAgICAgICAgICBmdW5jSW5mby5ib2R5LFxuICAgICAgICAgIHN0ZXBEZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBmdW5jdGlvbk1hcCxcbiAgICAgICAgICB2YXJpYWJsZU1hcCxcbiAgICAgICAgICB2aXNpdGVkRnVuY3Rpb25zXG4gICAgICAgICk7XG4gICAgICAgIG5vZGVzLnB1c2goLi4uZXhwclJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIGVkZ2VzLnB1c2goLi4uZXhwclJlc3VsdC5lZGdlcyk7XG4gICAgICAgIGVudHJ5Tm9kZUlkcy5wdXNoKC4uLmV4cHJSZXN1bHQuZW50cnlOb2RlSWRzKTtcbiAgICAgICAgZXhpdE5vZGVJZHMucHVzaCguLi5leHByUmVzdWx0LmV4aXROb2RlSWRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdmlzaXRlZEZ1bmN0aW9ucy5kZWxldGUoZnVuY05hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHsgbm9kZXMsIGVkZ2VzLCBlbnRyeU5vZGVJZHMsIGV4aXROb2RlSWRzIH07XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/builders",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.8",
|
|
4
4
|
"description": "Shared builder infrastructure for Workflow SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
"find-up": "7.0.0",
|
|
41
41
|
"json5": "2.2.3",
|
|
42
42
|
"tinyglobby": "0.2.15",
|
|
43
|
-
"@workflow/core": "5.0.0-beta.
|
|
44
|
-
"@workflow/errors": "5.0.0-beta.
|
|
45
|
-
"@workflow/utils": "5.0.0-beta.
|
|
43
|
+
"@workflow/core": "5.0.0-beta.8",
|
|
44
|
+
"@workflow/errors": "5.0.0-beta.5",
|
|
45
|
+
"@workflow/utils": "5.0.0-beta.3",
|
|
46
46
|
"@workflow/swc-plugin": "5.0.0-beta.4"
|
|
47
47
|
},
|
|
48
48
|
"scripts": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply-swc-transform.js","sourceRoot":"","sources":["../src/apply-swc-transform.ts"],"names":[],"mappings":"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","sourcesContent":["import { createRequire } from 'node:module';\nimport { dirname, isAbsolute, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { transform } from '@swc/core';\nimport { getDecoratorOptionsForDirectory } from './config-helpers.js';\nimport { resolveModuleSpecifier } from './module-specifier.js';\n\nconst require = createRequire(import.meta.url);\n\n// Cache decorator options per directory - tsconfig doesn't change during a build\nconst decoratorOptionsCache = new Map<\n string,\n ReturnType<typeof getDecoratorOptionsForDirectory>\n>();\n\nfunction getDecoratorOptions(projectRoot?: string) {\n const cwd = projectRoot ?? process.cwd();\n let cached = decoratorOptionsCache.get(cwd);\n if (!cached) {\n cached = getDecoratorOptionsForDirectory(cwd);\n decoratorOptionsCache.set(cwd, cached);\n }\n return cached;\n}\n\nexport type WorkflowManifest = {\n steps?: {\n [relativeFileName: string]: {\n [functionName: string]: {\n stepId: string;\n };\n };\n };\n workflows?: {\n [relativeFileName: string]: {\n [functionName: string]: {\n workflowId: string;\n };\n };\n };\n classes?: {\n [relativeFileName: string]: {\n [className: string]: {\n classId: string;\n };\n };\n };\n};\n\nexport async function applySwcTransform(\n filename: string,\n source: string,\n mode: 'workflow' | 'step' | 'detect' | false,\n /**\n * Optional absolute path to the file being transformed.\n * Used for module specifier resolution when filename is relative.\n * If not provided, filename is joined with process.cwd().\n */\n absolutePath?: string,\n /**\n * Optional project root used for module specifier resolution.\n * Defaults to process.cwd() for backwards compatibility.\n */\n projectRoot?: string\n): Promise<{\n code: string;\n workflowManifest: WorkflowManifest;\n}> {\n const resolvedProjectRoot = projectRoot ?? process.cwd();\n const decoratorOptions = await getDecoratorOptions(resolvedProjectRoot);\n\n const swcPluginPath = require.resolve('@workflow/swc-plugin', {\n paths: [dirname(fileURLToPath(import.meta.url))],\n });\n\n // Determine if this is a TypeScript file\n const isTypeScript =\n filename.endsWith('.ts') ||\n filename.endsWith('.tsx') ||\n filename.endsWith('.mts') ||\n filename.endsWith('.cts');\n\n // Resolve module specifier for packages (node_modules or workspace packages)\n const absoluteFilename = absolutePath\n ? absolutePath\n : isAbsolute(filename)\n ? filename\n : join(resolvedProjectRoot, filename);\n const { moduleSpecifier } = resolveModuleSpecifier(\n absoluteFilename,\n resolvedProjectRoot\n );\n\n // Transform with SWC to support syntax esbuild doesn't\n const result = await transform(source, {\n filename,\n swcrc: false,\n jsc: {\n parser: {\n ...(isTypeScript\n ? {\n syntax: 'typescript',\n tsx: filename.endsWith('.tsx'),\n decorators: decoratorOptions.decorators,\n }\n : {\n syntax: 'ecmascript',\n jsx: filename.endsWith('.jsx'),\n decorators: decoratorOptions.decorators,\n }),\n },\n target: 'es2022',\n experimental: mode\n ? {\n plugins: [[swcPluginPath, { mode, moduleSpecifier }]],\n }\n : undefined,\n transform: {\n react: {\n runtime: 'preserve',\n },\n legacyDecorator: decoratorOptions.legacyDecorator,\n decoratorMetadata: decoratorOptions.decoratorMetadata,\n },\n },\n // TODO: investigate proper source map support as they\n // won't even be used in Node.js by default unless we\n // intercept errors and apply them ourselves\n sourceMaps: false,\n minify: false,\n });\n\n const workflowCommentMatch = result.code.match(\n /\\/\\*\\*__internal_workflows({.*?})\\*\\//s\n );\n\n const parsedWorkflows = JSON.parse(\n workflowCommentMatch?.[1] || '{}'\n ) as WorkflowManifest;\n\n return {\n code: result.code,\n workflowManifest: parsedWorkflows || {},\n };\n}\n"]}
|