@dollhousemcp/mcp-server 2.0.25 → 2.0.26
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/CHANGELOG.md +4 -0
- package/dist/auto-dollhouse/portDiscovery.d.ts.map +1 -1
- package/dist/auto-dollhouse/portDiscovery.js +7 -4
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +4 -2
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +18 -1
- package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationRouter.js +6 -1
- package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationSchema.js +16 -1
- package/dist/handlers/mcp-aql/SchemaDispatcher.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/SchemaDispatcher.js +2 -1
- package/dist/index.js +14 -2
- package/dist/server/tools/BuildInfoTools.d.ts +1 -0
- package/dist/server/tools/BuildInfoTools.d.ts.map +1 -1
- package/dist/server/tools/BuildInfoTools.js +2 -1
- package/dist/server/tools/MCPAQLTools.js +3 -1
- package/dist/services/ActivationStore.d.ts +8 -0
- package/dist/services/ActivationStore.d.ts.map +1 -1
- package/dist/services/ActivationStore.js +28 -29
- package/dist/services/BuildInfoService.d.ts +3 -0
- package/dist/services/BuildInfoService.d.ts.map +1 -1
- package/dist/services/BuildInfoService.js +18 -1
- package/dist/services/sessionIdentity.d.ts +24 -0
- package/dist/services/sessionIdentity.d.ts.map +1 -0
- package/dist/services/sessionIdentity.js +42 -0
- package/dist/utils/permissionAuthority.d.ts +38 -0
- package/dist/utils/permissionAuthority.d.ts.map +1 -0
- package/dist/utils/permissionAuthority.js +341 -0
- package/dist/utils/permissionHooks.d.ts.map +1 -1
- package/dist/utils/permissionHooks.js +10 -1
- package/dist/web/console/UnifiedConsole.d.ts +2 -0
- package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
- package/dist/web/console/UnifiedConsole.js +3 -1
- package/dist/web/portDiscovery.d.ts +7 -0
- package/dist/web/portDiscovery.d.ts.map +1 -1
- package/dist/web/portDiscovery.js +35 -4
- package/dist/web/public/app.js +28 -4
- package/dist/web/public/index.html +2 -0
- package/dist/web/public/permissions.css +456 -0
- package/dist/web/public/permissions.js +553 -16
- package/dist/web/public/sessions.css +119 -0
- package/dist/web/public/sessions.js +95 -9
- package/dist/web/public/setup.js +56 -4
- package/dist/web/public/styles.css +21 -2
- package/dist/web/routes/permissionRoutes.d.ts +4 -1
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
- package/dist/web/routes/permissionRoutes.js +118 -6
- package/dist/web/routes/setupRoutes.d.ts +18 -0
- package/dist/web/routes/setupRoutes.d.ts.map +1 -1
- package/dist/web/routes/setupRoutes.js +47 -26
- package/dist/web/server.d.ts +4 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +19 -1
- package/package.json +4 -3
- package/scripts/pretooluse-dollhouse.sh +78 -12
- package/scripts/pretooluse-vscode.sh +6 -9
- package/scripts/pretooluse-windsurf.sh +6 -9
- package/server.json +2 -2
|
@@ -364,6 +364,8 @@ Gatekeeper & CLI policies:
|
|
|
364
364
|
{ operation: "evaluate_permission", params: { tool_name: "Bash", input: { command: "git status" }, platform: "claude_code" } }
|
|
365
365
|
{ operation: "get_effective_cli_policies" }
|
|
366
366
|
{ operation: "get_pending_cli_approvals" }
|
|
367
|
+
{ operation: "get_permission_authority" }
|
|
368
|
+
{ operation: "get_permission_authority", params: { host: "claude-code" } }
|
|
367
369
|
|
|
368
370
|
Enhanced index:
|
|
369
371
|
{ operation: "find_similar_elements", params: { element_type: "persona", element_name: "Creative-Writer" } }
|
|
@@ -528,4 +530,4 @@ Discover required parameters — use mcp_aql_read:
|
|
|
528
530
|
}
|
|
529
531
|
];
|
|
530
532
|
}
|
|
531
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQVFMVG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Rvb2xzL01DUEFRTFRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXRFLCtFQUErRTtBQUMvRSxpQ0FBaUM7QUFDakMsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILFNBQVMscUJBQXFCO0lBQzVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQUMsUUFBc0I7SUFDakQsT0FBTyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxjQUFjO0FBQ2QsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsSUFBSSxFQUFFLFFBQWlCO0lBQ3ZCLFVBQVUsRUFBRTtRQUNWLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLDJCQUEyQjtTQUN6QztRQUNELFlBQVksRUFBRTtZQUNaLElBQUksRUFB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TSxHQUFHLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEQsT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7eUJBQ3RDO3FCQUNGO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0Y7UUFFRCxpRUFBaUU7UUFDakU7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsV0FBVyxFQUFFOzt3QkFFRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29GQTZCOEI7Z0JBQzVFLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLFdBQVcsRUFBRTtvQkFDWCxZQUFZLEVBQUUsS0FBSztvQkFDbkIsZUFBZSxFQUFFLElBQUksQ0FBRSwwREFBMEQ7aUJBQ2xGO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO2dCQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pELE9BQU87b0JBQ0wsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxNQUFNOzRCQUNaLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3lCQUN0QztxQkFDRjtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1DUC1BUUwgVG9vbHMgLSBVbmlmaWVkIHF1ZXJ5IGludGVyZmFjZSBmb3IgQUkgYWdlbnRzXG4gKlxuICogUHJvdmlkZXMgdHdvIGVuZHBvaW50IG1vZGVzIGNvbmZpZ3VyYWJsZSB2aWEgTUNQX0FRTF9FTkRQT0lOVF9NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlOlxuICpcbiAqICMjIE1vZGUgMTogQ1JVREUgRW5kcG9pbnRzIChEZWZhdWx0KSAtIE1DUF9BUUxfRU5EUE9JTlRfTU9ERT1jcnVkZVxuICogNSB0b29sczogbWNwX2FxbF9jcmVhdGUsIG1jcF9hcWxfcmVhZCwgbWNwX2FxbF91cGRhdGUsIG1jcF9hcWxfZGVsZXRlLCBtY3BfYXFsX2V4ZWN1dGUgKH40LDMwMCB0b2tlbnMpXG4gKlxuICogIyMgTW9kZSAyOiBTaW5nbGUgRW5kcG9pbnQgKE1pbmltYWwpIC0gTUNQX0FRTF9FTkRQT0lOVF9NT0RFPXNpbmdsZVxuICogMSB0b29sOiBtY3BfYXFsICh+MzUwIHRva2VucylcbiAqIElkZWFsIGZvciBtdWx0aS1zZXJ2ZXIgZGVwbG95bWVudHMgd2hlcmUgdG9rZW4gYnVkZ2V0IGlzIGNvbnN0cmFpbmVkLlxuICpcbiAqIE5vdGU6IFRoZXNlIHRvb2xzIGFyZSBvbmx5IHJlZ2lzdGVyZWQgd2hlbiBNQ1BfSU5URVJGQUNFX01PREU9bWNwYXFsIChkZWZhdWx0KS5cbiAqIFdoZW4gTUNQX0lOVEVSRkFDRV9NT0RFPWRpc2NyZXRlLCBkaXNjcmV0ZSB0b29scyBhcmUgcmVnaXN0ZXJlZCBpbnN0ZWFkLlxuICpcbiAqICMjIFdoeSA1IENSVURFIEVuZHBvaW50cz8gKERlZmF1bHQgTW9kZSlcbiAqXG4gKiBUaGUgNS1lbmRwb2ludCBDUlVERSBwYXR0ZXJuIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlKSB3YXMgY2hvc2VuIGZvcjpcbiAqXG4gKiAxLiAqKlVzZXIgQ29tcHJlaGVuc2lvbioqOiBDUlVERSBleHRlbmRzIENSVUQgd2l0aCBFeGVjdXRlIGZvciBub24taWRlbXBvdGVudFxuICogICAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGVhc3kgZm9yIHVzZXJzIHRvIHJlYXNvbiBhYm91dCB3aGF0IGVhY2ggZW5kcG9pbnQgY2FuIGRvLlxuICpcbiAqIDIuICoqUGxhdGZvcm0gQW5ub3RhdGlvbnMqKjogTUNQIHBsYXRmb3JtcyBsaWtlIENoYXRHUFQncyBhcHBzIHJlcXVpcmVcbiAqICAgIHRvb2wgYW5ub3RhdGlvbnMgdGhhdCBkZXNjcmliZSBzYWZldHkgYW5kIGRlc3RydWN0aXZlbmVzcy4gVGhlIDUtZW5kcG9pbnRcbiAqICAgIHNwbGl0IG1hcHMgZGlyZWN0bHkgdG8gZGlzdGluY3QgcGVybWlzc2lvbiBsZXZlbHM6XG4gKiAgICAtIENSRUFURTogYWRkaXRpdmUsIG5vbi1kZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZSlcbiAqICAgIC0gUkVBRDogc2FmZSwgcmVhZC1vbmx5IChyZWFkT25seUhpbnQ6IHRydWUsIGRlc3RydWN0aXZlSGludDogZmFsc2UpXG4gKiAgICAtIFVQREFURTogbW9kaWZ5aW5nLCBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlKVxuICogICAgLSBERUxFVEU6IGRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUpXG4gKiAgICAtIEVYRUNVVEU6IG5vbi1pZGVtcG90ZW50LCBwb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAocmVhZE9ubHlIaW50OiBmYWxzZSwgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlKVxuICpcbiAqIDMuICoqR3JhbnVsYXIgUGVybWlzc2lvbiBDb250cm9sKio6IFVzZXJzIGNhbiBncmFudCBSRUFEIGVuZHBvaW50IGZ1bGwgYWNjZXNzXG4gKiAgICB3aGlsZSBsb2NraW5nIGRvd24gQ1JFQVRFLCBVUERBVEUsIERFTEVURSwgYW5kIEVYRUNVVEUuIFRoaXMgZW5hYmxlcyBzYWZlXG4gKiAgICByZWFkLW9ubHkgaW50ZWdyYXRpb25zIHdpdGhvdXQgZXhwb3NpbmcgbXV0YXRpb24gY2FwYWJpbGl0aWVzLlxuICpcbiAqICMjIFdoeSBTaW5nbGUgRW5kcG9pbnQ/IChNaW5pbWFsIE1vZGUpXG4gKlxuICogVGhlIHNpbmdsZS1lbmRwb2ludCBtb2RlIHdhcyBhZGRlZCBmb3I6XG4gKlxuICogMS4gKipUb2tlbiBFZmZpY2llbmN5Kio6IH4zNTAgdG9rZW5zIHZzIH40LDMwMCB0b2tlbnMgKDkyJSByZWR1Y3Rpb24pXG4gKiAyLiAqKk11bHRpLVNlcnZlciBEZXBsb3ltZW50cyoqOiBXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgTUNQIHNlcnZlcnMsIHRva2VuXG4gKiAgICBidWRnZXRzIGNhbiBiZSBjb25zdHJhaW5lZC4gU2luZ2xlIGVuZHBvaW50IHJlZHVjZXMgb3ZlcmhlYWQuXG4gKiAzLiAqKlNpbXBsaWZpZWQgSW50ZWdyYXRpb24qKjogU29tZSBjbGllbnRzIHByZWZlciBhIHNpbmdsZSBlbnRyeSBwb2ludC5cbiAqXG4gKiBTZWN1cml0eSBpcyBtYWludGFpbmVkIHRocm91Z2ggc2VydmVyLXNpZGUgR2F0ZWtlZXBlciBlbmZvcmNlbWVudCAtIHRoZVxuICogc2VydmVyIGRldGVybWluZXMgd2hpY2ggb3BlcmF0aW9uIHR5cGUgaXMgYmVpbmcgZXhlY3V0ZWQgYW5kIGFwcGxpZXNcbiAqIGFwcHJvcHJpYXRlIHBlcm1pc3Npb24gY2hlY2tzLlxuICpcbiAqICMjIEdyYXBoUUwtU3R5bGUgSW50cm9zcGVjdGlvblxuICpcbiAqIE1DUC1BUUwgZm9sbG93cyBHcmFwaFFMIHBhdHRlcm5zIGZvciBzZWxmLWRvY3VtZW50YXRpb24uIFRvb2wgZGVzY3JpcHRpb25zXG4gKiBhcmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGZyb20gT1BFUkFUSU9OX1JPVVRFUywgZW5zdXJpbmcgdGhleSBhbHdheXMgcmVmbGVjdFxuICogdGhlIGN1cnJlbnQgYXZhaWxhYmxlIG9wZXJhdGlvbnMuXG4gKlxuICogIyMjIEludHJvc3BlY3Rpb24gRXhhbXBsZXNcbiAqXG4gKiBMaXN0IGFsbCBhdmFpbGFibGUgb3BlcmF0aW9uczpcbiAqIGBgYGpzb25cbiAqIHsgXCJvcGVyYXRpb25cIjogXCJpbnRyb3NwZWN0XCIsIFwicGFyYW1zXCI6IHsgXCJxdWVyeVwiOiBcIm9wZXJhdGlvbnNcIiB9IH1cbiAqIGBgYFxuICpcbiAqIEdldCBkZXRhaWxzIGZvciBhIHNwZWNpZmljIG9wZXJhdGlvbiAocGFyYW1ldGVycywgZXhhbXBsZXMsIHJldHVybiB0eXBlcyk6XG4gKiBgYGBqc29uXG4gKiB7IFwib3BlcmF0aW9uXCI6IFwiaW50cm9zcGVjdFwiLCBcInBhcmFtc1wiOiB7IFwicXVlcnlcIjogXCJvcGVyYXRpb25zXCIsIFwibmFtZVwiOiBcImNyZWF0ZV9lbGVtZW50XCIgfSB9XG4gKiBgYGBcbiAqXG4gKiBEaXNjb3ZlciBhdmFpbGFibGUgdHlwZXMgKGUuZy4sIEVsZW1lbnRUeXBlIGVudW0gdmFsdWVzKTpcbiAqIGBgYGpzb25cbiAqIHsgXCJvcGVyYXRpb25cIjogXCJpbnRyb3NwZWN0XCIsIFwicGFyYW1zXCI6IHsgXCJxdWVyeVwiOiBcInR5cGVzXCIsIFwibmFtZVwiOiBcIkVsZW1lbnRUeXBlXCIgfSB9XG4gKiBgYGBcbiAqXG4gKiAjIyMgRGVzaWduIFBoaWxvc29waHlcbiAqXG4gKiAtICoqU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCoqOiBPUEVSQVRJT05fUk9VVEVTIGRlZmluZXMgYWxsIG9wZXJhdGlvbnNcbiAqIC0gKipEeW5hbWljIGRlc2NyaXB0aW9ucyoqOiBBZGRpbmcgYW4gb3BlcmF0aW9uIHRvIE9QRVJBVElPTl9ST1VURVMgYXV0b21hdGljYWxseVxuICogICB1cGRhdGVzIHRvb2wgZGVzY3JpcHRpb25zIC0gbm8gbWFudWFsIHN5bmNocm9uaXphdGlvbiBuZWVkZWRcbiAqIC0gKipJbnRyb3NwZWN0aW9uLWZpcnN0Kio6IExMTXMgZGlzY292ZXIgcGFyYW1ldGVycyB2aWEgaW50cm9zcGVjdCwgbm90IHN0YXRpYyBkb2NzXG4gKiAtICoqR3JhcGhRTCBoZXJpdGFnZSoqOiBQYXR0ZXJucyBmYW1pbGlhciB0byBhbnkgTExNIHRyYWluZWQgb24gR3JhcGhRTFxuICovXG5cbmltcG9ydCB0eXBlIHsgTUNQQVFMSGFuZGxlciB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvTUNQQVFMSGFuZGxlci5qcyc7XG5pbXBvcnQgeyBVbmlmaWVkRW5kcG9pbnQgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL1VuaWZpZWRFbmRwb2ludC5qcyc7XG5pbXBvcnQgeyBnZXRPcGVyYXRpb25zRm9yRW5kcG9pbnQsIHR5cGUgQ1JVREVuZHBvaW50IH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9PcGVyYXRpb25Sb3V0ZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgVG9vbERlZmluaXRpb24sIFRvb2xIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvdHlwZXMvVG9vbFR5cGVzLmpzJztcbmltcG9ydCB7IGVudiB9IGZyb20gJy4uLy4uL2NvbmZpZy9lbnYuanMnO1xuaW1wb3J0IHsgRUxFTUVOVF9ST0xFUyB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2Vuc2VtYmxlcy9jb25zdGFudHMuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEeW5hbWljIERlc2NyaXB0aW9uIEdlbmVyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgZWxlbWVudCB0eXBlcyBhcyBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcuXG4gKiBEZXJpdmVkIGZyb20gdGhlIEVsZW1lbnRUeXBlIGVudW0gdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuICovXG5mdW5jdGlvbiBnZXRFbGVtZW50VHlwZXNTdHJpbmcoKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogR2V0IG9wZXJhdGlvbnMgZm9yIGFuIGVuZHBvaW50IGFzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZy5cbiAqIERlcml2ZWQgZnJvbSBPUEVSQVRJT05fUk9VVEVTIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS5cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uc1N0cmluZyhlbmRwb2ludDogQ1JVREVuZHBvaW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldE9wZXJhdGlvbnNGb3JFbmRwb2ludChlbmRwb2ludCkuam9pbignLCAnKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVG9vbCBTY2hlbWFcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBTaGFyZWQgaW5wdXQgc2NoZW1hIGZvciBDUlVEIG9wZXJhdGlvbnMgKGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBkZWxldGUpXG4gKiBBbGwgb3BlcmF0aW9ucyB1c2UgdGhlIE9wZXJhdGlvbklucHV0IHN0cnVjdHVyZSBmcm9tIHRoZSBHcmFwaFFMIHNjaGVtYVxuICovXG5jb25zdCBvcGVyYXRpb25JbnB1dFNjaGVtYSA9IHtcbiAgdHlwZTogXCJvYmplY3RcIiBhcyBjb25zdCxcbiAgcHJvcGVydGllczoge1xuICAgIG9wZXJhdGlvbjoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk9wZXJhdGlvbiBuYW1lIHRvIGV4ZWN1dGVcIlxuICAgIH0sXG4gICAgZWxlbWVudF90eXBlOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGFyZ2V0IGVsZW1lbnQgdHlwZSAob3B0aW9uYWwpXCJcbiAgICB9LFxuICAgIHBhcmFtczoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk9wZXJhdGlvbiBwYXJhbWV0ZXJzXCJcbiAgICB9LFxuICAgIG9wZXJhdGlvbnM6IHtcbiAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFycmF5IG9mIG9wZXJhdGlvbnMgZm9yIGJhdGNoIGV4ZWN1dGlvblwiLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG9wZXJhdGlvbjogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgZWxlbWVudF90eXBlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBwYXJhbXM6IHsgdHlwZTogXCJvYmplY3RcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVpcmVkOiBbXCJvcGVyYXRpb25cIl1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHJlcXVpcmVkOiBbXCJvcGVyYXRpb25cIiBhcyBjb25zdF1cbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRvb2wgUmVnaXN0cmF0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogR2V0IE1DUC1BUUwgdG9vbHMgZm9yIHJlZ2lzdHJhdGlvbiBpbiB0aGUgVG9vbFJlZ2lzdHJ5LlxuICpcbiAqIFJldHVybnMgZGlmZmVyZW50IHRvb2xzIGJhc2VkIG9uIE1DUF9BUUxfRU5EUE9JTlRfTU9ERSBlbnZpcm9ubWVudCB2YXJpYWJsZTpcbiAqIC0gJ2NydWRlJyAoZGVmYXVsdCk6IDUgQ1JVREUgZW5kcG9pbnRzIChDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlKSAofjQsMzAwIHRva2VucylcbiAqIC0gJ3NpbmdsZSc6IDEgdW5pZmllZCBlbmRwb2ludCAofjM1MCB0b2tlbnMpXG4gKlxuICogTm90ZTogTUNQX0FRTF9NT0RFIGlzIHN1cHBvcnRlZCBhcyBhIGRlcHJlY2F0ZWQgYWxpYXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNQ1BBUUxUb29scyhoYW5kbGVyOiBNQ1BBUUxIYW5kbGVyKTogQXJyYXk8eyB0b29sOiBUb29sRGVmaW5pdGlvbjsgaGFuZGxlcjogVG9vbEhhbmRsZXIgfT4ge1xuICAvLyBVc2UgTUNQX0FRTF9FTkRQT0lOVF9NT0RFLCBmYWxsaW5nIGJhY2sgdG8gZGVwcmVjYXRlZCBNQ1BfQVFMX01PREUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgY29uc3QgbW9kZSA9IGVudi5NQ1BfQVFMX0VORFBPSU5UX01PREUgPz8gZW52Lk1DUF9BUUxfTU9ERSA/PyAnY3J1ZGUnO1xuXG4gIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgIHJldHVybiBnZXRVbmlmaWVkVG9vbHMoaGFuZGxlcik7XG4gIH1cblxuICAvLyBEZWZhdWx0OiBDUlVERSBtb2RlICg1IGVuZHBvaW50cylcbiAgcmV0dXJuIGdldENSVURFVG9vbHMoaGFuZGxlcik7XG59XG5cbi8qKlxuICogR2V0IHRoZSB1bmlmaWVkIHNpbmdsZSBlbmRwb2ludCB0b29sIChNQ1BfQVFMX01PREU9c2luZ2xlKVxuICogVG9rZW4gZm9vdHByaW50OiB+MzAwLTQwMCB0b2tlbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VW5pZmllZFRvb2xzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlciB9PiB7XG4gIGNvbnN0IHVuaWZpZWRFbmRwb2ludCA9IG5ldyBVbmlmaWVkRW5kcG9pbnQoaGFuZGxlcik7XG5cbiAgLy8gQnVpbGQgZHluYW1pYyBkZXNjcmlwdGlvbiBmcm9tIE9QRVJBVElPTl9ST1VURVNcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBgRG9sbGhvdXNlTUNQIHVuaWZpZWQgQVBJIC0gR3JhcGhRTC1zdHlsZSBxdWVyeSBpbnRlcmZhY2UgZm9yIEFJIGVsZW1lbnQgbWFuYWdlbWVudC5cblxuQ1JVREUgT3BlcmF0aW9uczpcbi0gQ1JFQVRFOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0NSRUFURScpfVxuLSBSRUFEOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1JFQUQnKX1cbi0gVVBEQVRFOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1VQREFURScpfVxuLSBERUxFVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnREVMRVRFJyl9XG4tIEVYRUNVVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnRVhFQ1VURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2dldEVsZW1lbnRUeXBlc1N0cmluZygpfVxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImxpc3RfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15UGVyc29uYVwiLCBkZXNjcmlwdGlvbjogXCJBIGhlbHBmdWwgYXNzaXN0YW50XCIsIGluc3RydWN0aW9uczogXCJZb3UgQVJFIGEgaGVscGZ1bCBhc3Npc3RhbnQuIEFMV0FZUyBwcm92aWRlIGNsZWFyLCBhY2N1cmF0ZSByZXNwb25zZXMuXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeUFnZW50XCIsIGRlc2NyaXB0aW9uOiBcIlRhc2sgZXhlY3V0b3JcIiwgaW5zdHJ1Y3Rpb25zOiBcIkV4ZWN1dGUgZ29hbHMgbWV0aG9kaWNhbGx5LiBSZXBvcnQgcHJvZ3Jlc3MgYXQgZWFjaCBzdGVwLlwiLCBnb2FsOiB7IHRlbXBsYXRlOiBcIkNvbXBsZXRlOiB7b2JqZWN0aXZlfVwiLCBwYXJhbWV0ZXJzOiBbeyBuYW1lOiBcIm9iamVjdGl2ZVwiLCB0eXBlOiBcInN0cmluZ1wiLCByZXF1aXJlZDogdHJ1ZSB9XSB9IH0gfVxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcIm1lbW9yeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiwgZGVzY3JpcHRpb246IFwiU2Vzc2lvbiBjb250ZXh0IGFuZCBub3Rlc1wiIH0gfVxueyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGNvbnRlbnQ6IFwiUmVtZW1iZXIgdGhpcyBmYWN0XCIsIHRhZ3M6IFtcImltcG9ydGFudFwiXSB9IH1cbnsgb3BlcmF0aW9uOiBcImV4ZWN1dGVfYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeUFnZW50XCIsIHBhcmFtZXRlcnM6IHsgb2JqZWN0aXZlOiBcIlJldmlldyBjb2RlXCIgfSB9IH1cblxuR2F0ZWtlZXBlcjogU29tZSBvcGVyYXRpb25zIG1heSByZXR1cm4gYSBjb25maXJtYXRpb24gcHJvbXB0IGluc3RlYWQgb2YgZXhlY3V0aW5nIGltbWVkaWF0ZWx5LiBVc2UgY29uZmlybV9vcGVyYXRpb24gdG8gYXBwcm92ZSwgdGhlbiByZXRyeS5cblxuRGlzY292ZXIgYWxsIG9wZXJhdGlvbnM6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIgfSB9YDtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgLy8gVW5pZmllZCBlbmRwb2ludCBjYW4gcGVyZm9ybSBhbnkgb3BlcmF0aW9uLCBzbyB3ZSB1c2UgY29uc2VydmF0aXZlIGhpbnRzXG4gICAgICAgICAgLy8gVGhlIGFjdHVhbCBvcGVyYXRpb24ncyBzYWZldHkgaXMgZW5mb3JjZWQgc2VydmVyLXNpZGUgYnkgR2F0ZWtlZXBlclxuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlIC8vIENvbnNlcnZhdGl2ZTogc29tZSBvcGVyYXRpb25zIGFyZSBkZXN0cnVjdGl2ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1bmlmaWVkRW5kcG9pbnQuaGFuZGxlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgNSBDUlVERSBlbmRwb2ludCB0b29scyAoTUNQX0FRTF9FTkRQT0lOVF9NT0RFPWNydWRlLCBkZWZhdWx0KVxuICogQ1JVREUgPSBDcmVhdGUsIFJlYWQsIFVwZGF0ZSwgRGVsZXRlLCBFeGVjdXRlXG4gKiBUb2tlbiBmb290cHJpbnQ6IH40LDMwMCB0b2tlbnMgKG1lYXN1cmVkIHZpYSBDbGF1ZGUgQ29kZSAvY29udGV4dClcbiAqXG4gKiBEZXNjcmlwdGlvbnMgYXJlIGdlbmVyYXRlZCBkeW5hbWljYWxseSBmcm9tIE9QRVJBVElPTl9ST1VURVMgdG8gZW5zdXJlXG4gKiB0aGV5IGFsd2F5cyByZWZsZWN0IHRoZSBjdXJyZW50IGF2YWlsYWJsZSBvcGVyYXRpb25zLlxuICovXG5mdW5jdGlvbiBnZXRDUlVERVRvb2xzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlciB9PiB7XG4gIGNvbnN0IGVsZW1lbnRUeXBlcyA9IGdldEVsZW1lbnRUeXBlc1N0cmluZygpO1xuXG4gIHJldHVybiBbXG4gICAgLy8gbWNwX2FxbF9jcmVhdGUgLSBBZGRpdGl2ZSwgbm9uLWRlc3RydWN0aXZlIG9wZXJhdGlvbnNcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9jcmVhdGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBBZGRpdGl2ZSwgbm9uLWRlc3RydWN0aXZlIG9wZXJhdGlvbnMuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0NSRUFURScpfVxuXG5FbGVtZW50IHR5cGVzOiAke2VsZW1lbnRUeXBlc31cblxuVGhlc2Ugb3BlcmF0aW9ucyBhZGQgbmV3IGRhdGEgd2l0aG91dCByZW1vdmluZyBvciBvdmVyd3JpdGluZyBleGlzdGluZyBjb250ZW50LlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlQZXJzb25hXCIsIGRlc2NyaXB0aW9uOiBcIkEgaGVscGZ1bCBhc3Npc3RhbnRcIiwgaW5zdHJ1Y3Rpb25zOiBcIllvdSBBUkUgYSBoZWxwZnVsIGFzc2lzdGFudC4gQUxXQVlTIHByb3ZpZGUgY2xlYXIsIGFjY3VyYXRlIHJlc3BvbnNlcy5cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15QWdlbnRcIiwgZGVzY3JpcHRpb246IFwiVGFzayBleGVjdXRvclwiLCBpbnN0cnVjdGlvbnM6IFwiRXhlY3V0ZSBnb2FscyBtZXRob2RpY2FsbHkuIFJlcG9ydCBwcm9ncmVzcyBhdCBlYWNoIHN0ZXAuXCIsIGdvYWw6IHsgdGVtcGxhdGU6IFwiQ29tcGxldGU6IHtvYmplY3RpdmV9XCIsIHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwib2JqZWN0aXZlXCIsIHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH1dIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiLCBkZXNjcmlwdGlvbjogXCJTZXNzaW9uIGNvbnRleHQgYW5kIG5vdGVzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiZW5zZW1ibGVcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJteS1lbnNlbWJsZVwiLCBkZXNjcmlwdGlvbjogXCJDb21iaW5lZCBlbGVtZW50IHNldFwiLCBtZXRhZGF0YTogeyBlbGVtZW50czogW3sgZWxlbWVudF9uYW1lOiBcImV4cGVydFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCByb2xlOiBcInByaW1hcnlcIiB9LCB7IGVsZW1lbnRfbmFtZTogXCJhbmFseXNpc1wiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcm9sZTogXCJzdXBwb3J0XCIgfV0gfSB9IH1cblZhbGlkIGVuc2VtYmxlIHJvbGVzOiAke0VMRU1FTlRfUk9MRVMuam9pbignLCAnKX1cbnsgb3BlcmF0aW9uOiBcImFkZEVudHJ5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiLCBjb250ZW50OiBcIlJlbWVtYmVyIHRoaXMgZmFjdFwiLCB0YWdzOiBbXCJpbXBvcnRhbnRcIl0gfSB9XG5Ob3RlOiBhZGRFbnRyeSBjb250ZW50IHN1cHBvcnRzIG1hcmtkb3duIChoZWFkZXJzLCBsaXN0cywgYm9sZCwgdGFibGVzLCBjb2RlIGJsb2NrcykuIEVuc3VyZSBtYXJrZG93biBjb250ZW50IGlzIHByb3Blcmx5IEpTT04tZXNjYXBlZCDigJQgdXNlICR7U3RyaW5nLnJhd2BcXG5gfSBmb3IgbmV3bGluZXMsICR7U3RyaW5nLnJhd2BcXFwiYH0gZm9yIHF1b3RlcywgYW5kICR7U3RyaW5nLnJhd2BcXFxcYH0gZm9yIGJhY2tzbGFzaGVzIHdpdGhpbiB0aGUgSlNPTiBzdHJpbmcgdmFsdWUuXG5cbkV4ZWN1dGlvbiBsaWZlY3ljbGUg4oCUIHJlY29yZCBhZ2VudCBwcm9ncmVzcyAoYXBwZW5kcyBzdGVwIHJlY29yZHMsIGxpa2UgYWRkRW50cnkpOlxueyBvcGVyYXRpb246IFwicmVjb3JkX2V4ZWN1dGlvbl9zdGVwXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBzdGVwRGVzY3JpcHRpb246IFwiQW5hbHl6ZWQgZmlsZXNcIiwgb3V0Y29tZTogXCJzdWNjZXNzXCIsIGZpbmRpbmdzOiBcIkZvdW5kIDMgaXNzdWVzXCIgfSB9XG5SZXNwb25zZSBmbG93OiByZWNvcmRfZXhlY3V0aW9uX3N0ZXAgcmV0dXJucyB7IGF1dG9ub215OiB7IGNvbnRpbnVlLCBmYWN0b3JzLCBub3RpZmljYXRpb25zPyB9IH0uIENoZWNrIGF1dG9ub215LmNvbnRpbnVlIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHByb2NlZWQuIENoZWNrIGF1dG9ub215Lm5vdGlmaWNhdGlvbnMgZm9yIHBlcm1pc3Npb25fcGVuZGluZyAoZ2F0ZWtlZXBlciBibG9ja3MpLCBhdXRvbm9teV9wYXVzZSwgb3IgZGFuZ2VyX3pvbmUgYWxlcnRzIHRvIHJlbGF5IHRvIGh1bWFuIG9wZXJhdG9ycy5cblxuSW1wb3J0ICYgcG9ydGZvbGlvOlxueyBvcGVyYXRpb246IFwiaW1wb3J0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1mb3JtYXR0ZXJcIiwgZGF0YTogXCIuLi5cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImltcG9ydF9wZXJzb25hXCIsIHBhcmFtczogeyBzb3VyY2U6IFwiL3BhdGgvdG8vcGVyc29uYS5tZFwiIH0gfVxueyBvcGVyYXRpb246IFwiaW5zdGFsbF9jb2xsZWN0aW9uX2NvbnRlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIGVsZW1lbnRfbmFtZTogXCJDcmVhdGl2ZS1Xcml0ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInN1Ym1pdF9jb2xsZWN0aW9uX2NvbnRlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfdHlwZTogXCJza2lsbFwiLCBlbGVtZW50X25hbWU6IFwiY29kZS1mb3JtYXR0ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImluaXRfcG9ydGZvbGlvXCIgfVxueyBvcGVyYXRpb246IFwic3luY19wb3J0Zm9saW9cIiB9XG57IG9wZXJhdGlvbjogXCJwb3J0Zm9saW9fZWxlbWVudF9tYW5hZ2VyXCIsIHBhcmFtczogeyBhY3Rpb246IFwicHVzaFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBlbGVtZW50X25hbWU6IFwiVGVjaC1Xcml0ZXJcIiB9IH1cblxuQXV0aCAmIHZlcmlmaWNhdGlvbjpcbnsgb3BlcmF0aW9uOiBcInNldHVwX2dpdGh1Yl9hdXRoXCIgfVxueyBvcGVyYXRpb246IFwiY29uZmlndXJlX29hdXRoXCIsIHBhcmFtczogeyBjbGllbnRfaWQ6IFwieW91ci1jbGllbnQtaWRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInZlcmlmeV9jaGFsbGVuZ2VcIiwgcGFyYW1zOiB7IGNvZGU6IFwiQUJDMTIzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJyZWxlYXNlX2RlYWRsb2NrXCIgfVxueyBvcGVyYXRpb246IFwiYmVldGxlanVpY2VfYmVldGxlanVpY2VfYmVldGxlanVpY2VcIiB9XG5cbkJhdGNoIG9wZXJhdGlvbnM6IFVzZSB0aGUgb3BlcmF0aW9ucyBhcnJheSB0byBleGVjdXRlIG11bHRpcGxlIG9wZXJhdGlvbnMgc2VxdWVudGlhbGx5IGluIGEgc2luZ2xlIHJlcXVlc3QuXG57IG9wZXJhdGlvbnM6IFt7IG9wZXJhdGlvbjogXCJhZGRFbnRyeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImxvZ1wiLCBjb250ZW50OiBcIlN0ZXAgMVwiIH0gfSwgeyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJsb2dcIiwgY29udGVudDogXCJTdGVwIDJcIiB9IH1dIH1cblxuRGlzY292ZXIgcmVxdWlyZWQgcGFyYW1ldGVycyDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJjcmVhdGVfZWxlbWVudFwiIH0gfVxuRGlzY292ZXIgZWxlbWVudCBmb3JtYXQgc3BlY3MgKHJlcXVpcmVkIGZpZWxkcywgc3ludGF4LCBleGFtcGxlcykg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJmb3JtYXRcIiwgbmFtZTogXCJ0ZW1wbGF0ZVwiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVDcmVhdGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF9yZWFkIC0gU2FmZSwgcmVhZC1vbmx5IG9wZXJhdGlvbnNcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9yZWFkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgU2FmZSwgcmVhZC1vbmx5IG9wZXJhdGlvbnMuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ1JFQUQnKX1cblxuRWxlbWVudCB0eXBlczogJHtlbGVtZW50VHlwZXN9XG5cblRoZXNlIHF1ZXJpZXMgb25seSByZWFkIGRhdGEgYW5kIG5ldmVyIG1vZGlmeSBzZXJ2ZXIgc3RhdGUuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwibGlzdF9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9hY3RpdmVfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfZWxlbWVudHNcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiIH0gfVxuXG5FbGVtZW50IG9wZXJhdGlvbnM6XG57IG9wZXJhdGlvbjogXCJhY3RpdmF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiRGVmYXVsdFwiIH0gfVxueyBvcGVyYXRpb246IFwiZGVhY3RpdmF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiRGVmYXVsdFwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRfZGV0YWlsc1wiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld1wiIH0gfVxueyBvcGVyYXRpb246IFwicXVlcnlfZWxlbWVudHNcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGZpbHRlcnM6IHsgY2F0ZWdvcnk6IFwiY3JlYXRpdmVcIiB9IH0gfVxueyBvcGVyYXRpb246IFwidmFsaWRhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJ0YXNrLXBsYW5uZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInJlbmRlclwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm1lZXRpbmctbm90ZXNcIiwgdmFyaWFibGVzOiB7IGRhdGU6IFwiMjAyNi0wMy0wM1wiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJleHBvcnRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIlRlY2gtV3JpdGVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJvcGVuX3BvcnRmb2xpb19icm93c2VyXCIgfVxueyBvcGVyYXRpb246IFwib3Blbl9sb2dzXCIgfVxueyBvcGVyYXRpb246IFwib3Blbl9tZXRyaWNzXCIgfVxueyBvcGVyYXRpb246IFwib3Blbl9wZXJtaXNzaW9uc1wiIH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fc2V0dXBcIiB9XG5cbk1lbW9yeS1zcGVjaWZpYyBzZWFyY2ggKGZpbHRlciBieSB0YWdzKTpcbnsgb3BlcmF0aW9uOiBcInNlYXJjaFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiKlwiLCB0eXBlOiBcIm1lbW9yeVwiLCBmaWx0ZXJzOiB7IHRhZ3M6IFtcImltcG9ydGFudFwiXSB9IH0gfVxuXG5FeGVjdXRpb24gbGlmZWN5Y2xlIOKAlCByZWFkLW9ubHkgcXVlcmllczpcbnsgb3BlcmF0aW9uOiBcImdldF9leGVjdXRpb25fc3RhdGVcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZ2F0aGVyZWRfZGF0YVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgZ29hbElkOiBcImdvYWwtaWRcIiB9IH1cblxuQ29sbGVjdGlvbjpcbnsgb3BlcmF0aW9uOiBcImJyb3dzZV9jb2xsZWN0aW9uXCIsIHBhcmFtczogeyBzZWN0aW9uOiBcInBlcnNvbmFzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfY29sbGVjdGlvblwiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInNlYXJjaF9jb2xsZWN0aW9uX2VuaGFuY2VkXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiLCBwYWdlOiAxIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2NvbGxlY3Rpb25fY29udGVudFwiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2NvbGxlY3Rpb25fY2FjaGVfaGVhbHRoXCIgfVxuXG5Qb3J0Zm9saW86XG57IG9wZXJhdGlvbjogXCJwb3J0Zm9saW9fc3RhdHVzXCIgfVxueyBvcGVyYXRpb246IFwicG9ydGZvbGlvX2NvbmZpZ1wiIH1cbnsgb3BlcmF0aW9uOiBcInNlYXJjaF9wb3J0Zm9saW9cIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfYWxsXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiIH0gfVxuXG5TeXN0ZW06XG57IG9wZXJhdGlvbjogXCJkb2xsaG91c2VfY29uZmlnXCIgfVxueyBvcGVyYXRpb246IFwiZ2V0X2J1aWxkX2luZm9cIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfY2FjaGVfYnVkZ2V0X3JlcG9ydFwiIH1cbnsgb3BlcmF0aW9uOiBcInF1ZXJ5X2xvZ3NcIiwgcGFyYW1zOiB7IGxldmVsOiBcImVycm9yXCIsIGxpbWl0OiAxMCB9IH1cbnsgb3BlcmF0aW9uOiBcInF1ZXJ5X21ldHJpY3NcIiB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9tZXRyaWNzXCIsIHBhcmFtczogeyBuYW1lczogW1wic3lzdGVtLm1lbW9yeS4qXCJdLCB0eXBlOiBcImdhdWdlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjb252ZXJ0X3NraWxsX2Zvcm1hdFwiLCBwYXJhbXM6IHsgZGlyZWN0aW9uOiBcImFnZW50X3RvX2RvbGxob3VzZVwiLCBhZ2VudF9za2lsbDogeyBcIlNLSUxMLm1kXCI6IFwiLS0tXFxcXG5uYW1lOiBteS1za2lsbFxcXFxuZGVzY3JpcHRpb246IHRlc3RcXFxcbi0tLVxcXFxuXFxcXG5Vc2UgdGhpcyBza2lsbC5cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiY29udmVydF9za2lsbF9mb3JtYXRcIiwgcGFyYW1zOiB7IGRpcmVjdGlvbjogXCJhZ2VudF90b19kb2xsaG91c2VcIiwgc2VjdXJpdHlfbW9kZTogXCJ3YXJuXCIsIHBhdGhfbW9kZTogXCJsb3NzbGVzc1wiLCBhZ2VudF9za2lsbDogeyBcIlNLSUxMLm1kXCI6IFwiLS0tXFxcXG5uYW1lOiBteS1za2lsbFxcXFxuZGVzY3JpcHRpb246IHRlc3RcXFxcbi0tLVxcXFxuXFxcXG5Vc2UgdGhpcyBza2lsbC5cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiY29udmVydF9za2lsbF9mb3JtYXRcIiwgcGFyYW1zOiB7IGRpcmVjdGlvbjogXCJkb2xsaG91c2VfdG9fYWdlbnRcIiwgcGF0aF9tb2RlOiBcImxvc3NsZXNzXCIsIGRvbGxob3VzZV9tYXJrZG93bjogXCItLS1cXFxcbm5hbWU6IG15LXNraWxsXFxcXG5kZXNjcmlwdGlvbjogdGVzdFxcXFxuaW5zdHJ1Y3Rpb25zOiBVc2UgdGhpcyBza2lsbC5cXFxcbi0tLVxcXFxuXFxcXG4jIyMgYmluYXJpZXMvbG9nby5wbmdcXFxcbihiaW5hcnkgbGluazogLi9za2lsbHMvYmluYXJpZXMvbG9nby5wbmcpXCIgfSB9XG5cbkF1dGg6XG57IG9wZXJhdGlvbjogXCJjaGVja19naXRodWJfYXV0aFwiIH1cbnsgb3BlcmF0aW9uOiBcIm9hdXRoX2hlbHBlcl9zdGF0dXNcIiB9XG5cbkdhdGVrZWVwZXIgJiBDTEkgcG9saWNpZXM6XG57IG9wZXJhdGlvbjogXCJwZXJtaXNzaW9uX3Byb21wdFwiLCBwYXJhbXM6IHsgdG9vbDogXCJCYXNoXCIsIHByb21wdDogXCJydW4gbnBtIHRlc3RcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImV2YWx1YXRlX3Blcm1pc3Npb25cIiwgcGFyYW1zOiB7IHRvb2xfbmFtZTogXCJCYXNoXCIsIGlucHV0OiB7IGNvbW1hbmQ6IFwiZ2l0IHN0YXR1c1wiIH0sIHBsYXRmb3JtOiBcImNsYXVkZV9jb2RlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZWZmZWN0aXZlX2NsaV9wb2xpY2llc1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9wZW5kaW5nX2NsaV9hcHByb3ZhbHNcIiB9XG5cbkVuaGFuY2VkIGluZGV4OlxueyBvcGVyYXRpb246IFwiZmluZF9zaW1pbGFyX2VsZW1lbnRzXCIsIHBhcmFtczogeyBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBlbGVtZW50X25hbWU6IFwiQ3JlYXRpdmUtV3JpdGVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZWxlbWVudF9yZWxhdGlvbnNoaXBzXCIsIHBhcmFtczogeyBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJzZWFyY2hfYnlfdmVyYlwiLCBwYXJhbXM6IHsgdmVyYjogXCJyZXZpZXdcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9yZWxhdGlvbnNoaXBfc3RhdHNcIiB9XG5cbkRpc2NvdmVyIGFsbCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzOlxueyBvcGVyYXRpb246IFwiZ2V0X2NhcGFiaWxpdGllc1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9jYXBhYmlsaXRpZXNcIiwgcGFyYW1zOiB7IGNhdGVnb3J5OiBcIkVsZW1lbnQgTGlmZWN5Y2xlXCIgfSB9XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogdHJ1ZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlUmVhZChhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtY3BfYXFsX3VwZGF0ZSAtIE1vZGlmeWluZyBvcGVyYXRpb25zIHRoYXQgb3ZlcndyaXRlIGRhdGFcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF91cGRhdGVcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBNb2RpZnlpbmcgb3BlcmF0aW9ucyB0aGF0IG92ZXJ3cml0ZSBkYXRhLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdVUERBVEUnKX1cblxuRWxlbWVudCB0eXBlczogJHtlbGVtZW50VHlwZXN9XG5cblRoZXNlIG9wZXJhdGlvbnMgbW9kaWZ5IGV4aXN0aW5nIGRhdGEsIHBvdGVudGlhbGx5IG92ZXJ3cml0aW5nIHByZXZpb3VzIHZhbHVlcy5cblxuTm90ZTogTWVtb3JpZXMgYXJlIGFwcGVuZC1vbmx5IGFuZCBkbyBub3Qgc3VwcG9ydCBlZGl0X2VsZW1lbnQuIFVzZSBhZGRFbnRyeSAoQ1JFQVRFKSB0byBhZGQgbmV3IGVudHJpZXMuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGU6XG57IG9wZXJhdGlvbjogXCJlZGl0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeVBlcnNvbmFcIiwgaW5wdXQ6IHsgZGVzY3JpcHRpb246IFwiVXBkYXRlZCBkZXNjcmlwdGlvblwiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJlZGl0X2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJGcmllbmRseS1UZWFjaGVyXCIsIGlucHV0OiB7IGluc3RydWN0aW9uczogXCJVcGRhdGVkIGJlaGF2aW9yYWwgZGlyZWN0aXZlcy5cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiZWRpdF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgaW5wdXQ6IHsgaW5zdHJ1Y3Rpb25zOiBcIlVwZGF0ZWQgYWdlbnQgYmVoYXZpb3JhbCBwcm9maWxlLlwiLCBnb2FsOiB7IHRlbXBsYXRlOiBcIkNvbXBsZXRlOiB7dGFza31cIiB9IH0gfSB9XG57IG9wZXJhdGlvbjogXCJ1cGdyYWRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwidGFzay1wbGFubmVyXCIgfSB9XG5cbkRpc2NvdmVyIHJlcXVpcmVkIHBhcmFtZXRlcnMg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIsIG5hbWU6IFwiZWRpdF9lbGVtZW50XCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlVXBkYXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1jcF9hcWxfZGVsZXRlIC0gRGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucyB0aGF0IHJlbW92ZSBkYXRhXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfZGVsZXRlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucyB0aGF0IHJlbW92ZSBkYXRhLlxuXG5TdXBwb3J0ZWQgb3BlcmF0aW9uczogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdERUxFVEUnKX1cblxuRWxlbWVudCB0eXBlczogJHtlbGVtZW50VHlwZXN9XG5cblRoZXNlIG9wZXJhdGlvbnMgcmVtb3ZlIGRhdGEuIFVzZSB3aXRoIGNhdXRpb24uXG5cbuKaoO+4jyBTRUNVUklUWTogRG8gbm90IGF1dG8tYWxsb3cgdGhpcyBlbmRwb2ludCBpbiB5b3VyIGhvc3Qgc2V0dGluZ3MgKGUuZy4sIENsYXVkZSBDb2RlIHNldHRpbmdzLmpzb24pLiBFYWNoIGRlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIHJlcXVpcmUgZXhwbGljaXQgaHVtYW4gYXBwcm92YWwuIEF1dG8tYWxsb3dpbmcgYnlwYXNzZXMgdGhlIHBlci1vcGVyYXRpb24gY29uZmlybWF0aW9uIGdhdGUsIGxlYXZpbmcgb25seSBlbGVtZW50IGRlbnkgcG9saWNpZXMgYXMgcHJvdGVjdGlvbiBhZ2FpbnN0IHVuaW50ZW5kZWQgZGF0YSBsb3NzLlxuXG5RdWljayBzdGFydCBleGFtcGxlczpcbnsgb3BlcmF0aW9uOiBcImRlbGV0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiT2xkLVBlcnNvbmFcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNsZWFyXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwidGVtcC1ub3Rlc1wiIH0gfVxueyBvcGVyYXRpb246IFwiY2xlYXJfZ2l0aHViX2F1dGhcIiB9XG5cbkRpc2NvdmVyIHJlcXVpcmVkIHBhcmFtZXRlcnMg4oCUIHVzZSBtY3BfYXFsX3JlYWQ6XG57IG9wZXJhdGlvbjogXCJpbnRyb3NwZWN0XCIsIHBhcmFtczogeyBxdWVyeTogXCJvcGVyYXRpb25zXCIsIG5hbWU6IFwiZGVsZXRlX2VsZW1lbnRcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVEZWxldGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF9leGVjdXRlIC0gRXhlY3V0aW9uIGxpZmVjeWNsZSBvcGVyYXRpb25zIChDUlVERSdzICdFJylcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwibWNwX2FxbF9leGVjdXRlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRXhlY3V0aW9uIGxpZmVjeWNsZSBvcGVyYXRpb25zIGZvciBleGVjdXRhYmxlIGVsZW1lbnRzIChhZ2VudHMsIHdvcmtmbG93cywgcGlwZWxpbmVzKS5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnRVhFQ1VURScpfVxuXG5UaGVzZSBvcGVyYXRpb25zIG1hbmFnZSBydW50aW1lIGV4ZWN1dGlvbiBzdGF0ZS4gVW5saWtlIENSVUQgb3BlcmF0aW9ucyAod2hpY2ggbWFuYWdlIGRlZmluaXRpb25zKSwgRXhlY3V0ZSBvcGVyYXRpb25zIGhhbmRsZSB0aGUgZXhlY3V0aW9uIGxpZmVjeWNsZTpcbi0gZXhlY3V0ZV9hZ2VudDogU3RhcnQgYSBuZXcgZXhlY3V0aW9uIChyZXR1cm5zIGdvYWxJZCBhbmQgc3RhdGVWZXJzaW9uIGZvciB0cmFja2luZylcbi0gY29tcGxldGVfZXhlY3V0aW9uOiBTaWduYWwgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uXG4tIGNvbnRpbnVlX2V4ZWN1dGlvbjogUmVzdW1lIGZyb20gc2F2ZWQgc3RhdGVcbi0gYWJvcnRfZXhlY3V0aW9uOiBBYm9ydCBhIHJ1bm5pbmcgZXhlY3V0aW9uLCByZWplY3RpbmcgZnVydGhlciBvcGVyYXRpb25zXG4tIGNvbmZpcm1fb3BlcmF0aW9uOiBDb25maXJtIGEgcGVuZGluZyBvcGVyYXRpb24gdGhhdCByZXF1aXJlcyB1c2VyIGFwcHJvdmFsIChHYXRla2VlcGVyIGZsb3cpXG4tIGFwcHJvdmVfY2xpX3Blcm1pc3Npb246IEFwcHJvdmUgYSBwZW5kaW5nIENMSSB0b29sIHBlcm1pc3Npb24gcmVxdWVzdFxuLSBwcmVwYXJlX2hhbmRvZmY6IFNlcmlhbGl6ZSBnb2FsIHByb2dyZXNzIGludG8gYSBwb3J0YWJsZSBoYW5kb2ZmIGJsb2NrIGZvciBzZXNzaW9uIHRyYW5zZmVyXG4tIHJlc3VtZV9mcm9tX2hhbmRvZmY6IFJlc3VtZSBhZ2VudCBleGVjdXRpb24gZnJvbSBhIGhhbmRvZmYgYmxvY2sgd2l0aCBpbnRlZ3JpdHkgdmFsaWRhdGlvblxuXG5JTVBPUlRBTlQ6IEV4ZWN1dGUgb3BlcmF0aW9ucyBhcmUgcG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUgKGFnZW50cyBjYW4gcGVyZm9ybSBhbnkgYWN0aW9uKSBhbmQgbm9uLWlkZW1wb3RlbnQgKGNhbGxpbmcgZXhlY3V0ZV9hZ2VudCB0d2ljZSBjcmVhdGVzIHR3byBzZXBhcmF0ZSBleGVjdXRpb25zKS5cblxu4pqg77iPIFNFQ1VSSVRZOiBEbyBub3QgYXV0by1hbGxvdyB0aGlzIGVuZHBvaW50IGluIHlvdXIgaG9zdCBzZXR0aW5ncyAoZS5nLiwgQ2xhdWRlIENvZGUgc2V0dGluZ3MuanNvbikuIEVhY2ggZXhlY3V0aW9uIHNob3VsZCByZXF1aXJlIGV4cGxpY2l0IGh1bWFuIGFwcHJvdmFsLiBBdXRvLWFsbG93aW5nIGJ5cGFzc2VzIHRoZSBwZXItb3BlcmF0aW9uIGNvbmZpcm1hdGlvbiBnYXRlLiBXaGlsZSBEYW5nZXJab25lIHZlcmlmaWNhdGlvbiBhbmQgZWxlbWVudCBkZW55IHBvbGljaWVzIHN0aWxsIHByb3ZpZGUgcHJvdGVjdGlvbiwgdGhlIHByaW1hcnkgaHVtYW4gcmV2aWV3IGNoZWNrcG9pbnQgaXMgbG9zdC5cblxuUmVzcG9uc2UgZmxvdzogZXhlY3V0ZV9hZ2VudCByZXR1cm5zIHsgZ29hbElkLCBzdGF0ZVZlcnNpb24sIGFjdGl2ZUVsZW1lbnRzLCBzYWZldHlUaWVyLCAuLi4gfS4gVXNlIGdvYWxJZCB3aXRoIHJlY29yZF9leGVjdXRpb25fc3RlcCBhbmQgY29tcGxldGVfZXhlY3V0aW9uLiBzdGF0ZVZlcnNpb24gZW5hYmxlcyBvcHRpbWlzdGljIGxvY2tpbmcuIHJlY29yZF9leGVjdXRpb25fc3RlcCByZXR1cm5zIHsgYXV0b25vbXk6IHsgY29udGludWUsIG5vdGlmaWNhdGlvbnM/IH0gfSDigJQgY2hlY2sgbm90aWZpY2F0aW9ucyBmb3IgZ2F0ZWtlZXBlciBibG9ja3MgYW5kIGRhbmdlciB6b25lIGFsZXJ0cy5cblxuUXVpY2sgc3RhcnQgZXhhbXBsZXM6XG57IG9wZXJhdGlvbjogXCJleGVjdXRlX2FnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBwYXJhbWV0ZXJzOiB7IG9iamVjdGl2ZTogXCJSZXZpZXcgY29kZVwiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjb21wbGV0ZV9leGVjdXRpb25cIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIG91dGNvbWU6IFwic3VjY2Vzc1wiLCBzdW1tYXJ5OiBcIkNvbXBsZXRlZCByZXZpZXdcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImFib3J0X2V4ZWN1dGlvblwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImRhdGEtY29sbGVjdG9yXCIsIHJlYXNvbjogXCJVc2VyIHJlcXVlc3RlZCBjYW5jZWxsYXRpb25cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnRpbnVlX2V4ZWN1dGlvblwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbmZpcm1fb3BlcmF0aW9uXCIsIHBhcmFtczogeyBvcGVyYXRpb246IFwiZXhlY3V0ZV9hZ2VudFwiIH0gfVxueyBvcGVyYXRpb246IFwiYXBwcm92ZV9jbGlfcGVybWlzc2lvblwiLCBwYXJhbXM6IHsgcmVxdWVzdF9pZDogXCJyZXEtMTIzXCIsIGRlY2lzaW9uOiBcImFsbG93XCIgfSB9XG57IG9wZXJhdGlvbjogXCJwcmVwYXJlX2hhbmRvZmZcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJyZXN1bWVfZnJvbV9oYW5kb2ZmXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBoYW5kb2ZmX2Jsb2NrOiBcIi4uLlwiIH0gfVxuXG5EaXNjb3ZlciByZXF1aXJlZCBwYXJhbWV0ZXJzIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiLCBuYW1lOiBcImV4ZWN1dGVfYWdlbnRcIiB9IH1gLFxuICAgICAgICBpbnB1dFNjaGVtYTogb3BlcmF0aW9uSW5wdXRTY2hlbWEsXG4gICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUgIC8vIFBvdGVudGlhbGx5IGRlc3RydWN0aXZlIC0gYWdlbnRzIGNhbiBwZXJmb3JtIGFueSBhY3Rpb25cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChhcmdzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5oYW5kbGVFeGVjdXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuIl19
|
|
533
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQVFMVG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Rvb2xzL01DUEFRTFRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXRFLCtFQUErRTtBQUMvRSxpQ0FBaUM7QUFDakMsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILFNBQVMscUJBQXFCO0lBQzVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQUMsUUFBc0I7SUFDakQsT0FBTyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxjQUFjO0FBQ2QsK0VBQStFO0FBRS9FOzs7R0FHRztBQUNILE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsSUFBSSxFQUFFLFFBQWlCO0lBQ3ZCLFVBQVUsRUFBRTtRQUNWLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLDJCQUEyQjtTQUN6QztRQUNELFlBQVksRUFBRTtZQUNaLElBQUksRUFB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QUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRCxPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt5QkFDdEM7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRjtRQUVELGlFQUFpRTtRQUNqRTtZQUNFLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixXQUFXLEVBQUU7O3dCQUVHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0ZBNkI4QjtnQkFDNUUsV0FBVyxFQUFFLG9CQUFvQjtnQkFDakMsV0FBVyxFQUFFO29CQUNYLFlBQVksRUFBRSxLQUFLO29CQUNuQixlQUFlLEVBQUUsSUFBSSxDQUFFLDBEQUEwRDtpQkFDbEY7YUFDRjtZQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBUyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakQsT0FBTztvQkFDTCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7eUJBQ3RDO3FCQUNGO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTUNQLUFRTCBUb29scyAtIFVuaWZpZWQgcXVlcnkgaW50ZXJmYWNlIGZvciBBSSBhZ2VudHNcbiAqXG4gKiBQcm92aWRlcyB0d28gZW5kcG9pbnQgbW9kZXMgY29uZmlndXJhYmxlIHZpYSBNQ1BfQVFMX0VORFBPSU5UX01PREUgZW52aXJvbm1lbnQgdmFyaWFibGU6XG4gKlxuICogIyMgTW9kZSAxOiBDUlVERSBFbmRwb2ludHMgKERlZmF1bHQpIC0gTUNQX0FRTF9FTkRQT0lOVF9NT0RFPWNydWRlXG4gKiA1IHRvb2xzOiBtY3BfYXFsX2NyZWF0ZSwgbWNwX2FxbF9yZWFkLCBtY3BfYXFsX3VwZGF0ZSwgbWNwX2FxbF9kZWxldGUsIG1jcF9hcWxfZXhlY3V0ZSAofjQsMzAwIHRva2VucylcbiAqXG4gKiAjIyBNb2RlIDI6IFNpbmdsZSBFbmRwb2ludCAoTWluaW1hbCkgLSBNQ1BfQVFMX0VORFBPSU5UX01PREU9c2luZ2xlXG4gKiAxIHRvb2w6IG1jcF9hcWwgKH4zNTAgdG9rZW5zKVxuICogSWRlYWwgZm9yIG11bHRpLXNlcnZlciBkZXBsb3ltZW50cyB3aGVyZSB0b2tlbiBidWRnZXQgaXMgY29uc3RyYWluZWQuXG4gKlxuICogTm90ZTogVGhlc2UgdG9vbHMgYXJlIG9ubHkgcmVnaXN0ZXJlZCB3aGVuIE1DUF9JTlRFUkZBQ0VfTU9ERT1tY3BhcWwgKGRlZmF1bHQpLlxuICogV2hlbiBNQ1BfSU5URVJGQUNFX01PREU9ZGlzY3JldGUsIGRpc2NyZXRlIHRvb2xzIGFyZSByZWdpc3RlcmVkIGluc3RlYWQuXG4gKlxuICogIyMgV2h5IDUgQ1JVREUgRW5kcG9pbnRzPyAoRGVmYXVsdCBNb2RlKVxuICpcbiAqIFRoZSA1LWVuZHBvaW50IENSVURFIHBhdHRlcm4gKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGUpIHdhcyBjaG9zZW4gZm9yOlxuICpcbiAqIDEuICoqVXNlciBDb21wcmVoZW5zaW9uKio6IENSVURFIGV4dGVuZHMgQ1JVRCB3aXRoIEV4ZWN1dGUgZm9yIG5vbi1pZGVtcG90ZW50XG4gKiAgICBvcGVyYXRpb25zLCBtYWtpbmcgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVhc29uIGFib3V0IHdoYXQgZWFjaCBlbmRwb2ludCBjYW4gZG8uXG4gKlxuICogMi4gKipQbGF0Zm9ybSBBbm5vdGF0aW9ucyoqOiBNQ1AgcGxhdGZvcm1zIGxpa2UgQ2hhdEdQVCdzIGFwcHMgcmVxdWlyZVxuICogICAgdG9vbCBhbm5vdGF0aW9ucyB0aGF0IGRlc2NyaWJlIHNhZmV0eSBhbmQgZGVzdHJ1Y3RpdmVuZXNzLiBUaGUgNS1lbmRwb2ludFxuICogICAgc3BsaXQgbWFwcyBkaXJlY3RseSB0byBkaXN0aW5jdCBwZXJtaXNzaW9uIGxldmVsczpcbiAqICAgIC0gQ1JFQVRFOiBhZGRpdGl2ZSwgbm9uLWRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IGZhbHNlKVxuICogICAgLSBSRUFEOiBzYWZlLCByZWFkLW9ubHkgKHJlYWRPbmx5SGludDogdHJ1ZSwgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZSlcbiAqICAgIC0gVVBEQVRFOiBtb2RpZnlpbmcsIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUpXG4gKiAgICAtIERFTEVURTogZGVzdHJ1Y3RpdmUgKHJlYWRPbmx5SGludDogZmFsc2UsIGRlc3RydWN0aXZlSGludDogdHJ1ZSlcbiAqICAgIC0gRVhFQ1VURTogbm9uLWlkZW1wb3RlbnQsIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlIChyZWFkT25seUhpbnQ6IGZhbHNlLCBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUpXG4gKlxuICogMy4gKipHcmFudWxhciBQZXJtaXNzaW9uIENvbnRyb2wqKjogVXNlcnMgY2FuIGdyYW50IFJFQUQgZW5kcG9pbnQgZnVsbCBhY2Nlc3NcbiAqICAgIHdoaWxlIGxvY2tpbmcgZG93biBDUkVBVEUsIFVQREFURSwgREVMRVRFLCBhbmQgRVhFQ1VURS4gVGhpcyBlbmFibGVzIHNhZmVcbiAqICAgIHJlYWQtb25seSBpbnRlZ3JhdGlvbnMgd2l0aG91dCBleHBvc2luZyBtdXRhdGlvbiBjYXBhYmlsaXRpZXMuXG4gKlxuICogIyMgV2h5IFNpbmdsZSBFbmRwb2ludD8gKE1pbmltYWwgTW9kZSlcbiAqXG4gKiBUaGUgc2luZ2xlLWVuZHBvaW50IG1vZGUgd2FzIGFkZGVkIGZvcjpcbiAqXG4gKiAxLiAqKlRva2VuIEVmZmljaWVuY3kqKjogfjM1MCB0b2tlbnMgdnMgfjQsMzAwIHRva2VucyAoOTIlIHJlZHVjdGlvbilcbiAqIDIuICoqTXVsdGktU2VydmVyIERlcGxveW1lbnRzKio6IFdoZW4gcnVubmluZyBtdWx0aXBsZSBNQ1Agc2VydmVycywgdG9rZW5cbiAqICAgIGJ1ZGdldHMgY2FuIGJlIGNvbnN0cmFpbmVkLiBTaW5nbGUgZW5kcG9pbnQgcmVkdWNlcyBvdmVyaGVhZC5cbiAqIDMuICoqU2ltcGxpZmllZCBJbnRlZ3JhdGlvbioqOiBTb21lIGNsaWVudHMgcHJlZmVyIGEgc2luZ2xlIGVudHJ5IHBvaW50LlxuICpcbiAqIFNlY3VyaXR5IGlzIG1haW50YWluZWQgdGhyb3VnaCBzZXJ2ZXItc2lkZSBHYXRla2VlcGVyIGVuZm9yY2VtZW50IC0gdGhlXG4gKiBzZXJ2ZXIgZGV0ZXJtaW5lcyB3aGljaCBvcGVyYXRpb24gdHlwZSBpcyBiZWluZyBleGVjdXRlZCBhbmQgYXBwbGllc1xuICogYXBwcm9wcmlhdGUgcGVybWlzc2lvbiBjaGVja3MuXG4gKlxuICogIyMgR3JhcGhRTC1TdHlsZSBJbnRyb3NwZWN0aW9uXG4gKlxuICogTUNQLUFRTCBmb2xsb3dzIEdyYXBoUUwgcGF0dGVybnMgZm9yIHNlbGYtZG9jdW1lbnRhdGlvbi4gVG9vbCBkZXNjcmlwdGlvbnNcbiAqIGFyZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkgZnJvbSBPUEVSQVRJT05fUk9VVEVTLCBlbnN1cmluZyB0aGV5IGFsd2F5cyByZWZsZWN0XG4gKiB0aGUgY3VycmVudCBhdmFpbGFibGUgb3BlcmF0aW9ucy5cbiAqXG4gKiAjIyMgSW50cm9zcGVjdGlvbiBFeGFtcGxlc1xuICpcbiAqIExpc3QgYWxsIGF2YWlsYWJsZSBvcGVyYXRpb25zOlxuICogYGBganNvblxuICogeyBcIm9wZXJhdGlvblwiOiBcImludHJvc3BlY3RcIiwgXCJwYXJhbXNcIjogeyBcInF1ZXJ5XCI6IFwib3BlcmF0aW9uc1wiIH0gfVxuICogYGBgXG4gKlxuICogR2V0IGRldGFpbHMgZm9yIGEgc3BlY2lmaWMgb3BlcmF0aW9uIChwYXJhbWV0ZXJzLCBleGFtcGxlcywgcmV0dXJuIHR5cGVzKTpcbiAqIGBgYGpzb25cbiAqIHsgXCJvcGVyYXRpb25cIjogXCJpbnRyb3NwZWN0XCIsIFwicGFyYW1zXCI6IHsgXCJxdWVyeVwiOiBcIm9wZXJhdGlvbnNcIiwgXCJuYW1lXCI6IFwiY3JlYXRlX2VsZW1lbnRcIiB9IH1cbiAqIGBgYFxuICpcbiAqIERpc2NvdmVyIGF2YWlsYWJsZSB0eXBlcyAoZS5nLiwgRWxlbWVudFR5cGUgZW51bSB2YWx1ZXMpOlxuICogYGBganNvblxuICogeyBcIm9wZXJhdGlvblwiOiBcImludHJvc3BlY3RcIiwgXCJwYXJhbXNcIjogeyBcInF1ZXJ5XCI6IFwidHlwZXNcIiwgXCJuYW1lXCI6IFwiRWxlbWVudFR5cGVcIiB9IH1cbiAqIGBgYFxuICpcbiAqICMjIyBEZXNpZ24gUGhpbG9zb3BoeVxuICpcbiAqIC0gKipTaW5nbGUgc291cmNlIG9mIHRydXRoKio6IE9QRVJBVElPTl9ST1VURVMgZGVmaW5lcyBhbGwgb3BlcmF0aW9uc1xuICogLSAqKkR5bmFtaWMgZGVzY3JpcHRpb25zKio6IEFkZGluZyBhbiBvcGVyYXRpb24gdG8gT1BFUkFUSU9OX1JPVVRFUyBhdXRvbWF0aWNhbGx5XG4gKiAgIHVwZGF0ZXMgdG9vbCBkZXNjcmlwdGlvbnMgLSBubyBtYW51YWwgc3luY2hyb25pemF0aW9uIG5lZWRlZFxuICogLSAqKkludHJvc3BlY3Rpb24tZmlyc3QqKjogTExNcyBkaXNjb3ZlciBwYXJhbWV0ZXJzIHZpYSBpbnRyb3NwZWN0LCBub3Qgc3RhdGljIGRvY3NcbiAqIC0gKipHcmFwaFFMIGhlcml0YWdlKio6IFBhdHRlcm5zIGZhbWlsaWFyIHRvIGFueSBMTE0gdHJhaW5lZCBvbiBHcmFwaFFMXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBNQ1BBUUxIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvbWNwLWFxbC9NQ1BBUUxIYW5kbGVyLmpzJztcbmltcG9ydCB7IFVuaWZpZWRFbmRwb2ludCB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvVW5pZmllZEVuZHBvaW50LmpzJztcbmltcG9ydCB7IGdldE9wZXJhdGlvbnNGb3JFbmRwb2ludCwgdHlwZSBDUlVERW5kcG9pbnQgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL09wZXJhdGlvblJvdXRlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL21jcC1hcWwvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBUb29sRGVmaW5pdGlvbiwgVG9vbEhhbmRsZXIgfSBmcm9tICcuLi8uLi9oYW5kbGVycy90eXBlcy9Ub29sVHlwZXMuanMnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vY29uZmlnL2Vudi5qcyc7XG5pbXBvcnQgeyBFTEVNRU5UX1JPTEVTIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvZW5zZW1ibGVzL2NvbnN0YW50cy5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIER5bmFtaWMgRGVzY3JpcHRpb24gR2VuZXJhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdldCBlbGVtZW50IHR5cGVzIGFzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZy5cbiAqIERlcml2ZWQgZnJvbSB0aGUgRWxlbWVudFR5cGUgZW51bSB0byBlbnN1cmUgY29uc2lzdGVuY3kuXG4gKi9cbmZ1bmN0aW9uIGdldEVsZW1lbnRUeXBlc1N0cmluZygpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBHZXQgb3BlcmF0aW9ucyBmb3IgYW4gZW5kcG9pbnQgYXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nLlxuICogRGVyaXZlZCBmcm9tIE9QRVJBVElPTl9ST1VURVMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25zU3RyaW5nKGVuZHBvaW50OiBDUlVERW5kcG9pbnQpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0T3BlcmF0aW9uc0ZvckVuZHBvaW50KGVuZHBvaW50KS5qb2luKCcsICcpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUb29sIFNjaGVtYVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFNoYXJlZCBpbnB1dCBzY2hlbWEgZm9yIENSVUQgb3BlcmF0aW9ucyAoY3JlYXRlLCByZWFkLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEFsbCBvcGVyYXRpb25zIHVzZSB0aGUgT3BlcmF0aW9uSW5wdXQgc3RydWN0dXJlIGZyb20gdGhlIEdyYXBoUUwgc2NoZW1hXG4gKi9cbmNvbnN0IG9wZXJhdGlvbklucHV0U2NoZW1hID0ge1xuICB0eXBlOiBcIm9iamVjdFwiIGFzIGNvbnN0LFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgb3BlcmF0aW9uOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiT3BlcmF0aW9uIG5hbWUgdG8gZXhlY3V0ZVwiXG4gICAgfSxcbiAgICBlbGVtZW50X3R5cGU6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUYXJnZXQgZWxlbWVudCB0eXBlIChvcHRpb25hbClcIlxuICAgIH0sXG4gICAgcGFyYW1zOiB7XG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiT3BlcmF0aW9uIHBhcmFtZXRlcnNcIlxuICAgIH0sXG4gICAgb3BlcmF0aW9uczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQXJyYXkgb2Ygb3BlcmF0aW9ucyBmb3IgYmF0Y2ggZXhlY3V0aW9uXCIsXG4gICAgICBpdGVtczoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgb3BlcmF0aW9uOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBlbGVtZW50X3R5cGU6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIHBhcmFtczogeyB0eXBlOiBcIm9iamVjdFwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFtcIm9wZXJhdGlvblwiXVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcmVxdWlyZWQ6IFtcIm9wZXJhdGlvblwiIGFzIGNvbnN0XVxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVG9vbCBSZWdpc3RyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZXQgTUNQLUFRTCB0b29scyBmb3IgcmVnaXN0cmF0aW9uIGluIHRoZSBUb29sUmVnaXN0cnkuXG4gKlxuICogUmV0dXJucyBkaWZmZXJlbnQgdG9vbHMgYmFzZWQgb24gTUNQX0FRTF9FTkRQT0lOVF9NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlOlxuICogLSAnY3J1ZGUnIChkZWZhdWx0KTogNSBDUlVERSBlbmRwb2ludHMgKENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGUpICh+NCwzMDAgdG9rZW5zKVxuICogLSAnc2luZ2xlJzogMSB1bmlmaWVkIGVuZHBvaW50ICh+MzUwIHRva2VucylcbiAqXG4gKiBOb3RlOiBNQ1BfQVFMX01PREUgaXMgc3VwcG9ydGVkIGFzIGEgZGVwcmVjYXRlZCBhbGlhcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1DUEFRTFRvb2xzKGhhbmRsZXI6IE1DUEFRTEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBUb29sSGFuZGxlciB9PiB7XG4gIC8vIFVzZSBNQ1BfQVFMX0VORFBPSU5UX01PREUsIGZhbGxpbmcgYmFjayB0byBkZXByZWNhdGVkIE1DUF9BUUxfTU9ERSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICBjb25zdCBtb2RlID0gZW52Lk1DUF9BUUxfRU5EUE9JTlRfTU9ERSA/PyBlbnYuTUNQX0FRTF9NT0RFID8/ICdjcnVkZSc7XG5cbiAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgcmV0dXJuIGdldFVuaWZpZWRUb29scyhoYW5kbGVyKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQ6IENSVURFIG1vZGUgKDUgZW5kcG9pbnRzKVxuICByZXR1cm4gZ2V0Q1JVREVUb29scyhoYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHVuaWZpZWQgc2luZ2xlIGVuZHBvaW50IHRvb2wgKE1DUF9BUUxfTU9ERT1zaW5nbGUpXG4gKiBUb2tlbiBmb290cHJpbnQ6IH4zMDAtNDAwIHRva2Vuc1xuICovXG5mdW5jdGlvbiBnZXRVbmlmaWVkVG9vbHMoaGFuZGxlcjogTUNQQVFMSGFuZGxlcik6IEFycmF5PHsgdG9vbDogVG9vbERlZmluaXRpb247IGhhbmRsZXI6IFRvb2xIYW5kbGVyIH0+IHtcbiAgY29uc3QgdW5pZmllZEVuZHBvaW50ID0gbmV3IFVuaWZpZWRFbmRwb2ludChoYW5kbGVyKTtcblxuICAvLyBCdWlsZCBkeW5hbWljIGRlc2NyaXB0aW9uIGZyb20gT1BFUkFUSU9OX1JPVVRFU1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IGBEb2xsaG91c2VNQ1AgdW5pZmllZCBBUEkgLSBHcmFwaFFMLXN0eWxlIHF1ZXJ5IGludGVyZmFjZSBmb3IgQUkgZWxlbWVudCBtYW5hZ2VtZW50LlxuXG5DUlVERSBPcGVyYXRpb25zOlxuLSBDUkVBVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnQ1JFQVRFJyl9XG4tIFJFQUQ6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnUkVBRCcpfVxuLSBVUERBVEU6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnVVBEQVRFJyl9XG4tIERFTEVURTogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdERUxFVEUnKX1cbi0gRVhFQ1VURTogJHtnZXRPcGVyYXRpb25zU3RyaW5nKCdFWEVDVVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7Z2V0RWxlbWVudFR5cGVzU3RyaW5nKCl9XG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwibGlzdF9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiIH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlQZXJzb25hXCIsIGRlc2NyaXB0aW9uOiBcIkEgaGVscGZ1bCBhc3Npc3RhbnRcIiwgaW5zdHJ1Y3Rpb25zOiBcIllvdSBBUkUgYSBoZWxwZnVsIGFzc2lzdGFudC4gQUxXQVlTIHByb3ZpZGUgY2xlYXIsIGFjY3VyYXRlIHJlc3BvbnNlcy5cIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15QWdlbnRcIiwgZGVzY3JpcHRpb246IFwiVGFzayBleGVjdXRvclwiLCBpbnN0cnVjdGlvbnM6IFwiRXhlY3V0ZSBnb2FscyBtZXRob2RpY2FsbHkuIFJlcG9ydCBwcm9ncmVzcyBhdCBlYWNoIHN0ZXAuXCIsIGdvYWw6IHsgdGVtcGxhdGU6IFwiQ29tcGxldGU6IHtvYmplY3RpdmV9XCIsIHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwib2JqZWN0aXZlXCIsIHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH1dIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjcmVhdGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwibWVtb3J5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwic2Vzc2lvbi1ub3Rlc1wiLCBkZXNjcmlwdGlvbjogXCJTZXNzaW9uIGNvbnRleHQgYW5kIG5vdGVzXCIgfSB9XG57IG9wZXJhdGlvbjogXCJhZGRFbnRyeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInNlc3Npb24tbm90ZXNcIiwgY29udGVudDogXCJSZW1lbWJlciB0aGlzIGZhY3RcIiwgdGFnczogW1wiaW1wb3J0YW50XCJdIH0gfVxueyBvcGVyYXRpb246IFwiZXhlY3V0ZV9hZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk15QWdlbnRcIiwgcGFyYW1ldGVyczogeyBvYmplY3RpdmU6IFwiUmV2aWV3IGNvZGVcIiB9IH0gfVxuXG5HYXRla2VlcGVyOiBTb21lIG9wZXJhdGlvbnMgbWF5IHJldHVybiBhIGNvbmZpcm1hdGlvbiBwcm9tcHQgaW5zdGVhZCBvZiBleGVjdXRpbmcgaW1tZWRpYXRlbHkuIFVzZSBjb25maXJtX29wZXJhdGlvbiB0byBhcHByb3ZlLCB0aGVuIHJldHJ5LlxuXG5EaXNjb3ZlciBhbGwgb3BlcmF0aW9uczpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiB9IH1gO1xuXG4gIHJldHVybiBbXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxcIixcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAvLyBVbmlmaWVkIGVuZHBvaW50IGNhbiBwZXJmb3JtIGFueSBvcGVyYXRpb24sIHNvIHdlIHVzZSBjb25zZXJ2YXRpdmUgaGludHNcbiAgICAgICAgICAvLyBUaGUgYWN0dWFsIG9wZXJhdGlvbidzIHNhZmV0eSBpcyBlbmZvcmNlZCBzZXJ2ZXItc2lkZSBieSBHYXRla2VlcGVyXG4gICAgICAgICAgcmVhZE9ubHlIaW50OiBmYWxzZSxcbiAgICAgICAgICBkZXN0cnVjdGl2ZUhpbnQ6IHRydWUgLy8gQ29uc2VydmF0aXZlOiBzb21lIG9wZXJhdGlvbnMgYXJlIGRlc3RydWN0aXZlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHVuaWZpZWRFbmRwb2ludC5oYW5kbGUoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbi8qKlxuICogR2V0IHRoZSA1IENSVURFIGVuZHBvaW50IHRvb2xzIChNQ1BfQVFMX0VORFBPSU5UX01PREU9Y3J1ZGUsIGRlZmF1bHQpXG4gKiBDUlVERSA9IENyZWF0ZSwgUmVhZCwgVXBkYXRlLCBEZWxldGUsIEV4ZWN1dGVcbiAqIFRva2VuIGZvb3RwcmludDogfjQsMzAwIHRva2VucyAobWVhc3VyZWQgdmlhIENsYXVkZSBDb2RlIC9jb250ZXh0KVxuICpcbiAqIERlc2NyaXB0aW9ucyBhcmUgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGZyb20gT1BFUkFUSU9OX1JPVVRFUyB0byBlbnN1cmVcbiAqIHRoZXkgYWx3YXlzIHJlZmxlY3QgdGhlIGN1cnJlbnQgYXZhaWxhYmxlIG9wZXJhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldENSVURFVG9vbHMoaGFuZGxlcjogTUNQQVFMSGFuZGxlcik6IEFycmF5PHsgdG9vbDogVG9vbERlZmluaXRpb247IGhhbmRsZXI6IFRvb2xIYW5kbGVyIH0+IHtcbiAgY29uc3QgZWxlbWVudFR5cGVzID0gZ2V0RWxlbWVudFR5cGVzU3RyaW5nKCk7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBtY3BfYXFsX2NyZWF0ZSAtIEFkZGl0aXZlLCBub24tZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uc1xuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsX2NyZWF0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEFkZGl0aXZlLCBub24tZGVzdHJ1Y3RpdmUgb3BlcmF0aW9ucy5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnQ1JFQVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBvcGVyYXRpb25zIGFkZCBuZXcgZGF0YSB3aXRob3V0IHJlbW92aW5nIG9yIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGNvbnRlbnQuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJNeVBlcnNvbmFcIiwgZGVzY3JpcHRpb246IFwiQSBoZWxwZnVsIGFzc2lzdGFudFwiLCBpbnN0cnVjdGlvbnM6IFwiWW91IEFSRSBhIGhlbHBmdWwgYXNzaXN0YW50LiBBTFdBWVMgcHJvdmlkZSBjbGVhciwgYWNjdXJhdGUgcmVzcG9uc2VzLlwiIH0gfVxueyBvcGVyYXRpb246IFwiY3JlYXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcImFnZW50XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlBZ2VudFwiLCBkZXNjcmlwdGlvbjogXCJUYXNrIGV4ZWN1dG9yXCIsIGluc3RydWN0aW9uczogXCJFeGVjdXRlIGdvYWxzIG1ldGhvZGljYWxseS4gUmVwb3J0IHByb2dyZXNzIGF0IGVhY2ggc3RlcC5cIiwgZ29hbDogeyB0ZW1wbGF0ZTogXCJDb21wbGV0ZToge29iamVjdGl2ZX1cIiwgcGFyYW1ldGVyczogW3sgbmFtZTogXCJvYmplY3RpdmVcIiwgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUgfV0gfSB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJtZW1vcnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGRlc2NyaXB0aW9uOiBcIlNlc3Npb24gY29udGV4dCBhbmQgbm90ZXNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNyZWF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJlbnNlbWJsZVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIm15LWVuc2VtYmxlXCIsIGRlc2NyaXB0aW9uOiBcIkNvbWJpbmVkIGVsZW1lbnQgc2V0XCIsIG1ldGFkYXRhOiB7IGVsZW1lbnRzOiBbeyBlbGVtZW50X25hbWU6IFwiZXhwZXJ0XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHJvbGU6IFwicHJpbWFyeVwiIH0sIHsgZWxlbWVudF9uYW1lOiBcImFuYWx5c2lzXCIsIGVsZW1lbnRfdHlwZTogXCJza2lsbFwiLCByb2xlOiBcInN1cHBvcnRcIiB9XSB9IH0gfVxuVmFsaWQgZW5zZW1ibGUgcm9sZXM6ICR7RUxFTUVOVF9ST0xFUy5qb2luKCcsICcpfVxueyBvcGVyYXRpb246IFwiYWRkRW50cnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIsIGNvbnRlbnQ6IFwiUmVtZW1iZXIgdGhpcyBmYWN0XCIsIHRhZ3M6IFtcImltcG9ydGFudFwiXSB9IH1cbk5vdGU6IGFkZEVudHJ5IGNvbnRlbnQgc3VwcG9ydHMgbWFya2Rvd24gKGhlYWRlcnMsIGxpc3RzLCBib2xkLCB0YWJsZXMsIGNvZGUgYmxvY2tzKS4gRW5zdXJlIG1hcmtkb3duIGNvbnRlbnQgaXMgcHJvcGVybHkgSlNPTi1lc2NhcGVkIOKAlCB1c2UgJHtTdHJpbmcucmF3YFxcbmB9IGZvciBuZXdsaW5lcywgJHtTdHJpbmcucmF3YFxcXCJgfSBmb3IgcXVvdGVzLCBhbmQgJHtTdHJpbmcucmF3YFxcXFxgfSBmb3IgYmFja3NsYXNoZXMgd2l0aGluIHRoZSBKU09OIHN0cmluZyB2YWx1ZS5cblxuRXhlY3V0aW9uIGxpZmVjeWNsZSDigJQgcmVjb3JkIGFnZW50IHByb2dyZXNzIChhcHBlbmRzIHN0ZXAgcmVjb3JkcywgbGlrZSBhZGRFbnRyeSk6XG57IG9wZXJhdGlvbjogXCJyZWNvcmRfZXhlY3V0aW9uX3N0ZXBcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIHN0ZXBEZXNjcmlwdGlvbjogXCJBbmFseXplZCBmaWxlc1wiLCBvdXRjb21lOiBcInN1Y2Nlc3NcIiwgZmluZGluZ3M6IFwiRm91bmQgMyBpc3N1ZXNcIiB9IH1cblJlc3BvbnNlIGZsb3c6IHJlY29yZF9leGVjdXRpb25fc3RlcCByZXR1cm5zIHsgYXV0b25vbXk6IHsgY29udGludWUsIGZhY3RvcnMsIG5vdGlmaWNhdGlvbnM/IH0gfS4gQ2hlY2sgYXV0b25vbXkuY29udGludWUgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcHJvY2VlZC4gQ2hlY2sgYXV0b25vbXkubm90aWZpY2F0aW9ucyBmb3IgcGVybWlzc2lvbl9wZW5kaW5nIChnYXRla2VlcGVyIGJsb2NrcyksIGF1dG9ub215X3BhdXNlLCBvciBkYW5nZXJfem9uZSBhbGVydHMgdG8gcmVsYXkgdG8gaHVtYW4gb3BlcmF0b3JzLlxuXG5JbXBvcnQgJiBwb3J0Zm9saW86XG57IG9wZXJhdGlvbjogXCJpbXBvcnRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwic2tpbGxcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLWZvcm1hdHRlclwiLCBkYXRhOiBcIi4uLlwiIH0gfVxueyBvcGVyYXRpb246IFwiaW1wb3J0X3BlcnNvbmFcIiwgcGFyYW1zOiB7IHNvdXJjZTogXCIvcGF0aC90by9wZXJzb25hLm1kXCIgfSB9XG57IG9wZXJhdGlvbjogXCJpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudFwiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwic3VibWl0X2NvbGxlY3Rpb25fY29udGVudFwiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIGVsZW1lbnRfbmFtZTogXCJjb2RlLWZvcm1hdHRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiaW5pdF9wb3J0Zm9saW9cIiB9XG57IG9wZXJhdGlvbjogXCJzeW5jX3BvcnRmb2xpb1wiIH1cbnsgb3BlcmF0aW9uOiBcInBvcnRmb2xpb19lbGVtZW50X21hbmFnZXJcIiwgcGFyYW1zOiB7IGFjdGlvbjogXCJwdXNoXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIGVsZW1lbnRfbmFtZTogXCJUZWNoLVdyaXRlclwiIH0gfVxuXG5BdXRoICYgdmVyaWZpY2F0aW9uOlxueyBvcGVyYXRpb246IFwic2V0dXBfZ2l0aHViX2F1dGhcIiB9XG57IG9wZXJhdGlvbjogXCJjb25maWd1cmVfb2F1dGhcIiwgcGFyYW1zOiB7IGNsaWVudF9pZDogXCJ5b3VyLWNsaWVudC1pZFwiIH0gfVxueyBvcGVyYXRpb246IFwidmVyaWZ5X2NoYWxsZW5nZVwiLCBwYXJhbXM6IHsgY29kZTogXCJBQkMxMjNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInJlbGVhc2VfZGVhZGxvY2tcIiB9XG57IG9wZXJhdGlvbjogXCJiZWV0bGVqdWljZV9iZWV0bGVqdWljZV9iZWV0bGVqdWljZVwiIH1cblxuQmF0Y2ggb3BlcmF0aW9uczogVXNlIHRoZSBvcGVyYXRpb25zIGFycmF5IHRvIGV4ZWN1dGUgbXVsdGlwbGUgb3BlcmF0aW9ucyBzZXF1ZW50aWFsbHkgaW4gYSBzaW5nbGUgcmVxdWVzdC5cbnsgb3BlcmF0aW9uczogW3sgb3BlcmF0aW9uOiBcImFkZEVudHJ5XCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwibG9nXCIsIGNvbnRlbnQ6IFwiU3RlcCAxXCIgfSB9LCB7IG9wZXJhdGlvbjogXCJhZGRFbnRyeVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImxvZ1wiLCBjb250ZW50OiBcIlN0ZXAgMlwiIH0gfV0gfVxuXG5EaXNjb3ZlciByZXF1aXJlZCBwYXJhbWV0ZXJzIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiLCBuYW1lOiBcImNyZWF0ZV9lbGVtZW50XCIgfSB9XG5EaXNjb3ZlciBlbGVtZW50IGZvcm1hdCBzcGVjcyAocmVxdWlyZWQgZmllbGRzLCBzeW50YXgsIGV4YW1wbGVzKSDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImZvcm1hdFwiLCBuYW1lOiBcInRlbXBsYXRlXCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmhhbmRsZUNyZWF0ZShhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtY3BfYXFsX3JlYWQgLSBTYWZlLCByZWFkLW9ubHkgb3BlcmF0aW9uc1xuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsX3JlYWRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGBTYWZlLCByZWFkLW9ubHkgb3BlcmF0aW9ucy5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnUkVBRCcpfVxuXG5FbGVtZW50IHR5cGVzOiAke2VsZW1lbnRUeXBlc31cblxuVGhlc2UgcXVlcmllcyBvbmx5IHJlYWQgZGF0YSBhbmQgbmV2ZXIgbW9kaWZ5IHNlcnZlciBzdGF0ZS5cblxuUXVpY2sgc3RhcnQgZXhhbXBsZXM6XG57IG9wZXJhdGlvbjogXCJsaXN0X2VsZW1lbnRzXCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIgfVxueyBvcGVyYXRpb246IFwiZ2V0X2FjdGl2ZV9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiIH1cbnsgb3BlcmF0aW9uOiBcInNlYXJjaF9lbGVtZW50c1wiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJtZW1vcnlcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJzZXNzaW9uLW5vdGVzXCIgfSB9XG5cbkVsZW1lbnQgb3BlcmF0aW9uczpcbnsgb3BlcmF0aW9uOiBcImFjdGl2YXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJEZWZhdWx0XCIgfSB9XG57IG9wZXJhdGlvbjogXCJkZWFjdGl2YXRlX2VsZW1lbnRcIiwgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJEZWZhdWx0XCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfZWxlbWVudF9kZXRhaWxzXCIsIGVsZW1lbnRfdHlwZTogXCJza2lsbFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJxdWVyeV9lbGVtZW50c1wiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZmlsdGVyczogeyBjYXRlZ29yeTogXCJjcmVhdGl2ZVwiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJ2YWxpZGF0ZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInRhc2stcGxhbm5lclwiIH0gfVxueyBvcGVyYXRpb246IFwicmVuZGVyXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwibWVldGluZy1ub3Rlc1wiLCB2YXJpYWJsZXM6IHsgZGF0ZTogXCIyMDI2LTAzLTAzXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImV4cG9ydF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiVGVjaC1Xcml0ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcIm9wZW5fcG9ydGZvbGlvX2Jyb3dzZXJcIiB9XG57IG9wZXJhdGlvbjogXCJvcGVuX2xvZ3NcIiB9XG57IG9wZXJhdGlvbjogXCJvcGVuX21ldHJpY3NcIiB9XG57IG9wZXJhdGlvbjogXCJvcGVuX3Blcm1pc3Npb25zXCIgfVxueyBvcGVyYXRpb246IFwib3Blbl9zZXR1cFwiIH1cblxuTWVtb3J5LXNwZWNpZmljIHNlYXJjaCAoZmlsdGVyIGJ5IHRhZ3MpOlxueyBvcGVyYXRpb246IFwic2VhcmNoXCIsIHBhcmFtczogeyBxdWVyeTogXCIqXCIsIHR5cGU6IFwibWVtb3J5XCIsIGZpbHRlcnM6IHsgdGFnczogW1wiaW1wb3J0YW50XCJdIH0gfSB9XG5cbkV4ZWN1dGlvbiBsaWZlY3ljbGUg4oCUIHJlYWQtb25seSBxdWVyaWVzOlxueyBvcGVyYXRpb246IFwiZ2V0X2V4ZWN1dGlvbl9zdGF0ZVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9nYXRoZXJlZF9kYXRhXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBnb2FsSWQ6IFwiZ29hbC1pZFwiIH0gfVxuXG5Db2xsZWN0aW9uOlxueyBvcGVyYXRpb246IFwiYnJvd3NlX2NvbGxlY3Rpb25cIiwgcGFyYW1zOiB7IHNlY3Rpb246IFwicGVyc29uYXNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInNlYXJjaF9jb2xsZWN0aW9uXCIsIHBhcmFtczogeyBxdWVyeTogXCJjcmVhdGl2ZVwiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2NvbGxlY3Rpb25fZW5oYW5jZWRcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIsIHBhZ2U6IDEgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfY29sbGVjdGlvbl9jb250ZW50XCIsIHBhcmFtczogeyBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBlbGVtZW50X25hbWU6IFwiQ3JlYXRpdmUtV3JpdGVyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfY29sbGVjdGlvbl9jYWNoZV9oZWFsdGhcIiB9XG5cblBvcnRmb2xpbzpcbnsgb3BlcmF0aW9uOiBcInBvcnRmb2xpb19zdGF0dXNcIiB9XG57IG9wZXJhdGlvbjogXCJwb3J0Zm9saW9fY29uZmlnXCIgfVxueyBvcGVyYXRpb246IFwic2VhcmNoX3BvcnRmb2xpb1wiLCBwYXJhbXM6IHsgcXVlcnk6IFwiY3JlYXRpdmVcIiB9IH1cbnsgb3BlcmF0aW9uOiBcInNlYXJjaF9hbGxcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcImNyZWF0aXZlXCIgfSB9XG5cblN5c3RlbTpcbnsgb3BlcmF0aW9uOiBcImRvbGxob3VzZV9jb25maWdcIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfYnVpbGRfaW5mb1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9jYWNoZV9idWRnZXRfcmVwb3J0XCIgfVxueyBvcGVyYXRpb246IFwicXVlcnlfbG9nc1wiLCBwYXJhbXM6IHsgbGV2ZWw6IFwiZXJyb3JcIiwgbGltaXQ6IDEwIH0gfVxueyBvcGVyYXRpb246IFwicXVlcnlfbWV0cmljc1wiIH1cbnsgb3BlcmF0aW9uOiBcInF1ZXJ5X21ldHJpY3NcIiwgcGFyYW1zOiB7IG5hbWVzOiBbXCJzeXN0ZW0ubWVtb3J5LipcIl0sIHR5cGU6IFwiZ2F1Z2VcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNvbnZlcnRfc2tpbGxfZm9ybWF0XCIsIHBhcmFtczogeyBkaXJlY3Rpb246IFwiYWdlbnRfdG9fZG9sbGhvdXNlXCIsIGFnZW50X3NraWxsOiB7IFwiU0tJTEwubWRcIjogXCItLS1cXFxcbm5hbWU6IG15LXNraWxsXFxcXG5kZXNjcmlwdGlvbjogdGVzdFxcXFxuLS0tXFxcXG5cXFxcblVzZSB0aGlzIHNraWxsLlwiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjb252ZXJ0X3NraWxsX2Zvcm1hdFwiLCBwYXJhbXM6IHsgZGlyZWN0aW9uOiBcImFnZW50X3RvX2RvbGxob3VzZVwiLCBzZWN1cml0eV9tb2RlOiBcIndhcm5cIiwgcGF0aF9tb2RlOiBcImxvc3NsZXNzXCIsIGFnZW50X3NraWxsOiB7IFwiU0tJTEwubWRcIjogXCItLS1cXFxcbm5hbWU6IG15LXNraWxsXFxcXG5kZXNjcmlwdGlvbjogdGVzdFxcXFxuLS0tXFxcXG5cXFxcblVzZSB0aGlzIHNraWxsLlwiIH0gfSB9XG57IG9wZXJhdGlvbjogXCJjb252ZXJ0X3NraWxsX2Zvcm1hdFwiLCBwYXJhbXM6IHsgZGlyZWN0aW9uOiBcImRvbGxob3VzZV90b19hZ2VudFwiLCBwYXRoX21vZGU6IFwibG9zc2xlc3NcIiwgZG9sbGhvdXNlX21hcmtkb3duOiBcIi0tLVxcXFxubmFtZTogbXktc2tpbGxcXFxcbmRlc2NyaXB0aW9uOiB0ZXN0XFxcXG5pbnN0cnVjdGlvbnM6IFVzZSB0aGlzIHNraWxsLlxcXFxuLS0tXFxcXG5cXFxcbiMjIyBiaW5hcmllcy9sb2dvLnBuZ1xcXFxuKGJpbmFyeSBsaW5rOiAuL3NraWxscy9iaW5hcmllcy9sb2dvLnBuZylcIiB9IH1cblxuQXV0aDpcbnsgb3BlcmF0aW9uOiBcImNoZWNrX2dpdGh1Yl9hdXRoXCIgfVxueyBvcGVyYXRpb246IFwib2F1dGhfaGVscGVyX3N0YXR1c1wiIH1cblxuR2F0ZWtlZXBlciAmIENMSSBwb2xpY2llczpcbnsgb3BlcmF0aW9uOiBcInBlcm1pc3Npb25fcHJvbXB0XCIsIHBhcmFtczogeyB0b29sOiBcIkJhc2hcIiwgcHJvbXB0OiBcInJ1biBucG0gdGVzdFwiIH0gfVxueyBvcGVyYXRpb246IFwiZXZhbHVhdGVfcGVybWlzc2lvblwiLCBwYXJhbXM6IHsgdG9vbF9uYW1lOiBcIkJhc2hcIiwgaW5wdXQ6IHsgY29tbWFuZDogXCJnaXQgc3RhdHVzXCIgfSwgcGxhdGZvcm06IFwiY2xhdWRlX2NvZGVcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImdldF9lZmZlY3RpdmVfY2xpX3BvbGljaWVzXCIgfVxueyBvcGVyYXRpb246IFwiZ2V0X3BlbmRpbmdfY2xpX2FwcHJvdmFsc1wiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9wZXJtaXNzaW9uX2F1dGhvcml0eVwiIH1cbnsgb3BlcmF0aW9uOiBcImdldF9wZXJtaXNzaW9uX2F1dGhvcml0eVwiLCBwYXJhbXM6IHsgaG9zdDogXCJjbGF1ZGUtY29kZVwiIH0gfVxuXG5FbmhhbmNlZCBpbmRleDpcbnsgb3BlcmF0aW9uOiBcImZpbmRfc2ltaWxhcl9lbGVtZW50c1wiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInBlcnNvbmFcIiwgZWxlbWVudF9uYW1lOiBcIkNyZWF0aXZlLVdyaXRlclwiIH0gfVxueyBvcGVyYXRpb246IFwiZ2V0X2VsZW1lbnRfcmVsYXRpb25zaGlwc1wiLCBwYXJhbXM6IHsgZWxlbWVudF90eXBlOiBcInNraWxsXCIsIGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld1wiIH0gfVxueyBvcGVyYXRpb246IFwic2VhcmNoX2J5X3ZlcmJcIiwgcGFyYW1zOiB7IHZlcmI6IFwicmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJnZXRfcmVsYXRpb25zaGlwX3N0YXRzXCIgfVxuXG5EaXNjb3ZlciBhbGwgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVyczpcbnsgb3BlcmF0aW9uOiBcImdldF9jYXBhYmlsaXRpZXNcIiB9XG57IG9wZXJhdGlvbjogXCJnZXRfY2FwYWJpbGl0aWVzXCIsIHBhcmFtczogeyBjYXRlZ29yeTogXCJFbGVtZW50IExpZmVjeWNsZVwiIH0gfVxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IHRydWUsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmhhbmRsZVJlYWQoYXJncyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWNwX2FxbF91cGRhdGUgLSBNb2RpZnlpbmcgb3BlcmF0aW9ucyB0aGF0IG92ZXJ3cml0ZSBkYXRhXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfdXBkYXRlXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgTW9kaWZ5aW5nIG9wZXJhdGlvbnMgdGhhdCBvdmVyd3JpdGUgZGF0YS5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnVVBEQVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBvcGVyYXRpb25zIG1vZGlmeSBleGlzdGluZyBkYXRhLCBwb3RlbnRpYWxseSBvdmVyd3JpdGluZyBwcmV2aW91cyB2YWx1ZXMuXG5cbk5vdGU6IE1lbW9yaWVzIGFyZSBhcHBlbmQtb25seSBhbmQgZG8gbm90IHN1cHBvcnQgZWRpdF9lbGVtZW50LiBVc2UgYWRkRW50cnkgKENSRUFURSkgdG8gYWRkIG5ldyBlbnRyaWVzLlxuXG5RdWljayBzdGFydCBleGFtcGxlOlxueyBvcGVyYXRpb246IFwiZWRpdF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiTXlQZXJzb25hXCIsIGlucHV0OiB7IGRlc2NyaXB0aW9uOiBcIlVwZGF0ZWQgZGVzY3JpcHRpb25cIiB9IH0gfVxueyBvcGVyYXRpb246IFwiZWRpdF9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJwZXJzb25hXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiRnJpZW5kbHktVGVhY2hlclwiLCBpbnB1dDogeyBpbnN0cnVjdGlvbnM6IFwiVXBkYXRlZCBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMuXCIgfSB9IH1cbnsgb3BlcmF0aW9uOiBcImVkaXRfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwiYWdlbnRcIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIsIGlucHV0OiB7IGluc3RydWN0aW9uczogXCJVcGRhdGVkIGFnZW50IGJlaGF2aW9yYWwgcHJvZmlsZS5cIiwgZ29hbDogeyB0ZW1wbGF0ZTogXCJDb21wbGV0ZToge3Rhc2t9XCIgfSB9IH0gfVxueyBvcGVyYXRpb246IFwidXBncmFkZV9lbGVtZW50XCIsIGVsZW1lbnRfdHlwZTogXCJhZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInRhc2stcGxhbm5lclwiIH0gfVxuXG5EaXNjb3ZlciByZXF1aXJlZCBwYXJhbWV0ZXJzIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiLCBuYW1lOiBcImVkaXRfZWxlbWVudFwiIH0gfWAsXG4gICAgICAgIGlucHV0U2NoZW1hOiBvcGVyYXRpb25JbnB1dFNjaGVtYSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICByZWFkT25seUhpbnQ6IGZhbHNlLFxuICAgICAgICAgIGRlc3RydWN0aXZlSGludDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGFyZ3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmhhbmRsZVVwZGF0ZShhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtY3BfYXFsX2RlbGV0ZSAtIERlc3RydWN0aXZlIG9wZXJhdGlvbnMgdGhhdCByZW1vdmUgZGF0YVxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJtY3BfYXFsX2RlbGV0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYERlc3RydWN0aXZlIG9wZXJhdGlvbnMgdGhhdCByZW1vdmUgZGF0YS5cblxuU3VwcG9ydGVkIG9wZXJhdGlvbnM6ICR7Z2V0T3BlcmF0aW9uc1N0cmluZygnREVMRVRFJyl9XG5cbkVsZW1lbnQgdHlwZXM6ICR7ZWxlbWVudFR5cGVzfVxuXG5UaGVzZSBvcGVyYXRpb25zIHJlbW92ZSBkYXRhLiBVc2Ugd2l0aCBjYXV0aW9uLlxuXG7imqDvuI8gU0VDVVJJVFk6IERvIG5vdCBhdXRvLWFsbG93IHRoaXMgZW5kcG9pbnQgaW4geW91ciBob3N0IHNldHRpbmdzIChlLmcuLCBDbGF1ZGUgQ29kZSBzZXR0aW5ncy5qc29uKS4gRWFjaCBkZWxldGUgb3BlcmF0aW9uIHNob3VsZCByZXF1aXJlIGV4cGxpY2l0IGh1bWFuIGFwcHJvdmFsLiBBdXRvLWFsbG93aW5nIGJ5cGFzc2VzIHRoZSBwZXItb3BlcmF0aW9uIGNvbmZpcm1hdGlvbiBnYXRlLCBsZWF2aW5nIG9ubHkgZWxlbWVudCBkZW55IHBvbGljaWVzIGFzIHByb3RlY3Rpb24gYWdhaW5zdCB1bmludGVuZGVkIGRhdGEgbG9zcy5cblxuUXVpY2sgc3RhcnQgZXhhbXBsZXM6XG57IG9wZXJhdGlvbjogXCJkZWxldGVfZWxlbWVudFwiLCBlbGVtZW50X3R5cGU6IFwicGVyc29uYVwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcIk9sZC1QZXJzb25hXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjbGVhclwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcInRlbXAtbm90ZXNcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImNsZWFyX2dpdGh1Yl9hdXRoXCIgfVxuXG5EaXNjb3ZlciByZXF1aXJlZCBwYXJhbWV0ZXJzIOKAlCB1c2UgbWNwX2FxbF9yZWFkOlxueyBvcGVyYXRpb246IFwiaW50cm9zcGVjdFwiLCBwYXJhbXM6IHsgcXVlcnk6IFwib3BlcmF0aW9uc1wiLCBuYW1lOiBcImRlbGV0ZV9lbGVtZW50XCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlRGVsZXRlKGFyZ3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1jcF9hcWxfZXhlY3V0ZSAtIEV4ZWN1dGlvbiBsaWZlY3ljbGUgb3BlcmF0aW9ucyAoQ1JVREUncyAnRScpXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcIm1jcF9hcWxfZXhlY3V0ZVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEV4ZWN1dGlvbiBsaWZlY3ljbGUgb3BlcmF0aW9ucyBmb3IgZXhlY3V0YWJsZSBlbGVtZW50cyAoYWdlbnRzLCB3b3JrZmxvd3MsIHBpcGVsaW5lcykuXG5cblN1cHBvcnRlZCBvcGVyYXRpb25zOiAke2dldE9wZXJhdGlvbnNTdHJpbmcoJ0VYRUNVVEUnKX1cblxuVGhlc2Ugb3BlcmF0aW9ucyBtYW5hZ2UgcnVudGltZSBleGVjdXRpb24gc3RhdGUuIFVubGlrZSBDUlVEIG9wZXJhdGlvbnMgKHdoaWNoIG1hbmFnZSBkZWZpbml0aW9ucyksIEV4ZWN1dGUgb3BlcmF0aW9ucyBoYW5kbGUgdGhlIGV4ZWN1dGlvbiBsaWZlY3ljbGU6XG4tIGV4ZWN1dGVfYWdlbnQ6IFN0YXJ0IGEgbmV3IGV4ZWN1dGlvbiAocmV0dXJucyBnb2FsSWQgYW5kIHN0YXRlVmVyc2lvbiBmb3IgdHJhY2tpbmcpXG4tIGNvbXBsZXRlX2V4ZWN1dGlvbjogU2lnbmFsIHN1Y2Nlc3NmdWwgY29tcGxldGlvblxuLSBjb250aW51ZV9leGVjdXRpb246IFJlc3VtZSBmcm9tIHNhdmVkIHN0YXRlXG4tIGFib3J0X2V4ZWN1dGlvbjogQWJvcnQgYSBydW5uaW5nIGV4ZWN1dGlvbiwgcmVqZWN0aW5nIGZ1cnRoZXIgb3BlcmF0aW9uc1xuLSBjb25maXJtX29wZXJhdGlvbjogQ29uZmlybSBhIHBlbmRpbmcgb3BlcmF0aW9uIHRoYXQgcmVxdWlyZXMgdXNlciBhcHByb3ZhbCAoR2F0ZWtlZXBlciBmbG93KVxuLSBhcHByb3ZlX2NsaV9wZXJtaXNzaW9uOiBBcHByb3ZlIGEgcGVuZGluZyBDTEkgdG9vbCBwZXJtaXNzaW9uIHJlcXVlc3Rcbi0gcHJlcGFyZV9oYW5kb2ZmOiBTZXJpYWxpemUgZ29hbCBwcm9ncmVzcyBpbnRvIGEgcG9ydGFibGUgaGFuZG9mZiBibG9jayBmb3Igc2Vzc2lvbiB0cmFuc2ZlclxuLSByZXN1bWVfZnJvbV9oYW5kb2ZmOiBSZXN1bWUgYWdlbnQgZXhlY3V0aW9uIGZyb20gYSBoYW5kb2ZmIGJsb2NrIHdpdGggaW50ZWdyaXR5IHZhbGlkYXRpb25cblxuSU1QT1JUQU5UOiBFeGVjdXRlIG9wZXJhdGlvbnMgYXJlIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlIChhZ2VudHMgY2FuIHBlcmZvcm0gYW55IGFjdGlvbikgYW5kIG5vbi1pZGVtcG90ZW50IChjYWxsaW5nIGV4ZWN1dGVfYWdlbnQgdHdpY2UgY3JlYXRlcyB0d28gc2VwYXJhdGUgZXhlY3V0aW9ucykuXG5cbuKaoO+4jyBTRUNVUklUWTogRG8gbm90IGF1dG8tYWxsb3cgdGhpcyBlbmRwb2ludCBpbiB5b3VyIGhvc3Qgc2V0dGluZ3MgKGUuZy4sIENsYXVkZSBDb2RlIHNldHRpbmdzLmpzb24pLiBFYWNoIGV4ZWN1dGlvbiBzaG91bGQgcmVxdWlyZSBleHBsaWNpdCBodW1hbiBhcHByb3ZhbC4gQXV0by1hbGxvd2luZyBieXBhc3NlcyB0aGUgcGVyLW9wZXJhdGlvbiBjb25maXJtYXRpb24gZ2F0ZS4gV2hpbGUgRGFuZ2VyWm9uZSB2ZXJpZmljYXRpb24gYW5kIGVsZW1lbnQgZGVueSBwb2xpY2llcyBzdGlsbCBwcm92aWRlIHByb3RlY3Rpb24sIHRoZSBwcmltYXJ5IGh1bWFuIHJldmlldyBjaGVja3BvaW50IGlzIGxvc3QuXG5cblJlc3BvbnNlIGZsb3c6IGV4ZWN1dGVfYWdlbnQgcmV0dXJucyB7IGdvYWxJZCwgc3RhdGVWZXJzaW9uLCBhY3RpdmVFbGVtZW50cywgc2FmZXR5VGllciwgLi4uIH0uIFVzZSBnb2FsSWQgd2l0aCByZWNvcmRfZXhlY3V0aW9uX3N0ZXAgYW5kIGNvbXBsZXRlX2V4ZWN1dGlvbi4gc3RhdGVWZXJzaW9uIGVuYWJsZXMgb3B0aW1pc3RpYyBsb2NraW5nLiByZWNvcmRfZXhlY3V0aW9uX3N0ZXAgcmV0dXJucyB7IGF1dG9ub215OiB7IGNvbnRpbnVlLCBub3RpZmljYXRpb25zPyB9IH0g4oCUIGNoZWNrIG5vdGlmaWNhdGlvbnMgZm9yIGdhdGVrZWVwZXIgYmxvY2tzIGFuZCBkYW5nZXIgem9uZSBhbGVydHMuXG5cblF1aWNrIHN0YXJ0IGV4YW1wbGVzOlxueyBvcGVyYXRpb246IFwiZXhlY3V0ZV9hZ2VudFwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgcGFyYW1ldGVyczogeyBvYmplY3RpdmU6IFwiUmV2aWV3IGNvZGVcIiB9IH0gfVxueyBvcGVyYXRpb246IFwiY29tcGxldGVfZXhlY3V0aW9uXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiLCBvdXRjb21lOiBcInN1Y2Nlc3NcIiwgc3VtbWFyeTogXCJDb21wbGV0ZWQgcmV2aWV3XCIgfSB9XG57IG9wZXJhdGlvbjogXCJhYm9ydF9leGVjdXRpb25cIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJkYXRhLWNvbGxlY3RvclwiLCByZWFzb246IFwiVXNlciByZXF1ZXN0ZWQgY2FuY2VsbGF0aW9uXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjb250aW51ZV9leGVjdXRpb25cIiwgcGFyYW1zOiB7IGVsZW1lbnRfbmFtZTogXCJjb2RlLXJldmlld2VyXCIgfSB9XG57IG9wZXJhdGlvbjogXCJjb25maXJtX29wZXJhdGlvblwiLCBwYXJhbXM6IHsgb3BlcmF0aW9uOiBcImV4ZWN1dGVfYWdlbnRcIiB9IH1cbnsgb3BlcmF0aW9uOiBcImFwcHJvdmVfY2xpX3Blcm1pc3Npb25cIiwgcGFyYW1zOiB7IHJlcXVlc3RfaWQ6IFwicmVxLTEyM1wiLCBkZWNpc2lvbjogXCJhbGxvd1wiIH0gfVxueyBvcGVyYXRpb246IFwicHJlcGFyZV9oYW5kb2ZmXCIsIHBhcmFtczogeyBlbGVtZW50X25hbWU6IFwiY29kZS1yZXZpZXdlclwiIH0gfVxueyBvcGVyYXRpb246IFwicmVzdW1lX2Zyb21faGFuZG9mZlwiLCBwYXJhbXM6IHsgZWxlbWVudF9uYW1lOiBcImNvZGUtcmV2aWV3ZXJcIiwgaGFuZG9mZl9ibG9jazogXCIuLi5cIiB9IH1cblxuRGlzY292ZXIgcmVxdWlyZWQgcGFyYW1ldGVycyDigJQgdXNlIG1jcF9hcWxfcmVhZDpcbnsgb3BlcmF0aW9uOiBcImludHJvc3BlY3RcIiwgcGFyYW1zOiB7IHF1ZXJ5OiBcIm9wZXJhdGlvbnNcIiwgbmFtZTogXCJleGVjdXRlX2FnZW50XCIgfSB9YCxcbiAgICAgICAgaW5wdXRTY2hlbWE6IG9wZXJhdGlvbklucHV0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgIHJlYWRPbmx5SGludDogZmFsc2UsXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVIaW50OiB0cnVlICAvLyBQb3RlbnRpYWxseSBkZXN0cnVjdGl2ZSAtIGFnZW50cyBjYW4gcGVyZm9ybSBhbnkgYWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYXJnczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuaGFuZGxlRXhlY3V0ZShhcmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cbiJdfQ==
|
|
@@ -61,6 +61,7 @@ export declare class ActivationStore {
|
|
|
61
61
|
private readonly fileOps;
|
|
62
62
|
private readonly stateDir;
|
|
63
63
|
private readonly sessionId;
|
|
64
|
+
private readonly runtimeSessionId;
|
|
64
65
|
private readonly persistPath;
|
|
65
66
|
private readonly enabled;
|
|
66
67
|
private state;
|
|
@@ -106,6 +107,12 @@ export declare class ActivationStore {
|
|
|
106
107
|
* Get the session ID this store is scoped to.
|
|
107
108
|
*/
|
|
108
109
|
getSessionId(): string;
|
|
110
|
+
/**
|
|
111
|
+
* Runtime-unique session identifier used for live console/session registry
|
|
112
|
+
* surfaces when the stable persistence identity is shared across unnamed
|
|
113
|
+
* sessions.
|
|
114
|
+
*/
|
|
115
|
+
getRuntimeSessionId(): string;
|
|
109
116
|
/**
|
|
110
117
|
* Check if persistence is enabled.
|
|
111
118
|
*/
|
|
@@ -131,5 +138,6 @@ export declare class ActivationStore {
|
|
|
131
138
|
private createEmptyState;
|
|
132
139
|
private getTotalActivationCount;
|
|
133
140
|
private getActivationCounts;
|
|
141
|
+
private logResolvedSessionIdentity;
|
|
134
142
|
}
|
|
135
143
|
//# sourceMappingURL=ActivationStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivationStore.d.ts","sourceRoot":"","sources":["../../src/services/ActivationStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"ActivationStore.d.ts","sourceRoot":"","sources":["../../src/services/ActivationStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAQxE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AAYD,MAAM,WAAW,gCAAgC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;CACpD;AA4CD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,KAAK,CAA2B;gBAE5B,OAAO,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,MAAM;IAa7D;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoEjC;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA6B5E;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAoB3D;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9D;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAK1D;;;;;;;OAOG;IACG,6BAA6B,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,EAAE,CAAC;YA6BtF,+BAA+B;YAS/B,4BAA4B;IAqB1C,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,6BAA6B;IAiBrC,OAAO,CAAC,4BAA4B;IAqBpC,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;;OAIG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAOhB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;YACW,OAAO;IAMrB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,0BAA0B;CAmBnC"}
|
|
@@ -17,13 +17,13 @@
|
|
|
17
17
|
*
|
|
18
18
|
* @since v2.0.0 - Issue #598
|
|
19
19
|
*/
|
|
20
|
-
import { randomBytes } from 'node:crypto';
|
|
21
20
|
import os from 'os';
|
|
22
21
|
import path from 'path';
|
|
23
22
|
import fs from 'fs/promises';
|
|
24
23
|
import { logger } from '../utils/logger.js';
|
|
25
24
|
import { SecurityMonitor } from '../security/securityMonitor.js';
|
|
26
25
|
import { UnicodeValidator } from '../security/validators/unicodeValidator.js';
|
|
26
|
+
import { resolveSessionIdentity, SESSION_ID_PATTERN, } from './sessionIdentity.js';
|
|
27
27
|
/** Valid element types that support activation (stored in singular form) */
|
|
28
28
|
const ACTIVATABLE_TYPES = new Set(['persona', 'skill', 'agent', 'memory', 'ensemble']);
|
|
29
29
|
/**
|
|
@@ -45,32 +45,6 @@ function normalizeType(elementType) {
|
|
|
45
45
|
function normalizeActivationIdentifier(value) {
|
|
46
46
|
return UnicodeValidator.normalize(value).normalizedContent.trim();
|
|
47
47
|
}
|
|
48
|
-
/** Session ID validation: must start with a letter, then alphanumeric/hyphens/underscores, 1-64 chars */
|
|
49
|
-
const SESSION_ID_PATTERN = /^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/;
|
|
50
|
-
/**
|
|
51
|
-
* Validates and returns the session ID from environment or default.
|
|
52
|
-
*
|
|
53
|
-
* Examples of valid session IDs:
|
|
54
|
-
* - `claude-code` — Claude Code CLI sessions
|
|
55
|
-
* - `zulip-bridge` — Zulip bridge integration
|
|
56
|
-
* - `dev-local` — Local development
|
|
57
|
-
* - `staging-v2` — Staging environment
|
|
58
|
-
*/
|
|
59
|
-
function resolveSessionId() {
|
|
60
|
-
const envValue = process.env.DOLLHOUSE_SESSION_ID?.trim();
|
|
61
|
-
if (!envValue) {
|
|
62
|
-
// Generate a unique session ID per server instance to prevent
|
|
63
|
-
// cross-session activation leaking (issue #33)
|
|
64
|
-
const id = `session-${Date.now().toString(36)}-${randomBytes(4).toString('hex')}`;
|
|
65
|
-
logger.info(`[ActivationStore] No DOLLHOUSE_SESSION_ID set — generated '${id}'`);
|
|
66
|
-
return id;
|
|
67
|
-
}
|
|
68
|
-
if (!SESSION_ID_PATTERN.test(envValue)) {
|
|
69
|
-
logger.warn(`Invalid DOLLHOUSE_SESSION_ID '${envValue}' — must start with a letter, then alphanumeric/hyphens/underscores, 1-64 chars. Falling back to 'default'.`);
|
|
70
|
-
return 'default';
|
|
71
|
-
}
|
|
72
|
-
return envValue;
|
|
73
|
-
}
|
|
74
48
|
/**
|
|
75
49
|
* Checks whether activation persistence is enabled.
|
|
76
50
|
*/
|
|
@@ -112,16 +86,20 @@ export class ActivationStore {
|
|
|
112
86
|
fileOps;
|
|
113
87
|
stateDir;
|
|
114
88
|
sessionId;
|
|
89
|
+
runtimeSessionId;
|
|
115
90
|
persistPath;
|
|
116
91
|
enabled;
|
|
117
92
|
state;
|
|
118
93
|
constructor(fileOps, stateDir) {
|
|
119
94
|
this.fileOps = fileOps;
|
|
120
|
-
|
|
95
|
+
const identity = resolveSessionIdentity();
|
|
96
|
+
this.sessionId = identity.sessionId;
|
|
97
|
+
this.runtimeSessionId = identity.runtimeSessionId;
|
|
121
98
|
this.enabled = isPersistenceEnabled();
|
|
122
99
|
this.stateDir = stateDir ?? path.join(os.homedir(), '.dollhouse', 'state');
|
|
123
100
|
this.persistPath = path.join(this.stateDir, `activations-${this.sessionId}.json`);
|
|
124
101
|
this.state = this.createEmptyState();
|
|
102
|
+
this.logResolvedSessionIdentity(identity);
|
|
125
103
|
}
|
|
126
104
|
/**
|
|
127
105
|
* Load persisted activations from disk.
|
|
@@ -363,6 +341,14 @@ export class ActivationStore {
|
|
|
363
341
|
getSessionId() {
|
|
364
342
|
return this.sessionId;
|
|
365
343
|
}
|
|
344
|
+
/**
|
|
345
|
+
* Runtime-unique session identifier used for live console/session registry
|
|
346
|
+
* surfaces when the stable persistence identity is shared across unnamed
|
|
347
|
+
* sessions.
|
|
348
|
+
*/
|
|
349
|
+
getRuntimeSessionId() {
|
|
350
|
+
return this.runtimeSessionId;
|
|
351
|
+
}
|
|
366
352
|
/**
|
|
367
353
|
* Check if persistence is enabled.
|
|
368
354
|
*/
|
|
@@ -438,5 +424,18 @@ export class ActivationStore {
|
|
|
438
424
|
}
|
|
439
425
|
return counts;
|
|
440
426
|
}
|
|
427
|
+
logResolvedSessionIdentity(identity) {
|
|
428
|
+
const rawEnvValue = process.env.DOLLHOUSE_SESSION_ID?.trim();
|
|
429
|
+
if (identity.source === 'env') {
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
if (!rawEnvValue) {
|
|
433
|
+
logger.info(`[ActivationStore] No DOLLHOUSE_SESSION_ID set — derived stable session '${identity.sessionId}' from workspace context; runtime session '${identity.runtimeSessionId}' remains unique for this process.`);
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
if (!SESSION_ID_PATTERN.test(rawEnvValue)) {
|
|
437
|
+
logger.warn(`Invalid DOLLHOUSE_SESSION_ID '${rawEnvValue}' — must start with a letter, then alphanumeric/hyphens/underscores, 1-64 chars. Using derived session '${identity.sessionId}' instead.`);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
441
440
|
}
|
|
442
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aXZhdGlvblN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FjdGl2YXRpb25TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBOEI5RSw0RUFBNEU7QUFDNUUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRXZGOzs7O0dBSUc7QUFDSCxNQUFNLGtCQUFrQixHQUEyQjtJQUNqRCxRQUFRLEVBQUUsU0FBUztJQUNuQixNQUFNLEVBQUUsT0FBTztJQUNmLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFLFFBQVE7SUFDbEIsU0FBUyxFQUFFLFVBQVU7Q0FDdEIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLFdBQW1CO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyw2QkFBNkIsQ0FBQyxLQUFhO0lBQ2xELE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLGlC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LENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQzFDLENBQUM7SUFDSixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE1BQU0sTUFBTSxHQUEyQixFQUFFLENBQUM7UUFDMUMsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBY3RpdmF0aW9uIFN0b3JlXG4gKlxuICogUGVyc2lzdHMgcGVyLXNlc3Npb24gZWxlbWVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGRpc2suXG4gKiBFYWNoIE1DUCBzZXNzaW9uIChpZGVudGlmaWVkIGJ5IERPTExIT1VTRV9TRVNTSU9OX0lEKSBnZXRzIGl0cyBvd25cbiAqIGFjdGl2YXRpb24gZmlsZSBzbyBjb25jdXJyZW50IHNlc3Npb25zIG1haW50YWluIGluZGVwZW5kZW50IHByb2ZpbGVzLlxuICpcbiAqIEZvbGxvd3MgdGhlIERhbmdlclpvbmVFbmZvcmNlciBwYXR0ZXJuOlxuICogLSBESS1tYW5hZ2VkIHNpbmdsZXRvbiB3aXRoIEZpbGVPcGVyYXRpb25zU2VydmljZVxuICogLSBpbml0aWFsaXplKCkgbG9hZHMgZnJvbSBkaXNrICh0b2xlcmF0ZXMgbWlzc2luZy9jb3JydXB0IGZpbGVzKVxuICogLSBJbi1tZW1vcnkgc3RhdGUgaXMgdGhlIGhvdCBwYXRoOyBkaXNrIHdyaXRlcyBhcmUgZmlyZS1hbmQtZm9yZ2V0XG4gKiAtIGF0b21pY1dyaXRlRmlsZSAod3JpdGUtdG8tdGVtcCArIHJlbmFtZSkgcHJldmVudHMgcGFydGlhbCByZWFkc1xuICpcbiAqIEZvcndhcmQgY29tcGF0aWJpbGl0eTogVGhlIHZlcnNpb25lZCBmaWxlIGZvcm1hdCAodjEpIGNhbiBldm9sdmUgdG9cbiAqIGluY2x1ZGUgdXNlcklkLCBvcmdJZCwgYW5kIGF1ZGl0IGZpZWxkcyBmb3IgbXVsdGktdXNlciBIVFRQUyBtb2RlXG4gKiB3aXRob3V0IGJyZWFraW5nIGV4aXN0aW5nIGluc3RhbGxhdGlvbnMuXG4gKlxuICogQHNpbmNlIHYyLjAuMCAtIElzc3VlICM1OThcbiAqL1xuXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB0eXBlIHsgRmlsZU9wZXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5cbi8qKlxuICogQSBwZXJzaXN0ZWQgYWN0aXZhdGlvbiByZWNvcmQgZm9yIGEgc2luZ2xlIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc2lzdGVkQWN0aXZhdGlvbiB7XG4gIC8qKiBFbGVtZW50IG5hbWUgKGh1bWFuLXJlYWRhYmxlLCB1c2VkIGZvciBhbGwgdHlwZXMpICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIEZvciBwZXJzb25hcyBvbmx5OiB0aGUgZmlsZW5hbWUga2V5IHVzZWQgYnkgUGVyc29uYU1hbmFnZXIgKi9cbiAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIC8qKiBJU08tODYwMSB0aW1lc3RhbXAgb2Ygd2hlbiBhY3RpdmF0aW9uIHdhcyBwZXJzaXN0ZWQgKi9cbiAgYWN0aXZhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQZXJzaXN0ZWQgZmlsZSBmb3JtYXQgKHZlcnNpb25lZCBmb3IgZm9yd2FyZCBjb21wYXRpYmlsaXR5KS5cbiAqL1xuaW50ZXJmYWNlIFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZSB7XG4gIHZlcnNpb246IG51bWJlcjtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVkOiBzdHJpbmc7XG4gIGFjdGl2YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBQZXJzaXN0ZWRBY3RpdmF0aW9uW10+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZVNuYXBzaG90IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVkOiBzdHJpbmc7XG4gIGFjdGl2YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBQZXJzaXN0ZWRBY3RpdmF0aW9uW10+O1xufVxuXG4vKiogVmFsaWQgZWxlbWVudCB0eXBlcyB0aGF0IHN1cHBvcnQgYWN0aXZhdGlvbiAoc3RvcmVkIGluIHNpbmd1bGFyIGZvcm0pICovXG5jb25zdCBBQ1RJVkFUQUJMRV9UWVBFUyA9IG5ldyBTZXQoWydwZXJzb25hJywgJ3NraWxsJywgJ2FnZW50JywgJ21lbW9yeScsICdlbnNlbWJsZSddKTtcblxuLyoqXG4gKiBOb3JtYWxpemUgZWxlbWVudCB0eXBlIHRvIHNpbmd1bGFyIGZvcm0gZm9yIGNvbnNpc3RlbnQgc3RvcmFnZS5cbiAqIEVsZW1lbnRUeXBlIGVudW0gdXNlcyBwbHVyYWwgKCdwZXJzb25hcycsICdza2lsbHMnLCBldGMuKSBidXQgd2VcbiAqIHN0b3JlIGluIHNpbmd1bGFyIGZvcm0gZm9yIHJlYWRhYmlsaXR5IGFuZCBmb3J3YXJkIGNvbXBhdGliaWxpdHkuXG4gKi9cbmNvbnN0IFBMVVJBTF9UT19TSU5HVUxBUjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgcGVyc29uYXM6ICdwZXJzb25hJyxcbiAgc2tpbGxzOiAnc2tpbGwnLFxuICBhZ2VudHM6ICdhZ2VudCcsXG4gIG1lbW9yaWVzOiAnbWVtb3J5JyxcbiAgZW5zZW1ibGVzOiAnZW5zZW1ibGUnLFxufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbG93ZXIgPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gUExVUkFMX1RPX1NJTkdVTEFSW2xvd2VyXSA/PyBsb3dlcjtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh2YWx1ZSkubm9ybWFsaXplZENvbnRlbnQudHJpbSgpO1xufVxuXG4vKiogU2Vzc2lvbiBJRCB2YWxpZGF0aW9uOiBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIHRoZW4gYWxwaGFudW1lcmljL2h5cGhlbnMvdW5kZXJzY29yZXMsIDEtNjQgY2hhcnMgKi9cbmNvbnN0IFNFU1NJT05fSURfUEFUVEVSTiA9IC9eW2EtekEtWl1bYS16QS1aMC05Xy1dezAsNjN9JC87XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuZCByZXR1cm5zIHRoZSBzZXNzaW9uIElEIGZyb20gZW52aXJvbm1lbnQgb3IgZGVmYXVsdC5cbiAqXG4gKiBFeGFtcGxlcyBvZiB2YWxpZCBzZXNzaW9uIElEczpcbiAqIC0gYGNsYXVkZS1jb2RlYCDigJQgQ2xhdWRlIENvZGUgQ0xJIHNlc3Npb25zXG4gKiAtIGB6dWxpcC1icmlkZ2VgIOKAlCBadWxpcCBicmlkZ2UgaW50ZWdyYXRpb25cbiAqIC0gYGRldi1sb2NhbGAg4oCUIExvY2FsIGRldmVsb3BtZW50XG4gKiAtIGBzdGFnaW5nLXYyYCDigJQgU3RhZ2luZyBlbnZpcm9ubWVudFxuICovXG5mdW5jdGlvbiByZXNvbHZlU2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gIGNvbnN0IGVudlZhbHVlID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX1NFU1NJT05fSUQ/LnRyaW0oKTtcbiAgaWYgKCFlbnZWYWx1ZSkge1xuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIHNlc3Npb24gSUQgcGVyIHNlcnZlciBpbnN0YW5jZSB0byBwcmV2ZW50XG4gICAgLy8gY3Jvc3Mtc2Vzc2lvbiBhY3RpdmF0aW9uIGxlYWtpbmcgKGlzc3VlICMzMylcbiAgICBjb25zdCBpZCA9IGBzZXNzaW9uLSR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9LSR7cmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpfWA7XG4gICAgbG9nZ2VyLmluZm8oYFtBY3RpdmF0aW9uU3RvcmVdIE5vIERPTExIT1VTRV9TRVNTSU9OX0lEIHNldCDigJQgZ2VuZXJhdGVkICcke2lkfSdgKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICBpZiAoIVNFU1NJT05fSURfUEFUVEVSTi50ZXN0KGVudlZhbHVlKSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgYEludmFsaWQgRE9MTEhPVVNFX1NFU1NJT05fSUQgJyR7ZW52VmFsdWV9JyDigJQgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyLCB0aGVuIGFscGhhbnVtZXJpYy9oeXBoZW5zL3VuZGVyc2NvcmVzLCAxLTY0IGNoYXJzLiBGYWxsaW5nIGJhY2sgdG8gJ2RlZmF1bHQnLmBcbiAgICApO1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH1cblxuICByZXR1cm4gZW52VmFsdWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYWN0aXZhdGlvbiBwZXJzaXN0ZW5jZSBpcyBlbmFibGVkLlxuICovXG5mdW5jdGlvbiBpc1BlcnNpc3RlbmNlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgY29uc3QgZW52VmFsdWUgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQUNUSVZBVElPTl9QRVJTSVNURU5DRT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChlbnZWYWx1ZSA9PT0gJ2ZhbHNlJyB8fCBlbnZWYWx1ZSA9PT0gJzAnIHx8IGVudlZhbHVlID09PSAnbm8nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgZm9yIHRyYW5zaWVudCBkaXNrIGZhaWx1cmVzICovXG5jb25zdCBQRVJTSVNUX01BWF9SRVRSSUVTID0gMjtcblxuLyoqIERlbGF5IGJldHdlZW4gcmV0cnkgYXR0ZW1wdHMgaW4gbWlsbGlzZWNvbmRzICovXG5jb25zdCBQRVJTSVNUX1JFVFJZX0RFTEFZX01TID0gMTAwO1xuXG4vKipcbiAqIFBlci1zZXNzaW9uIGFjdGl2YXRpb24gc3RhdGUgcGVyc2lzdGVuY2UuXG4gKlxuICogUGVyc2lzdHMgZWxlbWVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGB+Ly5kb2xsaG91c2Uvc3RhdGUvYWN0aXZhdGlvbnMte3Nlc3Npb25JZH0uanNvbmAuXG4gKiBFYWNoIE1DUCBzZXNzaW9uIGlzIGlkZW50aWZpZWQgYnkgdGhlIGBET0xMSE9VU0VfU0VTU0lPTl9JRGAgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKlxuICogVGhyZWFkLXNhZmV0eSBub3RlOiBOb2RlLmpzIGlzIHNpbmdsZS10aHJlYWRlZCwgc28gTWFwIG9wZXJhdGlvbnMgYXJlIHNhZmUuXG4gKiBGb3IgbXVsdGktcHJvY2VzcyBkZXBsb3ltZW50cyAoZnV0dXJlIEhUVFBTKSwgY29uc2lkZXIgUmVkaXMgb3IgREIgYmFja2luZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIFNlc3Npb24gSUQgc2V0IHZpYSBlbnZpcm9ubWVudDpcbiAqIC8vIERPTExIT1VTRV9TRVNTSU9OX0lEPWNsYXVkZS1jb2RlXG4gKlxuICogY29uc3Qgc3RvcmUgPSBuZXcgQWN0aXZhdGlvblN0b3JlKGZpbGVPcHMpO1xuICogYXdhaXQgc3RvcmUuaW5pdGlhbGl6ZSgpOyAgLy8gbG9hZHMgfi8uZG9sbGhvdXNlL3N0YXRlL2FjdGl2YXRpb25zLWNsYXVkZS1jb2RlLmpzb25cbiAqXG4gKiBzdG9yZS5yZWNvcmRBY3RpdmF0aW9uKCdza2lsbCcsICdjb2RlLXJldmlld2VyJyk7XG4gKiBzdG9yZS5yZWNvcmRBY3RpdmF0aW9uKCdwZXJzb25hJywgJ0NyZWF0aXZlIERldicsICdjcmVhdGl2ZS1kZXYubWQnKTtcbiAqXG4gKiAvLyBPbiBuZXh0IHNlcnZlciBzdGFydCwgaW5pdGlhbGl6ZSgpIHJlc3RvcmVzIHRoZXNlIGFjdGl2YXRpb25zXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGl2YXRpb25TdG9yZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wczogRmlsZU9wZXJhdGlvbnNTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVyc2lzdFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgc3RhdGU6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZTtcblxuICBjb25zdHJ1Y3RvcihmaWxlT3BzOiBGaWxlT3BlcmF0aW9uc1NlcnZpY2UsIHN0YXRlRGlyPzogc3RyaW5nKSB7XG4gICAgdGhpcy5maWxlT3BzID0gZmlsZU9wcztcbiAgICB0aGlzLnNlc3Npb25JZCA9IHJlc29sdmVTZXNzaW9uSWQoKTtcbiAgICB0aGlzLmVuYWJsZWQgPSBpc1BlcnNpc3RlbmNlRW5hYmxlZCgpO1xuICAgIHRoaXMuc3RhdGVEaXIgPSBzdGF0ZURpciA/PyBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdzdGF0ZScpO1xuICAgIHRoaXMucGVyc2lzdFBhdGggPSBwYXRoLmpvaW4odGhpcy5zdGF0ZURpciwgYGFjdGl2YXRpb25zLSR7dGhpcy5zZXNzaW9uSWR9Lmpzb25gKTtcblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmNyZWF0ZUVtcHR5U3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHBlcnNpc3RlZCBhY3RpdmF0aW9ucyBmcm9tIGRpc2suXG4gICAqIENhbGwgb25jZSBhZnRlciBjb25zdHJ1Y3Rpb24gdG8gcmVzdG9yZSBzdGF0ZSBmcm9tIGEgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICogSWYgdGhlIGZpbGUgaXMgbWlzc2luZyBvciBjb3JydXB0LCBzdGFydHMgd2l0aCBlbXB0eSBhY3RpdmF0aW9ucy5cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0FjdGl2YXRpb25TdG9yZV0gUGVyc2lzdGVuY2UgZGlzYWJsZWQgdmlhIERPTExIT1VTRV9BQ1RJVkFUSU9OX1BFUlNJU1RFTkNFJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVPcHMucmVhZEZpbGUodGhpcy5wZXJzaXN0UGF0aCk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGU7XG5cbiAgICAgIGlmIChkYXRhLnZlcnNpb24gPT09IDEgJiYgZGF0YS5hY3RpdmF0aW9ucyAmJiB0eXBlb2YgZGF0YS5hY3RpdmF0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgYW5kIGxvYWQgb25seSBrbm93biBlbGVtZW50IHR5cGVzXG4gICAgICAgIGZvciAoY29uc3QgW3R5cGUsIGFjdGl2YXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhkYXRhLmFjdGl2YXRpb25zKSkge1xuICAgICAgICAgIGlmIChBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkgJiYgQXJyYXkuaXNBcnJheShhY3RpdmF0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPSBhY3RpdmF0aW9ucy5mbGF0TWFwKChhKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYSB8fCB0eXBlb2YgYS5uYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoYS5uYW1lKTtcbiAgICAgICAgICAgICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBhLmZpbGVuYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoYS5maWxlbmFtZSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLFxuICAgICAgICAgICAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5nZXRUb3RhbEFjdGl2YXRpb25Db3VudCgpO1xuICAgICAgICBpZiAodG90YWxDb3VudCA+IDApIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbQWN0aXZhdGlvblN0b3JlXSBSZXN0b3JlZCAke3RvdGFsQ291bnR9IGFjdGl2YXRpb24ocykgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9J2BcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ0FjdGl2YXRpb25TdG9yZS5pbml0aWFsaXplJyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBSZXN0b3JlZCAke3RvdGFsQ291bnR9IGFjdGl2YXRpb24ocykgZnJvbSBkaXNrIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfSdgLFxuICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgY291bnRzOiB0aGlzLmdldEFjdGl2YXRpb25Db3VudHMoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gTm8gYWN0aXZhdGlvbiBmaWxlIGZvdW5kIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfScsIHN0YXJ0aW5nIGZyZXNoYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybihgW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIGxvYWQgYWN0aXZhdGlvbiBmaWxlIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfScsIHN0YXJ0aW5nIGZyZXNoYCwgeyBlcnJvciB9KTtcblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgICAgc291cmNlOiAnQWN0aXZhdGlvblN0b3JlLmluaXRpYWxpemUnLFxuICAgICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gbG9hZCBhY3RpdmF0aW9uIGZpbGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9JyDigJQgc3RhcnRpbmcgZnJlc2ggKHBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbilgLFxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVycm9yOiBTdHJpbmcoZXJyb3IpLCBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgYW4gZWxlbWVudCBhY3RpdmF0aW9uLiBGaXJlLWFuZC1mb3JnZXQgcGVyc2lzdC5cbiAgICovXG4gIHJlY29yZEFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSByZXR1cm47XG5cbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKG5hbWUpO1xuICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0eXBlb2YgZmlsZW5hbWUgPT09ICdzdHJpbmcnXG4gICAgICA/IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0pIHtcbiAgICAgIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPSBbXTtcbiAgICB9XG5cbiAgICAvLyBEZWR1cGxpY2F0ZSDigJQgZG9uJ3QgYWRkIGlmIGFscmVhZHkgcHJlc2VudFxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSE7XG4gICAgY29uc3QgYWxyZWFkeUFjdGl2ZSA9IGV4aXN0aW5nLnNvbWUoYSA9PiBhLm5hbWUgPT09IG5vcm1hbGl6ZWROYW1lKTtcbiAgICBpZiAoYWxyZWFkeUFjdGl2ZSkgcmV0dXJuO1xuXG4gICAgZXhpc3RpbmcucHVzaCh7XG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgIGFjdGl2YXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhbiBlbGVtZW50IGRlYWN0aXZhdGlvbi4gRmlyZS1hbmQtZm9yZ2V0IHBlcnNpc3QuXG4gICAqL1xuICByZWNvcmREZWFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHR5cGUgPSBub3JtYWxpemVUeXBlKGVsZW1lbnRUeXBlKTtcbiAgICBpZiAoIUFDVElWQVRBQkxFX1RZUEVTLmhhcyh0eXBlKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIobmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgYWN0aXZhdGlvbnMgPSB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdO1xuICAgIGlmICghYWN0aXZhdGlvbnMpIHJldHVybjtcblxuICAgIGNvbnN0IGluaXRpYWxMZW5ndGggPSBhY3RpdmF0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSA9IGFjdGl2YXRpb25zLmZpbHRlcihhID0+IGEubmFtZSAhPT0gbm9ybWFsaXplZE5hbWUpO1xuXG4gICAgLy8gT25seSBwZXJzaXN0IGlmIHNvbWV0aGluZyBhY3R1YWxseSBjaGFuZ2VkXG4gICAgaWYgKHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0hLmxlbmd0aCAhPT0gaW5pdGlhbExlbmd0aCkge1xuICAgICAgdGhpcy5wZXJzaXN0QXN5bmMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgc3BlY2lmaWMgYWN0aXZhdGlvbiBieSBuYW1lICh1c2VkIGR1cmluZyByZXN0b3JlIHRvIHBydW5lIHN0YWxlIGVudHJpZXMpLlxuICAgKi9cbiAgcmVtb3ZlU3RhbGVBY3RpdmF0aW9uKGVsZW1lbnRUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRGVhY3RpdmF0aW9uKGVsZW1lbnRUeXBlLCBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHBlcnNpc3RlZCBhY3RpdmF0aW9ucyBmb3IgYSBnaXZlbiBlbGVtZW50IHR5cGUuXG4gICAqL1xuICBnZXRBY3RpdmF0aW9ucyhlbGVtZW50VHlwZTogc3RyaW5nKTogUGVyc2lzdGVkQWN0aXZhdGlvbltdIHtcbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPyBbLi4udGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSFdIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBwZXJzaXN0ZWQgYWN0aXZhdGlvbiBzbmFwc2hvdHMgZnJvbSBkaXNrIGZvciByZXBvcnRpbmcvZGlhZ25vc3RpY3MuXG4gICAqXG4gICAqIFRoaXMgaW50ZW50aW9uYWxseSBkb2VzIG5vdCBtdXRhdGUgdGhlIHN0b3JlJ3MgaW4tbWVtb3J5IHN0YXRlLCBhbmQgaXQgaXNcbiAgICogc2FmZSB0byBjYWxsIGZyb20gdGhlIHdlYiBjb25zb2xlIHRvIGluc3BlY3Qgb3RoZXIgc2Vzc2lvbnMnIHBlcnNpc3RlZFxuICAgKiBhY3RpdmF0aW9ucyB3aXRob3V0IGNoYW5naW5nIGxpdmUgcG9saWN5IGVuZm9yY2VtZW50IGZvciB0aGUgY3VycmVudFxuICAgKiBwcm9jZXNzLlxuICAgKi9cbiAgYXN5bmMgbGlzdFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZXMoc2Vzc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTxQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVTbmFwc2hvdFtdPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkU2Vzc2lvbklkID0gdHlwZW9mIHNlc3Npb25JZCA9PT0gJ3N0cmluZycgJiYgc2Vzc2lvbklkLnRyaW0oKVxuICAgICAgPyBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcihzZXNzaW9uSWQpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlbmFtZXMgPSBhd2FpdCB0aGlzLmdldFBlcnNpc3RlZEFjdGl2YXRpb25GaWxlbmFtZXMobm9ybWFsaXplZFNlc3Npb25JZCk7XG4gICAgICBjb25zdCBzdGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZmlsZW5hbWVzLm1hcChmaWxlbmFtZSA9PiB0aGlzLnJlYWRQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUoZmlsZW5hbWUpKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGVzXG4gICAgICAgIC5mbGF0TWFwKChzdGF0ZSkgPT4gKHN0YXRlID8gW3N0YXRlXSA6IFtdKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc2Vzc2lvbklkLmxvY2FsZUNvbXBhcmUoYi5zZXNzaW9uSWQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIGVudW1lcmF0ZSBhY3RpdmF0aW9uIHNuYXBzaG90cyBmb3IgcmVwb3J0aW5nJywge1xuICAgICAgICAgIHN0YXRlRGlyOiB0aGlzLnN0YXRlRGlyLFxuICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UGVyc2lzdGVkQWN0aXZhdGlvbkZpbGVuYW1lcyhzZXNzaW9uSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgcmV0dXJuIFtgYWN0aXZhdGlvbnMtJHtzZXNzaW9uSWR9Lmpzb25gXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlbmFtZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMuc3RhdGVEaXIpO1xuICAgIHJldHVybiBmaWxlbmFtZXMuZmlsdGVyKG5hbWUgPT4gL15hY3RpdmF0aW9ucy1bXi5dK1xcLmpzb24kL3UudGVzdChuYW1lKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8UGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3QgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5zdGF0ZURpciwgZmlsZW5hbWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVPcHMucmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlO1xuICAgICAgaWYgKCF0aGlzLmlzUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbklkLFxuICAgICAgICBsYXN0VXBkYXRlZDogZGF0YS5sYXN0VXBkYXRlZCxcbiAgICAgICAgYWN0aXZhdGlvbnM6IHRoaXMubm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbnMoZGF0YS5hY3RpdmF0aW9ucyksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvZ1NuYXBzaG90UmVhZEVycm9yKGZpbGVQYXRoLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGRhdGE6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRhLnZlcnNpb24gPT09IDFcbiAgICAgICYmIHR5cGVvZiBkYXRhLnNlc3Npb25JZCA9PT0gJ3N0cmluZydcbiAgICAgICYmIEJvb2xlYW4oZGF0YS5hY3RpdmF0aW9ucylcbiAgICAgICYmIHR5cGVvZiBkYXRhLmFjdGl2YXRpb25zID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbnMoYWN0aXZhdGlvbnM6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZVsnYWN0aXZhdGlvbnMnXSk6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW3R5cGUsIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGFjdGl2YXRpb25zKSkge1xuICAgICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkgfHwgIUFycmF5LmlzQXJyYXkoZW50cmllcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyaWVzID0gZW50cmllcy5mbGF0TWFwKChlbnRyeSkgPT4gdGhpcy5ub3JtYWxpemVQZXJzaXN0ZWRBY3RpdmF0aW9uKGVudHJ5KSk7XG4gICAgICBpZiAobm9ybWFsaXplZEVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBub3JtYWxpemVkW3R5cGVdID0gbm9ybWFsaXplZEVudHJpZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVBlcnNpc3RlZEFjdGl2YXRpb24oZW50cnk6IFBlcnNpc3RlZEFjdGl2YXRpb24gfCBudWxsIHwgdW5kZWZpbmVkKTogUGVyc2lzdGVkQWN0aXZhdGlvbltdIHtcbiAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5uYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZW50cnkubmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBlbnRyeS5maWxlbmFtZSA9PT0gJ3N0cmluZydcbiAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZW50cnkuZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBbe1xuICAgICAgLi4uZW50cnksXG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICB9XTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nU25hcHNob3RSZWFkRXJyb3IoZmlsZVBhdGg6IHN0cmluZywgZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoJ1tBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIHVucmVhZGFibGUgYWN0aXZhdGlvbiBzbmFwc2hvdCBkdXJpbmcgcmVwb3J0aW5nJywge1xuICAgICAgZmlsZVBhdGgsXG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vzc2lvbiBJRCB0aGlzIHN0b3JlIGlzIHNjb3BlZCB0by5cbiAgICovXG4gIGdldFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwZXJzaXN0ZW5jZSBpcyBlbmFibGVkLlxuICAgKi9cbiAgaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIHBlcnNpc3RlZCBhY3RpdmF0aW9ucy4gVXNlZCBmb3IgdGVzdGluZyBvciBhZG1pbiByZXNldC5cbiAgICovXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmNyZWF0ZUVtcHR5U3RhdGUoKTtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlLWFuZC1mb3JnZXQgcGVyc2lzdGVuY2Ugd2l0aCByZXRyeSBmb3IgdHJhbnNpZW50IGRpc2sgZmFpbHVyZXMuXG4gICAqIFJldHJpZXMgdXAgdG8gUEVSU0lTVF9NQVhfUkVUUklFUyB0aW1lcyB3aXRoIGEgc2hvcnQgZGVsYXkuXG4gICAqIERpc2sgZmFpbHVyZSBkb2VzIG5vdCBibG9jayBhY3RpdmF0aW9uIG9wZXJhdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHBlcnNpc3RBc3luYygpOiB2b2lkIHtcbiAgICB0aGlzLnBlcnNpc3RXaXRoUmV0cnkoMCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tBY3RpdmF0aW9uU3RvcmVdIEZhaWxlZCB0byBwZXJzaXN0IGFjdGl2YXRpb24gc3RhdGUgYWZ0ZXIgcmV0cmllcycsIHsgZXJyb3IgfSk7XG5cbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdBY3RpdmF0aW9uU3RvcmUucGVyc2lzdEFzeW5jJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byBwZXJzaXN0IGFjdGl2YXRpb24gc3RhdGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9JyBhZnRlciAke1BFUlNJU1RfTUFYX1JFVFJJRVMgKyAxfSBhdHRlbXB0cyDigJQgc3RhdGUgY29udGludWVzIGluLW1lbW9yeSBvbmx5YCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHsgZXJyb3I6IFN0cmluZyhlcnJvciksIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gcGVyc2lzdCB3aXRoIHJldHJpZXMgZm9yIHRyYW5zaWVudCBmYWlsdXJlcyAoZS5nLiwgRUJVU1ksIEVBR0FJTikuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcnNpc3RXaXRoUmV0cnkoYXR0ZW1wdDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGVyc2lzdCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoYXR0ZW1wdCA8IFBFUlNJU1RfTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIFBFUlNJU1RfUkVUUllfREVMQVlfTVMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdFdpdGhSZXRyeShhdHRlbXB0ICsgMSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgY3VycmVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGRpc2suXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcnNpc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBhd2FpdCBmcy5ta2Rpcih0aGlzLnN0YXRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCB0aGlzLmZpbGVPcHMud3JpdGVGaWxlKHRoaXMucGVyc2lzdFBhdGgsIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUsIG51bGwsIDIpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW1wdHlTdGF0ZSgpOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhY3RpdmF0aW9uczoge30sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG90YWxBY3RpdmF0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnN0YXRlLmFjdGl2YXRpb25zKS5yZWR1Y2UoXG4gICAgICAoc3VtLCBhcnIpID0+IHN1bSArIChhcnI/Lmxlbmd0aCA/PyAwKSwgMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2YXRpb25Db3VudHMoKTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB7XG4gICAgY29uc3QgY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgZm9yIChjb25zdCBbdHlwZSwgYXJyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnN0YXRlLmFjdGl2YXRpb25zKSkge1xuICAgICAgaWYgKGFyciAmJiBhcnIubGVuZ3RoID4gMCkge1xuICAgICAgICBjb3VudHNbdHlwZV0gPSBhcnIubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY291bnRzO1xuICB9XG59XG4iXX0=
|
|
441
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aXZhdGlvblN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FjdGl2YXRpb25TdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixHQUVuQixNQUFNLHNCQUFzQixDQUFDO0FBOEI5Qiw0RUFBNEU7QUFDNUUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRXZGOzs7O0dBSUc7QUFDSCxNQUFNLGtCQUFrQixHQUEyQjtJQUNqRCxRQUFRLEVBQUUsU0FBUztJQUNuQixNQUFNLEVBQUUsT0FBTztJQUNmLE1BQU0sRUFBRSxPQUFPO0lBQ2YsUUFBUSxFQUFFLFFBQVE7SUFDbEIsU0FBUyxFQUFFLFVBQVU7Q0FDdEIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLFdBQW1CO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyw2QkFBNkIsQ0FBQyxLQUFhO0lBQ2xELE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFD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QUMsTUFBTSxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFFBQXlCO1FBQzFELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsMkVBQTJFLFFBQVEsQ0FBQyxTQUFTLDhDQUE4QyxRQUFRLENBQUMsZ0JBQWdCLG9DQUFvQyxDQUN6TSxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxDQUFDLElBQUksQ0FDVCxpQ0FBaUMsV0FBVywyR0FBMkcsUUFBUSxDQUFDLFNBQVMsWUFBWSxDQUN0TCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWN0aXZhdGlvbiBTdG9yZVxuICpcbiAqIFBlcnNpc3RzIHBlci1zZXNzaW9uIGVsZW1lbnQgYWN0aXZhdGlvbiBzdGF0ZSB0byBkaXNrLlxuICogRWFjaCBNQ1Agc2Vzc2lvbiAoaWRlbnRpZmllZCBieSBET0xMSE9VU0VfU0VTU0lPTl9JRCkgZ2V0cyBpdHMgb3duXG4gKiBhY3RpdmF0aW9uIGZpbGUgc28gY29uY3VycmVudCBzZXNzaW9ucyBtYWludGFpbiBpbmRlcGVuZGVudCBwcm9maWxlcy5cbiAqXG4gKiBGb2xsb3dzIHRoZSBEYW5nZXJab25lRW5mb3JjZXIgcGF0dGVybjpcbiAqIC0gREktbWFuYWdlZCBzaW5nbGV0b24gd2l0aCBGaWxlT3BlcmF0aW9uc1NlcnZpY2VcbiAqIC0gaW5pdGlhbGl6ZSgpIGxvYWRzIGZyb20gZGlzayAodG9sZXJhdGVzIG1pc3NpbmcvY29ycnVwdCBmaWxlcylcbiAqIC0gSW4tbWVtb3J5IHN0YXRlIGlzIHRoZSBob3QgcGF0aDsgZGlzayB3cml0ZXMgYXJlIGZpcmUtYW5kLWZvcmdldFxuICogLSBhdG9taWNXcml0ZUZpbGUgKHdyaXRlLXRvLXRlbXAgKyByZW5hbWUpIHByZXZlbnRzIHBhcnRpYWwgcmVhZHNcbiAqXG4gKiBGb3J3YXJkIGNvbXBhdGliaWxpdHk6IFRoZSB2ZXJzaW9uZWQgZmlsZSBmb3JtYXQgKHYxKSBjYW4gZXZvbHZlIHRvXG4gKiBpbmNsdWRlIHVzZXJJZCwgb3JnSWQsIGFuZCBhdWRpdCBmaWVsZHMgZm9yIG11bHRpLXVzZXIgSFRUUFMgbW9kZVxuICogd2l0aG91dCBicmVha2luZyBleGlzdGluZyBpbnN0YWxsYXRpb25zLlxuICpcbiAqIEBzaW5jZSB2Mi4wLjAgLSBJc3N1ZSAjNTk4XG4gKi9cblxuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHR5cGUgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7XG4gIHJlc29sdmVTZXNzaW9uSWRlbnRpdHksXG4gIFNFU1NJT05fSURfUEFUVEVSTixcbiAgdHlwZSBTZXNzaW9uSWRlbnRpdHksXG59IGZyb20gJy4vc2Vzc2lvbklkZW50aXR5LmpzJztcblxuLyoqXG4gKiBBIHBlcnNpc3RlZCBhY3RpdmF0aW9uIHJlY29yZCBmb3IgYSBzaW5nbGUgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJzaXN0ZWRBY3RpdmF0aW9uIHtcbiAgLyoqIEVsZW1lbnQgbmFtZSAoaHVtYW4tcmVhZGFibGUsIHVzZWQgZm9yIGFsbCB0eXBlcykgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogRm9yIHBlcnNvbmFzIG9ubHk6IHRoZSBmaWxlbmFtZSBrZXkgdXNlZCBieSBQZXJzb25hTWFuYWdlciAqL1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgLyoqIElTTy04NjAxIHRpbWVzdGFtcCBvZiB3aGVuIGFjdGl2YXRpb24gd2FzIHBlcnNpc3RlZCAqL1xuICBhY3RpdmF0ZWRBdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlcnNpc3RlZCBmaWxlIGZvcm1hdCAodmVyc2lvbmVkIGZvciBmb3J3YXJkIGNvbXBhdGliaWxpdHkpLlxuICovXG5pbnRlcmZhY2UgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlIHtcbiAgdmVyc2lvbjogbnVtYmVyO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgbGFzdFVwZGF0ZWQ6IHN0cmluZztcbiAgYWN0aXZhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3Qge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgbGFzdFVwZGF0ZWQ6IHN0cmluZztcbiAgYWN0aXZhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT47XG59XG5cbi8qKiBWYWxpZCBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBhY3RpdmF0aW9uIChzdG9yZWQgaW4gc2luZ3VsYXIgZm9ybSkgKi9cbmNvbnN0IEFDVElWQVRBQkxFX1RZUEVTID0gbmV3IFNldChbJ3BlcnNvbmEnLCAnc2tpbGwnLCAnYWdlbnQnLCAnbWVtb3J5JywgJ2Vuc2VtYmxlJ10pO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBlbGVtZW50IHR5cGUgdG8gc2luZ3VsYXIgZm9ybSBmb3IgY29uc2lzdGVudCBzdG9yYWdlLlxuICogRWxlbWVudFR5cGUgZW51bSB1c2VzIHBsdXJhbCAoJ3BlcnNvbmFzJywgJ3NraWxscycsIGV0Yy4pIGJ1dCB3ZVxuICogc3RvcmUgaW4gc2luZ3VsYXIgZm9ybSBmb3IgcmVhZGFiaWxpdHkgYW5kIGZvcndhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuY29uc3QgUExVUkFMX1RPX1NJTkdVTEFSOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBwZXJzb25hczogJ3BlcnNvbmEnLFxuICBza2lsbHM6ICdza2lsbCcsXG4gIGFnZW50czogJ2FnZW50JyxcbiAgbWVtb3JpZXM6ICdtZW1vcnknLFxuICBlbnNlbWJsZXM6ICdlbnNlbWJsZScsXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemVUeXBlKGVsZW1lbnRUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsb3dlciA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBQTFVSQUxfVE9fU0lOR1VMQVJbbG93ZXJdID8/IGxvd2VyO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHZhbHVlKS5ub3JtYWxpemVkQ29udGVudC50cmltKCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYWN0aXZhdGlvbiBwZXJzaXN0ZW5jZSBpcyBlbmFibGVkLlxuICovXG5mdW5jdGlvbiBpc1BlcnNpc3RlbmNlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgY29uc3QgZW52VmFsdWUgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfQUNUSVZBVElPTl9QRVJTSVNURU5DRT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChlbnZWYWx1ZSA9PT0gJ2ZhbHNlJyB8fCBlbnZWYWx1ZSA9PT0gJzAnIHx8IGVudlZhbHVlID09PSAnbm8nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgZm9yIHRyYW5zaWVudCBkaXNrIGZhaWx1cmVzICovXG5jb25zdCBQRVJTSVNUX01BWF9SRVRSSUVTID0gMjtcblxuLyoqIERlbGF5IGJldHdlZW4gcmV0cnkgYXR0ZW1wdHMgaW4gbWlsbGlzZWNvbmRzICovXG5jb25zdCBQRVJTSVNUX1JFVFJZX0RFTEFZX01TID0gMTAwO1xuXG4vKipcbiAqIFBlci1zZXNzaW9uIGFjdGl2YXRpb24gc3RhdGUgcGVyc2lzdGVuY2UuXG4gKlxuICogUGVyc2lzdHMgZWxlbWVudCBhY3RpdmF0aW9uIHN0YXRlIHRvIGB+Ly5kb2xsaG91c2Uvc3RhdGUvYWN0aXZhdGlvbnMte3Nlc3Npb25JZH0uanNvbmAuXG4gKiBFYWNoIE1DUCBzZXNzaW9uIGlzIGlkZW50aWZpZWQgYnkgdGhlIGBET0xMSE9VU0VfU0VTU0lPTl9JRGAgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKlxuICogVGhyZWFkLXNhZmV0eSBub3RlOiBOb2RlLmpzIGlzIHNpbmdsZS10aHJlYWRlZCwgc28gTWFwIG9wZXJhdGlvbnMgYXJlIHNhZmUuXG4gKiBGb3IgbXVsdGktcHJvY2VzcyBkZXBsb3ltZW50cyAoZnV0dXJlIEhUVFBTKSwgY29uc2lkZXIgUmVkaXMgb3IgREIgYmFja2luZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIFNlc3Npb24gSUQgc2V0IHZpYSBlbnZpcm9ubWVudDpcbiAqIC8vIERPTExIT1VTRV9TRVNTSU9OX0lEPWNsYXVkZS1jb2RlXG4gKlxuICogY29uc3Qgc3RvcmUgPSBuZXcgQWN0aXZhdGlvblN0b3JlKGZpbGVPcHMpO1xuICogYXdhaXQgc3RvcmUuaW5pdGlhbGl6ZSgpOyAgLy8gbG9hZHMgfi8uZG9sbGhvdXNlL3N0YXRlL2FjdGl2YXRpb25zLWNsYXVkZS1jb2RlLmpzb25cbiAqXG4gKiBzdG9yZS5yZWNvcmRBY3RpdmF0aW9uKCdza2lsbCcsICdjb2RlLXJldmlld2VyJyk7XG4gKiBzdG9yZS5yZWNvcmRBY3RpdmF0aW9uKCdwZXJzb25hJywgJ0NyZWF0aXZlIERldicsICdjcmVhdGl2ZS1kZXYubWQnKTtcbiAqXG4gKiAvLyBPbiBuZXh0IHNlcnZlciBzdGFydCwgaW5pdGlhbGl6ZSgpIHJlc3RvcmVzIHRoZXNlIGFjdGl2YXRpb25zXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGl2YXRpb25TdG9yZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wczogRmlsZU9wZXJhdGlvbnNTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZVNlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3RQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIHN0YXRlOiBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGU7XG5cbiAgY29uc3RydWN0b3IoZmlsZU9wczogRmlsZU9wZXJhdGlvbnNTZXJ2aWNlLCBzdGF0ZURpcj86IHN0cmluZykge1xuICAgIHRoaXMuZmlsZU9wcyA9IGZpbGVPcHM7XG4gICAgY29uc3QgaWRlbnRpdHkgPSByZXNvbHZlU2Vzc2lvbklkZW50aXR5KCk7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBpZGVudGl0eS5zZXNzaW9uSWQ7XG4gICAgdGhpcy5ydW50aW1lU2Vzc2lvbklkID0gaWRlbnRpdHkucnVudGltZVNlc3Npb25JZDtcbiAgICB0aGlzLmVuYWJsZWQgPSBpc1BlcnNpc3RlbmNlRW5hYmxlZCgpO1xuICAgIHRoaXMuc3RhdGVEaXIgPSBzdGF0ZURpciA/PyBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdzdGF0ZScpO1xuICAgIHRoaXMucGVyc2lzdFBhdGggPSBwYXRoLmpvaW4odGhpcy5zdGF0ZURpciwgYGFjdGl2YXRpb25zLSR7dGhpcy5zZXNzaW9uSWR9Lmpzb25gKTtcblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmNyZWF0ZUVtcHR5U3RhdGUoKTtcbiAgICB0aGlzLmxvZ1Jlc29sdmVkU2Vzc2lvbklkZW50aXR5KGlkZW50aXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHBlcnNpc3RlZCBhY3RpdmF0aW9ucyBmcm9tIGRpc2suXG4gICAqIENhbGwgb25jZSBhZnRlciBjb25zdHJ1Y3Rpb24gdG8gcmVzdG9yZSBzdGF0ZSBmcm9tIGEgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICogSWYgdGhlIGZpbGUgaXMgbWlzc2luZyBvciBjb3JydXB0LCBzdGFydHMgd2l0aCBlbXB0eSBhY3RpdmF0aW9ucy5cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0FjdGl2YXRpb25TdG9yZV0gUGVyc2lzdGVuY2UgZGlzYWJsZWQgdmlhIERPTExIT1VTRV9BQ1RJVkFUSU9OX1BFUlNJU1RFTkNFJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVPcHMucmVhZEZpbGUodGhpcy5wZXJzaXN0UGF0aCk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGU7XG5cbiAgICAgIGlmIChkYXRhLnZlcnNpb24gPT09IDEgJiYgZGF0YS5hY3RpdmF0aW9ucyAmJiB0eXBlb2YgZGF0YS5hY3RpdmF0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgYW5kIGxvYWQgb25seSBrbm93biBlbGVtZW50IHR5cGVzXG4gICAgICAgIGZvciAoY29uc3QgW3R5cGUsIGFjdGl2YXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhkYXRhLmFjdGl2YXRpb25zKSkge1xuICAgICAgICAgIGlmIChBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkgJiYgQXJyYXkuaXNBcnJheShhY3RpdmF0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPSBhY3RpdmF0aW9ucy5mbGF0TWFwKChhKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYSB8fCB0eXBlb2YgYS5uYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoYS5uYW1lKTtcbiAgICAgICAgICAgICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBhLmZpbGVuYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoYS5maWxlbmFtZSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLFxuICAgICAgICAgICAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5nZXRUb3RhbEFjdGl2YXRpb25Db3VudCgpO1xuICAgICAgICBpZiAodG90YWxDb3VudCA+IDApIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBbQWN0aXZhdGlvblN0b3JlXSBSZXN0b3JlZCAke3RvdGFsQ291bnR9IGFjdGl2YXRpb24ocykgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9J2BcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ0FjdGl2YXRpb25TdG9yZS5pbml0aWFsaXplJyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBSZXN0b3JlZCAke3RvdGFsQ291bnR9IGFjdGl2YXRpb24ocykgZnJvbSBkaXNrIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfSdgLFxuICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgY291bnRzOiB0aGlzLmdldEFjdGl2YXRpb25Db3VudHMoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgW0FjdGl2YXRpb25TdG9yZV0gTm8gYWN0aXZhdGlvbiBmaWxlIGZvdW5kIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfScsIHN0YXJ0aW5nIGZyZXNoYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybihgW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIGxvYWQgYWN0aXZhdGlvbiBmaWxlIGZvciBzZXNzaW9uICcke3RoaXMuc2Vzc2lvbklkfScsIHN0YXJ0aW5nIGZyZXNoYCwgeyBlcnJvciB9KTtcblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0VMRU1FTlRfQUNUSVZBVEVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgICAgc291cmNlOiAnQWN0aXZhdGlvblN0b3JlLmluaXRpYWxpemUnLFxuICAgICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gbG9hZCBhY3RpdmF0aW9uIGZpbGUgZm9yIHNlc3Npb24gJyR7dGhpcy5zZXNzaW9uSWR9JyDigJQgc3RhcnRpbmcgZnJlc2ggKHBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbilgLFxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7IGVycm9yOiBTdHJpbmcoZXJyb3IpLCBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgYW4gZWxlbWVudCBhY3RpdmF0aW9uLiBGaXJlLWFuZC1mb3JnZXQgcGVyc2lzdC5cbiAgICovXG4gIHJlY29yZEFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVkKSByZXR1cm47XG5cbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKG5hbWUpO1xuICAgIGlmICghbm9ybWFsaXplZE5hbWUpIHJldHVybjtcbiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSB0eXBlb2YgZmlsZW5hbWUgPT09ICdzdHJpbmcnXG4gICAgICA/IG5vcm1hbGl6ZUFjdGl2YXRpb25JZGVudGlmaWVyKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0pIHtcbiAgICAgIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPSBbXTtcbiAgICB9XG5cbiAgICAvLyBEZWR1cGxpY2F0ZSDigJQgZG9uJ3QgYWRkIGlmIGFscmVhZHkgcHJlc2VudFxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSE7XG4gICAgY29uc3QgYWxyZWFkeUFjdGl2ZSA9IGV4aXN0aW5nLnNvbWUoYSA9PiBhLm5hbWUgPT09IG5vcm1hbGl6ZWROYW1lKTtcbiAgICBpZiAoYWxyZWFkeUFjdGl2ZSkgcmV0dXJuO1xuXG4gICAgZXhpc3RpbmcucHVzaCh7XG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICAgIGFjdGl2YXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLnBlcnNpc3RBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhbiBlbGVtZW50IGRlYWN0aXZhdGlvbi4gRmlyZS1hbmQtZm9yZ2V0IHBlcnNpc3QuXG4gICAqL1xuICByZWNvcmREZWFjdGl2YXRpb24oZWxlbWVudFR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHR5cGUgPSBub3JtYWxpemVUeXBlKGVsZW1lbnRUeXBlKTtcbiAgICBpZiAoIUFDVElWQVRBQkxFX1RZUEVTLmhhcyh0eXBlKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIobmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgYWN0aXZhdGlvbnMgPSB0aGlzLnN0YXRlLmFjdGl2YXRpb25zW3R5cGVdO1xuICAgIGlmICghYWN0aXZhdGlvbnMpIHJldHVybjtcblxuICAgIGNvbnN0IGluaXRpYWxMZW5ndGggPSBhY3RpdmF0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSA9IGFjdGl2YXRpb25zLmZpbHRlcihhID0+IGEubmFtZSAhPT0gbm9ybWFsaXplZE5hbWUpO1xuXG4gICAgLy8gT25seSBwZXJzaXN0IGlmIHNvbWV0aGluZyBhY3R1YWxseSBjaGFuZ2VkXG4gICAgaWYgKHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0hLmxlbmd0aCAhPT0gaW5pdGlhbExlbmd0aCkge1xuICAgICAgdGhpcy5wZXJzaXN0QXN5bmMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgc3BlY2lmaWMgYWN0aXZhdGlvbiBieSBuYW1lICh1c2VkIGR1cmluZyByZXN0b3JlIHRvIHBydW5lIHN0YWxlIGVudHJpZXMpLlxuICAgKi9cbiAgcmVtb3ZlU3RhbGVBY3RpdmF0aW9uKGVsZW1lbnRUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRGVhY3RpdmF0aW9uKGVsZW1lbnRUeXBlLCBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHBlcnNpc3RlZCBhY3RpdmF0aW9ucyBmb3IgYSBnaXZlbiBlbGVtZW50IHR5cGUuXG4gICAqL1xuICBnZXRBY3RpdmF0aW9ucyhlbGVtZW50VHlwZTogc3RyaW5nKTogUGVyc2lzdGVkQWN0aXZhdGlvbltdIHtcbiAgICBjb25zdCB0eXBlID0gbm9ybWFsaXplVHlwZShlbGVtZW50VHlwZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZhdGlvbnNbdHlwZV0gPyBbLi4udGhpcy5zdGF0ZS5hY3RpdmF0aW9uc1t0eXBlXSFdIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBwZXJzaXN0ZWQgYWN0aXZhdGlvbiBzbmFwc2hvdHMgZnJvbSBkaXNrIGZvciByZXBvcnRpbmcvZGlhZ25vc3RpY3MuXG4gICAqXG4gICAqIFRoaXMgaW50ZW50aW9uYWxseSBkb2VzIG5vdCBtdXRhdGUgdGhlIHN0b3JlJ3MgaW4tbWVtb3J5IHN0YXRlLCBhbmQgaXQgaXNcbiAgICogc2FmZSB0byBjYWxsIGZyb20gdGhlIHdlYiBjb25zb2xlIHRvIGluc3BlY3Qgb3RoZXIgc2Vzc2lvbnMnIHBlcnNpc3RlZFxuICAgKiBhY3RpdmF0aW9ucyB3aXRob3V0IGNoYW5naW5nIGxpdmUgcG9saWN5IGVuZm9yY2VtZW50IGZvciB0aGUgY3VycmVudFxuICAgKiBwcm9jZXNzLlxuICAgKi9cbiAgYXN5bmMgbGlzdFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZXMoc2Vzc2lvbklkPzogc3RyaW5nKTogUHJvbWlzZTxQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGVTbmFwc2hvdFtdPiB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkU2Vzc2lvbklkID0gdHlwZW9mIHNlc3Npb25JZCA9PT0gJ3N0cmluZycgJiYgc2Vzc2lvbklkLnRyaW0oKVxuICAgICAgPyBub3JtYWxpemVBY3RpdmF0aW9uSWRlbnRpZmllcihzZXNzaW9uSWQpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlbmFtZXMgPSBhd2FpdCB0aGlzLmdldFBlcnNpc3RlZEFjdGl2YXRpb25GaWxlbmFtZXMobm9ybWFsaXplZFNlc3Npb25JZCk7XG4gICAgICBjb25zdCBzdGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZmlsZW5hbWVzLm1hcChmaWxlbmFtZSA9PiB0aGlzLnJlYWRQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUoZmlsZW5hbWUpKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGVzXG4gICAgICAgIC5mbGF0TWFwKChzdGF0ZSkgPT4gKHN0YXRlID8gW3N0YXRlXSA6IFtdKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc2Vzc2lvbklkLmxvY2FsZUNvbXBhcmUoYi5zZXNzaW9uSWQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIGVudW1lcmF0ZSBhY3RpdmF0aW9uIHNuYXBzaG90cyBmb3IgcmVwb3J0aW5nJywge1xuICAgICAgICAgIHN0YXRlRGlyOiB0aGlzLnN0YXRlRGlyLFxuICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UGVyc2lzdGVkQWN0aXZhdGlvbkZpbGVuYW1lcyhzZXNzaW9uSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgcmV0dXJuIFtgYWN0aXZhdGlvbnMtJHtzZXNzaW9uSWR9Lmpzb25gXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlbmFtZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMuc3RhdGVEaXIpO1xuICAgIHJldHVybiBmaWxlbmFtZXMuZmlsdGVyKG5hbWUgPT4gL15hY3RpdmF0aW9ucy1bXi5dK1xcLmpzb24kL3UudGVzdChuYW1lKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRQZXJzaXN0ZWRBY3RpdmF0aW9uU3RhdGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8UGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlU25hcHNob3QgfCBudWxsPiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5zdGF0ZURpciwgZmlsZW5hbWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmZpbGVPcHMucmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlO1xuICAgICAgaWYgKCF0aGlzLmlzUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbklkLFxuICAgICAgICBsYXN0VXBkYXRlZDogZGF0YS5sYXN0VXBkYXRlZCxcbiAgICAgICAgYWN0aXZhdGlvbnM6IHRoaXMubm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbnMoZGF0YS5hY3RpdmF0aW9ucyksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvZ1NuYXBzaG90UmVhZEVycm9yKGZpbGVQYXRoLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzUGVyc2lzdGVkQWN0aXZhdGlvblN0YXRlKGRhdGE6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRhLnZlcnNpb24gPT09IDFcbiAgICAgICYmIHR5cGVvZiBkYXRhLnNlc3Npb25JZCA9PT0gJ3N0cmluZydcbiAgICAgICYmIEJvb2xlYW4oZGF0YS5hY3RpdmF0aW9ucylcbiAgICAgICYmIHR5cGVvZiBkYXRhLmFjdGl2YXRpb25zID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplUGVyc2lzdGVkQWN0aXZhdGlvbnMoYWN0aXZhdGlvbnM6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZVsnYWN0aXZhdGlvbnMnXSk6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IFJlY29yZDxzdHJpbmcsIFBlcnNpc3RlZEFjdGl2YXRpb25bXT4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW3R5cGUsIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGFjdGl2YXRpb25zKSkge1xuICAgICAgaWYgKCFBQ1RJVkFUQUJMRV9UWVBFUy5oYXModHlwZSkgfHwgIUFycmF5LmlzQXJyYXkoZW50cmllcykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRyaWVzID0gZW50cmllcy5mbGF0TWFwKChlbnRyeSkgPT4gdGhpcy5ub3JtYWxpemVQZXJzaXN0ZWRBY3RpdmF0aW9uKGVudHJ5KSk7XG4gICAgICBpZiAobm9ybWFsaXplZEVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBub3JtYWxpemVkW3R5cGVdID0gbm9ybWFsaXplZEVudHJpZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVBlcnNpc3RlZEFjdGl2YXRpb24oZW50cnk6IFBlcnNpc3RlZEFjdGl2YXRpb24gfCBudWxsIHwgdW5kZWZpbmVkKTogUGVyc2lzdGVkQWN0aXZhdGlvbltdIHtcbiAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5uYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZW50cnkubmFtZSk7XG4gICAgaWYgKCFub3JtYWxpemVkTmFtZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IHR5cGVvZiBlbnRyeS5maWxlbmFtZSA9PT0gJ3N0cmluZydcbiAgICAgID8gbm9ybWFsaXplQWN0aXZhdGlvbklkZW50aWZpZXIoZW50cnkuZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBbe1xuICAgICAgLi4uZW50cnksXG4gICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgIC4uLihub3JtYWxpemVkRmlsZW5hbWUgPyB7IGZpbGVuYW1lOiBub3JtYWxpemVkRmlsZW5hbWUgfSA6IHt9KSxcbiAgICB9XTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nU25hcHNob3RSZWFkRXJyb3IoZmlsZVBhdGg6IHN0cmluZywgZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoJ1tBY3RpdmF0aW9uU3RvcmVdIFNraXBwaW5nIHVucmVhZGFibGUgYWN0aXZhdGlvbiBzbmFwc2hvdCBkdXJpbmcgcmVwb3J0aW5nJywge1xuICAgICAgZmlsZVBhdGgsXG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vzc2lvbiBJRCB0aGlzIHN0b3JlIGlzIHNjb3BlZCB0by5cbiAgICovXG4gIGdldFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW50aW1lLXVuaXF1ZSBzZXNzaW9uIGlkZW50aWZpZXIgdXNlZCBmb3IgbGl2ZSBjb25zb2xlL3Nlc3Npb24gcmVnaXN0cnlcbiAgICogc3VyZmFjZXMgd2hlbiB0aGUgc3RhYmxlIHBlcnNpc3RlbmNlIGlkZW50aXR5IGlzIHNoYXJlZCBhY3Jvc3MgdW5uYW1lZFxuICAgKiBzZXNzaW9ucy5cbiAgICovXG4gIGdldFJ1bnRpbWVTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lU2Vzc2lvbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHBlcnNpc3RlbmNlIGlzIGVuYWJsZWQuXG4gICAqL1xuICBpc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgcGVyc2lzdGVkIGFjdGl2YXRpb25zLiBVc2VkIGZvciB0ZXN0aW5nIG9yIGFkbWluIHJlc2V0LlxuICAgKi9cbiAgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuY3JlYXRlRW1wdHlTdGF0ZSgpO1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMucGVyc2lzdEFzeW5jKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpcmUtYW5kLWZvcmdldCBwZXJzaXN0ZW5jZSB3aXRoIHJldHJ5IGZvciB0cmFuc2llbnQgZGlzayBmYWlsdXJlcy5cbiAgICogUmV0cmllcyB1cCB0byBQRVJTSVNUX01BWF9SRVRSSUVTIHRpbWVzIHdpdGggYSBzaG9ydCBkZWxheS5cbiAgICogRGlzayBmYWlsdXJlIGRvZXMgbm90IGJsb2NrIGFjdGl2YXRpb24gb3BlcmF0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgcGVyc2lzdEFzeW5jKCk6IHZvaWQge1xuICAgIHRoaXMucGVyc2lzdFdpdGhSZXRyeSgwKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBsb2dnZXIud2FybignW0FjdGl2YXRpb25TdG9yZV0gRmFpbGVkIHRvIHBlcnNpc3QgYWN0aXZhdGlvbiBzdGF0ZSBhZnRlciByZXRyaWVzJywgeyBlcnJvciB9KTtcblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnRUxFTUVOVF9BQ1RJVkFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ0FjdGl2YXRpb25TdG9yZS5wZXJzaXN0QXN5bmMnLFxuICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIHBlcnNpc3QgYWN0aXZhdGlvbiBzdGF0ZSBmb3Igc2Vzc2lvbiAnJHt0aGlzLnNlc3Npb25JZH0nIGFmdGVyICR7UEVSU0lTVF9NQVhfUkVUUklFUyArIDF9IGF0dGVtcHRzIOKAlCBzdGF0ZSBjb250aW51ZXMgaW4tbWVtb3J5IG9ubHlgLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YTogeyBlcnJvcjogU3RyaW5nKGVycm9yKSwgc2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byBwZXJzaXN0IHdpdGggcmV0cmllcyBmb3IgdHJhbnNpZW50IGZhaWx1cmVzIChlLmcuLCBFQlVTWSwgRUFHQUlOKS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGVyc2lzdFdpdGhSZXRyeShhdHRlbXB0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0KCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChhdHRlbXB0IDwgUEVSU0lTVF9NQVhfUkVUUklFUykge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgUEVSU0lTVF9SRVRSWV9ERUxBWV9NUykpO1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0V2l0aFJldHJ5KGF0dGVtcHQgKyAxKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSBjdXJyZW50IGFjdGl2YXRpb24gc3RhdGUgdG8gZGlzay5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGVyc2lzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMuc3RhdGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHRoaXMuZmlsZU9wcy53cml0ZUZpbGUodGhpcy5wZXJzaXN0UGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZSwgbnVsbCwgMikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFbXB0eVN0YXRlKCk6IFBlcnNpc3RlZEFjdGl2YXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGFjdGl2YXRpb25zOiB7fSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb3RhbEFjdGl2YXRpb25Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc3RhdGUuYWN0aXZhdGlvbnMpLnJlZHVjZShcbiAgICAgIChzdW0sIGFycikgPT4gc3VtICsgKGFycj8ubGVuZ3RoID8/IDApLCAwXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZhdGlvbkNvdW50cygpOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHtcbiAgICBjb25zdCBjb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFt0eXBlLCBhcnJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc3RhdGUuYWN0aXZhdGlvbnMpKSB7XG4gICAgICBpZiAoYXJyICYmIGFyci5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvdW50c1t0eXBlXSA9IGFyci5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudHM7XG4gIH1cblxuICBwcml2YXRlIGxvZ1Jlc29sdmVkU2Vzc2lvbklkZW50aXR5KGlkZW50aXR5OiBTZXNzaW9uSWRlbnRpdHkpOiB2b2lkIHtcbiAgICBjb25zdCByYXdFbnZWYWx1ZSA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9TRVNTSU9OX0lEPy50cmltKCk7XG4gICAgaWYgKGlkZW50aXR5LnNvdXJjZSA9PT0gJ2VudicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXJhd0VudlZhbHVlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFtBY3RpdmF0aW9uU3RvcmVdIE5vIERPTExIT1VTRV9TRVNTSU9OX0lEIHNldCDigJQgZGVyaXZlZCBzdGFibGUgc2Vzc2lvbiAnJHtpZGVudGl0eS5zZXNzaW9uSWR9JyBmcm9tIHdvcmtzcGFjZSBjb250ZXh0OyBydW50aW1lIHNlc3Npb24gJyR7aWRlbnRpdHkucnVudGltZVNlc3Npb25JZH0nIHJlbWFpbnMgdW5pcXVlIGZvciB0aGlzIHByb2Nlc3MuYFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIVNFU1NJT05fSURfUEFUVEVSTi50ZXN0KHJhd0VudlZhbHVlKSkge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGBJbnZhbGlkIERPTExIT1VTRV9TRVNTSU9OX0lEICcke3Jhd0VudlZhbHVlfScg4oCUIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgdGhlbiBhbHBoYW51bWVyaWMvaHlwaGVucy91bmRlcnNjb3JlcywgMS02NCBjaGFycy4gVXNpbmcgZGVyaXZlZCBzZXNzaW9uICcke2lkZW50aXR5LnNlc3Npb25JZH0nIGluc3RlYWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
import { IFileOperationsService } from './FileOperationsService.js';
|
|
12
12
|
import type { StartupTimer, StartupReport } from '../telemetry/StartupTimer.js';
|
|
13
13
|
export interface BuildInfo {
|
|
14
|
+
sessionId: string;
|
|
15
|
+
runtimeSessionId: string;
|
|
16
|
+
sessionSource: 'env' | 'derived';
|
|
14
17
|
package: {
|
|
15
18
|
name: string;
|
|
16
19
|
version: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildInfoService.d.ts","sourceRoot":"","sources":["../../src/services/BuildInfoService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"BuildInfoService.d.ts","sourceRoot":"","sources":["../../src/services/BuildInfoService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGhF,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,KAAK,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;KACjC,CAAC;IACF,WAAW,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,OAAO,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,EAAE;QACN,SAAS,EAAE,IAAI,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,uDAAuD;IACvD,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC;QACjC,qBAAqB,EAAE,OAAO,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,aAAa,CAAC;KACjC,CAAC;CACH;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAO;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,qEAAqE;IACrE,OAAO,CAAC,YAAY,CAA6B;IACjD,2DAA2D;IAC3D,OAAO,CAAC,oBAAoB,CAAgC;gBAEhD,cAAc,EAAE,sBAAsB;IAKlD;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAI1C;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI;IAIrD;;;;;;;OAOG;IACU,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAgF/C;;;;OAIG;IACI,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IA2F/C;;;OAGG;YACW,UAAU;IAcxB;;;OAGG;YACW,aAAa;IA+B3B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;CAIrB"}
|