@dbx-tools/appkit-mastra 0.9.72 → 0.9.73
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/index.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/src/openapi-tool.js +5 -2
- package/lib/src/sandbox.d.ts +7 -0
- package/lib/src/sandbox.js +74 -32
- package/lib/src/workspaces.d.ts +1 -1
- package/lib/src/workspaces.js +22 -10
- package/package.json +14 -14
- package/src/openapi-tool.ts +3 -1
- package/src/sandbox.ts +75 -35
- package/src/workspaces.ts +26 -11
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.73";
|
|
7
7
|
export * as agents from "./src/agents.ts";
|
|
8
8
|
export * as chart from "./src/chart.ts";
|
|
9
9
|
export * as chat from "./src/chat.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.73";
|
|
3
3
|
export * as agents from "./src/agents.ts";
|
|
4
4
|
export * as chart from "./src/chart.ts";
|
|
5
5
|
export * as chat from "./src/chat.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.73";
|
|
6
6
|
export * as agents from "./src/agents.js";
|
|
7
7
|
export * as chart from "./src/chart.js";
|
|
8
8
|
export * as chat from "./src/chat.js";
|
|
@@ -64,4 +64,4 @@ export { TRACE_IO_LIMIT, MLFLOW_SPAN_INPUTS_ATTR, MLFLOW_SPAN_OUTPUTS_ATTR, CHAT
|
|
|
64
64
|
export { MLFLOW_TRACE_TAG_PREFIX, MLFLOW_AGENT_TAG, MLFLOW_GENIE_TAG, MLFLOW_OBO_AUTH_TAG, MLFLOW_SP_AUTH_TAG, MLFLOW_LOCAL_TAG, MLFLOW_AGENT_TAG_ATTR, MLFLOW_GENIE_TAG_ATTR, APPKIT_AGENT_TRACE_ROOT_ATTR, MLFLOW_OBO_AUTH_TAG_ATTR, MLFLOW_SP_AUTH_TAG_ATTR, MLFLOW_LOCAL_TAG_ATTR } from "./src/trace-attributes.js";
|
|
65
65
|
export { DEFAULT_SKILL_FOLDERS } from "./src/workspaces.js";
|
|
66
66
|
export * from "./exports.js";
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLFdBQVcsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssZUFBZSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFVBQVUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLGVBQWUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNMLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRKLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdqTCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5VLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSw0QkFBNEIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpULE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVELGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuNzJcIjtcbmV4cG9ydCAqIGFzIGFnZW50cyBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgKiBhcyBjaGFydCBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCAqIGFzIGNoYXQgZnJvbSBcIi4vc3JjL2NoYXQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCAqIGFzIGV2YWx1YXRpb24gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVzeXN0ZW1zIGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWUgZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIG1jcCBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgKiBhcyBtZW1vcnkgZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0ICogYXMgbWxmbG93IGZyb20gXCIuL3NyYy9tbGZsb3cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0ICogYXMgbW9udHlTYW5kYm94IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBvYnNlcnZhYmlsaXR5IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgKiBhcyBvcGVuYXBpVG9vbCBmcm9tIFwiLi9zcmMvb3BlbmFwaS10b29sLnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0ICogYXMgcmVtb3RlU2tpbGxzIGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgKiBhcyByZXN0IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgKiBhcyBzYW5kYm94IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZyBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZ1Nhbml0aXplIGZyb20gXCIuL3NyYy9zZXJ2aW5nLXNhbml0aXplLnRzXCI7XG5leHBvcnQgKiBhcyBza2lsbENhY2hlIGZyb20gXCIuL3NyYy9za2lsbC1jYWNoZS50c1wiO1xuZXhwb3J0ICogYXMgc2tpbGxQYXRocyBmcm9tIFwiLi9zcmMvc2tpbGwtcGF0aHMudHNcIjtcbmV4cG9ydCAqIGFzIHN0YXRlbWVudCBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgKiBhcyBzdG9yYWdlU2NoZW1hIGZyb20gXCIuL3NyYy9zdG9yYWdlLXNjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgc3R5bGUgZnJvbSBcIi4vc3JjL3N0eWxlLnRzXCI7XG5leHBvcnQgKiBhcyBzdW1tYXJpemUgZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0ICogYXMgdGVsZW1ldHJ5IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCAqIGFzIHRyYWNlQXR0cmlidXRlcyBmcm9tIFwiLi9zcmMvdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuZXhwb3J0ICogYXMgdmFsaWRhdGlvbiBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlcyBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0ICogYXMgd3JpdGVyIGZyb20gXCIuL3NyYy93cml0ZXIudHNcIjtcbmV4cG9ydCB7IEZBTExCQUNLX0FHRU5UX0lELCBERUZBVUxUX0FHRU5UX01BWF9TVEVQUywgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlMgfSBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYVRvb2xzLCBBcHBLaXRUb29sT3B0aW9ucywgVG9vbGtpdE9wdGlvbnMsIE1hc3RyYVBsdWdpblRvb2xraXRQcm92aWRlciwgTWFzdHJhUGx1Z2lucywgTWFzdHJhVG9vbHNGbiwgTWFzdHJhQWdlbnRXb3Jrc3BhY2VSZXNvbHZlciwgTWFzdHJhQWdlbnREZWZpbml0aW9uLCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYVN0b3JhZ2VDb25maWdPdmVycmlkZSwgTWFzdHJhTWVtb3J5Q29uZmlnT3ZlcnJpZGUsIEFnZW50RGVmYXVsdE1vZGVsLCBCdWlsdEFnZW50cyB9IGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCB7IGNoYXJ0UGxhblNjaGVtYSwgY2hhcnRQbGFubmVyUmVxdWVzdFNjaGVtYSwgY2hhcnRUb29sT3V0cHV0U2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgdHlwZSB7IENoYXJ0UGxhbm5lclJlcXVlc3QsIENoYXJ0VG9vbE91dHB1dCwgUHJlcGFyZUNoYXJ0T3B0aW9ucywgRmV0Y2hDaGFydE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9VU0VSX0tFWSwgTUFTVFJBX1VTRVJfTkFNRV9LRVksIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSwgTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBNQVNUUkFfU0NPUEVTX0tFWSwgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMsIE1BU1RSQV9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBVc2VyLCBNYXN0cmFNZW1vcnlDb25maWcsIE1hc3RyYVNraWxsU2VhcmNoQ29uZmlnLCBNYXN0cmFNY3BDb25maWcsIE1hc3RyYVBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IG1vZGVsQ2F0YWxvZ3VlRGVmYXVsdHMsIGdlbmllU3VnZ2VzdGlvbkRlZmF1bHRzLCBzdGF0ZW1lbnREYXRhRGVmYXVsdHMsIGNoYXJ0RmV0Y2hEZWZhdWx0cywgZmVlZGJhY2tXcml0ZURlZmF1bHRzIH0gZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUV2YWxEcml2ZXJPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCB7IE1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyIH0gZnJvbSBcIi4vc3JjL2ZpbGVzeXN0ZW1zLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9HRU5JRV9BTElBUywgR0VOSUVfSU5TVFJVQ1RJT05TIH0gZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgdHlwZSB7IEdlbmllU3BhY2VDb25maWcsIEdlbmllU3BhY2VzQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgeyBJREVOVElUWV9FTlYsIElERU5USVRZX01PREVTLCBERUZBVUxUX0lERU5USVRZX01PREUsIFVTRVJfSURfSEVBREVSLCBVU0VSX0VNQUlMX0hFQURFUiwgcmVxdWVzdFVzZXJJZCwgcmVxdWVzdFVzZXJFbWFpbCwgdXNlU2VydmljZVByaW5jaXBhbCB9IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFJZGVudGl0eU1vZGUgfSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZWRNY3AgfSBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgeyBNZW1vcnlCdWlsZGVyIH0gZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0IHsgQWdlbnRUcmFjZVNwYW5Qcm9jZXNzb3IgfSBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcE1sZmxvd1RyYWNlSW5mbywgTG9nRmVlZGJhY2tQYXJhbXMgfSBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgeyBSRVNQT05TRVNfUFJPVklERVJfT1BUSU9OUyB9IGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBCdWlsZE1vZGVsT3ZlcnJpZGVzIH0gZnJvbSBcIi4vc3JjL21vZGVsLnRzXCI7XG5leHBvcnQgeyBNb250eVNhbmRib3ggfSBmcm9tIFwiLi9zcmMvbW9udHktc2FuZGJveC50c1wiO1xuZXhwb3J0IHR5cGUgeyBNb250eVNhbmRib3hPcHRpb25zIH0gZnJvbSBcIi4vc3JjL21vbnR5LXNhbmRib3gudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRPYnNlcnZhYmlsaXR5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE9wZW5BcGlIdHRwTWV0aG9kLCBPcGVuQXBpVG9vbCwgT3BlbkFwaVRvb2xzT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9vcGVuYXBpLXRvb2wudHNcIjtcbmV4cG9ydCB7IE1hc3RyYVBsdWdpbiwgbWFzdHJhIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0IHsgc3RyaXBTdGFsZUNoYXJ0c1Byb2Nlc3NvciB9IGZyb20gXCIuL3NyYy9wcm9jZXNzb3JzLnRzXCI7XG5leHBvcnQgeyBBSVRPT0xTX1NPVVJDRSB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFpVG9vbHNTb3VyY2UsIFJlbW90ZVNraWxsU291cmNlT3B0aW9ucywgUmVtb3RlU2tpbGxTb3VyY2UsIFJlbW90ZVNraWxsc09wdGlvbiwgUHJvdmlzaW9uUmVtb3RlU2tpbGxzT3B0aW9ucywgUHJvdmlzaW9uZWRSZW1vdGVTa2lsbHMsIFJlbW90ZVNraWxsQ2FjaGVFbnRyeSwgUmVtb3RlU2tpbGxzTWV0YWRhdGEgfSBmcm9tIFwiLi9zcmMvcmVtb3RlLXNraWxscy50c1wiO1xuZXhwb3J0IHR5cGUgeyBEYXRhYnJpY2tzRmV0Y2hJbml0IH0gZnJvbSBcIi4vc3JjL3Jlc3QudHNcIjtcbmV4cG9ydCB7IERhdGFicmlja3NTYW5kYm94IH0gZnJvbSBcIi4vc3JjL3NhbmRib3gudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc1NhbmRib3hPcHRpb25zLCBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvc2FuZGJveC50c1wiO1xuZXhwb3J0IHsgTWFzdHJhU2VydmVyIH0gZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdHRyaWJ1dGVkSWRlbnRpdHksIE1hc3RyYUFwaUdhdGVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0IHsgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWSwgTUFTVFJBX1JFU09MVkVEX01PREVMX0tFWSB9IGZyb20gXCIuL3NyYy9zZXJ2aW5nLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsT3ZlcnJpZGVSZXF1ZXN0IH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB7IERFRkFVTFRfV09SS1NQQUNFX1NLSUxMX0NBQ0hFX1RUTF9NUywgQXBwS2l0Q2FjaGVkRmlsZVN5c3RlbSB9IGZyb20gXCIuL3NyYy9za2lsbC1jYWNoZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBBcHBLaXRDYWNoZWRGaWxlU3lzdGVtT3B0aW9ucywgQ2FjaGVkV29ya3NwYWNlU2tpbGxNb3VudCB9IGZyb20gXCIuL3NyYy9za2lsbC1jYWNoZS50c1wiO1xuZXhwb3J0IHsgQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSCB9IGZyb20gXCIuL3NyYy9za2lsbC1wYXRocy50c1wiO1xuZXhwb3J0IHsgU1RBVEVNRU5UX1JPV19DQVAgfSBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgeyBUWVBPR1JBUEhZX1JVTEUgfSBmcm9tIFwiLi9zcmMvc3R5bGUudHNcIjtcbmV4cG9ydCB7IFRJVExFX0lOU1RSVUNUSU9OUyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB0eXBlIHsgU3VtbWFyaXplT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB7IFRSQUNFX0lPX0xJTUlULCBNTEZMT1dfU1BBTl9JTlBVVFNfQVRUUiwgTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSLCBDSEFUX01FU1NBR0VTX0FUVFIsIENIQVRfUkVTUE9OU0VfQVRUUiwgQ0hBVF9JREVOVElUWV9BVFRSLCBDSEFUX0dFTklFX1VTRURfQVRUUiwgTUxGTE9XX1NQQU5fVFlQRV9BVFRSLCBHRU5fQUlfT1BFUkFUSU9OX05BTUVfQVRUUiwgTUxGTE9XX1VTRVJfQVRUUiwgTUxGTE9XX1NFU1NJT05fQVRUUiwgTUxGTE9XX1NQQU5fVFlQRV9BR0VOVCwgTUxGTE9XX1NQQU5fVFlQRV9HRU5JRSB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2hhdFR1cm5UZWxlbWV0cnlPcHRpb25zLCBDaGF0VHJhY2VUYWdWYWx1ZSB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB7IE1MRkxPV19UUkFDRV9UQUdfUFJFRklYLCBNTEZMT1dfQUdFTlRfVEFHLCBNTEZMT1dfR0VOSUVfVEFHLCBNTEZMT1dfT0JPX0FVVEhfVEFHLCBNTEZMT1dfU1BfQVVUSF9UQUcsIE1MRkxPV19MT0NBTF9UQUcsIE1MRkxPV19BR0VOVF9UQUdfQVRUUiwgTUxGTE9XX0dFTklFX1RBR19BVFRSLCBBUFBLSVRfQUdFTlRfVFJBQ0VfUk9PVF9BVFRSLCBNTEZMT1dfT0JPX0FVVEhfVEFHX0FUVFIsIE1MRkxPV19TUF9BVVRIX1RBR19BVFRSLCBNTEZMT1dfTE9DQUxfVEFHX0FUVFIgfSBmcm9tIFwiLi9zcmMvdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBTY2hlbWFJc3N1ZXMgfSBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9TS0lMTF9GT0xERVJTIH0gZnJvbSBcIi4vc3JjL3dvcmtzcGFjZXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgV29ya3NwYWNlTW91bnRDb250ZXh0LCBTa2lsbEZvbGRlclZhbHVlLCBTa2lsbEZvbGRlck9wdGlvbnMsIFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uLCBXb3Jrc3BhY2VNb3VudFJlc29sdmVyLCBEZWZhdWx0U2tpbGxGb2xkZXJOYW1lLCBXb3Jrc3BhY2VTYW5kYm94U2VsZWN0aW9uLCBDcmVhdGVXb3Jrc3BhY2VPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3dvcmtzcGFjZXMudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4cG9ydHMudHNcIjtcbiJdfQ==
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLFdBQVcsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssZUFBZSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFVBQVUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLGVBQWUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNMLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRKLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdqTCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5VLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSw0QkFBNEIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpULE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVELGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuNzNcIjtcbmV4cG9ydCAqIGFzIGFnZW50cyBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgKiBhcyBjaGFydCBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCAqIGFzIGNoYXQgZnJvbSBcIi4vc3JjL2NoYXQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCAqIGFzIGV2YWx1YXRpb24gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIGZpbGVzeXN0ZW1zIGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWUgZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIG1jcCBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgKiBhcyBtZW1vcnkgZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0ICogYXMgbWxmbG93IGZyb20gXCIuL3NyYy9tbGZsb3cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0ICogYXMgbW9udHlTYW5kYm94IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBvYnNlcnZhYmlsaXR5IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgKiBhcyBvcGVuYXBpVG9vbCBmcm9tIFwiLi9zcmMvb3BlbmFwaS10b29sLnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0ICogYXMgcmVtb3RlU2tpbGxzIGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgKiBhcyByZXN0IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgKiBhcyBzYW5kYm94IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZyBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZ1Nhbml0aXplIGZyb20gXCIuL3NyYy9zZXJ2aW5nLXNhbml0aXplLnRzXCI7XG5leHBvcnQgKiBhcyBza2lsbENhY2hlIGZyb20gXCIuL3NyYy9za2lsbC1jYWNoZS50c1wiO1xuZXhwb3J0ICogYXMgc2tpbGxQYXRocyBmcm9tIFwiLi9zcmMvc2tpbGwtcGF0aHMudHNcIjtcbmV4cG9ydCAqIGFzIHN0YXRlbWVudCBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgKiBhcyBzdG9yYWdlU2NoZW1hIGZyb20gXCIuL3NyYy9zdG9yYWdlLXNjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgc3R5bGUgZnJvbSBcIi4vc3JjL3N0eWxlLnRzXCI7XG5leHBvcnQgKiBhcyBzdW1tYXJpemUgZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0ICogYXMgdGVsZW1ldHJ5IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCAqIGFzIHRyYWNlQXR0cmlidXRlcyBmcm9tIFwiLi9zcmMvdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuZXhwb3J0ICogYXMgdmFsaWRhdGlvbiBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlcyBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0ICogYXMgd3JpdGVyIGZyb20gXCIuL3NyYy93cml0ZXIudHNcIjtcbmV4cG9ydCB7IEZBTExCQUNLX0FHRU5UX0lELCBERUZBVUxUX0FHRU5UX01BWF9TVEVQUywgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlMgfSBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYVRvb2xzLCBBcHBLaXRUb29sT3B0aW9ucywgVG9vbGtpdE9wdGlvbnMsIE1hc3RyYVBsdWdpblRvb2xraXRQcm92aWRlciwgTWFzdHJhUGx1Z2lucywgTWFzdHJhVG9vbHNGbiwgTWFzdHJhQWdlbnRXb3Jrc3BhY2VSZXNvbHZlciwgTWFzdHJhQWdlbnREZWZpbml0aW9uLCBBbnlNYXN0cmFBZ2VudERlZmluaXRpb24sIE1hc3RyYVN0b3JhZ2VDb25maWdPdmVycmlkZSwgTWFzdHJhTWVtb3J5Q29uZmlnT3ZlcnJpZGUsIEFnZW50RGVmYXVsdE1vZGVsLCBCdWlsdEFnZW50cyB9IGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCB7IGNoYXJ0UGxhblNjaGVtYSwgY2hhcnRQbGFubmVyUmVxdWVzdFNjaGVtYSwgY2hhcnRUb29sT3V0cHV0U2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgdHlwZSB7IENoYXJ0UGxhbm5lclJlcXVlc3QsIENoYXJ0VG9vbE91dHB1dCwgUHJlcGFyZUNoYXJ0T3B0aW9ucywgRmV0Y2hDaGFydE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2hhcnQudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9VU0VSX0tFWSwgTUFTVFJBX1VTRVJfTkFNRV9LRVksIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSwgTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBNQVNUUkFfU0NPUEVTX0tFWSwgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMsIE1BU1RSQV9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBVc2VyLCBNYXN0cmFNZW1vcnlDb25maWcsIE1hc3RyYVNraWxsU2VhcmNoQ29uZmlnLCBNYXN0cmFNY3BDb25maWcsIE1hc3RyYVBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IG1vZGVsQ2F0YWxvZ3VlRGVmYXVsdHMsIGdlbmllU3VnZ2VzdGlvbkRlZmF1bHRzLCBzdGF0ZW1lbnREYXRhRGVmYXVsdHMsIGNoYXJ0RmV0Y2hEZWZhdWx0cywgZmVlZGJhY2tXcml0ZURlZmF1bHRzIH0gZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUV2YWxEcml2ZXJPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCB7IE1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyIH0gZnJvbSBcIi4vc3JjL2ZpbGVzeXN0ZW1zLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUZpbGVTeXN0ZW1BZGFwdGVyT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9HRU5JRV9BTElBUywgR0VOSUVfSU5TVFJVQ1RJT05TIH0gZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgdHlwZSB7IEdlbmllU3BhY2VDb25maWcsIEdlbmllU3BhY2VzQ29uZmlnIH0gZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgeyBJREVOVElUWV9FTlYsIElERU5USVRZX01PREVTLCBERUZBVUxUX0lERU5USVRZX01PREUsIFVTRVJfSURfSEVBREVSLCBVU0VSX0VNQUlMX0hFQURFUiwgcmVxdWVzdFVzZXJJZCwgcmVxdWVzdFVzZXJFbWFpbCwgdXNlU2VydmljZVByaW5jaXBhbCB9IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFJZGVudGl0eU1vZGUgfSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZWRNY3AgfSBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgeyBNZW1vcnlCdWlsZGVyIH0gZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0IHsgQWdlbnRUcmFjZVNwYW5Qcm9jZXNzb3IgfSBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcE1sZmxvd1RyYWNlSW5mbywgTG9nRmVlZGJhY2tQYXJhbXMgfSBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgeyBSRVNQT05TRVNfUFJPVklERVJfT1BUSU9OUyB9IGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBCdWlsZE1vZGVsT3ZlcnJpZGVzIH0gZnJvbSBcIi4vc3JjL21vZGVsLnRzXCI7XG5leHBvcnQgeyBNb250eVNhbmRib3ggfSBmcm9tIFwiLi9zcmMvbW9udHktc2FuZGJveC50c1wiO1xuZXhwb3J0IHR5cGUgeyBNb250eVNhbmRib3hPcHRpb25zIH0gZnJvbSBcIi4vc3JjL21vbnR5LXNhbmRib3gudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRPYnNlcnZhYmlsaXR5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE9wZW5BcGlIdHRwTWV0aG9kLCBPcGVuQXBpVG9vbCwgT3BlbkFwaVRvb2xzT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9vcGVuYXBpLXRvb2wudHNcIjtcbmV4cG9ydCB7IE1hc3RyYVBsdWdpbiwgbWFzdHJhIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0IHsgc3RyaXBTdGFsZUNoYXJ0c1Byb2Nlc3NvciB9IGZyb20gXCIuL3NyYy9wcm9jZXNzb3JzLnRzXCI7XG5leHBvcnQgeyBBSVRPT0xTX1NPVVJDRSB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFpVG9vbHNTb3VyY2UsIFJlbW90ZVNraWxsU291cmNlT3B0aW9ucywgUmVtb3RlU2tpbGxTb3VyY2UsIFJlbW90ZVNraWxsc09wdGlvbiwgUHJvdmlzaW9uUmVtb3RlU2tpbGxzT3B0aW9ucywgUHJvdmlzaW9uZWRSZW1vdGVTa2lsbHMsIFJlbW90ZVNraWxsQ2FjaGVFbnRyeSwgUmVtb3RlU2tpbGxzTWV0YWRhdGEgfSBmcm9tIFwiLi9zcmMvcmVtb3RlLXNraWxscy50c1wiO1xuZXhwb3J0IHR5cGUgeyBEYXRhYnJpY2tzRmV0Y2hJbml0IH0gZnJvbSBcIi4vc3JjL3Jlc3QudHNcIjtcbmV4cG9ydCB7IERhdGFicmlja3NTYW5kYm94IH0gZnJvbSBcIi4vc3JjL3NhbmRib3gudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc1NhbmRib3hPcHRpb25zLCBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvc2FuZGJveC50c1wiO1xuZXhwb3J0IHsgTWFzdHJhU2VydmVyIH0gZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdHRyaWJ1dGVkSWRlbnRpdHksIE1hc3RyYUFwaUdhdGVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0IHsgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWSwgTUFTVFJBX1JFU09MVkVEX01PREVMX0tFWSB9IGZyb20gXCIuL3NyYy9zZXJ2aW5nLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsT3ZlcnJpZGVSZXF1ZXN0IH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB7IERFRkFVTFRfV09SS1NQQUNFX1NLSUxMX0NBQ0hFX1RUTF9NUywgQXBwS2l0Q2FjaGVkRmlsZVN5c3RlbSB9IGZyb20gXCIuL3NyYy9za2lsbC1jYWNoZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBBcHBLaXRDYWNoZWRGaWxlU3lzdGVtT3B0aW9ucywgQ2FjaGVkV29ya3NwYWNlU2tpbGxNb3VudCB9IGZyb20gXCIuL3NyYy9za2lsbC1jYWNoZS50c1wiO1xuZXhwb3J0IHsgQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSCB9IGZyb20gXCIuL3NyYy9za2lsbC1wYXRocy50c1wiO1xuZXhwb3J0IHsgU1RBVEVNRU5UX1JPV19DQVAgfSBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgeyBUWVBPR1JBUEhZX1JVTEUgfSBmcm9tIFwiLi9zcmMvc3R5bGUudHNcIjtcbmV4cG9ydCB7IFRJVExFX0lOU1RSVUNUSU9OUyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB0eXBlIHsgU3VtbWFyaXplT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB7IFRSQUNFX0lPX0xJTUlULCBNTEZMT1dfU1BBTl9JTlBVVFNfQVRUUiwgTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSLCBDSEFUX01FU1NBR0VTX0FUVFIsIENIQVRfUkVTUE9OU0VfQVRUUiwgQ0hBVF9JREVOVElUWV9BVFRSLCBDSEFUX0dFTklFX1VTRURfQVRUUiwgTUxGTE9XX1NQQU5fVFlQRV9BVFRSLCBHRU5fQUlfT1BFUkFUSU9OX05BTUVfQVRUUiwgTUxGTE9XX1VTRVJfQVRUUiwgTUxGTE9XX1NFU1NJT05fQVRUUiwgTUxGTE9XX1NQQU5fVFlQRV9BR0VOVCwgTUxGTE9XX1NQQU5fVFlQRV9HRU5JRSB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2hhdFR1cm5UZWxlbWV0cnlPcHRpb25zLCBDaGF0VHJhY2VUYWdWYWx1ZSB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB7IE1MRkxPV19UUkFDRV9UQUdfUFJFRklYLCBNTEZMT1dfQUdFTlRfVEFHLCBNTEZMT1dfR0VOSUVfVEFHLCBNTEZMT1dfT0JPX0FVVEhfVEFHLCBNTEZMT1dfU1BfQVVUSF9UQUcsIE1MRkxPV19MT0NBTF9UQUcsIE1MRkxPV19BR0VOVF9UQUdfQVRUUiwgTUxGTE9XX0dFTklFX1RBR19BVFRSLCBBUFBLSVRfQUdFTlRfVFJBQ0VfUk9PVF9BVFRSLCBNTEZMT1dfT0JPX0FVVEhfVEFHX0FUVFIsIE1MRkxPV19TUF9BVVRIX1RBR19BVFRSLCBNTEZMT1dfTE9DQUxfVEFHX0FUVFIgfSBmcm9tIFwiLi9zcmMvdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBTY2hlbWFJc3N1ZXMgfSBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9TS0lMTF9GT0xERVJTIH0gZnJvbSBcIi4vc3JjL3dvcmtzcGFjZXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgV29ya3NwYWNlTW91bnRDb250ZXh0LCBTa2lsbEZvbGRlclZhbHVlLCBTa2lsbEZvbGRlck9wdGlvbnMsIFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uLCBXb3Jrc3BhY2VNb3VudFJlc29sdmVyLCBEZWZhdWx0U2tpbGxGb2xkZXJOYW1lLCBXb3Jrc3BhY2VTYW5kYm94U2VsZWN0aW9uLCBDcmVhdGVXb3Jrc3BhY2VPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3dvcmtzcGFjZXMudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4cG9ydHMudHNcIjtcbiJdfQ==
|
package/lib/src/openapi-tool.js
CHANGED
|
@@ -90,7 +90,10 @@ export async function openApiTools(source, options = {}) {
|
|
|
90
90
|
}));
|
|
91
91
|
}
|
|
92
92
|
function httpUrl(source) {
|
|
93
|
-
const
|
|
93
|
+
const value = source.trim();
|
|
94
|
+
if (!value.startsWith("http://") && !value.startsWith("https://"))
|
|
95
|
+
return undefined;
|
|
96
|
+
const url = urlBuilder(value);
|
|
94
97
|
return url?.scheme === "http" || url?.scheme === "https" ? url : undefined;
|
|
95
98
|
}
|
|
96
99
|
async function fetchDocument(url, options) {
|
|
@@ -178,4 +181,4 @@ if (import.meta.main) {
|
|
|
178
181
|
throw new Error("Usage: bun openapi-tool.ts <openapi-url-or-file>");
|
|
179
182
|
console.log(JSON.stringify(await openApiTools(source), null, 2));
|
|
180
183
|
}
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS10b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZW5hcGktdG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFtQixNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxZQUFZLEdBQUc7SUFDbkIsS0FBSztJQUNMLE1BQU07SUFDTixLQUFLO0lBQ0wsT0FBTztJQUNQLFFBQVE7SUFDUixTQUFTO0lBQ1QsTUFBTTtJQUNOLE9BQU87Q0FDQyxDQUFDO0FBRVgsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDO0tBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQy9CLFFBQVEsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0FBRTlELE1BQU0sc0JBQXNCLEdBQUcsQ0FBQztLQUM3QixNQUFNLENBQUM7SUFDTixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHNDQUFzQyxDQUFDO0NBQzFFLENBQUM7S0FDRCxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUV2QyxNQUFNLHdCQUF3QixHQUFHLENBQUM7S0FDL0IsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLENBQUM7U0FDUCxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLHNCQUFzQixDQUFDO1NBQzFDLFFBQVEsQ0FBQyw0Q0FBNEMsQ0FBQztDQUMxRCxDQUFDO0tBQ0QsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFeEMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDO0tBQzVCLE1BQU0s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LE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLE1BQU07UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDakYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wZW5BUEkgb3BlcmF0aW9uIGxvYWRpbmcgYW5kIEpTT04gU2NoZW1hIGV4dHJhY3Rpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgdXJsQnVpbGRlciwgdHlwZSBVcmxCdWlsZGVyIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmUvbmV0XCI7XG5pbXBvcnQgdHlwZSB7IEpTT05TY2hlbWE3IH0gZnJvbSBcImpzb24tc2NoZW1hXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5jb25zdCBIVFRQX01FVEhPRFMgPSBbXG4gIFwiR0VUXCIsXG4gIFwiUE9TVFwiLFxuICBcIlBVVFwiLFxuICBcIlBBVENIXCIsXG4gIFwiREVMRVRFXCIsXG4gIFwiT1BUSU9OU1wiLFxuICBcIkhFQURcIixcbiAgXCJUUkFDRVwiLFxuXSBhcyBjb25zdDtcblxuY29uc3QgSnNvbk9iamVjdFNjaGVtYSA9IHpcbiAgLnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSlcbiAgLmRlc2NyaWJlKFwiQSBKU09OIG9iamVjdCBlbWJlZGRlZCBpbiBhbiBPcGVuQVBJIGRvY3VtZW50LlwiKTtcblxuY29uc3QgT3BlbkFwaU1lZGlhVHlwZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgc2NoZW1hOiBKc29uT2JqZWN0U2NoZW1hLmRlc2NyaWJlKFwiVGhlIEpTT04gU2NoZW1hIGZvciB0aGlzIG1lZGlhIHR5cGUuXCIpLFxuICB9KVxuICAuZGVzY3JpYmUoXCJPbmUgT3BlbkFQSSBtZWRpYSB0eXBlLlwiKTtcblxuY29uc3QgT3BlbkFwaVJlcXVlc3RCb2R5U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBjb250ZW50OiB6XG4gICAgICAucmVjb3JkKHouc3RyaW5nKCksIE9wZW5BcGlNZWRpYVR5cGVTY2hlbWEpXG4gICAgICAuZGVzY3JpYmUoXCJSZXF1ZXN0IG1lZGlhIHR5cGVzIGtleWVkIGJ5IGNvbnRlbnQgdHlwZS5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIkFuIE9wZW5BUEkgcmVxdWVzdCBib2R5LlwiKTtcblxuY29uc3QgT3BlbkFwaVJlc3BvbnNlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBjb250ZW50OiB6XG4gICAgICAucmVjb3JkKHouc3RyaW5nKCksIE9wZW5BcGlNZWRpYVR5cGVTY2hlbWEpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiUmVzcG9uc2UgbWVkaWEgdHlwZXMga2V5ZWQgYnkgY29udGVudCB0eXBlLlwiKSxcbiAgfSlcbiAgLmRlc2NyaWJlKFwiT25lIE9wZW5BUEkgcmVzcG9uc2UuXCIpO1xuXG5jb25zdCBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBvcGVyYXRpb25JZDogei5zdHJpbmcoKS5kZXNjcmliZShcIlRoZSBzdGFibGUgb3BlcmF0aW9uIGlkZW50aWZpZXIuXCIpLFxuICAgIHN1bW1hcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBzaG9ydCBvcGVyYXRpb24gc3VtbWFyeS5cIiksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIlRoZSBmdWxsIG9wZXJhdGlvbiBkZXNjcmlwdGlvbi5cIiksXG4gICAgcmVxdWVzdEJvZHk6IE9wZW5BcGlSZXF1ZXN0Qm9keVNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFxuICAgICAgXCJUaGUgb3B0aW9uYWwgb3BlcmF0aW9uIHJlcXVlc3QgYm9keS5cIixcbiAgICApLFxuICAgIHJlc3BvbnNlczogelxuICAgICAgLnJlY29yZCh6LnN0cmluZygpLCBPcGVuQXBpUmVzcG9uc2VTY2hlbWEpXG4gICAgICAuZGVzY3JpYmUoXCJPcGVyYXRpb24gcmVzcG9uc2VzIGtleWVkIGJ5IEhUVFAgc3RhdHVzLlwiKSxcbiAgfSlcbiAgLmRlc2NyaWJlKFwiVGhlIE9wZW5BUEkgZmllbGRzIHJlcXVpcmVkIHRvIGRlZmluZSBhIHRvb2wuXCIpO1xuXG5jb25zdCBPcGVuQXBpUGF0aFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZ2V0OiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgcG9zdDogT3BlbkFwaU9wZXJhdGlvblNjaGVtYS5vcHRpb25hbCgpLFxuICAgIHB1dDogT3BlbkFwaU9wZXJhdGlvblNjaGVtYS5vcHRpb25hbCgpLFxuICAgIHBhdGNoOiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgZGVsZXRlOiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgb3B0aW9uczogT3BlbkFwaU9wZXJhdGlvblNjaGVtYS5vcHRpb25hbCgpLFxuICAgIGhlYWQ6IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICB0cmFjZTogT3BlbkFwaU9wZXJhdGlvblNjaGVtYS5vcHRpb25hbCgpLFxuICB9KVxuICAuZGVzY3JpYmUoXCJPcGVyYXRpb25zIGF2YWlsYWJsZSBhdCBvbmUgT3BlbkFQSSBwYXRoLlwiKTtcblxuY29uc3QgT3BlbkFwaURvY3VtZW50U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBwYXRoczogelxuICAgICAgLnJlY29yZCh6LnN0cmluZygpLCBPcGVuQXBpUGF0aFNjaGVtYSlcbiAgICAgIC5yZWZpbmUoKHBhdGhzKSA9PiBPYmplY3Qua2V5cyhwYXRocykubGVuZ3RoID4gMCwgXCJPcGVuQVBJIHBhdGhzIG11c3Qgbm90IGJlIGVtcHR5XCIpXG4gICAgICAuZGVzY3JpYmUoXCJPcGVuQVBJIHBhdGggaXRlbXMga2V5ZWQgYnkgVVJMIHBhdGguXCIpLFxuICAgIGNvbXBvbmVudHM6IEpzb25PYmplY3RTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcIlJldXNhYmxlIE9wZW5BUEkgY29tcG9uZW50cy5cIiksXG4gICAgc2VydmVyczogelxuICAgICAgLmFycmF5KFxuICAgICAgICB6Lm9iamVjdCh7XG4gICAgICAgICAgdXJsOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiU2VydmVyIGJhc2UgVVJMLlwiKSxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiT3BlbkFQSSBzZXJ2ZXIgZGVmaW5pdGlvbnMuXCIpLFxuICB9KVxuICAuZGVzY3JpYmUoXCJBbiBPcGVuQVBJIGRvY3VtZW50IHVzZWQgdG8gZGVmaW5lIEhUVFAgdG9vbHMuXCIpO1xuXG50eXBlIE9wZW5BcGlEb2N1bWVudCA9IHouaW5mZXI8dHlwZW9mIE9wZW5BcGlEb2N1bWVudFNjaGVtYT47XG50eXBlIE9wZW5BcGlPcGVyYXRpb24gPSB6LmluZmVyPHR5cGVvZiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hPjtcblxuLyoqIEhUVFAgbWV0aG9kIHN1cHBvcnRlZCBieSBhbiB7QGxpbmsgT3BlbkFwaVRvb2x9LiAqL1xuZXhwb3J0IHR5cGUgT3BlbkFwaUh0dHBNZXRob2QgPSAodHlwZW9mIEhUVFBfTUVUSE9EUylbbnVtYmVyXTtcblxuLyoqIE9uZSBleGVjdXRhYmxlIEhUVFAgb3BlcmF0aW9uIGRlcml2ZWQgZnJvbSBhbiBPcGVuQVBJIGRvY3VtZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuQXBpVG9vbCB7XG4gIC8qKiBTdGFibGUgb3BlcmF0aW9uIGlkZW50aWZpZXIuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBNb2RlbC1mYWNpbmcgb3BlcmF0aW9uIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogUmVzb2x2ZWQgb3BlcmF0aW9uIFVSTCwgb3IgdGhlIE9wZW5BUEkgcGF0aCBmb3IgYSBsb2NhbCBkb2N1bWVudCB3aXRob3V0IGEgc2VydmVyIFVSTC4gKi9cbiAgdXJsOiBzdHJpbmc7XG4gIC8qKiBIVFRQIG1ldGhvZCB1c2VkIGJ5IHRoZSBvcGVyYXRpb24uICovXG4gIG1ldGhvZDogT3BlbkFwaUh0dHBNZXRob2Q7XG4gIC8qKiBKU09OIFNjaGVtYSBkZXNjcmliaW5nIG9wZXJhdGlvbiBpbnB1dC4gKi9cbiAgaW5wdXRTY2hlbWE6IEpTT05TY2hlbWE3O1xuICAvKiogSlNPTiBTY2hlbWEgZGVzY3JpYmluZyBhIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uIHJlc3VsdC4gKi9cbiAgb3V0cHV0U2NoZW1hOiBKU09OU2NoZW1hNztcbn1cblxuLyoqIFJlcXVlc3Qgb3B0aW9ucyB1c2VkIHdoaWxlIGxvYWRpbmcgYW4gT3BlbkFQSSBkb2N1bWVudC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFwaVRvb2xzT3B0aW9ucyB7XG4gIC8qKiBDYW5jZWxzIGFuIEhUVFAgcmVxdWVzdCBvciBmaWxlIHJlYWQuICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogSGVhZGVycyBzZW50IHdoZW4gYHNvdXJjZWAgaXMgYW4gSFRUUChTKSBVUkwuICovXG4gIGhlYWRlcnM/OiBSZXF1ZXN0SW5pdFtcImhlYWRlcnNcIl07XG59XG5cbi8qKiBMb2FkIGFuIEhUVFAoUykgVVJMIG9yIGxvY2FsIGZpbGUgYW5kIHJldHVybiBpdHMgT3BlbkFQSSBvcGVyYXRpb25zIGFzIHRvb2wgc2NoZW1hcy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuQXBpVG9vbHMoXG4gIHNvdXJjZTogc3RyaW5nLFxuICBvcHRpb25zOiBPcGVuQXBpVG9vbHNPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPE9wZW5BcGlUb29sW10+IHtcbiAgY29uc3Qgc291cmNlVXJsID0gaHR0cFVybChzb3VyY2UpO1xuICBjb25zdCBkb2N1bWVudCA9IE9wZW5BcGlEb2N1bWVudFNjaGVtYS5wYXJzZShcbiAgICBzb3VyY2VVcmxcbiAgICAgID8gYXdhaXQgZmV0Y2hEb2N1bWVudChzb3VyY2VVcmwsIG9wdGlvbnMpXG4gICAgICA6IGF3YWl0IHJlYWREb2N1bWVudChzb3VyY2UsIG9wdGlvbnMuc2lnbmFsKSxcbiAgKTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGRvY3VtZW50LnBhdGhzKS5mbGF0TWFwKChbcGF0aCwgaXRlbV0pID0+XG4gICAgSFRUUF9NRVRIT0RTLmZsYXRNYXAoKG1ldGhvZCkgPT4ge1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0gaXRlbVttZXRob2QudG9Mb3dlckNhc2UoKSBhcyBMb3dlcmNhc2U8T3BlbkFwaUh0dHBNZXRob2Q+XTtcbiAgICAgIHJldHVybiBvcGVyYXRpb24gPyBbb3BlcmF0aW9uVG9vbChkb2N1bWVudCwgc291cmNlVXJsLCBwYXRoLCBtZXRob2QsIG9wZXJhdGlvbildIDogW107XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGh0dHBVcmwoc291cmNlOiBzdHJpbmcpOiBVcmxCdWlsZGVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdXJsID0gdXJsQnVpbGRlcihzb3VyY2UpO1xuICByZXR1cm4gdXJsPy5zY2hlbWUgPT09IFwiaHR0cFwiIHx8IHVybD8uc2NoZW1lID09PSBcImh0dHBzXCIgPyB1cmwgOiB1bmRlZmluZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoRG9jdW1lbnQodXJsOiBVUkwsIG9wdGlvbnM6IE9wZW5BcGlUb29sc09wdGlvbnMpOiBQcm9taXNlPHVua25vd24+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBzaWduYWw6IG9wdGlvbnMuc2lnbmFsLFxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyxcbiAgfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZW5BUEkgcmVxdWVzdCBmYWlsZWQgd2l0aCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHt1cmx9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZERvY3VtZW50KHBhdGg6IHN0cmluZywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUocGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIsIHNpZ25hbCB9KSk7XG59XG5cbmZ1bmN0aW9uIG9wZXJhdGlvblRvb2woXG4gIGRvY3VtZW50OiBPcGVuQXBpRG9jdW1lbnQsXG4gIHNvdXJjZVVybDogVVJMIHwgdW5kZWZpbmVkLFxuICBwYXRoOiBzdHJpbmcsXG4gIG1ldGhvZDogT3BlbkFwaUh0dHBNZXRob2QsXG4gIG9wZXJhdGlvbjogT3BlbkFwaU9wZXJhdGlvbixcbik6IE9wZW5BcGlUb29sIHtcbiAgY29uc3QgcmVxdWVzdFNjaGVtYSA9IGpzb25TY2hlbWEob3BlcmF0aW9uLnJlcXVlc3RCb2R5Py5jb250ZW50KSA/PyB7IHR5cGU6IFwib2JqZWN0XCIgfTtcbiAgY29uc3QgcmVzcG9uc2VTY2hlbWEgPSBzdWNjZXNzZnVsUmVzcG9uc2VTY2hlbWEob3BlcmF0aW9uKTtcbiAgcmV0dXJuIHtcbiAgICBpZDogb3BlcmF0aW9uLm9wZXJhdGlvbklkLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgb3BlcmF0aW9uLmRlc2NyaXB0aW9uPy50cmltKCkgfHwgb3BlcmF0aW9uLnN1bW1hcnk/LnRyaW0oKSB8fCBvcGVyYXRpb24ub3BlcmF0aW9uSWQsXG4gICAgdXJsOiBvcGVyYXRpb25VcmwoZG9jdW1lbnQsIHNvdXJjZVVybCwgcGF0aCksXG4gICAgbWV0aG9kLFxuICAgIGlucHV0U2NoZW1hOiByZXNvbHZlUmVmZXJlbmNlcyhkb2N1bWVudCwgcmVxdWVzdFNjaGVtYSkgYXMgSlNPTlNjaGVtYTcsXG4gICAgb3V0cHV0U2NoZW1hOiByZXNvbHZlUmVmZXJlbmNlcyhkb2N1bWVudCwgcmVzcG9uc2VTY2hlbWEpIGFzIEpTT05TY2hlbWE3LFxuICB9O1xufVxuXG5mdW5jdGlvbiBzdWNjZXNzZnVsUmVzcG9uc2VTY2hlbWEob3BlcmF0aW9uOiBPcGVuQXBpT3BlcmF0aW9uKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBmb3IgKGNvbnN0IFtzdGF0dXMsIHJlc3BvbnNlXSBvZiBPYmplY3QuZW50cmllcyhvcGVyYXRpb24ucmVzcG9uc2VzKSkge1xuICAgIGNvbnN0IHNjaGVtYSA9IGpzb25TY2hlbWEocmVzcG9uc2UuY29udGVudCk7XG4gICAgaWYgKC9eMig/OlxcZHsyfXxYWCkkL2kudGVzdChzdGF0dXMpICYmIHNjaGVtYSkgcmV0dXJuIHNjaGVtYTtcbiAgfVxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIGpzb25TY2hlbWEoXG4gIGNvbnRlbnQ6IFJlY29yZDxzdHJpbmcsIHouaW5mZXI8dHlwZW9mIE9wZW5BcGlNZWRpYVR5cGVTY2hlbWE+PiB8IHVuZGVmaW5lZCxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWVkaWFUeXBlID0gT2JqZWN0LmVudHJpZXMoY29udGVudCA/PyB7fSkuZmluZCgoW3R5cGVdKSA9PlxuICAgIC9eYXBwbGljYXRpb25cXC8oPzpbXis7XStcXCspP2pzb24oPzo7fCQpL2kudGVzdCh0eXBlKSxcbiAgKTtcbiAgcmV0dXJuIG1lZGlhVHlwZT8uWzFdLnNjaGVtYTtcbn1cblxuZnVuY3Rpb24gb3BlcmF0aW9uVXJsKGRvY3VtZW50OiBPcGVuQXBpRG9jdW1lbnQsIHNvdXJjZVVybDogVVJMIHwgdW5kZWZpbmVkLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzZXJ2ZXIgPSBkb2N1bWVudC5zZXJ2ZXJzPy5bMF0/LnVybDtcbiAgaWYgKHNlcnZlcikge1xuICAgIGNvbnN0IGJhc2UgPSBzb3VyY2VVcmwgPyB1cmxCdWlsZGVyKG5ldyBVUkwoc2VydmVyLCBzb3VyY2VVcmwpKSA6IGh0dHBVcmwoc2VydmVyKTtcbiAgICByZXR1cm4gYmFzZVxuICAgICAgPyBiYXNlLndpdGhQYXRoQXBwZW5kKHBhdGgpLnRvU3RyaW5nKClcbiAgICAgIDogYCR7c2VydmVyLnJlcGxhY2UoL1xcLyQvLCBcIlwiKX0vJHtwYXRoLnJlcGxhY2UoL15cXC8vLCBcIlwiKX1gO1xuICB9XG4gIHJldHVybiBzb3VyY2VVcmwgPyB1cmxCdWlsZGVyKHNvdXJjZVVybCk/LndpdGhQYXRoUmVwbGFjZShwYXRoKS50b1N0cmluZygpID8/IHBhdGggOiBwYXRoO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVmZXJlbmNlcyhcbiAgZG9jdW1lbnQ6IE9wZW5BcGlEb2N1bWVudCxcbiAgdmFsdWU6IHVua25vd24sXG4gIGFjdGl2ZTogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKSxcbik6IHVua25vd24ge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5tYXAoKGl0ZW0pID0+IHJlc29sdmVSZWZlcmVuY2VzKGRvY3VtZW50LCBpdGVtLCBhY3RpdmUpKTtcbiAgaWYgKCFvYmplY3QuaXNSZWNvcmQodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIGNvbnN0IHJlZmVyZW5jZSA9IHR5cGVvZiB2YWx1ZS4kcmVmID09PSBcInN0cmluZ1wiID8gdmFsdWUuJHJlZiA6IHVuZGVmaW5lZDtcbiAgaWYgKHJlZmVyZW5jZSkge1xuICAgIGlmIChhY3RpdmUuaGFzKHJlZmVyZW5jZSkpIHRocm93IG5ldyBFcnJvcihgQ3ljbGljIE9wZW5BUEkgcmVmZXJlbmNlOiAke3JlZmVyZW5jZX1gKTtcbiAgICBjb25zdCB0YXJnZXQgPSByZWZlcmVuY2VUYXJnZXQoZG9jdW1lbnQsIHJlZmVyZW5jZSk7XG4gICAgY29uc3QgbmV4dCA9IG5ldyBTZXQoYWN0aXZlKS5hZGQocmVmZXJlbmNlKTtcbiAgICBjb25zdCB7ICRyZWY6IF9pZ25vcmVkLCAuLi5zaWJsaW5ncyB9ID0gdmFsdWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihyZXNvbHZlUmVmZXJlbmNlcyhkb2N1bWVudCwgdGFyZ2V0LCBuZXh0KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiksXG4gICAgICAuLi4ocmVzb2x2ZVJlZmVyZW5jZXMoZG9jdW1lbnQsIHNpYmxpbmdzLCBuZXh0KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5tYXAoKFtrZXksIGNoaWxkXSkgPT4gW2tleSwgcmVzb2x2ZVJlZmVyZW5jZXMoZG9jdW1lbnQsIGNoaWxkLCBhY3RpdmUpXSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlZmVyZW5jZVRhcmdldChkb2N1bWVudDogT3BlbkFwaURvY3VtZW50LCByZWZlcmVuY2U6IHN0cmluZyk6IHVua25vd24ge1xuICBpZiAoIXJlZmVyZW5jZS5zdGFydHNXaXRoKFwiIy9cIikpIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgT3BlbkFQSSByZWZlcmVuY2U6ICR7cmVmZXJlbmNlfWApO1xuICBsZXQgY3VycmVudDogdW5rbm93biA9IGRvY3VtZW50O1xuICBmb3IgKGNvbnN0IHJhd1NlZ21lbnQgb2YgcmVmZXJlbmNlLnNsaWNlKDIpLnNwbGl0KFwiL1wiKSkge1xuICAgIGNvbnN0IHNlZ21lbnQgPSByYXdTZWdtZW50LnJlcGxhY2VBbGwoXCJ+MVwiLCBcIi9cIikucmVwbGFjZUFsbChcIn4wXCIsIFwiflwiKTtcbiAgICBpZiAoIW9iamVjdC5pc1JlY29yZChjdXJyZW50KSB8fCAhKHNlZ21lbnQgaW4gY3VycmVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZXNvbHZlZCBPcGVuQVBJIHJlZmVyZW5jZTogJHtyZWZlcmVuY2V9YCk7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50W3NlZ21lbnRdO1xuICB9XG4gIHJldHVybiBjdXJyZW50O1xufVxuXG5pZiAoaW1wb3J0Lm1ldGEubWFpbikge1xuICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzLmFyZ3ZbMl07XG4gIGlmICghc291cmNlKSB0aHJvdyBuZXcgRXJyb3IoXCJVc2FnZTogYnVuIG9wZW5hcGktdG9vbC50cyA8b3BlbmFwaS11cmwtb3ItZmlsZT5cIik7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGF3YWl0IG9wZW5BcGlUb29scyhzb3VyY2UpLCBudWxsLCAyKSk7XG59XG4iXX0=
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFwaS10b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZW5hcGktdG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFtQixNQUFNLDRCQUE0QixDQUFDO0FBRXpFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxZQUFZLEdBQUc7SUFDbkIsS0FBSztJQUNMLE1BQU07SUFDTixLQUFLO0lBQ0wsT0FBTztJQUNQLFFBQVE7SUFDUixTQUFTO0lBQ1QsTUFBTTtJQUNOLE9BQU87Q0FDQyxDQUFDO0FBRVgsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDO0tBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQy9CLFFBQVEsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0FBRTlELE1BQU0sc0JBQXNCLEdBQUcsQ0FBQztLQUM3QixNQUFNLENBQUM7SUFDTixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHNDQUFzQyxDQUFDO0NBQzFFLENBQUM7S0FDRCxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUV2QyxNQUFNLHdCQUF3QixHQUFHLENBQUM7S0FDL0IsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLENBQUM7U0FDUCxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLHNCQUFzQixDQUFDO1NBQzFDLFFBQVEsQ0FBQyw0Q0FBNEMsQ0FBQztDQUMxRCxDQUFDO0tBQ0QsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFeEMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDO0tBQzVCLE1BQU0s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QUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsTUFBTTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztJQUNqRixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlbkFQSSBvcGVyYXRpb24gbG9hZGluZyBhbmQgSlNPTiBTY2hlbWEgZXh0cmFjdGlvbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyB1cmxCdWlsZGVyLCB0eXBlIFVybEJ1aWxkZXIgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9uZXRcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IEhUVFBfTUVUSE9EUyA9IFtcbiAgXCJHRVRcIixcbiAgXCJQT1NUXCIsXG4gIFwiUFVUXCIsXG4gIFwiUEFUQ0hcIixcbiAgXCJERUxFVEVcIixcbiAgXCJPUFRJT05TXCIsXG4gIFwiSEVBRFwiLFxuICBcIlRSQUNFXCIsXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBKc29uT2JqZWN0U2NoZW1hID0gelxuICAucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKVxuICAuZGVzY3JpYmUoXCJBIEpTT04gb2JqZWN0IGVtYmVkZGVkIGluIGFuIE9wZW5BUEkgZG9jdW1lbnQuXCIpO1xuXG5jb25zdCBPcGVuQXBpTWVkaWFUeXBlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBzY2hlbWE6IEpzb25PYmplY3RTY2hlbWEuZGVzY3JpYmUoXCJUaGUgSlNPTiBTY2hlbWEgZm9yIHRoaXMgbWVkaWEgdHlwZS5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIk9uZSBPcGVuQVBJIG1lZGlhIHR5cGUuXCIpO1xuXG5jb25zdCBPcGVuQXBpUmVxdWVzdEJvZHlTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGNvbnRlbnQ6IHpcbiAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgT3BlbkFwaU1lZGlhVHlwZVNjaGVtYSlcbiAgICAgIC5kZXNjcmliZShcIlJlcXVlc3QgbWVkaWEgdHlwZXMga2V5ZWQgYnkgY29udGVudCB0eXBlLlwiKSxcbiAgfSlcbiAgLmRlc2NyaWJlKFwiQW4gT3BlbkFQSSByZXF1ZXN0IGJvZHkuXCIpO1xuXG5jb25zdCBPcGVuQXBpUmVzcG9uc2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGNvbnRlbnQ6IHpcbiAgICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgT3BlbkFwaU1lZGlhVHlwZVNjaGVtYSlcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJSZXNwb25zZSBtZWRpYSB0eXBlcyBrZXllZCBieSBjb250ZW50IHR5cGUuXCIpLFxuICB9KVxuICAuZGVzY3JpYmUoXCJPbmUgT3BlbkFQSSByZXNwb25zZS5cIik7XG5cbmNvbnN0IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG9wZXJhdGlvbklkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIHN0YWJsZSBvcGVyYXRpb24gaWRlbnRpZmllci5cIiksXG4gICAgc3VtbWFyeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIHNob3J0IG9wZXJhdGlvbiBzdW1tYXJ5LlwiKSxcbiAgICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVGhlIGZ1bGwgb3BlcmF0aW9uIGRlc2NyaXB0aW9uLlwiKSxcbiAgICByZXF1ZXN0Qm9keTogT3BlbkFwaVJlcXVlc3RCb2R5U2NoZW1hLm9wdGlvbmFsKCkuZGVzY3JpYmUoXG4gICAgICBcIlRoZSBvcHRpb25hbCBvcGVyYXRpb24gcmVxdWVzdCBib2R5LlwiLFxuICAgICksXG4gICAgcmVzcG9uc2VzOiB6XG4gICAgICAucmVjb3JkKHouc3RyaW5nKCksIE9wZW5BcGlSZXNwb25zZVNjaGVtYSlcbiAgICAgIC5kZXNjcmliZShcIk9wZXJhdGlvbiByZXNwb25zZXMga2V5ZWQgYnkgSFRUUCBzdGF0dXMuXCIpLFxuICB9KVxuICAuZGVzY3JpYmUoXCJUaGUgT3BlbkFQSSBmaWVsZHMgcmVxdWlyZWQgdG8gZGVmaW5lIGEgdG9vbC5cIik7XG5cbmNvbnN0IE9wZW5BcGlQYXRoU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBnZXQ6IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBwb3N0OiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgcHV0OiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgcGF0Y2g6IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBkZWxldGU6IE9wZW5BcGlPcGVyYXRpb25TY2hlbWEub3B0aW9uYWwoKSxcbiAgICBvcHRpb25zOiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgaGVhZDogT3BlbkFwaU9wZXJhdGlvblNjaGVtYS5vcHRpb25hbCgpLFxuICAgIHRyYWNlOiBPcGVuQXBpT3BlcmF0aW9uU2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5kZXNjcmliZShcIk9wZXJhdGlvbnMgYXZhaWxhYmxlIGF0IG9uZSBPcGVuQVBJIHBhdGguXCIpO1xuXG5jb25zdCBPcGVuQXBpRG9jdW1lbnRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHBhdGhzOiB6XG4gICAgICAucmVjb3JkKHouc3RyaW5nKCksIE9wZW5BcGlQYXRoU2NoZW1hKVxuICAgICAgLnJlZmluZSgocGF0aHMpID0+IE9iamVjdC5rZXlzKHBhdGhzKS5sZW5ndGggPiAwLCBcIk9wZW5BUEkgcGF0aHMgbXVzdCBub3QgYmUgZW1wdHlcIilcbiAgICAgIC5kZXNjcmliZShcIk9wZW5BUEkgcGF0aCBpdGVtcyBrZXllZCBieSBVUkwgcGF0aC5cIiksXG4gICAgY29tcG9uZW50czogSnNvbk9iamVjdFNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiUmV1c2FibGUgT3BlbkFQSSBjb21wb25lbnRzLlwiKSxcbiAgICBzZXJ2ZXJzOiB6XG4gICAgICAuYXJyYXkoXG4gICAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgICB1cmw6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJTZXJ2ZXIgYmFzZSBVUkwuXCIpLFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJPcGVuQVBJIHNlcnZlciBkZWZpbml0aW9ucy5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIkFuIE9wZW5BUEkgZG9jdW1lbnQgdXNlZCB0byBkZWZpbmUgSFRUUCB0b29scy5cIik7XG5cbnR5cGUgT3BlbkFwaURvY3VtZW50ID0gei5pbmZlcjx0eXBlb2YgT3BlbkFwaURvY3VtZW50U2NoZW1hPjtcbnR5cGUgT3BlbkFwaU9wZXJhdGlvbiA9IHouaW5mZXI8dHlwZW9mIE9wZW5BcGlPcGVyYXRpb25TY2hlbWE+O1xuXG4vKiogSFRUUCBtZXRob2Qgc3VwcG9ydGVkIGJ5IGFuIHtAbGluayBPcGVuQXBpVG9vbH0uICovXG5leHBvcnQgdHlwZSBPcGVuQXBpSHR0cE1ldGhvZCA9ICh0eXBlb2YgSFRUUF9NRVRIT0RTKVtudW1iZXJdO1xuXG4vKiogT25lIGV4ZWN1dGFibGUgSFRUUCBvcGVyYXRpb24gZGVyaXZlZCBmcm9tIGFuIE9wZW5BUEkgZG9jdW1lbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BcGlUb29sIHtcbiAgLyoqIFN0YWJsZSBvcGVyYXRpb24gaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIE1vZGVsLWZhY2luZyBvcGVyYXRpb24gZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBSZXNvbHZlZCBvcGVyYXRpb24gVVJMLCBvciB0aGUgT3BlbkFQSSBwYXRoIGZvciBhIGxvY2FsIGRvY3VtZW50IHdpdGhvdXQgYSBzZXJ2ZXIgVVJMLiAqL1xuICB1cmw6IHN0cmluZztcbiAgLyoqIEhUVFAgbWV0aG9kIHVzZWQgYnkgdGhlIG9wZXJhdGlvbi4gKi9cbiAgbWV0aG9kOiBPcGVuQXBpSHR0cE1ldGhvZDtcbiAgLyoqIEpTT04gU2NoZW1hIGRlc2NyaWJpbmcgb3BlcmF0aW9uIGlucHV0LiAqL1xuICBpbnB1dFNjaGVtYTogSlNPTlNjaGVtYTc7XG4gIC8qKiBKU09OIFNjaGVtYSBkZXNjcmliaW5nIGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24gcmVzdWx0LiAqL1xuICBvdXRwdXRTY2hlbWE6IEpTT05TY2hlbWE3O1xufVxuXG4vKiogUmVxdWVzdCBvcHRpb25zIHVzZWQgd2hpbGUgbG9hZGluZyBhbiBPcGVuQVBJIGRvY3VtZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuQXBpVG9vbHNPcHRpb25zIHtcbiAgLyoqIENhbmNlbHMgYW4gSFRUUCByZXF1ZXN0IG9yIGZpbGUgcmVhZC4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBIZWFkZXJzIHNlbnQgd2hlbiBgc291cmNlYCBpcyBhbiBIVFRQKFMpIFVSTC4gKi9cbiAgaGVhZGVycz86IFJlcXVlc3RJbml0W1wiaGVhZGVyc1wiXTtcbn1cblxuLyoqIExvYWQgYW4gSFRUUChTKSBVUkwgb3IgbG9jYWwgZmlsZSBhbmQgcmV0dXJuIGl0cyBPcGVuQVBJIG9wZXJhdGlvbnMgYXMgdG9vbCBzY2hlbWFzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5BcGlUb29scyhcbiAgc291cmNlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IE9wZW5BcGlUb29sc09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8T3BlbkFwaVRvb2xbXT4ge1xuICBjb25zdCBzb3VyY2VVcmwgPSBodHRwVXJsKHNvdXJjZSk7XG4gIGNvbnN0IGRvY3VtZW50ID0gT3BlbkFwaURvY3VtZW50U2NoZW1hLnBhcnNlKFxuICAgIHNvdXJjZVVybFxuICAgICAgPyBhd2FpdCBmZXRjaERvY3VtZW50KHNvdXJjZVVybCwgb3B0aW9ucylcbiAgICAgIDogYXdhaXQgcmVhZERvY3VtZW50KHNvdXJjZSwgb3B0aW9ucy5zaWduYWwpLFxuICApO1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZG9jdW1lbnQucGF0aHMpLmZsYXRNYXAoKFtwYXRoLCBpdGVtXSkgPT5cbiAgICBIVFRQX01FVEhPRFMuZmxhdE1hcCgobWV0aG9kKSA9PiB7XG4gICAgICBjb25zdCBvcGVyYXRpb24gPSBpdGVtW21ldGhvZC50b0xvd2VyQ2FzZSgpIGFzIExvd2VyY2FzZTxPcGVuQXBpSHR0cE1ldGhvZD5dO1xuICAgICAgcmV0dXJuIG9wZXJhdGlvbiA/IFtvcGVyYXRpb25Ub29sKGRvY3VtZW50LCBzb3VyY2VVcmwsIHBhdGgsIG1ldGhvZCwgb3BlcmF0aW9uKV0gOiBbXTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaHR0cFVybChzb3VyY2U6IHN0cmluZyk6IFVybEJ1aWxkZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHNvdXJjZS50cmltKCk7XG4gIGlmICghdmFsdWUuc3RhcnRzV2l0aChcImh0dHA6Ly9cIikgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdXJsID0gdXJsQnVpbGRlcih2YWx1ZSk7XG4gIHJldHVybiB1cmw/LnNjaGVtZSA9PT0gXCJodHRwXCIgfHwgdXJsPy5zY2hlbWUgPT09IFwiaHR0cHNcIiA/IHVybCA6IHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hEb2N1bWVudCh1cmw6IFVSTCwgb3B0aW9uczogT3BlbkFwaVRvb2xzT3B0aW9ucyk6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgIHNpZ25hbDogb3B0aW9ucy5zaWduYWwsXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzLFxuICB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgT3BlbkFQSSByZXF1ZXN0IGZhaWxlZCB3aXRoIEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3VybH1gKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkRG9jdW1lbnQocGF0aDogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiwgc2lnbmFsIH0pKTtcbn1cblxuZnVuY3Rpb24gb3BlcmF0aW9uVG9vbChcbiAgZG9jdW1lbnQ6IE9wZW5BcGlEb2N1bWVudCxcbiAgc291cmNlVXJsOiBVUkwgfCB1bmRlZmluZWQsXG4gIHBhdGg6IHN0cmluZyxcbiAgbWV0aG9kOiBPcGVuQXBpSHR0cE1ldGhvZCxcbiAgb3BlcmF0aW9uOiBPcGVuQXBpT3BlcmF0aW9uLFxuKTogT3BlbkFwaVRvb2wge1xuICBjb25zdCByZXF1ZXN0U2NoZW1hID0ganNvblNjaGVtYShvcGVyYXRpb24ucmVxdWVzdEJvZHk/LmNvbnRlbnQpID8/IHsgdHlwZTogXCJvYmplY3RcIiB9O1xuICBjb25zdCByZXNwb25zZVNjaGVtYSA9IHN1Y2Nlc3NmdWxSZXNwb25zZVNjaGVtYShvcGVyYXRpb24pO1xuICByZXR1cm4ge1xuICAgIGlkOiBvcGVyYXRpb24ub3BlcmF0aW9uSWQsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBvcGVyYXRpb24uZGVzY3JpcHRpb24/LnRyaW0oKSB8fCBvcGVyYXRpb24uc3VtbWFyeT8udHJpbSgpIHx8IG9wZXJhdGlvbi5vcGVyYXRpb25JZCxcbiAgICB1cmw6IG9wZXJhdGlvblVybChkb2N1bWVudCwgc291cmNlVXJsLCBwYXRoKSxcbiAgICBtZXRob2QsXG4gICAgaW5wdXRTY2hlbWE6IHJlc29sdmVSZWZlcmVuY2VzKGRvY3VtZW50LCByZXF1ZXN0U2NoZW1hKSBhcyBKU09OU2NoZW1hNyxcbiAgICBvdXRwdXRTY2hlbWE6IHJlc29sdmVSZWZlcmVuY2VzKGRvY3VtZW50LCByZXNwb25zZVNjaGVtYSkgYXMgSlNPTlNjaGVtYTcsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN1Y2Nlc3NmdWxSZXNwb25zZVNjaGVtYShvcGVyYXRpb246IE9wZW5BcGlPcGVyYXRpb24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGZvciAoY29uc3QgW3N0YXR1cywgcmVzcG9uc2VdIG9mIE9iamVjdC5lbnRyaWVzKG9wZXJhdGlvbi5yZXNwb25zZXMpKSB7XG4gICAgY29uc3Qgc2NoZW1hID0ganNvblNjaGVtYShyZXNwb25zZS5jb250ZW50KTtcbiAgICBpZiAoL14yKD86XFxkezJ9fFhYKSQvaS50ZXN0KHN0YXR1cykgJiYgc2NoZW1hKSByZXR1cm4gc2NoZW1hO1xuICB9XG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24ganNvblNjaGVtYShcbiAgY29udGVudDogUmVjb3JkPHN0cmluZywgei5pbmZlcjx0eXBlb2YgT3BlbkFwaU1lZGlhVHlwZVNjaGVtYT4+IHwgdW5kZWZpbmVkLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBjb25zdCBtZWRpYVR5cGUgPSBPYmplY3QuZW50cmllcyhjb250ZW50ID8/IHt9KS5maW5kKChbdHlwZV0pID0+XG4gICAgL15hcHBsaWNhdGlvblxcLyg/OlteKztdK1xcKyk/anNvbig/Ojt8JCkvaS50ZXN0KHR5cGUpLFxuICApO1xuICByZXR1cm4gbWVkaWFUeXBlPy5bMV0uc2NoZW1hO1xufVxuXG5mdW5jdGlvbiBvcGVyYXRpb25VcmwoZG9jdW1lbnQ6IE9wZW5BcGlEb2N1bWVudCwgc291cmNlVXJsOiBVUkwgfCB1bmRlZmluZWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlcnZlciA9IGRvY3VtZW50LnNlcnZlcnM/LlswXT8udXJsO1xuICBpZiAoc2VydmVyKSB7XG4gICAgY29uc3QgYmFzZSA9IHNvdXJjZVVybCA/IHVybEJ1aWxkZXIobmV3IFVSTChzZXJ2ZXIsIHNvdXJjZVVybCkpIDogaHR0cFVybChzZXJ2ZXIpO1xuICAgIHJldHVybiBiYXNlXG4gICAgICA/IGJhc2Uud2l0aFBhdGhBcHBlbmQocGF0aCkudG9TdHJpbmcoKVxuICAgICAgOiBgJHtzZXJ2ZXIucmVwbGFjZSgvXFwvJC8sIFwiXCIpfS8ke3BhdGgucmVwbGFjZSgvXlxcLy8sIFwiXCIpfWA7XG4gIH1cbiAgcmV0dXJuIHNvdXJjZVVybCA/IHVybEJ1aWxkZXIoc291cmNlVXJsKT8ud2l0aFBhdGhSZXBsYWNlKHBhdGgpLnRvU3RyaW5nKCkgPz8gcGF0aCA6IHBhdGg7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVSZWZlcmVuY2VzKFxuICBkb2N1bWVudDogT3BlbkFwaURvY3VtZW50LFxuICB2YWx1ZTogdW5rbm93bixcbiAgYWN0aXZlOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLm1hcCgoaXRlbSkgPT4gcmVzb2x2ZVJlZmVyZW5jZXMoZG9jdW1lbnQsIGl0ZW0sIGFjdGl2ZSkpO1xuICBpZiAoIW9iamVjdC5pc1JlY29yZCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgcmVmZXJlbmNlID0gdHlwZW9mIHZhbHVlLiRyZWYgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS4kcmVmIDogdW5kZWZpbmVkO1xuICBpZiAocmVmZXJlbmNlKSB7XG4gICAgaWYgKGFjdGl2ZS5oYXMocmVmZXJlbmNlKSkgdGhyb3cgbmV3IEVycm9yKGBDeWNsaWMgT3BlbkFQSSByZWZlcmVuY2U6ICR7cmVmZXJlbmNlfWApO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZmVyZW5jZVRhcmdldChkb2N1bWVudCwgcmVmZXJlbmNlKTtcbiAgICBjb25zdCBuZXh0ID0gbmV3IFNldChhY3RpdmUpLmFkZChyZWZlcmVuY2UpO1xuICAgIGNvbnN0IHsgJHJlZjogX2lnbm9yZWQsIC4uLnNpYmxpbmdzIH0gPSB2YWx1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKHJlc29sdmVSZWZlcmVuY2VzKGRvY3VtZW50LCB0YXJnZXQsIG5leHQpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSxcbiAgICAgIC4uLihyZXNvbHZlUmVmZXJlbmNlcyhkb2N1bWVudCwgc2libGluZ3MsIG5leHQpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW2tleSwgY2hpbGRdKSA9PiBba2V5LCByZXNvbHZlUmVmZXJlbmNlcyhkb2N1bWVudCwgY2hpbGQsIGFjdGl2ZSldKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVmZXJlbmNlVGFyZ2V0KGRvY3VtZW50OiBPcGVuQXBpRG9jdW1lbnQsIHJlZmVyZW5jZTogc3RyaW5nKTogdW5rbm93biB7XG4gIGlmICghcmVmZXJlbmNlLnN0YXJ0c1dpdGgoXCIjL1wiKSkgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBPcGVuQVBJIHJlZmVyZW5jZTogJHtyZWZlcmVuY2V9YCk7XG4gIGxldCBjdXJyZW50OiB1bmtub3duID0gZG9jdW1lbnQ7XG4gIGZvciAoY29uc3QgcmF3U2VnbWVudCBvZiByZWZlcmVuY2Uuc2xpY2UoMikuc3BsaXQoXCIvXCIpKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IHJhd1NlZ21lbnQucmVwbGFjZUFsbChcIn4xXCIsIFwiL1wiKS5yZXBsYWNlQWxsKFwifjBcIiwgXCJ+XCIpO1xuICAgIGlmICghb2JqZWN0LmlzUmVjb3JkKGN1cnJlbnQpIHx8ICEoc2VnbWVudCBpbiBjdXJyZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlc29sdmVkIE9wZW5BUEkgcmVmZXJlbmNlOiAke3JlZmVyZW5jZX1gKTtcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnRbc2VnbWVudF07XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbmlmIChpbXBvcnQubWV0YS5tYWluKSB7XG4gIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3MuYXJndlsyXTtcbiAgaWYgKCFzb3VyY2UpIHRocm93IG5ldyBFcnJvcihcIlVzYWdlOiBidW4gb3BlbmFwaS10b29sLnRzIDxvcGVuYXBpLXVybC1vci1maWxlPlwiKTtcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYXdhaXQgb3BlbkFwaVRvb2xzKHNvdXJjZSksIG51bGwsIDIpKTtcbn1cbiJdfQ==
|
package/lib/src/sandbox.d.ts
CHANGED
|
@@ -68,6 +68,7 @@ export declare class DatabricksSandbox implements WorkspaceSandbox {
|
|
|
68
68
|
private remoteCreatedAt?;
|
|
69
69
|
private lastUsedAt?;
|
|
70
70
|
private activeFallback?;
|
|
71
|
+
private fallbackPromise?;
|
|
71
72
|
private startPromise?;
|
|
72
73
|
constructor(options: DatabricksSandboxOptions);
|
|
73
74
|
get provider(): string;
|
|
@@ -84,6 +85,12 @@ export declare class DatabricksSandbox implements WorkspaceSandbox {
|
|
|
84
85
|
destroy(): Promise<void>;
|
|
85
86
|
/** Execute one foreground shell command in the remote sandbox. */
|
|
86
87
|
executeCommand(command: string, args?: string[], options?: ExecuteCommandOptions): Promise<CommandResult>;
|
|
88
|
+
/** Activate the configured fallback once across concurrent command failures. */
|
|
89
|
+
private activateFallback;
|
|
90
|
+
/** Start and publish the configured fallback after rechecking active state. */
|
|
91
|
+
private startFallback;
|
|
92
|
+
/** Execute through the active fallback or return an unsupported result. */
|
|
93
|
+
private executeFallback;
|
|
87
94
|
/** Whether the adapter currently knows the remote sandbox to be running. */
|
|
88
95
|
isReady(): Promise<boolean>;
|
|
89
96
|
/** Report Mastra-facing sandbox metadata. */
|
package/lib/src/sandbox.js
CHANGED
|
@@ -53,6 +53,7 @@ export class DatabricksSandbox {
|
|
|
53
53
|
remoteCreatedAt;
|
|
54
54
|
lastUsedAt;
|
|
55
55
|
activeFallback;
|
|
56
|
+
fallbackPromise;
|
|
56
57
|
startPromise;
|
|
57
58
|
constructor(options) {
|
|
58
59
|
const id = stringUtils.trimToNull(options.sandboxId.replace(/^sandboxes\//, ""));
|
|
@@ -116,16 +117,7 @@ export class DatabricksSandbox {
|
|
|
116
117
|
}
|
|
117
118
|
catch (caught) {
|
|
118
119
|
if (this.fallbackConfig !== false && isDatabricksSandboxUnavailable(caught)) {
|
|
119
|
-
|
|
120
|
-
logger.warn("Databricks Sandbox unavailable; using fallback", {
|
|
121
|
-
sandboxId: this.id,
|
|
122
|
-
fallback: fallback.provider,
|
|
123
|
-
error: errorUtils.errorMessage(caught),
|
|
124
|
-
});
|
|
125
|
-
await fallback.start?.();
|
|
126
|
-
this.activeFallback = fallback;
|
|
127
|
-
this.status = fallback.status;
|
|
128
|
-
this.error = fallback.error;
|
|
120
|
+
await this.activateFallback(caught);
|
|
129
121
|
return;
|
|
130
122
|
}
|
|
131
123
|
this.status = "error";
|
|
@@ -192,31 +184,29 @@ export class DatabricksSandbox {
|
|
|
192
184
|
async executeCommand(command, args = [], options = {}) {
|
|
193
185
|
await this.startWithSignal(options.abortSignal);
|
|
194
186
|
if (this.activeFallback) {
|
|
195
|
-
|
|
196
|
-
return {
|
|
197
|
-
command,
|
|
198
|
-
args,
|
|
199
|
-
success: false,
|
|
200
|
-
exitCode: 1,
|
|
201
|
-
stdout: "",
|
|
202
|
-
stderr: `Fallback sandbox ${this.activeFallback.provider} does not support command execution.`,
|
|
203
|
-
executionTimeMs: 0,
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
return this.activeFallback.executeCommand(command, args, options);
|
|
187
|
+
return this.executeFallback(command, args, options);
|
|
207
188
|
}
|
|
208
189
|
const timeout = options.timeout ?? this.commandTimeoutMs;
|
|
209
190
|
const script = commandScript(command, args, options.cwd);
|
|
210
191
|
const started = performance.now();
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
192
|
+
let response;
|
|
193
|
+
try {
|
|
194
|
+
response = await this.request(`${SANDBOX_EXEC_API_PATH}/${encodeURIComponent(this.id)}/exec-sync`, "POST", ExecuteResponseSchema, {
|
|
195
|
+
payload: {
|
|
196
|
+
cmd: "/bin/bash",
|
|
197
|
+
args: ["-lc", script],
|
|
198
|
+
envs: definedEnvironment(options.env),
|
|
199
|
+
execution_timeout: `${Math.max(1, Math.ceil(timeout / 1_000))}s`,
|
|
200
|
+
},
|
|
201
|
+
signal: options.abortSignal,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
catch (caught) {
|
|
205
|
+
if (this.fallbackConfig === false || !isDatabricksSandboxUnavailable(caught))
|
|
206
|
+
throw caught;
|
|
207
|
+
await this.activateFallback(caught);
|
|
208
|
+
return this.executeFallback(command, args, options);
|
|
209
|
+
}
|
|
220
210
|
const stdout = response.stdout ?? "";
|
|
221
211
|
const stderr = response.stderr ?? "";
|
|
222
212
|
options.onStdout?.(stdout);
|
|
@@ -241,6 +231,58 @@ export class DatabricksSandbox {
|
|
|
241
231
|
: {}),
|
|
242
232
|
};
|
|
243
233
|
}
|
|
234
|
+
/** Activate the configured fallback once across concurrent command failures. */
|
|
235
|
+
async activateFallback(caught) {
|
|
236
|
+
if (this.activeFallback)
|
|
237
|
+
return;
|
|
238
|
+
if (this.fallbackPromise) {
|
|
239
|
+
await this.fallbackPromise;
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const pending = this.startFallback(caught);
|
|
243
|
+
this.fallbackPromise = pending;
|
|
244
|
+
try {
|
|
245
|
+
await pending;
|
|
246
|
+
}
|
|
247
|
+
finally {
|
|
248
|
+
if (this.fallbackPromise === pending)
|
|
249
|
+
this.fallbackPromise = undefined;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/** Start and publish the configured fallback after rechecking active state. */
|
|
253
|
+
async startFallback(caught) {
|
|
254
|
+
if (this.activeFallback)
|
|
255
|
+
return;
|
|
256
|
+
if (this.fallbackConfig === false)
|
|
257
|
+
throw caught;
|
|
258
|
+
const fallback = resolveFallback(this.fallbackConfig);
|
|
259
|
+
logger.warn("Databricks Sandbox unavailable; using fallback", {
|
|
260
|
+
sandboxId: this.id,
|
|
261
|
+
fallback: fallback.provider,
|
|
262
|
+
error: errorUtils.errorMessage(caught),
|
|
263
|
+
});
|
|
264
|
+
await fallback.start?.();
|
|
265
|
+
this.activeFallback = fallback;
|
|
266
|
+
this.status = fallback.status;
|
|
267
|
+
this.error = fallback.error;
|
|
268
|
+
}
|
|
269
|
+
/** Execute through the active fallback or return an unsupported result. */
|
|
270
|
+
executeFallback(command, args, options) {
|
|
271
|
+
const fallback = this.activeFallback;
|
|
272
|
+
if (!fallback)
|
|
273
|
+
throw new Error("Fallback sandbox is not active");
|
|
274
|
+
if (fallback.executeCommand)
|
|
275
|
+
return fallback.executeCommand(command, args, options);
|
|
276
|
+
return Promise.resolve({
|
|
277
|
+
command,
|
|
278
|
+
args,
|
|
279
|
+
success: false,
|
|
280
|
+
exitCode: 1,
|
|
281
|
+
stdout: "",
|
|
282
|
+
stderr: `Fallback sandbox ${fallback.provider} does not support command execution.`,
|
|
283
|
+
executionTimeMs: 0,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
244
286
|
/** Whether the adapter currently knows the remote sandbox to be running. */
|
|
245
287
|
async isReady() {
|
|
246
288
|
if (this.activeFallback) {
|
|
@@ -415,4 +457,4 @@ function isDatabricksSandboxUnavailable(caught) {
|
|
|
415
457
|
context.hasMessage("preview", "unavailable") ||
|
|
416
458
|
context.hasMessage("preview", "disabled"));
|
|
417
459
|
}
|
|
418
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFTbEYsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBRTVFLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUM7QUFDOUMsTUFBTSxxQkFBcUIsR0FBRyxpQ0FBaUMsQ0FBQztBQUNoRSxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLDBCQUEwQixHQUFHLE9BQU8sQ0FBQztBQUMzQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFNUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQztBQUVILE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0NBQ3RDLENBQUMsQ0FBQztBQUVILE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN0QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNsQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QixVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNsQyxDQUFDLENBQUM7QUEyQ0gsc0VBQXNFO0FBQ3RFLE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsRUFBRSxDQUFTO0lBQ1gsSUFBSSxDQUFTO0lBQ3RCLE1BQU0sR0FBbUIsU0FBUyxDQUFDO0lBQ25DLEtBQUssQ0FBVTtJQUVFLE1BQU0sQ0FBa0I7SUFDeEIsV0FBVyxDQUFTO0lBQ3BCLGlCQUFpQixDQUFTO0lBQzFCLGdCQUFnQixDQUFTO0lBQ3pCLGdCQUFnQixDQUFTO0lBQ3pCLGNBQWMsQ0FBMkQ7SUFDekUsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDaEMsZUFBZSxDQUFRO0lBQ3ZCLFVBQVUsQ0FBUTtJQUNsQixjQUFjLENBQW9CO0lBQ2xDLFlBQVksQ0FBaUI7SUFFckMsWUFBWSxPQUFpQztRQUMzQyxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxFQUFFO1lBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLElBQUksMEJBQTBCLENBQUM7UUFDakYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSwwQkFBMEIsQ0FBQztRQUMvRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLDBCQUEwQixDQUFDO1FBQy9FLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLElBQUksWUFBWSxDQUFDO0lBQ3ZELENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFvQjtRQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUztZQUFFLE9BQU87UUFDdEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztRQUM1QixJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sQ0FBQztRQUNoQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssT0FBTztnQkFBRSxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBb0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ3ZCLElBQUksQ0FBQztZQUNILElBQUksT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxLQUFLLHVCQUF1QixFQUFFLENBQUM7Z0JBQ3RELE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxLQUFLLHdCQUF3QixFQUFFLENBQUM7Z0JBQ3ZELE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDekQsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEtBQUssdUJBQXVCLEVBQUUsQ0FBQztnQkFDdEQsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUFDLE9BQU8sTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLEtBQUssSUFBSSw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM1RSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxFQUFFO29CQUM1RCxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ2xCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtvQkFDM0IsS0FBSyxFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO2lCQUN2QyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUM1QixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxNQUFNLE1BQU0sQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLElBQUksS0FBSyxDQUFDO0lBQzNELENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVc7WUFBRSxPQUFPO1FBQ3JFLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO1FBQ3pCLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUMxQixDQUFDO1FBQUMsT0FBTyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7Z0JBQ3hCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLE1BQU0sTUFBTSxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsS0FBSyxDQUFDLE9BQU87UUFDWCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVc7WUFBRSxPQUFPO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1FBQzVCLENBQUM7UUFBQyxPQUFPLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztnQkFDMUIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztZQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsTUFBTSxNQUFNLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELGtFQUFrRTtJQUNsRSxLQUFLLENBQUMsY0FBYyxDQUNsQixPQUFlLEVBQ2YsT0FBaUIsRUFBRSxFQUNuQixVQUFpQyxFQUFFO1FBRW5DLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hDLE9BQU87b0JBQ0wsT0FBTztvQkFDUCxJQUFJO29CQUNKLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxDQUFDO29CQUNYLE1BQU0sRUFBRSxFQUFFO29CQUNWLE1BQU0sRUFBRSxvQkFBb0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLHNDQUFzQztvQkFDOUYsZUFBZSxFQUFFLENBQUM7aUJBQ25CLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FDakMsR0FBRyxxQkFBcUIsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFDbkUsTUFBTSxFQUNOLHFCQUFxQixFQUNyQjtZQUNFLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsV0FBVztnQkFDaEIsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztnQkFDckIsSUFBSSxFQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ3JDLGlCQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRzthQUNqRTtZQUNELE1BQU0sRUFBRSxPQUFPLENBQUMsV0FBVztTQUM1QixDQUNGLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxLQUFLLGtDQUFrQyxDQUFDO1FBQ3hFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUMsT0FBTztZQUNMLE9BQU87WUFDUCxJQUFJO1lBQ0osT0FBTyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEtBQUssa0NBQWtDLElBQUksUUFBUSxLQUFLLENBQUM7WUFDakYsUUFBUTtZQUNSLE1BQU07WUFDTixNQUFNO1lBQ04sZUFBZSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPO1lBQzVDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVM7Z0JBQ3BCLENBQUMsQ0FBQztvQkFDRSxlQUFlLEVBQUUsSUFBSTtvQkFDckIsZUFBZSxFQUFFLElBQUk7aUJBQ3RCO2dCQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUixDQUFDO0lBQ0osQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMzQyxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsTUFBTTtnQkFDVCxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssS0FBSyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEYsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQztRQUNuQyxDQUFDO1FBQUMsT0FBTyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3hDLE1BQU0sTUFBTSxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsS0FBSyxDQUFDLE9BQU87UUFDWCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixPQUFPLENBQ0wsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJO2dCQUN6QyxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJO2dCQUM5QixRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRO2dCQUN0QyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO2dCQUNsQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDMUIsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxJQUFJLEVBQUUsT0FBTyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSTtZQUN2QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQ2pELEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxRQUFRLEVBQUU7Z0JBQ1IsWUFBWSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLO2dCQUNsQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFdBQVc7YUFDaEM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxlQUFlO1FBQ2IsT0FBTztZQUNMLHVGQUF1RjtZQUN2RixvRkFBb0Y7WUFDcEYsdUdBQXVHO1lBQ3ZHLGlHQUFpRztTQUNsRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFZLFlBQVk7UUFDdEIsT0FBTyxHQUFHLGdCQUFnQixJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQW9CO1FBQzVDLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFBQyxPQUFPLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztnQkFBRSxNQUFNLE1BQU0sQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRTtnQkFDbEYsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQzlCLE9BQU8sRUFBRTtvQkFDUCxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzlCLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUU7NEJBQ1Asa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjt5QkFDM0M7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsTUFBTTthQUNQLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUFDLE9BQU8sTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2dCQUFFLE1BQU0sTUFBTSxDQUFDO1lBQ3pDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBb0I7UUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFO1lBQ2xGLE1BQU07U0FDUCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxNQUFNLENBQUMsU0FBMkIsRUFBRSxNQUFvQjtRQUM5RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRTtZQUN0RixNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFvQjtRQUMvRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxPQUFPLENBQUM7WUFDdkQsTUFBTSxVQUFVLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHNCQUFzQixJQUFJLENBQUMsRUFBRSxrQkFBa0IsUUFBUSxXQUFXLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQXlCO1FBQ2pELElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFBRSxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztJQUNyRSxDQUFDO0lBRU8sS0FBSyxDQUFDLE9BQU8sQ0FDbkIsSUFBWSxFQUNaLE1BQWlDLEVBQ2pDLE1BQW9CLEVBQ3BCLFVBSUksRUFBRTtRQUVOLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUNsRDtZQUNFLElBQUk7WUFDSixNQUFNO1lBQ04sS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sRUFBRSxJQUFJLE9BQU8sQ0FBQztnQkFDbkIsTUFBTSxFQUFFLGtCQUFrQjtnQkFDMUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLENBQUM7YUFDakYsQ0FBQztZQUNGLEdBQUcsRUFBRSxLQUFLO1lBQ1YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN2RSxFQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ2xFLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBRUQsU0FBUyxhQUFhLENBQUMsT0FBZSxFQUFFLElBQXVCLEVBQUUsR0FBdUI7SUFDdEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDeEYsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQWE7SUFDL0IsT0FBTyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsS0FBb0M7SUFDOUQsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ2hDLENBQUMsS0FBSyxFQUE2QixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FDN0QsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLE1BQWUsRUFBRSxNQUFjO0lBQy9DLE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDO0FBQy9ELENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxPQUE4QztJQUNsRSxRQUFRLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDOUIsS0FBSyx1QkFBdUI7WUFDMUIsT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyx1QkFBdUI7WUFDMUIsT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyx3QkFBd0I7WUFDM0IsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyx1QkFBdUI7WUFDMUIsT0FBTyxVQUFVLENBQUM7UUFDcEI7WUFDRSxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUN0QixVQUE0RTtJQUU1RSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLElBQUksVUFBVSxJQUFJLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN6RixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsT0FBTyxJQUFJLFlBQVksQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFTLDhCQUE4QixDQUFDLE1BQWU7SUFDckQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxPQUFPLENBQ0wsT0FBTyxDQUFDLFVBQVUsS0FBSyxHQUFHO1FBQzFCLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztRQUN6QyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUM7UUFDL0MsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUMxQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGF0YWJyaWNrcyBTYW5kYm94IGFkYXB0ZXIgZm9yIE1hc3RyYSB3b3Jrc3BhY2VzLlxuICpcbiAqIEltcGxlbWVudHMgTWFzdHJhJ3MgZm9yZWdyb3VuZCBjb21tYW5kIHN1cmZhY2Ugb3ZlciB0aGUgRGF0YWJyaWNrcyBTYW5kYm94XG4gKiBSRVNUIEFQSS4gU2FuZGJveGVzIGFyZSBjcmVhdGVkIGxhemlseSwgcmV0YWluIHRoZWlyIGhvbWUgZGlyZWN0b3J5IGFjcm9zc1xuICogaW5hY3Rpdml0eSBzdG9wcywgYW5kIGV4ZWN1dGUgdW50cnVzdGVkIHNoZWxsIGNvbW1hbmRzIG91dHNpZGUgdGhlIEFwcFxuICogY29udGFpbmVyLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGRhdGFicmlja3MgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGFzeW5jVXRpbHMsIGVycm9yVXRpbHMsIGxvZywgc3RyaW5nVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmRSZXN1bHQsXG4gIEV4ZWN1dGVDb21tYW5kT3B0aW9ucyxcbiAgUHJvdmlkZXJTdGF0dXMsXG4gIFNhbmRib3hJbmZvLFxuICBXb3Jrc3BhY2VTYW5kYm94LFxufSBmcm9tIFwiQG1hc3RyYS9jb3JlL3dvcmtzcGFjZVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IE1vbnR5U2FuZGJveCwgdHlwZSBNb250eVNhbmRib3hPcHRpb25zIH0gZnJvbSBcIi4vbW9udHktc2FuZGJveC50c1wiO1xuXG5jb25zdCBTQU5EQk9YX0FQSV9QQVRIID0gXCIvYXBpLzIuMC9zYW5kYm94ZXNcIjtcbmNvbnN0IFNBTkRCT1hfRVhFQ19BUElfUEFUSCA9IFwiL2FwaS8yLjAvc2FuZGJveC1leGVjL3NhbmRib3hlc1wiO1xuY29uc3QgREVGQVVMVF9JTkFDVElWSVRZX1RJTUVPVVQgPSBcIjkwMHNcIjtcbmNvbnN0IERFRkFVTFRfU1RBUlRVUF9USU1FT1VUX01TID0gMTIwXzAwMDtcbmNvbnN0IERFRkFVTFRfQ09NTUFORF9USU1FT1VUX01TID0gMzBfMDAwO1xuY29uc3QgU0FOREJPWF9QT0xMX0lOVEVSVkFMX01TID0gNTAwO1xuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9zYW5kYm94XCIpO1xuXG5jb25zdCBTYW5kYm94U3RhdGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHN0YXRlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgU2FuZGJveFJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBkaXNwbGF5X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3JlYXRlX3RpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXBkYXRlX3RpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdHVzOiBTYW5kYm94U3RhdGVTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuXG5jb25zdCBFeGVjdXRlUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGV4aXRfY29kZTogei5udW1iZXIoKS5pbnQoKS5vcHRpb25hbCgpLFxuICBzdGF0dXM6IHouc3RyaW5nKCksXG4gIHN0ZG91dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGRlcnI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY29tbWFuZF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0cnVuY2F0ZWQ6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcblxuLyoqIE9wdGlvbnMgZm9yIG9uZSBEYXRhYnJpY2tzLWJhY2tlZCBNYXN0cmEgc2FuZGJveC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc1NhbmRib3hPcHRpb25zIHtcbiAgLyoqIEFwcEtpdCB3b3Jrc3BhY2UgY2xpZW50IHVzZWQgZm9yIGV2ZXJ5IHNhbmRib3ggQVBJIGNhbGwuICovXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50O1xuICAvKiogUmVzb3VyY2UgaWQsIHdpdGggb3Igd2l0aG91dCB0aGUgYHNhbmRib3hlcy9gIHByZWZpeC4gKi9cbiAgc2FuZGJveElkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBEYXRhYnJpY2tzIGxhYmVsLiAqL1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgLyoqIFNlcnZlci1zaWRlIGlkbGUgdGltZW91dCBpbiBwcm90b2J1ZiBkdXJhdGlvbiBmb3JtLiBEZWZhdWx0cyB0byBgOTAwc2AuICovXG4gIGluYWN0aXZpdHlUaW1lb3V0Pzogc3RyaW5nO1xuICAvKiogTWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIHRoZSBzYW5kYm94IHRvIGJlY29tZSBydW5uYWJsZS4gKi9cbiAgc3RhcnR1cFRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgY29tbWFuZCB0aW1lb3V0LiBQZXItY2FsbCBgb3B0aW9ucy50aW1lb3V0YCB3aW5zLiAqL1xuICBjb21tYW5kVGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogUHJvdmlkZXIgdXNlZCBvbmx5IHdoZW4gRGF0YWJyaWNrcyBTYW5kYm94IGlzIGRlZmluaXRpdmVseSB1bmF2YWlsYWJsZS5cbiAgICogRGVmYXVsdHMgdG8gdGhlIE5vZGUgUHlkYW50aWMgTW9udHkgcnVudGltZTsgYGZhbHNlYCBmYWlscyBpbnN0ZWFkLlxuICAgKi9cbiAgZmFsbGJhY2s/OiBmYWxzZSB8IFwibW9udHlcIiB8IE1vbnR5U2FuZGJveE9wdGlvbnMgfCBXb3Jrc3BhY2VTYW5kYm94O1xufVxuXG4vKiogRGF0YWJyaWNrcyBvcHRpb25zIGFjY2VwdGVkIGJ5IHRoZSBoaWdoZXItbGV2ZWwgd29ya3NwYWNlIGZhY3RvcnkuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9ucyBleHRlbmRzIE9taXQ8XG4gIERhdGFicmlja3NTYW5kYm94T3B0aW9ucyxcbiAgXCJjbGllbnRcIiB8IFwic2FuZGJveElkXCJcbj4ge1xuICAvKiogUHJvdmlkZXIgZGlzY3JpbWluYXRvci4gRGVmYXVsdHMgdG8gYGRhdGFicmlja3NgLiAqL1xuICBwcm92aWRlcj86IFwiZGF0YWJyaWNrc1wiO1xuICAvKipcbiAgICogQ3JlZGVudGlhbCBzb3VyY2UuIERlZmF1bHRzIHRvIGEgZnJlc2ggQXBwS2l0IGNsaWVudCB1c2luZyB0aGUgbm9ybWFsXG4gICAqIGVudmlyb25tZW50L3Byb2ZpbGUgY2hhaW4sIHdoaWNoIGlzIHRoZSBhcHAgc2VydmljZSBwcmluY2lwYWwgaW4gYVxuICAgKiBEYXRhYnJpY2tzIEFwcC5cbiAgICovXG4gIGNsaWVudD86IFdvcmtzcGFjZUNsaWVudCB8ICgoY29udGV4dDogeyByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfSkgPT4gV29ya3NwYWNlQ2xpZW50KTtcbiAgLyoqXG4gICAqIEZpeGVkIGlkIG9yIHBlci1yZXF1ZXN0IHJlc29sdmVyLiBPbWl0IHRvIGRlcml2ZSBhIHN0YWJsZSwgb3BhcXVlIGlkIGZyb21cbiAgICogdGhlIHdvcmtzcGFjZSBhbmQgYXR0cmlidXRlZCB1c2VyLlxuICAgKi9cbiAgc2FuZGJveElkPzogc3RyaW5nIHwgKChjb250ZXh0OiB7IHJlcXVlc3RDb250ZXh0OiBSZXF1ZXN0Q29udGV4dCB9KSA9PiBzdHJpbmcpO1xufVxuXG4vKiogTWFzdHJhIHNhbmRib3ggYmFja2VkIGJ5IERhdGFicmlja3Mgc2VydmVybGVzcyBTYW5kYm94IGNvbXB1dGUuICovXG5leHBvcnQgY2xhc3MgRGF0YWJyaWNrc1NhbmRib3ggaW1wbGVtZW50cyBXb3Jrc3BhY2VTYW5kYm94IHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBzdGF0dXM6IFByb3ZpZGVyU3RhdHVzID0gXCJwZW5kaW5nXCI7XG4gIGVycm9yPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBpbmFjdGl2aXR5VGltZW91dDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0dXBUaW1lb3V0TXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kVGltZW91dE1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmFsbGJhY2tDb25maWc6IEV4Y2x1ZGU8RGF0YWJyaWNrc1NhbmRib3hPcHRpb25zW1wiZmFsbGJhY2tcIl0sIHVuZGVmaW5lZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlZEF0ID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSByZW1vdGVDcmVhdGVkQXQ/OiBEYXRlO1xuICBwcml2YXRlIGxhc3RVc2VkQXQ/OiBEYXRlO1xuICBwcml2YXRlIGFjdGl2ZUZhbGxiYWNrPzogV29ya3NwYWNlU2FuZGJveDtcbiAgcHJpdmF0ZSBzdGFydFByb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERhdGFicmlja3NTYW5kYm94T3B0aW9ucykge1xuICAgIGNvbnN0IGlkID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChvcHRpb25zLnNhbmRib3hJZC5yZXBsYWNlKC9ec2FuZGJveGVzXFwvLywgXCJcIikpO1xuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEYXRhYnJpY2tzIHNhbmRib3ggaWQgbXVzdCBub3QgYmUgYmxhbmtcIik7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWU/LnRyaW0oKSB8fCBgTWFzdHJhIHNhbmRib3ggJHtpZH1gO1xuICAgIHRoaXMuY2xpZW50ID0gb3B0aW9ucy5jbGllbnQ7XG4gICAgdGhpcy5kaXNwbGF5TmFtZSA9IHRoaXMubmFtZTtcbiAgICB0aGlzLmluYWN0aXZpdHlUaW1lb3V0ID0gb3B0aW9ucy5pbmFjdGl2aXR5VGltZW91dCA/PyBERUZBVUxUX0lOQUNUSVZJVFlfVElNRU9VVDtcbiAgICB0aGlzLnN0YXJ0dXBUaW1lb3V0TXMgPSBvcHRpb25zLnN0YXJ0dXBUaW1lb3V0TXMgPz8gREVGQVVMVF9TVEFSVFVQX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5jb21tYW5kVGltZW91dE1zID0gb3B0aW9ucy5jb21tYW5kVGltZW91dE1zID8/IERFRkFVTFRfQ09NTUFORF9USU1FT1VUX01TO1xuICAgIHRoaXMuZmFsbGJhY2tDb25maWcgPSBvcHRpb25zLmZhbGxiYWNrID8/IFwibW9udHlcIjtcbiAgfVxuXG4gIGdldCBwcm92aWRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZhbGxiYWNrPy5wcm92aWRlciA/PyBcImRhdGFicmlja3NcIjtcbiAgfVxuXG4gIC8qKiBFbnN1cmUgdGhlIHJlbW90ZSBzYW5kYm94IGV4aXN0cyBhbmQgaGFzIHJlYWNoZWQgaXRzIHJ1bm5pbmcgc3RhdGUuICovXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRXaXRoU2lnbmFsKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0V2l0aFNpZ25hbChzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCIpIHJldHVybjtcbiAgICBpZiAodGhpcy5zdGFydFByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRQcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZXJmb3JtU3RhcnQoc2lnbmFsKTtcbiAgICB0aGlzLnN0YXJ0UHJvbWlzZSA9IHBlbmRpbmc7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBlbmRpbmc7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0UHJvbWlzZSA9PT0gcGVuZGluZykgdGhpcy5zdGFydFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtU3RhcnQoc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykge1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmVGYWxsYmFjay5zdGFydD8uKCk7XG4gICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXR1cyA9IFwic3RhcnRpbmdcIjtcbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBsZXQgc2FuZGJveCA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGUoc2lnbmFsKTtcbiAgICAgIGlmIChzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IFwiU0FOREJPWF9TVEFURV9TVE9QUEVEXCIpIHtcbiAgICAgICAgc2FuZGJveCA9IGF3YWl0IHRoaXMubXV0YXRlKFwic3RhcnRcIiwgc2lnbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IFwiU0FOREJPWF9TVEFURV9TVE9QUElOR1wiKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclN0YXRlKFwiU0FOREJPWF9TVEFURV9TVE9QUEVEXCIsIHNpZ25hbCk7XG4gICAgICAgIHNhbmRib3ggPSBhd2FpdCB0aGlzLm11dGF0ZShcInN0YXJ0XCIsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBpZiAoc2FuZGJveC5zdGF0dXM/LnN0YXRlICE9PSBcIlNBTkRCT1hfU1RBVEVfUlVOTklOR1wiKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclN0YXRlKFwiU0FOREJPWF9TVEFURV9SVU5OSU5HXCIsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXR1cyA9IFwicnVubmluZ1wiO1xuICAgICAgdGhpcy5sYXN0VXNlZEF0ID0gbmV3IERhdGUoKTtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmICh0aGlzLmZhbGxiYWNrQ29uZmlnICE9PSBmYWxzZSAmJiBpc0RhdGFicmlja3NTYW5kYm94VW5hdmFpbGFibGUoY2F1Z2h0KSkge1xuICAgICAgICBjb25zdCBmYWxsYmFjayA9IHJlc29sdmVGYWxsYmFjayh0aGlzLmZhbGxiYWNrQ29uZmlnKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJEYXRhYnJpY2tzIFNhbmRib3ggdW5hdmFpbGFibGU7IHVzaW5nIGZhbGxiYWNrXCIsIHtcbiAgICAgICAgICBzYW5kYm94SWQ6IHRoaXMuaWQsXG4gICAgICAgICAgZmFsbGJhY2s6IGZhbGxiYWNrLnByb3ZpZGVyLFxuICAgICAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShjYXVnaHQpLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgZmFsbGJhY2suc3RhcnQ/LigpO1xuICAgICAgICB0aGlzLmFjdGl2ZUZhbGxiYWNrID0gZmFsbGJhY2s7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gZmFsbGJhY2suc3RhdHVzO1xuICAgICAgICB0aGlzLmVycm9yID0gZmFsbGJhY2suZXJyb3I7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhdHVzID0gXCJlcnJvclwiO1xuICAgICAgdGhpcy5lcnJvciA9IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGNhdWdodCk7XG4gICAgICB0aHJvdyBjYXVnaHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIERhdGFicmlja3MgaG9tZSBwZXJzaXN0ZW5jZSBpcyBub3QgYSBjbG9uZWFibGUgTWFzdHJhIGNoZWNrcG9pbnQuICovXG4gIGFzeW5jIHNuYXBzaG90KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuYWN0aXZlRmFsbGJhY2s/LnNuYXBzaG90KCk7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNDaGVja3BvaW50cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGYWxsYmFjaz8uc3VwcG9ydHNDaGVja3BvaW50cyA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKiBTdG9wIGNvbXB1dGUgd2hpbGUgcHJlc2VydmluZyB0aGUgc2FuZGJveCBob21lIGRpcmVjdG9yeS4gKi9cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykge1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmVGYWxsYmFjay5zdG9wPy4oKTtcbiAgICAgIHRoaXMuc3RhdHVzID0gdGhpcy5hY3RpdmVGYWxsYmFjay5zdGF0dXM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJzdG9wcGVkXCIgfHwgdGhpcy5zdGF0dXMgPT09IFwiZGVzdHJveWVkXCIpIHJldHVybjtcbiAgICB0aGlzLnN0YXR1cyA9IFwic3RvcHBpbmdcIjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tdXRhdGUoXCJzdG9wXCIpO1xuICAgICAgdGhpcy5zdGF0dXMgPSBcInN0b3BwZWRcIjtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmIChpc1N0YXR1cyhjYXVnaHQsIDQwNCkpIHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBcInN0b3BwZWRcIjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0dXMgPSBcImVycm9yXCI7XG4gICAgICB0aGlzLmVycm9yID0gZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoY2F1Z2h0KTtcbiAgICAgIHRocm93IGNhdWdodDtcbiAgICB9XG4gIH1cblxuICAvKiogUGVybWFuZW50bHkgZGVsZXRlIHRoZSBzYW5kYm94IGFuZCBpdHMgcGVyc2lzdGVkIGhvbWUgZGlyZWN0b3J5LiAqL1xuICBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUZhbGxiYWNrKSB7XG4gICAgICBhd2FpdCB0aGlzLmFjdGl2ZUZhbGxiYWNrLmRlc3Ryb3k/LigpO1xuICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLmFjdGl2ZUZhbGxiYWNrLnN0YXR1cztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdHVzID09PSBcImRlc3Ryb3llZFwiKSByZXR1cm47XG4gICAgdGhpcy5zdGF0dXMgPSBcImRlc3Ryb3lpbmdcIjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KGAke3RoaXMucmVzb3VyY2VQYXRofWAsIFwiREVMRVRFXCIsIHoub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpKTtcbiAgICAgIHRoaXMuc3RhdHVzID0gXCJkZXN0cm95ZWRcIjtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmIChpc1N0YXR1cyhjYXVnaHQsIDQwNCkpIHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBcImRlc3Ryb3llZFwiO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXR1cyA9IFwiZXJyb3JcIjtcbiAgICAgIHRoaXMuZXJyb3IgPSBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShjYXVnaHQpO1xuICAgICAgdGhyb3cgY2F1Z2h0O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFeGVjdXRlIG9uZSBmb3JlZ3JvdW5kIHNoZWxsIGNvbW1hbmQgaW4gdGhlIHJlbW90ZSBzYW5kYm94LiAqL1xuICBhc3luYyBleGVjdXRlQ29tbWFuZChcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgYXJnczogc3RyaW5nW10gPSBbXSxcbiAgICBvcHRpb25zOiBFeGVjdXRlQ29tbWFuZE9wdGlvbnMgPSB7fSxcbiAgKTogUHJvbWlzZTxDb21tYW5kUmVzdWx0PiB7XG4gICAgYXdhaXQgdGhpcy5zdGFydFdpdGhTaWduYWwob3B0aW9ucy5hYm9ydFNpZ25hbCk7XG4gICAgaWYgKHRoaXMuYWN0aXZlRmFsbGJhY2spIHtcbiAgICAgIGlmICghdGhpcy5hY3RpdmVGYWxsYmFjay5leGVjdXRlQ29tbWFuZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgYXJncyxcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBleGl0Q29kZTogMSxcbiAgICAgICAgICBzdGRvdXQ6IFwiXCIsXG4gICAgICAgICAgc3RkZXJyOiBgRmFsbGJhY2sgc2FuZGJveCAke3RoaXMuYWN0aXZlRmFsbGJhY2sucHJvdmlkZXJ9IGRvZXMgbm90IHN1cHBvcnQgY29tbWFuZCBleGVjdXRpb24uYCxcbiAgICAgICAgICBleGVjdXRpb25UaW1lTXM6IDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVGYWxsYmFjay5leGVjdXRlQ29tbWFuZChjb21tYW5kLCBhcmdzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY29uc3QgdGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyB0aGlzLmNvbW1hbmRUaW1lb3V0TXM7XG4gICAgY29uc3Qgc2NyaXB0ID0gY29tbWFuZFNjcmlwdChjb21tYW5kLCBhcmdzLCBvcHRpb25zLmN3ZCk7XG4gICAgY29uc3Qgc3RhcnRlZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KFxuICAgICAgYCR7U0FOREJPWF9FWEVDX0FQSV9QQVRIfS8ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmlkKX0vZXhlYy1zeW5jYCxcbiAgICAgIFwiUE9TVFwiLFxuICAgICAgRXhlY3V0ZVJlc3BvbnNlU2NoZW1hLFxuICAgICAge1xuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgY21kOiBcIi9iaW4vYmFzaFwiLFxuICAgICAgICAgIGFyZ3M6IFtcIi1sY1wiLCBzY3JpcHRdLFxuICAgICAgICAgIGVudnM6IGRlZmluZWRFbnZpcm9ubWVudChvcHRpb25zLmVudiksXG4gICAgICAgICAgZXhlY3V0aW9uX3RpbWVvdXQ6IGAke01hdGgubWF4KDEsIE1hdGguY2VpbCh0aW1lb3V0IC8gMV8wMDApKX1zYCxcbiAgICAgICAgfSxcbiAgICAgICAgc2lnbmFsOiBvcHRpb25zLmFib3J0U2lnbmFsLFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IHN0ZG91dCA9IHJlc3BvbnNlLnN0ZG91dCA/PyBcIlwiO1xuICAgIGNvbnN0IHN0ZGVyciA9IHJlc3BvbnNlLnN0ZGVyciA/PyBcIlwiO1xuICAgIG9wdGlvbnMub25TdGRvdXQ/LihzdGRvdXQpO1xuICAgIG9wdGlvbnMub25TdGRlcnI/LihzdGRlcnIpO1xuICAgIHRoaXMubGFzdFVzZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgdGltZWRPdXQgPSByZXNwb25zZS5zdGF0dXMgPT09IFwiRVhFQ1VURV9DT01NQU5EX1NUQVRVU19USU1FRF9PVVRcIjtcbiAgICBjb25zdCBleGl0Q29kZSA9IHJlc3BvbnNlLmV4aXRfY29kZSA/PyAtMTtcbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZCxcbiAgICAgIGFyZ3MsXG4gICAgICBzdWNjZXNzOiByZXNwb25zZS5zdGF0dXMgPT09IFwiRVhFQ1VURV9DT01NQU5EX1NUQVRVU19DT01QTEVURURcIiAmJiBleGl0Q29kZSA9PT0gMCxcbiAgICAgIGV4aXRDb2RlLFxuICAgICAgc3Rkb3V0LFxuICAgICAgc3RkZXJyLFxuICAgICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAuLi4odGltZWRPdXQgPyB7IHRpbWVkT3V0OiB0cnVlLCBraWxsZWQ6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihyZXNwb25zZS50cnVuY2F0ZWRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzdGRvdXRUcnVuY2F0ZWQ6IHRydWUsXG4gICAgICAgICAgICBzdGRlcnJUcnVuY2F0ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGFkYXB0ZXIgY3VycmVudGx5IGtub3dzIHRoZSByZW1vdGUgc2FuZGJveCB0byBiZSBydW5uaW5nLiAqL1xuICBhc3luYyBpc1JlYWR5KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUZhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVGYWxsYmFjay5pc1JlYWR5Py4oKSA/PyB0aGlzLmFjdGl2ZUZhbGxiYWNrLnN0YXR1cyA9PT0gXCJydW5uaW5nXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgdGhpcy5nZXQoKTtcbiAgICAgIHRoaXMuc3RhdHVzID1cbiAgICAgICAgc2FuZGJveC5zdGF0dXM/LnN0YXRlID09PSBcIlNBTkRCT1hfU1RBVEVfUlVOTklOR1wiID8gXCJydW5uaW5nXCIgOiByZW1vdGVTdGF0dXMoc2FuZGJveCk7XG4gICAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IFwicnVubmluZ1wiO1xuICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgaWYgKGlzU3RhdHVzKGNhdWdodCwgNDA0KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgdGhyb3cgY2F1Z2h0O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXBvcnQgTWFzdHJhLWZhY2luZyBzYW5kYm94IG1ldGFkYXRhLiAqL1xuICBhc3luYyBnZXRJbmZvKCk6IFByb21pc2U8U2FuZGJveEluZm8+IHtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGF3YWl0IHRoaXMuYWN0aXZlRmFsbGJhY2suZ2V0SW5mbz8uKCkpID8/IHtcbiAgICAgICAgICBpZDogdGhpcy5hY3RpdmVGYWxsYmFjay5pZCxcbiAgICAgICAgICBuYW1lOiB0aGlzLmFjdGl2ZUZhbGxiYWNrLm5hbWUsXG4gICAgICAgICAgcHJvdmlkZXI6IHRoaXMuYWN0aXZlRmFsbGJhY2sucHJvdmlkZXIsXG4gICAgICAgICAgc3RhdHVzOiB0aGlzLmFjdGl2ZUZhbGxiYWNrLnN0YXR1cyxcbiAgICAgICAgICBjcmVhdGVkQXQ6IHRoaXMuY3JlYXRlZEF0LFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgdGhpcy5nZXQoKTtcbiAgICB0aGlzLnN0YXR1cyA9IHJlbW90ZVN0YXR1cyhzYW5kYm94KTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBuYW1lOiBzYW5kYm94LmRpc3BsYXlfbmFtZSA/PyB0aGlzLm5hbWUsXG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlcixcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBjcmVhdGVkQXQ6IHRoaXMucmVtb3RlQ3JlYXRlZEF0ID8/IHRoaXMuY3JlYXRlZEF0LFxuICAgICAgLi4uKHRoaXMubGFzdFVzZWRBdCA/IHsgbGFzdFVzZWRBdDogdGhpcy5sYXN0VXNlZEF0IH0gOiB7fSksXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICByZXNvdXJjZU5hbWU6IHNhbmRib3gubmFtZSxcbiAgICAgICAgcmVtb3RlU3RhdGU6IHNhbmRib3guc3RhdHVzPy5zdGF0ZSxcbiAgICAgICAgdXBkYXRlVGltZTogc2FuZGJveC51cGRhdGVfdGltZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBFeHBsYWluIHRoZSBEYXRhYnJpY2tzIGV4ZWN1dGlvbiBib3VuZGFyeSB0byB0aGUgYWdlbnQuICovXG4gIGdldEluc3RydWN0aW9ucygpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICBcIkNvbW1hbmRzIHJ1biBpbiBhIHBlcnNpc3RlbnQgRGF0YWJyaWNrcyBzZXJ2ZXJsZXNzIHNhbmRib3gsIG5vdCBpbiB0aGUgQXBwIGNvbnRhaW5lci5cIixcbiAgICAgIFwiVXNlIHNoZWxsIGNvbW1hbmRzIG5vcm1hbGx5LiBUaGUgc2FuZGJveCBob21lIGRpcmVjdG9yeSBzdXJ2aXZlcyBpbmFjdGl2aXR5IHN0b3BzLlwiLFxuICAgICAgXCJJZiBEYXRhYnJpY2tzIFNhbmRib3ggaXMgdW5hdmFpbGFibGUsIGNvbW1hbmRzIGZhbGwgYmFjayB0byBQeWRhbnRpYyBNb250eSBhbmQgbXVzdCBiZSBQeXRob24gc291cmNlLlwiLFxuICAgICAgXCJEYXRhYnJpY2tzIFdvcmtzcGFjZSBmaWxlc3lzdGVtIG1vdW50cyByZW1haW4gc2VwYXJhdGUgdW5sZXNzIGEgY29tbWFuZCBjb3BpZXMgZGF0YSBleHBsaWNpdGx5LlwiLFxuICAgIF0uam9pbihcIiBcIik7XG4gIH1cblxuICBwcml2YXRlIGdldCByZXNvdXJjZVBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7U0FOREJPWF9BUElfUEFUSH0vJHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5pZCl9YDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0T3JDcmVhdGUoc2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0KHNpZ25hbCk7XG4gICAgfSBjYXRjaCAoY2F1Z2h0KSB7XG4gICAgICBpZiAoIWlzU3RhdHVzKGNhdWdodCwgNDA0KSkgdGhyb3cgY2F1Z2h0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2FuZGJveCA9IGF3YWl0IHRoaXMucmVxdWVzdChTQU5EQk9YX0FQSV9QQVRILCBcIlBPU1RcIiwgU2FuZGJveFJlc3BvbnNlU2NoZW1hLCB7XG4gICAgICAgIHF1ZXJ5OiB7IHNhbmRib3hfaWQ6IHRoaXMuaWQgfSxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIGRpc3BsYXlfbmFtZTogdGhpcy5kaXNwbGF5TmFtZSxcbiAgICAgICAgICBzcGVjOiB7XG4gICAgICAgICAgICBjb21wdXRlOiB7XG4gICAgICAgICAgICAgIGluYWN0aXZpdHlfdGltZW91dDogdGhpcy5pbmFjdGl2aXR5VGltZW91dCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlbWVtYmVyQ3JlYXRlZEF0KHNhbmRib3guY3JlYXRlX3RpbWUpO1xuICAgICAgcmV0dXJuIHNhbmRib3g7XG4gICAgfSBjYXRjaCAoY2F1Z2h0KSB7XG4gICAgICBpZiAoIWlzU3RhdHVzKGNhdWdodCwgNDA5KSkgdGhyb3cgY2F1Z2h0O1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0KHNpZ25hbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXQoc2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHRoaXMucmVzb3VyY2VQYXRoLCBcIkdFVFwiLCBTYW5kYm94UmVzcG9uc2VTY2hlbWEsIHtcbiAgICAgIHNpZ25hbCxcbiAgICB9KTtcbiAgICB0aGlzLnJlbWVtYmVyQ3JlYXRlZEF0KHNhbmRib3guY3JlYXRlX3RpbWUpO1xuICAgIHJldHVybiBzYW5kYm94O1xuICB9XG5cbiAgcHJpdmF0ZSBtdXRhdGUob3BlcmF0aW9uOiBcInN0YXJ0XCIgfCBcInN0b3BcIiwgc2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KGAke3RoaXMucmVzb3VyY2VQYXRofS8ke29wZXJhdGlvbn1gLCBcIlBPU1RcIiwgU2FuZGJveFJlc3BvbnNlU2NoZW1hLCB7XG4gICAgICBzaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JTdGF0ZShleHBlY3RlZDogc3RyaW5nLCBzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIHRoaXMuc3RhcnR1cFRpbWVvdXRNcztcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgdGhpcy5nZXQoc2lnbmFsKTtcbiAgICAgIGlmIChzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IGV4cGVjdGVkKSByZXR1cm4gc2FuZGJveDtcbiAgICAgIGF3YWl0IGFzeW5jVXRpbHMuc2xlZXAoU0FOREJPWF9QT0xMX0lOVEVSVkFMX01TLCBzaWduYWwpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRGF0YWJyaWNrcyBzYW5kYm94ICR7dGhpcy5pZH0gZGlkIG5vdCByZWFjaCAke2V4cGVjdGVkfSB3aXRoaW4gJHt0aGlzLnN0YXJ0dXBUaW1lb3V0TXN9bXNgLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlbWVtYmVyQ3JlYXRlZEF0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUodmFsdWUpO1xuICAgIGlmICghTnVtYmVyLmlzTmFOKHBhcnNlZC5nZXRUaW1lKCkpKSB0aGlzLnJlbW90ZUNyZWF0ZWRBdCA9IHBhcnNlZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdDxUPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgbWV0aG9kOiBcIkdFVFwiIHwgXCJQT1NUXCIgfCBcIkRFTEVURVwiLFxuICAgIHNjaGVtYTogei5ab2RUeXBlPFQ+LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHBheWxvYWQ/OiB1bmtub3duO1xuICAgICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gICAgfSA9IHt9LFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBwYXRoLFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7XG4gICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAuLi4ob3B0aW9ucy5wYXlsb2FkID09PSB1bmRlZmluZWQgPyB7fSA6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSksXG4gICAgICAgIH0pLFxuICAgICAgICByYXc6IGZhbHNlLFxuICAgICAgICAuLi4ob3B0aW9ucy5wYXlsb2FkID09PSB1bmRlZmluZWQgPyB7fSA6IHsgcGF5bG9hZDogb3B0aW9ucy5wYXlsb2FkIH0pLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnMuc2lnbmFsID8gZGF0YWJyaWNrcy50b0NvbnRleHQob3B0aW9ucy5zaWduYWwpIDogdW5kZWZpbmVkLFxuICAgICk7XG4gICAgcmV0dXJuIHNjaGVtYS5wYXJzZShyZXNwb25zZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWFuZFNjcmlwdChjb21tYW5kOiBzdHJpbmcsIGFyZ3M6IHJlYWRvbmx5IHN0cmluZ1tdLCBjd2Q6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IGludm9jYXRpb24gPSBhcmdzLmxlbmd0aCA/IFtjb21tYW5kLCAuLi5hcmdzXS5tYXAoc2hlbGxRdW90ZSkuam9pbihcIiBcIikgOiBjb21tYW5kO1xuICByZXR1cm4gY3dkID8gYGNkIC0tICR7c2hlbGxRdW90ZShjd2QpfSAmJiAke2ludm9jYXRpb259YCA6IGludm9jYXRpb247XG59XG5cbmZ1bmN0aW9uIHNoZWxsUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcXCcnXCIpfSdgO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVkRW52aXJvbm1lbnQoaW5wdXQ6IE5vZGVKUy5Qcm9jZXNzRW52IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoaW5wdXQgPz8ge30pLmZpbHRlcihcbiAgICAgIChlbnRyeSk6IGVudHJ5IGlzIFtzdHJpbmcsIHN0cmluZ10gPT4gZW50cnlbMV0gIT09IHVuZGVmaW5lZCxcbiAgICApLFxuICApO1xufVxuXG5mdW5jdGlvbiBpc1N0YXR1cyhjYXVnaHQ6IHVua25vd24sIHN0YXR1czogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBlcnJvclV0aWxzLmVycm9yQ29udGV4dChjYXVnaHQpLnN0YXR1c0NvZGUgPT09IHN0YXR1cztcbn1cblxuZnVuY3Rpb24gcmVtb3RlU3RhdHVzKHNhbmRib3g6IHouaW5mZXI8dHlwZW9mIFNhbmRib3hSZXNwb25zZVNjaGVtYT4pOiBQcm92aWRlclN0YXR1cyB7XG4gIHN3aXRjaCAoc2FuZGJveC5zdGF0dXM/LnN0YXRlKSB7XG4gICAgY2FzZSBcIlNBTkRCT1hfU1RBVEVfUlVOTklOR1wiOlxuICAgICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICAgIGNhc2UgXCJTQU5EQk9YX1NUQVRFX1NUT1BQRURcIjpcbiAgICAgIHJldHVybiBcInN0b3BwZWRcIjtcbiAgICBjYXNlIFwiU0FOREJPWF9TVEFURV9TVE9QUElOR1wiOlxuICAgICAgcmV0dXJuIFwic3RvcHBpbmdcIjtcbiAgICBjYXNlIFwiU0FOREJPWF9TVEFURV9QRU5ESU5HXCI6XG4gICAgICByZXR1cm4gXCJzdGFydGluZ1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJwZW5kaW5nXCI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUZhbGxiYWNrKFxuICBjb25maWd1cmVkOiBFeGNsdWRlPERhdGFicmlja3NTYW5kYm94T3B0aW9uc1tcImZhbGxiYWNrXCJdLCBmYWxzZSB8IHVuZGVmaW5lZD4sXG4pOiBXb3Jrc3BhY2VTYW5kYm94IHtcbiAgaWYgKHR5cGVvZiBjb25maWd1cmVkID09PSBcIm9iamVjdFwiICYmIFwicHJvdmlkZXJcIiBpbiBjb25maWd1cmVkICYmIFwic3RhdHVzXCIgaW4gY29uZmlndXJlZCkge1xuICAgIHJldHVybiBjb25maWd1cmVkO1xuICB9XG4gIHJldHVybiBuZXcgTW9udHlTYW5kYm94KGNvbmZpZ3VyZWQgPT09IFwibW9udHlcIiA/IHt9IDogY29uZmlndXJlZCk7XG59XG5cbmZ1bmN0aW9uIGlzRGF0YWJyaWNrc1NhbmRib3hVbmF2YWlsYWJsZShjYXVnaHQ6IHVua25vd24pOiBib29sZWFuIHtcbiAgY29uc3QgY29udGV4dCA9IGVycm9yVXRpbHMuZXJyb3JDb250ZXh0KGNhdWdodCk7XG4gIHJldHVybiAoXG4gICAgY29udGV4dC5zdGF0dXNDb2RlID09PSA0MDQgfHxcbiAgICBjb250ZXh0Lmhhc01lc3NhZ2UoXCJmZWF0dXJlXCIsIFwiZGlzYWJsZWRcIikgfHxcbiAgICBjb250ZXh0Lmhhc01lc3NhZ2UoXCJzYW5kYm94XCIsIFwibm90XCIsIFwiZW5hYmxlZFwiKSB8fFxuICAgIGNvbnRleHQuaGFzTWVzc2FnZShcInByZXZpZXdcIiwgXCJub3RcIiwgXCJlbmFibGVkXCIpIHx8XG4gICAgY29udGV4dC5oYXNNZXNzYWdlKFwicHJldmlld1wiLCBcInVuYXZhaWxhYmxlXCIpIHx8XG4gICAgY29udGV4dC5oYXNNZXNzYWdlKFwicHJldmlld1wiLCBcImRpc2FibGVkXCIpXG4gICk7XG59XG4iXX0=
|
|
460
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFTbEYsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBRTVFLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUM7QUFDOUMsTUFBTSxxQkFBcUIsR0FBRyxpQ0FBaUMsQ0FBQztBQUNoRSxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLDBCQUEwQixHQUFHLE9BQU8sQ0FBQztBQUMzQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFNUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQztBQUVILE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxXQUFXLEVBQUUsQ0FBQyxDQUFD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QUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxNQUFlO0lBQ3JELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsT0FBTyxDQUNMLE9BQU8sQ0FBQyxVQUFVLEtBQUssR0FBRztRQUMxQixPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7UUFDekMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztRQUMvQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztRQUM1QyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FDMUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERhdGFicmlja3MgU2FuZGJveCBhZGFwdGVyIGZvciBNYXN0cmEgd29ya3NwYWNlcy5cbiAqXG4gKiBJbXBsZW1lbnRzIE1hc3RyYSdzIGZvcmVncm91bmQgY29tbWFuZCBzdXJmYWNlIG92ZXIgdGhlIERhdGFicmlja3MgU2FuZGJveFxuICogUkVTVCBBUEkuIFNhbmRib3hlcyBhcmUgY3JlYXRlZCBsYXppbHksIHJldGFpbiB0aGVpciBob21lIGRpcmVjdG9yeSBhY3Jvc3NcbiAqIGluYWN0aXZpdHkgc3RvcHMsIGFuZCBleGVjdXRlIHVudHJ1c3RlZCBzaGVsbCBjb21tYW5kcyBvdXRzaWRlIHRoZSBBcHBcbiAqIGNvbnRhaW5lci5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBhc3luY1V0aWxzLCBlcnJvclV0aWxzLCBsb2csIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3JlcXVlc3QtY29udGV4dFwiO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kUmVzdWx0LFxuICBFeGVjdXRlQ29tbWFuZE9wdGlvbnMsXG4gIFByb3ZpZGVyU3RhdHVzLFxuICBTYW5kYm94SW5mbyxcbiAgV29ya3NwYWNlU2FuZGJveCxcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBNb250eVNhbmRib3gsIHR5cGUgTW9udHlTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL21vbnR5LXNhbmRib3gudHNcIjtcblxuY29uc3QgU0FOREJPWF9BUElfUEFUSCA9IFwiL2FwaS8yLjAvc2FuZGJveGVzXCI7XG5jb25zdCBTQU5EQk9YX0VYRUNfQVBJX1BBVEggPSBcIi9hcGkvMi4wL3NhbmRib3gtZXhlYy9zYW5kYm94ZXNcIjtcbmNvbnN0IERFRkFVTFRfSU5BQ1RJVklUWV9USU1FT1VUID0gXCI5MDBzXCI7XG5jb25zdCBERUZBVUxUX1NUQVJUVVBfVElNRU9VVF9NUyA9IDEyMF8wMDA7XG5jb25zdCBERUZBVUxUX0NPTU1BTkRfVElNRU9VVF9NUyA9IDMwXzAwMDtcbmNvbnN0IFNBTkRCT1hfUE9MTF9JTlRFUlZBTF9NUyA9IDUwMDtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvc2FuZGJveFwiKTtcblxuY29uc3QgU2FuZGJveFN0YXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5cbmNvbnN0IFNhbmRib3hSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNyZWF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVwZGF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXR1czogU2FuZGJveFN0YXRlU2NoZW1hLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgRXhlY3V0ZVJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBleGl0X2NvZGU6IHoubnVtYmVyKCkuaW50KCkub3B0aW9uYWwoKSxcbiAgc3RhdHVzOiB6LnN0cmluZygpLFxuICBzdGRvdXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RkZXJyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvbW1hbmRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdHJ1bmNhdGVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKiBPcHRpb25zIGZvciBvbmUgRGF0YWJyaWNrcy1iYWNrZWQgTWFzdHJhIHNhbmRib3guICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NTYW5kYm94T3B0aW9ucyB7XG4gIC8qKiBBcHBLaXQgd29ya3NwYWNlIGNsaWVudCB1c2VkIGZvciBldmVyeSBzYW5kYm94IEFQSSBjYWxsLiAqL1xuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudDtcbiAgLyoqIFJlc291cmNlIGlkLCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBzYW5kYm94ZXMvYCBwcmVmaXguICovXG4gIHNhbmRib3hJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgRGF0YWJyaWNrcyBsYWJlbC4gKi9cbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBTZXJ2ZXItc2lkZSBpZGxlIHRpbWVvdXQgaW4gcHJvdG9idWYgZHVyYXRpb24gZm9ybS4gRGVmYXVsdHMgdG8gYDkwMHNgLiAqL1xuICBpbmFjdGl2aXR5VGltZW91dD86IHN0cmluZztcbiAgLyoqIE1heGltdW0gdGltZSB0byB3YWl0IGZvciB0aGUgc2FuZGJveCB0byBiZWNvbWUgcnVubmFibGUuICovXG4gIHN0YXJ0dXBUaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBEZWZhdWx0IGNvbW1hbmQgdGltZW91dC4gUGVyLWNhbGwgYG9wdGlvbnMudGltZW91dGAgd2lucy4gKi9cbiAgY29tbWFuZFRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFByb3ZpZGVyIHVzZWQgb25seSB3aGVuIERhdGFicmlja3MgU2FuZGJveCBpcyBkZWZpbml0aXZlbHkgdW5hdmFpbGFibGUuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBOb2RlIFB5ZGFudGljIE1vbnR5IHJ1bnRpbWU7IGBmYWxzZWAgZmFpbHMgaW5zdGVhZC5cbiAgICovXG4gIGZhbGxiYWNrPzogZmFsc2UgfCBcIm1vbnR5XCIgfCBNb250eVNhbmRib3hPcHRpb25zIHwgV29ya3NwYWNlU2FuZGJveDtcbn1cblxuLyoqIERhdGFicmlja3Mgb3B0aW9ucyBhY2NlcHRlZCBieSB0aGUgaGlnaGVyLWxldmVsIHdvcmtzcGFjZSBmYWN0b3J5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnMgZXh0ZW5kcyBPbWl0PFxuICBEYXRhYnJpY2tzU2FuZGJveE9wdGlvbnMsXG4gIFwiY2xpZW50XCIgfCBcInNhbmRib3hJZFwiXG4+IHtcbiAgLyoqIFByb3ZpZGVyIGRpc2NyaW1pbmF0b3IuIERlZmF1bHRzIHRvIGBkYXRhYnJpY2tzYC4gKi9cbiAgcHJvdmlkZXI/OiBcImRhdGFicmlja3NcIjtcbiAgLyoqXG4gICAqIENyZWRlbnRpYWwgc291cmNlLiBEZWZhdWx0cyB0byBhIGZyZXNoIEFwcEtpdCBjbGllbnQgdXNpbmcgdGhlIG5vcm1hbFxuICAgKiBlbnZpcm9ubWVudC9wcm9maWxlIGNoYWluLCB3aGljaCBpcyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsIGluIGFcbiAgICogRGF0YWJyaWNrcyBBcHAuXG4gICAqL1xuICBjbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQgfCAoKGNvbnRleHQ6IHsgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0IH0pID0+IFdvcmtzcGFjZUNsaWVudCk7XG4gIC8qKlxuICAgKiBGaXhlZCBpZCBvciBwZXItcmVxdWVzdCByZXNvbHZlci4gT21pdCB0byBkZXJpdmUgYSBzdGFibGUsIG9wYXF1ZSBpZCBmcm9tXG4gICAqIHRoZSB3b3Jrc3BhY2UgYW5kIGF0dHJpYnV0ZWQgdXNlci5cbiAgICovXG4gIHNhbmRib3hJZD86IHN0cmluZyB8ICgoY29udGV4dDogeyByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfSkgPT4gc3RyaW5nKTtcbn1cblxuLyoqIE1hc3RyYSBzYW5kYm94IGJhY2tlZCBieSBEYXRhYnJpY2tzIHNlcnZlcmxlc3MgU2FuZGJveCBjb21wdXRlLiAqL1xuZXhwb3J0IGNsYXNzIERhdGFicmlja3NTYW5kYm94IGltcGxlbWVudHMgV29ya3NwYWNlU2FuZGJveCB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgc3RhdHVzOiBQcm92aWRlclN0YXR1cyA9IFwicGVuZGluZ1wiO1xuICBlcnJvcj86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogV29ya3NwYWNlQ2xpZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5hY3Rpdml0eVRpbWVvdXQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFydHVwVGltZW91dE1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFRpbWVvdXRNczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGZhbGxiYWNrQ29uZmlnOiBFeGNsdWRlPERhdGFicmlja3NTYW5kYm94T3B0aW9uc1tcImZhbGxiYWNrXCJdLCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgcmVtb3RlQ3JlYXRlZEF0PzogRGF0ZTtcbiAgcHJpdmF0ZSBsYXN0VXNlZEF0PzogRGF0ZTtcbiAgcHJpdmF0ZSBhY3RpdmVGYWxsYmFjaz86IFdvcmtzcGFjZVNhbmRib3g7XG4gIHByaXZhdGUgZmFsbGJhY2tQcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBzdGFydFByb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERhdGFicmlja3NTYW5kYm94T3B0aW9ucykge1xuICAgIGNvbnN0IGlkID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChvcHRpb25zLnNhbmRib3hJZC5yZXBsYWNlKC9ec2FuZGJveGVzXFwvLywgXCJcIikpO1xuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEYXRhYnJpY2tzIHNhbmRib3ggaWQgbXVzdCBub3QgYmUgYmxhbmtcIik7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWU/LnRyaW0oKSB8fCBgTWFzdHJhIHNhbmRib3ggJHtpZH1gO1xuICAgIHRoaXMuY2xpZW50ID0gb3B0aW9ucy5jbGllbnQ7XG4gICAgdGhpcy5kaXNwbGF5TmFtZSA9IHRoaXMubmFtZTtcbiAgICB0aGlzLmluYWN0aXZpdHlUaW1lb3V0ID0gb3B0aW9ucy5pbmFjdGl2aXR5VGltZW91dCA/PyBERUZBVUxUX0lOQUNUSVZJVFlfVElNRU9VVDtcbiAgICB0aGlzLnN0YXJ0dXBUaW1lb3V0TXMgPSBvcHRpb25zLnN0YXJ0dXBUaW1lb3V0TXMgPz8gREVGQVVMVF9TVEFSVFVQX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5jb21tYW5kVGltZW91dE1zID0gb3B0aW9ucy5jb21tYW5kVGltZW91dE1zID8/IERFRkFVTFRfQ09NTUFORF9USU1FT1VUX01TO1xuICAgIHRoaXMuZmFsbGJhY2tDb25maWcgPSBvcHRpb25zLmZhbGxiYWNrID8/IFwibW9udHlcIjtcbiAgfVxuXG4gIGdldCBwcm92aWRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZhbGxiYWNrPy5wcm92aWRlciA/PyBcImRhdGFicmlja3NcIjtcbiAgfVxuXG4gIC8qKiBFbnN1cmUgdGhlIHJlbW90ZSBzYW5kYm94IGV4aXN0cyBhbmQgaGFzIHJlYWNoZWQgaXRzIHJ1bm5pbmcgc3RhdGUuICovXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRXaXRoU2lnbmFsKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0V2l0aFNpZ25hbChzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCIpIHJldHVybjtcbiAgICBpZiAodGhpcy5zdGFydFByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRQcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZXJmb3JtU3RhcnQoc2lnbmFsKTtcbiAgICB0aGlzLnN0YXJ0UHJvbWlzZSA9IHBlbmRpbmc7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBlbmRpbmc7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0UHJvbWlzZSA9PT0gcGVuZGluZykgdGhpcy5zdGFydFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtU3RhcnQoc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykge1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmVGYWxsYmFjay5zdGFydD8uKCk7XG4gICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXR1cyA9IFwic3RhcnRpbmdcIjtcbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBsZXQgc2FuZGJveCA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGUoc2lnbmFsKTtcbiAgICAgIGlmIChzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IFwiU0FOREJPWF9TVEFURV9TVE9QUEVEXCIpIHtcbiAgICAgICAgc2FuZGJveCA9IGF3YWl0IHRoaXMubXV0YXRlKFwic3RhcnRcIiwgc2lnbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IFwiU0FOREJPWF9TVEFURV9TVE9QUElOR1wiKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclN0YXRlKFwiU0FOREJPWF9TVEFURV9TVE9QUEVEXCIsIHNpZ25hbCk7XG4gICAgICAgIHNhbmRib3ggPSBhd2FpdCB0aGlzLm11dGF0ZShcInN0YXJ0XCIsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBpZiAoc2FuZGJveC5zdGF0dXM/LnN0YXRlICE9PSBcIlNBTkRCT1hfU1RBVEVfUlVOTklOR1wiKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclN0YXRlKFwiU0FOREJPWF9TVEFURV9SVU5OSU5HXCIsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXR1cyA9IFwicnVubmluZ1wiO1xuICAgICAgdGhpcy5sYXN0VXNlZEF0ID0gbmV3IERhdGUoKTtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmICh0aGlzLmZhbGxiYWNrQ29uZmlnICE9PSBmYWxzZSAmJiBpc0RhdGFicmlja3NTYW5kYm94VW5hdmFpbGFibGUoY2F1Z2h0KSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFjdGl2YXRlRmFsbGJhY2soY2F1Z2h0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0dXMgPSBcImVycm9yXCI7XG4gICAgICB0aGlzLmVycm9yID0gZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoY2F1Z2h0KTtcbiAgICAgIHRocm93IGNhdWdodDtcbiAgICB9XG4gIH1cblxuICAvKiogRGF0YWJyaWNrcyBob21lIHBlcnNpc3RlbmNlIGlzIG5vdCBhIGNsb25lYWJsZSBNYXN0cmEgY2hlY2twb2ludC4gKi9cbiAgYXN5bmMgc25hcHNob3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5hY3RpdmVGYWxsYmFjaz8uc25hcHNob3QoKTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0NoZWNrcG9pbnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZhbGxiYWNrPy5zdXBwb3J0c0NoZWNrcG9pbnRzID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqIFN0b3AgY29tcHV0ZSB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBzYW5kYm94IGhvbWUgZGlyZWN0b3J5LiAqL1xuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUZhbGxiYWNrKSB7XG4gICAgICBhd2FpdCB0aGlzLmFjdGl2ZUZhbGxiYWNrLnN0b3A/LigpO1xuICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLmFjdGl2ZUZhbGxiYWNrLnN0YXR1cztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdHVzID09PSBcInN0b3BwZWRcIiB8fCB0aGlzLnN0YXR1cyA9PT0gXCJkZXN0cm95ZWRcIikgcmV0dXJuO1xuICAgIHRoaXMuc3RhdHVzID0gXCJzdG9wcGluZ1wiO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm11dGF0ZShcInN0b3BcIik7XG4gICAgICB0aGlzLnN0YXR1cyA9IFwic3RvcHBlZFwiO1xuICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgaWYgKGlzU3RhdHVzKGNhdWdodCwgNDA0KSkge1xuICAgICAgICB0aGlzLnN0YXR1cyA9IFwic3RvcHBlZFwiO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXR1cyA9IFwiZXJyb3JcIjtcbiAgICAgIHRoaXMuZXJyb3IgPSBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShjYXVnaHQpO1xuICAgICAgdGhyb3cgY2F1Z2h0O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBQZXJtYW5lbnRseSBkZWxldGUgdGhlIHNhbmRib3ggYW5kIGl0cyBwZXJzaXN0ZWQgaG9tZSBkaXJlY3RvcnkuICovXG4gIGFzeW5jIGRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuYWN0aXZlRmFsbGJhY2spIHtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aXZlRmFsbGJhY2suZGVzdHJveT8uKCk7XG4gICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwiZGVzdHJveWVkXCIpIHJldHVybjtcbiAgICB0aGlzLnN0YXR1cyA9IFwiZGVzdHJveWluZ1wiO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoYCR7dGhpcy5yZXNvdXJjZVBhdGh9YCwgXCJERUxFVEVcIiwgei5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCkpO1xuICAgICAgdGhpcy5zdGF0dXMgPSBcImRlc3Ryb3llZFwiO1xuICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgaWYgKGlzU3RhdHVzKGNhdWdodCwgNDA0KSkge1xuICAgICAgICB0aGlzLnN0YXR1cyA9IFwiZGVzdHJveWVkXCI7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhdHVzID0gXCJlcnJvclwiO1xuICAgICAgdGhpcy5lcnJvciA9IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGNhdWdodCk7XG4gICAgICB0aHJvdyBjYXVnaHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIEV4ZWN1dGUgb25lIGZvcmVncm91bmQgc2hlbGwgY29tbWFuZCBpbiB0aGUgcmVtb3RlIHNhbmRib3guICovXG4gIGFzeW5jIGV4ZWN1dGVDb21tYW5kKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBhcmdzOiBzdHJpbmdbXSA9IFtdLFxuICAgIG9wdGlvbnM6IEV4ZWN1dGVDb21tYW5kT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPENvbW1hbmRSZXN1bHQ+IHtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0V2l0aFNpZ25hbChvcHRpb25zLmFib3J0U2lnbmFsKTtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUZhbGxiYWNrKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IHRoaXMuY29tbWFuZFRpbWVvdXRNcztcbiAgICBjb25zdCBzY3JpcHQgPSBjb21tYW5kU2NyaXB0KGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMuY3dkKTtcbiAgICBjb25zdCBzdGFydGVkID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgbGV0IHJlc3BvbnNlOiB6LmluZmVyPHR5cGVvZiBFeGVjdXRlUmVzcG9uc2VTY2hlbWE+O1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdChcbiAgICAgICAgYCR7U0FOREJPWF9FWEVDX0FQSV9QQVRIfS8ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmlkKX0vZXhlYy1zeW5jYCxcbiAgICAgICAgXCJQT1NUXCIsXG4gICAgICAgIEV4ZWN1dGVSZXNwb25zZVNjaGVtYSxcbiAgICAgICAge1xuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGNtZDogXCIvYmluL2Jhc2hcIixcbiAgICAgICAgICAgIGFyZ3M6IFtcIi1sY1wiLCBzY3JpcHRdLFxuICAgICAgICAgICAgZW52czogZGVmaW5lZEVudmlyb25tZW50KG9wdGlvbnMuZW52KSxcbiAgICAgICAgICAgIGV4ZWN1dGlvbl90aW1lb3V0OiBgJHtNYXRoLm1heCgxLCBNYXRoLmNlaWwodGltZW91dCAvIDFfMDAwKSl9c2AsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgaWYgKHRoaXMuZmFsbGJhY2tDb25maWcgPT09IGZhbHNlIHx8ICFpc0RhdGFicmlja3NTYW5kYm94VW5hdmFpbGFibGUoY2F1Z2h0KSkgdGhyb3cgY2F1Z2h0O1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmF0ZUZhbGxiYWNrKGNhdWdodCk7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlRmFsbGJhY2soY29tbWFuZCwgYXJncywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGNvbnN0IHN0ZG91dCA9IHJlc3BvbnNlLnN0ZG91dCA/PyBcIlwiO1xuICAgIGNvbnN0IHN0ZGVyciA9IHJlc3BvbnNlLnN0ZGVyciA/PyBcIlwiO1xuICAgIG9wdGlvbnMub25TdGRvdXQ/LihzdGRvdXQpO1xuICAgIG9wdGlvbnMub25TdGRlcnI/LihzdGRlcnIpO1xuICAgIHRoaXMubGFzdFVzZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgdGltZWRPdXQgPSByZXNwb25zZS5zdGF0dXMgPT09IFwiRVhFQ1VURV9DT01NQU5EX1NUQVRVU19USU1FRF9PVVRcIjtcbiAgICBjb25zdCBleGl0Q29kZSA9IHJlc3BvbnNlLmV4aXRfY29kZSA/PyAtMTtcbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZCxcbiAgICAgIGFyZ3MsXG4gICAgICBzdWNjZXNzOiByZXNwb25zZS5zdGF0dXMgPT09IFwiRVhFQ1VURV9DT01NQU5EX1NUQVRVU19DT01QTEVURURcIiAmJiBleGl0Q29kZSA9PT0gMCxcbiAgICAgIGV4aXRDb2RlLFxuICAgICAgc3Rkb3V0LFxuICAgICAgc3RkZXJyLFxuICAgICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAuLi4odGltZWRPdXQgPyB7IHRpbWVkT3V0OiB0cnVlLCBraWxsZWQ6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihyZXNwb25zZS50cnVuY2F0ZWRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzdGRvdXRUcnVuY2F0ZWQ6IHRydWUsXG4gICAgICAgICAgICBzdGRlcnJUcnVuY2F0ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEFjdGl2YXRlIHRoZSBjb25maWd1cmVkIGZhbGxiYWNrIG9uY2UgYWNyb3NzIGNvbmN1cnJlbnQgY29tbWFuZCBmYWlsdXJlcy4gKi9cbiAgcHJpdmF0ZSBhc3luYyBhY3RpdmF0ZUZhbGxiYWNrKGNhdWdodDogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUZhbGxiYWNrKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmFsbGJhY2tQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmZhbGxiYWNrUHJvbWlzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMuc3RhcnRGYWxsYmFjayhjYXVnaHQpO1xuICAgIHRoaXMuZmFsbGJhY2tQcm9taXNlID0gcGVuZGluZztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcGVuZGluZztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMuZmFsbGJhY2tQcm9taXNlID09PSBwZW5kaW5nKSB0aGlzLmZhbGxiYWNrUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKiogU3RhcnQgYW5kIHB1Ymxpc2ggdGhlIGNvbmZpZ3VyZWQgZmFsbGJhY2sgYWZ0ZXIgcmVjaGVja2luZyBhY3RpdmUgc3RhdGUuICovXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRGYWxsYmFjayhjYXVnaHQ6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZhbGxiYWNrQ29uZmlnID09PSBmYWxzZSkgdGhyb3cgY2F1Z2h0O1xuICAgIGNvbnN0IGZhbGxiYWNrID0gcmVzb2x2ZUZhbGxiYWNrKHRoaXMuZmFsbGJhY2tDb25maWcpO1xuICAgIGxvZ2dlci53YXJuKFwiRGF0YWJyaWNrcyBTYW5kYm94IHVuYXZhaWxhYmxlOyB1c2luZyBmYWxsYmFja1wiLCB7XG4gICAgICBzYW5kYm94SWQ6IHRoaXMuaWQsXG4gICAgICBmYWxsYmFjazogZmFsbGJhY2sucHJvdmlkZXIsXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoY2F1Z2h0KSxcbiAgICB9KTtcbiAgICBhd2FpdCBmYWxsYmFjay5zdGFydD8uKCk7XG4gICAgdGhpcy5hY3RpdmVGYWxsYmFjayA9IGZhbGxiYWNrO1xuICAgIHRoaXMuc3RhdHVzID0gZmFsbGJhY2suc3RhdHVzO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxsYmFjay5lcnJvcjtcbiAgfVxuXG4gIC8qKiBFeGVjdXRlIHRocm91Z2ggdGhlIGFjdGl2ZSBmYWxsYmFjayBvciByZXR1cm4gYW4gdW5zdXBwb3J0ZWQgcmVzdWx0LiAqL1xuICBwcml2YXRlIGV4ZWN1dGVGYWxsYmFjayhcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgYXJnczogc3RyaW5nW10sXG4gICAgb3B0aW9uczogRXhlY3V0ZUNvbW1hbmRPcHRpb25zLFxuICApOiBQcm9taXNlPENvbW1hbmRSZXN1bHQ+IHtcbiAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMuYWN0aXZlRmFsbGJhY2s7XG4gICAgaWYgKCFmYWxsYmFjaykgdGhyb3cgbmV3IEVycm9yKFwiRmFsbGJhY2sgc2FuZGJveCBpcyBub3QgYWN0aXZlXCIpO1xuICAgIGlmIChmYWxsYmFjay5leGVjdXRlQ29tbWFuZCkgcmV0dXJuIGZhbGxiYWNrLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgY29tbWFuZCxcbiAgICAgIGFyZ3MsXG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGV4aXRDb2RlOiAxLFxuICAgICAgc3Rkb3V0OiBcIlwiLFxuICAgICAgc3RkZXJyOiBgRmFsbGJhY2sgc2FuZGJveCAke2ZhbGxiYWNrLnByb3ZpZGVyfSBkb2VzIG5vdCBzdXBwb3J0IGNvbW1hbmQgZXhlY3V0aW9uLmAsXG4gICAgICBleGVjdXRpb25UaW1lTXM6IDAsXG4gICAgfSk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgYWRhcHRlciBjdXJyZW50bHkga25vd3MgdGhlIHJlbW90ZSBzYW5kYm94IHRvIGJlIHJ1bm5pbmcuICovXG4gIGFzeW5jIGlzUmVhZHkoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuYWN0aXZlRmFsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUZhbGxiYWNrLmlzUmVhZHk/LigpID8/IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzID09PSBcInJ1bm5pbmdcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdHVzID09PSBcInJ1bm5pbmdcIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLmdldCgpO1xuICAgICAgdGhpcy5zdGF0dXMgPVxuICAgICAgICBzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IFwiU0FOREJPWF9TVEFURV9SVU5OSU5HXCIgPyBcInJ1bm5pbmdcIiA6IHJlbW90ZVN0YXR1cyhzYW5kYm94KTtcbiAgICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCI7XG4gICAgfSBjYXRjaCAoY2F1Z2h0KSB7XG4gICAgICBpZiAoaXNTdGF0dXMoY2F1Z2h0LCA0MDQpKSByZXR1cm4gZmFsc2U7XG4gICAgICB0aHJvdyBjYXVnaHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlcG9ydCBNYXN0cmEtZmFjaW5nIHNhbmRib3ggbWV0YWRhdGEuICovXG4gIGFzeW5jIGdldEluZm8oKTogUHJvbWlzZTxTYW5kYm94SW5mbz4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUZhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoYXdhaXQgdGhpcy5hY3RpdmVGYWxsYmFjay5nZXRJbmZvPy4oKSkgPz8ge1xuICAgICAgICAgIGlkOiB0aGlzLmFjdGl2ZUZhbGxiYWNrLmlkLFxuICAgICAgICAgIG5hbWU6IHRoaXMuYWN0aXZlRmFsbGJhY2submFtZSxcbiAgICAgICAgICBwcm92aWRlcjogdGhpcy5hY3RpdmVGYWxsYmFjay5wcm92aWRlcixcbiAgICAgICAgICBzdGF0dXM6IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZWRBdDogdGhpcy5jcmVhdGVkQXQsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLmdldCgpO1xuICAgIHRoaXMuc3RhdHVzID0gcmVtb3RlU3RhdHVzKHNhbmRib3gpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHNhbmRib3guZGlzcGxheV9uYW1lID8/IHRoaXMubmFtZSxcbiAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGNyZWF0ZWRBdDogdGhpcy5yZW1vdGVDcmVhdGVkQXQgPz8gdGhpcy5jcmVhdGVkQXQsXG4gICAgICAuLi4odGhpcy5sYXN0VXNlZEF0ID8geyBsYXN0VXNlZEF0OiB0aGlzLmxhc3RVc2VkQXQgfSA6IHt9KSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHJlc291cmNlTmFtZTogc2FuZGJveC5uYW1lLFxuICAgICAgICByZW1vdGVTdGF0ZTogc2FuZGJveC5zdGF0dXM/LnN0YXRlLFxuICAgICAgICB1cGRhdGVUaW1lOiBzYW5kYm94LnVwZGF0ZV90aW1lLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEV4cGxhaW4gdGhlIERhdGFicmlja3MgZXhlY3V0aW9uIGJvdW5kYXJ5IHRvIHRoZSBhZ2VudC4gKi9cbiAgZ2V0SW5zdHJ1Y3Rpb25zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiQ29tbWFuZHMgcnVuIGluIGEgcGVyc2lzdGVudCBEYXRhYnJpY2tzIHNlcnZlcmxlc3Mgc2FuZGJveCwgbm90IGluIHRoZSBBcHAgY29udGFpbmVyLlwiLFxuICAgICAgXCJVc2Ugc2hlbGwgY29tbWFuZHMgbm9ybWFsbHkuIFRoZSBzYW5kYm94IGhvbWUgZGlyZWN0b3J5IHN1cnZpdmVzIGluYWN0aXZpdHkgc3RvcHMuXCIsXG4gICAgICBcIklmIERhdGFicmlja3MgU2FuZGJveCBpcyB1bmF2YWlsYWJsZSwgY29tbWFuZHMgZmFsbCBiYWNrIHRvIFB5ZGFudGljIE1vbnR5IGFuZCBtdXN0IGJlIFB5dGhvbiBzb3VyY2UuXCIsXG4gICAgICBcIkRhdGFicmlja3MgV29ya3NwYWNlIGZpbGVzeXN0ZW0gbW91bnRzIHJlbWFpbiBzZXBhcmF0ZSB1bmxlc3MgYSBjb21tYW5kIGNvcGllcyBkYXRhIGV4cGxpY2l0bHkuXCIsXG4gICAgXS5qb2luKFwiIFwiKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHJlc291cmNlUGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtTQU5EQk9YX0FQSV9QQVRIfS8ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmlkKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRPckNyZWF0ZShzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXQoc2lnbmFsKTtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmICghaXNTdGF0dXMoY2F1Z2h0LCA0MDQpKSB0aHJvdyBjYXVnaHQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KFNBTkRCT1hfQVBJX1BBVEgsIFwiUE9TVFwiLCBTYW5kYm94UmVzcG9uc2VTY2hlbWEsIHtcbiAgICAgICAgcXVlcnk6IHsgc2FuZGJveF9pZDogdGhpcy5pZCB9LFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgZGlzcGxheV9uYW1lOiB0aGlzLmRpc3BsYXlOYW1lLFxuICAgICAgICAgIHNwZWM6IHtcbiAgICAgICAgICAgIGNvbXB1dGU6IHtcbiAgICAgICAgICAgICAgaW5hY3Rpdml0eV90aW1lb3V0OiB0aGlzLmluYWN0aXZpdHlUaW1lb3V0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVtZW1iZXJDcmVhdGVkQXQoc2FuZGJveC5jcmVhdGVfdGltZSk7XG4gICAgICByZXR1cm4gc2FuZGJveDtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmICghaXNTdGF0dXMoY2F1Z2h0LCA0MDkpKSB0aHJvdyBjYXVnaHQ7XG4gICAgICByZXR1cm4gdGhpcy5nZXQoc2lnbmFsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldChzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLnJlcXVlc3QodGhpcy5yZXNvdXJjZVBhdGgsIFwiR0VUXCIsIFNhbmRib3hSZXNwb25zZVNjaGVtYSwge1xuICAgICAgc2lnbmFsLFxuICAgIH0pO1xuICAgIHRoaXMucmVtZW1iZXJDcmVhdGVkQXQoc2FuZGJveC5jcmVhdGVfdGltZSk7XG4gICAgcmV0dXJuIHNhbmRib3g7XG4gIH1cblxuICBwcml2YXRlIG11dGF0ZShvcGVyYXRpb246IFwic3RhcnRcIiB8IFwic3RvcFwiLCBzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoYCR7dGhpcy5yZXNvdXJjZVBhdGh9LyR7b3BlcmF0aW9ufWAsIFwiUE9TVFwiLCBTYW5kYm94UmVzcG9uc2VTY2hlbWEsIHtcbiAgICAgIHNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvclN0YXRlKGV4cGVjdGVkOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGhpcy5zdGFydHVwVGltZW91dE1zO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLmdldChzaWduYWwpO1xuICAgICAgaWYgKHNhbmRib3guc3RhdHVzPy5zdGF0ZSA9PT0gZXhwZWN0ZWQpIHJldHVybiBzYW5kYm94O1xuICAgICAgYXdhaXQgYXN5bmNVdGlscy5zbGVlcChTQU5EQk9YX1BPTExfSU5URVJWQUxfTVMsIHNpZ25hbCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEYXRhYnJpY2tzIHNhbmRib3ggJHt0aGlzLmlkfSBkaWQgbm90IHJlYWNoICR7ZXhwZWN0ZWR9IHdpdGhpbiAke3RoaXMuc3RhcnR1cFRpbWVvdXRNc31tc2AsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtZW1iZXJDcmVhdGVkQXQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4ocGFyc2VkLmdldFRpbWUoKSkpIHRoaXMucmVtb3RlQ3JlYXRlZEF0ID0gcGFyc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBtZXRob2Q6IFwiR0VUXCIgfCBcIlBPU1RcIiB8IFwiREVMRVRFXCIsXG4gICAgc2NoZW1hOiB6LlpvZFR5cGU8VD4sXG4gICAgb3B0aW9uczoge1xuICAgICAgcGF5bG9hZD86IHVua25vd247XG4gICAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgICB9ID0ge30sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuYXBpQ2xpZW50LnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIC4uLihvcHRpb25zLnBheWxvYWQgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9KSxcbiAgICAgICAgfSksXG4gICAgICAgIHJhdzogZmFsc2UsXG4gICAgICAgIC4uLihvcHRpb25zLnBheWxvYWQgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBwYXlsb2FkOiBvcHRpb25zLnBheWxvYWQgfSksXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5zaWduYWwgPyBkYXRhYnJpY2tzLnRvQ29udGV4dChvcHRpb25zLnNpZ25hbCkgOiB1bmRlZmluZWQsXG4gICAgKTtcbiAgICByZXR1cm4gc2NoZW1hLnBhcnNlKHJlc3BvbnNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21tYW5kU2NyaXB0KGNvbW1hbmQ6IHN0cmluZywgYXJnczogcmVhZG9ubHkgc3RyaW5nW10sIGN3ZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgaW52b2NhdGlvbiA9IGFyZ3MubGVuZ3RoID8gW2NvbW1hbmQsIC4uLmFyZ3NdLm1hcChzaGVsbFF1b3RlKS5qb2luKFwiIFwiKSA6IGNvbW1hbmQ7XG4gIHJldHVybiBjd2QgPyBgY2QgLS0gJHtzaGVsbFF1b3RlKGN3ZCl9ICYmICR7aW52b2NhdGlvbn1gIDogaW52b2NhdGlvbjtcbn1cblxuZnVuY3Rpb24gc2hlbGxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlQWxsKFwiJ1wiLCBcIidcXFxcJydcIil9J2A7XG59XG5cbmZ1bmN0aW9uIGRlZmluZWRFbnZpcm9ubWVudChpbnB1dDogTm9kZUpTLlByb2Nlc3NFbnYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhpbnB1dCA/PyB7fSkuZmlsdGVyKFxuICAgICAgKGVudHJ5KTogZW50cnkgaXMgW3N0cmluZywgc3RyaW5nXSA9PiBlbnRyeVsxXSAhPT0gdW5kZWZpbmVkLFxuICAgICksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzU3RhdHVzKGNhdWdodDogdW5rbm93biwgc3RhdHVzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVycm9yVXRpbHMuZXJyb3JDb250ZXh0KGNhdWdodCkuc3RhdHVzQ29kZSA9PT0gc3RhdHVzO1xufVxuXG5mdW5jdGlvbiByZW1vdGVTdGF0dXMoc2FuZGJveDogei5pbmZlcjx0eXBlb2YgU2FuZGJveFJlc3BvbnNlU2NoZW1hPik6IFByb3ZpZGVyU3RhdHVzIHtcbiAgc3dpdGNoIChzYW5kYm94LnN0YXR1cz8uc3RhdGUpIHtcbiAgICBjYXNlIFwiU0FOREJPWF9TVEFURV9SVU5OSU5HXCI6XG4gICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgY2FzZSBcIlNBTkRCT1hfU1RBVEVfU1RPUFBFRFwiOlxuICAgICAgcmV0dXJuIFwic3RvcHBlZFwiO1xuICAgIGNhc2UgXCJTQU5EQk9YX1NUQVRFX1NUT1BQSU5HXCI6XG4gICAgICByZXR1cm4gXCJzdG9wcGluZ1wiO1xuICAgIGNhc2UgXCJTQU5EQk9YX1NUQVRFX1BFTkRJTkdcIjpcbiAgICAgIHJldHVybiBcInN0YXJ0aW5nXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInBlbmRpbmdcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlRmFsbGJhY2soXG4gIGNvbmZpZ3VyZWQ6IEV4Y2x1ZGU8RGF0YWJyaWNrc1NhbmRib3hPcHRpb25zW1wiZmFsbGJhY2tcIl0sIGZhbHNlIHwgdW5kZWZpbmVkPixcbik6IFdvcmtzcGFjZVNhbmRib3gge1xuICBpZiAodHlwZW9mIGNvbmZpZ3VyZWQgPT09IFwib2JqZWN0XCIgJiYgXCJwcm92aWRlclwiIGluIGNvbmZpZ3VyZWQgJiYgXCJzdGF0dXNcIiBpbiBjb25maWd1cmVkKSB7XG4gICAgcmV0dXJuIGNvbmZpZ3VyZWQ7XG4gIH1cbiAgcmV0dXJuIG5ldyBNb250eVNhbmRib3goY29uZmlndXJlZCA9PT0gXCJtb250eVwiID8ge30gOiBjb25maWd1cmVkKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhYnJpY2tzU2FuZGJveFVuYXZhaWxhYmxlKGNhdWdodDogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBjb250ZXh0ID0gZXJyb3JVdGlscy5lcnJvckNvbnRleHQoY2F1Z2h0KTtcbiAgcmV0dXJuIChcbiAgICBjb250ZXh0LnN0YXR1c0NvZGUgPT09IDQwNCB8fFxuICAgIGNvbnRleHQuaGFzTWVzc2FnZShcImZlYXR1cmVcIiwgXCJkaXNhYmxlZFwiKSB8fFxuICAgIGNvbnRleHQuaGFzTWVzc2FnZShcInNhbmRib3hcIiwgXCJub3RcIiwgXCJlbmFibGVkXCIpIHx8XG4gICAgY29udGV4dC5oYXNNZXNzYWdlKFwicHJldmlld1wiLCBcIm5vdFwiLCBcImVuYWJsZWRcIikgfHxcbiAgICBjb250ZXh0Lmhhc01lc3NhZ2UoXCJwcmV2aWV3XCIsIFwidW5hdmFpbGFibGVcIikgfHxcbiAgICBjb250ZXh0Lmhhc01lc3NhZ2UoXCJwcmV2aWV3XCIsIFwiZGlzYWJsZWRcIilcbiAgKTtcbn1cbiJdfQ==
|
package/lib/src/workspaces.d.ts
CHANGED
|
@@ -113,7 +113,7 @@ export interface CreateWorkspaceOptions {
|
|
|
113
113
|
*/
|
|
114
114
|
sandbox?: WorkspaceSandboxSelection;
|
|
115
115
|
/**
|
|
116
|
-
* Extra LOCAL skill
|
|
116
|
+
* Extra LOCAL skill roots mounted read-only for every request's skill discovery.
|
|
117
117
|
* Used by the plugin to surface remote skills provisioned to a local temp
|
|
118
118
|
* dir at startup (see `remote-skills.ts`). Databricks-hosted remote skills
|
|
119
119
|
* need no entry here - they land in the Assistant tree the built-in mount
|
package/lib/src/workspaces.js
CHANGED
|
@@ -20,11 +20,12 @@
|
|
|
20
20
|
import { createHash } from "node:crypto";
|
|
21
21
|
import { ConfigurationError, createWorkspaceClient } from "@databricks/appkit";
|
|
22
22
|
import { DatabricksFileSystem, workspaceClient } from "@dbx-tools/databricks";
|
|
23
|
+
import { LocalFileSystem } from "@dbx-tools/fs";
|
|
23
24
|
import { errorUtils, log, object, stringUtils, token } from "@dbx-tools/shared-core";
|
|
24
25
|
import { posixPath } from "@dbx-tools/shared-fs";
|
|
25
26
|
import { CompositeFilesystem, Workspace, } from "@mastra/core/workspace";
|
|
26
27
|
import { MASTRA_SCOPES_KEY, MASTRA_USER_EMAIL_KEY, MASTRA_USER_KEY, resolveUserKey, } from "./config.js";
|
|
27
|
-
import { scratchFilesystem } from "./filesystems.js";
|
|
28
|
+
import { filesystems, scratchFilesystem } from "./filesystems.js";
|
|
28
29
|
import { MontySandbox } from "./monty-sandbox.js";
|
|
29
30
|
import { DatabricksSandbox } from "./sandbox.js";
|
|
30
31
|
import { cachedWorkspaceSkillMount, DEFAULT_WORKSPACE_SKILL_CACHE_TTL_MS } from "./skill-cache.js";
|
|
@@ -96,12 +97,10 @@ export function createWorkspace(options = {}) {
|
|
|
96
97
|
const { id, name } = resolveWorkspaceIdentity(options);
|
|
97
98
|
const skillFolders = resolveSkillFolders(options);
|
|
98
99
|
const folderNames = Object.keys(skillFolders);
|
|
99
|
-
const resolvers = buildMountResolvers(skillFolders, options.mounts, options.workspaceSkillRefreshTtlMs);
|
|
100
100
|
const extraSkillPaths = options.extraSkillPaths ?? [];
|
|
101
|
+
const resolvers = buildMountResolvers(skillFolders, [...(options.mounts ?? []), ...localSkillMountResolvers(extraSkillPaths)], options.workspaceSkillRefreshTtlMs);
|
|
101
102
|
const skills = options.skills ??
|
|
102
|
-
(resolvers.length > 0
|
|
103
|
-
? buildWorkspaceSkillsResolver(resolvers, extraSkillPaths)
|
|
104
|
-
: undefined);
|
|
103
|
+
(resolvers.length > 0 ? buildWorkspaceSkillsResolver(resolvers) : undefined);
|
|
105
104
|
const checkSkillFileMtime = options.checkSkillFileMtime ?? folderNames.length > 0;
|
|
106
105
|
const bm25 = options.bm25 !== false;
|
|
107
106
|
const sandbox = resolveWorkspaceSandbox(options.sandbox, id, name);
|
|
@@ -329,6 +328,21 @@ function buildMountResolvers(skillFolders, mounts, workspaceSkillRefreshTtlMs =
|
|
|
329
328
|
});
|
|
330
329
|
return resolvers;
|
|
331
330
|
}
|
|
331
|
+
/** Mount startup-provisioned local skill roots into Mastra's workspace filesystem. */
|
|
332
|
+
function localSkillMountResolvers(paths) {
|
|
333
|
+
return [...new Set(paths.map((path) => path.trim()).filter(Boolean))].map((root, index) => {
|
|
334
|
+
const mount = `/remote-skills/${index}`;
|
|
335
|
+
const filesystem = filesystems(new LocalFileSystem({
|
|
336
|
+
root,
|
|
337
|
+
readOnly: true,
|
|
338
|
+
createRoot: false,
|
|
339
|
+
}), { readOnly: true });
|
|
340
|
+
return () => ({
|
|
341
|
+
mounts: { [mount]: filesystem },
|
|
342
|
+
skillPaths: [mount],
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
}
|
|
332
346
|
/**
|
|
333
347
|
* Gate skill-folder mounts on the request's token.
|
|
334
348
|
*
|
|
@@ -453,17 +467,15 @@ async function resolveWorkspaceFilesystem(resolvers, context) {
|
|
|
453
467
|
* Build the dynamic {@link SkillsResolver} that collects `skillPaths` from
|
|
454
468
|
* every mount resolver on each request.
|
|
455
469
|
*/
|
|
456
|
-
function buildWorkspaceSkillsResolver(resolvers
|
|
470
|
+
function buildWorkspaceSkillsResolver(resolvers) {
|
|
457
471
|
return async (context) => {
|
|
458
472
|
const contribution = await resolveWorkspaceContribution(resolvers, context);
|
|
459
473
|
const skillPaths = await uniqueSkillPaths(contribution);
|
|
460
|
-
const merged = [...skillPaths, ...extraSkillPaths];
|
|
461
474
|
logger.debug("skills:resolved", {
|
|
462
475
|
configuredSkillPaths: contribution.skillPaths,
|
|
463
476
|
skillPaths,
|
|
464
|
-
extraSkillPaths,
|
|
465
477
|
});
|
|
466
|
-
return
|
|
478
|
+
return skillPaths;
|
|
467
479
|
};
|
|
468
480
|
}
|
|
469
481
|
/** Expand mounted roots and keep the first concrete skill for each directory name. */
|
|
@@ -529,4 +541,4 @@ async function concreteSkillPaths(root, mount, filesystem) {
|
|
|
529
541
|
}
|
|
530
542
|
return candidates;
|
|
531
543
|
}
|
|
532
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3Jrc3BhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLFNBQVMsR0FNVixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixjQUFjLEdBRWYsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBMEMsTUFBTSxjQUFjLENBQUM7QUFDekYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9DQUFvQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekYsNkVBQTZFO0FBRTdFLCtEQUErRDtBQUMvRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsV0FBVyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRXhGLE1BQU0s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QUksT0FBTyxFQUFFLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVc7WUFBRSxTQUFTO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEUsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1hc3RyYSB3b3Jrc3BhY2UgZmFjdG9yeSBmb3IgRGF0YWJyaWNrcyBBcHBzLlxuICpcbiAqIEJ1aWxkcyBhIHBlci1yZXF1ZXN0IHtAbGluayBXb3Jrc3BhY2V9IHdpdGggRGF0YWJyaWNrcyBTYW5kYm94IGNvbW1hbmRcbiAqIGV4ZWN1dGlvbiBwbHVzIGEge0BsaW5rIENvbXBvc2l0ZUZpbGVzeXN0ZW19IG92ZXIgdGhlIE5BTUVEIHNraWxsIGZvbGRlcnNcbiAqIHJlc29sdmVkIGZvciB0aGF0IHJlcXVlc3QuIEEgc2tpbGwgZm9sZGVyIG1hcHMgYSBuYW1lIHRvIGEgbG9jYXRpb24gcGx1cyBpdHNcbiAqIHJlYWRhYmxlIC8gd3JpdGFibGUgcG9saWN5OiBhIERhdGFicmlja3MgcGF0aCBtb3VudGVkIHRocm91Z2ggdGhlIE9CTyBjbGllbnRcbiAqIG9uIHtAbGluayBNQVNUUkFfVVNFUl9LRVl9LCBvciBhbnkge0BsaW5rIFdvcmtzcGFjZUZpbGVzeXN0ZW19IGEgY29uc3VtaW5nXG4gKiBsaWJyYXJ5IGFscmVhZHkgb3ducy4ge0BsaW5rIERFRkFVTFRfU0tJTExfRk9MREVSU30gc3VwcGxpZXMgdGhlIEFzc2lzdGFudFxuICogdHJlZXMsIGFuZCBgc2tpbGxGb2xkZXJzYCBtZXJnZXMgb3ZlciBpdCAtIHNhbWUgbmFtZSBvdmVycmlkZXMsIGBmYWxzZWBcbiAqIGRpc2FibGVzLCBhIG5ldyBuYW1lIGFkZHMuIE9wdGlvbmFsIG1vdW50IHJlc29sdmVycyBjb250cmlidXRlIGZ1cnRoZXJcbiAqIGZpbGVzeXN0ZW1zIGFuZCBza2lsbCBzY2FuIHJvb3RzIG9uIHRvcC5cbiAqXG4gKiBEYXRhYnJpY2tzIG1vdW50cyB1c2UgYEBkYngtdG9vbHMvZGF0YWJyaWNrc2Age0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtfVxuICogd3JhcHBlZCBieSB7QGxpbmsgZmlsZXN5c3RlbXN9OyBtaXNzaW5nIHJvb3RzIGZhbGwgYmFjayB0b1xuICoge0BsaW5rIHNjcmF0Y2hGaWxlc3lzdGVtfS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCBjcmVhdGVXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IERhdGFicmlja3NGaWxlU3lzdGVtLCB3b3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRieC10b29scy9kYXRhYnJpY2tzXCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBsb2csIG9iamVjdCwgc3RyaW5nVXRpbHMsIHRva2VuIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHBvc2l4UGF0aCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1mc1wiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQge1xuICBDb21wb3NpdGVGaWxlc3lzdGVtLFxuICBXb3Jrc3BhY2UsXG4gIHR5cGUgU2tpbGxzQ29udGV4dCxcbiAgdHlwZSBTa2lsbHNSZXNvbHZlcixcbiAgdHlwZSBXb3Jrc3BhY2VGaWxlc3lzdGVtLFxuICB0eXBlIFdvcmtzcGFjZVNhbmRib3gsXG4gIHR5cGUgV29ya3NwYWNlU2FuZGJveFJlc29sdmVyLFxufSBmcm9tIFwiQG1hc3RyYS9jb3JlL3dvcmtzcGFjZVwiO1xuXG5pbXBvcnQge1xuICBNQVNUUkFfU0NPUEVTX0tFWSxcbiAgTUFTVFJBX1VTRVJfRU1BSUxfS0VZLFxuICBNQVNUUkFfVVNFUl9LRVksXG4gIHJlc29sdmVVc2VyS2V5LFxuICB0eXBlIFVzZXIsXG59IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgc2NyYXRjaEZpbGVzeXN0ZW0gfSBmcm9tIFwiLi9maWxlc3lzdGVtcy50c1wiO1xuaW1wb3J0IHsgTW9udHlTYW5kYm94IH0gZnJvbSBcIi4vbW9udHktc2FuZGJveC50c1wiO1xuaW1wb3J0IHsgRGF0YWJyaWNrc1NhbmRib3gsIHR5cGUgRGF0YWJyaWNrc1dvcmtzcGFjZVNhbmRib3hPcHRpb25zIH0gZnJvbSBcIi4vc2FuZGJveC50c1wiO1xuaW1wb3J0IHsgY2FjaGVkV29ya3NwYWNlU2tpbGxNb3VudCwgREVGQVVMVF9XT1JLU1BBQ0VfU0tJTExfQ0FDSEVfVFRMX01TIH0gZnJvbSBcIi4vc2tpbGwtY2FjaGUudHNcIjtcbmltcG9ydCB7IEFTU0lTVEFOVF9TSEFSRURfU0tJTExTX1BBVEgsIHVzZXJBc3Npc3RhbnRTa2lsbHNQYXRoIH0gZnJvbSBcIi4vc2tpbGwtcGF0aHMudHNcIjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqIE9BdXRoIHNjb3BlcyB0aGF0IGdhdGUgRGF0YWJyaWNrcyB3b3Jrc3BhY2UgZmlsZSBtb3VudHMuICovXG5jb25zdCBXT1JLU1BBQ0VfRklMRV9TQ09QRVMgPSBbXCJ3b3Jrc3BhY2VcIiwgXCJ3b3Jrc3BhY2Uud29ya3NwYWNlXCIsIFwiYWxsLWFwaXNcIl0gYXMgY29uc3Q7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvd29ya3NwYWNlc1wiKTtcbmNvbnN0IE1BWF9TQ09QRURfV09SS1NQQUNFX0ZJTEVTWVNURU1TID0gMTY7XG5jb25zdCBzY29wZWRXb3Jrc3BhY2VGaWxlc3lzdGVtcyA9IG5ldyBNYXA8c3RyaW5nLCBXb3Jrc3BhY2VGaWxlc3lzdGVtPigpO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKiogUGVyLXJlcXVlc3QgY29udGV4dCBmb3IgbW91bnQgYW5kIHNraWxsLWZvbGRlciByZXNvbHZlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZU1vdW50Q29udGV4dCB7XG4gIHJlcXVlc3RDb250ZXh0PzogUmVxdWVzdENvbnRleHQ7XG59XG5cbi8qKlxuICogQSBza2lsbC1mb2xkZXIgZmllbGQgZ2l2ZW4gZWl0aGVyIGRpcmVjdGx5IG9yIGFzIGEgcGVyLXJlcXVlc3QgcmVzb2x2ZXIuXG4gKiBBIHJlc29sdmVyIHJldHVybmluZyBgdW5kZWZpbmVkYCBza2lwcyB0aGUgZm9sZGVyIGZvciB0aGF0IHJlcXVlc3QuXG4gKi9cbmV4cG9ydCB0eXBlIFNraWxsRm9sZGVyVmFsdWU8VD4gPVxuICBUIHwgKChjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQpID0+IFQgfCB1bmRlZmluZWQgfCBQcm9taXNlPFQgfCB1bmRlZmluZWQ+KTtcblxuLyoqXG4gKiBPbmUgbmFtZWQgc2tpbGwtZm9sZGVyIGxvY2F0aW9uIGFuZCBpdHMgcmVhZCAvIHdyaXRlIHBvbGljeS5cbiAqXG4gKiBHaXZlIHtAbGluayBwYXRofSBmb3IgYSBEYXRhYnJpY2tzIHdvcmtzcGFjZSB0cmVlIChtb3VudGVkIHRocm91Z2ggdGhlXG4gKiByZXF1ZXN0J3MgT0JPIGNsaWVudCksIG9yIHtAbGluayBmaWxlc3lzdGVtfSBmb3IgYSBtb3VudCB0aGUgY29uc3VtZXIgYnVpbGRzXG4gKiBpdHNlbGYuIHtAbGluayBmaWxlc3lzdGVtfSB3aW5zIHdoZW4gYm90aCBhcmUgc2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNraWxsRm9sZGVyT3B0aW9ucyB7XG4gIC8qKiBBYnNvbHV0ZSBEYXRhYnJpY2tzIHdvcmtzcGFjZSBwYXRoIGZvciB0aGlzIGZvbGRlci4gKi9cbiAgcGF0aD86IFNraWxsRm9sZGVyVmFsdWU8c3RyaW5nPjtcbiAgLyoqIFJlYWR5LW1hZGUgbW91bnQsIGZvciBsb2NhdGlvbnMgdGhlIE9CTyBjbGllbnQgY2Fubm90IHJlYWNoLiAqL1xuICBmaWxlc3lzdGVtPzogU2tpbGxGb2xkZXJWYWx1ZTxXb3Jrc3BhY2VGaWxlc3lzdGVtPjtcbiAgLyoqXG4gICAqIFNjYW4gdGhpcyBtb3VudCBmb3IgYFNLSUxMLm1kYCBmaWxlcy4gRGVmYXVsdHMgdG8gYHRydWVgOyBgZmFsc2VgIG1vdW50c1xuICAgKiB0aGUgbG9jYXRpb24gZm9yIGZpbGUgdG9vbHMgd2l0aG91dCBhZGRpbmcgaXQgdG8gc2tpbGwgZGlzY292ZXJ5LlxuICAgKi9cbiAgcmVhZGFibGU/OiBib29sZWFuO1xuICAvKipcbiAgICogQWxsb3cgd3JpdGVzIHRvIGEge0BsaW5rIHBhdGh9IG1vdW50IChhbmQgY3JlYXRlIHRoZSByb290IHdoZW4gbWlzc2luZykuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuIEEgc3VwcGxpZWQge0BsaW5rIGZpbGVzeXN0ZW19IGNhcnJpZXMgaXRzIG93blxuICAgKiByZWFkLW9ubHkgZmxhZyBpbnN0ZWFkLlxuICAgKi9cbiAgd3JpdGFibGU/OiBib29sZWFuO1xuICAvKiogTW91bnQgcG9pbnQgaW4gdGhlIGNvbXBvc2l0ZSBuYW1lc3BhY2UuIERlZmF1bHRzIHRvIGAvPG5hbWU+YC4gKi9cbiAgbW91bnQ/OiBzdHJpbmc7XG59XG5cbi8qKiBNb3VudCBtYXAgcGx1cyBvcHRpb25hbCBNYXN0cmEgc2tpbGwgc2NhbiByb290cyBmb3Igb25lIHJlc29sdmVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbiB7XG4gIG1vdW50czogUmVjb3JkPHN0cmluZywgV29ya3NwYWNlRmlsZXN5c3RlbT47XG4gIC8qKiBQYXRocyB3aXRoaW4gdGhlIGNvbXBvc2l0ZSBuYW1lc3BhY2Ugd2hlcmUgYFNLSUxMLm1kYCBmaWxlcyBhcmUgc2Nhbm5lZC4gKi9cbiAgc2tpbGxQYXRocz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aXR5IGZvciB0aGlzIGNvbnRyaWJ1dGlvbi4gV2hlbiBldmVyeSBub24tZW1wdHkgY29udHJpYnV0aW9uXG4gICAqIHN1cHBsaWVzIG9uZSwgTWFzdHJhIHJldXNlcyB0aGUgcmVzb2x2ZWQgc291cmNlIGFjcm9zcyByZXF1ZXN0cy5cbiAgICovXG4gIGNhY2hlS2V5Pzogc3RyaW5nO1xufVxuXG4vKiogQ29udHJpYnV0ZXMgZmlsZXN5c3RlbSBtb3VudHMgKGFuZCBvcHRpb25hbCBza2lsbCBwYXRocykgZm9yIG9uZSByZXF1ZXN0LiAqL1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlTW91bnRSZXNvbHZlciA9IChcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKSA9PiBXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbiB8IFByb21pc2U8V29ya3NwYWNlTW91bnRDb250cmlidXRpb24+O1xuXG4vKiogTmFtZXMgY2FycmllZCBieSB7QGxpbmsgREVGQVVMVF9TS0lMTF9GT0xERVJTfS4gKi9cbmV4cG9ydCB0eXBlIERlZmF1bHRTa2lsbEZvbGRlck5hbWUgPSBcIndvcmtzcGFjZS10ZWFtXCIgfCBcIndvcmtzcGFjZS10ZWFtLWFwcFwiO1xuXG4vKipcbiAqIFNhbmRib3ggc2VsZWN0aW9uIGZvciB7QGxpbmsgY3JlYXRlV29ya3NwYWNlfS4gRGF0YWJyaWNrcyBpcyB0aGUgZGVmYXVsdDtcbiAqIGBmYWxzZWAgZGlzYWJsZXMgY29tbWFuZCBleGVjdXRpb24sIGFuZCBhIE1hc3RyYSBwcm92aWRlciBvciByZXNvbHZlciBpcyBhblxuICogZXhwbGljaXQgcmVwbGFjZW1lbnQuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtzcGFjZVNhbmRib3hTZWxlY3Rpb24gPVxuICB8IGZhbHNlXG4gIHwgXCJkYXRhYnJpY2tzXCJcbiAgfCBcIm1vbnR5XCJcbiAgfCBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnNcbiAgfCBXb3Jrc3BhY2VTYW5kYm94XG4gIHwgV29ya3NwYWNlU2FuZGJveFJlc29sdmVyO1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIGNyZWF0ZVdvcmtzcGFjZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMge1xuICAvKiogV29ya3NwYWNlIGlkOyBkZXJpdmVkIGZyb20gYG5hbWVgIG9yIGBcIndvcmtzcGFjZVwiYCB3aGVuIG9taXR0ZWQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogRGlzcGxheSBuYW1lOyBkZXJpdmVkIGZyb20gYGlkYCB3aGVuIG9taXR0ZWQuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTdGFydCBmcm9tIHtAbGluayBERUZBVUxUX1NLSUxMX0ZPTERFUlN9LiBEZWZhdWx0cyB0byBgdHJ1ZWA7IGBmYWxzZWBcbiAgICogc3RhcnRzIGZyb20gYW4gZW1wdHkgbWFwLCBsZWF2aW5nIG9ubHkgdGhlIHtAbGluayBza2lsbEZvbGRlcnN9IGdpdmVuIGhlcmUuXG4gICAqL1xuICBhc3Npc3RhbnRTa2lsbHM/OiBib29sZWFuO1xuICAvKipcbiAgICogTmFtZWQgc2tpbGwgZm9sZGVycyBtZXJnZWQgb3ZlciB7QGxpbmsgREVGQVVMVF9TS0lMTF9GT0xERVJTfTogYSBtYXRjaGluZ1xuICAgKiBuYW1lIG92ZXJyaWRlcyB0aGF0IGRlZmF1bHQsIGBmYWxzZWAgZGlzYWJsZXMgaXQsIGFuZCBhbnkgb3RoZXIgbmFtZSBhZGRzXG4gICAqIGEgZm9sZGVyLlxuICAgKi9cbiAgc2tpbGxGb2xkZXJzPzogUmVjb3JkPHN0cmluZywgU2tpbGxGb2xkZXJPcHRpb25zIHwgZmFsc2U+O1xuICAvKiogRXh0cmEgcGVyLXJlcXVlc3QgbW91bnQgcmVzb2x2ZXJzIChydW4gYWZ0ZXIgdGhlIHNraWxsLWZvbGRlciBtb3VudHMpLiAqL1xuICBtb3VudHM/OiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW107XG4gIC8qKiBSZXBsYWNlIHRoZSBhdXRvLWJ1aWx0IGR5bmFtaWMgc2tpbGxzIHJlc29sdmVyLiAqL1xuICBza2lsbHM/OiBTa2lsbHNSZXNvbHZlcjtcbiAgLyoqIEZvcndhcmRlZCB0byBNYXN0cmEgd2hlbiBza2lsbCBkaXNjb3ZlcnkgaXMgZW5hYmxlZC4gKi9cbiAgY2hlY2tTa2lsbEZpbGVNdGltZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBcHBLaXQgY2FjaGUgVFRMIGZvciBEYXRhYnJpY2tzIHNraWxsIG1ldGFkYXRhIGFuZCBjb250ZW50LlxuICAgKiBEZWZhdWx0cyB0byBmaXZlIG1pbnV0ZXMuXG4gICAqL1xuICB3b3Jrc3BhY2VTa2lsbFJlZnJlc2hUdGxNcz86IG51bWJlcjtcbiAgLyoqIEVuYWJsZSBCTTI1IGtleXdvcmQgc2VhcmNoIG92ZXIgaW5kZXhlZCB3b3Jrc3BhY2UgY29udGVudC4gKi9cbiAgYm0yNT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb21tYW5kIHNhbmRib3guIERlZmF1bHRzIHRvIERhdGFicmlja3MgU2FuZGJveC4gUGFzcyBgZmFsc2VgIHRvIGRpc2FibGVcbiAgICogY29tbWFuZCBleGVjdXRpb24sIG9yIGFuIGV4cGxpY2l0IE1hc3RyYSBzYW5kYm94L3Byb3ZpZGVyIHJlc29sdmVyIHRvXG4gICAqIHJlcGxhY2UgRGF0YWJyaWNrcyBmb3IgdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICBzYW5kYm94PzogV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbjtcbiAgLyoqXG4gICAqIEV4dHJhIExPQ0FMIHNraWxsIHNjYW4gcGF0aHMgYWRkZWQgdG8gZXZlcnkgcmVxdWVzdCdzIHNraWxsIGRpc2NvdmVyeS5cbiAgICogVXNlZCBieSB0aGUgcGx1Z2luIHRvIHN1cmZhY2UgcmVtb3RlIHNraWxscyBwcm92aXNpb25lZCB0byBhIGxvY2FsIHRlbXBcbiAgICogZGlyIGF0IHN0YXJ0dXAgKHNlZSBgcmVtb3RlLXNraWxscy50c2ApLiBEYXRhYnJpY2tzLWhvc3RlZCByZW1vdGUgc2tpbGxzXG4gICAqIG5lZWQgbm8gZW50cnkgaGVyZSAtIHRoZXkgbGFuZCBpbiB0aGUgQXNzaXN0YW50IHRyZWUgdGhlIGJ1aWx0LWluIG1vdW50XG4gICAqIGFscmVhZHkgc2NhbnMuXG4gICAqL1xuICBleHRyYVNraWxsUGF0aHM/OiBzdHJpbmdbXTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkZWZhdWx0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogVGhlIHNraWxsIGZvbGRlcnMgZXZlcnkgd29ya3NwYWNlIHN0YXJ0cyB3aXRoLlxuICpcbiAqIC0gYHdvcmtzcGFjZS10ZWFtYCAtIHRoZSBzaGFyZWQgd29ya3NwYWNlIEFzc2lzdGFudCB0cmVlLCByZWFkLW9ubHkgYmVjYXVzZVxuICogICB3cml0aW5nIGl0IGlzIGEgd29ya3NwYWNlLWFkbWluIGFjdGlvbi5cbiAqIC0gYHdvcmtzcGFjZS10ZWFtLWFwcGAgLSB0aGUgcmVxdWVzdGluZyB1c2VyJ3Mgb3duIEFzc2lzdGFudCB0cmVlLCB3cml0YWJsZVxuICogICBzbyB0aGUgYXBwIGNhbiBzYXZlIHNraWxscyBiYWNrIHRvIGl0LiBTa2lwcGVkIHdoZW4gdGhlIHJlcXVlc3QgY2FycmllcyBub1xuICogICB1c2VyIGVtYWlsLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TS0lMTF9GT0xERVJTOiBSZWFkb25seTxSZWNvcmQ8RGVmYXVsdFNraWxsRm9sZGVyTmFtZSwgU2tpbGxGb2xkZXJPcHRpb25zPj4gPSB7XG4gIFwid29ya3NwYWNlLXRlYW1cIjoge1xuICAgIHBhdGg6IEFTU0lTVEFOVF9TSEFSRURfU0tJTExTX1BBVEgsXG4gICAgcmVhZGFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9LFxuICBcIndvcmtzcGFjZS10ZWFtLWFwcFwiOiB7XG4gICAgcGF0aDogKHsgcmVxdWVzdENvbnRleHQgfSkgPT4ge1xuICAgICAgY29uc3QgZW1haWwgPSByZXNvbHZlU2NvcGVkRW1haWwocmVxdWVzdENvbnRleHQpO1xuICAgICAgcmV0dXJuIGVtYWlsID8gdXNlckFzc2lzdGFudFNraWxsc1BhdGgoZW1haWwpIDogdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgcmVhZGFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gIH0sXG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIE1hc3RyYSB7QGxpbmsgV29ya3NwYWNlfSB3aXRoIHBlci1yZXF1ZXN0IERhdGFicmlja3MgbW91bnRzLlxuICpcbiAqIEBleGFtcGxlIERlZmF1bHQgc2tpbGwgZm9sZGVycyBvbmx5XG4gKiBgYGB0c1xuICogY3JlYXRlV29ya3NwYWNlKClcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIE92ZXJyaWRlIGEgZGVmYXVsdCwgZHJvcCBhbm90aGVyLCBhbmQgYWRkIGEgbG9jYXRpb24gb2YgeW91ciBvd25cbiAqIGBgYHRzXG4gKiBjcmVhdGVXb3Jrc3BhY2Uoe1xuICogICBza2lsbEZvbGRlcnM6IHtcbiAqICAgICBcIndvcmtzcGFjZS10ZWFtXCI6IHsgcGF0aDogXCIvV29ya3NwYWNlL1NoYXJlZC90ZWFtLXNraWxsc1wiIH0sXG4gKiAgICAgXCJ3b3Jrc3BhY2UtdGVhbS1hcHBcIjogZmFsc2UsXG4gKiAgICAgcnVuYm9va3M6IHsgcGF0aDogXCIvV29ya3NwYWNlL1NoYXJlZC9ydW5ib29rcy9za2lsbHNcIiwgd3JpdGFibGU6IHRydWUgfSxcbiAqICAgICB2b2x1bWU6IHsgZmlsZXN5c3RlbTogbXlWb2x1bWVGaWxlc3lzdGVtIH0sXG4gKiAgIH0sXG4gKiB9KVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgU2tpbGwgZm9sZGVycyBwbHVzIGEgY3VzdG9tIG1vdW50IHJlc29sdmVyXG4gKiBgYGB0c1xuICogY3JlYXRlV29ya3NwYWNlKHtcbiAqICAgbW91bnRzOiBbXG4gKiAgICAgYXN5bmMgKHsgcmVxdWVzdENvbnRleHQgfSkgPT4gKHtcbiAqICAgICAgIG1vdW50czogeyBcIi9kYXRhXCI6IG15RmlsZXN5c3RlbSB9LFxuICogICAgICAgc2tpbGxQYXRoczogW10sXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2Uob3B0aW9uczogQ3JlYXRlV29ya3NwYWNlT3B0aW9ucyA9IHt9KTogV29ya3NwYWNlIHtcbiAgY29uc3QgeyBpZCwgbmFtZSB9ID0gcmVzb2x2ZVdvcmtzcGFjZUlkZW50aXR5KG9wdGlvbnMpO1xuICBjb25zdCBza2lsbEZvbGRlcnMgPSByZXNvbHZlU2tpbGxGb2xkZXJzKG9wdGlvbnMpO1xuICBjb25zdCBmb2xkZXJOYW1lcyA9IE9iamVjdC5rZXlzKHNraWxsRm9sZGVycyk7XG4gIGNvbnN0IHJlc29sdmVycyA9IGJ1aWxkTW91bnRSZXNvbHZlcnMoXG4gICAgc2tpbGxGb2xkZXJzLFxuICAgIG9wdGlvbnMubW91bnRzLFxuICAgIG9wdGlvbnMud29ya3NwYWNlU2tpbGxSZWZyZXNoVHRsTXMsXG4gICk7XG4gIGNvbnN0IGV4dHJhU2tpbGxQYXRocyA9IG9wdGlvbnMuZXh0cmFTa2lsbFBhdGhzID8/IFtdO1xuICBjb25zdCBza2lsbHMgPVxuICAgIG9wdGlvbnMuc2tpbGxzID8/XG4gICAgKHJlc29sdmVycy5sZW5ndGggPiAwIHx8IGV4dHJhU2tpbGxQYXRocy5sZW5ndGggPiAwXG4gICAgICA/IGJ1aWxkV29ya3NwYWNlU2tpbGxzUmVzb2x2ZXIocmVzb2x2ZXJzLCBleHRyYVNraWxsUGF0aHMpXG4gICAgICA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGNoZWNrU2tpbGxGaWxlTXRpbWUgPSBvcHRpb25zLmNoZWNrU2tpbGxGaWxlTXRpbWUgPz8gZm9sZGVyTmFtZXMubGVuZ3RoID4gMDtcbiAgY29uc3QgYm0yNSA9IG9wdGlvbnMuYm0yNSAhPT0gZmFsc2U7XG4gIGNvbnN0IHNhbmRib3ggPSByZXNvbHZlV29ya3NwYWNlU2FuZGJveChvcHRpb25zLnNhbmRib3gsIGlkLCBuYW1lKTtcbiAgbG9nZ2VyLmRlYnVnKFwid29ya3NwYWNlOmNyZWF0ZVwiLCB7XG4gICAgaWQsXG4gICAgbmFtZSxcbiAgICByZXNvbHZlckNvdW50OiByZXNvbHZlcnMubGVuZ3RoLFxuICAgIHNraWxsRm9sZGVyczogZm9sZGVyTmFtZXMsXG4gICAgY3VzdG9tTW91bnRSZXNvbHZlcnM6IG9wdGlvbnMubW91bnRzPy5sZW5ndGggPz8gMCxcbiAgICBjdXN0b21Ta2lsbHNSZXNvbHZlcjogQm9vbGVhbihvcHRpb25zLnNraWxscyksXG4gICAgY2hlY2tTa2lsbEZpbGVNdGltZSxcbiAgICB3b3Jrc3BhY2VTa2lsbFJlZnJlc2hUdGxNczpcbiAgICAgIG9wdGlvbnMud29ya3NwYWNlU2tpbGxSZWZyZXNoVHRsTXMgPz8gREVGQVVMVF9XT1JLU1BBQ0VfU0tJTExfQ0FDSEVfVFRMX01TLFxuICAgIGJtMjUsXG4gICAgZXh0cmFTa2lsbFBhdGhzOiBleHRyYVNraWxsUGF0aHMubGVuZ3RoLFxuICAgIHNhbmRib3g6IHNhbmRib3ggPyBzYW5kYm94TmFtZShvcHRpb25zLnNhbmRib3gpIDogXCJkaXNhYmxlZFwiLFxuICB9KTtcblxuICByZXR1cm4gbmV3IFdvcmtzcGFjZSh7XG4gICAgaWQsXG4gICAgbmFtZSxcbiAgICBmaWxlc3lzdGVtOiAoY29udGV4dCkgPT4gcmVzb2x2ZVdvcmtzcGFjZUZpbGVzeXN0ZW0ocmVzb2x2ZXJzLCBjb250ZXh0KSxcbiAgICAuLi4oc2tpbGxzXG4gICAgICA/IHtcbiAgICAgICAgICBza2lsbHMsXG4gICAgICAgICAgY2hlY2tTa2lsbEZpbGVNdGltZSxcbiAgICAgICAgfVxuICAgICAgOiB7fSksXG4gICAgLi4uKHNhbmRib3hcbiAgICAgID8ge1xuICAgICAgICAgIHNhbmRib3gsXG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zOiB7IGR5bmFtaWNTYW5kYm94OiBcInJlc29sdmVcIiBhcyBjb25zdCB9LFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgICBibTI1LFxuICB9KTtcbn1cblxuLyoqXG4gKiBNZXJnZSB0aGUgY29uZmlndXJlZCBza2lsbCBmb2xkZXJzIG92ZXIge0BsaW5rIERFRkFVTFRfU0tJTExfRk9MREVSU30uXG4gKlxuICogYGFzc2lzdGFudFNraWxsczogZmFsc2VgIGRyb3BzIHRoZSBkZWZhdWx0cywgYW5kIGEgYGZhbHNlYCB2YWx1ZSByZW1vdmVzIG9uZVxuICogZW50cnkgYnkgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTa2lsbEZvbGRlcnMoXG4gIG9wdGlvbnM6IFBpY2s8Q3JlYXRlV29ya3NwYWNlT3B0aW9ucywgXCJhc3Npc3RhbnRTa2lsbHNcIiB8IFwic2tpbGxGb2xkZXJzXCI+ID0ge30sXG4pOiBSZWNvcmQ8c3RyaW5nLCBTa2lsbEZvbGRlck9wdGlvbnM+IHtcbiAgY29uc3QgbWVyZ2VkOiBSZWNvcmQ8c3RyaW5nLCBTa2lsbEZvbGRlck9wdGlvbnM+ID1cbiAgICBvcHRpb25zLmFzc2lzdGFudFNraWxscyA9PT0gZmFsc2UgPyB7fSA6IHsgLi4uREVGQVVMVF9TS0lMTF9GT0xERVJTIH07XG4gIGZvciAoY29uc3QgW25hbWUsIGZvbGRlcl0gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucy5za2lsbEZvbGRlcnMgPz8ge30pKSB7XG4gICAgaWYgKGZvbGRlciA9PT0gZmFsc2UpIHtcbiAgICAgIGRlbGV0ZSBtZXJnZWRbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lcmdlZFtuYW1lXSA9IGZvbGRlcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwcml2YXRlIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5mdW5jdGlvbiByZXNvbHZlV29ya3NwYWNlU2FuZGJveChcbiAgc2VsZWN0aW9uOiBXb3Jrc3BhY2VTYW5kYm94U2VsZWN0aW9uIHwgdW5kZWZpbmVkLFxuICB3b3Jrc3BhY2VJZDogc3RyaW5nLFxuICB3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsXG4pOiBXb3Jrc3BhY2VTYW5kYm94IHwgV29ya3NwYWNlU2FuZGJveFJlc29sdmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29uZmlndXJlZCA9IHNlbGVjdGlvbiA/PyBcImRhdGFicmlja3NcIjtcbiAgaWYgKGNvbmZpZ3VyZWQgPT09IGZhbHNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoY29uZmlndXJlZCA9PT0gXCJtb250eVwiKSByZXR1cm4gbmV3IE1vbnR5U2FuZGJveCgpO1xuICBpZiAodHlwZW9mIGNvbmZpZ3VyZWQgPT09IFwiZnVuY3Rpb25cIiB8fCBpc1NhbmRib3goY29uZmlndXJlZCkpIHJldHVybiBjb25maWd1cmVkO1xuXG4gIGNvbnN0IG9wdGlvbnM6IERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9ucyA9XG4gICAgY29uZmlndXJlZCA9PT0gXCJkYXRhYnJpY2tzXCIgPyB7IHByb3ZpZGVyOiBcImRhdGFicmlja3NcIiB9IDogY29uZmlndXJlZDtcbiAgcmV0dXJuICh7IHJlcXVlc3RDb250ZXh0IH0pID0+IHtcbiAgICBjb25zdCB1c2VyID0gcmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9VU0VSX0tFWSkgYXMgVXNlciB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5yZXNvdXJjZU5vdEZvdW5kKFxuICAgICAgICBcIkRhdGFicmlja3Mgc2FuZGJveCB1c2VyIGNvbnRleHRcIixcbiAgICAgICAgXCJJbnZva2UgY29tbWFuZCB0b29scyBmcm9tIGFuIGFnZW50IHR1cm4gc2VydmVkIGJ5IHRoZSBNYXN0cmEgcGx1Z2luLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlndXJlZElkID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnNhbmRib3hJZCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gb3B0aW9ucy5zYW5kYm94SWQoeyByZXF1ZXN0Q29udGV4dCB9KVxuICAgICAgICA6IG9wdGlvbnMuc2FuZGJveElkO1xuICAgIGNvbnN0IHNhbmRib3hJZCA9IGNvbmZpZ3VyZWRJZCA/PyBkZWZhdWx0U2FuZGJveElkKHdvcmtzcGFjZUlkLCB1c2VyLmlkKTtcbiAgICBjb25zdCBjbGllbnQgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuY2xpZW50ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyBvcHRpb25zLmNsaWVudCh7IHJlcXVlc3RDb250ZXh0IH0pXG4gICAgICAgIDogKG9wdGlvbnMuY2xpZW50ID8/IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCgpKTtcbiAgICBjb25zdCB7XG4gICAgICBwcm92aWRlcjogX3Byb3ZpZGVyLFxuICAgICAgc2FuZGJveElkOiBfc2FuZGJveElkLFxuICAgICAgY2xpZW50OiBfY2xpZW50LFxuICAgICAgLi4uc2FuZGJveE9wdGlvbnNcbiAgICB9ID0gb3B0aW9ucztcbiAgICByZXR1cm4gbmV3IERhdGFicmlja3NTYW5kYm94KHtcbiAgICAgIC4uLnNhbmRib3hPcHRpb25zLFxuICAgICAgY2xpZW50LFxuICAgICAgc2FuZGJveElkLFxuICAgICAgZGlzcGxheU5hbWU6IG9wdGlvbnMuZGlzcGxheU5hbWUgPz8gYE1hc3RyYSAke3dvcmtzcGFjZU5hbWV9YCxcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFNhbmRib3hJZCh3b3Jrc3BhY2VJZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGRpZ2VzdCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAudXBkYXRlKG9iamVjdC50b1N0YWJsZUtleSh7IHdvcmtzcGFjZUlkLCB1c2VySWQgfSkpXG4gICAgLmRpZ2VzdChcImhleFwiKVxuICAgIC5zbGljZSgwLCAzMik7XG4gIHJldHVybiBgbWFzdHJhLSR7ZGlnZXN0fWA7XG59XG5cbmZ1bmN0aW9uIGlzU2FuZGJveCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFdvcmtzcGFjZVNhbmRib3gge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgXCJpZFwiIGluIHZhbHVlICYmIFwicHJvdmlkZXJcIiBpbiB2YWx1ZSAmJiBcInN0YXR1c1wiIGluIHZhbHVlLFxuICApO1xufVxuXG5mdW5jdGlvbiBzYW5kYm94TmFtZShzZWxlY3Rpb246IFdvcmtzcGFjZVNhbmRib3hTZWxlY3Rpb24gfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoc2VsZWN0aW9uID09PSB1bmRlZmluZWQgfHwgc2VsZWN0aW9uID09PSBcImRhdGFicmlja3NcIikgcmV0dXJuIFwiZGF0YWJyaWNrc1wiO1xuICBpZiAoc2VsZWN0aW9uID09PSBcIm1vbnR5XCIpIHJldHVybiBcIm1vbnR5XCI7XG4gIGlmIChzZWxlY3Rpb24gPT09IGZhbHNlKSByZXR1cm4gXCJkaXNhYmxlZFwiO1xuICBpZiAodHlwZW9mIHNlbGVjdGlvbiA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gXCJyZXNvbHZlclwiO1xuICByZXR1cm4gaXNTYW5kYm94KHNlbGVjdGlvbikgPyBzZWxlY3Rpb24ucHJvdmlkZXIgOiAoc2VsZWN0aW9uLnByb3ZpZGVyID8/IFwiZGF0YWJyaWNrc1wiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgcmVxdWVzdCB0b2tlbiBjYXJyaWVzIGEgc2NvcGUgdGhhdCBhbGxvd3Mgd29ya3NwYWNlXG4gKiBmaWxlIEFQSSBhY2Nlc3MgKGB3b3Jrc3BhY2VgIG9yIGBhbGwtYXBpc2Agb24ge0BsaW5rIE1BU1RSQV9TQ09QRVNfS0VZfSkuXG4gKi9cbmZ1bmN0aW9uIGhhc1dvcmtzcGFjZUZpbGVTY29wZShyZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRva2VuLmluY2x1ZGVzQWNjZXNzVG9rZW5TY29wZShcbiAgICByZXF1ZXN0Q29udGV4dD8uZ2V0KE1BU1RSQV9TQ09QRVNfS0VZKSxcbiAgICBXT1JLU1BBQ0VfRklMRV9TQ09QRVMsXG4gICk7XG59XG5cbi8qKlxuICogTW91bnQgcmVzb2x2ZXIgZm9yIHRoZSBuYW1lZCBza2lsbCBmb2xkZXJzLlxuICpcbiAqIEdhdGVzIG9uIHdvcmtzcGFjZSBmaWxlIHNjb3BlIChvciBkZXZlbG9wbWVudCBtb2RlKSwgdGhlbiBtb3VudHMgZXZlcnlcbiAqIGZvbGRlciB3aG9zZSBsb2NhdGlvbiByZXNvbHZlcyBmb3IgdGhpcyByZXF1ZXN0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlU2tpbGxGb2xkZXJNb3VudHMoXG4gIHNraWxsRm9sZGVyczogUmVjb3JkPHN0cmluZywgU2tpbGxGb2xkZXJPcHRpb25zPixcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuICB3b3Jrc3BhY2VTa2lsbFJlZnJlc2hUdGxNczogbnVtYmVyLFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj4ge1xuICBjb25zdCBtb3VudHM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+ID0ge307XG4gIGNvbnN0IHNraWxsUGF0aHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNhY2hlS2V5czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgcmVxdWVzdENvbnRleHQgPSBjb250ZXh0LnJlcXVlc3RDb250ZXh0O1xuXG4gIGlmICghcmVxdWVzdENvbnRleHQgfHwgIXNob3VsZE1vdW50U2tpbGxGb2xkZXJzKHJlcXVlc3RDb250ZXh0KSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInNraWxsLWZvbGRlcnM6c2tpcHBlZFwiLCB7XG4gICAgICByZWFzb246ICFyZXF1ZXN0Q29udGV4dCA/IFwibm8tcmVxdWVzdC1jb250ZXh0XCIgOiBcIm1pc3Npbmctd29ya3NwYWNlLXNjb3BlXCIsXG4gICAgICBub2RlRW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcbiAgICAgIHNjb3BlczogcmVxdWVzdENvbnRleHQ/LmdldChNQVNUUkFfU0NPUEVTX0tFWSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbW91bnRzLCBza2lsbFBhdGhzIH07XG4gIH1cblxuICBjb25zdCB1c2VyID0gcmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9VU0VSX0tFWSkgYXMgVXNlciB8IHVuZGVmaW5lZDtcbiAgY29uc3QgY2xpZW50ID0gdXNlcj8uZXhlY3V0aW9uQ29udGV4dC5jbGllbnQgYXMgV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkO1xuICBjb25zdCB1c2VyS2V5ID0gdXNlciA/IHJlc29sdmVVc2VyS2V5KHJlcXVlc3RDb250ZXh0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaG9zdCA9IGNsaWVudCA/IChhd2FpdCBjbGllbnQuY29uZmlnLmdldEhvc3QoKSkudG9TdHJpbmcoKSA6IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IFtuYW1lLCBmb2xkZXJdIG9mIE9iamVjdC5lbnRyaWVzKHNraWxsRm9sZGVycykpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVTa2lsbEZvbGRlckZpbGVzeXN0ZW0obmFtZSwgZm9sZGVyLCBjb250ZXh0LCB7XG4gICAgICBjbGllbnQsXG4gICAgICBob3N0LFxuICAgICAgdXNlcktleSxcbiAgICAgIHdvcmtzcGFjZVNraWxsUmVmcmVzaFR0bE1zLFxuICAgIH0pO1xuICAgIGlmICghcmVzb2x2ZWQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1vdW50ID0gZm9sZGVyLm1vdW50ID8/IGAvJHtuYW1lfWA7XG4gICAgbW91bnRzW21vdW50XSA9IHJlc29sdmVkLmZpbGVzeXN0ZW07XG4gICAgaWYgKHJlc29sdmVkLmNhY2hlS2V5KSBjYWNoZUtleXMucHVzaChyZXNvbHZlZC5jYWNoZUtleSk7XG4gICAgaWYgKGZvbGRlci5yZWFkYWJsZSAhPT0gZmFsc2UpIHNraWxsUGF0aHMucHVzaChtb3VudCk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoXCJza2lsbC1mb2xkZXJzOm1vdW50ZWRcIiwge1xuICAgIG1vdW50S2V5czogT2JqZWN0LmtleXMobW91bnRzKSxcbiAgICBza2lsbFBhdGhzLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIG1vdW50cyxcbiAgICBza2lsbFBhdGhzLFxuICAgIC4uLihjYWNoZUtleXMubGVuZ3RoID09PSBPYmplY3Qua2V5cyhtb3VudHMpLmxlbmd0aCAmJiBjYWNoZUtleXMubGVuZ3RoID4gMFxuICAgICAgPyB7IGNhY2hlS2V5OiBvYmplY3QudG9TdGFibGVLZXkoY2FjaGVLZXlzLnNvcnQoKSkgfVxuICAgICAgOiB7fSksXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmUgc2tpbGwgZm9sZGVyIHRvIGEgTWFzdHJhIGZpbGVzeXN0ZW0sIG9yIGB1bmRlZmluZWRgIHRvIHNraXAgaXRcbiAqIGZvciB0aGlzIHJlcXVlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTa2lsbEZvbGRlckZpbGVzeXN0ZW0oXG4gIG5hbWU6IHN0cmluZyxcbiAgZm9sZGVyOiBTa2lsbEZvbGRlck9wdGlvbnMsXG4gIGNvbnRleHQ6IFdvcmtzcGFjZU1vdW50Q29udGV4dCxcbiAgY2FjaGU6IHtcbiAgICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCB8IHVuZGVmaW5lZDtcbiAgICBob3N0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlcktleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHdvcmtzcGFjZVNraWxsUmVmcmVzaFR0bE1zOiBudW1iZXI7XG4gIH0sXG4pOiBQcm9taXNlPHsgY2FjaGVLZXk/OiBzdHJpbmc7IGZpbGVzeXN0ZW06IFdvcmtzcGFjZUZpbGVzeXN0ZW0gfSB8IHVuZGVmaW5lZD4ge1xuICBpZiAoZm9sZGVyLmZpbGVzeXN0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGZpbGVzeXN0ZW0gPSBhd2FpdCByZXNvbHZlU2tpbGxGb2xkZXJWYWx1ZShmb2xkZXIuZmlsZXN5c3RlbSwgY29udGV4dCk7XG4gICAgcmV0dXJuIGZpbGVzeXN0ZW0gPyB7IGZpbGVzeXN0ZW0gfSA6IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBBIHBhdGggbW91bnQgbmVlZHMgdGhlIHJlcXVlc3QncyBPQk8gY2xpZW50IHRvIHJlYWNoIHRoZSB3b3Jrc3BhY2UuXG4gIGlmIChmb2xkZXIucGF0aCA9PT0gdW5kZWZpbmVkIHx8ICFjYWNoZS5jbGllbnQgfHwgIWNhY2hlLmhvc3QgfHwgIWNhY2hlLnVzZXJLZXkpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJza2lsbC1mb2xkZXI6c2tpcHBlZFwiLCB7XG4gICAgICBuYW1lLFxuICAgICAgcmVhc29uOiBmb2xkZXIucGF0aCA9PT0gdW5kZWZpbmVkID8gXCJuby1sb2NhdGlvblwiIDogXCJtaXNzaW5nLW9iby1jbGllbnRcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJvb3QgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKGF3YWl0IHJlc29sdmVTa2lsbEZvbGRlclZhbHVlKGZvbGRlci5wYXRoLCBjb250ZXh0KSk7XG4gIGlmICghcm9vdCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGRhdGFicmlja3NGaWxlc3lzdGVtKGNhY2hlLmNsaWVudCwgcm9vdCwgZm9sZGVyLndyaXRhYmxlICE9PSB0cnVlLCB7XG4gICAgaG9zdDogY2FjaGUuaG9zdCxcbiAgICB0dGxNczogY2FjaGUud29ya3NwYWNlU2tpbGxSZWZyZXNoVHRsTXMsXG4gICAgdXNlcktleTogY2FjaGUudXNlcktleSxcbiAgfSk7XG59XG5cbi8qKiBSZWFkIGEge0BsaW5rIFNraWxsRm9sZGVyVmFsdWV9LCBjYWxsaW5nIGl0IHdoZW4gaXQgaXMgYSBwZXItcmVxdWVzdCByZXNvbHZlci4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTa2lsbEZvbGRlclZhbHVlPFQ+KFxuICB2YWx1ZTogU2tpbGxGb2xkZXJWYWx1ZTxUPixcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKTogVCB8IHVuZGVmaW5lZCB8IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICA/ICh2YWx1ZSBhcyAoY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0KSA9PiBUIHwgdW5kZWZpbmVkIHwgUHJvbWlzZTxUIHwgdW5kZWZpbmVkPikoY29udGV4dClcbiAgICA6IHZhbHVlO1xufVxuXG4vKipcbiAqIEZpbGwgaW4gYGlkYCBhbmQgYG5hbWVgIHdoZW4gZWl0aGVyIGlzIG9taXR0ZWQgb24ge0BsaW5rIENyZWF0ZVdvcmtzcGFjZU9wdGlvbnN9LlxuICogU2x1Z2lmaWVzIGBuYW1lYCBpbnRvIGBpZGA7IHRva2VuaXplcyBgaWRgIGludG8gYSBkaXNwbGF5IGBuYW1lYC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVdvcmtzcGFjZUlkZW50aXR5KG9wdGlvbnM6IENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMpOiB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn0ge1xuICBsZXQgaWQgPSBvcHRpb25zLmlkO1xuICBsZXQgbmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgaWYgKCFpZCkge1xuICAgIGlkID0gbmFtZSA/IHN0cmluZ1V0aWxzLnRvU2x1ZyhuYW1lKSA6IFwid29ya3NwYWNlXCI7XG4gIH1cbiAgaWYgKCFuYW1lKSB7XG4gICAgbmFtZSA9IEFycmF5LmZyb20oc3RyaW5nVXRpbHMudG9rZW5pemUoaWQpKS5qb2luKFwiIFwiKTtcbiAgfVxuICByZXR1cm4geyBpZCwgbmFtZSB9O1xufVxuXG4vKiogQ29sbGVjdCB0aGUgc2tpbGwtZm9sZGVyIHJlc29sdmVyIGFuZCBhbnkgY2FsbGVyLXN1cHBsaWVkIG9uZXMuICovXG5mdW5jdGlvbiBidWlsZE1vdW50UmVzb2x2ZXJzKFxuICBza2lsbEZvbGRlcnM6IFJlY29yZDxzdHJpbmcsIFNraWxsRm9sZGVyT3B0aW9ucz4sXG4gIG1vdW50czogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdIHwgdW5kZWZpbmVkLFxuICB3b3Jrc3BhY2VTa2lsbFJlZnJlc2hUdGxNcyA9IERFRkFVTFRfV09SS1NQQUNFX1NLSUxMX0NBQ0hFX1RUTF9NUyxcbik6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSB7XG4gIGNvbnN0IHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdID0gW107XG4gIGNvbnN0IGZvbGRlckNvdW50ID0gT2JqZWN0LmtleXMoc2tpbGxGb2xkZXJzKS5sZW5ndGg7XG4gIGlmIChmb2xkZXJDb3VudCA+IDApIHtcbiAgICByZXNvbHZlcnMucHVzaCgoY29udGV4dCkgPT5cbiAgICAgIHJlc29sdmVTa2lsbEZvbGRlck1vdW50cyhza2lsbEZvbGRlcnMsIGNvbnRleHQsIHdvcmtzcGFjZVNraWxsUmVmcmVzaFR0bE1zKSxcbiAgICApO1xuICB9XG4gIGlmIChtb3VudHM/Lmxlbmd0aCkge1xuICAgIHJlc29sdmVycy5wdXNoKC4uLm1vdW50cyk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKFwibW91bnRzOnJlc29sdmVyc1wiLCB7XG4gICAgc2tpbGxGb2xkZXJDb3VudDogZm9sZGVyQ291bnQsXG4gICAgY3VzdG9tUmVzb2x2ZXJDb3VudDogbW91bnRzPy5sZW5ndGggPz8gMCxcbiAgICB0b3RhbFJlc29sdmVyQ291bnQ6IHJlc29sdmVycy5sZW5ndGgsXG4gIH0pO1xuICByZXR1cm4gcmVzb2x2ZXJzO1xufVxuXG4vKipcbiAqIEdhdGUgc2tpbGwtZm9sZGVyIG1vdW50cyBvbiB0aGUgcmVxdWVzdCdzIHRva2VuLlxuICpcbiAqIEFsd2F5cyBhbGxvd3MgbW91bnRzIGluIGRldmVsb3BtZW50OyBpbiBvdGhlciBlbnZpcm9ubWVudHMgcmVxdWlyZXNcbiAqIHtAbGluayBoYXNXb3Jrc3BhY2VGaWxlU2NvcGV9LlxuICovXG5mdW5jdGlvbiBzaG91bGRNb3VudFNraWxsRm9sZGVycyhyZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQpOiBib29sZWFuIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gaGFzV29ya3NwYWNlRmlsZVNjb3BlKHJlcXVlc3RDb250ZXh0KTtcbn1cblxuLyoqIFJlYWQgdGhlIHRyaW1tZWQgT0JPIHVzZXIgZW1haWwgc3RhbXBlZCBvbiB7QGxpbmsgTUFTVFJBX1VTRVJfRU1BSUxfS0VZfS4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRFbWFpbChyZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChyZXF1ZXN0Q29udGV4dD8uZ2V0KE1BU1RSQV9VU0VSX0VNQUlMX0tFWSkpID8/IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXcmFwIGEge0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtfSBhcyBhIE1hc3RyYSBmaWxlc3lzdGVtLiBXaGVuIHRoZSByb290IGlzXG4gKiBtaXNzaW5nIChhbmQge0BsaW5rIHJlYWRPbmx5fSBzbyB3ZSB3aWxsIG5vdCBjcmVhdGUgaXQpLCBmYWxsIGJhY2sgdG9cbiAqIHtAbGluayBzY3JhdGNoRmlsZXN5c3RlbX0gc28gc2tpbGwgc2NhbnMgc3RpbGwgaGF2ZSBhIHdyaXRhYmxlIGxvY2FsIG1vdW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBkYXRhYnJpY2tzRmlsZXN5c3RlbShcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gIHJvb3Q6IHN0cmluZyxcbiAgcmVhZE9ubHk6IGJvb2xlYW4gPSB0cnVlLFxuICBjYWNoZTogeyBob3N0OiBzdHJpbmc7IHR0bE1zOiBudW1iZXI7IHVzZXJLZXk6IHN0cmluZyB9LFxuKTogUHJvbWlzZTx7IGNhY2hlS2V5OiBzdHJpbmc7IGZpbGVzeXN0ZW06IFdvcmtzcGFjZUZpbGVzeXN0ZW0gfSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBmcyA9IG5ldyBEYXRhYnJpY2tzRmlsZVN5c3RlbSh7XG4gICAgY2xpZW50OiB3b3Jrc3BhY2VDbGllbnQudG9MZWdhY3lXb3Jrc3BhY2VDbGllbnQoY2xpZW50KSxcbiAgICByb290LFxuICAgIHJlYWRPbmx5LFxuICAgIGNyZWF0ZVJvb3Q6ICFyZWFkT25seSxcbiAgfSk7XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlZFdvcmtzcGFjZVNraWxsTW91bnQoe1xuICAgIGhvc3Q6IGNhY2hlLmhvc3QsXG4gICAgc291cmNlOiBmcyxcbiAgICB0dGxNczogY2FjaGUudHRsTXMsXG4gICAgdXNlcktleTogY2FjaGUudXNlcktleSxcbiAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgY2FjaGVkLmZpbGVzeXN0ZW0uaW5pdCgpO1xuICAgIGlmIChhd2FpdCBjYWNoZWQuZmlsZXN5c3RlbS5leGlzdHMoXCIuXCIpKSByZXR1cm4gY2FjaGVkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJkYXRhYnJpY2tzLW1vdW50OnNjcmF0Y2gtZmFsbGJhY2tcIiwge1xuICAgICAgcm9vdCxcbiAgICAgIHJlYWRPbmx5LFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSdW4gZXZlcnkgbW91bnQgcmVzb2x2ZXIgZm9yIG9uZSByZXF1ZXN0IGFuZCBtZXJnZSBtb3VudHMgcGx1cyBza2lsbCBwYXRocy5cbiAqIExhdGVyIHJlc29sdmVycyBvdmVyd3JpdGUgbW91bnQga2V5cyBmcm9tIGVhcmxpZXIgb25lcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVdvcmtzcGFjZUNvbnRyaWJ1dGlvbihcbiAgcmVzb2x2ZXJzOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10sXG4gIGNvbnRleHQ6IFdvcmtzcGFjZU1vdW50Q29udGV4dCxcbik6IFByb21pc2U8V29ya3NwYWNlTW91bnRDb250cmlidXRpb24+IHtcbiAgY29uc3QgbW91bnRzOiBSZWNvcmQ8c3RyaW5nLCBXb3Jrc3BhY2VGaWxlc3lzdGVtPiA9IHt9O1xuICBjb25zdCBza2lsbFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBjYWNoZUtleXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBjYWNoZWFibGUgPSB0cnVlO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCByZXNvbHZlcl0gb2YgcmVzb2x2ZXJzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbiA9IGF3YWl0IHJlc29sdmVyKGNvbnRleHQpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcIm1vdW50czpyZXNvbHZlclwiLCB7XG4gICAgICBpbmRleCxcbiAgICAgIG1vdW50S2V5czogT2JqZWN0LmtleXMoY29udHJpYnV0aW9uLm1vdW50cyksXG4gICAgICBza2lsbFBhdGhzOiBjb250cmlidXRpb24uc2tpbGxQYXRocyA/PyBbXSxcbiAgICB9KTtcbiAgICBPYmplY3QuYXNzaWduKG1vdW50cywgY29udHJpYnV0aW9uLm1vdW50cyk7XG4gICAgaWYgKE9iamVjdC5rZXlzKGNvbnRyaWJ1dGlvbi5tb3VudHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChjb250cmlidXRpb24uY2FjaGVLZXkpIGNhY2hlS2V5cy5wdXNoKGNvbnRyaWJ1dGlvbi5jYWNoZUtleSk7XG4gICAgICBlbHNlIGNhY2hlYWJsZSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY29udHJpYnV0aW9uLnNraWxsUGF0aHM/Lmxlbmd0aCkge1xuICAgICAgc2tpbGxQYXRocy5wdXNoKC4uLmNvbnRyaWJ1dGlvbi5za2lsbFBhdGhzKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZGVidWcoXCJtb3VudHM6bWVyZ2VkXCIsIHtcbiAgICBtb3VudEtleXM6IE9iamVjdC5rZXlzKG1vdW50cyksXG4gICAgc2tpbGxQYXRocyxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudHMsXG4gICAgc2tpbGxQYXRocyxcbiAgICAuLi4oY2FjaGVhYmxlICYmIGNhY2hlS2V5cy5sZW5ndGggPiAwXG4gICAgICA/IHsgY2FjaGVLZXk6IG9iamVjdC50b1N0YWJsZUtleShjYWNoZUtleXMuc29ydCgpKSB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEeW5hbWljIGZpbGVzeXN0ZW0gcmVzb2x2ZXIgcGFzc2VkIHRvIE1hc3RyYSB7QGxpbmsgV29ya3NwYWNlfS5cbiAqXG4gKiBSZXR1cm5zIGEge0BsaW5rIENvbXBvc2l0ZUZpbGVzeXN0ZW19IHdoZW4gYW55IG1vdW50IHJlc29sdmVkOyBvdGhlcndpc2UgYVxuICogZnJlc2gge0BsaW5rIHNjcmF0Y2hGaWxlc3lzdGVtfSBzbyBNYXN0cmEgYWx3YXlzIGhhcyBhIHdyaXRhYmxlIGxvY2FsIHJvb3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VGaWxlc3lzdGVtKFxuICByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSxcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VGaWxlc3lzdGVtPiB7XG4gIGNvbnN0IHsgY2FjaGVLZXksIG1vdW50cyB9ID0gYXdhaXQgcmVzb2x2ZVdvcmtzcGFjZUNvbnRyaWJ1dGlvbihyZXNvbHZlcnMsIGNvbnRleHQpO1xuICBjb25zdCBtb3VudEtleXMgPSBPYmplY3Qua2V5cyhtb3VudHMpO1xuICBpZiAobW91bnRLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImZpbGVzeXN0ZW06c2NyYXRjaFwiLCB7XG4gICAgICBoYXNSZXF1ZXN0Q29udGV4dDogQm9vbGVhbihjb250ZXh0LnJlcXVlc3RDb250ZXh0KSxcbiAgICB9KTtcbiAgICByZXR1cm4gc2NyYXRjaEZpbGVzeXN0ZW0oKTtcbiAgfVxuICBsb2dnZXIuZGVidWcoXCJmaWxlc3lzdGVtOmNvbXBvc2l0ZVwiLCB7IG1vdW50S2V5cyB9KTtcbiAgaWYgKCFjYWNoZUtleSkgcmV0dXJuIG5ldyBDb21wb3NpdGVGaWxlc3lzdGVtKHsgbW91bnRzIH0pO1xuICBjb25zdCBleGlzdGluZyA9IHNjb3BlZFdvcmtzcGFjZUZpbGVzeXN0ZW1zLmdldChjYWNoZUtleSk7XG4gIGlmIChleGlzdGluZykge1xuICAgIHNjb3BlZFdvcmtzcGFjZUZpbGVzeXN0ZW1zLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgc2NvcGVkV29ya3NwYWNlRmlsZXN5c3RlbXMuc2V0KGNhY2hlS2V5LCBleGlzdGluZyk7XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG4gIGNvbnN0IGZpbGVzeXN0ZW0gPSBuZXcgQ29tcG9zaXRlRmlsZXN5c3RlbSh7IG1vdW50cyB9KTtcbiAgc2NvcGVkV29ya3NwYWNlRmlsZXN5c3RlbXMuc2V0KGNhY2hlS2V5LCBmaWxlc3lzdGVtKTtcbiAgd2hpbGUgKHNjb3BlZFdvcmtzcGFjZUZpbGVzeXN0ZW1zLnNpemUgPiBNQVhfU0NPUEVEX1dPUktTUEFDRV9GSUxFU1lTVEVNUykge1xuICAgIGNvbnN0IG9sZGVzdCA9IHNjb3BlZFdvcmtzcGFjZUZpbGVzeXN0ZW1zLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKG9sZGVzdCA9PT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICBzY29wZWRXb3Jrc3BhY2VGaWxlc3lzdGVtcy5kZWxldGUob2xkZXN0KTtcbiAgfVxuICByZXR1cm4gZmlsZXN5c3RlbTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgZHluYW1pYyB7QGxpbmsgU2tpbGxzUmVzb2x2ZXJ9IHRoYXQgY29sbGVjdHMgYHNraWxsUGF0aHNgIGZyb21cbiAqIGV2ZXJ5IG1vdW50IHJlc29sdmVyIG9uIGVhY2ggcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRXb3Jrc3BhY2VTa2lsbHNSZXNvbHZlcihcbiAgcmVzb2x2ZXJzOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10sXG4gIGV4dHJhU2tpbGxQYXRoczogc3RyaW5nW10gPSBbXSxcbik6IFNraWxsc1Jlc29sdmVyIHtcbiAgcmV0dXJuIGFzeW5jIChjb250ZXh0OiBTa2lsbHNDb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udHJpYnV0aW9uID0gYXdhaXQgcmVzb2x2ZVdvcmtzcGFjZUNvbnRyaWJ1dGlvbihyZXNvbHZlcnMsIGNvbnRleHQpO1xuICAgIGNvbnN0IHNraWxsUGF0aHMgPSBhd2FpdCB1bmlxdWVTa2lsbFBhdGhzKGNvbnRyaWJ1dGlvbik7XG4gICAgY29uc3QgbWVyZ2VkID0gWy4uLnNraWxsUGF0aHMsIC4uLmV4dHJhU2tpbGxQYXRoc107XG4gICAgbG9nZ2VyLmRlYnVnKFwic2tpbGxzOnJlc29sdmVkXCIsIHtcbiAgICAgIGNvbmZpZ3VyZWRTa2lsbFBhdGhzOiBjb250cmlidXRpb24uc2tpbGxQYXRocyxcbiAgICAgIHNraWxsUGF0aHMsXG4gICAgICBleHRyYVNraWxsUGF0aHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfTtcbn1cblxuLyoqIEV4cGFuZCBtb3VudGVkIHJvb3RzIGFuZCBrZWVwIHRoZSBmaXJzdCBjb25jcmV0ZSBza2lsbCBmb3IgZWFjaCBkaXJlY3RvcnkgbmFtZS4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVuaXF1ZVNraWxsUGF0aHMoY29udHJpYnV0aW9uOiBXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjb25zdCB1bnJlc29sdmVkOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJvb3Qgb2YgY29udHJpYnV0aW9uLnNraWxsUGF0aHMgPz8gW10pIHtcbiAgICBjb25zdCBtb3VudCA9IG1vdW50ZWRGaWxlc3lzdGVtKHJvb3QsIGNvbnRyaWJ1dGlvbi5tb3VudHMpO1xuICAgIGlmICghbW91bnQpIHtcbiAgICAgIHVucmVzb2x2ZWQucHVzaChyb290KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgY2FuZGlkYXRlczogc3RyaW5nW107XG4gICAgdHJ5IHtcbiAgICAgIGNhbmRpZGF0ZXMgPSBhd2FpdCBjb25jcmV0ZVNraWxsUGF0aHMocm9vdCwgbW91bnQucGF0aCwgbW91bnQuZmlsZXN5c3RlbSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNraWxsczpyb290LWV4cGFuc2lvbi1mYWlsZWRcIiwge1xuICAgICAgICByb290LFxuICAgICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgICB1bnJlc29sdmVkLnB1c2gocm9vdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB1bnJlc29sdmVkLnB1c2gocm9vdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xuICAgICAgY29uc3QgbmFtZSA9IHBvc2l4UGF0aC5iYXNlbmFtZShjYW5kaWRhdGUpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBzZWxlY3RlZC5nZXQobmFtZSk7XG4gICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwic2tpbGxzOmR1cGxpY2F0ZS1za2lwcGVkXCIsIHsgbmFtZSwgcGF0aDogY2FuZGlkYXRlLCBzZWxlY3RlZDogZXhpc3RpbmcgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZC5zZXQobmFtZSwgY2FuZGlkYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFsuLi5zZWxlY3RlZC52YWx1ZXMoKSwgLi4udW5yZXNvbHZlZF07XG59XG5cbi8qKiBGaW5kIHRoZSBtb3N0LXNwZWNpZmljIG1vdW50ZWQgZmlsZXN5c3RlbSBjb250YWluaW5nIG9uZSBza2lsbCBwYXRoLiAqL1xuZnVuY3Rpb24gbW91bnRlZEZpbGVzeXN0ZW0oXG4gIHNraWxsUGF0aDogc3RyaW5nLFxuICBtb3VudHM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+Pixcbik6IHsgZmlsZXN5c3RlbTogV29ya3NwYWNlRmlsZXN5c3RlbTsgcGF0aDogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMobW91bnRzKVxuICAgIC5maWx0ZXIoKFttb3VudF0pID0+IHNraWxsUGF0aCA9PT0gbW91bnQgfHwgc2tpbGxQYXRoLnN0YXJ0c1dpdGgoYCR7bW91bnR9L2ApKVxuICAgIC5zb3J0KChbbGVmdF0sIFtyaWdodF0pID0+IHJpZ2h0Lmxlbmd0aCAtIGxlZnQubGVuZ3RoKVxuICAgIC5tYXAoKFtwYXRoLCBmaWxlc3lzdGVtXSkgPT4gKHsgZmlsZXN5c3RlbSwgcGF0aCB9KSlbMF07XG59XG5cbi8qKiBSZXR1cm4gY29uY3JldGUgY2hpbGQgc2tpbGwgZGlyZWN0b3JpZXMgZnJvbSBvbmUgbW91bnRlZCBza2lsbCByb290LiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uY3JldGVTa2lsbFBhdGhzKFxuICByb290OiBzdHJpbmcsXG4gIG1vdW50OiBzdHJpbmcsXG4gIGZpbGVzeXN0ZW06IFdvcmtzcGFjZUZpbGVzeXN0ZW0sXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHJlbGF0aXZlUm9vdCA9IHJvb3QgPT09IG1vdW50ID8gXCIuXCIgOiByb290LnNsaWNlKG1vdW50Lmxlbmd0aCArIDEpO1xuICBpZiAoYXdhaXQgZmlsZXN5c3RlbS5leGlzdHMocG9zaXhQYXRoLmpvaW4ocmVsYXRpdmVSb290LCBcIlNLSUxMLm1kXCIpKSkgcmV0dXJuIFtyb290XTtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGZpbGVzeXN0ZW0ucmVhZGRpcihyZWxhdGl2ZVJvb3QpO1xuICBjb25zdCBjYW5kaWRhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBpZiAoZW50cnkudHlwZSAhPT0gXCJkaXJlY3RvcnlcIikgY29udGludWU7XG4gICAgY29uc3QgcmVsYXRpdmUgPSBwb3NpeFBhdGguam9pbihyZWxhdGl2ZVJvb3QsIGVudHJ5Lm5hbWUpO1xuICAgIGlmIChhd2FpdCBmaWxlc3lzdGVtLmV4aXN0cyhwb3NpeFBhdGguam9pbihyZWxhdGl2ZSwgXCJTS0lMTC5tZFwiKSkpIHtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaChwb3NpeFBhdGguam9pbihyb290LCBlbnRyeS5uYW1lKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYW5kaWRhdGVzO1xufVxuIl19
|
|
544
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3Jrc3BhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsU0FBUyxHQU1WLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLGNBQWMsR0FFZixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBMEMsTUFBTSxjQUFjLENBQUM7QUFDekYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9DQUFvQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekYsNkVBQTZFO0FBRTdFLCtEQUErRDtBQUMvRCxNQUFNLHFCQUFxQixHQUFHLENB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QztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1hc3RyYSB3b3Jrc3BhY2UgZmFjdG9yeSBmb3IgRGF0YWJyaWNrcyBBcHBzLlxuICpcbiAqIEJ1aWxkcyBhIHBlci1yZXF1ZXN0IHtAbGluayBXb3Jrc3BhY2V9IHdpdGggRGF0YWJyaWNrcyBTYW5kYm94IGNvbW1hbmRcbiAqIGV4ZWN1dGlvbiBwbHVzIGEge0BsaW5rIENvbXBvc2l0ZUZpbGVzeXN0ZW19IG92ZXIgdGhlIE5BTUVEIHNraWxsIGZvbGRlcnNcbiAqIHJlc29sdmVkIGZvciB0aGF0IHJlcXVlc3QuIEEgc2tpbGwgZm9sZGVyIG1hcHMgYSBuYW1lIHRvIGEgbG9jYXRpb24gcGx1cyBpdHNcbiAqIHJlYWRhYmxlIC8gd3JpdGFibGUgcG9saWN5OiBhIERhdGFicmlja3MgcGF0aCBtb3VudGVkIHRocm91Z2ggdGhlIE9CTyBjbGllbnRcbiAqIG9uIHtAbGluayBNQVNUUkFfVVNFUl9LRVl9LCBvciBhbnkge0BsaW5rIFdvcmtzcGFjZUZpbGVzeXN0ZW19IGEgY29uc3VtaW5nXG4gKiBsaWJyYXJ5IGFscmVhZHkgb3ducy4ge0BsaW5rIERFRkFVTFRfU0tJTExfRk9MREVSU30gc3VwcGxpZXMgdGhlIEFzc2lzdGFudFxuICogdHJlZXMsIGFuZCBgc2tpbGxGb2xkZXJzYCBtZXJnZXMgb3ZlciBpdCAtIHNhbWUgbmFtZSBvdmVycmlkZXMsIGBmYWxzZWBcbiAqIGRpc2FibGVzLCBhIG5ldyBuYW1lIGFkZHMuIE9wdGlvbmFsIG1vdW50IHJlc29sdmVycyBjb250cmlidXRlIGZ1cnRoZXJcbiAqIGZpbGVzeXN0ZW1zIGFuZCBza2lsbCBzY2FuIHJvb3RzIG9uIHRvcC5cbiAqXG4gKiBEYXRhYnJpY2tzIG1vdW50cyB1c2UgYEBkYngtdG9vbHMvZGF0YWJyaWNrc2Age0BsaW5rIERhdGFicmlja3NGaWxlU3lzdGVtfVxuICogd3JhcHBlZCBieSB7QGxpbmsgZmlsZXN5c3RlbXN9OyBtaXNzaW5nIHJvb3RzIGZhbGwgYmFjayB0b1xuICoge0BsaW5rIHNjcmF0Y2hGaWxlc3lzdGVtfS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCBjcmVhdGVXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IERhdGFicmlja3NGaWxlU3lzdGVtLCB3b3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRieC10b29scy9kYXRhYnJpY2tzXCI7XG5pbXBvcnQgeyBMb2NhbEZpbGVTeXN0ZW0gfSBmcm9tIFwiQGRieC10b29scy9mc1wiO1xuaW1wb3J0IHsgZXJyb3JVdGlscywgbG9nLCBvYmplY3QsIHN0cmluZ1V0aWxzLCB0b2tlbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBwb3NpeFBhdGggfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZnNcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3JlcXVlc3QtY29udGV4dFwiO1xuaW1wb3J0IHtcbiAgQ29tcG9zaXRlRmlsZXN5c3RlbSxcbiAgV29ya3NwYWNlLFxuICB0eXBlIFNraWxsc0NvbnRleHQsXG4gIHR5cGUgU2tpbGxzUmVzb2x2ZXIsXG4gIHR5cGUgV29ya3NwYWNlRmlsZXN5c3RlbSxcbiAgdHlwZSBXb3Jrc3BhY2VTYW5kYm94LFxuICB0eXBlIFdvcmtzcGFjZVNhbmRib3hSZXNvbHZlcixcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcblxuaW1wb3J0IHtcbiAgTUFTVFJBX1NDT1BFU19LRVksXG4gIE1BU1RSQV9VU0VSX0VNQUlMX0tFWSxcbiAgTUFTVFJBX1VTRVJfS0VZLFxuICByZXNvbHZlVXNlcktleSxcbiAgdHlwZSBVc2VyLFxufSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IGZpbGVzeXN0ZW1zLCBzY3JhdGNoRmlsZXN5c3RlbSB9IGZyb20gXCIuL2ZpbGVzeXN0ZW1zLnRzXCI7XG5pbXBvcnQgeyBNb250eVNhbmRib3ggfSBmcm9tIFwiLi9tb250eS1zYW5kYm94LnRzXCI7XG5pbXBvcnQgeyBEYXRhYnJpY2tzU2FuZGJveCwgdHlwZSBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnMgfSBmcm9tIFwiLi9zYW5kYm94LnRzXCI7XG5pbXBvcnQgeyBjYWNoZWRXb3Jrc3BhY2VTa2lsbE1vdW50LCBERUZBVUxUX1dPUktTUEFDRV9TS0lMTF9DQUNIRV9UVExfTVMgfSBmcm9tIFwiLi9za2lsbC1jYWNoZS50c1wiO1xuaW1wb3J0IHsgQVNTSVNUQU5UX1NIQVJFRF9TS0lMTFNfUEFUSCwgdXNlckFzc2lzdGFudFNraWxsc1BhdGggfSBmcm9tIFwiLi9za2lsbC1wYXRocy50c1wiO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKiogT0F1dGggc2NvcGVzIHRoYXQgZ2F0ZSBEYXRhYnJpY2tzIHdvcmtzcGFjZSBmaWxlIG1vdW50cy4gKi9cbmNvbnN0IFdPUktTUEFDRV9GSUxFX1NDT1BFUyA9IFtcIndvcmtzcGFjZVwiLCBcIndvcmtzcGFjZS53b3Jrc3BhY2VcIiwgXCJhbGwtYXBpc1wiXSBhcyBjb25zdDtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS93b3Jrc3BhY2VzXCIpO1xuY29uc3QgTUFYX1NDT1BFRF9XT1JLU1BBQ0VfRklMRVNZU1RFTVMgPSAxNjtcbmNvbnN0IHNjb3BlZFdvcmtzcGFjZUZpbGVzeXN0ZW1zID0gbmV3IE1hcDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+KCk7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBQZXItcmVxdWVzdCBjb250ZXh0IGZvciBtb3VudCBhbmQgc2tpbGwtZm9sZGVyIHJlc29sdmVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlTW91bnRDb250ZXh0IHtcbiAgcmVxdWVzdENvbnRleHQ/OiBSZXF1ZXN0Q29udGV4dDtcbn1cblxuLyoqXG4gKiBBIHNraWxsLWZvbGRlciBmaWVsZCBnaXZlbiBlaXRoZXIgZGlyZWN0bHkgb3IgYXMgYSBwZXItcmVxdWVzdCByZXNvbHZlci5cbiAqIEEgcmVzb2x2ZXIgcmV0dXJuaW5nIGB1bmRlZmluZWRgIHNraXBzIHRoZSBmb2xkZXIgZm9yIHRoYXQgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IHR5cGUgU2tpbGxGb2xkZXJWYWx1ZTxUPiA9XG4gIFQgfCAoKGNvbnRleHQ6IFdvcmtzcGFjZU1vdW50Q29udGV4dCkgPT4gVCB8IHVuZGVmaW5lZCB8IFByb21pc2U8VCB8IHVuZGVmaW5lZD4pO1xuXG4vKipcbiAqIE9uZSBuYW1lZCBza2lsbC1mb2xkZXIgbG9jYXRpb24gYW5kIGl0cyByZWFkIC8gd3JpdGUgcG9saWN5LlxuICpcbiAqIEdpdmUge0BsaW5rIHBhdGh9IGZvciBhIERhdGFicmlja3Mgd29ya3NwYWNlIHRyZWUgKG1vdW50ZWQgdGhyb3VnaCB0aGVcbiAqIHJlcXVlc3QncyBPQk8gY2xpZW50KSwgb3Ige0BsaW5rIGZpbGVzeXN0ZW19IGZvciBhIG1vdW50IHRoZSBjb25zdW1lciBidWlsZHNcbiAqIGl0c2VsZi4ge0BsaW5rIGZpbGVzeXN0ZW19IHdpbnMgd2hlbiBib3RoIGFyZSBzZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2tpbGxGb2xkZXJPcHRpb25zIHtcbiAgLyoqIEFic29sdXRlIERhdGFicmlja3Mgd29ya3NwYWNlIHBhdGggZm9yIHRoaXMgZm9sZGVyLiAqL1xuICBwYXRoPzogU2tpbGxGb2xkZXJWYWx1ZTxzdHJpbmc+O1xuICAvKiogUmVhZHktbWFkZSBtb3VudCwgZm9yIGxvY2F0aW9ucyB0aGUgT0JPIGNsaWVudCBjYW5ub3QgcmVhY2guICovXG4gIGZpbGVzeXN0ZW0/OiBTa2lsbEZvbGRlclZhbHVlPFdvcmtzcGFjZUZpbGVzeXN0ZW0+O1xuICAvKipcbiAgICogU2NhbiB0aGlzIG1vdW50IGZvciBgU0tJTEwubWRgIGZpbGVzLiBEZWZhdWx0cyB0byBgdHJ1ZWA7IGBmYWxzZWAgbW91bnRzXG4gICAqIHRoZSBsb2NhdGlvbiBmb3IgZmlsZSB0b29scyB3aXRob3V0IGFkZGluZyBpdCB0byBza2lsbCBkaXNjb3ZlcnkuXG4gICAqL1xuICByZWFkYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBbGxvdyB3cml0ZXMgdG8gYSB7QGxpbmsgcGF0aH0gbW91bnQgKGFuZCBjcmVhdGUgdGhlIHJvb3Qgd2hlbiBtaXNzaW5nKS5cbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC4gQSBzdXBwbGllZCB7QGxpbmsgZmlsZXN5c3RlbX0gY2FycmllcyBpdHMgb3duXG4gICAqIHJlYWQtb25seSBmbGFnIGluc3RlYWQuXG4gICAqL1xuICB3cml0YWJsZT86IGJvb2xlYW47XG4gIC8qKiBNb3VudCBwb2ludCBpbiB0aGUgY29tcG9zaXRlIG5hbWVzcGFjZS4gRGVmYXVsdHMgdG8gYC88bmFtZT5gLiAqL1xuICBtb3VudD86IHN0cmluZztcbn1cblxuLyoqIE1vdW50IG1hcCBwbHVzIG9wdGlvbmFsIE1hc3RyYSBza2lsbCBzY2FuIHJvb3RzIGZvciBvbmUgcmVzb2x2ZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uIHtcbiAgbW91bnRzOiBSZWNvcmQ8c3RyaW5nLCBXb3Jrc3BhY2VGaWxlc3lzdGVtPjtcbiAgLyoqIFBhdGhzIHdpdGhpbiB0aGUgY29tcG9zaXRlIG5hbWVzcGFjZSB3aGVyZSBgU0tJTEwubWRgIGZpbGVzIGFyZSBzY2FubmVkLiAqL1xuICBza2lsbFBhdGhzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpdHkgZm9yIHRoaXMgY29udHJpYnV0aW9uLiBXaGVuIGV2ZXJ5IG5vbi1lbXB0eSBjb250cmlidXRpb25cbiAgICogc3VwcGxpZXMgb25lLCBNYXN0cmEgcmV1c2VzIHRoZSByZXNvbHZlZCBzb3VyY2UgYWNyb3NzIHJlcXVlc3RzLlxuICAgKi9cbiAgY2FjaGVLZXk/OiBzdHJpbmc7XG59XG5cbi8qKiBDb250cmlidXRlcyBmaWxlc3lzdGVtIG1vdW50cyAoYW5kIG9wdGlvbmFsIHNraWxsIHBhdGhzKSBmb3Igb25lIHJlcXVlc3QuICovXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2VNb3VudFJlc29sdmVyID0gKFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4pID0+IFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uIHwgUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj47XG5cbi8qKiBOYW1lcyBjYXJyaWVkIGJ5IHtAbGluayBERUZBVUxUX1NLSUxMX0ZPTERFUlN9LiAqL1xuZXhwb3J0IHR5cGUgRGVmYXVsdFNraWxsRm9sZGVyTmFtZSA9IFwid29ya3NwYWNlLXRlYW1cIiB8IFwid29ya3NwYWNlLXRlYW0tYXBwXCI7XG5cbi8qKlxuICogU2FuZGJveCBzZWxlY3Rpb24gZm9yIHtAbGluayBjcmVhdGVXb3Jrc3BhY2V9LiBEYXRhYnJpY2tzIGlzIHRoZSBkZWZhdWx0O1xuICogYGZhbHNlYCBkaXNhYmxlcyBjb21tYW5kIGV4ZWN1dGlvbiwgYW5kIGEgTWFzdHJhIHByb3ZpZGVyIG9yIHJlc29sdmVyIGlzIGFuXG4gKiBleHBsaWNpdCByZXBsYWNlbWVudC5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbiA9XG4gIHwgZmFsc2VcbiAgfCBcImRhdGFicmlja3NcIlxuICB8IFwibW9udHlcIlxuICB8IERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9uc1xuICB8IFdvcmtzcGFjZVNhbmRib3hcbiAgfCBXb3Jrc3BhY2VTYW5kYm94UmVzb2x2ZXI7XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgY3JlYXRlV29ya3NwYWNlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlV29ya3NwYWNlT3B0aW9ucyB7XG4gIC8qKiBXb3Jrc3BhY2UgaWQ7IGRlcml2ZWQgZnJvbSBgbmFtZWAgb3IgYFwid29ya3NwYWNlXCJgIHdoZW4gb21pdHRlZC4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IG5hbWU7IGRlcml2ZWQgZnJvbSBgaWRgIHdoZW4gb21pdHRlZC4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFN0YXJ0IGZyb20ge0BsaW5rIERFRkFVTFRfU0tJTExfRk9MREVSU30uIERlZmF1bHRzIHRvIGB0cnVlYDsgYGZhbHNlYFxuICAgKiBzdGFydHMgZnJvbSBhbiBlbXB0eSBtYXAsIGxlYXZpbmcgb25seSB0aGUge0BsaW5rIHNraWxsRm9sZGVyc30gZ2l2ZW4gaGVyZS5cbiAgICovXG4gIGFzc2lzdGFudFNraWxscz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBOYW1lZCBza2lsbCBmb2xkZXJzIG1lcmdlZCBvdmVyIHtAbGluayBERUZBVUxUX1NLSUxMX0ZPTERFUlN9OiBhIG1hdGNoaW5nXG4gICAqIG5hbWUgb3ZlcnJpZGVzIHRoYXQgZGVmYXVsdCwgYGZhbHNlYCBkaXNhYmxlcyBpdCwgYW5kIGFueSBvdGhlciBuYW1lIGFkZHNcbiAgICogYSBmb2xkZXIuXG4gICAqL1xuICBza2lsbEZvbGRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBTa2lsbEZvbGRlck9wdGlvbnMgfCBmYWxzZT47XG4gIC8qKiBFeHRyYSBwZXItcmVxdWVzdCBtb3VudCByZXNvbHZlcnMgKHJ1biBhZnRlciB0aGUgc2tpbGwtZm9sZGVyIG1vdW50cykuICovXG4gIG1vdW50cz86IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXTtcbiAgLyoqIFJlcGxhY2UgdGhlIGF1dG8tYnVpbHQgZHluYW1pYyBza2lsbHMgcmVzb2x2ZXIuICovXG4gIHNraWxscz86IFNraWxsc1Jlc29sdmVyO1xuICAvKiogRm9yd2FyZGVkIHRvIE1hc3RyYSB3aGVuIHNraWxsIGRpc2NvdmVyeSBpcyBlbmFibGVkLiAqL1xuICBjaGVja1NraWxsRmlsZU10aW1lPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFwcEtpdCBjYWNoZSBUVEwgZm9yIERhdGFicmlja3Mgc2tpbGwgbWV0YWRhdGEgYW5kIGNvbnRlbnQuXG4gICAqIERlZmF1bHRzIHRvIGZpdmUgbWludXRlcy5cbiAgICovXG4gIHdvcmtzcGFjZVNraWxsUmVmcmVzaFR0bE1zPzogbnVtYmVyO1xuICAvKiogRW5hYmxlIEJNMjUga2V5d29yZCBzZWFyY2ggb3ZlciBpbmRleGVkIHdvcmtzcGFjZSBjb250ZW50LiAqL1xuICBibTI1PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbW1hbmQgc2FuZGJveC4gRGVmYXVsdHMgdG8gRGF0YWJyaWNrcyBTYW5kYm94LiBQYXNzIGBmYWxzZWAgdG8gZGlzYWJsZVxuICAgKiBjb21tYW5kIGV4ZWN1dGlvbiwgb3IgYW4gZXhwbGljaXQgTWFzdHJhIHNhbmRib3gvcHJvdmlkZXIgcmVzb2x2ZXIgdG9cbiAgICogcmVwbGFjZSBEYXRhYnJpY2tzIGZvciB0aGlzIHdvcmtzcGFjZS5cbiAgICovXG4gIHNhbmRib3g/OiBXb3Jrc3BhY2VTYW5kYm94U2VsZWN0aW9uO1xuICAvKipcbiAgICogRXh0cmEgTE9DQUwgc2tpbGwgcm9vdHMgbW91bnRlZCByZWFkLW9ubHkgZm9yIGV2ZXJ5IHJlcXVlc3QncyBza2lsbCBkaXNjb3ZlcnkuXG4gICAqIFVzZWQgYnkgdGhlIHBsdWdpbiB0byBzdXJmYWNlIHJlbW90ZSBza2lsbHMgcHJvdmlzaW9uZWQgdG8gYSBsb2NhbCB0ZW1wXG4gICAqIGRpciBhdCBzdGFydHVwIChzZWUgYHJlbW90ZS1za2lsbHMudHNgKS4gRGF0YWJyaWNrcy1ob3N0ZWQgcmVtb3RlIHNraWxsc1xuICAgKiBuZWVkIG5vIGVudHJ5IGhlcmUgLSB0aGV5IGxhbmQgaW4gdGhlIEFzc2lzdGFudCB0cmVlIHRoZSBidWlsdC1pbiBtb3VudFxuICAgKiBhbHJlYWR5IHNjYW5zLlxuICAgKi9cbiAgZXh0cmFTa2lsbFBhdGhzPzogc3RyaW5nW107XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGVmYXVsdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFRoZSBza2lsbCBmb2xkZXJzIGV2ZXJ5IHdvcmtzcGFjZSBzdGFydHMgd2l0aC5cbiAqXG4gKiAtIGB3b3Jrc3BhY2UtdGVhbWAgLSB0aGUgc2hhcmVkIHdvcmtzcGFjZSBBc3Npc3RhbnQgdHJlZSwgcmVhZC1vbmx5IGJlY2F1c2VcbiAqICAgd3JpdGluZyBpdCBpcyBhIHdvcmtzcGFjZS1hZG1pbiBhY3Rpb24uXG4gKiAtIGB3b3Jrc3BhY2UtdGVhbS1hcHBgIC0gdGhlIHJlcXVlc3RpbmcgdXNlcidzIG93biBBc3Npc3RhbnQgdHJlZSwgd3JpdGFibGVcbiAqICAgc28gdGhlIGFwcCBjYW4gc2F2ZSBza2lsbHMgYmFjayB0byBpdC4gU2tpcHBlZCB3aGVuIHRoZSByZXF1ZXN0IGNhcnJpZXMgbm9cbiAqICAgdXNlciBlbWFpbC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0tJTExfRk9MREVSUzogUmVhZG9ubHk8UmVjb3JkPERlZmF1bHRTa2lsbEZvbGRlck5hbWUsIFNraWxsRm9sZGVyT3B0aW9ucz4+ID0ge1xuICBcIndvcmtzcGFjZS10ZWFtXCI6IHtcbiAgICBwYXRoOiBBU1NJU1RBTlRfU0hBUkVEX1NLSUxMU19QQVRILFxuICAgIHJlYWRhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbiAgXCJ3b3Jrc3BhY2UtdGVhbS1hcHBcIjoge1xuICAgIHBhdGg6ICh7IHJlcXVlc3RDb250ZXh0IH0pID0+IHtcbiAgICAgIGNvbnN0IGVtYWlsID0gcmVzb2x2ZVNjb3BlZEVtYWlsKHJlcXVlc3RDb250ZXh0KTtcbiAgICAgIHJldHVybiBlbWFpbCA/IHVzZXJBc3Npc3RhbnRTa2lsbHNQYXRoKGVtYWlsKSA6IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHJlYWRhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICB9LFxufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBNYXN0cmEge0BsaW5rIFdvcmtzcGFjZX0gd2l0aCBwZXItcmVxdWVzdCBEYXRhYnJpY2tzIG1vdW50cy5cbiAqXG4gKiBAZXhhbXBsZSBEZWZhdWx0IHNraWxsIGZvbGRlcnMgb25seVxuICogYGBgdHNcbiAqIGNyZWF0ZVdvcmtzcGFjZSgpXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBPdmVycmlkZSBhIGRlZmF1bHQsIGRyb3AgYW5vdGhlciwgYW5kIGFkZCBhIGxvY2F0aW9uIG9mIHlvdXIgb3duXG4gKiBgYGB0c1xuICogY3JlYXRlV29ya3NwYWNlKHtcbiAqICAgc2tpbGxGb2xkZXJzOiB7XG4gKiAgICAgXCJ3b3Jrc3BhY2UtdGVhbVwiOiB7IHBhdGg6IFwiL1dvcmtzcGFjZS9TaGFyZWQvdGVhbS1za2lsbHNcIiB9LFxuICogICAgIFwid29ya3NwYWNlLXRlYW0tYXBwXCI6IGZhbHNlLFxuICogICAgIHJ1bmJvb2tzOiB7IHBhdGg6IFwiL1dvcmtzcGFjZS9TaGFyZWQvcnVuYm9va3Mvc2tpbGxzXCIsIHdyaXRhYmxlOiB0cnVlIH0sXG4gKiAgICAgdm9sdW1lOiB7IGZpbGVzeXN0ZW06IG15Vm9sdW1lRmlsZXN5c3RlbSB9LFxuICogICB9LFxuICogfSlcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFNraWxsIGZvbGRlcnMgcGx1cyBhIGN1c3RvbSBtb3VudCByZXNvbHZlclxuICogYGBgdHNcbiAqIGNyZWF0ZVdvcmtzcGFjZSh7XG4gKiAgIG1vdW50czogW1xuICogICAgIGFzeW5jICh7IHJlcXVlc3RDb250ZXh0IH0pID0+ICh7XG4gKiAgICAgICBtb3VudHM6IHsgXCIvZGF0YVwiOiBteUZpbGVzeXN0ZW0gfSxcbiAqICAgICAgIHNraWxsUGF0aHM6IFtdLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlKG9wdGlvbnM6IENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMgPSB7fSk6IFdvcmtzcGFjZSB7XG4gIGNvbnN0IHsgaWQsIG5hbWUgfSA9IHJlc29sdmVXb3Jrc3BhY2VJZGVudGl0eShvcHRpb25zKTtcbiAgY29uc3Qgc2tpbGxGb2xkZXJzID0gcmVzb2x2ZVNraWxsRm9sZGVycyhvcHRpb25zKTtcbiAgY29uc3QgZm9sZGVyTmFtZXMgPSBPYmplY3Qua2V5cyhza2lsbEZvbGRlcnMpO1xuICBjb25zdCBleHRyYVNraWxsUGF0aHMgPSBvcHRpb25zLmV4dHJhU2tpbGxQYXRocyA/PyBbXTtcbiAgY29uc3QgcmVzb2x2ZXJzID0gYnVpbGRNb3VudFJlc29sdmVycyhcbiAgICBza2lsbEZvbGRlcnMsXG4gICAgWy4uLihvcHRpb25zLm1vdW50cyA/PyBbXSksIC4uLmxvY2FsU2tpbGxNb3VudFJlc29sdmVycyhleHRyYVNraWxsUGF0aHMpXSxcbiAgICBvcHRpb25zLndvcmtzcGFjZVNraWxsUmVmcmVzaFR0bE1zLFxuICApO1xuICBjb25zdCBza2lsbHMgPVxuICAgIG9wdGlvbnMuc2tpbGxzID8/XG4gICAgKHJlc29sdmVycy5sZW5ndGggPiAwID8gYnVpbGRXb3Jrc3BhY2VTa2lsbHNSZXNvbHZlcihyZXNvbHZlcnMpIDogdW5kZWZpbmVkKTtcbiAgY29uc3QgY2hlY2tTa2lsbEZpbGVNdGltZSA9IG9wdGlvbnMuY2hlY2tTa2lsbEZpbGVNdGltZSA/PyBmb2xkZXJOYW1lcy5sZW5ndGggPiAwO1xuICBjb25zdCBibTI1ID0gb3B0aW9ucy5ibTI1ICE9PSBmYWxzZTtcbiAgY29uc3Qgc2FuZGJveCA9IHJlc29sdmVXb3Jrc3BhY2VTYW5kYm94KG9wdGlvbnMuc2FuZGJveCwgaWQsIG5hbWUpO1xuICBsb2dnZXIuZGVidWcoXCJ3b3Jrc3BhY2U6Y3JlYXRlXCIsIHtcbiAgICBpZCxcbiAgICBuYW1lLFxuICAgIHJlc29sdmVyQ291bnQ6IHJlc29sdmVycy5sZW5ndGgsXG4gICAgc2tpbGxGb2xkZXJzOiBmb2xkZXJOYW1lcyxcbiAgICBjdXN0b21Nb3VudFJlc29sdmVyczogb3B0aW9ucy5tb3VudHM/Lmxlbmd0aCA/PyAwLFxuICAgIGN1c3RvbVNraWxsc1Jlc29sdmVyOiBCb29sZWFuKG9wdGlvbnMuc2tpbGxzKSxcbiAgICBjaGVja1NraWxsRmlsZU10aW1lLFxuICAgIHdvcmtzcGFjZVNraWxsUmVmcmVzaFR0bE1zOlxuICAgICAgb3B0aW9ucy53b3Jrc3BhY2VTa2lsbFJlZnJlc2hUdGxNcyA/PyBERUZBVUxUX1dPUktTUEFDRV9TS0lMTF9DQUNIRV9UVExfTVMsXG4gICAgYm0yNSxcbiAgICBleHRyYVNraWxsUGF0aHM6IGV4dHJhU2tpbGxQYXRocy5sZW5ndGgsXG4gICAgc2FuZGJveDogc2FuZGJveCA/IHNhbmRib3hOYW1lKG9wdGlvbnMuc2FuZGJveCkgOiBcImRpc2FibGVkXCIsXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgV29ya3NwYWNlKHtcbiAgICBpZCxcbiAgICBuYW1lLFxuICAgIGZpbGVzeXN0ZW06IChjb250ZXh0KSA9PiByZXNvbHZlV29ya3NwYWNlRmlsZXN5c3RlbShyZXNvbHZlcnMsIGNvbnRleHQpLFxuICAgIC4uLihza2lsbHNcbiAgICAgID8ge1xuICAgICAgICAgIHNraWxscyxcbiAgICAgICAgICBjaGVja1NraWxsRmlsZU10aW1lLFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4oc2FuZGJveFxuICAgICAgPyB7XG4gICAgICAgICAgc2FuZGJveCxcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6IHsgZHluYW1pY1NhbmRib3g6IFwicmVzb2x2ZVwiIGFzIGNvbnN0IH0sXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICAgIGJtMjUsXG4gIH0pO1xufVxuXG4vKipcbiAqIE1lcmdlIHRoZSBjb25maWd1cmVkIHNraWxsIGZvbGRlcnMgb3ZlciB7QGxpbmsgREVGQVVMVF9TS0lMTF9GT0xERVJTfS5cbiAqXG4gKiBgYXNzaXN0YW50U2tpbGxzOiBmYWxzZWAgZHJvcHMgdGhlIGRlZmF1bHRzLCBhbmQgYSBgZmFsc2VgIHZhbHVlIHJlbW92ZXMgb25lXG4gKiBlbnRyeSBieSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNraWxsRm9sZGVycyhcbiAgb3B0aW9uczogUGljazxDcmVhdGVXb3Jrc3BhY2VPcHRpb25zLCBcImFzc2lzdGFudFNraWxsc1wiIHwgXCJza2lsbEZvbGRlcnNcIj4gPSB7fSxcbik6IFJlY29yZDxzdHJpbmcsIFNraWxsRm9sZGVyT3B0aW9ucz4ge1xuICBjb25zdCBtZXJnZWQ6IFJlY29yZDxzdHJpbmcsIFNraWxsRm9sZGVyT3B0aW9ucz4gPVxuICAgIG9wdGlvbnMuYXNzaXN0YW50U2tpbGxzID09PSBmYWxzZSA/IHt9IDogeyAuLi5ERUZBVUxUX1NLSUxMX0ZPTERFUlMgfTtcbiAgZm9yIChjb25zdCBbbmFtZSwgZm9sZGVyXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zLnNraWxsRm9sZGVycyA/PyB7fSkpIHtcbiAgICBpZiAoZm9sZGVyID09PSBmYWxzZSkge1xuICAgICAgZGVsZXRlIG1lcmdlZFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VkW25hbWVdID0gZm9sZGVyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByaXZhdGUgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VTYW5kYm94KFxuICBzZWxlY3Rpb246IFdvcmtzcGFjZVNhbmRib3hTZWxlY3Rpb24gfCB1bmRlZmluZWQsXG4gIHdvcmtzcGFjZUlkOiBzdHJpbmcsXG4gIHdvcmtzcGFjZU5hbWU6IHN0cmluZyxcbik6IFdvcmtzcGFjZVNhbmRib3ggfCBXb3Jrc3BhY2VTYW5kYm94UmVzb2x2ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb25maWd1cmVkID0gc2VsZWN0aW9uID8/IFwiZGF0YWJyaWNrc1wiO1xuICBpZiAoY29uZmlndXJlZCA9PT0gZmFsc2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChjb25maWd1cmVkID09PSBcIm1vbnR5XCIpIHJldHVybiBuZXcgTW9udHlTYW5kYm94KCk7XG4gIGlmICh0eXBlb2YgY29uZmlndXJlZCA9PT0gXCJmdW5jdGlvblwiIHx8IGlzU2FuZGJveChjb25maWd1cmVkKSkgcmV0dXJuIGNvbmZpZ3VyZWQ7XG5cbiAgY29uc3Qgb3B0aW9uczogRGF0YWJyaWNrc1dvcmtzcGFjZVNhbmRib3hPcHRpb25zID1cbiAgICBjb25maWd1cmVkID09PSBcImRhdGFicmlja3NcIiA/IHsgcHJvdmlkZXI6IFwiZGF0YWJyaWNrc1wiIH0gOiBjb25maWd1cmVkO1xuICByZXR1cm4gKHsgcmVxdWVzdENvbnRleHQgfSkgPT4ge1xuICAgIGNvbnN0IHVzZXIgPSByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1VTRVJfS0VZKSBhcyBVc2VyIHwgdW5kZWZpbmVkO1xuICAgIGlmICghdXNlcikge1xuICAgICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLnJlc291cmNlTm90Rm91bmQoXG4gICAgICAgIFwiRGF0YWJyaWNrcyBzYW5kYm94IHVzZXIgY29udGV4dFwiLFxuICAgICAgICBcIkludm9rZSBjb21tYW5kIHRvb2xzIGZyb20gYW4gYWdlbnQgdHVybiBzZXJ2ZWQgYnkgdGhlIE1hc3RyYSBwbHVnaW4uXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBjb25maWd1cmVkSWQgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuc2FuZGJveElkID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyBvcHRpb25zLnNhbmRib3hJZCh7IHJlcXVlc3RDb250ZXh0IH0pXG4gICAgICAgIDogb3B0aW9ucy5zYW5kYm94SWQ7XG4gICAgY29uc3Qgc2FuZGJveElkID0gY29uZmlndXJlZElkID8/IGRlZmF1bHRTYW5kYm94SWQod29ya3NwYWNlSWQsIHVzZXIuaWQpO1xuICAgIGNvbnN0IGNsaWVudCA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5jbGllbnQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IG9wdGlvbnMuY2xpZW50KHsgcmVxdWVzdENvbnRleHQgfSlcbiAgICAgICAgOiAob3B0aW9ucy5jbGllbnQgPz8gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCkpO1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3ZpZGVyOiBfcHJvdmlkZXIsXG4gICAgICBzYW5kYm94SWQ6IF9zYW5kYm94SWQsXG4gICAgICBjbGllbnQ6IF9jbGllbnQsXG4gICAgICAuLi5zYW5kYm94T3B0aW9uc1xuICAgIH0gPSBvcHRpb25zO1xuICAgIHJldHVybiBuZXcgRGF0YWJyaWNrc1NhbmRib3goe1xuICAgICAgLi4uc2FuZGJveE9wdGlvbnMsXG4gICAgICBjbGllbnQsXG4gICAgICBzYW5kYm94SWQsXG4gICAgICBkaXNwbGF5TmFtZTogb3B0aW9ucy5kaXNwbGF5TmFtZSA/PyBgTWFzdHJhICR7d29ya3NwYWNlTmFtZX1gLFxuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0U2FuZGJveElkKHdvcmtzcGFjZUlkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZGlnZXN0ID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKVxuICAgIC51cGRhdGUob2JqZWN0LnRvU3RhYmxlS2V5KHsgd29ya3NwYWNlSWQsIHVzZXJJZCB9KSlcbiAgICAuZGlnZXN0KFwiaGV4XCIpXG4gICAgLnNsaWNlKDAsIDMyKTtcbiAgcmV0dXJuIGBtYXN0cmEtJHtkaWdlc3R9YDtcbn1cblxuZnVuY3Rpb24gaXNTYW5kYm94KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgV29ya3NwYWNlU2FuZGJveCB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcImlkXCIgaW4gdmFsdWUgJiYgXCJwcm92aWRlclwiIGluIHZhbHVlICYmIFwic3RhdHVzXCIgaW4gdmFsdWUsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNhbmRib3hOYW1lKHNlbGVjdGlvbjogV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGlmIChzZWxlY3Rpb24gPT09IHVuZGVmaW5lZCB8fCBzZWxlY3Rpb24gPT09IFwiZGF0YWJyaWNrc1wiKSByZXR1cm4gXCJkYXRhYnJpY2tzXCI7XG4gIGlmIChzZWxlY3Rpb24gPT09IFwibW9udHlcIikgcmV0dXJuIFwibW9udHlcIjtcbiAgaWYgKHNlbGVjdGlvbiA9PT0gZmFsc2UpIHJldHVybiBcImRpc2FibGVkXCI7XG4gIGlmICh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBcInJlc29sdmVyXCI7XG4gIHJldHVybiBpc1NhbmRib3goc2VsZWN0aW9uKSA/IHNlbGVjdGlvbi5wcm92aWRlciA6IChzZWxlY3Rpb24ucHJvdmlkZXIgPz8gXCJkYXRhYnJpY2tzXCIpO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIHRoZSByZXF1ZXN0IHRva2VuIGNhcnJpZXMgYSBzY29wZSB0aGF0IGFsbG93cyB3b3Jrc3BhY2VcbiAqIGZpbGUgQVBJIGFjY2VzcyAoYHdvcmtzcGFjZWAgb3IgYGFsbC1hcGlzYCBvbiB7QGxpbmsgTUFTVFJBX1NDT1BFU19LRVl9KS5cbiAqL1xuZnVuY3Rpb24gaGFzV29ya3NwYWNlRmlsZVNjb3BlKHJlcXVlc3RDb250ZXh0OiBSZXF1ZXN0Q29udGV4dCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdG9rZW4uaW5jbHVkZXNBY2Nlc3NUb2tlblNjb3BlKFxuICAgIHJlcXVlc3RDb250ZXh0Py5nZXQoTUFTVFJBX1NDT1BFU19LRVkpLFxuICAgIFdPUktTUEFDRV9GSUxFX1NDT1BFUyxcbiAgKTtcbn1cblxuLyoqXG4gKiBNb3VudCByZXNvbHZlciBmb3IgdGhlIG5hbWVkIHNraWxsIGZvbGRlcnMuXG4gKlxuICogR2F0ZXMgb24gd29ya3NwYWNlIGZpbGUgc2NvcGUgKG9yIGRldmVsb3BtZW50IG1vZGUpLCB0aGVuIG1vdW50cyBldmVyeVxuICogZm9sZGVyIHdob3NlIGxvY2F0aW9uIHJlc29sdmVzIGZvciB0aGlzIHJlcXVlc3QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTa2lsbEZvbGRlck1vdW50cyhcbiAgc2tpbGxGb2xkZXJzOiBSZWNvcmQ8c3RyaW5nLCBTa2lsbEZvbGRlck9wdGlvbnM+LFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4gIHdvcmtzcGFjZVNraWxsUmVmcmVzaFR0bE1zOiBudW1iZXIsXG4pOiBQcm9taXNlPFdvcmtzcGFjZU1vdW50Q29udHJpYnV0aW9uPiB7XG4gIGNvbnN0IG1vdW50czogUmVjb3JkPHN0cmluZywgV29ya3NwYWNlRmlsZXN5c3RlbT4gPSB7fTtcbiAgY29uc3Qgc2tpbGxQYXRoczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgY2FjaGVLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCByZXF1ZXN0Q29udGV4dCA9IGNvbnRleHQucmVxdWVzdENvbnRleHQ7XG5cbiAgaWYgKCFyZXF1ZXN0Q29udGV4dCB8fCAhc2hvdWxkTW91bnRTa2lsbEZvbGRlcnMocmVxdWVzdENvbnRleHQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2tpbGwtZm9sZGVyczpza2lwcGVkXCIsIHtcbiAgICAgIHJlYXNvbjogIXJlcXVlc3RDb250ZXh0ID8gXCJuby1yZXF1ZXN0LWNvbnRleHRcIiA6IFwibWlzc2luZy13b3Jrc3BhY2Utc2NvcGVcIixcbiAgICAgIG5vZGVFbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuICAgICAgc2NvcGVzOiByZXF1ZXN0Q29udGV4dD8uZ2V0KE1BU1RSQV9TQ09QRVNfS0VZKSxcbiAgICB9KTtcbiAgICByZXR1cm4geyBtb3VudHMsIHNraWxsUGF0aHMgfTtcbiAgfVxuXG4gIGNvbnN0IHVzZXIgPSByZXF1ZXN0Q29udGV4dC5nZXQoTUFTVFJBX1VTRVJfS0VZKSBhcyBVc2VyIHwgdW5kZWZpbmVkO1xuICBjb25zdCBjbGllbnQgPSB1c2VyPy5leGVjdXRpb25Db250ZXh0LmNsaWVudCBhcyBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHVzZXJLZXkgPSB1c2VyID8gcmVzb2x2ZVVzZXJLZXkocmVxdWVzdENvbnRleHQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBob3N0ID0gY2xpZW50ID8gKGF3YWl0IGNsaWVudC5jb25maWcuZ2V0SG9zdCgpKS50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgW25hbWUsIGZvbGRlcl0gb2YgT2JqZWN0LmVudHJpZXMoc2tpbGxGb2xkZXJzKSkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZVNraWxsRm9sZGVyRmlsZXN5c3RlbShuYW1lLCBmb2xkZXIsIGNvbnRleHQsIHtcbiAgICAgIGNsaWVudCxcbiAgICAgIGhvc3QsXG4gICAgICB1c2VyS2V5LFxuICAgICAgd29ya3NwYWNlU2tpbGxSZWZyZXNoVHRsTXMsXG4gICAgfSk7XG4gICAgaWYgKCFyZXNvbHZlZCkgY29udGludWU7XG4gICAgY29uc3QgbW91bnQgPSBmb2xkZXIubW91bnQgPz8gYC8ke25hbWV9YDtcbiAgICBtb3VudHNbbW91bnRdID0gcmVzb2x2ZWQuZmlsZXN5c3RlbTtcbiAgICBpZiAocmVzb2x2ZWQuY2FjaGVLZXkpIGNhY2hlS2V5cy5wdXNoKHJlc29sdmVkLmNhY2hlS2V5KTtcbiAgICBpZiAoZm9sZGVyLnJlYWRhYmxlICE9PSBmYWxzZSkgc2tpbGxQYXRocy5wdXNoKG1vdW50KTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcInNraWxsLWZvbGRlcnM6bW91bnRlZFwiLCB7XG4gICAgbW91bnRLZXlzOiBPYmplY3Qua2V5cyhtb3VudHMpLFxuICAgIHNraWxsUGF0aHMsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgbW91bnRzLFxuICAgIHNraWxsUGF0aHMsXG4gICAgLi4uKGNhY2hlS2V5cy5sZW5ndGggPT09IE9iamVjdC5rZXlzKG1vdW50cykubGVuZ3RoICYmIGNhY2hlS2V5cy5sZW5ndGggPiAwXG4gICAgICA/IHsgY2FjaGVLZXk6IG9iamVjdC50b1N0YWJsZUtleShjYWNoZUtleXMuc29ydCgpKSB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBza2lsbCBmb2xkZXIgdG8gYSBNYXN0cmEgZmlsZXN5c3RlbSwgb3IgYHVuZGVmaW5lZGAgdG8gc2tpcCBpdFxuICogZm9yIHRoaXMgcmVxdWVzdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNraWxsRm9sZGVyRmlsZXN5c3RlbShcbiAgbmFtZTogc3RyaW5nLFxuICBmb2xkZXI6IFNraWxsRm9sZGVyT3B0aW9ucyxcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuICBjYWNoZToge1xuICAgIGNsaWVudDogV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkO1xuICAgIGhvc3Q6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VyS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgd29ya3NwYWNlU2tpbGxSZWZyZXNoVHRsTXM6IG51bWJlcjtcbiAgfSxcbik6IFByb21pc2U8eyBjYWNoZUtleT86IHN0cmluZzsgZmlsZXN5c3RlbTogV29ya3NwYWNlRmlsZXN5c3RlbSB9IHwgdW5kZWZpbmVkPiB7XG4gIGlmIChmb2xkZXIuZmlsZXN5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZmlsZXN5c3RlbSA9IGF3YWl0IHJlc29sdmVTa2lsbEZvbGRlclZhbHVlKGZvbGRlci5maWxlc3lzdGVtLCBjb250ZXh0KTtcbiAgICByZXR1cm4gZmlsZXN5c3RlbSA/IHsgZmlsZXN5c3RlbSB9IDogdW5kZWZpbmVkO1xuICB9XG4gIC8vIEEgcGF0aCBtb3VudCBuZWVkcyB0aGUgcmVxdWVzdCdzIE9CTyBjbGllbnQgdG8gcmVhY2ggdGhlIHdvcmtzcGFjZS5cbiAgaWYgKGZvbGRlci5wYXRoID09PSB1bmRlZmluZWQgfHwgIWNhY2hlLmNsaWVudCB8fCAhY2FjaGUuaG9zdCB8fCAhY2FjaGUudXNlcktleSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInNraWxsLWZvbGRlcjpza2lwcGVkXCIsIHtcbiAgICAgIG5hbWUsXG4gICAgICByZWFzb246IGZvbGRlci5wYXRoID09PSB1bmRlZmluZWQgPyBcIm5vLWxvY2F0aW9uXCIgOiBcIm1pc3Npbmctb2JvLWNsaWVudFwiLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoYXdhaXQgcmVzb2x2ZVNraWxsRm9sZGVyVmFsdWUoZm9sZGVyLnBhdGgsIGNvbnRleHQpKTtcbiAgaWYgKCFyb290KSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gZGF0YWJyaWNrc0ZpbGVzeXN0ZW0oY2FjaGUuY2xpZW50LCByb290LCBmb2xkZXIud3JpdGFibGUgIT09IHRydWUsIHtcbiAgICBob3N0OiBjYWNoZS5ob3N0LFxuICAgIHR0bE1zOiBjYWNoZS53b3Jrc3BhY2VTa2lsbFJlZnJlc2hUdGxNcyxcbiAgICB1c2VyS2V5OiBjYWNoZS51c2VyS2V5LFxuICB9KTtcbn1cblxuLyoqIFJlYWQgYSB7QGxpbmsgU2tpbGxGb2xkZXJWYWx1ZX0sIGNhbGxpbmcgaXQgd2hlbiBpdCBpcyBhIHBlci1yZXF1ZXN0IHJlc29sdmVyLiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNraWxsRm9sZGVyVmFsdWU8VD4oXG4gIHZhbHVlOiBTa2lsbEZvbGRlclZhbHVlPFQ+LFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4pOiBUIHwgdW5kZWZpbmVkIHwgUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgID8gKHZhbHVlIGFzIChjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQpID0+IFQgfCB1bmRlZmluZWQgfCBQcm9taXNlPFQgfCB1bmRlZmluZWQ+KShjb250ZXh0KVxuICAgIDogdmFsdWU7XG59XG5cbi8qKlxuICogRmlsbCBpbiBgaWRgIGFuZCBgbmFtZWAgd2hlbiBlaXRoZXIgaXMgb21pdHRlZCBvbiB7QGxpbmsgQ3JlYXRlV29ya3NwYWNlT3B0aW9uc30uXG4gKiBTbHVnaWZpZXMgYG5hbWVgIGludG8gYGlkYDsgdG9rZW5pemVzIGBpZGAgaW50byBhIGRpc3BsYXkgYG5hbWVgLlxuICovXG5mdW5jdGlvbiByZXNvbHZlV29ya3NwYWNlSWRlbnRpdHkob3B0aW9uczogQ3JlYXRlV29ya3NwYWNlT3B0aW9ucyk6IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufSB7XG4gIGxldCBpZCA9IG9wdGlvbnMuaWQ7XG4gIGxldCBuYW1lID0gb3B0aW9ucy5uYW1lO1xuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBuYW1lID8gc3RyaW5nVXRpbHMudG9TbHVnKG5hbWUpIDogXCJ3b3Jrc3BhY2VcIjtcbiAgfVxuICBpZiAoIW5hbWUpIHtcbiAgICBuYW1lID0gQXJyYXkuZnJvbShzdHJpbmdVdGlscy50b2tlbml6ZShpZCkpLmpvaW4oXCIgXCIpO1xuICB9XG4gIHJldHVybiB7IGlkLCBuYW1lIH07XG59XG5cbi8qKiBDb2xsZWN0IHRoZSBza2lsbC1mb2xkZXIgcmVzb2x2ZXIgYW5kIGFueSBjYWxsZXItc3VwcGxpZWQgb25lcy4gKi9cbmZ1bmN0aW9uIGJ1aWxkTW91bnRSZXNvbHZlcnMoXG4gIHNraWxsRm9sZGVyczogUmVjb3JkPHN0cmluZywgU2tpbGxGb2xkZXJPcHRpb25zPixcbiAgbW91bnRzOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10gfCB1bmRlZmluZWQsXG4gIHdvcmtzcGFjZVNraWxsUmVmcmVzaFR0bE1zID0gREVGQVVMVF9XT1JLU1BBQ0VfU0tJTExfQ0FDSEVfVFRMX01TLFxuKTogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdIHtcbiAgY29uc3QgcmVzb2x2ZXJzOiBXb3Jrc3BhY2VNb3VudFJlc29sdmVyW10gPSBbXTtcbiAgY29uc3QgZm9sZGVyQ291bnQgPSBPYmplY3Qua2V5cyhza2lsbEZvbGRlcnMpLmxlbmd0aDtcbiAgaWYgKGZvbGRlckNvdW50ID4gMCkge1xuICAgIHJlc29sdmVycy5wdXNoKChjb250ZXh0KSA9PlxuICAgICAgcmVzb2x2ZVNraWxsRm9sZGVyTW91bnRzKHNraWxsRm9sZGVycywgY29udGV4dCwgd29ya3NwYWNlU2tpbGxSZWZyZXNoVHRsTXMpLFxuICAgICk7XG4gIH1cbiAgaWYgKG1vdW50cz8ubGVuZ3RoKSB7XG4gICAgcmVzb2x2ZXJzLnB1c2goLi4ubW91bnRzKTtcbiAgfVxuICBsb2dnZXIuZGVidWcoXCJtb3VudHM6cmVzb2x2ZXJzXCIsIHtcbiAgICBza2lsbEZvbGRlckNvdW50OiBmb2xkZXJDb3VudCxcbiAgICBjdXN0b21SZXNvbHZlckNvdW50OiBtb3VudHM/Lmxlbmd0aCA/PyAwLFxuICAgIHRvdGFsUmVzb2x2ZXJDb3VudDogcmVzb2x2ZXJzLmxlbmd0aCxcbiAgfSk7XG4gIHJldHVybiByZXNvbHZlcnM7XG59XG5cbi8qKiBNb3VudCBzdGFydHVwLXByb3Zpc2lvbmVkIGxvY2FsIHNraWxsIHJvb3RzIGludG8gTWFzdHJhJ3Mgd29ya3NwYWNlIGZpbGVzeXN0ZW0uICovXG5mdW5jdGlvbiBsb2NhbFNraWxsTW91bnRSZXNvbHZlcnMocGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdIHtcbiAgcmV0dXJuIFsuLi5uZXcgU2V0KHBhdGhzLm1hcCgocGF0aCkgPT4gcGF0aC50cmltKCkpLmZpbHRlcihCb29sZWFuKSldLm1hcCgocm9vdCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBtb3VudCA9IGAvcmVtb3RlLXNraWxscy8ke2luZGV4fWA7XG4gICAgY29uc3QgZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW1zKFxuICAgICAgbmV3IExvY2FsRmlsZVN5c3RlbSh7XG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICBjcmVhdGVSb290OiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICAgeyByZWFkT25seTogdHJ1ZSB9LFxuICAgICk7XG4gICAgcmV0dXJuICgpID0+ICh7XG4gICAgICBtb3VudHM6IHsgW21vdW50XTogZmlsZXN5c3RlbSB9LFxuICAgICAgc2tpbGxQYXRoczogW21vdW50XSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2F0ZSBza2lsbC1mb2xkZXIgbW91bnRzIG9uIHRoZSByZXF1ZXN0J3MgdG9rZW4uXG4gKlxuICogQWx3YXlzIGFsbG93cyBtb3VudHMgaW4gZGV2ZWxvcG1lbnQ7IGluIG90aGVyIGVudmlyb25tZW50cyByZXF1aXJlc1xuICoge0BsaW5rIGhhc1dvcmtzcGFjZUZpbGVTY29wZX0uXG4gKi9cbmZ1bmN0aW9uIHNob3VsZE1vdW50U2tpbGxGb2xkZXJzKHJlcXVlc3RDb250ZXh0OiBSZXF1ZXN0Q29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikgcmV0dXJuIHRydWU7XG4gIHJldHVybiBoYXNXb3Jrc3BhY2VGaWxlU2NvcGUocmVxdWVzdENvbnRleHQpO1xufVxuXG4vKiogUmVhZCB0aGUgdHJpbW1lZCBPQk8gdXNlciBlbWFpbCBzdGFtcGVkIG9uIHtAbGluayBNQVNUUkFfVVNFUl9FTUFJTF9LRVl9LiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNjb3BlZEVtYWlsKHJlcXVlc3RDb250ZXh0OiBSZXF1ZXN0Q29udGV4dCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBzdHJpbmdVdGlscy50cmltVG9OdWxsKHJlcXVlc3RDb250ZXh0Py5nZXQoTUFTVFJBX1VTRVJfRU1BSUxfS0VZKSkgPz8gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdyYXAgYSB7QGxpbmsgRGF0YWJyaWNrc0ZpbGVTeXN0ZW19IGFzIGEgTWFzdHJhIGZpbGVzeXN0ZW0uIFdoZW4gdGhlIHJvb3QgaXNcbiAqIG1pc3NpbmcgKGFuZCB7QGxpbmsgcmVhZE9ubHl9IHNvIHdlIHdpbGwgbm90IGNyZWF0ZSBpdCksIGZhbGwgYmFjayB0b1xuICoge0BsaW5rIHNjcmF0Y2hGaWxlc3lzdGVtfSBzbyBza2lsbCBzY2FucyBzdGlsbCBoYXZlIGEgd3JpdGFibGUgbG9jYWwgbW91bnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRhdGFicmlja3NGaWxlc3lzdGVtKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgcm9vdDogc3RyaW5nLFxuICByZWFkT25seTogYm9vbGVhbiA9IHRydWUsXG4gIGNhY2hlOiB7IGhvc3Q6IHN0cmluZzsgdHRsTXM6IG51bWJlcjsgdXNlcktleTogc3RyaW5nIH0sXG4pOiBQcm9taXNlPHsgY2FjaGVLZXk6IHN0cmluZzsgZmlsZXN5c3RlbTogV29ya3NwYWNlRmlsZXN5c3RlbSB9IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGZzID0gbmV3IERhdGFicmlja3NGaWxlU3lzdGVtKHtcbiAgICBjbGllbnQ6IHdvcmtzcGFjZUNsaWVudC50b0xlZ2FjeVdvcmtzcGFjZUNsaWVudChjbGllbnQpLFxuICAgIHJvb3QsXG4gICAgcmVhZE9ubHksXG4gICAgY3JlYXRlUm9vdDogIXJlYWRPbmx5LFxuICB9KTtcbiAgY29uc3QgY2FjaGVkID0gY2FjaGVkV29ya3NwYWNlU2tpbGxNb3VudCh7XG4gICAgaG9zdDogY2FjaGUuaG9zdCxcbiAgICBzb3VyY2U6IGZzLFxuICAgIHR0bE1zOiBjYWNoZS50dGxNcyxcbiAgICB1c2VyS2V5OiBjYWNoZS51c2VyS2V5LFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjYWNoZWQuZmlsZXN5c3RlbS5pbml0KCk7XG4gICAgaWYgKGF3YWl0IGNhY2hlZC5maWxlc3lzdGVtLmV4aXN0cyhcIi5cIikpIHJldHVybiBjYWNoZWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImRhdGFicmlja3MtbW91bnQ6c2NyYXRjaC1mYWxsYmFja1wiLCB7XG4gICAgICByb290LFxuICAgICAgcmVhZE9ubHksXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJ1biBldmVyeSBtb3VudCByZXNvbHZlciBmb3Igb25lIHJlcXVlc3QgYW5kIG1lcmdlIG1vdW50cyBwbHVzIHNraWxsIHBhdGhzLlxuICogTGF0ZXIgcmVzb2x2ZXJzIG92ZXJ3cml0ZSBtb3VudCBrZXlzIGZyb20gZWFybGllciBvbmVzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlV29ya3NwYWNlQ29udHJpYnV0aW9uKFxuICByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSxcbiAgY29udGV4dDogV29ya3NwYWNlTW91bnRDb250ZXh0LFxuKTogUHJvbWlzZTxXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbj4ge1xuICBjb25zdCBtb3VudHM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUZpbGVzeXN0ZW0+ID0ge307XG4gIGNvbnN0IHNraWxsUGF0aHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNhY2hlS2V5czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGNhY2hlYWJsZSA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJlc29sdmVyXSBvZiByZXNvbHZlcnMuZW50cmllcygpKSB7XG4gICAgY29uc3QgY29udHJpYnV0aW9uID0gYXdhaXQgcmVzb2x2ZXIoY29udGV4dCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwibW91bnRzOnJlc29sdmVyXCIsIHtcbiAgICAgIGluZGV4LFxuICAgICAgbW91bnRLZXlzOiBPYmplY3Qua2V5cyhjb250cmlidXRpb24ubW91bnRzKSxcbiAgICAgIHNraWxsUGF0aHM6IGNvbnRyaWJ1dGlvbi5za2lsbFBhdGhzID8/IFtdLFxuICAgIH0pO1xuICAgIE9iamVjdC5hc3NpZ24obW91bnRzLCBjb250cmlidXRpb24ubW91bnRzKTtcbiAgICBpZiAoT2JqZWN0LmtleXMoY29udHJpYnV0aW9uLm1vdW50cykubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGNvbnRyaWJ1dGlvbi5jYWNoZUtleSkgY2FjaGVLZXlzLnB1c2goY29udHJpYnV0aW9uLmNhY2hlS2V5KTtcbiAgICAgIGVsc2UgY2FjaGVhYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChjb250cmlidXRpb24uc2tpbGxQYXRocz8ubGVuZ3RoKSB7XG4gICAgICBza2lsbFBhdGhzLnB1c2goLi4uY29udHJpYnV0aW9uLnNraWxsUGF0aHMpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcIm1vdW50czptZXJnZWRcIiwge1xuICAgIG1vdW50S2V5czogT2JqZWN0LmtleXMobW91bnRzKSxcbiAgICBza2lsbFBhdGhzLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIG1vdW50cyxcbiAgICBza2lsbFBhdGhzLFxuICAgIC4uLihjYWNoZWFibGUgJiYgY2FjaGVLZXlzLmxlbmd0aCA+IDBcbiAgICAgID8geyBjYWNoZUtleTogb2JqZWN0LnRvU3RhYmxlS2V5KGNhY2hlS2V5cy5zb3J0KCkpIH1cbiAgICAgIDoge30pLFxuICB9O1xufVxuXG4vKipcbiAqIER5bmFtaWMgZmlsZXN5c3RlbSByZXNvbHZlciBwYXNzZWQgdG8gTWFzdHJhIHtAbGluayBXb3Jrc3BhY2V9LlxuICpcbiAqIFJldHVybnMgYSB7QGxpbmsgQ29tcG9zaXRlRmlsZXN5c3RlbX0gd2hlbiBhbnkgbW91bnQgcmVzb2x2ZWQ7IG90aGVyd2lzZSBhXG4gKiBmcmVzaCB7QGxpbmsgc2NyYXRjaEZpbGVzeXN0ZW19IHNvIE1hc3RyYSBhbHdheXMgaGFzIGEgd3JpdGFibGUgbG9jYWwgcm9vdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVdvcmtzcGFjZUZpbGVzeXN0ZW0oXG4gIHJlc29sdmVyczogV29ya3NwYWNlTW91bnRSZXNvbHZlcltdLFxuICBjb250ZXh0OiBXb3Jrc3BhY2VNb3VudENvbnRleHQsXG4pOiBQcm9taXNlPFdvcmtzcGFjZUZpbGVzeXN0ZW0+IHtcbiAgY29uc3QgeyBjYWNoZUtleSwgbW91bnRzIH0gPSBhd2FpdCByZXNvbHZlV29ya3NwYWNlQ29udHJpYnV0aW9uKHJlc29sdmVycywgY29udGV4dCk7XG4gIGNvbnN0IG1vdW50S2V5cyA9IE9iamVjdC5rZXlzKG1vdW50cyk7XG4gIGlmIChtb3VudEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiZmlsZXN5c3RlbTpzY3JhdGNoXCIsIHtcbiAgICAgIGhhc1JlcXVlc3RDb250ZXh0OiBCb29sZWFuKGNvbnRleHQucmVxdWVzdENvbnRleHQpLFxuICAgIH0pO1xuICAgIHJldHVybiBzY3JhdGNoRmlsZXN5c3RlbSgpO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhcImZpbGVzeXN0ZW06Y29tcG9zaXRlXCIsIHsgbW91bnRLZXlzIH0pO1xuICBpZiAoIWNhY2hlS2V5KSByZXR1cm4gbmV3IENvbXBvc2l0ZUZpbGVzeXN0ZW0oeyBtb3VudHMgfSk7XG4gIGNvbnN0IGV4aXN0aW5nID0gc2NvcGVkV29ya3NwYWNlRmlsZXN5c3RlbXMuZ2V0KGNhY2hlS2V5KTtcbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgc2NvcGVkV29ya3NwYWNlRmlsZXN5c3RlbXMuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICBzY29wZWRXb3Jrc3BhY2VGaWxlc3lzdGVtcy5zZXQoY2FjaGVLZXksIGV4aXN0aW5nKTtcbiAgICByZXR1cm4gZXhpc3Rpbmc7XG4gIH1cbiAgY29uc3QgZmlsZXN5c3RlbSA9IG5ldyBDb21wb3NpdGVGaWxlc3lzdGVtKHsgbW91bnRzIH0pO1xuICBzY29wZWRXb3Jrc3BhY2VGaWxlc3lzdGVtcy5zZXQoY2FjaGVLZXksIGZpbGVzeXN0ZW0pO1xuICB3aGlsZSAoc2NvcGVkV29ya3NwYWNlRmlsZXN5c3RlbXMuc2l6ZSA+IE1BWF9TQ09QRURfV09SS1NQQUNFX0ZJTEVTWVNURU1TKSB7XG4gICAgY29uc3Qgb2xkZXN0ID0gc2NvcGVkV29ya3NwYWNlRmlsZXN5c3RlbXMua2V5cygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAob2xkZXN0ID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgIHNjb3BlZFdvcmtzcGFjZUZpbGVzeXN0ZW1zLmRlbGV0ZShvbGRlc3QpO1xuICB9XG4gIHJldHVybiBmaWxlc3lzdGVtO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBkeW5hbWljIHtAbGluayBTa2lsbHNSZXNvbHZlcn0gdGhhdCBjb2xsZWN0cyBgc2tpbGxQYXRoc2AgZnJvbVxuICogZXZlcnkgbW91bnQgcmVzb2x2ZXIgb24gZWFjaCByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBidWlsZFdvcmtzcGFjZVNraWxsc1Jlc29sdmVyKFxuICByZXNvbHZlcnM6IFdvcmtzcGFjZU1vdW50UmVzb2x2ZXJbXSxcbik6IFNraWxsc1Jlc29sdmVyIHtcbiAgcmV0dXJuIGFzeW5jIChjb250ZXh0OiBTa2lsbHNDb250ZXh0KSA9PiB7XG4gICAgY29uc3QgY29udHJpYnV0aW9uID0gYXdhaXQgcmVzb2x2ZVdvcmtzcGFjZUNvbnRyaWJ1dGlvbihyZXNvbHZlcnMsIGNvbnRleHQpO1xuICAgIGNvbnN0IHNraWxsUGF0aHMgPSBhd2FpdCB1bmlxdWVTa2lsbFBhdGhzKGNvbnRyaWJ1dGlvbik7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2tpbGxzOnJlc29sdmVkXCIsIHtcbiAgICAgIGNvbmZpZ3VyZWRTa2lsbFBhdGhzOiBjb250cmlidXRpb24uc2tpbGxQYXRocyxcbiAgICAgIHNraWxsUGF0aHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHNraWxsUGF0aHM7XG4gIH07XG59XG5cbi8qKiBFeHBhbmQgbW91bnRlZCByb290cyBhbmQga2VlcCB0aGUgZmlyc3QgY29uY3JldGUgc2tpbGwgZm9yIGVhY2ggZGlyZWN0b3J5IG5hbWUuICovXG5hc3luYyBmdW5jdGlvbiB1bmlxdWVTa2lsbFBhdGhzKGNvbnRyaWJ1dGlvbjogV29ya3NwYWNlTW91bnRDb250cmlidXRpb24pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHNlbGVjdGVkID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgY29uc3QgdW5yZXNvbHZlZDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCByb290IG9mIGNvbnRyaWJ1dGlvbi5za2lsbFBhdGhzID8/IFtdKSB7XG4gICAgY29uc3QgbW91bnQgPSBtb3VudGVkRmlsZXN5c3RlbShyb290LCBjb250cmlidXRpb24ubW91bnRzKTtcbiAgICBpZiAoIW1vdW50KSB7XG4gICAgICB1bnJlc29sdmVkLnB1c2gocm9vdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGNhbmRpZGF0ZXM6IHN0cmluZ1tdO1xuICAgIHRyeSB7XG4gICAgICBjYW5kaWRhdGVzID0gYXdhaXQgY29uY3JldGVTa2lsbFBhdGhzKHJvb3QsIG1vdW50LnBhdGgsIG1vdW50LmZpbGVzeXN0ZW0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJza2lsbHM6cm9vdC1leHBhbnNpb24tZmFpbGVkXCIsIHtcbiAgICAgICAgcm9vdCxcbiAgICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICAgIH0pO1xuICAgICAgdW5yZXNvbHZlZC5wdXNoKHJvb3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdW5yZXNvbHZlZC5wdXNoKHJvb3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwb3NpeFBhdGguYmFzZW5hbWUoY2FuZGlkYXRlKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gc2VsZWN0ZWQuZ2V0KG5hbWUpO1xuICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcInNraWxsczpkdXBsaWNhdGUtc2tpcHBlZFwiLCB7IG5hbWUsIHBhdGg6IGNhbmRpZGF0ZSwgc2VsZWN0ZWQ6IGV4aXN0aW5nIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWQuc2V0KG5hbWUsIGNhbmRpZGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4uc2VsZWN0ZWQudmFsdWVzKCksIC4uLnVucmVzb2x2ZWRdO1xufVxuXG4vKiogRmluZCB0aGUgbW9zdC1zcGVjaWZpYyBtb3VudGVkIGZpbGVzeXN0ZW0gY29udGFpbmluZyBvbmUgc2tpbGwgcGF0aC4gKi9cbmZ1bmN0aW9uIG1vdW50ZWRGaWxlc3lzdGVtKFxuICBza2lsbFBhdGg6IHN0cmluZyxcbiAgbW91bnRzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBXb3Jrc3BhY2VGaWxlc3lzdGVtPj4sXG4pOiB7IGZpbGVzeXN0ZW06IFdvcmtzcGFjZUZpbGVzeXN0ZW07IHBhdGg6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG1vdW50cylcbiAgICAuZmlsdGVyKChbbW91bnRdKSA9PiBza2lsbFBhdGggPT09IG1vdW50IHx8IHNraWxsUGF0aC5zdGFydHNXaXRoKGAke21vdW50fS9gKSlcbiAgICAuc29ydCgoW2xlZnRdLCBbcmlnaHRdKSA9PiByaWdodC5sZW5ndGggLSBsZWZ0Lmxlbmd0aClcbiAgICAubWFwKChbcGF0aCwgZmlsZXN5c3RlbV0pID0+ICh7IGZpbGVzeXN0ZW0sIHBhdGggfSkpWzBdO1xufVxuXG4vKiogUmV0dXJuIGNvbmNyZXRlIGNoaWxkIHNraWxsIGRpcmVjdG9yaWVzIGZyb20gb25lIG1vdW50ZWQgc2tpbGwgcm9vdC4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbmNyZXRlU2tpbGxQYXRocyhcbiAgcm9vdDogc3RyaW5nLFxuICBtb3VudDogc3RyaW5nLFxuICBmaWxlc3lzdGVtOiBXb3Jrc3BhY2VGaWxlc3lzdGVtLFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCByZWxhdGl2ZVJvb3QgPSByb290ID09PSBtb3VudCA/IFwiLlwiIDogcm9vdC5zbGljZShtb3VudC5sZW5ndGggKyAxKTtcbiAgaWYgKGF3YWl0IGZpbGVzeXN0ZW0uZXhpc3RzKHBvc2l4UGF0aC5qb2luKHJlbGF0aXZlUm9vdCwgXCJTS0lMTC5tZFwiKSkpIHJldHVybiBbcm9vdF07XG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBmaWxlc3lzdGVtLnJlYWRkaXIocmVsYXRpdmVSb290KTtcbiAgY29uc3QgY2FuZGlkYXRlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgaWYgKGVudHJ5LnR5cGUgIT09IFwiZGlyZWN0b3J5XCIpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHJlbGF0aXZlID0gcG9zaXhQYXRoLmpvaW4ocmVsYXRpdmVSb290LCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoYXdhaXQgZmlsZXN5c3RlbS5leGlzdHMocG9zaXhQYXRoLmpvaW4ocmVsYXRpdmUsIFwiU0tJTEwubWRcIikpKSB7XG4gICAgICBjYW5kaWRhdGVzLnB1c2gocG9zaXhQYXRoLmpvaW4ocm9vdCwgZW50cnkubmFtZSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlcztcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -34,19 +34,19 @@
|
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@databricks/appkit": "0.81.0",
|
|
37
|
-
"@dbx-tools/appkit": "^0.9.
|
|
38
|
-
"@dbx-tools/core": "^0.9.
|
|
39
|
-
"@dbx-tools/databricks": "^0.9.
|
|
40
|
-
"@dbx-tools/fs": "^0.9.
|
|
41
|
-
"@dbx-tools/genie": "^0.9.
|
|
42
|
-
"@dbx-tools/model": "^0.9.
|
|
43
|
-
"@dbx-tools/path": "^0.9.
|
|
44
|
-
"@dbx-tools/postgres": "^0.9.
|
|
45
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
46
|
-
"@dbx-tools/shared-fs": "^0.9.
|
|
47
|
-
"@dbx-tools/shared-genie": "^0.9.
|
|
48
|
-
"@dbx-tools/shared-mastra": "^0.9.
|
|
49
|
-
"@dbx-tools/shared-model": "^0.9.
|
|
37
|
+
"@dbx-tools/appkit": "^0.9.73",
|
|
38
|
+
"@dbx-tools/core": "^0.9.73",
|
|
39
|
+
"@dbx-tools/databricks": "^0.9.73",
|
|
40
|
+
"@dbx-tools/fs": "^0.9.73",
|
|
41
|
+
"@dbx-tools/genie": "^0.9.73",
|
|
42
|
+
"@dbx-tools/model": "^0.9.73",
|
|
43
|
+
"@dbx-tools/path": "^0.9.73",
|
|
44
|
+
"@dbx-tools/postgres": "^0.9.73",
|
|
45
|
+
"@dbx-tools/shared-core": "^0.9.73",
|
|
46
|
+
"@dbx-tools/shared-fs": "^0.9.73",
|
|
47
|
+
"@dbx-tools/shared-genie": "^0.9.73",
|
|
48
|
+
"@dbx-tools/shared-mastra": "^0.9.73",
|
|
49
|
+
"@dbx-tools/shared-model": "^0.9.73",
|
|
50
50
|
"@mastra/ai-sdk": "1.10.5",
|
|
51
51
|
"@mastra/core": "1.71.0",
|
|
52
52
|
"@mastra/express": "1.5.15",
|
|
@@ -220,7 +220,7 @@
|
|
|
220
220
|
"./package.json": "./package.json"
|
|
221
221
|
}
|
|
222
222
|
},
|
|
223
|
-
"version": "0.9.
|
|
223
|
+
"version": "0.9.73",
|
|
224
224
|
"types": "./lib/index.d.ts",
|
|
225
225
|
"dbxToolsConfig": {
|
|
226
226
|
"tags": [
|
package/src/openapi-tool.ts
CHANGED
|
@@ -142,7 +142,9 @@ export async function openApiTools(
|
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
function httpUrl(source: string): UrlBuilder | undefined {
|
|
145
|
-
const
|
|
145
|
+
const value = source.trim();
|
|
146
|
+
if (!value.startsWith("http://") && !value.startsWith("https://")) return undefined;
|
|
147
|
+
const url = urlBuilder(value);
|
|
146
148
|
return url?.scheme === "http" || url?.scheme === "https" ? url : undefined;
|
|
147
149
|
}
|
|
148
150
|
|
package/src/sandbox.ts
CHANGED
|
@@ -110,6 +110,7 @@ export class DatabricksSandbox implements WorkspaceSandbox {
|
|
|
110
110
|
private remoteCreatedAt?: Date;
|
|
111
111
|
private lastUsedAt?: Date;
|
|
112
112
|
private activeFallback?: WorkspaceSandbox;
|
|
113
|
+
private fallbackPromise?: Promise<void>;
|
|
113
114
|
private startPromise?: Promise<void>;
|
|
114
115
|
|
|
115
116
|
constructor(options: DatabricksSandboxOptions) {
|
|
@@ -173,16 +174,7 @@ export class DatabricksSandbox implements WorkspaceSandbox {
|
|
|
173
174
|
this.lastUsedAt = new Date();
|
|
174
175
|
} catch (caught) {
|
|
175
176
|
if (this.fallbackConfig !== false && isDatabricksSandboxUnavailable(caught)) {
|
|
176
|
-
|
|
177
|
-
logger.warn("Databricks Sandbox unavailable; using fallback", {
|
|
178
|
-
sandboxId: this.id,
|
|
179
|
-
fallback: fallback.provider,
|
|
180
|
-
error: errorUtils.errorMessage(caught),
|
|
181
|
-
});
|
|
182
|
-
await fallback.start?.();
|
|
183
|
-
this.activeFallback = fallback;
|
|
184
|
-
this.status = fallback.status;
|
|
185
|
-
this.error = fallback.error;
|
|
177
|
+
await this.activateFallback(caught);
|
|
186
178
|
return;
|
|
187
179
|
}
|
|
188
180
|
this.status = "error";
|
|
@@ -254,36 +246,32 @@ export class DatabricksSandbox implements WorkspaceSandbox {
|
|
|
254
246
|
): Promise<CommandResult> {
|
|
255
247
|
await this.startWithSignal(options.abortSignal);
|
|
256
248
|
if (this.activeFallback) {
|
|
257
|
-
|
|
258
|
-
return {
|
|
259
|
-
command,
|
|
260
|
-
args,
|
|
261
|
-
success: false,
|
|
262
|
-
exitCode: 1,
|
|
263
|
-
stdout: "",
|
|
264
|
-
stderr: `Fallback sandbox ${this.activeFallback.provider} does not support command execution.`,
|
|
265
|
-
executionTimeMs: 0,
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
return this.activeFallback.executeCommand(command, args, options);
|
|
249
|
+
return this.executeFallback(command, args, options);
|
|
269
250
|
}
|
|
270
251
|
const timeout = options.timeout ?? this.commandTimeoutMs;
|
|
271
252
|
const script = commandScript(command, args, options.cwd);
|
|
272
253
|
const started = performance.now();
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
254
|
+
let response: z.infer<typeof ExecuteResponseSchema>;
|
|
255
|
+
try {
|
|
256
|
+
response = await this.request(
|
|
257
|
+
`${SANDBOX_EXEC_API_PATH}/${encodeURIComponent(this.id)}/exec-sync`,
|
|
258
|
+
"POST",
|
|
259
|
+
ExecuteResponseSchema,
|
|
260
|
+
{
|
|
261
|
+
payload: {
|
|
262
|
+
cmd: "/bin/bash",
|
|
263
|
+
args: ["-lc", script],
|
|
264
|
+
envs: definedEnvironment(options.env),
|
|
265
|
+
execution_timeout: `${Math.max(1, Math.ceil(timeout / 1_000))}s`,
|
|
266
|
+
},
|
|
267
|
+
signal: options.abortSignal,
|
|
283
268
|
},
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
269
|
+
);
|
|
270
|
+
} catch (caught) {
|
|
271
|
+
if (this.fallbackConfig === false || !isDatabricksSandboxUnavailable(caught)) throw caught;
|
|
272
|
+
await this.activateFallback(caught);
|
|
273
|
+
return this.executeFallback(command, args, options);
|
|
274
|
+
}
|
|
287
275
|
const stdout = response.stdout ?? "";
|
|
288
276
|
const stderr = response.stderr ?? "";
|
|
289
277
|
options.onStdout?.(stdout);
|
|
@@ -309,6 +297,58 @@ export class DatabricksSandbox implements WorkspaceSandbox {
|
|
|
309
297
|
};
|
|
310
298
|
}
|
|
311
299
|
|
|
300
|
+
/** Activate the configured fallback once across concurrent command failures. */
|
|
301
|
+
private async activateFallback(caught: unknown): Promise<void> {
|
|
302
|
+
if (this.activeFallback) return;
|
|
303
|
+
if (this.fallbackPromise) {
|
|
304
|
+
await this.fallbackPromise;
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
const pending = this.startFallback(caught);
|
|
308
|
+
this.fallbackPromise = pending;
|
|
309
|
+
try {
|
|
310
|
+
await pending;
|
|
311
|
+
} finally {
|
|
312
|
+
if (this.fallbackPromise === pending) this.fallbackPromise = undefined;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/** Start and publish the configured fallback after rechecking active state. */
|
|
317
|
+
private async startFallback(caught: unknown): Promise<void> {
|
|
318
|
+
if (this.activeFallback) return;
|
|
319
|
+
if (this.fallbackConfig === false) throw caught;
|
|
320
|
+
const fallback = resolveFallback(this.fallbackConfig);
|
|
321
|
+
logger.warn("Databricks Sandbox unavailable; using fallback", {
|
|
322
|
+
sandboxId: this.id,
|
|
323
|
+
fallback: fallback.provider,
|
|
324
|
+
error: errorUtils.errorMessage(caught),
|
|
325
|
+
});
|
|
326
|
+
await fallback.start?.();
|
|
327
|
+
this.activeFallback = fallback;
|
|
328
|
+
this.status = fallback.status;
|
|
329
|
+
this.error = fallback.error;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/** Execute through the active fallback or return an unsupported result. */
|
|
333
|
+
private executeFallback(
|
|
334
|
+
command: string,
|
|
335
|
+
args: string[],
|
|
336
|
+
options: ExecuteCommandOptions,
|
|
337
|
+
): Promise<CommandResult> {
|
|
338
|
+
const fallback = this.activeFallback;
|
|
339
|
+
if (!fallback) throw new Error("Fallback sandbox is not active");
|
|
340
|
+
if (fallback.executeCommand) return fallback.executeCommand(command, args, options);
|
|
341
|
+
return Promise.resolve({
|
|
342
|
+
command,
|
|
343
|
+
args,
|
|
344
|
+
success: false,
|
|
345
|
+
exitCode: 1,
|
|
346
|
+
stdout: "",
|
|
347
|
+
stderr: `Fallback sandbox ${fallback.provider} does not support command execution.`,
|
|
348
|
+
executionTimeMs: 0,
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
|
|
312
352
|
/** Whether the adapter currently knows the remote sandbox to be running. */
|
|
313
353
|
async isReady(): Promise<boolean> {
|
|
314
354
|
if (this.activeFallback) {
|
package/src/workspaces.ts
CHANGED
|
@@ -22,6 +22,7 @@ import { createHash } from "node:crypto";
|
|
|
22
22
|
import { ConfigurationError, createWorkspaceClient } from "@databricks/appkit";
|
|
23
23
|
import type { WorkspaceClient } from "@databricks/appkit";
|
|
24
24
|
import { DatabricksFileSystem, workspaceClient } from "@dbx-tools/databricks";
|
|
25
|
+
import { LocalFileSystem } from "@dbx-tools/fs";
|
|
25
26
|
import { errorUtils, log, object, stringUtils, token } from "@dbx-tools/shared-core";
|
|
26
27
|
import { posixPath } from "@dbx-tools/shared-fs";
|
|
27
28
|
import type { RequestContext } from "@mastra/core/request-context";
|
|
@@ -42,7 +43,7 @@ import {
|
|
|
42
43
|
resolveUserKey,
|
|
43
44
|
type User,
|
|
44
45
|
} from "./config.ts";
|
|
45
|
-
import { scratchFilesystem } from "./filesystems.ts";
|
|
46
|
+
import { filesystems, scratchFilesystem } from "./filesystems.ts";
|
|
46
47
|
import { MontySandbox } from "./monty-sandbox.ts";
|
|
47
48
|
import { DatabricksSandbox, type DatabricksWorkspaceSandboxOptions } from "./sandbox.ts";
|
|
48
49
|
import { cachedWorkspaceSkillMount, DEFAULT_WORKSPACE_SKILL_CACHE_TTL_MS } from "./skill-cache.ts";
|
|
@@ -168,7 +169,7 @@ export interface CreateWorkspaceOptions {
|
|
|
168
169
|
*/
|
|
169
170
|
sandbox?: WorkspaceSandboxSelection;
|
|
170
171
|
/**
|
|
171
|
-
* Extra LOCAL skill
|
|
172
|
+
* Extra LOCAL skill roots mounted read-only for every request's skill discovery.
|
|
172
173
|
* Used by the plugin to surface remote skills provisioned to a local temp
|
|
173
174
|
* dir at startup (see `remote-skills.ts`). Databricks-hosted remote skills
|
|
174
175
|
* need no entry here - they land in the Assistant tree the built-in mount
|
|
@@ -240,17 +241,15 @@ export function createWorkspace(options: CreateWorkspaceOptions = {}): Workspace
|
|
|
240
241
|
const { id, name } = resolveWorkspaceIdentity(options);
|
|
241
242
|
const skillFolders = resolveSkillFolders(options);
|
|
242
243
|
const folderNames = Object.keys(skillFolders);
|
|
244
|
+
const extraSkillPaths = options.extraSkillPaths ?? [];
|
|
243
245
|
const resolvers = buildMountResolvers(
|
|
244
246
|
skillFolders,
|
|
245
|
-
options.mounts,
|
|
247
|
+
[...(options.mounts ?? []), ...localSkillMountResolvers(extraSkillPaths)],
|
|
246
248
|
options.workspaceSkillRefreshTtlMs,
|
|
247
249
|
);
|
|
248
|
-
const extraSkillPaths = options.extraSkillPaths ?? [];
|
|
249
250
|
const skills =
|
|
250
251
|
options.skills ??
|
|
251
|
-
(resolvers.length > 0
|
|
252
|
-
? buildWorkspaceSkillsResolver(resolvers, extraSkillPaths)
|
|
253
|
-
: undefined);
|
|
252
|
+
(resolvers.length > 0 ? buildWorkspaceSkillsResolver(resolvers) : undefined);
|
|
254
253
|
const checkSkillFileMtime = options.checkSkillFileMtime ?? folderNames.length > 0;
|
|
255
254
|
const bm25 = options.bm25 !== false;
|
|
256
255
|
const sandbox = resolveWorkspaceSandbox(options.sandbox, id, name);
|
|
@@ -536,6 +535,25 @@ function buildMountResolvers(
|
|
|
536
535
|
return resolvers;
|
|
537
536
|
}
|
|
538
537
|
|
|
538
|
+
/** Mount startup-provisioned local skill roots into Mastra's workspace filesystem. */
|
|
539
|
+
function localSkillMountResolvers(paths: readonly string[]): WorkspaceMountResolver[] {
|
|
540
|
+
return [...new Set(paths.map((path) => path.trim()).filter(Boolean))].map((root, index) => {
|
|
541
|
+
const mount = `/remote-skills/${index}`;
|
|
542
|
+
const filesystem = filesystems(
|
|
543
|
+
new LocalFileSystem({
|
|
544
|
+
root,
|
|
545
|
+
readOnly: true,
|
|
546
|
+
createRoot: false,
|
|
547
|
+
}),
|
|
548
|
+
{ readOnly: true },
|
|
549
|
+
);
|
|
550
|
+
return () => ({
|
|
551
|
+
mounts: { [mount]: filesystem },
|
|
552
|
+
skillPaths: [mount],
|
|
553
|
+
});
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
|
|
539
557
|
/**
|
|
540
558
|
* Gate skill-folder mounts on the request's token.
|
|
541
559
|
*
|
|
@@ -674,18 +692,15 @@ async function resolveWorkspaceFilesystem(
|
|
|
674
692
|
*/
|
|
675
693
|
function buildWorkspaceSkillsResolver(
|
|
676
694
|
resolvers: WorkspaceMountResolver[],
|
|
677
|
-
extraSkillPaths: string[] = [],
|
|
678
695
|
): SkillsResolver {
|
|
679
696
|
return async (context: SkillsContext) => {
|
|
680
697
|
const contribution = await resolveWorkspaceContribution(resolvers, context);
|
|
681
698
|
const skillPaths = await uniqueSkillPaths(contribution);
|
|
682
|
-
const merged = [...skillPaths, ...extraSkillPaths];
|
|
683
699
|
logger.debug("skills:resolved", {
|
|
684
700
|
configuredSkillPaths: contribution.skillPaths,
|
|
685
701
|
skillPaths,
|
|
686
|
-
extraSkillPaths,
|
|
687
702
|
});
|
|
688
|
-
return
|
|
703
|
+
return skillPaths;
|
|
689
704
|
};
|
|
690
705
|
}
|
|
691
706
|
|