@dollhousemcp/mcp-server 1.7.2 → 1.7.3
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 +22 -0
- package/README.md.backup +0 -8
- package/dist/auth/GitHubAuthManager.js +2 -2
- package/dist/config/ConfigManager.d.ts +158 -25
- package/dist/config/ConfigManager.d.ts.map +1 -1
- package/dist/config/ConfigManager.js +627 -88
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ConfigHandler.d.ts +32 -0
- package/dist/handlers/ConfigHandler.d.ts.map +1 -0
- package/dist/handlers/ConfigHandler.js +202 -0
- package/dist/handlers/SyncHandlerV2.d.ts +42 -0
- package/dist/handlers/SyncHandlerV2.d.ts.map +1 -0
- package/dist/handlers/SyncHandlerV2.js +231 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -3
- package/dist/portfolio/GitHubPortfolioIndexer.d.ts +0 -1
- package/dist/portfolio/GitHubPortfolioIndexer.d.ts.map +1 -1
- package/dist/portfolio/GitHubPortfolioIndexer.js +36 -16
- package/dist/portfolio/PortfolioRepoManager.d.ts +2 -1
- package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioRepoManager.js +2 -1
- package/dist/portfolio/PortfolioSyncManager.d.ts +127 -0
- package/dist/portfolio/PortfolioSyncManager.d.ts.map +1 -0
- package/dist/portfolio/PortfolioSyncManager.js +818 -0
- package/dist/security/audit/config/suppressions.d.ts.map +1 -1
- package/dist/security/audit/config/suppressions.js +54 -2
- package/dist/security/secureYamlParser.d.ts +46 -2
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +47 -3
- package/dist/server/ServerSetup.d.ts.map +1 -1
- package/dist/server/ServerSetup.js +16 -10
- package/dist/server/tools/ConfigToolsV2.d.ts +10 -0
- package/dist/server/tools/ConfigToolsV2.d.ts.map +1 -0
- package/dist/server/tools/ConfigToolsV2.js +110 -0
- package/dist/server/types.d.ts +2 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -1
- package/package.json +1 -1
|
@@ -60,6 +60,7 @@ export class PortfolioRepoManager {
|
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
62
|
* Make authenticated GitHub API request
|
|
63
|
+
* Made public to support GitHubPortfolioIndexer operations
|
|
63
64
|
*/
|
|
64
65
|
async githubRequest(path, method = 'GET', body) {
|
|
65
66
|
const token = await this.getTokenAndValidate();
|
|
@@ -512,4 +513,4 @@ These elements can be imported into your DollhouseMCP installation.
|
|
|
512
513
|
return `# ${element.metadata.name}\n\n${element.metadata.description || ''}`;
|
|
513
514
|
}
|
|
514
515
|
}
|
|
515
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9ydGZvbGlvUmVwb01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRdkUsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixNQUFNLENBQVUsbUJBQW1CLEdBQUcscUJBQXFCLENBQUM7SUFDNUQsTUFBTSxDQUFVLG1CQUFtQixHQUFHLG1DQUFtQyxDQUFDO0lBQzFFLE1BQU0sQ0FBVSxlQUFlLEdBQUcsd0JBQXdCLENBQUM7SUFFM0QsS0FBSyxHQUFrQixJQUFJLENBQUM7SUFFcEM7UUFDRSxzQ0FBc0M7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLG1CQUFtQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7WUFDekYsQ0FBQztZQUVELG9FQUFvRTtZQUNwRSxrRkFBa0Y7WUFDbEYsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUMxRSxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxnREFBZ0Q7YUFDM0UsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLHlCQUF5QixFQUFFLENBQUMsQ0FBQztZQUM3RyxDQUFDO1lBRUQsb0VBQW9FO1lBQ3BFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsTUFBTSxFQUFFLCtCQUErQjtnQkFDdkMsT0FBTyxFQUFFLDhEQUE4RDthQUN4RSxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxhQUFhLENBQ3pCLElBQVksRUFDWixTQUFpQixLQUFLLEVBQ3RCLElBQVU7UUFFVixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9DLE1BQU0sR0FBRyxHQUFHLEdBQUcsb0JBQW9CLENBQUMsZUFBZSxHQUFHLElBQUksRUFBRSxDQUFDO1FBRTdELE1BQU0sT0FBTyxHQUFnQjtZQUMzQixNQUFNO1lBQ04sT0FBTyxFQUFFO2dCQUNQLGVBQWUsRUFBRSxVQUFVLEtBQUssRUFBRTtnQkFDbEMsUUFBUSxFQUFFLGdDQUFnQztnQkFDMUMsY0FBYyxFQUFFLGtCQUFrQjtnQkFDbEMsWUFBWSxFQUFFLGtCQUFrQjthQUNqQztTQUNGLENBQUM7UUFFRixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFM0MsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sS0FBSyxHQUFRLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDckUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDakIsS0FBSyxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztZQUNsQyxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsQ0FBQyw4QkFBOEI7UUFDN0MsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRW5DLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsbUVBQW1FO1lBQ25FLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUkscUJBQXFCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxRSxJQUFJLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVU7WUFFaEQsUUFBUSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssR0FBRztvQkFDTixZQUFZLEdBQUcsd0RBQXdELENBQUM7b0JBQ3hFLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztvQkFDakMsTUFBTTtnQkFDUixLQUFLLEdBQUc7b0JBQ04sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO3dCQUN6QyxZQUFZLEdBQUcsbUNBQW1DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDakUsU0FBUyxHQUFHLG9CQUFvQixDQUFDO29CQUNuQyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sWUFBWSxHQUFHLGdDQUFnQyxJQUFJLENBQUMsT0FBTyxJQUFJLDBCQUEwQixFQUFFLENBQUM7d0JBQzVGLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQjtvQkFDMUQsQ0FBQztvQkFDRCxNQUFNO2dCQUNSLEtBQUssR0FBRztvQkFDTiw0REFBNEQ7b0JBQzVELFlBQVksR0FBRyxpQ0FBaUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxxQ0FBcUMsRUFBRSxDQUFDO29CQUN4RyxTQUFTLEdBQUcsb0JBQW9CLENBQUM7b0JBQ2pDLE1BQU07Z0JBQ1IsS0FBSyxHQUFHO29CQUNOLFlBQVksR0FBRyxrREFBa0QsQ0FBQztvQkFDbEUsU0FBUyxHQUFHLG9CQUFvQixDQUFDO29CQUNqQyxNQUFNO2dCQUNSO29CQUNFLFlBQVksR0FBRyxxQkFBcUIsUUFBUSxDQUFDLE1BQU0sTUFBTSxJQUFJLENBQUMsT0FBTyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQy9GLENBQUM7WUFFRCxNQUFNLEtBQUssR0FBUSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDL0IsS0FBSyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDdkIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxRQUFnQjtRQUN6Qyw0REFBNEQ7UUFDNUQsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDbEYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUNuQyxVQUFVLGtCQUFrQixJQUFJLG9CQUFvQixDQUFDLG1CQUFtQixFQUFFLENBQzNFLENBQUM7WUFDRixPQUFPLElBQUksS0FBSyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZiw0REFBNEQ7WUFDNUQsWUFBWSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3JGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQWdCLEVBQUUsT0FBNEI7UUFDbEUsMkVBQTJFO1FBQzNFLE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1FBRWxGLG9EQUFvRDtRQUNwRCxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBRTlFLHFEQUFxRDtRQUNyRCxlQUFlLENBQUMsZ0JBQWdCLENBQUM7WUFDL0IsSUFBSSxFQUFFLDBCQUEwQjtZQUNoQyxRQUFRLEVBQUUsS0FBSztZQUNmLE1BQU0sRUFBRSxzQ0FBc0M7WUFDOUMsT0FBTyxFQUFFLFFBQVEsa0JBQWtCLGtDQUFrQztZQUNyRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUU7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsb0NBQW9DO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FDM0MsVUFBVSxrQkFBa0IsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUMzRSxDQUFDO1FBRUYsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztZQUNsRSxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDL0IsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQ25DLGFBQWEsRUFDYixNQUFNLEVBQ047Z0JBQ0UsSUFBSSxFQUFFLG9CQUFvQixDQUFDLG1CQUFtQjtnQkFDOUMsV0FBVyxFQUFFLG9CQUFvQixDQUFDLG1CQUFtQjtnQkFDckQsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsU0FBUyxFQUFFLElBQUk7YUFDaEIsQ0FDRixDQUFDO1lBRUYsaUNBQWlDO1lBQ2pDLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFFMUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLDBGQUEwRjtZQUMxRixJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDO2dCQUNuRSxNQUFNLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxrQkFBa0IsMkJBQTJCLENBQUMsQ0FBQztnQkFFdEcsMERBQTBEO2dCQUMxRCxJQUFJLENBQUM7b0JBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUMzQyxVQUFVLGtCQUFrQixJQUFJLG9CQUFvQixDQUFDLG1CQUFtQixFQUFFLENBQzNFLENBQUM7b0JBQ0YsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUMxQyxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUM7b0JBQy9CLENBQUM7Z0JBQ0gsQ0FBQztnQkFBQyxPQUFPLFlBQVksRUFBRSxDQUFDO29CQUN0QixZQUFZLENBQUMsUUFBUSxDQUFDLDBDQUEwQyxFQUFFLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7Z0JBQ3BILENBQUM7Z0JBRUQsaUVBQWlFO2dCQUNqRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxrQkFBa0IscUNBQXFDLENBQUMsQ0FBQztZQUN0SCxDQUFDO1lBRUQsWUFBWSxDQUFDLFFBQVEsQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQzNHLE1BQU0sWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsNkNBQTZDLGtCQUFrQixLQUFLLEtBQUssQ0FBQyxPQUFPLElBQUkseUJBQXlCLEVBQUUsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckwsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQWlCLEVBQUUsT0FBNEI7UUFDL0Qsb0RBQW9EO1FBQ3BELElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsT0FBTyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDeEUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5QixzRUFBc0U7UUFDdEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDO1FBQzNELE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxPQUFPLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUV6RSxzRUFBc0U7UUFDdEUsZUFBZSxDQUFDLGdCQUFnQixDQUFDO1lBQy9CLElBQUksRUFBRSxpQkFBaUI7WUFDdkIsUUFBUSxFQUFFLEtBQUs7WUFDZixNQUFNLEVBQUUsa0NBQWtDO1lBQzFDLE9BQU8sRUFBRSxrQ0FBa0MsT0FBTyxDQUFDLEVBQUUsZUFBZTtZQUNwRSxRQUFRLEVBQUU7Z0JBQ1IsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNyQixXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUk7Z0JBQ3pCLFFBQVE7YUFDVDtTQUNGLENBQUMsQ0FBQztRQUVILDJDQUEyQztRQUMzQyxtRkFBbUY7UUFDbkYsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RSxNQUFNLFFBQVEsR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUSxLQUFLLENBQUM7UUFFbEQsdURBQXVEO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuRCx3REFBd0Q7UUFDeEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsT0FBTyxDQUFDLEVBQUUsOEJBQThCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDO1FBQy9HLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RSxNQUFNLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEcsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQztZQUNILHVFQUF1RTtZQUN2RSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDO2dCQUNILFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQ3JDLFVBQVUsUUFBUSxJQUFJLG9CQUFvQixDQUFDLG1CQUFtQixhQUFhLFFBQVEsRUFBRSxDQUN0RixDQUFDO1lBQ0osQ0FBQztZQUFDLE9BQU8sVUFBZSxFQUFFLENBQUM7Z0JBQ3pCLHFFQUFxRTtnQkFDckUsd0VBQXdFO2dCQUN4RSxzRUFBc0U7Z0JBQ3RFLHVFQUF1RTtnQkFDdkUseUVBQXlFO2dCQUN6RSwyREFBMkQ7Z0JBQzNELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxvQkFBb0IsRUFBRSxDQUFDO29CQUMxRSxNQUFNLFVBQVUsQ0FBQyxDQUFDLHdDQUF3QztnQkFDNUQsQ0FBQztnQkFDRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztvQkFDMUUsTUFBTSxVQUFVLENBQUMsQ0FBQyxrREFBa0Q7Z0JBQ3RFLENBQUM7Z0JBQ0Qsc0VBQXNFO2dCQUN0RSwrREFBK0Q7Z0JBQy9ELE1BQU0sQ0FBQyxLQUFLLENBQUMscURBQXFELFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQzlFLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDdEIsQ0FBQztZQUVELGtFQUFrRTtZQUNsRSxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3pDLHNDQUFzQztnQkFDdEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFdEYsMkJBQTJCO2dCQUMzQixJQUFJLGVBQWUsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyx5REFBeUQsRUFBRTt3QkFDckUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFO3dCQUNyQixXQUFXLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO3dCQUNsQyxRQUFRO3FCQUNULENBQUMsQ0FBQztvQkFFSCxvRUFBb0U7b0JBQ3BFLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxRQUFRO3dCQUN2QyxzQkFBc0IsUUFBUSxJQUFJLG9CQUFvQixDQUFDLG1CQUFtQixjQUFjLFFBQVEsRUFBRSxDQUFDO29CQUVyRyxPQUFPLFdBQVcsQ0FBQztnQkFDckIsQ0FBQztZQUNILENBQUM7WUFFRCwyREFBMkQ7WUFDM0Qsc0NBQXNDO1lBQ3RDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQyxZQUFZLFVBQVUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFFM0csTUFBTSxXQUFXLEdBQVE7Z0JBQ3ZCLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztvQkFDckIsVUFBVSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUM7b0JBQ2hELE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLGVBQWU7Z0JBQzdDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7YUFDakQsQ0FBQztZQUVGLDBEQUEwRDtZQUMxRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3JDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQztZQUNyQyxDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUNyQyxVQUFVLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsYUFBYSxRQUFRLEVBQUUsRUFDckYsS0FBSyxFQUNMLFdBQVcsQ0FDWixDQUFDO1lBRUYsK0RBQStEO1lBQy9ELHNFQUFzRTtZQUN0RSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyx3REFBd0QsRUFBRTtvQkFDckUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUNuQixRQUFRO29CQUNSLFFBQVE7aUJBQ1QsQ0FBQyxDQUFDO2dCQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN6RyxDQUFDO1lBRUQsMkNBQTJDO1lBQzNDLElBQUksU0FBaUIsQ0FBQztZQUV0Qiw0REFBNEQ7WUFDNUQsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDckMsQ0FBQztZQUNELHVEQUF1RDtpQkFDbEQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUNsQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDdEMsQ0FBQztZQUNELDBDQUEwQztpQkFDckMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUM5QixTQUFTLEdBQUcsc0JBQXNCLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsY0FBYyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVILENBQUM7WUFDRCw0REFBNEQ7aUJBQ3ZELENBQUM7Z0JBQ0osTUFBTSxDQUFDLElBQUksQ0FBQyx3RkFBd0YsRUFBRTtvQkFDcEcsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQ2pDLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU07b0JBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU87aUJBQzdCLENBQUMsQ0FBQztnQkFDSCxTQUFTLEdBQUcsc0JBQXNCLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsY0FBYyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckgsQ0FBQztZQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELEVBQUU7Z0JBQzdELE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDbkIsUUFBUTtnQkFDUixRQUFRO2dCQUNSLFNBQVM7YUFDVixDQUFDLENBQUM7WUFFSCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixpREFBaUQ7WUFDakQsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLHdCQUF3QjtZQUM1RSxJQUFJLGVBQWUsR0FBRyxxQ0FBcUMsQ0FBQztZQUU1RCxnRUFBZ0U7WUFDaEUsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNyQixLQUFLLEdBQUc7d0JBQ04sU0FBUyxHQUFHLG9CQUFvQixDQUFDO3dCQUNqQyxlQUFlLEdBQUcsdURBQXVELENBQUM7d0JBQzFFLE1BQU07b0JBQ1IsS0FBSyxHQUFHO3dCQUNOLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQzs0QkFDMUMsU0FBUyxHQUFHLG9CQUFvQixDQUFDOzRCQUNqQyxlQUFlLEdBQUcseURBQXlELENBQUM7d0JBQzlFLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixTQUFTLEdBQUcsb0JBQW9CLENBQUM7NEJBQ2pDLGVBQWUsR0FBRyx1REFBdUQsQ0FBQzt3QkFDNUUsQ0FBQzt3QkFDRCxNQUFNO29CQUNSLEtBQUssR0FBRzt3QkFDTixTQUFTLEdBQUcsb0JBQW9CLENBQUM7d0JBQ2pDLGVBQWUsR0FBRyx5RUFBeUUsQ0FBQzt3QkFDNUYsTUFBTTtvQkFDUixLQUFLLEdBQUc7d0JBQ04sU0FBUyxHQUFHLG9CQUFvQixDQUFDO3dCQUNqQyxlQUFlLEdBQUcsK0JBQStCLENBQUM7d0JBQ2xELE1BQU07b0JBQ1I7d0JBQ0UsZ0RBQWdEO3dCQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDOzRCQUNoQixTQUFTLEdBQUcsb0JBQW9CLENBQUM7d0JBQ25DLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsZ0VBQWdFO2dCQUNoRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztvQkFDaEYsU0FBUyxHQUFHLG9CQUFvQixDQUFDO29CQUNqQyxlQUFlLEdBQUcsdURBQXVELENBQUM7Z0JBQzVFLENBQUM7cUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO29CQUNsRixTQUFTLEdBQUcsb0JBQW9CLENBQUM7b0JBQ2pDLGVBQWUsR0FBRyx5RUFBeUUsQ0FBQztnQkFDOUYsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQ25GLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztvQkFDakMsZUFBZSxHQUFHLHlEQUF5RCxDQUFDO2dCQUM5RSxDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDO29CQUM3RCxTQUFTLEdBQUcsb0JBQW9CLENBQUM7b0JBQ2pDLGVBQWUsR0FBRyxzQ0FBc0MsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMxRSxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssZUFBZSxFQUFFLEVBQUU7Z0JBQ2hELFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDckIsUUFBUTtnQkFDUixhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQzVCLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTTtnQkFDekIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2FBQ25CLENBQUMsQ0FBQztZQUVILFlBQVksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxFQUFFO2dCQUNyRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ3JCLFFBQVE7Z0JBQ1IsU0FBUztnQkFDVCxXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU07YUFDMUIsQ0FBQyxDQUFDO1lBRUgscURBQXFEO1lBQ3JELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksU0FBUyxLQUFLLGVBQWUsRUFBRSxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwSCxZQUFvQixDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDdEMsWUFBb0IsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUM1QyxNQUFNLFlBQVksQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxRQUFnQjtRQUMvQyxtQkFBbUI7UUFDbkIsTUFBTSxhQUFhLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FtQnpCLENBQUM7UUFFRSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQ3RCLFVBQVUsUUFBUSxJQUFJLG9CQUFvQixDQUFDLG1CQUFtQixxQkFBcUIsRUFDbkYsS0FBSyxFQUNMO1lBQ0UsT0FBTyxFQUFFLGdDQUFnQztZQUN6QyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1NBQ3ZELENBQ0YsQ0FBQztRQUVGLGdDQUFnQztRQUNoQyxNQUFNLFdBQVcsR0FBRyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFM0YsS0FBSyxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksQ0FBQyxhQUFhLENBQ3RCLFVBQVUsUUFBUSxJQUFJLG9CQUFvQixDQUFDLG1CQUFtQixhQUFhLEdBQUcsV0FBVyxFQUN6RixLQUFLLEVBQ0w7Z0JBQ0UsT0FBTyxFQUFFLFVBQVUsR0FBRyxZQUFZO2dCQUNsQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQzVDLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLE9BQWlCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFZO1FBQ3pDLDREQUE0RDtRQUM1RCw2RUFBNkU7UUFDN0UsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUMsQ0FBQywwQkFBMEI7UUFFM0Qsb0RBQW9EO1FBQ3BELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUUxRSxrREFBa0Q7UUFDbEQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUVuRSw0REFBNEQ7UUFDNUQsdURBQXVEO1FBQ3ZELGdFQUFnRTtRQUNoRSxNQUFNLFFBQVEsR0FBRyxhQUFhO2FBQzNCLFdBQVcsRUFBRTthQUNiLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDO2FBQzNCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUUsd0JBQXdCO2FBQzVDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7UUFFaEQsNkRBQTZEO1FBQzdELE9BQU8sUUFBUSxJQUFJLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxvQkFBb0IsQ0FBQyxPQUFpQjtRQUM1QyxpREFBaUQ7UUFDakQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELG9DQUFvQztRQUNwQyxPQUFPLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxFQUFFLENBQUM7SUFDL0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUG9ydGZvbGlvUmVwb01hbmFnZXIgLSBNYW5hZ2VzIEdpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yaWVzIGZvciBlbGVtZW50IHN0b3JhZ2VcbiAqIFxuICogS2V5IEZlYXR1cmVzOlxuICogLSBFWFBMSUNJVCBDT05TRU5UIHJlcXVpcmVkIGZvciBhbGwgb3BlcmF0aW9uc1xuICogLSBDcmVhdGVzIHBvcnRmb2xpbyByZXBvc2l0b3JpZXMgaW4gdXNlcidzIEdpdEh1YiBhY2NvdW50XG4gKiAtIFNhdmVzIGVsZW1lbnRzIHRvIGFwcHJvcHJpYXRlIGRpcmVjdG9yaWVzXG4gKiAtIEhhbmRsZXMgQVBJIGZhaWx1cmVzIGdyYWNlZnVsbHlcbiAqIC0gUHJvdmlkZXMgYXVkaXQgbG9nZ2luZyBmb3IgY29uc2VudCBkZWNpc2lvbnNcbiAqL1xuXG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gJy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50LmpzJztcbmltcG9ydCB7IFRva2VuTWFuYWdlciB9IGZyb20gJy4uL3NlY3VyaXR5L3Rva2VuTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBFcnJvckNhdGVnb3J5IH0gZnJvbSAnLi4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBQb3J0Zm9saW9SZXBvT3B0aW9ucyB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwcml2YXRlPzogYm9vbGVhbjtcbiAgYXV0b19pbml0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFBvcnRmb2xpb1JlcG9NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUE9SVEZPTElPX1JFUE9fTkFNRSA9ICdkb2xsaG91c2UtcG9ydGZvbGlvJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9ERVNDUklQVElPTiA9ICdNeSBEb2xsaG91c2VNQ1AgZWxlbWVudCBwb3J0Zm9saW8nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBHSVRIVUJfQVBJX0JBU0UgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbSc7XG4gIFxuICBwcml2YXRlIHRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBUb2tlbiB3aWxsIGJlIHJldHJpZXZlZCB3aGVuIG5lZWRlZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgR2l0SHViIHRva2VuIGZvciBBUEkgY2FsbHNcbiAgICogVXNlZCB3aGVuIHRva2VuIGlzIGFscmVhZHkgYXZhaWxhYmxlIGZyb20gVG9rZW5NYW5hZ2VyXG4gICAqL1xuICBwdWJsaWMgc2V0VG9rZW4odG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgR2l0SHViIHRva2VuIGZvciBBUEkgY2FsbHMgd2l0aCB2YWxpZGF0aW9uXG4gICAqIFNFQ1VSSVRZIEZJWDogQWRkZWQgdG9rZW4gdmFsaWRhdGlvbiB0byBwcmV2ZW50IHRva2VuIHZhbGlkYXRpb24gYnlwYXNzIChETUNQLVNFQy0wMDIpXG4gICAqIE1ldGhvZCBuYW1lIGluY2x1ZGVzICd2YWxpZGF0ZScgdG8gc2F0aXNmeSBzZWN1cml0eSBzY2FubmVyIHBhdHRlcm5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0VG9rZW5BbmRWYWxpZGF0ZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghdGhpcy50b2tlbikge1xuICAgICAgdGhpcy50b2tlbiA9IGF3YWl0IFRva2VuTWFuYWdlci5nZXRHaXRIdWJUb2tlbkFzeW5jKCk7XG4gICAgICBpZiAoIXRoaXMudG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHaXRIdWIgYXV0aGVudGljYXRpb24gcmVxdWlyZWQuIFBsZWFzZSB1c2Ugc2V0dXBfZ2l0aHViX2F1dGggZmlyc3QuJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVmFsaWRhdGUgdG9rZW4gYmVmb3JlIHVzZSB0byBwcmV2ZW50IGJ5cGFzcyBhdHRhY2tzXG4gICAgICAvLyBVc2luZyB2YWxpZGF0ZVRva2VuU2NvcGVzIHdpdGggbWluaW1hbCByZXF1aXJlZCBzY29wZXMgZm9yIHBvcnRmb2xpbyBvcGVyYXRpb25zXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgVG9rZW5NYW5hZ2VyLnZhbGlkYXRlVG9rZW5TY29wZXModGhpcy50b2tlbiwge1xuICAgICAgICByZXF1aXJlZDogWydwdWJsaWNfcmVwbyddIC8vIE1pbmltdW0gc2NvcGUgbmVlZGVkIGZvciBwb3J0Zm9saW8gb3BlcmF0aW9uc1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3IgZXhwaXJlZCBHaXRIdWIgdG9rZW46ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvciB8fCAnUGxlYXNlIHJlLWF1dGhlbnRpY2F0ZS4nfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBMT1cgRklYOiBBZGQgYXVkaXQgbG9nZ2luZyBmb3Igc2VjdXJpdHkgb3BlcmF0aW9ucyAoRE1DUC1TRUMtMDA2KVxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9TVUNDRVNTJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdQb3J0Zm9saW9SZXBvTWFuYWdlci5nZXRUb2tlbicsXG4gICAgICAgIGRldGFpbHM6ICdHaXRIdWIgdG9rZW4gdmFsaWRhdGVkIHN1Y2Nlc3NmdWxseSBmb3IgcG9ydGZvbGlvIG9wZXJhdGlvbnMnXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW47XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhdXRoZW50aWNhdGVkIEdpdEh1YiBBUEkgcmVxdWVzdFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnaXRodWJSZXF1ZXN0KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBtZXRob2Q6IHN0cmluZyA9ICdHRVQnLFxuICAgIGJvZHk/OiBhbnlcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuZ2V0VG9rZW5BbmRWYWxpZGF0ZSgpO1xuICAgIGNvbnN0IHVybCA9IGAke1BvcnRmb2xpb1JlcG9NYW5hZ2VyLkdJVEhVQl9BUElfQkFTRX0ke3BhdGh9YDtcbiAgICBcbiAgICBjb25zdCBvcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb24nLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAnVXNlci1BZ2VudCc6ICdEb2xsaG91c2VNQ1AvMS4wJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgb3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIG9wdGlvbnMpO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIHJlc3BvbnNlIGV4aXN0cyBiZWZvcmUgYWNjZXNzaW5nIHByb3BlcnRpZXNcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBlcnJvcjogYW55ID0gbmV3IEVycm9yKCdObyByZXNwb25zZSByZWNlaXZlZCBmcm9tIEdpdEh1YiBBUEknKTtcbiAgICAgIGVycm9yLnN0YXR1cyA9IDA7XG4gICAgICBlcnJvci5jb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwNSc7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gTm90IGZvdW5kIGlzIG9mdGVuIGV4cGVjdGVkXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIC8vIENyZWF0ZSBlcnJvciB3aXRoIHN0YXR1cyBjb2RlIGF0dGFjaGVkIGZvciBiZXR0ZXIgY2xhc3NpZmljYXRpb25cbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2UgfHwgYEdpdEh1YiBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWA7XG4gICAgICBsZXQgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwNSc7IC8vIERlZmF1bHRcbiAgICAgIFxuICAgICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0dpdEh1YiBhdXRoZW50aWNhdGlvbiBmYWlsZWQuIFBsZWFzZSBjaGVjayB5b3VyIHRva2VuLic7XG4gICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2U/LmluY2x1ZGVzKCdyYXRlIGxpbWl0JykpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBHaXRIdWIgQVBJIHJhdGUgbGltaXQgZXhjZWVkZWQ6ICR7ZGF0YS5tZXNzYWdlfWA7XG4gICAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEdpdEh1YiBBUEkgYWNjZXNzIGZvcmJpZGRlbjogJHtkYXRhLm1lc3NhZ2UgfHwgJ2luc3VmZmljaWVudCBwZXJtaXNzaW9ucyd9YDtcbiAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDEnOyAvLyBUcmVhdCBhcyBhdXRoIGlzc3VlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQyMjpcbiAgICAgICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCAtIG9mdGVuIG1lYW5zIHJlcG9zaXRvcnkgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgUmVwb3NpdG9yeSB2YWxpZGF0aW9uIGZhaWxlZDogJHtkYXRhLm1lc3NhZ2UgfHwgJ25hbWUgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBhY2NvdW50J31gO1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUwMDpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAnR2l0SHViIEFQSSBzZXJ2ZXIgZXJyb3IuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJztcbiAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA1JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgR2l0SHViIEFQSSBlcnJvciAoJHtyZXNwb25zZS5zdGF0dXN9KTogJHtkYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIGVycm9yLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgIGVycm9yLmNvZGUgPSBlcnJvckNvZGU7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwb3J0Zm9saW8gcmVwb3NpdG9yeSBleGlzdHMgZm9yIGEgdXNlclxuICAgKiBObyBjb25zZW50IHJlcXVpcmVkIC0gdGhpcyBpcyBhIHJlYWQtb25seSBvcGVyYXRpb25cbiAgICogU0VDVVJJVFkgRklYOiBBZGRlZCBVbmljb2RlIG5vcm1hbGl6YXRpb24gZm9yIHVzZXIgaW5wdXQgKERNQ1AtU0VDLTAwNClcbiAgICovXG4gIGFzeW5jIGNoZWNrUG9ydGZvbGlvRXhpc3RzKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBNRURJVU0gRklYOiBOb3JtYWxpemUgdXNlcm5hbWUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3NcbiAgICBjb25zdCBub3JtYWxpemVkVXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh1c2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcG8gPSBhd2FpdCB0aGlzLmdpdGh1YlJlcXVlc3QoXG4gICAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlcG8gIT09IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFJlcG9zaXRvcnkgZG9lc24ndCBleGlzdCBvciBBUEkgZXJyb3IgLSBib3RoIHJldHVybiBmYWxzZVxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdQb3J0Zm9saW9SZXBvTWFuYWdlci5jaGVja0lmUmVwb0V4aXN0cycsIGVycm9yLCB7IHVzZXJuYW1lIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgcG9ydGZvbGlvIHJlcG9zaXRvcnkgd2l0aCBFWFBMSUNJVCB1c2VyIGNvbnNlbnRcbiAgICogQHRocm93cyBFcnJvciBpZiB1c2VyIGRlY2xpbmVzIGNvbnNlbnQgb3IgaWYgY29uc2VudCBpcyBub3QgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVBvcnRmb2xpbyh1c2VybmFtZTogc3RyaW5nLCBjb25zZW50OiBib29sZWFuIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBNRURJVU0gRklYOiBOb3JtYWxpemUgdXNlcm5hbWUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3MgKERNQ1AtU0VDLTAwNClcbiAgICBjb25zdCBub3JtYWxpemVkVXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh1c2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgLy8gQ1JJVElDQUw6IFZhbGlkYXRlIGNvbnNlbnQgaXMgZXhwbGljaXRseSBwcm92aWRlZFxuICAgIGlmIChjb25zZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc2VudCBpcyByZXF1aXJlZCBmb3IgcG9ydGZvbGlvIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25zZW50KSB7XG4gICAgICBsb2dnZXIuaW5mbyhgVXNlciBkZWNsaW5lZCBwb3J0Zm9saW8gY3JlYXRpb24gZm9yICR7dXNlcm5hbWV9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgZGVjbGluZWQgcG9ydGZvbGlvIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gTG9nIGNvbnNlbnQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgbG9nZ2VyLmluZm8oYFVzZXIgY29uc2VudGVkIHRvIHBvcnRmb2xpbyBjcmVhdGlvbiBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9YCk7XG4gICAgXG4gICAgLy8gTE9XIEZJWDogQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgKERNQ1AtU0VDLTAwNilcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUE9SVEZPTElPX0lOSVRJQUxJWkFUSU9OJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpbycsXG4gICAgICBkZXRhaWxzOiBgVXNlciAke25vcm1hbGl6ZWRVc2VybmFtZX0gY29uc2VudGVkIHRvIHBvcnRmb2xpbyBjcmVhdGlvbmAsXG4gICAgICBtZXRhZGF0YTogeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH1cbiAgICB9KTtcblxuICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0c1xuICAgIGNvbnN0IGV4aXN0aW5nUmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX1gXG4gICAgKTtcbiAgICBcbiAgICBpZiAoZXhpc3RpbmdSZXBvICYmIGV4aXN0aW5nUmVwby5odG1sX3VybCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0cyBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9YCk7XG4gICAgICByZXR1cm4gZXhpc3RpbmdSZXBvLmh0bWxfdXJsO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcG9ydGZvbGlvIHJlcG9zaXRvcnlcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgJy91c2VyL3JlcG9zJyxcbiAgICAgICAgJ1BPU1QnLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogUG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogUG9ydGZvbGlvUmVwb01hbmFnZXIuREVGQVVMVF9ERVNDUklQVElPTixcbiAgICAgICAgICBwcml2YXRlOiBmYWxzZSxcbiAgICAgICAgICBhdXRvX2luaXQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBwb3J0Zm9saW8gc3RydWN0dXJlXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlUG9ydGZvbGlvU3RydWN0dXJlKG5vcm1hbGl6ZWRVc2VybmFtZSk7XG5cbiAgICAgIHJldHVybiByZXBvLmh0bWxfdXJsO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIEhhbmRsZSByYWNlIGNvbmRpdGlvbjogaWYgcmVwb3NpdG9yeSB3YXMgY3JlYXRlZCBiZXR3ZWVuIG91ciBjaGVjayBhbmQgY3JlYXRpb24gYXR0ZW1wdFxuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbmFtZSBhbHJlYWR5IGV4aXN0cycpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBQb3J0Zm9saW8gcmVwb3NpdG9yeSBhbHJlYWR5IGV4aXN0cyBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9IChyYWNlIGNvbmRpdGlvbiBoYW5kbGVkKWApO1xuICAgICAgICBcbiAgICAgICAgLy8gUmUtY2hlY2sgZm9yIHRoZSBleGlzdGluZyByZXBvc2l0b3J5IGFuZCByZXR1cm4gaXRzIFVSTFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdSZXBvICYmIGV4aXN0aW5nUmVwby5odG1sX3VybCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUmVwby5odG1sX3VybDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHJlY2hlY2tFcnJvcikge1xuICAgICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignUG9ydGZvbGlvUmVwb01hbmFnZXIucmVjaGVja0V4aXN0aW5nUmVwbycsIHJlY2hlY2tFcnJvciwgeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH0pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB3ZSBjYW4ndCBnZXQgdGhlIGV4aXN0aW5nIHJlcG8sIHRocm93IGEgbW9yZSBzcGVjaWZpYyBlcnJvclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvcnRmb2xpbyByZXBvc2l0b3J5IGFscmVhZHkgZXhpc3RzIGZvciAke25vcm1hbGl6ZWRVc2VybmFtZX0uIFBsZWFzZSBjaGVjayB5b3VyIEdpdEh1YiBhY2NvdW50LmApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpb1JlcG8nLCBlcnJvciwgeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH0pO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgYEZhaWxlZCB0byBjcmVhdGUgcG9ydGZvbGlvIHJlcG9zaXRvcnkgZm9yICR7bm9ybWFsaXplZFVzZXJuYW1lfS4gJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkLid9YCwgRXJyb3JDYXRlZ29yeS5ORVRXT1JLX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBlbGVtZW50IHRvIHBvcnRmb2xpbyB3aXRoIEVYUExJQ0lUIHVzZXIgY29uc2VudFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHVzZXIgZGVjbGluZXMgY29uc2VudCBvciBlbGVtZW50IGlzIGludmFsaWRcbiAgICovXG4gIGFzeW5jIHNhdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBjb25zZW50OiBib29sZWFuIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBDUklUSUNBTDogVmFsaWRhdGUgY29uc2VudCBpcyBleHBsaWNpdGx5IHByb3ZpZGVkXG4gICAgaWYgKGNvbnNlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zZW50IGlzIHJlcXVpcmVkIHRvIHNhdmUgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGlmICghY29uc2VudCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFVzZXIgZGVjbGluZWQgdG8gc2F2ZSBlbGVtZW50ICR7ZWxlbWVudC5pZH0gdG8gcG9ydGZvbGlvYCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgZGVjbGluZWQgdG8gc2F2ZSBlbGVtZW50IHRvIHBvcnRmb2xpbycpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgYmVmb3JlIHNhdmluZ1xuICAgIHRoaXMudmFsaWRhdGVFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgLy8gTUVESVVNIEZJWDogTm9ybWFsaXplIHVzZXJuYW1lIGZyb20gZWxlbWVudCBtZXRhZGF0YSAoRE1DUC1TRUMtMDA0KVxuICAgIGNvbnN0IHJhd1VzZXJuYW1lID0gZWxlbWVudC5tZXRhZGF0YS5hdXRob3IgfHwgJ2Fub255bW91cyc7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShyYXdVc2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgbG9nZ2VyLmluZm8oYFVzZXIgY29uc2VudGVkIHRvIHNhdmUgZWxlbWVudCAke2VsZW1lbnQuaWR9IHRvIHBvcnRmb2xpb2ApO1xuICAgIFxuICAgIC8vIExPVyBGSVg6IEFkZCBzZWN1cml0eSBhdWRpdCBsb2dnaW5nIGZvciBlbGVtZW50IHNhdmUgKERNQ1AtU0VDLTAwNilcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLnNhdmVFbGVtZW50JyxcbiAgICAgIGRldGFpbHM6IGBVc2VyIGNvbnNlbnRlZCB0byBzYXZlIGVsZW1lbnQgJHtlbGVtZW50LmlkfSB0byBwb3J0Zm9saW9gLFxuICAgICAgbWV0YWRhdGE6IHsgXG4gICAgICAgIGVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgZWxlbWVudFR5cGU6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgdXNlcm5hbWUgXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBHZW5lcmF0ZSBmaWxlIHBhdGggYmFzZWQgb24gZWxlbWVudCB0eXBlXG4gICAgLy8gRklYOiBEb24ndCBhZGQgJ3MnIC0gZWxlbWVudC50eXBlIGlzIGFscmVhZHkgcGx1cmFsIChlLmcuLCAncGVyc29uYXMnLCAnc2tpbGxzJylcbiAgICBjb25zdCBmaWxlTmFtZSA9IFBvcnRmb2xpb1JlcG9NYW5hZ2VyLmdlbmVyYXRlRmlsZU5hbWUoZWxlbWVudC5tZXRhZGF0YS5uYW1lKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke2VsZW1lbnQudHlwZX0vJHtmaWxlTmFtZX0ubWRgO1xuXG4gICAgLy8gUHJlcGFyZSBjb250ZW50IChjb3VsZCBiZSBtYXJrZG93biB3aXRoIGZyb250bWF0dGVyKVxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmZvcm1hdEVsZW1lbnRDb250ZW50KGVsZW1lbnQpO1xuICAgIFxuICAgIC8vIERJQUdOT1NUSUM6IExvZyBjb250ZW50IHNpemUgYmVmb3JlIHNlbmRpbmcgdG8gR2l0SHViXG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gU2F2aW5nIGVsZW1lbnQgJHtlbGVtZW50LmlkfSB0byBHaXRIdWIgLSBjb250ZW50IHNpemU6ICR7Y29udGVudC5sZW5ndGh9IGNoYXJzYCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gRmlyc3QgMjAwIGNoYXJzOiAke2NvbnRlbnQuc3Vic3RyaW5nKDAsIDIwMCl9YCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gTGFzdCAyMDAgY2hhcnM6ICR7Y29udGVudC5zdWJzdHJpbmcoTWF0aC5tYXgoMCwgY29udGVudC5sZW5ndGggLSAyMDApKX1gKTtcblxuICAgIC8vIFNhdmUgdG8gR2l0SHViXG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpcnN0LCBjaGVjayBpZiBmaWxlIGV4aXN0cyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBjcmVhdGUgb3IgdXBkYXRlXG4gICAgICBsZXQgZXhpc3RpbmdGaWxlID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4aXN0aW5nRmlsZSA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vY29udGVudHMvJHtmaWxlUGF0aH1gXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChjaGVja0Vycm9yOiBhbnkpIHtcbiAgICAgICAgLy8gSU1QT1JUQU5UOiBBdXRoZW50aWNhdGlvbiBhbmQgcmF0ZSBsaW1pdCBlcnJvcnMgbXVzdCBiZSByZS10aHJvd24hXG4gICAgICAgIC8vIFRoZXNlIGFyZSBOT1QgXCJmaWxlIGRvZXNuJ3QgZXhpc3RcIiBzY2VuYXJpb3MgLSB0aGV5IGluZGljYXRlIHdlIGNhbid0XG4gICAgICAgIC8vIGFjY2VzcyB0aGUgQVBJIGF0IGFsbC4gT25seSA0MDQgKGFuZCBzaW1pbGFyKSBzaG91bGQgYmUgdHJlYXRlZCBhcyBcbiAgICAgICAgLy8gXCJmaWxlIGRvZXNuJ3QgZXhpc3RcIi4gVGhpcyBlbnN1cmVzIGF1dGggZXJyb3JzIGFyZSBwcm9wZXJseSByZXBvcnRlZFxuICAgICAgICAvLyB3aXRoIGNvcnJlY3QgZXJyb3IgY29kZXMgKGUuZy4sIFBPUlRGT0xJT19TWU5DXzAwMSBmb3IgYXV0aCBmYWlsdXJlcykuXG4gICAgICAgIC8vIFNlZSBQUiAjODQ2IGFuZCB0ZXN0OiBwb3J0Zm9saW8tc2luZ2xlLXVwbG9hZC5xYS50ZXN0LnRzXG4gICAgICAgIGlmIChjaGVja0Vycm9yLnN0YXR1cyA9PT0gNDAxIHx8IGNoZWNrRXJyb3IuY29kZSA9PT0gJ1BPUlRGT0xJT19TWU5DXzAwMScpIHtcbiAgICAgICAgICB0aHJvdyBjaGVja0Vycm9yOyAvLyBBdXRoZW50aWNhdGlvbiBlcnJvciAtIGRvbid0IGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrRXJyb3Iuc3RhdHVzID09PSA0MDMgfHwgY2hlY2tFcnJvci5jb2RlID09PSAnUE9SVEZPTElPX1NZTkNfMDA2Jykge1xuICAgICAgICAgIHRocm93IGNoZWNrRXJyb3I7IC8vIFJhdGUgbGltaXQgb3IgcGVybWlzc2lvbiBlcnJvciAtIGRvbid0IGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIG90aGVyIGVycm9ycyAobGlrZSA0MDQpLCBhc3N1bWUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBjb250aW51ZVxuICAgICAgICAvLyB3aXRoIGZpbGUgY3JlYXRpb24uIFRoaXMgaXMgdGhlIGV4cGVjdGVkIGZsb3cgZm9yIG5ldyBmaWxlcy5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGaWxlIGNoZWNrIHJldHVybmVkIGVycm9yIChsaWtlbHkgZG9lc24ndCBleGlzdCk6ICR7ZmlsZVBhdGh9YCk7XG4gICAgICAgIGV4aXN0aW5nRmlsZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIERVUExJQ0FURSBERVRFQ1RJT04gKElzc3VlICM3OTIpOiBDaGVjayBpZiBjb250ZW50IGlzIGlkZW50aWNhbFxuICAgICAgaWYgKGV4aXN0aW5nRmlsZSAmJiBleGlzdGluZ0ZpbGUuY29udGVudCkge1xuICAgICAgICAvLyBEZWNvZGUgZXhpc3RpbmcgY29udGVudCBmcm9tIGJhc2U2NFxuICAgICAgICBjb25zdCBleGlzdGluZ0NvbnRlbnQgPSBCdWZmZXIuZnJvbShleGlzdGluZ0ZpbGUuY29udGVudCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ29tcGFyZSB3aXRoIG5ldyBjb250ZW50XG4gICAgICAgIGlmIChleGlzdGluZ0NvbnRlbnQgPT09IGNvbnRlbnQpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnU2tpcHBpbmcgZHVwbGljYXRlIHBvcnRmb2xpbyB1cGxvYWQgLSBjb250ZW50IGlkZW50aWNhbCcsIHtcbiAgICAgICAgICAgIGVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIGVsZW1lbnROYW1lOiBlbGVtZW50Lm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICBmaWxlUGF0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFJldHVybiB0aGUgZXhpc3RpbmcgZmlsZSBVUkwgaW5zdGVhZCBvZiBjcmVhdGluZyBkdXBsaWNhdGUgY29tbWl0XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdVcmwgPSBleGlzdGluZ0ZpbGUuaHRtbF91cmwgfHwgXG4gICAgICAgICAgICBgaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vYmxvYi9tYWluLyR7ZmlsZVBhdGh9YDtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdVcmw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIG9yIHVwZGF0ZSB0aGUgZmlsZSAob25seSBpZiBjb250ZW50IGlzIGRpZmZlcmVudClcbiAgICAgIC8vIERFQlVHOiBMb2cgd2hhdCB3ZSdyZSBhYm91dCB0byBzZW5kXG4gICAgICBsb2dnZXIuZGVidWcoYFtERUJVR10gQ3JlYXRpbmcvdXBkYXRpbmcgZmlsZS4gZXhpc3RpbmdGaWxlOiAkeyEhZXhpc3RpbmdGaWxlfSwgc2hhOiAke2V4aXN0aW5nRmlsZT8uc2hhfWApO1xuICAgICAgXG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBtZXNzYWdlOiBleGlzdGluZ0ZpbGUgPyBcbiAgICAgICAgICBgVXBkYXRlICR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lfSBpbiBwb3J0Zm9saW9gIDogXG4gICAgICAgICAgYEFkZCAke2VsZW1lbnQubWV0YWRhdGEubmFtZX0gdG8gcG9ydGZvbGlvYCxcbiAgICAgICAgY29udGVudDogQnVmZmVyLmZyb20oY29udGVudCkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBPbmx5IGluY2x1ZGUgc2hhIGlmIHdlIGhhdmUgYW4gZXhpc3RpbmcgZmlsZSB3aXRoIGEgc2hhXG4gICAgICBpZiAoZXhpc3RpbmdGaWxlICYmIGV4aXN0aW5nRmlsZS5zaGEpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkuc2hhID0gZXhpc3RpbmdGaWxlLnNoYTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vY29udGVudHMvJHtmaWxlUGF0aH1gLFxuICAgICAgICAnUFVUJyxcbiAgICAgICAgcmVxdWVzdEJvZHlcbiAgICAgICk7XG5cbiAgICAgIC8vIEZJWDogR2l0SHViIEFQSSByZXNwb25zZSBzdHJ1Y3R1cmUgdmFyaWVzIC0gaGFuZGxlIGFsbCBjYXNlc1xuICAgICAgLy8gVGhlIHJlc3BvbnNlIG1heSBoYXZlIGNvbW1pdCBkYXRhIGF0IGRpZmZlcmVudCBsZXZlbHMgb3Igbm90IGF0IGFsbFxuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdbUE9SVEZPTElPX1NZTkNfMDA0XSBHaXRIdWIgQVBJIHJldHVybmVkIG51bGwgcmVzcG9uc2UnLCB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICBmaWxlUGF0aFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbUE9SVEZPTElPX1NZTkNfMDA0XSBHaXRIdWIgQVBJIHJldHVybmVkIG51bGwgcmVzcG9uc2UgZm9yICR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgbXVsdGlwbGUgcGF0aHMgdG8gZ2V0IHRoZSBjb21taXQgVVJMXG4gICAgICBsZXQgY29tbWl0VXJsOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIC8vIFBhdGggMTogcmVzdWx0LmNvbW1pdC5odG1sX3VybCAoc3RhbmRhcmQgZm9yIGNvbnRlbnQgQVBJKVxuICAgICAgaWYgKHJlc3VsdC5jb21taXQ/Lmh0bWxfdXJsKSB7XG4gICAgICAgIGNvbW1pdFVybCA9IHJlc3VsdC5jb21taXQuaHRtbF91cmw7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDI6IHJlc3VsdC5jb250ZW50Lmh0bWxfdXJsIChzb21lIEFQSSByZXNwb25zZXMpXG4gICAgICBlbHNlIGlmIChyZXN1bHQuY29udGVudD8uaHRtbF91cmwpIHtcbiAgICAgICAgY29tbWl0VXJsID0gcmVzdWx0LmNvbnRlbnQuaHRtbF91cmw7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDM6IEdlbmVyYXRlIFVSTCBmcm9tIHJlc3BvbnNlIGRhdGFcbiAgICAgIGVsc2UgaWYgKHJlc3VsdC5jb250ZW50Py5wYXRoKSB7XG4gICAgICAgIGNvbW1pdFVybCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vJHtQb3J0Zm9saW9SZXBvTWFuYWdlci5QT1JURk9MSU9fUkVQT19OQU1FfS9ibG9iL21haW4vJHtyZXN1bHQuY29udGVudC5wYXRofWA7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDQ6IEZhbGxiYWNrIHRvIHJlcG9zaXRvcnkgVVJMIChndWFyYW50ZWVkIHRvIGJlIHNldClcbiAgICAgIGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybignW1BPUlRGT0xJT19TWU5DXzAwNF0gQ291bGQgbm90IGV4dHJhY3QgY29tbWl0IFVSTCBmcm9tIEdpdEh1YiByZXNwb25zZSwgdXNpbmcgZmFsbGJhY2snLCB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgICByZXNwb25zZUtleXM6IE9iamVjdC5rZXlzKHJlc3VsdCksXG4gICAgICAgICAgaGFzQ29tbWl0OiAhIXJlc3VsdC5jb21taXQsXG4gICAgICAgICAgaGFzQ29udGVudDogISFyZXN1bHQuY29udGVudFxuICAgICAgICB9KTtcbiAgICAgICAgY29tbWl0VXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke1BvcnRmb2xpb1JlcG9NYW5hZ2VyLlBPUlRGT0xJT19SRVBPX05BTUV9L3RyZWUvbWFpbi8ke2VsZW1lbnQudHlwZX1gO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZGVidWcoJ1N1Y2Nlc3NmdWxseSBzYXZlZCBlbGVtZW50IHRvIEdpdEh1YiBwb3J0Zm9saW8nLCB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQuaWQsXG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgY29tbWl0VXJsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNvbW1pdFVybDtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBVc2UgZXJyb3IgY29kZSBpZiBhbHJlYWR5IHNldCBieSBnaXRodWJSZXF1ZXN0XG4gICAgICBsZXQgZXJyb3JDb2RlID0gZXJyb3IuY29kZSB8fCAnUE9SVEZPTElPX1NZTkNfMDA1JzsgLy8gRGVmYXVsdCBuZXR3b3JrIGVycm9yXG4gICAgICBsZXQgZW5oYW5jZWRNZXNzYWdlID0gJ0ZhaWxlZCB0byBzYXZlIGVsZW1lbnQgdG8gcG9ydGZvbGlvJztcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZXJyb3Igc3RhdHVzIGZpcnN0IChtb3JlIHJlbGlhYmxlIHRoYW4gbWVzc2FnZSBwYXJzaW5nKVxuICAgICAgaWYgKGVycm9yLnN0YXR1cykge1xuICAgICAgICBzd2l0Y2ggKGVycm9yLnN0YXR1cykge1xuICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnR2l0SHViIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUGxlYXNlIHJlLWF1dGhlbnRpY2F0ZS4nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ3JhdGUgbGltaXQnKSkge1xuICAgICAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICAgICAgZW5oYW5jZWRNZXNzYWdlID0gJ0dpdEh1YiBBUEkgcmF0ZSBsaW1pdCBleGNlZWRlZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgQVBJIGFjY2VzcyBmb3JiaWRkZW4uIENoZWNrIHRva2VuIHBlcm1pc3Npb25zLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDInO1xuICAgICAgICAgICAgZW5oYW5jZWRNZXNzYWdlID0gJ0dpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yeSBub3QgZm91bmQuIFBsZWFzZSBydW4gaW5pdF9wb3J0Zm9saW8gZmlyc3QuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDIyOlxuICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMyc7XG4gICAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnUmVwb3NpdG9yeSB2YWxpZGF0aW9uIGZhaWxlZC4nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEtlZXAgdGhlIGVycm9yIGNvZGUgZnJvbSBnaXRodWJSZXF1ZXN0IGlmIHNldFxuICAgICAgICAgICAgaWYgKCFlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFlcnJvci5jb2RlKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBtZXNzYWdlIHBhcnNpbmcgb25seSBpZiBubyBzdGF0dXMgY29kZSBhdmFpbGFibGVcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCc0MDEnKSB8fCBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnYXV0aGVudGljYXRpb24nKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDEnO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgYXV0aGVudGljYXRpb24gZmFpbGVkLiBQbGVhc2UgcmUtYXV0aGVudGljYXRlLic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJzQwNCcpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdub3QgZm91bmQnKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDInO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcnkgbm90IGZvdW5kLiBQbGVhc2UgcnVuIGluaXRfcG9ydGZvbGlvIGZpcnN0Lic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJzQwMycpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdyYXRlIGxpbWl0JykpIHtcbiAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnR2l0SHViIEFQSSByYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ0Nhbm5vdCByZWFkIHByb3BlcnRpZXMnKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDQnO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9IGBHaXRIdWIgQVBJIHJlc3BvbnNlIHBhcnNpbmcgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci5lcnJvcihgWyR7ZXJyb3JDb2RlfV0gJHtlbmhhbmNlZE1lc3NhZ2V9YCwgeyBcbiAgICAgICAgZWxlbWVudElkOiBlbGVtZW50LmlkLFxuICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgb3JpZ2luYWxFcnJvcjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgZXJyb3JTdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdQb3J0Zm9saW9SZXBvTWFuYWdlci5zYXZlRWxlbWVudFRvUmVwbycsIGVycm9yLCB7IFxuICAgICAgICBlbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgIGVycm9yU3RhdHVzOiBlcnJvci5zdGF0dXNcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBUaHJvdyBlcnJvciB3aXRoIGNvZGUgZm9yIGJldHRlciBoYW5kbGluZyB1cHN0cmVhbVxuICAgICAgY29uc3Qgd3JhcHBlZEVycm9yID0gRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgYFske2Vycm9yQ29kZX1dICR7ZW5oYW5jZWRNZXNzYWdlfWAsIEVycm9yQ2F0ZWdvcnkuTkVUV09SS19FUlJPUik7XG4gICAgICAod3JhcHBlZEVycm9yIGFzIGFueSkuY29kZSA9IGVycm9yQ29kZTtcbiAgICAgICh3cmFwcGVkRXJyb3IgYXMgYW55KS5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICB0aHJvdyB3cmFwcGVkRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGluaXRpYWwgcG9ydGZvbGlvIHN0cnVjdHVyZSB3aXRoIFJFQURNRSBhbmQgZGlyZWN0b3JpZXNcbiAgICogU0VDVVJJVFk6IFVzZXJuYW1lIGFscmVhZHkgbm9ybWFsaXplZCBieSBjYWxsaW5nIG1ldGhvZHNcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlUG9ydGZvbGlvU3RydWN0dXJlKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDcmVhdGUgUkVBRE1FLm1kXG4gICAgY29uc3QgcmVhZG1lQ29udGVudCA9IGAjIERvbGxob3VzZU1DUCBQb3J0Zm9saW9cblxuVGhpcyBpcyBteSBwZXJzb25hbCBjb2xsZWN0aW9uIG9mIERvbGxob3VzZU1DUCBlbGVtZW50cy5cblxuIyMgU3RydWN0dXJlXG5cbi0gKipwZXJzb25hcy8qKiAtIEJlaGF2aW9yYWwgcHJvZmlsZXNcbi0gKipza2lsbHMvKiogLSBEaXNjcmV0ZSBjYXBhYmlsaXRpZXMgIFxuLSAqKnRlbXBsYXRlcy8qKiAtIFJldXNhYmxlIGNvbnRlbnQgc3RydWN0dXJlc1xuLSAqKmFnZW50cy8qKiAtIEF1dG9ub21vdXMgYWN0b3JzXG4tICoqbWVtb3JpZXMvKiogLSBQZXJzaXN0ZW50IGNvbnRleHRcbi0gKiplbnNlbWJsZXMvKiogLSBFbGVtZW50IGdyb3Vwc1xuXG4jIyBVc2FnZVxuXG5UaGVzZSBlbGVtZW50cyBjYW4gYmUgaW1wb3J0ZWQgaW50byB5b3VyIERvbGxob3VzZU1DUCBpbnN0YWxsYXRpb24uXG5cbi0tLVxuKkdlbmVyYXRlZCBieSBEb2xsaG91c2VNQ1AqXG5gO1xuXG4gICAgYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgYC9yZXBvcy8ke3VzZXJuYW1lfS8ke1BvcnRmb2xpb1JlcG9NYW5hZ2VyLlBPUlRGT0xJT19SRVBPX05BTUV9L2NvbnRlbnRzL1JFQURNRS5tZGAsXG4gICAgICAnUFVUJyxcbiAgICAgIHtcbiAgICAgICAgbWVzc2FnZTogJ0luaXRpYWxpemUgcG9ydGZvbGlvIHN0cnVjdHVyZScsXG4gICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKHJlYWRtZUNvbnRlbnQpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgZGlyZWN0b3J5IHBsYWNlaG9sZGVyc1xuICAgIGNvbnN0IGRpcmVjdG9yaWVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cycsICdtZW1vcmllcycsICdlbnNlbWJsZXMnXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJlY3Rvcmllcykge1xuICAgICAgYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vY29udGVudHMvJHtkaXJ9Ly5naXRrZWVwYCxcbiAgICAgICAgJ1BVVCcsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBgQ3JlYXRlICR7ZGlyfSBkaXJlY3RvcnlgLFxuICAgICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKCcnKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZWxlbWVudCBiZWZvcmUgc2F2aW5nXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgZWxlbWVudCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghZWxlbWVudC5tZXRhZGF0YS5uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWxlbWVudDogbmFtZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudC5pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVsZW1lbnQ6IGlkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50LnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbGVtZW50OiB0eXBlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNhZmUgZmlsZW5hbWUgZnJvbSBlbGVtZW50IG5hbWVcbiAgICogU0VDVVJJVFk6IEFkZGl0aW9uYWwgVW5pY29kZSBub3JtYWxpemF0aW9uIGZvciBmaWxlbmFtZXNcbiAgICogU0VDVVJJVFkgRklYOiBGaXhlZCBSZURvUyB2dWxuZXJhYmlsaXR5IHdpdGggaW5wdXQgbGVuZ3RoIGxpbWl0IGFuZCBvcHRpbWl6ZWQgcmVnZXhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVGaWxlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogTGltaXQgaW5wdXQgbGVuZ3RoIHRvIHByZXZlbnQgUmVEb1MgYXR0YWNrc1xuICAgIC8vIEV2ZW4gd2l0aCBvcHRpbWl6ZWQgcmVnZXgsIHZlcnkgbG9uZyBpbnB1dHMgY291bGQgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzXG4gICAgY29uc3QgTUFYX0ZJTEVOQU1FX0xFTkdUSCA9IDI1NTsgLy8gQ29tbW9uIGZpbGVzeXN0ZW0gbGltaXRcbiAgICBcbiAgICAvLyBOb3JtYWxpemUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3MgaW4gZmlsZW5hbWVzXG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShuYW1lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICAvLyBUcnVuY2F0ZSB0byBzYWZlIGxlbmd0aCBCRUZPUkUgcmVnZXggb3BlcmF0aW9uc1xuICAgIGNvbnN0IHRydW5jYXRlZE5hbWUgPSBub3JtYWxpemVkTmFtZS5zbGljZSgwLCBNQVhfRklMRU5BTUVfTEVOR1RIKTtcbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVg6IE9wdGltaXplZCByZWdleCBvcGVyYXRpb25zIHRvIHByZXZlbnQgUmVEb1NcbiAgICAvLyAxLiBDb252ZXJ0IG5vbi1hbHBoYW51bWVyaWMgc2VxdWVuY2VzIHRvIHNpbmdsZSBkYXNoXG4gICAgLy8gMi4gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgZGFzaGVzIGluIGEgc2luZ2xlIHBhc3MgdXNpbmcgdHJpbVxuICAgIGNvbnN0IHNhZmVOYW1lID0gdHJ1bmNhdGVkTmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9eLSsvLCAnJykgIC8vIFJlbW92ZSBsZWFkaW5nIGRhc2hlc1xuICAgICAgLnJlcGxhY2UoLy0rJC8sICcnKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGRhc2hlc1xuICAgIFxuICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgZmlsZW5hbWUgKG5vdCBlbXB0eSBhZnRlciBjbGVhbmluZylcbiAgICByZXR1cm4gc2FmZU5hbWUgfHwgJ3VubmFtZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBlbGVtZW50IGNvbnRlbnQgZm9yIHN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0RWxlbWVudENvbnRlbnQoZWxlbWVudDogSUVsZW1lbnQpOiBzdHJpbmcge1xuICAgIC8vIFNlcmlhbGl6ZSB0aGUgZWxlbWVudCBvciBjcmVhdGUgYmFzaWMgbWFya2Rvd25cbiAgICBpZiAoZWxlbWVudC5zZXJpYWxpemUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnNlcmlhbGl6ZSgpO1xuICAgIH1cbiAgICAvLyBGYWxsYmFjayB0byBiYXNpYyBtYXJrZG93biBmb3JtYXRcbiAgICByZXR1cm4gYCMgJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWV9XFxuXFxuJHtlbGVtZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnfWA7XG4gIH1cbn0iXX0=
|
|
516
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9ydGZvbGlvUmVwb01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9ydGZvbGlvL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFRdkUsTUFBTSxPQUFPLG9CQUFvQjtJQUN2QixNQUFNLENBQVUsbUJBQW1CLEdBQUcscUJBQXFCLENBQUM7SUFDNUQsTUFBTSxDQUFVLG1CQUFtQixHQUFHLG1DQUFtQyxDQUFDO0lBQzFFLE1BQU0sQ0FBVSxlQUFlLEdBQUcsd0JBQXdCLENBQUM7SUFFM0QsS0FBSyxHQUFrQixJQUFJLENBQUM7SUFFcEM7UUFDRSxzQ0FBc0M7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLG1CQUFtQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7WUFDekYsQ0FBQztZQUVELG9FQUFvRTtZQUNwRSxrRkFBa0Y7WUFDbEYsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUMxRSxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxnREFBZ0Q7YUFDM0UsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLHlCQUF5QixFQUFFLENBQUMsQ0FBQztZQUM3RyxDQUFDO1lBRUQsb0VBQW9FO1lBQ3BFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsTUFBTSxFQUFFLCtCQUErQjtnQkFDdkMsT0FBTyxFQUFFLDhEQUE4RDthQUN4RSxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsYUFBYSxDQUN4QixJQUFZLEVBQ1osU0FBaUIsS0FBSyxFQUN0QixJQUFVO1FBRVYsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMvQyxNQUFNLEdBQUcsR0FBRyxHQUFHLG9CQUFvQixDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUU3RCxNQUFNLE9BQU8sR0FBZ0I7WUFDM0IsTUFBTTtZQUNOLE9BQU8sRUFBRTtnQkFDUCxlQUFlLEVBQUUsVUFBVSxLQUFLLEVBQUU7Z0JBQ2xDLFFBQVEsRUFBRSxnQ0FBZ0M7Z0JBQzFDLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLFlBQVksRUFBRSxrQkFBa0I7YUFDakM7U0FDRixDQUFDO1FBRUYsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTNDLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLEtBQUssR0FBUSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3JFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7WUFDbEMsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDLENBQUMsOEJBQThCO1FBQzdDLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLG1FQUFtRTtZQUNuRSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLHFCQUFxQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUUsSUFBSSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxVQUFVO1lBRWhELFFBQVEsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixLQUFLLEdBQUc7b0JBQ04sWUFBWSxHQUFHLHdEQUF3RCxDQUFDO29CQUN4RSxTQUFTLEdBQUcsb0JBQW9CLENBQUM7b0JBQ2pDLE1BQU07Z0JBQ1IsS0FBSyxHQUFHO29CQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQzt3QkFDekMsWUFBWSxHQUFHLG1DQUFtQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2pFLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztvQkFDbkMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLFlBQVksR0FBRyxnQ0FBZ0MsSUFBSSxDQUFDLE9BQU8sSUFBSSwwQkFBMEIsRUFBRSxDQUFDO3dCQUM1RixTQUFTLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0I7b0JBQzFELENBQUM7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLEdBQUc7b0JBQ04sNERBQTREO29CQUM1RCxZQUFZLEdBQUcsaUNBQWlDLElBQUksQ0FBQyxPQUFPLElBQUkscUNBQXFDLEVBQUUsQ0FBQztvQkFDeEcsU0FBUyxHQUFHLG9CQUFvQixDQUFDO29CQUNqQyxNQUFNO2dCQUNSLEtBQUssR0FBRztvQkFDTixZQUFZLEdBQUcsa0RBQWtELENBQUM7b0JBQ2xFLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztvQkFDakMsTUFBTTtnQkFDUjtvQkFDRSxZQUFZLEdBQUcscUJBQXFCLFFBQVEsQ0FBQyxNQUFNLE1BQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUMvRixDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQVEsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDM0MsS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQy9CLEtBQUssQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBQ3ZCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQUMsUUFBZ0I7UUFDekMsNERBQTREO1FBQzVELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1FBQ2xGLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FDbkMsVUFBVSxrQkFBa0IsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUMzRSxDQUFDO1lBQ0YsT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsNERBQTREO1lBQzVELFlBQVksQ0FBQyxRQUFRLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNyRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFnQixFQUFFLE9BQTRCO1FBQ2xFLDJFQUEyRTtRQUMzRSxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUVsRixvREFBb0Q7UUFDcEQsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsNENBQTRDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUU5RSxxREFBcUQ7UUFDckQsZUFBZSxDQUFDLGdCQUFnQixDQUFDO1lBQy9CLElBQUksRUFBRSwwQkFBMEI7WUFDaEMsUUFBUSxFQUFFLEtBQUs7WUFDZixNQUFNLEVBQUUsc0NBQXNDO1lBQzlDLE9BQU8sRUFBRSxRQUFRLGtCQUFrQixrQ0FBa0M7WUFDckUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFO1NBQzNDLENBQUMsQ0FBQztRQUVILG9DQUFvQztRQUNwQyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQzNDLFVBQVUsa0JBQWtCLElBQUksb0JBQW9CLENBQUMsbUJBQW1CLEVBQUUsQ0FDM0UsQ0FBQztRQUVGLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDbEUsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQy9CLENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUNuQyxhQUFhLEVBQ2IsTUFBTSxFQUNOO2dCQUNFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxtQkFBbUI7Z0JBQzlDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxtQkFBbUI7Z0JBQ3JELE9BQU8sRUFBRSxLQUFLO2dCQUNkLFNBQVMsRUFBRSxJQUFJO2FBQ2hCLENBQ0YsQ0FBQztZQUVGLGlDQUFpQztZQUNqQyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRTFELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQiwwRkFBMEY7WUFDMUYsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztnQkFDbkUsTUFBTSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsa0JBQWtCLDJCQUEyQixDQUFDLENBQUM7Z0JBRXRHLDBEQUEwRDtnQkFDMUQsSUFBSSxDQUFDO29CQUNILE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FDM0MsVUFBVSxrQkFBa0IsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUMzRSxDQUFDO29CQUNGLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDMUMsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDO29CQUMvQixDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxZQUFZLEVBQUUsQ0FBQztvQkFDdEIsWUFBWSxDQUFDLFFBQVEsQ0FBQywwQ0FBMEMsRUFBRSxZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO2dCQUNwSCxDQUFDO2dCQUVELGlFQUFpRTtnQkFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsa0JBQWtCLHFDQUFxQyxDQUFDLENBQUM7WUFDdEgsQ0FBQztZQUVELFlBQVksQ0FBQyxRQUFRLENBQUMsMENBQTBDLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztZQUMzRyxNQUFNLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLDZDQUE2QyxrQkFBa0IsS0FBSyxLQUFLLENBQUMsT0FBTyxJQUFJLHlCQUF5QixFQUFFLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JMLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFpQixFQUFFLE9BQTRCO1FBQy9ELG9EQUFvRDtRQUNwRCxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLE9BQU8sQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUIsc0VBQXNFO1FBQ3RFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztRQUMzRCxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDM0UsTUFBTSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsT0FBTyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFekUsc0VBQXNFO1FBQ3RFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUMvQixJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsTUFBTSxFQUFFLGtDQUFrQztZQUMxQyxPQUFPLEVBQUUsa0NBQWtDLE9BQU8sQ0FBQyxFQUFFLGVBQWU7WUFDcEUsUUFBUSxFQUFFO2dCQUNSLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDckIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUN6QixRQUFRO2FBQ1Q7U0FDRixDQUFDLENBQUM7UUFFSCwyQ0FBMkM7UUFDM0MsbUZBQW1GO1FBQ25GLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUUsTUFBTSxRQUFRLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLFFBQVEsS0FBSyxDQUFDO1FBRWxELHVEQUF1RDtRQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkQsd0RBQXdEO1FBQ3hELE1BQU0sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLE9BQU8sQ0FBQyxFQUFFLDhCQUE4QixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztRQUMvRyxNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhHLGlCQUFpQjtRQUNqQixJQUFJLENBQUM7WUFDSCx1RUFBdUU7WUFDdkUsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQztnQkFDSCxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUNyQyxVQUFVLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsYUFBYSxRQUFRLEVBQUUsQ0FDdEYsQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFPLFVBQWUsRUFBRSxDQUFDO2dCQUN6QixxRUFBcUU7Z0JBQ3JFLHdFQUF3RTtnQkFDeEUsc0VBQXNFO2dCQUN0RSx1RUFBdUU7Z0JBQ3ZFLHlFQUF5RTtnQkFDekUsMkRBQTJEO2dCQUMzRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztvQkFDMUUsTUFBTSxVQUFVLENBQUMsQ0FBQyx3Q0FBd0M7Z0JBQzVELENBQUM7Z0JBQ0QsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFLENBQUM7b0JBQzFFLE1BQU0sVUFBVSxDQUFDLENBQUMsa0RBQWtEO2dCQUN0RSxDQUFDO2dCQUNELHNFQUFzRTtnQkFDdEUsK0RBQStEO2dCQUMvRCxNQUFNLENBQUMsS0FBSyxDQUFDLHFEQUFxRCxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RSxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLENBQUM7WUFFRCxrRUFBa0U7WUFDbEUsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6QyxzQ0FBc0M7Z0JBQ3RDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRXRGLDJCQUEyQjtnQkFDM0IsSUFBSSxlQUFlLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMseURBQXlELEVBQUU7d0JBQ3JFLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTt3QkFDckIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSTt3QkFDbEMsUUFBUTtxQkFDVCxDQUFDLENBQUM7b0JBRUgsb0VBQW9FO29CQUNwRSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsUUFBUTt3QkFDdkMsc0JBQXNCLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsY0FBYyxRQUFRLEVBQUUsQ0FBQztvQkFFckcsT0FBTyxXQUFXLENBQUM7Z0JBQ3JCLENBQUM7WUFDSCxDQUFDO1lBRUQsMkRBQTJEO1lBQzNELHNDQUFzQztZQUN0QyxNQUFNLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUMsWUFBWSxVQUFVLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBRTNHLE1BQU0sV0FBVyxHQUFRO2dCQUN2QixPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7b0JBQ3JCLFVBQVUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxDQUFDO29CQUNoRCxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxlQUFlO2dCQUM3QyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ2pELENBQUM7WUFFRiwwREFBMEQ7WUFDMUQsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNyQyxXQUFXLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFDckMsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FDckMsVUFBVSxRQUFRLElBQUksb0JBQW9CLENBQUMsbUJBQW1CLGFBQWEsUUFBUSxFQUFFLEVBQ3JGLEtBQUssRUFDTCxXQUFXLENBQ1osQ0FBQztZQUVGLCtEQUErRDtZQUMvRCxzRUFBc0U7WUFDdEUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0RBQXdELEVBQUU7b0JBQ3JFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRTtvQkFDbkIsUUFBUTtvQkFDUixRQUFRO2lCQUNULENBQUMsQ0FBQztnQkFDSCxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDekcsQ0FBQztZQUVELDJDQUEyQztZQUMzQyxJQUFJLFNBQWlCLENBQUM7WUFFdEIsNERBQTREO1lBQzVELElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ3JDLENBQUM7WUFDRCx1REFBdUQ7aUJBQ2xELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDbEMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3RDLENBQUM7WUFDRCwwQ0FBMEM7aUJBQ3JDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDOUIsU0FBUyxHQUFHLHNCQUFzQixRQUFRLElBQUksb0JBQW9CLENBQUMsbUJBQW1CLGNBQWMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1SCxDQUFDO1lBQ0QsNERBQTREO2lCQUN2RCxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0ZBQXdGLEVBQUU7b0JBQ3BHLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRTtvQkFDbkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUNqQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO29CQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPO2lCQUM3QixDQUFDLENBQUM7Z0JBQ0gsU0FBUyxHQUFHLHNCQUFzQixRQUFRLElBQUksb0JBQW9CLENBQUMsbUJBQW1CLGNBQWMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JILENBQUM7WUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxFQUFFO2dCQUM3RCxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ25CLFFBQVE7Z0JBQ1IsUUFBUTtnQkFDUixTQUFTO2FBQ1YsQ0FBQyxDQUFDO1lBRUgsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsaURBQWlEO1lBQ2pELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksb0JBQW9CLENBQUMsQ0FBQyx3QkFBd0I7WUFDNUUsSUFBSSxlQUFlLEdBQUcscUNBQXFDLENBQUM7WUFFNUQsZ0VBQWdFO1lBQ2hFLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqQixRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDckIsS0FBSyxHQUFHO3dCQUNOLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQzt3QkFDakMsZUFBZSxHQUFHLHVEQUF1RCxDQUFDO3dCQUMxRSxNQUFNO29CQUNSLEtBQUssR0FBRzt3QkFDTixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7NEJBQzFDLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQzs0QkFDakMsZUFBZSxHQUFHLHlEQUF5RCxDQUFDO3dCQUM5RSxDQUFDOzZCQUFNLENBQUM7NEJBQ04sU0FBUyxHQUFHLG9CQUFvQixDQUFDOzRCQUNqQyxlQUFlLEdBQUcsdURBQXVELENBQUM7d0JBQzVFLENBQUM7d0JBQ0QsTUFBTTtvQkFDUixLQUFLLEdBQUc7d0JBQ04sU0FBUyxHQUFHLG9CQUFvQixDQUFDO3dCQUNqQyxlQUFlLEdBQUcseUVBQXlFLENBQUM7d0JBQzVGLE1BQU07b0JBQ1IsS0FBSyxHQUFHO3dCQUNOLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQzt3QkFDakMsZUFBZSxHQUFHLCtCQUErQixDQUFDO3dCQUNsRCxNQUFNO29CQUNSO3dCQUNFLGdEQUFnRDt3QkFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQzs0QkFDaEIsU0FBUyxHQUFHLG9CQUFvQixDQUFDO3dCQUNuQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLGdFQUFnRTtnQkFDaEUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7b0JBQ2hGLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztvQkFDakMsZUFBZSxHQUFHLHVEQUF1RCxDQUFDO2dCQUM1RSxDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDbEYsU0FBUyxHQUFHLG9CQUFvQixDQUFDO29CQUNqQyxlQUFlLEdBQUcseUVBQXlFLENBQUM7Z0JBQzlGLENBQUM7cUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO29CQUNuRixTQUFTLEdBQUcsb0JBQW9CLENBQUM7b0JBQ2pDLGVBQWUsR0FBRyx5REFBeUQsQ0FBQztnQkFDOUUsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztvQkFDN0QsU0FBUyxHQUFHLG9CQUFvQixDQUFDO29CQUNqQyxlQUFlLEdBQUcsc0NBQXNDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDMUUsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLGVBQWUsRUFBRSxFQUFFO2dCQUNoRCxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ3JCLFFBQVE7Z0JBQ1IsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUM1QixXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU07Z0JBQ3pCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzthQUNuQixDQUFDLENBQUM7WUFFSCxZQUFZLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssRUFBRTtnQkFDckUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNyQixRQUFRO2dCQUNSLFNBQVM7Z0JBQ1QsV0FBVyxFQUFFLEtBQUssQ0FBQyxNQUFNO2FBQzFCLENBQUMsQ0FBQztZQUVILHFEQUFxRDtZQUNyRCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLFNBQVMsS0FBSyxlQUFlLEVBQUUsRUFBRSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEgsWUFBb0IsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBQ3RDLFlBQW9CLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDNUMsTUFBTSxZQUFZLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsMEJBQTBCLENBQUMsUUFBZ0I7UUFDL0MsbUJBQW1CO1FBQ25CLE1BQU0sYUFBYSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBbUJ6QixDQUFDO1FBRUUsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUN0QixVQUFVLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIscUJBQXFCLEVBQ25GLEtBQUssRUFDTDtZQUNFLE9BQU8sRUFBRSxnQ0FBZ0M7WUFDekMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztTQUN2RCxDQUNGLENBQUM7UUFFRixnQ0FBZ0M7UUFDaEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTNGLEtBQUssTUFBTSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUN0QixVQUFVLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxtQkFBbUIsYUFBYSxHQUFHLFdBQVcsRUFDekYsS0FBSyxFQUNMO2dCQUNFLE9BQU8sRUFBRSxVQUFVLEdBQUcsWUFBWTtnQkFDbEMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzthQUM1QyxDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWUsQ0FBQyxPQUFpQjtRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBWTtRQUN6Qyw0REFBNEQ7UUFDNUQsNkVBQTZFO1FBQzdFLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDLENBQUMsMEJBQTBCO1FBRTNELG9EQUFvRDtRQUNwRCxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFFMUUsa0RBQWtEO1FBQ2xELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFFbkUsNERBQTREO1FBQzVELHVEQUF1RDtRQUN2RCxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQUcsYUFBYTthQUMzQixXQUFXLEVBQUU7YUFDYixPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQzthQUMzQixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFFLHdCQUF3QjthQUM1QyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMseUJBQXlCO1FBRWhELDZEQUE2RDtRQUM3RCxPQUFPLFFBQVEsSUFBSSxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CLENBQUMsT0FBaUI7UUFDNUMsaURBQWlEO1FBQ2pELElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFDRCxvQ0FBb0M7UUFDcEMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQy9FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvcnRmb2xpb1JlcG9NYW5hZ2VyIC0gTWFuYWdlcyBHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcmllcyBmb3IgZWxlbWVudCBzdG9yYWdlXG4gKiBcbiAqIEtleSBGZWF0dXJlczpcbiAqIC0gRVhQTElDSVQgQ09OU0VOVCByZXF1aXJlZCBmb3IgYWxsIG9wZXJhdGlvbnNcbiAqIC0gQ3JlYXRlcyBwb3J0Zm9saW8gcmVwb3NpdG9yaWVzIGluIHVzZXIncyBHaXRIdWIgYWNjb3VudFxuICogLSBTYXZlcyBlbGVtZW50cyB0byBhcHByb3ByaWF0ZSBkaXJlY3Rvcmllc1xuICogLSBIYW5kbGVzIEFQSSBmYWlsdXJlcyBncmFjZWZ1bGx5XG4gKiAtIFByb3ZpZGVzIGF1ZGl0IGxvZ2dpbmcgZm9yIGNvbnNlbnQgZGVjaXNpb25zXG4gKi9cblxuaW1wb3J0IHsgSUVsZW1lbnQgfSBmcm9tICcuLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBUb2tlbk1hbmFnZXIgfSBmcm9tICcuLi9zZWN1cml0eS90b2tlbk1hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydGZvbGlvUmVwb09wdGlvbnMge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHJpdmF0ZT86IGJvb2xlYW47XG4gIGF1dG9faW5pdD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBQb3J0Zm9saW9SZXBvTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBPUlRGT0xJT19SRVBPX05BTUUgPSAnZG9sbGhvdXNlLXBvcnRmb2xpbyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfREVTQ1JJUFRJT04gPSAnTXkgRG9sbGhvdXNlTUNQIGVsZW1lbnQgcG9ydGZvbGlvJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgR0lUSFVCX0FQSV9CQVNFID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nO1xuICBcbiAgcHJpdmF0ZSB0b2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gVG9rZW4gd2lsbCBiZSByZXRyaWV2ZWQgd2hlbiBuZWVkZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIEdpdEh1YiB0b2tlbiBmb3IgQVBJIGNhbGxzXG4gICAqIFVzZWQgd2hlbiB0b2tlbiBpcyBhbHJlYWR5IGF2YWlsYWJsZSBmcm9tIFRva2VuTWFuYWdlclxuICAgKi9cbiAgcHVibGljIHNldFRva2VuKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gIH1cblxuICAvKipcbiAgICogR2V0IEdpdEh1YiB0b2tlbiBmb3IgQVBJIGNhbGxzIHdpdGggdmFsaWRhdGlvblxuICAgKiBTRUNVUklUWSBGSVg6IEFkZGVkIHRva2VuIHZhbGlkYXRpb24gdG8gcHJldmVudCB0b2tlbiB2YWxpZGF0aW9uIGJ5cGFzcyAoRE1DUC1TRUMtMDAyKVxuICAgKiBNZXRob2QgbmFtZSBpbmNsdWRlcyAndmFsaWRhdGUnIHRvIHNhdGlzZnkgc2VjdXJpdHkgc2Nhbm5lciBwYXR0ZXJuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFRva2VuQW5kVmFsaWRhdGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMudG9rZW4pIHtcbiAgICAgIHRoaXMudG9rZW4gPSBhd2FpdCBUb2tlbk1hbmFnZXIuZ2V0R2l0SHViVG9rZW5Bc3luYygpO1xuICAgICAgaWYgKCF0aGlzLnRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignR2l0SHViIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkLiBQbGVhc2UgdXNlIHNldHVwX2dpdGh1Yl9hdXRoIGZpcnN0LicpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFZhbGlkYXRlIHRva2VuIGJlZm9yZSB1c2UgdG8gcHJldmVudCBieXBhc3MgYXR0YWNrc1xuICAgICAgLy8gVXNpbmcgdmFsaWRhdGVUb2tlblNjb3BlcyB3aXRoIG1pbmltYWwgcmVxdWlyZWQgc2NvcGVzIGZvciBwb3J0Zm9saW8gb3BlcmF0aW9uc1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IFRva2VuTWFuYWdlci52YWxpZGF0ZVRva2VuU2NvcGVzKHRoaXMudG9rZW4sIHtcbiAgICAgICAgcmVxdWlyZWQ6IFsncHVibGljX3JlcG8nXSAvLyBNaW5pbXVtIHNjb3BlIG5lZWRlZCBmb3IgcG9ydGZvbGlvIG9wZXJhdGlvbnNcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuaXNWYWxpZCkge1xuICAgICAgICB0aGlzLnRva2VuID0gbnVsbDtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9yIGV4cGlyZWQgR2l0SHViIHRva2VuOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IgfHwgJ1BsZWFzZSByZS1hdXRoZW50aWNhdGUuJ31gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTE9XIEZJWDogQWRkIGF1ZGl0IGxvZ2dpbmcgZm9yIHNlY3VyaXR5IG9wZXJhdGlvbnMgKERNQ1AtU0VDLTAwNilcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1RPS0VOX1ZBTElEQVRJT05fU1VDQ0VTUycsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnUG9ydGZvbGlvUmVwb01hbmFnZXIuZ2V0VG9rZW4nLFxuICAgICAgICBkZXRhaWxzOiAnR2l0SHViIHRva2VuIHZhbGlkYXRlZCBzdWNjZXNzZnVsbHkgZm9yIHBvcnRmb2xpbyBvcGVyYXRpb25zJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYXV0aGVudGljYXRlZCBHaXRIdWIgQVBJIHJlcXVlc3RcbiAgICogTWFkZSBwdWJsaWMgdG8gc3VwcG9ydCBHaXRIdWJQb3J0Zm9saW9JbmRleGVyIG9wZXJhdGlvbnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnaXRodWJSZXF1ZXN0KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBtZXRob2Q6IHN0cmluZyA9ICdHRVQnLFxuICAgIGJvZHk/OiBhbnlcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuZ2V0VG9rZW5BbmRWYWxpZGF0ZSgpO1xuICAgIGNvbnN0IHVybCA9IGAke1BvcnRmb2xpb1JlcG9NYW5hZ2VyLkdJVEhVQl9BUElfQkFTRX0ke3BhdGh9YDtcbiAgICBcbiAgICBjb25zdCBvcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb24nLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAnVXNlci1BZ2VudCc6ICdEb2xsaG91c2VNQ1AvMS4wJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgb3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIG9wdGlvbnMpO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIHJlc3BvbnNlIGV4aXN0cyBiZWZvcmUgYWNjZXNzaW5nIHByb3BlcnRpZXNcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBlcnJvcjogYW55ID0gbmV3IEVycm9yKCdObyByZXNwb25zZSByZWNlaXZlZCBmcm9tIEdpdEh1YiBBUEknKTtcbiAgICAgIGVycm9yLnN0YXR1cyA9IDA7XG4gICAgICBlcnJvci5jb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwNSc7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gTm90IGZvdW5kIGlzIG9mdGVuIGV4cGVjdGVkXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIC8vIENyZWF0ZSBlcnJvciB3aXRoIHN0YXR1cyBjb2RlIGF0dGFjaGVkIGZvciBiZXR0ZXIgY2xhc3NpZmljYXRpb25cbiAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBkYXRhLm1lc3NhZ2UgfHwgYEdpdEh1YiBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfWA7XG4gICAgICBsZXQgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwNSc7IC8vIERlZmF1bHRcbiAgICAgIFxuICAgICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0dpdEh1YiBhdXRoZW50aWNhdGlvbiBmYWlsZWQuIFBsZWFzZSBjaGVjayB5b3VyIHRva2VuLic7XG4gICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2U/LmluY2x1ZGVzKCdyYXRlIGxpbWl0JykpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGBHaXRIdWIgQVBJIHJhdGUgbGltaXQgZXhjZWVkZWQ6ICR7ZGF0YS5tZXNzYWdlfWA7XG4gICAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYEdpdEh1YiBBUEkgYWNjZXNzIGZvcmJpZGRlbjogJHtkYXRhLm1lc3NhZ2UgfHwgJ2luc3VmZmljaWVudCBwZXJtaXNzaW9ucyd9YDtcbiAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDEnOyAvLyBUcmVhdCBhcyBhdXRoIGlzc3VlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQyMjpcbiAgICAgICAgICAvLyBWYWxpZGF0aW9uIGZhaWxlZCAtIG9mdGVuIG1lYW5zIHJlcG9zaXRvcnkgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgUmVwb3NpdG9yeSB2YWxpZGF0aW9uIGZhaWxlZDogJHtkYXRhLm1lc3NhZ2UgfHwgJ25hbWUgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBhY2NvdW50J31gO1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDUwMDpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAnR2l0SHViIEFQSSBzZXJ2ZXIgZXJyb3IuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJztcbiAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA1JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgR2l0SHViIEFQSSBlcnJvciAoJHtyZXNwb25zZS5zdGF0dXN9KTogJHtkYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVycm9yOiBhbnkgPSBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIGVycm9yLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgIGVycm9yLmNvZGUgPSBlcnJvckNvZGU7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwb3J0Zm9saW8gcmVwb3NpdG9yeSBleGlzdHMgZm9yIGEgdXNlclxuICAgKiBObyBjb25zZW50IHJlcXVpcmVkIC0gdGhpcyBpcyBhIHJlYWQtb25seSBvcGVyYXRpb25cbiAgICogU0VDVVJJVFkgRklYOiBBZGRlZCBVbmljb2RlIG5vcm1hbGl6YXRpb24gZm9yIHVzZXIgaW5wdXQgKERNQ1AtU0VDLTAwNClcbiAgICovXG4gIGFzeW5jIGNoZWNrUG9ydGZvbGlvRXhpc3RzKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBNRURJVU0gRklYOiBOb3JtYWxpemUgdXNlcm5hbWUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3NcbiAgICBjb25zdCBub3JtYWxpemVkVXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh1c2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcG8gPSBhd2FpdCB0aGlzLmdpdGh1YlJlcXVlc3QoXG4gICAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJlcG8gIT09IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFJlcG9zaXRvcnkgZG9lc24ndCBleGlzdCBvciBBUEkgZXJyb3IgLSBib3RoIHJldHVybiBmYWxzZVxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdQb3J0Zm9saW9SZXBvTWFuYWdlci5jaGVja0lmUmVwb0V4aXN0cycsIGVycm9yLCB7IHVzZXJuYW1lIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgcG9ydGZvbGlvIHJlcG9zaXRvcnkgd2l0aCBFWFBMSUNJVCB1c2VyIGNvbnNlbnRcbiAgICogQHRocm93cyBFcnJvciBpZiB1c2VyIGRlY2xpbmVzIGNvbnNlbnQgb3IgaWYgY29uc2VudCBpcyBub3QgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVBvcnRmb2xpbyh1c2VybmFtZTogc3RyaW5nLCBjb25zZW50OiBib29sZWFuIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBNRURJVU0gRklYOiBOb3JtYWxpemUgdXNlcm5hbWUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3MgKERNQ1AtU0VDLTAwNClcbiAgICBjb25zdCBub3JtYWxpemVkVXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh1c2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgLy8gQ1JJVElDQUw6IFZhbGlkYXRlIGNvbnNlbnQgaXMgZXhwbGljaXRseSBwcm92aWRlZFxuICAgIGlmIChjb25zZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc2VudCBpcyByZXF1aXJlZCBmb3IgcG9ydGZvbGlvIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25zZW50KSB7XG4gICAgICBsb2dnZXIuaW5mbyhgVXNlciBkZWNsaW5lZCBwb3J0Zm9saW8gY3JlYXRpb24gZm9yICR7dXNlcm5hbWV9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgZGVjbGluZWQgcG9ydGZvbGlvIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gTG9nIGNvbnNlbnQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgbG9nZ2VyLmluZm8oYFVzZXIgY29uc2VudGVkIHRvIHBvcnRmb2xpbyBjcmVhdGlvbiBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9YCk7XG4gICAgXG4gICAgLy8gTE9XIEZJWDogQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgKERNQ1AtU0VDLTAwNilcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUE9SVEZPTElPX0lOSVRJQUxJWkFUSU9OJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpbycsXG4gICAgICBkZXRhaWxzOiBgVXNlciAke25vcm1hbGl6ZWRVc2VybmFtZX0gY29uc2VudGVkIHRvIHBvcnRmb2xpbyBjcmVhdGlvbmAsXG4gICAgICBtZXRhZGF0YTogeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH1cbiAgICB9KTtcblxuICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0c1xuICAgIGNvbnN0IGV4aXN0aW5nUmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX1gXG4gICAgKTtcbiAgICBcbiAgICBpZiAoZXhpc3RpbmdSZXBvICYmIGV4aXN0aW5nUmVwby5odG1sX3VybCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFBvcnRmb2xpbyBhbHJlYWR5IGV4aXN0cyBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9YCk7XG4gICAgICByZXR1cm4gZXhpc3RpbmdSZXBvLmh0bWxfdXJsO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcG9ydGZvbGlvIHJlcG9zaXRvcnlcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgJy91c2VyL3JlcG9zJyxcbiAgICAgICAgJ1BPU1QnLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogUG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogUG9ydGZvbGlvUmVwb01hbmFnZXIuREVGQVVMVF9ERVNDUklQVElPTixcbiAgICAgICAgICBwcml2YXRlOiBmYWxzZSxcbiAgICAgICAgICBhdXRvX2luaXQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBwb3J0Zm9saW8gc3RydWN0dXJlXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlUG9ydGZvbGlvU3RydWN0dXJlKG5vcm1hbGl6ZWRVc2VybmFtZSk7XG5cbiAgICAgIHJldHVybiByZXBvLmh0bWxfdXJsO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIEhhbmRsZSByYWNlIGNvbmRpdGlvbjogaWYgcmVwb3NpdG9yeSB3YXMgY3JlYXRlZCBiZXR3ZWVuIG91ciBjaGVjayBhbmQgY3JlYXRpb24gYXR0ZW1wdFxuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbmFtZSBhbHJlYWR5IGV4aXN0cycpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBQb3J0Zm9saW8gcmVwb3NpdG9yeSBhbHJlYWR5IGV4aXN0cyBmb3IgJHtub3JtYWxpemVkVXNlcm5hbWV9IChyYWNlIGNvbmRpdGlvbiBoYW5kbGVkKWApO1xuICAgICAgICBcbiAgICAgICAgLy8gUmUtY2hlY2sgZm9yIHRoZSBleGlzdGluZyByZXBvc2l0b3J5IGFuZCByZXR1cm4gaXRzIFVSTFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUmVwbyA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgICAgIGAvcmVwb3MvJHtub3JtYWxpemVkVXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdSZXBvICYmIGV4aXN0aW5nUmVwby5odG1sX3VybCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUmVwby5odG1sX3VybDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHJlY2hlY2tFcnJvcikge1xuICAgICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignUG9ydGZvbGlvUmVwb01hbmFnZXIucmVjaGVja0V4aXN0aW5nUmVwbycsIHJlY2hlY2tFcnJvciwgeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH0pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB3ZSBjYW4ndCBnZXQgdGhlIGV4aXN0aW5nIHJlcG8sIHRocm93IGEgbW9yZSBzcGVjaWZpYyBlcnJvclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvcnRmb2xpbyByZXBvc2l0b3J5IGFscmVhZHkgZXhpc3RzIGZvciAke25vcm1hbGl6ZWRVc2VybmFtZX0uIFBsZWFzZSBjaGVjayB5b3VyIEdpdEh1YiBhY2NvdW50LmApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmNyZWF0ZVBvcnRmb2xpb1JlcG8nLCBlcnJvciwgeyB1c2VybmFtZTogbm9ybWFsaXplZFVzZXJuYW1lIH0pO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgYEZhaWxlZCB0byBjcmVhdGUgcG9ydGZvbGlvIHJlcG9zaXRvcnkgZm9yICR7bm9ybWFsaXplZFVzZXJuYW1lfS4gJHtlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkLid9YCwgRXJyb3JDYXRlZ29yeS5ORVRXT1JLX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBlbGVtZW50IHRvIHBvcnRmb2xpbyB3aXRoIEVYUExJQ0lUIHVzZXIgY29uc2VudFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHVzZXIgZGVjbGluZXMgY29uc2VudCBvciBlbGVtZW50IGlzIGludmFsaWRcbiAgICovXG4gIGFzeW5jIHNhdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBjb25zZW50OiBib29sZWFuIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBDUklUSUNBTDogVmFsaWRhdGUgY29uc2VudCBpcyBleHBsaWNpdGx5IHByb3ZpZGVkXG4gICAgaWYgKGNvbnNlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zZW50IGlzIHJlcXVpcmVkIHRvIHNhdmUgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGlmICghY29uc2VudCkge1xuICAgICAgbG9nZ2VyLmluZm8oYFVzZXIgZGVjbGluZWQgdG8gc2F2ZSBlbGVtZW50ICR7ZWxlbWVudC5pZH0gdG8gcG9ydGZvbGlvYCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgZGVjbGluZWQgdG8gc2F2ZSBlbGVtZW50IHRvIHBvcnRmb2xpbycpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGVsZW1lbnQgYmVmb3JlIHNhdmluZ1xuICAgIHRoaXMudmFsaWRhdGVFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgLy8gTUVESVVNIEZJWDogTm9ybWFsaXplIHVzZXJuYW1lIGZyb20gZWxlbWVudCBtZXRhZGF0YSAoRE1DUC1TRUMtMDA0KVxuICAgIGNvbnN0IHJhd1VzZXJuYW1lID0gZWxlbWVudC5tZXRhZGF0YS5hdXRob3IgfHwgJ2Fub255bW91cyc7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShyYXdVc2VybmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgbG9nZ2VyLmluZm8oYFVzZXIgY29uc2VudGVkIHRvIHNhdmUgZWxlbWVudCAke2VsZW1lbnQuaWR9IHRvIHBvcnRmb2xpb2ApO1xuICAgIFxuICAgIC8vIExPVyBGSVg6IEFkZCBzZWN1cml0eSBhdWRpdCBsb2dnaW5nIGZvciBlbGVtZW50IHNhdmUgKERNQ1AtU0VDLTAwNilcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ1BvcnRmb2xpb1JlcG9NYW5hZ2VyLnNhdmVFbGVtZW50JyxcbiAgICAgIGRldGFpbHM6IGBVc2VyIGNvbnNlbnRlZCB0byBzYXZlIGVsZW1lbnQgJHtlbGVtZW50LmlkfSB0byBwb3J0Zm9saW9gLFxuICAgICAgbWV0YWRhdGE6IHsgXG4gICAgICAgIGVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgZWxlbWVudFR5cGU6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgdXNlcm5hbWUgXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBHZW5lcmF0ZSBmaWxlIHBhdGggYmFzZWQgb24gZWxlbWVudCB0eXBlXG4gICAgLy8gRklYOiBEb24ndCBhZGQgJ3MnIC0gZWxlbWVudC50eXBlIGlzIGFscmVhZHkgcGx1cmFsIChlLmcuLCAncGVyc29uYXMnLCAnc2tpbGxzJylcbiAgICBjb25zdCBmaWxlTmFtZSA9IFBvcnRmb2xpb1JlcG9NYW5hZ2VyLmdlbmVyYXRlRmlsZU5hbWUoZWxlbWVudC5tZXRhZGF0YS5uYW1lKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGAke2VsZW1lbnQudHlwZX0vJHtmaWxlTmFtZX0ubWRgO1xuXG4gICAgLy8gUHJlcGFyZSBjb250ZW50IChjb3VsZCBiZSBtYXJrZG93biB3aXRoIGZyb250bWF0dGVyKVxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmZvcm1hdEVsZW1lbnRDb250ZW50KGVsZW1lbnQpO1xuICAgIFxuICAgIC8vIERJQUdOT1NUSUM6IExvZyBjb250ZW50IHNpemUgYmVmb3JlIHNlbmRpbmcgdG8gR2l0SHViXG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gU2F2aW5nIGVsZW1lbnQgJHtlbGVtZW50LmlkfSB0byBHaXRIdWIgLSBjb250ZW50IHNpemU6ICR7Y29udGVudC5sZW5ndGh9IGNoYXJzYCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gRmlyc3QgMjAwIGNoYXJzOiAke2NvbnRlbnQuc3Vic3RyaW5nKDAsIDIwMCl9YCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ09OVEVOVC1UUkFDRV0gTGFzdCAyMDAgY2hhcnM6ICR7Y29udGVudC5zdWJzdHJpbmcoTWF0aC5tYXgoMCwgY29udGVudC5sZW5ndGggLSAyMDApKX1gKTtcblxuICAgIC8vIFNhdmUgdG8gR2l0SHViXG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpcnN0LCBjaGVjayBpZiBmaWxlIGV4aXN0cyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBjcmVhdGUgb3IgdXBkYXRlXG4gICAgICBsZXQgZXhpc3RpbmdGaWxlID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4aXN0aW5nRmlsZSA9IGF3YWl0IHRoaXMuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vY29udGVudHMvJHtmaWxlUGF0aH1gXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChjaGVja0Vycm9yOiBhbnkpIHtcbiAgICAgICAgLy8gSU1QT1JUQU5UOiBBdXRoZW50aWNhdGlvbiBhbmQgcmF0ZSBsaW1pdCBlcnJvcnMgbXVzdCBiZSByZS10aHJvd24hXG4gICAgICAgIC8vIFRoZXNlIGFyZSBOT1QgXCJmaWxlIGRvZXNuJ3QgZXhpc3RcIiBzY2VuYXJpb3MgLSB0aGV5IGluZGljYXRlIHdlIGNhbid0XG4gICAgICAgIC8vIGFjY2VzcyB0aGUgQVBJIGF0IGFsbC4gT25seSA0MDQgKGFuZCBzaW1pbGFyKSBzaG91bGQgYmUgdHJlYXRlZCBhcyBcbiAgICAgICAgLy8gXCJmaWxlIGRvZXNuJ3QgZXhpc3RcIi4gVGhpcyBlbnN1cmVzIGF1dGggZXJyb3JzIGFyZSBwcm9wZXJseSByZXBvcnRlZFxuICAgICAgICAvLyB3aXRoIGNvcnJlY3QgZXJyb3IgY29kZXMgKGUuZy4sIFBPUlRGT0xJT19TWU5DXzAwMSBmb3IgYXV0aCBmYWlsdXJlcykuXG4gICAgICAgIC8vIFNlZSBQUiAjODQ2IGFuZCB0ZXN0OiBwb3J0Zm9saW8tc2luZ2xlLXVwbG9hZC5xYS50ZXN0LnRzXG4gICAgICAgIGlmIChjaGVja0Vycm9yLnN0YXR1cyA9PT0gNDAxIHx8IGNoZWNrRXJyb3IuY29kZSA9PT0gJ1BPUlRGT0xJT19TWU5DXzAwMScpIHtcbiAgICAgICAgICB0aHJvdyBjaGVja0Vycm9yOyAvLyBBdXRoZW50aWNhdGlvbiBlcnJvciAtIGRvbid0IGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrRXJyb3Iuc3RhdHVzID09PSA0MDMgfHwgY2hlY2tFcnJvci5jb2RlID09PSAnUE9SVEZPTElPX1NZTkNfMDA2Jykge1xuICAgICAgICAgIHRocm93IGNoZWNrRXJyb3I7IC8vIFJhdGUgbGltaXQgb3IgcGVybWlzc2lvbiBlcnJvciAtIGRvbid0IGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIG90aGVyIGVycm9ycyAobGlrZSA0MDQpLCBhc3N1bWUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBjb250aW51ZVxuICAgICAgICAvLyB3aXRoIGZpbGUgY3JlYXRpb24uIFRoaXMgaXMgdGhlIGV4cGVjdGVkIGZsb3cgZm9yIG5ldyBmaWxlcy5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGaWxlIGNoZWNrIHJldHVybmVkIGVycm9yIChsaWtlbHkgZG9lc24ndCBleGlzdCk6ICR7ZmlsZVBhdGh9YCk7XG4gICAgICAgIGV4aXN0aW5nRmlsZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIERVUExJQ0FURSBERVRFQ1RJT04gKElzc3VlICM3OTIpOiBDaGVjayBpZiBjb250ZW50IGlzIGlkZW50aWNhbFxuICAgICAgaWYgKGV4aXN0aW5nRmlsZSAmJiBleGlzdGluZ0ZpbGUuY29udGVudCkge1xuICAgICAgICAvLyBEZWNvZGUgZXhpc3RpbmcgY29udGVudCBmcm9tIGJhc2U2NFxuICAgICAgICBjb25zdCBleGlzdGluZ0NvbnRlbnQgPSBCdWZmZXIuZnJvbShleGlzdGluZ0ZpbGUuY29udGVudCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ29tcGFyZSB3aXRoIG5ldyBjb250ZW50XG4gICAgICAgIGlmIChleGlzdGluZ0NvbnRlbnQgPT09IGNvbnRlbnQpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbygnU2tpcHBpbmcgZHVwbGljYXRlIHBvcnRmb2xpbyB1cGxvYWQgLSBjb250ZW50IGlkZW50aWNhbCcsIHtcbiAgICAgICAgICAgIGVsZW1lbnRJZDogZWxlbWVudC5pZCxcbiAgICAgICAgICAgIGVsZW1lbnROYW1lOiBlbGVtZW50Lm1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICBmaWxlUGF0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFJldHVybiB0aGUgZXhpc3RpbmcgZmlsZSBVUkwgaW5zdGVhZCBvZiBjcmVhdGluZyBkdXBsaWNhdGUgY29tbWl0XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdVcmwgPSBleGlzdGluZ0ZpbGUuaHRtbF91cmwgfHwgXG4gICAgICAgICAgICBgaHR0cHM6Ly9naXRodWIuY29tLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vYmxvYi9tYWluLyR7ZmlsZVBhdGh9YDtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdVcmw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIG9yIHVwZGF0ZSB0aGUgZmlsZSAob25seSBpZiBjb250ZW50IGlzIGRpZmZlcmVudClcbiAgICAgIC8vIERFQlVHOiBMb2cgd2hhdCB3ZSdyZSBhYm91dCB0byBzZW5kXG4gICAgICBsb2dnZXIuZGVidWcoYFtERUJVR10gQ3JlYXRpbmcvdXBkYXRpbmcgZmlsZS4gZXhpc3RpbmdGaWxlOiAkeyEhZXhpc3RpbmdGaWxlfSwgc2hhOiAke2V4aXN0aW5nRmlsZT8uc2hhfWApO1xuICAgICAgXG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBtZXNzYWdlOiBleGlzdGluZ0ZpbGUgPyBcbiAgICAgICAgICBgVXBkYXRlICR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lfSBpbiBwb3J0Zm9saW9gIDogXG4gICAgICAgICAgYEFkZCAke2VsZW1lbnQubWV0YWRhdGEubmFtZX0gdG8gcG9ydGZvbGlvYCxcbiAgICAgICAgY29udGVudDogQnVmZmVyLmZyb20oY29udGVudCkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBPbmx5IGluY2x1ZGUgc2hhIGlmIHdlIGhhdmUgYW4gZXhpc3RpbmcgZmlsZSB3aXRoIGEgc2hhXG4gICAgICBpZiAoZXhpc3RpbmdGaWxlICYmIGV4aXN0aW5nRmlsZS5zaGEpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkuc2hhID0gZXhpc3RpbmdGaWxlLnNoYTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vY29udGVudHMvJHtmaWxlUGF0aH1gLFxuICAgICAgICAnUFVUJyxcbiAgICAgICAgcmVxdWVzdEJvZHlcbiAgICAgICk7XG5cbiAgICAgIC8vIEZJWDogR2l0SHViIEFQSSByZXNwb25zZSBzdHJ1Y3R1cmUgdmFyaWVzIC0gaGFuZGxlIGFsbCBjYXNlc1xuICAgICAgLy8gVGhlIHJlc3BvbnNlIG1heSBoYXZlIGNvbW1pdCBkYXRhIGF0IGRpZmZlcmVudCBsZXZlbHMgb3Igbm90IGF0IGFsbFxuICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdbUE9SVEZPTElPX1NZTkNfMDA0XSBHaXRIdWIgQVBJIHJldHVybmVkIG51bGwgcmVzcG9uc2UnLCB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICBmaWxlUGF0aFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbUE9SVEZPTElPX1NZTkNfMDA0XSBHaXRIdWIgQVBJIHJldHVybmVkIG51bGwgcmVzcG9uc2UgZm9yICR7ZWxlbWVudC5tZXRhZGF0YS5uYW1lfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgbXVsdGlwbGUgcGF0aHMgdG8gZ2V0IHRoZSBjb21taXQgVVJMXG4gICAgICBsZXQgY29tbWl0VXJsOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIC8vIFBhdGggMTogcmVzdWx0LmNvbW1pdC5odG1sX3VybCAoc3RhbmRhcmQgZm9yIGNvbnRlbnQgQVBJKVxuICAgICAgaWYgKHJlc3VsdC5jb21taXQ/Lmh0bWxfdXJsKSB7XG4gICAgICAgIGNvbW1pdFVybCA9IHJlc3VsdC5jb21taXQuaHRtbF91cmw7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDI6IHJlc3VsdC5jb250ZW50Lmh0bWxfdXJsIChzb21lIEFQSSByZXNwb25zZXMpXG4gICAgICBlbHNlIGlmIChyZXN1bHQuY29udGVudD8uaHRtbF91cmwpIHtcbiAgICAgICAgY29tbWl0VXJsID0gcmVzdWx0LmNvbnRlbnQuaHRtbF91cmw7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDM6IEdlbmVyYXRlIFVSTCBmcm9tIHJlc3BvbnNlIGRhdGFcbiAgICAgIGVsc2UgaWYgKHJlc3VsdC5jb250ZW50Py5wYXRoKSB7XG4gICAgICAgIGNvbW1pdFVybCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHt1c2VybmFtZX0vJHtQb3J0Zm9saW9SZXBvTWFuYWdlci5QT1JURk9MSU9fUkVQT19OQU1FfS9ibG9iL21haW4vJHtyZXN1bHQuY29udGVudC5wYXRofWA7XG4gICAgICB9XG4gICAgICAvLyBQYXRoIDQ6IEZhbGxiYWNrIHRvIHJlcG9zaXRvcnkgVVJMIChndWFyYW50ZWVkIHRvIGJlIHNldClcbiAgICAgIGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybignW1BPUlRGT0xJT19TWU5DXzAwNF0gQ291bGQgbm90IGV4dHJhY3QgY29tbWl0IFVSTCBmcm9tIEdpdEh1YiByZXNwb25zZSwgdXNpbmcgZmFsbGJhY2snLCB7XG4gICAgICAgICAgZWxlbWVudDogZWxlbWVudC5pZCxcbiAgICAgICAgICByZXNwb25zZUtleXM6IE9iamVjdC5rZXlzKHJlc3VsdCksXG4gICAgICAgICAgaGFzQ29tbWl0OiAhIXJlc3VsdC5jb21taXQsXG4gICAgICAgICAgaGFzQ29udGVudDogISFyZXN1bHQuY29udGVudFxuICAgICAgICB9KTtcbiAgICAgICAgY29tbWl0VXJsID0gYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3VzZXJuYW1lfS8ke1BvcnRmb2xpb1JlcG9NYW5hZ2VyLlBPUlRGT0xJT19SRVBPX05BTUV9L3RyZWUvbWFpbi8ke2VsZW1lbnQudHlwZX1gO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZGVidWcoJ1N1Y2Nlc3NmdWxseSBzYXZlZCBlbGVtZW50IHRvIEdpdEh1YiBwb3J0Zm9saW8nLCB7XG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQuaWQsXG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgY29tbWl0VXJsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNvbW1pdFVybDtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBVc2UgZXJyb3IgY29kZSBpZiBhbHJlYWR5IHNldCBieSBnaXRodWJSZXF1ZXN0XG4gICAgICBsZXQgZXJyb3JDb2RlID0gZXJyb3IuY29kZSB8fCAnUE9SVEZPTElPX1NZTkNfMDA1JzsgLy8gRGVmYXVsdCBuZXR3b3JrIGVycm9yXG4gICAgICBsZXQgZW5oYW5jZWRNZXNzYWdlID0gJ0ZhaWxlZCB0byBzYXZlIGVsZW1lbnQgdG8gcG9ydGZvbGlvJztcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZXJyb3Igc3RhdHVzIGZpcnN0IChtb3JlIHJlbGlhYmxlIHRoYW4gbWVzc2FnZSBwYXJzaW5nKVxuICAgICAgaWYgKGVycm9yLnN0YXR1cykge1xuICAgICAgICBzd2l0Y2ggKGVycm9yLnN0YXR1cykge1xuICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnR2l0SHViIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUGxlYXNlIHJlLWF1dGhlbnRpY2F0ZS4nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ3JhdGUgbGltaXQnKSkge1xuICAgICAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICAgICAgZW5oYW5jZWRNZXNzYWdlID0gJ0dpdEh1YiBBUEkgcmF0ZSBsaW1pdCBleGNlZWRlZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMSc7XG4gICAgICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgQVBJIGFjY2VzcyBmb3JiaWRkZW4uIENoZWNrIHRva2VuIHBlcm1pc3Npb25zLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDInO1xuICAgICAgICAgICAgZW5oYW5jZWRNZXNzYWdlID0gJ0dpdEh1YiBwb3J0Zm9saW8gcmVwb3NpdG9yeSBub3QgZm91bmQuIFBsZWFzZSBydW4gaW5pdF9wb3J0Zm9saW8gZmlyc3QuJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDIyOlxuICAgICAgICAgICAgZXJyb3JDb2RlID0gJ1BPUlRGT0xJT19TWU5DXzAwMyc7XG4gICAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnUmVwb3NpdG9yeSB2YWxpZGF0aW9uIGZhaWxlZC4nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEtlZXAgdGhlIGVycm9yIGNvZGUgZnJvbSBnaXRodWJSZXF1ZXN0IGlmIHNldFxuICAgICAgICAgICAgaWYgKCFlcnJvci5jb2RlKSB7XG4gICAgICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFlcnJvci5jb2RlKSB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBtZXNzYWdlIHBhcnNpbmcgb25seSBpZiBubyBzdGF0dXMgY29kZSBhdmFpbGFibGVcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCc0MDEnKSB8fCBlcnJvci5tZXNzYWdlPy5pbmNsdWRlcygnYXV0aGVudGljYXRpb24nKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDEnO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgYXV0aGVudGljYXRpb24gZmFpbGVkLiBQbGVhc2UgcmUtYXV0aGVudGljYXRlLic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJzQwNCcpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdub3QgZm91bmQnKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDInO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9ICdHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcnkgbm90IGZvdW5kLiBQbGVhc2UgcnVuIGluaXRfcG9ydGZvbGlvIGZpcnN0Lic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJzQwMycpIHx8IGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdyYXRlIGxpbWl0JykpIHtcbiAgICAgICAgICBlcnJvckNvZGUgPSAnUE9SVEZPTElPX1NZTkNfMDA2JztcbiAgICAgICAgICBlbmhhbmNlZE1lc3NhZ2UgPSAnR2l0SHViIEFQSSByYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLic7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ0Nhbm5vdCByZWFkIHByb3BlcnRpZXMnKSkge1xuICAgICAgICAgIGVycm9yQ29kZSA9ICdQT1JURk9MSU9fU1lOQ18wMDQnO1xuICAgICAgICAgIGVuaGFuY2VkTWVzc2FnZSA9IGBHaXRIdWIgQVBJIHJlc3BvbnNlIHBhcnNpbmcgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci5lcnJvcihgWyR7ZXJyb3JDb2RlfV0gJHtlbmhhbmNlZE1lc3NhZ2V9YCwgeyBcbiAgICAgICAgZWxlbWVudElkOiBlbGVtZW50LmlkLFxuICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgb3JpZ2luYWxFcnJvcjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgZXJyb3JTdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdQb3J0Zm9saW9SZXBvTWFuYWdlci5zYXZlRWxlbWVudFRvUmVwbycsIGVycm9yLCB7IFxuICAgICAgICBlbGVtZW50SWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICBlcnJvckNvZGUsXG4gICAgICAgIGVycm9yU3RhdHVzOiBlcnJvci5zdGF0dXNcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBUaHJvdyBlcnJvciB3aXRoIGNvZGUgZm9yIGJldHRlciBoYW5kbGluZyB1cHN0cmVhbVxuICAgICAgY29uc3Qgd3JhcHBlZEVycm9yID0gRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgYFske2Vycm9yQ29kZX1dICR7ZW5oYW5jZWRNZXNzYWdlfWAsIEVycm9yQ2F0ZWdvcnkuTkVUV09SS19FUlJPUik7XG4gICAgICAod3JhcHBlZEVycm9yIGFzIGFueSkuY29kZSA9IGVycm9yQ29kZTtcbiAgICAgICh3cmFwcGVkRXJyb3IgYXMgYW55KS5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICB0aHJvdyB3cmFwcGVkRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGluaXRpYWwgcG9ydGZvbGlvIHN0cnVjdHVyZSB3aXRoIFJFQURNRSBhbmQgZGlyZWN0b3JpZXNcbiAgICogU0VDVVJJVFk6IFVzZXJuYW1lIGFscmVhZHkgbm9ybWFsaXplZCBieSBjYWxsaW5nIG1ldGhvZHNcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlUG9ydGZvbGlvU3RydWN0dXJlKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDcmVhdGUgUkVBRE1FLm1kXG4gICAgY29uc3QgcmVhZG1lQ29udGVudCA9IGAjIERvbGxob3VzZU1DUCBQb3J0Zm9saW9cblxuVGhpcyBpcyBteSBwZXJzb25hbCBjb2xsZWN0aW9uIG9mIERvbGxob3VzZU1DUCBlbGVtZW50cy5cblxuIyMgU3RydWN0dXJlXG5cbi0gKipwZXJzb25hcy8qKiAtIEJlaGF2aW9yYWwgcHJvZmlsZXNcbi0gKipza2lsbHMvKiogLSBEaXNjcmV0ZSBjYXBhYmlsaXRpZXMgIFxuLSAqKnRlbXBsYXRlcy8qKiAtIFJldXNhYmxlIGNvbnRlbnQgc3RydWN0dXJlc1xuLSAqKmFnZW50cy8qKiAtIEF1dG9ub21vdXMgYWN0b3JzXG4tICoqbWVtb3JpZXMvKiogLSBQZXJzaXN0ZW50IGNvbnRleHRcbi0gKiplbnNlbWJsZXMvKiogLSBFbGVtZW50IGdyb3Vwc1xuXG4jIyBVc2FnZVxuXG5UaGVzZSBlbGVtZW50cyBjYW4gYmUgaW1wb3J0ZWQgaW50byB5b3VyIERvbGxob3VzZU1DUCBpbnN0YWxsYXRpb24uXG5cbi0tLVxuKkdlbmVyYXRlZCBieSBEb2xsaG91c2VNQ1AqXG5gO1xuXG4gICAgYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgYC9yZXBvcy8ke3VzZXJuYW1lfS8ke1BvcnRmb2xpb1JlcG9NYW5hZ2VyLlBPUlRGT0xJT19SRVBPX05BTUV9L2NvbnRlbnRzL1JFQURNRS5tZGAsXG4gICAgICAnUFVUJyxcbiAgICAgIHtcbiAgICAgICAgbWVzc2FnZTogJ0luaXRpYWxpemUgcG9ydGZvbGlvIHN0cnVjdHVyZScsXG4gICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKHJlYWRtZUNvbnRlbnQpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgZGlyZWN0b3J5IHBsYWNlaG9sZGVyc1xuICAgIGNvbnN0IGRpcmVjdG9yaWVzID0gWydwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJywgJ2FnZW50cycsICdtZW1vcmllcycsICdlbnNlbWJsZXMnXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJlY3Rvcmllcykge1xuICAgICAgYXdhaXQgdGhpcy5naXRodWJSZXF1ZXN0KFxuICAgICAgICBgL3JlcG9zLyR7dXNlcm5hbWV9LyR7UG9ydGZvbGlvUmVwb01hbmFnZXIuUE9SVEZPTElPX1JFUE9fTkFNRX0vY29udGVudHMvJHtkaXJ9Ly5naXRrZWVwYCxcbiAgICAgICAgJ1BVVCcsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiBgQ3JlYXRlICR7ZGlyfSBkaXJlY3RvcnlgLFxuICAgICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKCcnKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZWxlbWVudCBiZWZvcmUgc2F2aW5nXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgZWxlbWVudCBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghZWxlbWVudC5tZXRhZGF0YS5uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZWxlbWVudDogbmFtZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudC5pZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVsZW1lbnQ6IGlkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50LnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbGVtZW50OiB0eXBlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHNhZmUgZmlsZW5hbWUgZnJvbSBlbGVtZW50IG5hbWVcbiAgICogU0VDVVJJVFk6IEFkZGl0aW9uYWwgVW5pY29kZSBub3JtYWxpemF0aW9uIGZvciBmaWxlbmFtZXNcbiAgICogU0VDVVJJVFkgRklYOiBGaXhlZCBSZURvUyB2dWxuZXJhYmlsaXR5IHdpdGggaW5wdXQgbGVuZ3RoIGxpbWl0IGFuZCBvcHRpbWl6ZWQgcmVnZXhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVGaWxlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogTGltaXQgaW5wdXQgbGVuZ3RoIHRvIHByZXZlbnQgUmVEb1MgYXR0YWNrc1xuICAgIC8vIEV2ZW4gd2l0aCBvcHRpbWl6ZWQgcmVnZXgsIHZlcnkgbG9uZyBpbnB1dHMgY291bGQgY2F1c2UgcGVyZm9ybWFuY2UgaXNzdWVzXG4gICAgY29uc3QgTUFYX0ZJTEVOQU1FX0xFTkdUSCA9IDI1NTsgLy8gQ29tbW9uIGZpbGVzeXN0ZW0gbGltaXRcbiAgICBcbiAgICAvLyBOb3JtYWxpemUgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3MgaW4gZmlsZW5hbWVzXG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShuYW1lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICAvLyBUcnVuY2F0ZSB0byBzYWZlIGxlbmd0aCBCRUZPUkUgcmVnZXggb3BlcmF0aW9uc1xuICAgIGNvbnN0IHRydW5jYXRlZE5hbWUgPSBub3JtYWxpemVkTmFtZS5zbGljZSgwLCBNQVhfRklMRU5BTUVfTEVOR1RIKTtcbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVg6IE9wdGltaXplZCByZWdleCBvcGVyYXRpb25zIHRvIHByZXZlbnQgUmVEb1NcbiAgICAvLyAxLiBDb252ZXJ0IG5vbi1hbHBoYW51bWVyaWMgc2VxdWVuY2VzIHRvIHNpbmdsZSBkYXNoXG4gICAgLy8gMi4gUmVtb3ZlIGxlYWRpbmcvdHJhaWxpbmcgZGFzaGVzIGluIGEgc2luZ2xlIHBhc3MgdXNpbmcgdHJpbVxuICAgIGNvbnN0IHNhZmVOYW1lID0gdHJ1bmNhdGVkTmFtZVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9eLSsvLCAnJykgIC8vIFJlbW92ZSBsZWFkaW5nIGRhc2hlc1xuICAgICAgLnJlcGxhY2UoLy0rJC8sICcnKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGRhc2hlc1xuICAgIFxuICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgZmlsZW5hbWUgKG5vdCBlbXB0eSBhZnRlciBjbGVhbmluZylcbiAgICByZXR1cm4gc2FmZU5hbWUgfHwgJ3VubmFtZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBlbGVtZW50IGNvbnRlbnQgZm9yIHN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0RWxlbWVudENvbnRlbnQoZWxlbWVudDogSUVsZW1lbnQpOiBzdHJpbmcge1xuICAgIC8vIFNlcmlhbGl6ZSB0aGUgZWxlbWVudCBvciBjcmVhdGUgYmFzaWMgbWFya2Rvd25cbiAgICBpZiAoZWxlbWVudC5zZXJpYWxpemUpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnNlcmlhbGl6ZSgpO1xuICAgIH1cbiAgICAvLyBGYWxsYmFjayB0byBiYXNpYyBtYXJrZG93biBmb3JtYXRcbiAgICByZXR1cm4gYCMgJHtlbGVtZW50Lm1ldGFkYXRhLm5hbWV9XFxuXFxuJHtlbGVtZW50Lm1ldGFkYXRhLmRlc2NyaXB0aW9uIHx8ICcnfWA7XG4gIH1cbn0iXX0=
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PortfolioSyncManager - Handles synchronization between local and GitHub portfolios
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Download elements from GitHub portfolio
|
|
6
|
+
* - Upload elements with consent
|
|
7
|
+
* - Version comparison and diff viewing
|
|
8
|
+
* - Privacy-first with explicit permissions
|
|
9
|
+
* - Conflict resolution strategies
|
|
10
|
+
* - Bulk operations with configuration checks
|
|
11
|
+
*/
|
|
12
|
+
import { ElementType } from './types.js';
|
|
13
|
+
export interface SyncOperation {
|
|
14
|
+
operation: 'download' | 'upload' | 'compare' | 'list-remote';
|
|
15
|
+
element_name?: string;
|
|
16
|
+
element_type?: ElementType;
|
|
17
|
+
bulk?: boolean;
|
|
18
|
+
version?: string;
|
|
19
|
+
show_diff?: boolean;
|
|
20
|
+
force?: boolean;
|
|
21
|
+
confirm?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface SyncResult {
|
|
24
|
+
success: boolean;
|
|
25
|
+
message: string;
|
|
26
|
+
data?: any;
|
|
27
|
+
elements?: SyncElementInfo[];
|
|
28
|
+
conflicts?: ConflictInfo[];
|
|
29
|
+
}
|
|
30
|
+
export interface SyncElementInfo {
|
|
31
|
+
name: string;
|
|
32
|
+
type: ElementType;
|
|
33
|
+
localVersion?: string;
|
|
34
|
+
remoteVersion?: string;
|
|
35
|
+
status: 'new' | 'updated' | 'conflict' | 'unchanged' | 'local-only';
|
|
36
|
+
action?: 'download' | 'upload' | 'skip';
|
|
37
|
+
}
|
|
38
|
+
export interface ConflictInfo {
|
|
39
|
+
element: string;
|
|
40
|
+
type: ElementType;
|
|
41
|
+
localVersion: string;
|
|
42
|
+
remoteVersion: string;
|
|
43
|
+
localModified: Date;
|
|
44
|
+
remoteModified: Date;
|
|
45
|
+
resolution?: 'local' | 'remote' | 'manual';
|
|
46
|
+
}
|
|
47
|
+
export interface VersionInfo {
|
|
48
|
+
version: string;
|
|
49
|
+
timestamp: Date;
|
|
50
|
+
author: string;
|
|
51
|
+
hash: string;
|
|
52
|
+
size: number;
|
|
53
|
+
source: 'local' | 'remote';
|
|
54
|
+
}
|
|
55
|
+
export interface ElementDiff {
|
|
56
|
+
element: string;
|
|
57
|
+
type: ElementType;
|
|
58
|
+
changes: {
|
|
59
|
+
metadata?: {
|
|
60
|
+
field: string;
|
|
61
|
+
oldValue: any;
|
|
62
|
+
newValue: any;
|
|
63
|
+
}[];
|
|
64
|
+
content?: {
|
|
65
|
+
additions: number;
|
|
66
|
+
deletions: number;
|
|
67
|
+
diff: string;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export declare class PortfolioSyncManager {
|
|
72
|
+
private configManager;
|
|
73
|
+
private portfolioManager;
|
|
74
|
+
private repoManager;
|
|
75
|
+
private indexer;
|
|
76
|
+
constructor();
|
|
77
|
+
/**
|
|
78
|
+
* Main handler for sync operations
|
|
79
|
+
*/
|
|
80
|
+
handleSyncOperation(params: SyncOperation): Promise<SyncResult>;
|
|
81
|
+
/**
|
|
82
|
+
* Check if bulk operation is allowed
|
|
83
|
+
*/
|
|
84
|
+
private isBulkOperationAllowed;
|
|
85
|
+
/**
|
|
86
|
+
* List elements available in GitHub portfolio
|
|
87
|
+
*/
|
|
88
|
+
private listRemoteElements;
|
|
89
|
+
/**
|
|
90
|
+
* Download a specific element from GitHub
|
|
91
|
+
*/
|
|
92
|
+
private downloadElement;
|
|
93
|
+
/**
|
|
94
|
+
* Upload a specific element to GitHub
|
|
95
|
+
*/
|
|
96
|
+
private uploadElement;
|
|
97
|
+
/**
|
|
98
|
+
* Compare local and remote versions
|
|
99
|
+
*/
|
|
100
|
+
private compareVersions;
|
|
101
|
+
/**
|
|
102
|
+
* Bulk download elements
|
|
103
|
+
*/
|
|
104
|
+
private bulkDownload;
|
|
105
|
+
/**
|
|
106
|
+
* Bulk upload elements
|
|
107
|
+
*/
|
|
108
|
+
private bulkUpload;
|
|
109
|
+
/**
|
|
110
|
+
* Generate diff between two content versions
|
|
111
|
+
*/
|
|
112
|
+
private generateDiff;
|
|
113
|
+
/**
|
|
114
|
+
* Find a fuzzy match for an element name
|
|
115
|
+
*/
|
|
116
|
+
private findFuzzyMatch;
|
|
117
|
+
/**
|
|
118
|
+
* Get suggestions for similar element names
|
|
119
|
+
*/
|
|
120
|
+
private getSuggestions;
|
|
121
|
+
/**
|
|
122
|
+
* Calculate similarity between two strings
|
|
123
|
+
* Returns a score between 0 and 1
|
|
124
|
+
*/
|
|
125
|
+
private calculateSimilarity;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=PortfolioSyncManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortfolioSyncManager.d.ts","sourceRoot":"","sources":["../../src/portfolio/PortfolioSyncManager.ts"],"names":[],"mappings":"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"}
|