@dollhousemcp/mcp-server 1.9.13 → 1.9.15
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 +48 -0
- package/README.github.md +54 -0
- package/README.md.backup +1241 -49
- package/dist/cache/CollectionCache.js +2 -2
- package/dist/collection/CollectionIndexManager.js +3 -3
- package/dist/config/ConfigWizard.js +3 -3
- package/dist/config/indicator-config.js +2 -2
- package/dist/config/portfolio-constants.js +12 -12
- package/dist/elements/BaseElement.js +7 -7
- package/dist/elements/FeedbackProcessor.d.ts +7 -0
- package/dist/elements/FeedbackProcessor.d.ts.map +1 -1
- package/dist/elements/FeedbackProcessor.js +67 -14
- package/dist/elements/agents/AgentManager.js +6 -6
- package/dist/elements/memories/Memory.js +4 -4
- package/dist/elements/memories/MemoryManager.js +3 -3
- package/dist/elements/memories/utils.js +3 -3
- package/dist/elements/skills/Skill.js +2 -2
- package/dist/elements/skills/SkillManager.js +2 -2
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +38 -14
- package/dist/elements/templates/TemplateManager.js +2 -2
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ConfigHandler.js +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -16
- package/dist/persona/PersonaElementManager.js +3 -3
- package/dist/persona/PersonaManager.js +2 -2
- package/dist/persona/export-import/PersonaImporter.js +3 -3
- package/dist/portfolio/DefaultElementProvider.d.ts +12 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +23 -6
- package/dist/portfolio/GitHubPortfolioIndexer.js +2 -2
- package/dist/portfolio/MigrationManager.js +2 -2
- package/dist/portfolio/NLPScoringManager.js +2 -2
- package/dist/portfolio/PortfolioManager.d.ts +5 -0
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioManager.js +8 -1
- package/dist/portfolio/PortfolioRepoManager.js +2 -2
- package/dist/portfolio/PortfolioSyncManager.js +5 -5
- package/dist/portfolio/RelationshipManager.js +4 -4
- package/dist/portfolio/UnifiedIndexManager.js +4 -4
- package/dist/portfolio/types/RelationshipTypes.js +2 -2
- package/dist/security/InputValidator.d.ts +12 -0
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +38 -18
- package/dist/security/audit/config/suppressions.js +10 -10
- package/dist/security/commandValidator.js +2 -2
- package/dist/security/dosProtection.d.ts +123 -0
- package/dist/security/dosProtection.d.ts.map +1 -0
- package/dist/security/dosProtection.js +392 -0
- package/dist/security/pathValidator.js +2 -2
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +4 -3
- package/dist/security/tokenManager.js +10 -10
- package/dist/security/validators/unicodeValidator.js +2 -2
- package/dist/security/yamlValidator.js +3 -3
- package/dist/sync/PortfolioDownloader.js +2 -2
- package/dist/sync/PortfolioSyncComparer.js +2 -2
- package/dist/tools/portfolio/PortfolioElementAdapter.js +3 -3
- package/dist/tools/portfolio/submitToPortfolioTool.js +14 -14
- package/dist/utils/EarlyTerminationSearch.d.ts +1 -1
- package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -1
- package/dist/utils/EarlyTerminationSearch.js +3 -3
- package/dist/utils/ElementFormatter.d.ts +1 -0
- package/dist/utils/ElementFormatter.d.ts.map +1 -1
- package/dist/utils/ElementFormatter.js +21 -13
- package/dist/utils/GitHubRateLimiter.d.ts +6 -0
- package/dist/utils/GitHubRateLimiter.d.ts.map +1 -1
- package/dist/utils/GitHubRateLimiter.js +20 -5
- package/dist/utils/RateLimiter.js +2 -2
- package/dist/utils/SecureDownloader.js +2 -2
- package/dist/utils/fileOperations.d.ts +6 -1
- package/dist/utils/fileOperations.d.ts.map +1 -1
- package/dist/utils/fileOperations.js +29 -5
- package/dist/utils/filesystem.js +6 -6
- package/dist/utils/searchUtils.js +2 -2
- package/dist/utils/version.js +3 -3
- package/package.json +1 -1
|
@@ -119,7 +119,7 @@ export class CollectionCache {
|
|
|
119
119
|
*/
|
|
120
120
|
normalizeSearchTerm(term) {
|
|
121
121
|
return term.toLowerCase()
|
|
122
|
-
.
|
|
122
|
+
.replaceAll(/[-_\s]+/g, ' ') // Convert dashes, underscores to spaces
|
|
123
123
|
.replace(/\.md$/, '') // Remove .md extension
|
|
124
124
|
.trim();
|
|
125
125
|
}
|
|
@@ -169,4 +169,4 @@ export class CollectionCache {
|
|
|
169
169
|
};
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhY2hlL0NvbGxlY3Rpb25DYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFnQmpFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDbEIsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBUztJQUNULFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxnQ0FBZ0M7SUFFckYsWUFBWSxPQUFnQjtRQUMxQiwrRUFBK0U7UUFDL0UsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztRQUNwRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsdURBQXVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRSxNQUFNLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENB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QUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU87WUFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVM7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZO1NBQzNELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcnNpc3RlbnQgY2FjaGUgZm9yIGNvbGxlY3Rpb24gZGF0YSB0byBzdXBwb3J0IG9mZmxpbmUvYW5vbnltb3VzIGJyb3dzaW5nXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBQYXRoVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvcGF0aFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25JdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIHNoYTogc3RyaW5nO1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBsYXN0X21vZGlmaWVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25DYWNoZUVudHJ5IHtcbiAgaXRlbXM6IENvbGxlY3Rpb25JdGVtW107XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBldGFnPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlcnNpc3RlbnQgY2FjaGUgZm9yIGNvbGxlY3Rpb24gZGF0YSB0aGF0IHN1cHBvcnRzIG9mZmxpbmUgYnJvd3NpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XG4gIHByaXZhdGUgY2FjaGVEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSBjYWNoZUZpbGU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBDQUNIRV9UVExfTVMgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyAyNCBob3VycyBmb3IgY29sbGVjdGlvbiBjYWNoZVxuICBcbiAgY29uc3RydWN0b3IoYmFzZURpcj86IHN0cmluZykge1xuICAgIC8vIFVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzZXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gcGFyYW1ldGVyIG9yIGRlZmF1bHRcbiAgICBjb25zdCBlbnZDYWNoZURpciA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9DQUNIRV9ESVI7XG4gICAgaWYgKGVudkNhY2hlRGlyKSB7XG4gICAgICB0aGlzLmNhY2hlRGlyID0gZW52Q2FjaGVEaXI7XG4gICAgICBsb2dnZXIuZGVidWcoYENvbGxlY3Rpb25DYWNoZTogVXNpbmcgZW52aXJvbm1lbnQgY2FjaGUgZGlyZWN0b3J5OiAke3RoaXMuY2FjaGVEaXJ9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRCYXNlRGlyID0gYmFzZURpciB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgICAgdGhpcy5jYWNoZURpciA9IHBhdGguam9pbihkZWZhdWx0QmFzZURpciwgJy5kb2xsaG91c2VtY3AnLCAnY2FjaGUnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29sbGVjdGlvbkNhY2hlOiBVc2luZyBkZWZhdWx0IGNhY2hlIGRpcmVjdG9yeTogJHt0aGlzLmNhY2hlRGlyfWApO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlRmlsZSA9IHBhdGguam9pbih0aGlzLmNhY2hlRGlyLCAnY29sbGVjdGlvbi1jYWNoZS5qc29uJyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNhY2hlIGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVDYWNoZURpcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMubWtkaXIodGhpcy5jYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBjYWNoZSBkaXJlY3Rvcnk6ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGNvbGxlY3Rpb24gZGF0YSBmcm9tIHBlcnNpc3RlbnQgY2FjaGVcbiAgICovXG4gIGFzeW5jIGxvYWRDYWNoZSgpOiBQcm9taXNlPENvbGxlY3Rpb25DYWNoZUVudHJ5IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBjYWNoZSBmaWxlIHBhdGggKGJhc2ljIHNlY3VyaXR5IGNoZWNrKVxuICAgICAgaWYgKHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCcuLicpIHx8IHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCdcXDAnKSkge1xuICAgICAgICAvLyBTRUNVUklUWSBGSVg6IEFkZCBhdWRpdCBsb2dnaW5nIGZvciBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGlvblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1BBVEhfVFJBVkVSU0FMX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkNhY2hlLmxvYWRDYWNoZScsXG4gICAgICAgICAgZGV0YWlsczogYFBvdGVudGlhbCBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGVkIGluIGNhY2hlIGZpbGUgcGF0aDogJHt0aGlzLmNhY2hlRmlsZS5zdWJzdHJpbmcoMCwgMTAwKX1gXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIud2FybignSW52YWxpZCBjYWNoZSBmaWxlIHBhdGgsIHNraXBwaW5nIGNhY2hlIGxvYWQnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLmNhY2hlRmlsZSwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IGNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVFbnRyeSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGNhY2hlIGlzIGV4cGlyZWRcbiAgICAgIGlmIChEYXRlLm5vdygpIC0gY2FjaGUudGltZXN0YW1wID4gdGhpcy5DQUNIRV9UVExfTVMpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGNhY2hlIGV4cGlyZWQsIHdpbGwgcmVmcmVzaCBmcm9tIEdpdEh1YicpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKGBMb2FkZWQgJHtjYWNoZS5pdGVtcy5sZW5ndGh9IGl0ZW1zIGZyb20gY29sbGVjdGlvbiBjYWNoZWApO1xuICAgICAgcmV0dXJuIGNhY2hlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gbG9hZCBjb2xsZWN0aW9uIGNhY2hlOiAke2Vycm9yfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU2F2ZSBjb2xsZWN0aW9uIGRhdGEgdG8gcGVyc2lzdGVudCBjYWNoZVxuICAgKi9cbiAgYXN5bmMgc2F2ZUNhY2hlKGl0ZW1zOiBDb2xsZWN0aW9uSXRlbVtdLCBldGFnPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlQ2FjaGVEaXIoKTtcbiAgICAgIFxuICAgICAgY29uc3QgY2FjaGVFbnRyeTogQ29sbGVjdGlvbkNhY2hlRW50cnkgPSB7XG4gICAgICAgIGl0ZW1zLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGV0YWdcbiAgICAgIH07XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShjYWNoZUVudHJ5LCBudWxsLCAyKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLmNhY2hlRmlsZSwgZGF0YSwgJ3V0ZjgnKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKGBTYXZlZCAke2l0ZW1zLmxlbmd0aH0gaXRlbXMgdG8gY29sbGVjdGlvbiBjYWNoZWApO1xuICAgICAgXG4gICAgICAvLyBTRUNVUklUWSBGSVg6IEFkZCBhdWRpdCBsb2dnaW5nIGZvciBjYWNoZSB3cml0ZSBvcGVyYXRpb25zXG4gICAgICBsb2dnZXIuZGVidWcoJ1NlY3VyaXR5IGF1ZGl0OiBDYWNoZSB3cml0ZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgXG4gICAgICAvLyBMb2cgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FjaGUgZmlsZSBvcGVyYXRpb24gY29tcGxldGVkIHdpdGggJHtpdGVtcy5sZW5ndGh9IGl0ZW1zYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHNhdmUgY29sbGVjdGlvbiBjYWNoZTogJHtlcnJvcn1gKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGluZyBmYWlsdXJlcyBzaG91bGRuJ3QgYnJlYWsgZnVuY3Rpb25hbGl0eVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFNlYXJjaCBjYWNoZWQgY29sbGVjdGlvbiBpdGVtcyB3aXRoIGZ1enp5IG1hdGNoaW5nXG4gICAqL1xuICBhc3luYyBzZWFyY2hDYWNoZShxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxDb2xsZWN0aW9uSXRlbVtdPiB7XG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCB0aGlzLmxvYWRDYWNoZSgpO1xuICAgIGlmICghY2FjaGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gdGhpcy5ub3JtYWxpemVTZWFyY2hUZXJtKHF1ZXJ5KTtcbiAgICByZXR1cm4gY2FjaGUuaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgLy8gU2VhcmNoIGluIGZpbGVuYW1lIGFuZCBwYXRoIHdpdGggbm9ybWFsaXphdGlvblxuICAgICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSB0aGlzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oaXRlbS5uYW1lKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gdGhpcy5ub3JtYWxpemVTZWFyY2hUZXJtKGl0ZW0ucGF0aCk7XG4gICAgICBcbiAgICAgIHJldHVybiBub3JtYWxpemVkTmFtZS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpIHx8IFxuICAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkgfHxcbiAgICAgICAgICAgICAoaXRlbS5jb250ZW50ICYmIHRoaXMubm9ybWFsaXplU2VhcmNoVGVybShpdGVtLmNvbnRlbnQpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkpO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogTm9ybWFsaXplIHNlYXJjaCB0ZXJtcyBmb3IgYmV0dGVyIG1hdGNoaW5nIChoYW5kbGVzIHNwYWNlcywgZGFzaGVzLCBldGMuKVxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVTZWFyY2hUZXJtKHRlcm06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRlcm0udG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1stX1xcc10rL2csICcgJykgIC8vIENvbnZlcnQgZGFzaGVzLCB1bmRlcnNjb3JlcyB0byBzcGFjZXNcbiAgICAgIC5yZXBsYWNlKC9cXC5tZCQvLCAnJykgICAgICAgLy8gUmVtb3ZlIC5tZCBleHRlbnNpb25cbiAgICAgIC50cmltKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY2FjaGVkIGNvbGxlY3Rpb24gaXRlbXMgYnkgdHlwZS9wYXRoXG4gICAqL1xuICBhc3luYyBnZXRJdGVtc0J5UGF0aChwYXRoUHJlZml4OiBzdHJpbmcpOiBQcm9taXNlPENvbGxlY3Rpb25JdGVtW10+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHRoaXMubG9hZENhY2hlKCk7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2FjaGUuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wYXRoLnN0YXJ0c1dpdGgocGF0aFByZWZpeCkpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY2FjaGUgZXhpc3RzIGFuZCBpcyB2YWxpZFxuICAgKi9cbiAgYXN5bmMgaXNDYWNoZVZhbGlkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUoKTtcbiAgICByZXR1cm4gY2FjaGUgIT09IG51bGw7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgY2FjaGVcbiAgICovXG4gIGFzeW5jIGNsZWFyQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLnVubGluayh0aGlzLmNhY2hlRmlsZSk7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gY2FjaGUgY2xlYXJlZCcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gY2xlYXIgY29sbGVjdGlvbiBjYWNoZTogJHtlcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgc3RhdHMgZm9yIGRlYnVnZ2luZ1xuICAgKi9cbiAgYXN5bmMgZ2V0Q2FjaGVTdGF0cygpOiBQcm9taXNlPHsgaXRlbUNvdW50OiBudW1iZXI7IGNhY2hlQWdlOiBudW1iZXI7IGlzVmFsaWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUoKTtcbiAgICBpZiAoIWNhY2hlKSB7XG4gICAgICByZXR1cm4geyBpdGVtQ291bnQ6IDAsIGNhY2hlQWdlOiAwLCBpc1ZhbGlkOiBmYWxzZSB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbUNvdW50OiBjYWNoZS5pdGVtcy5sZW5ndGgsXG4gICAgICBjYWNoZUFnZTogRGF0ZS5ub3coKSAtIGNhY2hlLnRpbWVzdGFtcCxcbiAgICAgIGlzVmFsaWQ6IERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAgPD0gdGhpcy5DQUNIRV9UVExfTVNcbiAgICB9O1xuICB9XG59Il19
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhY2hlL0NvbGxlY3Rpb25DYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFnQmpFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDbEIsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBUztJQUNULFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxnQ0FBZ0M7SUFFckYsWUFBWSxPQUFnQjtRQUMxQiwrRUFBK0U7UUFDL0UsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztRQUNwRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsdURBQXVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRSxNQUFNLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENB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QUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU87WUFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVM7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZO1NBQzNELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcnNpc3RlbnQgY2FjaGUgZm9yIGNvbGxlY3Rpb24gZGF0YSB0byBzdXBwb3J0IG9mZmxpbmUvYW5vbnltb3VzIGJyb3dzaW5nXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBQYXRoVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvcGF0aFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25JdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIHNoYTogc3RyaW5nO1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBsYXN0X21vZGlmaWVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25DYWNoZUVudHJ5IHtcbiAgaXRlbXM6IENvbGxlY3Rpb25JdGVtW107XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBldGFnPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlcnNpc3RlbnQgY2FjaGUgZm9yIGNvbGxlY3Rpb24gZGF0YSB0aGF0IHN1cHBvcnRzIG9mZmxpbmUgYnJvd3NpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XG4gIHByaXZhdGUgY2FjaGVEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSBjYWNoZUZpbGU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBDQUNIRV9UVExfTVMgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyAyNCBob3VycyBmb3IgY29sbGVjdGlvbiBjYWNoZVxuICBcbiAgY29uc3RydWN0b3IoYmFzZURpcj86IHN0cmluZykge1xuICAgIC8vIFVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzZXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gcGFyYW1ldGVyIG9yIGRlZmF1bHRcbiAgICBjb25zdCBlbnZDYWNoZURpciA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9DQUNIRV9ESVI7XG4gICAgaWYgKGVudkNhY2hlRGlyKSB7XG4gICAgICB0aGlzLmNhY2hlRGlyID0gZW52Q2FjaGVEaXI7XG4gICAgICBsb2dnZXIuZGVidWcoYENvbGxlY3Rpb25DYWNoZTogVXNpbmcgZW52aXJvbm1lbnQgY2FjaGUgZGlyZWN0b3J5OiAke3RoaXMuY2FjaGVEaXJ9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRCYXNlRGlyID0gYmFzZURpciB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgICAgdGhpcy5jYWNoZURpciA9IHBhdGguam9pbihkZWZhdWx0QmFzZURpciwgJy5kb2xsaG91c2VtY3AnLCAnY2FjaGUnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29sbGVjdGlvbkNhY2hlOiBVc2luZyBkZWZhdWx0IGNhY2hlIGRpcmVjdG9yeTogJHt0aGlzLmNhY2hlRGlyfWApO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlRmlsZSA9IHBhdGguam9pbih0aGlzLmNhY2hlRGlyLCAnY29sbGVjdGlvbi1jYWNoZS5qc29uJyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNhY2hlIGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVDYWNoZURpcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMubWtkaXIodGhpcy5jYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBjYWNoZSBkaXJlY3Rvcnk6ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGNvbGxlY3Rpb24gZGF0YSBmcm9tIHBlcnNpc3RlbnQgY2FjaGVcbiAgICovXG4gIGFzeW5jIGxvYWRDYWNoZSgpOiBQcm9taXNlPENvbGxlY3Rpb25DYWNoZUVudHJ5IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBjYWNoZSBmaWxlIHBhdGggKGJhc2ljIHNlY3VyaXR5IGNoZWNrKVxuICAgICAgaWYgKHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCcuLicpIHx8IHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCdcXDAnKSkge1xuICAgICAgICAvLyBTRUNVUklUWSBGSVg6IEFkZCBhdWRpdCBsb2dnaW5nIGZvciBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGlvblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1BBVEhfVFJBVkVSU0FMX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkNhY2hlLmxvYWRDYWNoZScsXG4gICAgICAgICAgZGV0YWlsczogYFBvdGVudGlhbCBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGVkIGluIGNhY2hlIGZpbGUgcGF0aDogJHt0aGlzLmNhY2hlRmlsZS5zdWJzdHJpbmcoMCwgMTAwKX1gXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIud2FybignSW52YWxpZCBjYWNoZSBmaWxlIHBhdGgsIHNraXBwaW5nIGNhY2hlIGxvYWQnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLmNhY2hlRmlsZSwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IGNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVFbnRyeSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGNhY2hlIGlzIGV4cGlyZWRcbiAgICAgIGlmIChEYXRlLm5vdygpIC0gY2FjaGUudGltZXN0YW1wID4gdGhpcy5DQUNIRV9UVExfTVMpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGNhY2hlIGV4cGlyZWQsIHdpbGwgcmVmcmVzaCBmcm9tIEdpdEh1YicpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKGBMb2FkZWQgJHtjYWNoZS5pdGVtcy5sZW5ndGh9IGl0ZW1zIGZyb20gY29sbGVjdGlvbiBjYWNoZWApO1xuICAgICAgcmV0dXJuIGNhY2hlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gbG9hZCBjb2xsZWN0aW9uIGNhY2hlOiAke2Vycm9yfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU2F2ZSBjb2xsZWN0aW9uIGRhdGEgdG8gcGVyc2lzdGVudCBjYWNoZVxuICAgKi9cbiAgYXN5bmMgc2F2ZUNhY2hlKGl0ZW1zOiBDb2xsZWN0aW9uSXRlbVtdLCBldGFnPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlQ2FjaGVEaXIoKTtcbiAgICAgIFxuICAgICAgY29uc3QgY2FjaGVFbnRyeTogQ29sbGVjdGlvbkNhY2hlRW50cnkgPSB7XG4gICAgICAgIGl0ZW1zLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGV0YWdcbiAgICAgIH07XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShjYWNoZUVudHJ5LCBudWxsLCAyKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLmNhY2hlRmlsZSwgZGF0YSwgJ3V0ZjgnKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKGBTYXZlZCAke2l0ZW1zLmxlbmd0aH0gaXRlbXMgdG8gY29sbGVjdGlvbiBjYWNoZWApO1xuICAgICAgXG4gICAgICAvLyBTRUNVUklUWSBGSVg6IEFkZCBhdWRpdCBsb2dnaW5nIGZvciBjYWNoZSB3cml0ZSBvcGVyYXRpb25zXG4gICAgICBsb2dnZXIuZGVidWcoJ1NlY3VyaXR5IGF1ZGl0OiBDYWNoZSB3cml0ZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgXG4gICAgICAvLyBMb2cgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FjaGUgZmlsZSBvcGVyYXRpb24gY29tcGxldGVkIHdpdGggJHtpdGVtcy5sZW5ndGh9IGl0ZW1zYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHNhdmUgY29sbGVjdGlvbiBjYWNoZTogJHtlcnJvcn1gKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGluZyBmYWlsdXJlcyBzaG91bGRuJ3QgYnJlYWsgZnVuY3Rpb25hbGl0eVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFNlYXJjaCBjYWNoZWQgY29sbGVjdGlvbiBpdGVtcyB3aXRoIGZ1enp5IG1hdGNoaW5nXG4gICAqL1xuICBhc3luYyBzZWFyY2hDYWNoZShxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxDb2xsZWN0aW9uSXRlbVtdPiB7XG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCB0aGlzLmxvYWRDYWNoZSgpO1xuICAgIGlmICghY2FjaGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gdGhpcy5ub3JtYWxpemVTZWFyY2hUZXJtKHF1ZXJ5KTtcbiAgICByZXR1cm4gY2FjaGUuaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgLy8gU2VhcmNoIGluIGZpbGVuYW1lIGFuZCBwYXRoIHdpdGggbm9ybWFsaXphdGlvblxuICAgICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSB0aGlzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oaXRlbS5uYW1lKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gdGhpcy5ub3JtYWxpemVTZWFyY2hUZXJtKGl0ZW0ucGF0aCk7XG4gICAgICBcbiAgICAgIHJldHVybiBub3JtYWxpemVkTmFtZS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpIHx8IFxuICAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkgfHxcbiAgICAgICAgICAgICAoaXRlbS5jb250ZW50ICYmIHRoaXMubm9ybWFsaXplU2VhcmNoVGVybShpdGVtLmNvbnRlbnQpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkpO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogTm9ybWFsaXplIHNlYXJjaCB0ZXJtcyBmb3IgYmV0dGVyIG1hdGNoaW5nIChoYW5kbGVzIHNwYWNlcywgZGFzaGVzLCBldGMuKVxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVTZWFyY2hUZXJtKHRlcm06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRlcm0udG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2VBbGwoL1stX1xcc10rL2csICcgJykgIC8vIENvbnZlcnQgZGFzaGVzLCB1bmRlcnNjb3JlcyB0byBzcGFjZXNcbiAgICAgIC5yZXBsYWNlKC9cXC5tZCQvLCAnJykgICAgICAgLy8gUmVtb3ZlIC5tZCBleHRlbnNpb25cbiAgICAgIC50cmltKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY2FjaGVkIGNvbGxlY3Rpb24gaXRlbXMgYnkgdHlwZS9wYXRoXG4gICAqL1xuICBhc3luYyBnZXRJdGVtc0J5UGF0aChwYXRoUHJlZml4OiBzdHJpbmcpOiBQcm9taXNlPENvbGxlY3Rpb25JdGVtW10+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHRoaXMubG9hZENhY2hlKCk7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2FjaGUuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wYXRoLnN0YXJ0c1dpdGgocGF0aFByZWZpeCkpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY2FjaGUgZXhpc3RzIGFuZCBpcyB2YWxpZFxuICAgKi9cbiAgYXN5bmMgaXNDYWNoZVZhbGlkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUoKTtcbiAgICByZXR1cm4gY2FjaGUgIT09IG51bGw7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgY2FjaGVcbiAgICovXG4gIGFzeW5jIGNsZWFyQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLnVubGluayh0aGlzLmNhY2hlRmlsZSk7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gY2FjaGUgY2xlYXJlZCcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gY2xlYXIgY29sbGVjdGlvbiBjYWNoZTogJHtlcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgc3RhdHMgZm9yIGRlYnVnZ2luZ1xuICAgKi9cbiAgYXN5bmMgZ2V0Q2FjaGVTdGF0cygpOiBQcm9taXNlPHsgaXRlbUNvdW50OiBudW1iZXI7IGNhY2hlQWdlOiBudW1iZXI7IGlzVmFsaWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUoKTtcbiAgICBpZiAoIWNhY2hlKSB7XG4gICAgICByZXR1cm4geyBpdGVtQ291bnQ6IDAsIGNhY2hlQWdlOiAwLCBpc1ZhbGlkOiBmYWxzZSB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbUNvdW50OiBjYWNoZS5pdGVtcy5sZW5ndGgsXG4gICAgICBjYWNoZUFnZTogRGF0ZS5ub3coKSAtIGNhY2hlLnRpbWVzdGFtcCxcbiAgICAgIGlzVmFsaWQ6IERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAgPD0gdGhpcy5DQUNIRV9UVExfTVNcbiAgICB9O1xuICB9XG59Il19
|
|
@@ -64,8 +64,8 @@ export class CollectionIndexManager {
|
|
|
64
64
|
// Check environment variable first
|
|
65
65
|
const envTimeout = process.env.COLLECTION_FETCH_TIMEOUT;
|
|
66
66
|
if (envTimeout) {
|
|
67
|
-
const parsed = parseInt(envTimeout, 10);
|
|
68
|
-
if (!isNaN(parsed) && parsed > 0) {
|
|
67
|
+
const parsed = Number.parseInt(envTimeout, 10);
|
|
68
|
+
if (!Number.isNaN(parsed) && parsed > 0) {
|
|
69
69
|
logger.debug(`Using COLLECTION_FETCH_TIMEOUT from environment: ${parsed}ms`);
|
|
70
70
|
return parsed;
|
|
71
71
|
}
|
|
@@ -498,4 +498,4 @@ export class CollectionIndexManager {
|
|
|
498
498
|
}
|
|
499
499
|
}
|
|
500
500
|
}
|
|
501
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkluZGV4TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25JbmRleE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQW9CNUMsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxvRUFBb0U7SUFDcEUsaUhBQWlIO0lBQ2hHLFNBQVMsR0FBRyxpRUFBaUUsQ0FBQztJQUM5RSxNQUFNLENBQVM7SUFDZixnQkFBZ0IsQ0FBUztJQUN6QixXQUFXLENBQVM7SUFDcEIsbUJBQW1CLENBQVM7SUFDNUIsa0JBQWtCLENBQVM7SUFDM0IsVUFBVSxDQUFTO0lBRTVCLFdBQVcsR0FBcUMsSUFBSSxDQUFDO0lBQ3JELHdCQUF3QixHQUF5QixJQUFJLENBQUM7SUFDdEQsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUNyQixzQkFBc0IsR0FBRyxDQUFDLENBQUM7SUFDM0IseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLHlCQUF5QixHQUFHLENBQUMsQ0FBQztJQUM5QiwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7SUFDeEQsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUMscUNBQXFDO0lBQzlELGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyw2QkFBNkI7SUFFcEUsa0NBQWtDO0lBQ2pCLGNBQWMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFNBQVM7SUFDMUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hC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LENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsd0JBQXdCO1FBQzVCLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29sbGVjdGlvbiBJbmRleCBNYW5hZ2VyIHdpdGggQmFja2dyb3VuZCBSZWZyZXNoIGFuZCBSb2J1c3QgQ2FjaGluZ1xuICogXG4gKiBUaGlzIG1hbmFnZXIgaW1wbGVtZW50czpcbiAqIC0gMS1ob3VyIFRUTCB3aXRoIGxvY2FsIGZpbGUgY2FjaGluZ1xuICogLSBCYWNrZ3JvdW5kIHJlZnJlc2ggd2l0aG91dCBibG9ja2luZyBvcGVyYXRpb25zXG4gKiAtIEV4cG9uZW50aWFsIGJhY2tvZmYgcmV0cnkgbG9naWNcbiAqIC0gQ29uZmlndXJhYmxlIHRpbWVvdXRzIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqIC0gUmV0dXJuIHN0YWxlIGNhY2hlIHdoaWxlIHJlZnJlc2hpbmcgaW4gYmFja2dyb3VuZFxuICogLSBDb21wcmVoZW5zaXZlIGVycm9yIGhhbmRsaW5nIGZvciBwcm9kdWN0aW9uIHVzZVxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSW5kZXggfSBmcm9tICcuLi90eXBlcy9jb2xsZWN0aW9uJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkluZGV4Q2FjaGVFbnRyeSB7XG4gIGRhdGE6IENvbGxlY3Rpb25JbmRleDtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGV0YWc/OiBzdHJpbmc7XG4gIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBjaGVja3N1bTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25JbmRleE1hbmFnZXJDb25maWcge1xuICB0dGxNcz86IG51bWJlcjtcbiAgZmV0Y2hUaW1lb3V0TXM/OiBudW1iZXI7XG4gIG1heFJldHJpZXM/OiBudW1iZXI7XG4gIGJhc2VSZXRyeURlbGF5TXM/OiBudW1iZXI7XG4gIG1heFJldHJ5RGVsYXlNcz86IG51bWJlcjtcbiAgY2FjaGVEaXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyIHtcbiAgLy8gVXNlIEdpdEh1YiBQYWdlcyBpbmRleCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgYnkgd29ya2Zsb3dcbiAgLy8gT2xkIFVSTCB3YXMgc3RhbGU6IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9tYWluL3B1YmxpYy9jb2xsZWN0aW9uLWluZGV4Lmpzb25cbiAgcHJpdmF0ZSByZWFkb25seSBJTkRFWF9VUkwgPSAnaHR0cHM6Ly9kb2xsaG91c2VtY3AuZ2l0aHViLmlvL2NvbGxlY3Rpb24vY29sbGVjdGlvbi1pbmRleC5qc29uJztcbiAgcHJpdmF0ZSByZWFkb25seSBUVExfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBGRVRDSF9USU1FT1VUX01TOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1JFVFJJRVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBCQVNFX1JFVFJZX0RFTEFZX01TOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1JFVFJZX0RFTEFZX01TOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0FDSEVfRklMRTogc3RyaW5nO1xuICBcbiAgcHJpdmF0ZSBjYWNoZWRJbmRleDogQ29sbGVjdGlvbkluZGV4Q2FjaGVFbnRyeSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGJhY2tncm91bmRSZWZyZXNoUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICBwcml2YXRlIGNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPSAwO1xuICBwcml2YXRlIGNpcmN1aXRCcmVha2VyTGFzdEZhaWx1cmUgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IENJUkNVSVRfQlJFQUtFUl9USFJFU0hPTEQgPSA1O1xuICBwcml2YXRlIHJlYWRvbmx5IENJUkNVSVRfQlJFQUtFUl9USU1FT1VUX01TID0gNSAqIDYwICogMTAwMDsgLy8gNSBtaW51dGVzXG4gIHByaXZhdGUgcmVhZG9ubHkgUkVGUkVTSF9USFJFU0hPTEQgPSAwLjg7IC8vIFJlZnJlc2ggd2hlbiA4MCUgb2YgVFRMIGhhcyBwYXNzZWRcbiAgcHJpdmF0ZSByZWFkb25seSBKSVRURVJfRkFDVE9SID0gMC4yNTsgLy8gwrEyNSUgcmFuZG9tbmVzcyBmb3Igaml0dGVyXG4gIFxuICAvLyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9UVExfTVMgPSA2MCAqIDYwICogMTAwMDsgLy8gMSBob3VyXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9NQVhfUkVUUklFUyA9IDM7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9CQVNFX1JFVFJZX0RFTEFZX01TID0gMTAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX01BWF9SRVRSWV9ERUxBWV9NUyA9IDMwMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfRkVUQ0hfVElNRU9VVF9NUyA9IDUwMDA7IC8vIDUgc2Vjb25kc1xuICBwcml2YXRlIHJlYWRvbmx5IENIRUNLU1VNX0xFTkdUSCA9IDg7XG4gIHByaXZhdGUgcmVhZG9ubHkgSlNPTl9JTkRFTlQgPSAyO1xuICBcbiAgY29uc3RydWN0b3IoY29uZmlnOiBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyQ29uZmlnID0ge30pIHtcbiAgICAvLyBDb25maWd1cmF0aW9uIHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzXG4gICAgdGhpcy5UVExfTVMgPSBjb25maWcudHRsTXMgfHwgdGhpcy5ERUZBVUxUX1RUTF9NUztcbiAgICB0aGlzLkZFVENIX1RJTUVPVVRfTVMgPSB0aGlzLnBhcnNlRmV0Y2hUaW1lb3V0KGNvbmZpZy5mZXRjaFRpbWVvdXRNcyk7XG4gICAgdGhpcy5NQVhfUkVUUklFUyA9IGNvbmZpZy5tYXhSZXRyaWVzIHx8IHRoaXMuREVGQVVMVF9NQVhfUkVUUklFUztcbiAgICB0aGlzLkJBU0VfUkVUUllfREVMQVlfTVMgPSBjb25maWcuYmFzZVJldHJ5RGVsYXlNcyB8fCB0aGlzLkRFRkFVTFRfQkFTRV9SRVRSWV9ERUxBWV9NUztcbiAgICB0aGlzLk1BWF9SRVRSWV9ERUxBWV9NUyA9IGNvbmZpZy5tYXhSZXRyeURlbGF5TXMgfHwgdGhpcy5ERUZBVUxUX01BWF9SRVRSWV9ERUxBWV9NUztcbiAgICBcbiAgICAvLyBDYWNoZSBkaXJlY3RvcnkgLSB1c2Ugfi8uZG9sbGhvdXNlL2NhY2hlL2NvbGxlY3Rpb24taW5kZXguanNvbiBhcyBzcGVjaWZpZWRcbiAgICBjb25zdCBjYWNoZURpciA9IGNvbmZpZy5jYWNoZURpciB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdjYWNoZScpO1xuICAgIHRoaXMuQ0FDSEVfRklMRSA9IHBhdGguam9pbihjYWNoZURpciwgJ2NvbGxlY3Rpb24taW5kZXguanNvbicpO1xuICAgIFxuICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbkluZGV4TWFuYWdlciBpbml0aWFsaXplZCcsIHtcbiAgICAgIHR0bE1zOiB0aGlzLlRUTF9NUyxcbiAgICAgIGZldGNoVGltZW91dE1zOiB0aGlzLkZFVENIX1RJTUVPVVRfTVMsXG4gICAgICBjYWNoZUZpbGU6IHRoaXMuQ0FDSEVfRklMRSxcbiAgICAgIG1heFJldHJpZXM6IHRoaXMuTUFYX1JFVFJJRVNcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFBhcnNlIGZldGNoIHRpbWVvdXQgZnJvbSBjb25maWcgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VGZXRjaFRpbWVvdXQoY29uZmlnVmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIENoZWNrIGVudmlyb25tZW50IHZhcmlhYmxlIGZpcnN0XG4gICAgY29uc3QgZW52VGltZW91dCA9IHByb2Nlc3MuZW52LkNPTExFQ1RJT05fRkVUQ0hfVElNRU9VVDtcbiAgICBpZiAoZW52VGltZW91dCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoZW52VGltZW91dCwgMTApO1xuICAgICAgaWYgKCFpc05hTihwYXJzZWQpICYmIHBhcnNlZCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBVc2luZyBDT0xMRUNUSU9OX0ZFVENIX1RJTUVPVVQgZnJvbSBlbnZpcm9ubWVudDogJHtwYXJzZWR9bXNgKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci53YXJuKGBJbnZhbGlkIENPTExFQ1RJT05fRkVUQ0hfVElNRU9VVCB2YWx1ZTogJHtlbnZUaW1lb3V0fSwgdXNpbmcgZGVmYXVsdGApO1xuICAgIH1cbiAgICBcbiAgICAvLyBGYWxsIGJhY2sgdG8gY29uZmlnIHZhbHVlIG9yIGRlZmF1bHRcbiAgICByZXR1cm4gY29uZmlnVmFsdWUgfHwgdGhpcy5ERUZBVUxUX0ZFVENIX1RJTUVPVVRfTVM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY29sbGVjdGlvbiBpbmRleCB3aXRoIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgcGF0dGVyblxuICAgKiBSZXR1cm5zIGNhY2hlZCBkYXRhIGltbWVkaWF0ZWx5IGlmIGF2YWlsYWJsZSwgcmVmcmVzaGVzIGluIGJhY2tncm91bmRcbiAgICovXG4gIGFzeW5jIGdldEluZGV4KCk6IFByb21pc2U8Q29sbGVjdGlvbkluZGV4PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIExvYWQgZnJvbSBtZW1vcnkgY2FjaGUgZmlyc3RcbiAgICAgIGlmICghdGhpcy5jYWNoZWRJbmRleCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRGcm9tRGlzaygpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgcmV0dXJuIHN0YWxlIGNhY2hlIHdoaWxlIHJlZnJlc2hpbmdcbiAgICAgIGNvbnN0IHNob3VsZFJlZnJlc2ggPSB0aGlzLnNob3VsZFJlZnJlc2hDYWNoZSgpO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5jYWNoZWRJbmRleCAmJiAhdGhpcy5pc0NhY2hlRXhwaXJlZCgpKSB7XG4gICAgICAgIC8vIENhY2hlIGlzIHZhbGlkLCByZXR1cm4gaW1tZWRpYXRlbHlcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdSZXR1cm5pbmcgdmFsaWQgY2FjaGVkIGNvbGxlY3Rpb24gaW5kZXgnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFN0YXJ0IGJhY2tncm91bmQgcmVmcmVzaCBpZiBuZWVkZWQgYnV0IG5vdCBhbHJlYWR5IHJ1bm5pbmdcbiAgICAgICAgaWYgKHNob3VsZFJlZnJlc2ggJiYgIXRoaXMuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEJhY2tncm91bmRSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEluZGV4LmRhdGE7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIHdlIGhhdmUgc3RhbGUgY2FjaGUsIHJldHVybiBpdCB3aGlsZSByZWZyZXNoaW5nIGluIGJhY2tncm91bmRcbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4ICYmIHRoaXMuaXNDYWNoZUV4cGlyZWQoKSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1JldHVybmluZyBzdGFsZSBjYWNoZSB3aGlsZSByZWZyZXNoaW5nIGluIGJhY2tncm91bmQnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFN0YXJ0IGJhY2tncm91bmQgcmVmcmVzaCBpZiBub3QgYWxyZWFkeSBydW5uaW5nXG4gICAgICAgIGlmICghdGhpcy5pc1JlZnJlc2hpbmcpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0QmFja2dyb3VuZFJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXguZGF0YTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTm8gY2FjaGUgYXZhaWxhYmxlLCBtdXN0IGZldGNoIHN5bmNocm9ub3VzbHlcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTm8gY2FjaGUgYXZhaWxhYmxlLCBmZXRjaGluZyBjb2xsZWN0aW9uIGluZGV4IHN5bmNocm9ub3VzbHknKTtcbiAgICAgIGNvbnN0IGZyZXNoSW5kZXggPSBhd2FpdCB0aGlzLmZldGNoV2l0aFJldHJ5KCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNhY2hlKGZyZXNoSW5kZXgpO1xuICAgICAgcmV0dXJuIGZyZXNoSW5kZXguZGF0YTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgY29sbGVjdGlvbiBpbmRleCcsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIFxuICAgICAgLy8gSWYgd2UgaGF2ZSBhbnkgY2FjaGVkIGRhdGEgKGV2ZW4gZXhwaXJlZCksIHJldHVybiBpdCBhcyBsYXN0IHJlc29ydFxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1JldHVybmluZyBleHBpcmVkIGNhY2hlIGFzIGxhc3QgcmVzb3J0Jyk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEluZGV4LmRhdGE7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sbGVjdGlvbiBpbmRleCBub3QgYXZhaWxhYmxlOiAke3RoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JjZSByZWZyZXNoIHRoZSBjb2xsZWN0aW9uIGluZGV4XG4gICAqL1xuICBhc3luYyBmb3JjZVJlZnJlc2goKTogUHJvbWlzZTxDb2xsZWN0aW9uSW5kZXg+IHtcbiAgICBsb2dnZXIuZGVidWcoJ0ZvcmNlIHJlZnJlc2hpbmcgY29sbGVjdGlvbiBpbmRleCcpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmcmVzaEluZGV4ID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhSZXRyeSgpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVDYWNoZShmcmVzaEluZGV4KTtcbiAgICAgIHJldHVybiBmcmVzaEluZGV4LmRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRm9yY2UgcmVmcmVzaCBmYWlsZWQnLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICBcbiAgICAgIC8vIElmIHdlIGhhdmUgY2FjaGVkIGRhdGEsIHJldHVybiBpdFxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ZvcmNlIHJlZnJlc2ggZmFpbGVkLCByZXR1cm5pbmcgY2FjaGVkIGRhdGEnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXguZGF0YTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY2FjaGUgc2hvdWxkIGJlIHJlZnJlc2hlZCAod2l0aGluIFRUTCBidXQgZ2V0dGluZyBjbG9zZSB0byBleHBpcnkpXG4gICAqL1xuICBwcml2YXRlIHNob3VsZFJlZnJlc2hDYWNoZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkSW5kZXgpIHJldHVybiB0cnVlO1xuICAgIFxuICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSB0aGlzLmNhY2hlZEluZGV4LnRpbWVzdGFtcDtcbiAgICBjb25zdCByZWZyZXNoVGhyZXNob2xkID0gdGhpcy5UVExfTVMgKiB0aGlzLlJFRlJFU0hfVEhSRVNIT0xEO1xuICAgIFxuICAgIHJldHVybiBhZ2UgPiByZWZyZXNoVGhyZXNob2xkO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY2FjaGUgaXMgZXhwaXJlZFxuICAgKi9cbiAgcHJpdmF0ZSBpc0NhY2hlRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkSW5kZXgpIHJldHVybiB0cnVlO1xuICAgIFxuICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSB0aGlzLmNhY2hlZEluZGV4LnRpbWVzdGFtcDtcbiAgICByZXR1cm4gYWdlID4gdGhpcy5UVExfTVM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTdGFydCBiYWNrZ3JvdW5kIHJlZnJlc2ggd2l0aG91dCBibG9ja2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGFydEJhY2tncm91bmRSZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmVmcmVzaGluZykge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdCYWNrZ3JvdW5kIHJlZnJlc2ggYWxyZWFkeSBpbiBwcm9ncmVzcycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBjaXJjdWl0IGJyZWFrZXJcbiAgICBpZiAodGhpcy5pc0NpcmN1aXRCcmVha2VyT3BlbigpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NpcmN1aXQgYnJlYWtlciBvcGVuLCBza2lwcGluZyBiYWNrZ3JvdW5kIHJlZnJlc2gnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5pc1JlZnJlc2hpbmcgPSB0cnVlO1xuICAgIFxuICAgIHRoaXMuYmFja2dyb3VuZFJlZnJlc2hQcm9taXNlID0gdGhpcy5wZXJmb3JtQmFja2dyb3VuZFJlZnJlc2goKVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdCYWNrZ3JvdW5kIHJlZnJlc2ggZmFpbGVkJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgICB0aGlzLnJlY29yZENpcmN1aXRCcmVha2VyRmFpbHVyZSgpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kUmVmcmVzaFByb21pc2UgPSBudWxsO1xuICAgICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBQZXJmb3JtIGJhY2tncm91bmQgcmVmcmVzaFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtQmFja2dyb3VuZFJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKCdTdGFydGluZyBiYWNrZ3JvdW5kIHJlZnJlc2ggb2YgY29sbGVjdGlvbiBpbmRleCcpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmcmVzaEluZGV4ID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhSZXRyeSgpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVDYWNoZShmcmVzaEluZGV4KTtcbiAgICAgIFxuICAgICAgLy8gUmVzZXQgY2lyY3VpdCBicmVha2VyIG9uIHN1Y2Nlc3NcbiAgICAgIHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyA9IDA7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQmFja2dyb3VuZCByZWZyZXNoIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdCYWNrZ3JvdW5kIHJlZnJlc2ggZmFpbGVkJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRmV0Y2ggY29sbGVjdGlvbiBpbmRleCB3aXRoIHJldHJ5IGxvZ2ljIGFuZCBleHBvbmVudGlhbCBiYWNrb2ZmXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoV2l0aFJldHJ5KCk6IFByb21pc2U8eyBkYXRhOiBDb2xsZWN0aW9uSW5kZXg7IGV0YWc/OiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IHN0cmluZyB9PiB7XG4gICAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCBudWxsID0gbnVsbDtcbiAgICBcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSB0aGlzLk1BWF9SRVRSSUVTOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChhdHRlbXB0ID4gMCkge1xuICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5jYWxjdWxhdGVSZXRyeURlbGF5KGF0dGVtcHQpO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmV0cnlpbmcgZmV0Y2ggaW4gJHtkZWxheX1tcyAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke3RoaXMuTUFYX1JFVFJJRVMgKyAxfSlgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNsZWVwKGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmV0Y2hDb2xsZWN0aW9uSW5kZXgoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGZXRjaCBhdHRlbXB0ICR7YXR0ZW1wdCArIDF9IGZhaWxlZGAsIHsgXG4gICAgICAgICAgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGxhc3RFcnJvciksXG4gICAgICAgICAgd2lsbFJldHJ5OiBhdHRlbXB0IDwgdGhpcy5NQVhfUkVUUklFU1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcignQWxsIGZldGNoIGF0dGVtcHRzIGZhaWxlZCcpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2FsY3VsYXRlIHJldHJ5IGRlbGF5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZiBhbmQgaml0dGVyXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZVJldHJ5RGVsYXkoYXR0ZW1wdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmOiBiYXNlRGVsYXkgKiAoMiBeIGF0dGVtcHQpXG4gICAgY29uc3QgZXhwb25lbnRpYWxEZWxheSA9IHRoaXMuQkFTRV9SRVRSWV9ERUxBWV9NUyAqIE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKTtcbiAgICBcbiAgICAvLyBDYXAgYXQgbWF4aW11bSBkZWxheVxuICAgIGNvbnN0IGNhcHBlZERlbGF5ID0gTWF0aC5taW4oZXhwb25lbnRpYWxEZWxheSwgdGhpcy5NQVhfUkVUUllfREVMQVlfTVMpO1xuICAgIFxuICAgIC8vIEFkZCBqaXR0ZXIgdG8gcHJldmVudCB0aHVuZGVyaW5nIGhlcmRcbiAgICByZXR1cm4gdGhpcy5hZGRKaXR0ZXIoY2FwcGVkRGVsYXkpO1xuICB9XG4gIFxuICAvKipcbiAgICogQWRkIGppdHRlciAowrEyNSUgcmFuZG9tbmVzcykgdG8gYSBkZWxheSB0byBwcmV2ZW50IHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRKaXR0ZXIoZGVsYXk6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgaml0dGVyID0gZGVsYXkgKiB0aGlzLkpJVFRFUl9GQUNUT1IgKiAoTWF0aC5yYW5kb20oKSAtIDAuNSk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIGRlbGF5ICsgaml0dGVyKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIGNvbGxlY3Rpb24gaW5kZXggZnJvbSBHaXRIdWJcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hDb2xsZWN0aW9uSW5kZXgoKTogUHJvbWlzZTx7IGRhdGE6IENvbGxlY3Rpb25JbmRleDsgZXRhZz86IHN0cmluZzsgbGFzdE1vZGlmaWVkPzogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aGlzLkZFVENIX1RJTUVPVVRfTVMpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBCdWlsZCBoZWFkZXJzIGZvciBjb25kaXRpb25hbCByZXF1ZXN0c1xuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ1VzZXItQWdlbnQnOiAnRG9sbGhvdXNlTUNQLzEuMCcsXG4gICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJ1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gQWRkIGNvbmRpdGlvbmFsIGhlYWRlcnMgaWYgd2UgaGF2ZSBjYWNoZWQgZGF0YVxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXg/LmV0YWcpIHtcbiAgICAgICAgaGVhZGVyc1snSWYtTm9uZS1NYXRjaCddID0gdGhpcy5jYWNoZWRJbmRleC5ldGFnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXg/Lmxhc3RNb2RpZmllZCkge1xuICAgICAgICBoZWFkZXJzWydJZi1Nb2RpZmllZC1TaW5jZSddID0gdGhpcy5jYWNoZWRJbmRleC5sYXN0TW9kaWZpZWQ7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRmV0Y2hpbmcgY29sbGVjdGlvbiBpbmRleCcsIHsgXG4gICAgICAgIHVybDogdGhpcy5JTkRFWF9VUkwsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuRkVUQ0hfVElNRU9VVF9NUyxcbiAgICAgICAgaGFzRXRhZzogISF0aGlzLmNhY2hlZEluZGV4Py5ldGFnXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLklOREVYX1VSTCwge1xuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSAzMDQgTm90IE1vZGlmaWVkXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAzMDQgJiYgdGhpcy5jYWNoZWRJbmRleCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggbm90IG1vZGlmaWVkICgzMDQpLCB1cGRhdGluZyBjYWNoZSB0aW1lc3RhbXAnKTtcbiAgICAgICAgdGhpcy5jYWNoZWRJbmRleC50aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVUb0Rpc2soKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB0aGlzLmNhY2hlZEluZGV4LmRhdGEsXG4gICAgICAgICAgZXRhZzogdGhpcy5jYWNoZWRJbmRleC5ldGFnLFxuICAgICAgICAgIGxhc3RNb2RpZmllZDogdGhpcy5jYWNoZWRJbmRleC5sYXN0TW9kaWZpZWRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDb2xsZWN0aW9uSW5kZXg7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBpbmRleCBzdHJ1Y3R1cmVcbiAgICAgIHRoaXMudmFsaWRhdGVJbmRleFN0cnVjdHVyZShpbmRleERhdGEpO1xuICAgICAgXG4gICAgICBjb25zdCBldGFnID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2V0YWcnKSB8fCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnbGFzdC1tb2RpZmllZCcpIHx8IHVuZGVmaW5lZDtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGZldGNoZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgICB0b3RhbEVsZW1lbnRzOiBpbmRleERhdGEudG90YWxfZWxlbWVudHMsXG4gICAgICAgIHZlcnNpb246IGluZGV4RGF0YS52ZXJzaW9uLFxuICAgICAgICBoYXNFdGFnOiAhIWV0YWdcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4geyBkYXRhOiBpbmRleERhdGEsIGV0YWcsIGxhc3RNb2RpZmllZCB9O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGZXRjaCB0aW1lb3V0IGFmdGVyICR7dGhpcy5GRVRDSF9USU1FT1VUX01TfW1zYCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFZhbGlkYXRlIGNvbGxlY3Rpb24gaW5kZXggc3RydWN0dXJlXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlSW5kZXhTdHJ1Y3R1cmUoaW5kZXg6IGFueSk6IGFzc2VydHMgaW5kZXggaXMgQ29sbGVjdGlvbkluZGV4IHtcbiAgICBpZiAoIWluZGV4IHx8IHR5cGVvZiBpbmRleCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleDogbm90IGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIGluZGV4LnZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG1pc3Npbmcgb3IgaW52YWxpZCB2ZXJzaW9uJyk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0eXBlb2YgaW5kZXguZ2VuZXJhdGVkICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgZ2VuZXJhdGVkIHRpbWVzdGFtcCcpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIGluZGV4LnRvdGFsX2VsZW1lbnRzICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgdG90YWxfZWxlbWVudHMnKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFpbmRleC5pbmRleCB8fCB0eXBlb2YgaW5kZXguaW5kZXggIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG1pc3Npbmcgb3IgaW52YWxpZCBpbmRleCBvYmplY3QnKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFpbmRleC5tZXRhZGF0YSB8fCB0eXBlb2YgaW5kZXgubWV0YWRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG1pc3Npbmcgb3IgaW52YWxpZCBtZXRhZGF0YScpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSBjYWNoZSB3aXRoIG5ldyBkYXRhXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUNhY2hlKGZldGNoUmVzdWx0OiB7IGRhdGE6IENvbGxlY3Rpb25JbmRleDsgZXRhZz86IHN0cmluZzsgbGFzdE1vZGlmaWVkPzogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGVja3N1bSA9IHRoaXMuY2FsY3VsYXRlQ2hlY2tzdW0oZmV0Y2hSZXN1bHQuZGF0YSk7XG4gICAgXG4gICAgdGhpcy5jYWNoZWRJbmRleCA9IHtcbiAgICAgIGRhdGE6IGZldGNoUmVzdWx0LmRhdGEsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBldGFnOiBmZXRjaFJlc3VsdC5ldGFnLFxuICAgICAgbGFzdE1vZGlmaWVkOiBmZXRjaFJlc3VsdC5sYXN0TW9kaWZpZWQsXG4gICAgICB2ZXJzaW9uOiBmZXRjaFJlc3VsdC5kYXRhLnZlcnNpb24sXG4gICAgICBjaGVja3N1bVxuICAgIH07XG4gICAgXG4gICAgYXdhaXQgdGhpcy5zYXZlVG9EaXNrKCk7XG4gICAgXG4gICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGNhY2hlIHVwZGF0ZWQnLCB7XG4gICAgICB2ZXJzaW9uOiBmZXRjaFJlc3VsdC5kYXRhLnZlcnNpb24sXG4gICAgICB0b3RhbEVsZW1lbnRzOiBmZXRjaFJlc3VsdC5kYXRhLnRvdGFsX2VsZW1lbnRzLFxuICAgICAgY2hlY2tzdW1cbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBjaGVja3N1bSBmb3IgZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUNoZWNrc3VtKGRhdGE6IENvbGxlY3Rpb25JbmRleCk6IHN0cmluZyB7XG4gICAgLy8gU2ltcGxlIGNoZWNrc3VtIGJhc2VkIG9uIGtleSBwcm9wZXJ0aWVzXG4gICAgY29uc3QgY2hlY2tzdW1EYXRhID0ge1xuICAgICAgdmVyc2lvbjogZGF0YS52ZXJzaW9uLFxuICAgICAgZ2VuZXJhdGVkOiBkYXRhLmdlbmVyYXRlZCxcbiAgICAgIHRvdGFsX2VsZW1lbnRzOiBkYXRhLnRvdGFsX2VsZW1lbnRzXG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY2hlY2tzdW1EYXRhKSkudG9TdHJpbmcoJ2Jhc2U2NCcpLnN1YnN0cmluZygwLCB0aGlzLkNIRUNLU1VNX0xFTkdUSCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGNhY2hlIGZyb20gZGlza1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRnJvbURpc2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLkNBQ0hFX0ZJTEUsICd1dGY4Jyk7XG4gICAgICBjb25zdCBjYWNoZWQgPSBKU09OLnBhcnNlKGRhdGEpIGFzIENvbGxlY3Rpb25JbmRleENhY2hlRW50cnk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGNhY2hlIHN0cnVjdHVyZVxuICAgICAgaWYgKCFjYWNoZWQuZGF0YSB8fCAhY2FjaGVkLnRpbWVzdGFtcCB8fCAhY2FjaGVkLnZlcnNpb24pIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdJbnZhbGlkIGNhY2hlIHN0cnVjdHVyZSwgaWdub3JpbmcnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBWZXJpZnkgY2hlY2tzdW0gaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoY2FjaGVkLmNoZWNrc3VtKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkQ2hlY2tzdW0gPSB0aGlzLmNhbGN1bGF0ZUNoZWNrc3VtKGNhY2hlZC5kYXRhKTtcbiAgICAgICAgaWYgKGNhY2hlZC5jaGVja3N1bSAhPT0gZXhwZWN0ZWRDaGVja3N1bSkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnQ2FjaGUgY2hlY2tzdW0gbWlzbWF0Y2gsIGlnbm9yaW5nIGNhY2hlZCBkYXRhJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRoaXMuY2FjaGVkSW5kZXggPSBjYWNoZWQ7XG4gICAgICBcbiAgICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSBjYWNoZWQudGltZXN0YW1wO1xuICAgICAgY29uc3QgaXNFeHBpcmVkID0gYWdlID4gdGhpcy5UVExfTVM7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTG9hZGVkIGNvbGxlY3Rpb24gaW5kZXggZnJvbSBkaXNrIGNhY2hlJywge1xuICAgICAgICB2ZXJzaW9uOiBjYWNoZWQudmVyc2lvbixcbiAgICAgICAgYWdlOiBNYXRoLnJvdW5kKGFnZSAvIDEwMDApLFxuICAgICAgICBpc0V4cGlyZWQsXG4gICAgICAgIHRvdGFsRWxlbWVudHM6IGNhY2hlZC5kYXRhLnRvdGFsX2VsZW1lbnRzXG4gICAgICB9KTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gbG9hZCBjYWNoZSBmcm9tIGRpc2snLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU2F2ZSBjYWNoZSB0byBkaXNrXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNhdmVUb0Rpc2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhY2hlZEluZGV4KSByZXR1cm47XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSBjYWNoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUodGhpcy5DQUNIRV9GSUxFKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FjaGVkSW5kZXgsIG51bGwsIHRoaXMuSlNPTl9JTkRFTlQpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMuQ0FDSEVfRklMRSwgY2FjaGVEYXRhLCAndXRmOCcpO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggY2FjaGUgc2F2ZWQgdG8gZGlzaycpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBzYXZlIGNhY2hlIHRvIGRpc2snLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICAvLyBEb24ndCB0aHJvdyAtIGNhY2hlIHBlcnNpc3RlbmNlIGZhaWx1cmVzIHNob3VsZG4ndCBicmVhayBmdW5jdGlvbmFsaXR5XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2lyY3VpdCBicmVha2VyIGxvZ2ljXG4gICAqL1xuICBwcml2YXRlIGlzQ2lyY3VpdEJyZWFrZXJPcGVuKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPCB0aGlzLkNJUkNVSVRfQlJFQUtFUl9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgdGltZVNpbmNlTGFzdEZhaWx1cmUgPSBEYXRlLm5vdygpIC0gdGhpcy5jaXJjdWl0QnJlYWtlckxhc3RGYWlsdXJlO1xuICAgIHJldHVybiB0aW1lU2luY2VMYXN0RmFpbHVyZSA8IHRoaXMuQ0lSQ1VJVF9CUkVBS0VSX1RJTUVPVVRfTVM7XG4gIH1cbiAgXG4gIHByaXZhdGUgcmVjb3JkQ2lyY3VpdEJyZWFrZXJGYWlsdXJlKCk6IHZvaWQge1xuICAgIHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcysrO1xuICAgIHRoaXMuY2lyY3VpdEJyZWFrZXJMYXN0RmFpbHVyZSA9IERhdGUubm93KCk7XG4gICAgXG4gICAgaWYgKHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyA+PSB0aGlzLkNJUkNVSVRfQlJFQUtFUl9USFJFU0hPTEQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDaXJjdWl0IGJyZWFrZXIgb3BlbmVkIGR1ZSB0byByZXBlYXRlZCBmYWlsdXJlcycsIHtcbiAgICAgICAgZmFpbHVyZXM6IHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyxcbiAgICAgICAgdGltZW91dE1zOiB0aGlzLkNJUkNVSVRfQlJFQUtFUl9USU1FT1VUX01TXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVdGlsaXR5IG1ldGhvZHNcbiAgICovXG4gIHByaXZhdGUgc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IubWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhlcnJvcik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgc3RhdGlzdGljcyBmb3IgbW9uaXRvcmluZ1xuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7XG4gICAgaXNWYWxpZDogYm9vbGVhbjtcbiAgICBhZ2U6IG51bWJlcjtcbiAgICBoYXNDYWNoZTogYm9vbGVhbjtcbiAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICAgIHRvdGFsRWxlbWVudHM/OiBudW1iZXI7XG4gICAgaXNSZWZyZXNoaW5nOiBib29sZWFuO1xuICAgIGNpcmN1aXRCcmVha2VyRmFpbHVyZXM6IG51bWJlcjtcbiAgICBjaXJjdWl0QnJlYWtlck9wZW46IGJvb2xlYW47XG4gIH0ge1xuICAgIGlmICghdGhpcy5jYWNoZWRJbmRleCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIGFnZTogMCxcbiAgICAgICAgaGFzQ2FjaGU6IGZhbHNlLFxuICAgICAgICBpc1JlZnJlc2hpbmc6IHRoaXMuaXNSZWZyZXNoaW5nLFxuICAgICAgICBjaXJjdWl0QnJlYWtlckZhaWx1cmVzOiB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMsXG4gICAgICAgIGNpcmN1aXRCcmVha2VyT3BlbjogdGhpcy5pc0NpcmN1aXRCcmVha2VyT3BlbigpXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5jYWNoZWRJbmRleC50aW1lc3RhbXA7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6ICF0aGlzLmlzQ2FjaGVFeHBpcmVkKCksXG4gICAgICBhZ2U6IE1hdGgucm91bmQoYWdlIC8gMTAwMCksIC8vIGFnZSBpbiBzZWNvbmRzXG4gICAgICBoYXNDYWNoZTogdHJ1ZSxcbiAgICAgIHZlcnNpb246IHRoaXMuY2FjaGVkSW5kZXgudmVyc2lvbixcbiAgICAgIHRvdGFsRWxlbWVudHM6IHRoaXMuY2FjaGVkSW5kZXguZGF0YS50b3RhbF9lbGVtZW50cyxcbiAgICAgIGlzUmVmcmVzaGluZzogdGhpcy5pc1JlZnJlc2hpbmcsXG4gICAgICBjaXJjdWl0QnJlYWtlckZhaWx1cmVzOiB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMsXG4gICAgICBjaXJjdWl0QnJlYWtlck9wZW46IHRoaXMuaXNDaXJjdWl0QnJlYWtlck9wZW4oKVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgY2FjaGUgZGF0YVxuICAgKi9cbiAgYXN5bmMgY2xlYXJDYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNhY2hlZEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPSAwO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy51bmxpbmsodGhpcy5DQUNIRV9GSUxFKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBpbmRleCBjYWNoZSBmaWxlIGRlbGV0ZWQnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGRlbGV0ZSBjYWNoZSBmaWxlJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFdhaXQgZm9yIGFueSBvbmdvaW5nIGJhY2tncm91bmQgcmVmcmVzaCB0byBjb21wbGV0ZVxuICAgKi9cbiAgYXN5bmMgd2FpdEZvckJhY2tncm91bmRSZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmJhY2tncm91bmRSZWZyZXNoUHJvbWlzZSkge1xuICAgICAgYXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVmcmVzaFByb21pc2U7XG4gICAgfVxuICB9XG59Il19
|
|
501
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkluZGV4TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25JbmRleE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQW9CNUMsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxvRUFBb0U7SUFDcEUsaUhBQWlIO0lBQ2hHLFNBQVMsR0FBRyxpRUFBaUUsQ0FBQztJQUM5RSxNQUFNLENBQVM7SUFDZixnQkFBZ0IsQ0FBUztJQUN6QixXQUFXLENBQVM7SUFDcEIsbUJBQW1CLENBQVM7SUFDNUIsa0JBQWtCLENBQVM7SUFDM0IsVUFBVSxDQUFTO0lBRTVCLFdBQVcsR0FBcUMsSUFBSSxDQUFDO0lBQ3JELHdCQUF3QixHQUF5QixJQUFJLENBQUM7SUFDdEQsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUNyQixzQkFBc0IsR0FBRyxDQUFDLENBQUM7SUFDM0IseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLHlCQUF5QixHQUFHLENBQUMsQ0FBQztJQUM5QiwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7SUFDeEQsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUMscUNBQXFDO0lBQzlELGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyw2QkFBNkI7SUFFcEUsa0NBQWtDO0lBQ2pCLGNBQWMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFNBQVM7SUFDMUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hC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Q0FBQztZQUN0RixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyx3QkFBd0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb2xsZWN0aW9uIEluZGV4IE1hbmFnZXIgd2l0aCBCYWNrZ3JvdW5kIFJlZnJlc2ggYW5kIFJvYnVzdCBDYWNoaW5nXG4gKiBcbiAqIFRoaXMgbWFuYWdlciBpbXBsZW1lbnRzOlxuICogLSAxLWhvdXIgVFRMIHdpdGggbG9jYWwgZmlsZSBjYWNoaW5nXG4gKiAtIEJhY2tncm91bmQgcmVmcmVzaCB3aXRob3V0IGJsb2NraW5nIG9wZXJhdGlvbnNcbiAqIC0gRXhwb25lbnRpYWwgYmFja29mZiByZXRyeSBsb2dpY1xuICogLSBDb25maWd1cmFibGUgdGltZW91dHMgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICogLSBSZXR1cm4gc3RhbGUgY2FjaGUgd2hpbGUgcmVmcmVzaGluZyBpbiBiYWNrZ3JvdW5kXG4gKiAtIENvbXByZWhlbnNpdmUgZXJyb3IgaGFuZGxpbmcgZm9yIHByb2R1Y3Rpb24gdXNlXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCB7IENvbGxlY3Rpb25JbmRleCB9IGZyb20gJy4uL3R5cGVzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uSW5kZXhDYWNoZUVudHJ5IHtcbiAgZGF0YTogQ29sbGVjdGlvbkluZGV4O1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgZXRhZz86IHN0cmluZztcbiAgbGFzdE1vZGlmaWVkPzogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNoZWNrc3VtOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkluZGV4TWFuYWdlckNvbmZpZyB7XG4gIHR0bE1zPzogbnVtYmVyO1xuICBmZXRjaFRpbWVvdXRNcz86IG51bWJlcjtcbiAgbWF4UmV0cmllcz86IG51bWJlcjtcbiAgYmFzZVJldHJ5RGVsYXlNcz86IG51bWJlcjtcbiAgbWF4UmV0cnlEZWxheU1zPzogbnVtYmVyO1xuICBjYWNoZURpcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25JbmRleE1hbmFnZXIge1xuICAvLyBVc2UgR2l0SHViIFBhZ2VzIGluZGV4IHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBieSB3b3JrZmxvd1xuICAvLyBPbGQgVVJMIHdhcyBzdGFsZTogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL21haW4vcHVibGljL2NvbGxlY3Rpb24taW5kZXguanNvblxuICBwcml2YXRlIHJlYWRvbmx5IElOREVYX1VSTCA9ICdodHRwczovL2RvbGxob3VzZW1jcC5naXRodWIuaW8vY29sbGVjdGlvbi9jb2xsZWN0aW9uLWluZGV4Lmpzb24nO1xuICBwcml2YXRlIHJlYWRvbmx5IFRUTF9NUzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IEZFVENIX1RJTUVPVVRfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfUkVUUklFUzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IEJBU0VfUkVUUllfREVMQVlfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfUkVUUllfREVMQVlfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBDQUNIRV9GSUxFOiBzdHJpbmc7XG4gIFxuICBwcml2YXRlIGNhY2hlZEluZGV4OiBDb2xsZWN0aW9uSW5kZXhDYWNoZUVudHJ5IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYmFja2dyb3VuZFJlZnJlc2hQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyA9IDA7XG4gIHByaXZhdGUgY2lyY3VpdEJyZWFrZXJMYXN0RmFpbHVyZSA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0lSQ1VJVF9CUkVBS0VSX1RIUkVTSE9MRCA9IDU7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0lSQ1VJVF9CUkVBS0VSX1RJTUVPVVRfTVMgPSA1ICogNjAgKiAxMDAwOyAvLyA1IG1pbnV0ZXNcbiAgcHJpdmF0ZSByZWFkb25seSBSRUZSRVNIX1RIUkVTSE9MRCA9IDAuODsgLy8gUmVmcmVzaCB3aGVuIDgwJSBvZiBUVEwgaGFzIHBhc3NlZFxuICBwcml2YXRlIHJlYWRvbmx5IEpJVFRFUl9GQUNUT1IgPSAwLjI1OyAvLyDCsTI1JSByYW5kb21uZXNzIGZvciBqaXR0ZXJcbiAgXG4gIC8vIERlZmF1bHQgY29uZmlndXJhdGlvbiBjb25zdGFudHNcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1RUTF9NUyA9IDYwICogNjAgKiAxMDAwOyAvLyAxIGhvdXJcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX01BWF9SRVRSSUVTID0gMztcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0JBU0VfUkVUUllfREVMQVlfTVMgPSAxMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTUFYX1JFVFJZX0RFTEFZX01TID0gMzAwMDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9GRVRDSF9USU1FT1VUX01TID0gNTAwMDsgLy8gNSBzZWNvbmRzXG4gIHByaXZhdGUgcmVhZG9ubHkgQ0hFQ0tTVU1fTEVOR1RIID0gODtcbiAgcHJpdmF0ZSByZWFkb25seSBKU09OX0lOREVOVCA9IDI7XG4gIFxuICBjb25zdHJ1Y3Rvcihjb25maWc6IENvbGxlY3Rpb25JbmRleE1hbmFnZXJDb25maWcgPSB7fSkge1xuICAgIC8vIENvbmZpZ3VyYXRpb24gd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZXNcbiAgICB0aGlzLlRUTF9NUyA9IGNvbmZpZy50dGxNcyB8fCB0aGlzLkRFRkFVTFRfVFRMX01TO1xuICAgIHRoaXMuRkVUQ0hfVElNRU9VVF9NUyA9IHRoaXMucGFyc2VGZXRjaFRpbWVvdXQoY29uZmlnLmZldGNoVGltZW91dE1zKTtcbiAgICB0aGlzLk1BWF9SRVRSSUVTID0gY29uZmlnLm1heFJldHJpZXMgfHwgdGhpcy5ERUZBVUxUX01BWF9SRVRSSUVTO1xuICAgIHRoaXMuQkFTRV9SRVRSWV9ERUxBWV9NUyA9IGNvbmZpZy5iYXNlUmV0cnlEZWxheU1zIHx8IHRoaXMuREVGQVVMVF9CQVNFX1JFVFJZX0RFTEFZX01TO1xuICAgIHRoaXMuTUFYX1JFVFJZX0RFTEFZX01TID0gY29uZmlnLm1heFJldHJ5RGVsYXlNcyB8fCB0aGlzLkRFRkFVTFRfTUFYX1JFVFJZX0RFTEFZX01TO1xuICAgIFxuICAgIC8vIENhY2hlIGRpcmVjdG9yeSAtIHVzZSB+Ly5kb2xsaG91c2UvY2FjaGUvY29sbGVjdGlvbi1pbmRleC5qc29uIGFzIHNwZWNpZmllZFxuICAgIGNvbnN0IGNhY2hlRGlyID0gY29uZmlnLmNhY2hlRGlyIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ2NhY2hlJyk7XG4gICAgdGhpcy5DQUNIRV9GSUxFID0gcGF0aC5qb2luKGNhY2hlRGlyLCAnY29sbGVjdGlvbi1pbmRleC5qc29uJyk7XG4gICAgXG4gICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyIGluaXRpYWxpemVkJywge1xuICAgICAgdHRsTXM6IHRoaXMuVFRMX01TLFxuICAgICAgZmV0Y2hUaW1lb3V0TXM6IHRoaXMuRkVUQ0hfVElNRU9VVF9NUyxcbiAgICAgIGNhY2hlRmlsZTogdGhpcy5DQUNIRV9GSUxFLFxuICAgICAgbWF4UmV0cmllczogdGhpcy5NQVhfUkVUUklFU1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogUGFyc2UgZmV0Y2ggdGltZW91dCBmcm9tIGNvbmZpZyBvciBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZUZldGNoVGltZW91dChjb25maWdWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gQ2hlY2sgZW52aXJvbm1lbnQgdmFyaWFibGUgZmlyc3RcbiAgICBjb25zdCBlbnZUaW1lb3V0ID0gcHJvY2Vzcy5lbnYuQ09MTEVDVElPTl9GRVRDSF9USU1FT1VUO1xuICAgIGlmIChlbnZUaW1lb3V0KSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIucGFyc2VJbnQoZW52VGltZW91dCwgMTApO1xuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4ocGFyc2VkKSAmJiBwYXJzZWQgPiAwKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgVXNpbmcgQ09MTEVDVElPTl9GRVRDSF9USU1FT1VUIGZyb20gZW52aXJvbm1lbnQ6ICR7cGFyc2VkfW1zYCk7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9XG4gICAgICBsb2dnZXIud2FybihgSW52YWxpZCBDT0xMRUNUSU9OX0ZFVENIX1RJTUVPVVQgdmFsdWU6ICR7ZW52VGltZW91dH0sIHVzaW5nIGRlZmF1bHRgKTtcbiAgICB9XG4gICAgXG4gICAgLy8gRmFsbCBiYWNrIHRvIGNvbmZpZyB2YWx1ZSBvciBkZWZhdWx0XG4gICAgcmV0dXJuIGNvbmZpZ1ZhbHVlIHx8IHRoaXMuREVGQVVMVF9GRVRDSF9USU1FT1VUX01TO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGNvbGxlY3Rpb24gaW5kZXggd2l0aCBzdGFsZS13aGlsZS1yZXZhbGlkYXRlIHBhdHRlcm5cbiAgICogUmV0dXJucyBjYWNoZWQgZGF0YSBpbW1lZGlhdGVseSBpZiBhdmFpbGFibGUsIHJlZnJlc2hlcyBpbiBiYWNrZ3JvdW5kXG4gICAqL1xuICBhc3luYyBnZXRJbmRleCgpOiBQcm9taXNlPENvbGxlY3Rpb25JbmRleD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBMb2FkIGZyb20gbWVtb3J5IGNhY2hlIGZpcnN0XG4gICAgICBpZiAoIXRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkRnJvbURpc2soKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIHJldHVybiBzdGFsZSBjYWNoZSB3aGlsZSByZWZyZXNoaW5nXG4gICAgICBjb25zdCBzaG91bGRSZWZyZXNoID0gdGhpcy5zaG91bGRSZWZyZXNoQ2FjaGUoKTtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXggJiYgIXRoaXMuaXNDYWNoZUV4cGlyZWQoKSkge1xuICAgICAgICAvLyBDYWNoZSBpcyB2YWxpZCwgcmV0dXJuIGltbWVkaWF0ZWx5XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnUmV0dXJuaW5nIHZhbGlkIGNhY2hlZCBjb2xsZWN0aW9uIGluZGV4Jyk7XG4gICAgICAgIFxuICAgICAgICAvLyBTdGFydCBiYWNrZ3JvdW5kIHJlZnJlc2ggaWYgbmVlZGVkIGJ1dCBub3QgYWxyZWFkeSBydW5uaW5nXG4gICAgICAgIGlmIChzaG91bGRSZWZyZXNoICYmICF0aGlzLmlzUmVmcmVzaGluZykge1xuICAgICAgICAgIHRoaXMuc3RhcnRCYWNrZ3JvdW5kUmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRJbmRleC5kYXRhO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiB3ZSBoYXZlIHN0YWxlIGNhY2hlLCByZXR1cm4gaXQgd2hpbGUgcmVmcmVzaGluZyBpbiBiYWNrZ3JvdW5kXG4gICAgICBpZiAodGhpcy5jYWNoZWRJbmRleCAmJiB0aGlzLmlzQ2FjaGVFeHBpcmVkKCkpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdSZXR1cm5pbmcgc3RhbGUgY2FjaGUgd2hpbGUgcmVmcmVzaGluZyBpbiBiYWNrZ3JvdW5kJyk7XG4gICAgICAgIFxuICAgICAgICAvLyBTdGFydCBiYWNrZ3JvdW5kIHJlZnJlc2ggaWYgbm90IGFscmVhZHkgcnVubmluZ1xuICAgICAgICBpZiAoIXRoaXMuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEJhY2tncm91bmRSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEluZGV4LmRhdGE7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE5vIGNhY2hlIGF2YWlsYWJsZSwgbXVzdCBmZXRjaCBzeW5jaHJvbm91c2x5XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIGNhY2hlIGF2YWlsYWJsZSwgZmV0Y2hpbmcgY29sbGVjdGlvbiBpbmRleCBzeW5jaHJvbm91c2x5Jyk7XG4gICAgICBjb25zdCBmcmVzaEluZGV4ID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhSZXRyeSgpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVDYWNoZShmcmVzaEluZGV4KTtcbiAgICAgIHJldHVybiBmcmVzaEluZGV4LmRhdGE7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGNvbGxlY3Rpb24gaW5kZXgnLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICBcbiAgICAgIC8vIElmIHdlIGhhdmUgYW55IGNhY2hlZCBkYXRhIChldmVuIGV4cGlyZWQpLCByZXR1cm4gaXQgYXMgbGFzdCByZXNvcnRcbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4KSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdSZXR1cm5pbmcgZXhwaXJlZCBjYWNoZSBhcyBsYXN0IHJlc29ydCcpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRJbmRleC5kYXRhO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbGxlY3Rpb24gaW5kZXggbm90IGF2YWlsYWJsZTogJHt0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRm9yY2UgcmVmcmVzaCB0aGUgY29sbGVjdGlvbiBpbmRleFxuICAgKi9cbiAgYXN5bmMgZm9yY2VSZWZyZXNoKCk6IFByb21pc2U8Q29sbGVjdGlvbkluZGV4PiB7XG4gICAgbG9nZ2VyLmRlYnVnKCdGb3JjZSByZWZyZXNoaW5nIGNvbGxlY3Rpb24gaW5kZXgnKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgZnJlc2hJbmRleCA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoUmV0cnkoKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FjaGUoZnJlc2hJbmRleCk7XG4gICAgICByZXR1cm4gZnJlc2hJbmRleC5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZvcmNlIHJlZnJlc2ggZmFpbGVkJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgXG4gICAgICAvLyBJZiB3ZSBoYXZlIGNhY2hlZCBkYXRhLCByZXR1cm4gaXRcbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4KSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdGb3JjZSByZWZyZXNoIGZhaWxlZCwgcmV0dXJuaW5nIGNhY2hlZCBkYXRhJyk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEluZGV4LmRhdGE7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGNhY2hlIHNob3VsZCBiZSByZWZyZXNoZWQgKHdpdGhpbiBUVEwgYnV0IGdldHRpbmcgY2xvc2UgdG8gZXhwaXJ5KVxuICAgKi9cbiAgcHJpdmF0ZSBzaG91bGRSZWZyZXNoQ2FjaGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhY2hlZEluZGV4KSByZXR1cm4gdHJ1ZTtcbiAgICBcbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5jYWNoZWRJbmRleC50aW1lc3RhbXA7XG4gICAgY29uc3QgcmVmcmVzaFRocmVzaG9sZCA9IHRoaXMuVFRMX01TICogdGhpcy5SRUZSRVNIX1RIUkVTSE9MRDtcbiAgICBcbiAgICByZXR1cm4gYWdlID4gcmVmcmVzaFRocmVzaG9sZDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGNhY2hlIGlzIGV4cGlyZWRcbiAgICovXG4gIHByaXZhdGUgaXNDYWNoZUV4cGlyZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhY2hlZEluZGV4KSByZXR1cm4gdHJ1ZTtcbiAgICBcbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5jYWNoZWRJbmRleC50aW1lc3RhbXA7XG4gICAgcmV0dXJuIGFnZSA+IHRoaXMuVFRMX01TO1xuICB9XG4gIFxuICAvKipcbiAgICogU3RhcnQgYmFja2dyb3VuZCByZWZyZXNoIHdpdGhvdXQgYmxvY2tpbmdcbiAgICovXG4gIHByaXZhdGUgc3RhcnRCYWNrZ3JvdW5kUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1JlZnJlc2hpbmcpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQmFja2dyb3VuZCByZWZyZXNoIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgY2lyY3VpdCBicmVha2VyXG4gICAgaWYgKHRoaXMuaXNDaXJjdWl0QnJlYWtlck9wZW4oKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdDaXJjdWl0IGJyZWFrZXIgb3Blbiwgc2tpcHBpbmcgYmFja2dyb3VuZCByZWZyZXNoJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gdHJ1ZTtcbiAgICBcbiAgICB0aGlzLmJhY2tncm91bmRSZWZyZXNoUHJvbWlzZSA9IHRoaXMucGVyZm9ybUJhY2tncm91bmRSZWZyZXNoKClcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQmFja2dyb3VuZCByZWZyZXNoIGZhaWxlZCcsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgICAgdGhpcy5yZWNvcmRDaXJjdWl0QnJlYWtlckZhaWx1cmUoKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZFJlZnJlc2hQcm9taXNlID0gbnVsbDtcbiAgICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogUGVyZm9ybSBiYWNrZ3JvdW5kIHJlZnJlc2hcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGVyZm9ybUJhY2tncm91bmRSZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5kZWJ1ZygnU3RhcnRpbmcgYmFja2dyb3VuZCByZWZyZXNoIG9mIGNvbGxlY3Rpb24gaW5kZXgnKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgZnJlc2hJbmRleCA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoUmV0cnkoKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FjaGUoZnJlc2hJbmRleCk7XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IGNpcmN1aXQgYnJlYWtlciBvbiBzdWNjZXNzXG4gICAgICB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPSAwO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ0JhY2tncm91bmQgcmVmcmVzaCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQmFja2dyb3VuZCByZWZyZXNoIGZhaWxlZCcsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIGNvbGxlY3Rpb24gaW5kZXggd2l0aCByZXRyeSBsb2dpYyBhbmQgZXhwb25lbnRpYWwgYmFja29mZlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFdpdGhSZXRyeSgpOiBQcm9taXNlPHsgZGF0YTogQ29sbGVjdGlvbkluZGV4OyBldGFnPzogc3RyaW5nOyBsYXN0TW9kaWZpZWQ/OiBzdHJpbmcgfT4ge1xuICAgIGxldCBsYXN0RXJyb3I6IEVycm9yIHwgbnVsbCA9IG51bGw7XG4gICAgXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gdGhpcy5NQVhfUkVUUklFUzsgYXR0ZW1wdCsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoYXR0ZW1wdCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkZWxheSA9IHRoaXMuY2FsY3VsYXRlUmV0cnlEZWxheShhdHRlbXB0KTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFJldHJ5aW5nIGZldGNoIGluICR7ZGVsYXl9bXMgKGF0dGVtcHQgJHthdHRlbXB0ICsgMX0vJHt0aGlzLk1BWF9SRVRSSUVTICsgMX0pYCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zbGVlcChkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZldGNoQ29sbGVjdGlvbkluZGV4KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsYXN0RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2ggYXR0ZW1wdCAke2F0dGVtcHQgKyAxfSBmYWlsZWRgLCB7IFxuICAgICAgICAgIGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShsYXN0RXJyb3IpLFxuICAgICAgICAgIHdpbGxSZXRyeTogYXR0ZW1wdCA8IHRoaXMuTUFYX1JFVFJJRVNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoJ0FsbCBmZXRjaCBhdHRlbXB0cyBmYWlsZWQnKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSByZXRyeSBkZWxheSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYgYW5kIGppdHRlclxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVSZXRyeURlbGF5KGF0dGVtcHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gRXhwb25lbnRpYWwgYmFja29mZjogYmFzZURlbGF5ICogKDIgXiBhdHRlbXB0KVxuICAgIGNvbnN0IGV4cG9uZW50aWFsRGVsYXkgPSB0aGlzLkJBU0VfUkVUUllfREVMQVlfTVMgKiBNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSk7XG4gICAgXG4gICAgLy8gQ2FwIGF0IG1heGltdW0gZGVsYXlcbiAgICBjb25zdCBjYXBwZWREZWxheSA9IE1hdGgubWluKGV4cG9uZW50aWFsRGVsYXksIHRoaXMuTUFYX1JFVFJZX0RFTEFZX01TKTtcbiAgICBcbiAgICAvLyBBZGQgaml0dGVyIHRvIHByZXZlbnQgdGh1bmRlcmluZyBoZXJkXG4gICAgcmV0dXJuIHRoaXMuYWRkSml0dGVyKGNhcHBlZERlbGF5KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEFkZCBqaXR0ZXIgKMKxMjUlIHJhbmRvbW5lc3MpIHRvIGEgZGVsYXkgdG8gcHJldmVudCB0aHVuZGVyaW5nIGhlcmQgcHJvYmxlbXNcbiAgICovXG4gIHByaXZhdGUgYWRkSml0dGVyKGRlbGF5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGppdHRlciA9IGRlbGF5ICogdGhpcy5KSVRURVJfRkFDVE9SICogKE1hdGgucmFuZG9tKCkgLSAwLjUpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBkZWxheSArIGppdHRlcik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGZXRjaCBjb2xsZWN0aW9uIGluZGV4IGZyb20gR2l0SHViXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoQ29sbGVjdGlvbkluZGV4KCk6IFByb21pc2U8eyBkYXRhOiBDb2xsZWN0aW9uSW5kZXg7IGV0YWc/OiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IHN0cmluZyB9PiB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgdGhpcy5GRVRDSF9USU1FT1VUX01TKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gQnVpbGQgaGVhZGVycyBmb3IgY29uZGl0aW9uYWwgcmVxdWVzdHNcbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC8xLjAnLFxuICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZSdcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIEFkZCBjb25kaXRpb25hbCBoZWFkZXJzIGlmIHdlIGhhdmUgY2FjaGVkIGRhdGFcbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4Py5ldGFnKSB7XG4gICAgICAgIGhlYWRlcnNbJ0lmLU5vbmUtTWF0Y2gnXSA9IHRoaXMuY2FjaGVkSW5kZXguZXRhZztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4Py5sYXN0TW9kaWZpZWQpIHtcbiAgICAgICAgaGVhZGVyc1snSWYtTW9kaWZpZWQtU2luY2UnXSA9IHRoaXMuY2FjaGVkSW5kZXgubGFzdE1vZGlmaWVkO1xuICAgICAgfVxuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ0ZldGNoaW5nIGNvbGxlY3Rpb24gaW5kZXgnLCB7IFxuICAgICAgICB1cmw6IHRoaXMuSU5ERVhfVVJMLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLkZFVENIX1RJTUVPVVRfTVMsXG4gICAgICAgIGhhc0V0YWc6ICEhdGhpcy5jYWNoZWRJbmRleD8uZXRhZ1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5JTkRFWF9VUkwsIHtcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgXG4gICAgICAvLyBIYW5kbGUgMzA0IE5vdCBNb2RpZmllZFxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMzA0ICYmIHRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IG5vdCBtb2RpZmllZCAoMzA0KSwgdXBkYXRpbmcgY2FjaGUgdGltZXN0YW1wJyk7XG4gICAgICAgIHRoaXMuY2FjaGVkSW5kZXgudGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlVG9EaXNrKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogdGhpcy5jYWNoZWRJbmRleC5kYXRhLFxuICAgICAgICAgIGV0YWc6IHRoaXMuY2FjaGVkSW5kZXguZXRhZyxcbiAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHRoaXMuY2FjaGVkSW5kZXgubGFzdE1vZGlmaWVkXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ29sbGVjdGlvbkluZGV4O1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgaW5kZXggc3RydWN0dXJlXG4gICAgICB0aGlzLnZhbGlkYXRlSW5kZXhTdHJ1Y3R1cmUoaW5kZXhEYXRhKTtcbiAgICAgIFxuICAgICAgY29uc3QgZXRhZyA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdldGFnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2xhc3QtbW9kaWZpZWQnKSB8fCB1bmRlZmluZWQ7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBpbmRleCBmZXRjaGVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgICAgdG90YWxFbGVtZW50czogaW5kZXhEYXRhLnRvdGFsX2VsZW1lbnRzLFxuICAgICAgICB2ZXJzaW9uOiBpbmRleERhdGEudmVyc2lvbixcbiAgICAgICAgaGFzRXRhZzogISFldGFnXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgZGF0YTogaW5kZXhEYXRhLCBldGFnLCBsYXN0TW9kaWZpZWQgfTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIFxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmV0Y2ggdGltZW91dCBhZnRlciAke3RoaXMuRkVUQ0hfVElNRU9VVF9NU31tc2ApO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBjb2xsZWN0aW9uIGluZGV4IHN0cnVjdHVyZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUluZGV4U3RydWN0dXJlKGluZGV4OiBhbnkpOiBhc3NlcnRzIGluZGV4IGlzIENvbGxlY3Rpb25JbmRleCB7XG4gICAgaWYgKCFpbmRleCB8fCB0eXBlb2YgaW5kZXggIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG5vdCBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiBpbmRleC52ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgdmVyc2lvbicpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIGluZGV4LmdlbmVyYXRlZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleDogbWlzc2luZyBvciBpbnZhbGlkIGdlbmVyYXRlZCB0aW1lc3RhbXAnKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiBpbmRleC50b3RhbF9lbGVtZW50cyAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleDogbWlzc2luZyBvciBpbnZhbGlkIHRvdGFsX2VsZW1lbnRzJyk7XG4gICAgfVxuICAgIFxuICAgIGlmICghaW5kZXguaW5kZXggfHwgdHlwZW9mIGluZGV4LmluZGV4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgaW5kZXggb2JqZWN0Jyk7XG4gICAgfVxuICAgIFxuICAgIGlmICghaW5kZXgubWV0YWRhdGEgfHwgdHlwZW9mIGluZGV4Lm1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgbWV0YWRhdGEnKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgY2FjaGUgd2l0aCBuZXcgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVDYWNoZShmZXRjaFJlc3VsdDogeyBkYXRhOiBDb2xsZWN0aW9uSW5kZXg7IGV0YWc/OiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hlY2tzdW0gPSB0aGlzLmNhbGN1bGF0ZUNoZWNrc3VtKGZldGNoUmVzdWx0LmRhdGEpO1xuICAgIFxuICAgIHRoaXMuY2FjaGVkSW5kZXggPSB7XG4gICAgICBkYXRhOiBmZXRjaFJlc3VsdC5kYXRhLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZXRhZzogZmV0Y2hSZXN1bHQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogZmV0Y2hSZXN1bHQubGFzdE1vZGlmaWVkLFxuICAgICAgdmVyc2lvbjogZmV0Y2hSZXN1bHQuZGF0YS52ZXJzaW9uLFxuICAgICAgY2hlY2tzdW1cbiAgICB9O1xuICAgIFxuICAgIGF3YWl0IHRoaXMuc2F2ZVRvRGlzaygpO1xuICAgIFxuICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBpbmRleCBjYWNoZSB1cGRhdGVkJywge1xuICAgICAgdmVyc2lvbjogZmV0Y2hSZXN1bHQuZGF0YS52ZXJzaW9uLFxuICAgICAgdG90YWxFbGVtZW50czogZmV0Y2hSZXN1bHQuZGF0YS50b3RhbF9lbGVtZW50cyxcbiAgICAgIGNoZWNrc3VtXG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgY2hlY2tzdW0gZm9yIGRhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVDaGVja3N1bShkYXRhOiBDb2xsZWN0aW9uSW5kZXgpOiBzdHJpbmcge1xuICAgIC8vIFNpbXBsZSBjaGVja3N1bSBiYXNlZCBvbiBrZXkgcHJvcGVydGllc1xuICAgIGNvbnN0IGNoZWNrc3VtRGF0YSA9IHtcbiAgICAgIHZlcnNpb246IGRhdGEudmVyc2lvbixcbiAgICAgIGdlbmVyYXRlZDogZGF0YS5nZW5lcmF0ZWQsXG4gICAgICB0b3RhbF9lbGVtZW50czogZGF0YS50b3RhbF9lbGVtZW50c1xuICAgIH07XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGNoZWNrc3VtRGF0YSkpLnRvU3RyaW5nKCdiYXNlNjQnKS5zdWJzdHJpbmcoMCwgdGhpcy5DSEVDS1NVTV9MRU5HVEgpO1xuICB9XG4gIFxuICAvKipcbiAgICogTG9hZCBjYWNoZSBmcm9tIGRpc2tcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZyb21EaXNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy5DQUNIRV9GSUxFLCAndXRmOCcpO1xuICAgICAgY29uc3QgY2FjaGVkID0gSlNPTi5wYXJzZShkYXRhKSBhcyBDb2xsZWN0aW9uSW5kZXhDYWNoZUVudHJ5O1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBjYWNoZSBzdHJ1Y3R1cmVcbiAgICAgIGlmICghY2FjaGVkLmRhdGEgfHwgIWNhY2hlZC50aW1lc3RhbXAgfHwgIWNhY2hlZC52ZXJzaW9uKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnSW52YWxpZCBjYWNoZSBzdHJ1Y3R1cmUsIGlnbm9yaW5nJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVmVyaWZ5IGNoZWNrc3VtIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKGNhY2hlZC5jaGVja3N1bSkge1xuICAgICAgICBjb25zdCBleHBlY3RlZENoZWNrc3VtID0gdGhpcy5jYWxjdWxhdGVDaGVja3N1bShjYWNoZWQuZGF0YSk7XG4gICAgICAgIGlmIChjYWNoZWQuY2hlY2tzdW0gIT09IGV4cGVjdGVkQ2hlY2tzdW0pIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ0NhY2hlIGNoZWNrc3VtIG1pc21hdGNoLCBpZ25vcmluZyBjYWNoZWQgZGF0YScpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmNhY2hlZEluZGV4ID0gY2FjaGVkO1xuICAgICAgXG4gICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gY2FjaGVkLnRpbWVzdGFtcDtcbiAgICAgIGNvbnN0IGlzRXhwaXJlZCA9IGFnZSA+IHRoaXMuVFRMX01TO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ0xvYWRlZCBjb2xsZWN0aW9uIGluZGV4IGZyb20gZGlzayBjYWNoZScsIHtcbiAgICAgICAgdmVyc2lvbjogY2FjaGVkLnZlcnNpb24sXG4gICAgICAgIGFnZTogTWF0aC5yb3VuZChhZ2UgLyAxMDAwKSxcbiAgICAgICAgaXNFeHBpcmVkLFxuICAgICAgICB0b3RhbEVsZW1lbnRzOiBjYWNoZWQuZGF0YS50b3RhbF9lbGVtZW50c1xuICAgICAgfSk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGxvYWQgY2FjaGUgZnJvbSBkaXNrJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFNhdmUgY2FjaGUgdG8gZGlza1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzYXZlVG9EaXNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYWNoZWRJbmRleCkgcmV0dXJuO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBFbnN1cmUgY2FjaGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKHRoaXMuQ0FDSEVfRklMRSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICBjb25zdCBjYWNoZURhdGEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNhY2hlZEluZGV4LCBudWxsLCB0aGlzLkpTT05fSU5ERU5UKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLkNBQ0hFX0ZJTEUsIGNhY2hlRGF0YSwgJ3V0ZjgnKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGNhY2hlIHNhdmVkIHRvIGRpc2snKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gc2F2ZSBjYWNoZSB0byBkaXNrJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgLy8gRG9uJ3QgdGhyb3cgLSBjYWNoZSBwZXJzaXN0ZW5jZSBmYWlsdXJlcyBzaG91bGRuJ3QgYnJlYWsgZnVuY3Rpb25hbGl0eVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENpcmN1aXQgYnJlYWtlciBsb2dpY1xuICAgKi9cbiAgcHJpdmF0ZSBpc0NpcmN1aXRCcmVha2VyT3BlbigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzIDwgdGhpcy5DSVJDVUlUX0JSRUFLRVJfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RGYWlsdXJlID0gRGF0ZS5ub3coKSAtIHRoaXMuY2lyY3VpdEJyZWFrZXJMYXN0RmFpbHVyZTtcbiAgICByZXR1cm4gdGltZVNpbmNlTGFzdEZhaWx1cmUgPCB0aGlzLkNJUkNVSVRfQlJFQUtFUl9USU1FT1VUX01TO1xuICB9XG4gIFxuICBwcml2YXRlIHJlY29yZENpcmN1aXRCcmVha2VyRmFpbHVyZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMrKztcbiAgICB0aGlzLmNpcmN1aXRCcmVha2VyTGFzdEZhaWx1cmUgPSBEYXRlLm5vdygpO1xuICAgIFxuICAgIGlmICh0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPj0gdGhpcy5DSVJDVUlUX0JSRUFLRVJfVEhSRVNIT0xEKSB7XG4gICAgICBsb2dnZXIud2FybignQ2lyY3VpdCBicmVha2VyIG9wZW5lZCBkdWUgdG8gcmVwZWF0ZWQgZmFpbHVyZXMnLCB7XG4gICAgICAgIGZhaWx1cmVzOiB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMsXG4gICAgICAgIHRpbWVvdXRNczogdGhpcy5DSVJDVUlUX0JSRUFLRVJfVElNRU9VVF9NU1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVXRpbGl0eSBtZXRob2RzXG4gICAqL1xuICBwcml2YXRlIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gIH1cbiAgXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGNhY2hlIHN0YXRpc3RpY3MgZm9yIG1vbml0b3JpbmdcbiAgICovXG4gIGdldENhY2hlU3RhdHMoKToge1xuICAgIGlzVmFsaWQ6IGJvb2xlYW47XG4gICAgYWdlOiBudW1iZXI7XG4gICAgaGFzQ2FjaGU6IGJvb2xlYW47XG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICB0b3RhbEVsZW1lbnRzPzogbnVtYmVyO1xuICAgIGlzUmVmcmVzaGluZzogYm9vbGVhbjtcbiAgICBjaXJjdWl0QnJlYWtlckZhaWx1cmVzOiBudW1iZXI7XG4gICAgY2lyY3VpdEJyZWFrZXJPcGVuOiBib29sZWFuO1xuICB9IHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBhZ2U6IDAsXG4gICAgICAgIGhhc0NhY2hlOiBmYWxzZSxcbiAgICAgICAgaXNSZWZyZXNoaW5nOiB0aGlzLmlzUmVmcmVzaGluZyxcbiAgICAgICAgY2lyY3VpdEJyZWFrZXJGYWlsdXJlczogdGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzLFxuICAgICAgICBjaXJjdWl0QnJlYWtlck9wZW46IHRoaXMuaXNDaXJjdWl0QnJlYWtlck9wZW4oKVxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIHRoaXMuY2FjaGVkSW5kZXgudGltZXN0YW1wO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiAhdGhpcy5pc0NhY2hlRXhwaXJlZCgpLFxuICAgICAgYWdlOiBNYXRoLnJvdW5kKGFnZSAvIDEwMDApLCAvLyBhZ2UgaW4gc2Vjb25kc1xuICAgICAgaGFzQ2FjaGU6IHRydWUsXG4gICAgICB2ZXJzaW9uOiB0aGlzLmNhY2hlZEluZGV4LnZlcnNpb24sXG4gICAgICB0b3RhbEVsZW1lbnRzOiB0aGlzLmNhY2hlZEluZGV4LmRhdGEudG90YWxfZWxlbWVudHMsXG4gICAgICBpc1JlZnJlc2hpbmc6IHRoaXMuaXNSZWZyZXNoaW5nLFxuICAgICAgY2lyY3VpdEJyZWFrZXJGYWlsdXJlczogdGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzLFxuICAgICAgY2lyY3VpdEJyZWFrZXJPcGVuOiB0aGlzLmlzQ2lyY3VpdEJyZWFrZXJPcGVuKClcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xlYXIgYWxsIGNhY2hlIGRhdGFcbiAgICovXG4gIGFzeW5jIGNsZWFyQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jYWNoZWRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzID0gMDtcbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKHRoaXMuQ0FDSEVfRklMRSk7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggY2FjaGUgZmlsZSBkZWxldGVkJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBkZWxldGUgY2FjaGUgZmlsZScsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBXYWl0IGZvciBhbnkgb25nb2luZyBiYWNrZ3JvdW5kIHJlZnJlc2ggdG8gY29tcGxldGVcbiAgICovXG4gIGFzeW5jIHdhaXRGb3JCYWNrZ3JvdW5kUmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5iYWNrZ3JvdW5kUmVmcmVzaFByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuYmFja2dyb3VuZFJlZnJlc2hQcm9taXNlO1xuICAgIH1cbiAgfVxufSJdfQ==
|
|
@@ -229,7 +229,7 @@ export class ConfigWizard {
|
|
|
229
229
|
await this.configManager.updateSetting('sync.individual.track_versions', trackVersions);
|
|
230
230
|
if (trackVersions) {
|
|
231
231
|
const historyCount = await this.prompt(' How many versions to keep? [10]: ', '10');
|
|
232
|
-
await this.configManager.updateSetting('sync.individual.keep_history', parseInt(historyCount) || 10);
|
|
232
|
+
await this.configManager.updateSetting('sync.individual.keep_history', Number.parseInt(historyCount) || 10);
|
|
233
233
|
}
|
|
234
234
|
// Privacy settings
|
|
235
235
|
console.log(chalk.white('\nPrivacy Settings:'));
|
|
@@ -271,7 +271,7 @@ export class ConfigWizard {
|
|
|
271
271
|
console.log(' [4] Custom - Define your own format');
|
|
272
272
|
const styleChoice = await this.prompt(' Choice [1-4]: ', '2');
|
|
273
273
|
const styles = ['full', 'minimal', 'compact', 'custom'];
|
|
274
|
-
const style = styles[parseInt(styleChoice) - 1] || 'minimal';
|
|
274
|
+
const style = styles[Number.parseInt(styleChoice) - 1] || 'minimal';
|
|
275
275
|
await this.configManager.updateSetting('display.persona_indicators.style', style);
|
|
276
276
|
const includeEmoji = await this.promptYesNo('\n Include emoji in indicators?', true);
|
|
277
277
|
await this.configManager.updateSetting('display.persona_indicators.include_emoji', includeEmoji);
|
|
@@ -367,4 +367,4 @@ export class ConfigWizard {
|
|
|
367
367
|
}
|
|
368
368
|
}
|
|
369
369
|
}
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnV2l6YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9Db25maWdXaXphcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxLQUFLLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUM7QUFRL0IsTUFBTSxPQUFPLFlBQVk7SUFDZixhQUFhLENBQWdCO0lBQzdCLEVBQUUsQ0FBNEI7SUFDOUIsYUFBYSxDQUFVO0lBRS9CLFlBQVksYUFBNEI7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFFbkMsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFFakUsZ0RBQWdEO1FBQ2hELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDakMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dCQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3RCLFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTix1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxlQUFlO1FBQ25CLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsSUFBSSxD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SUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWdXaXphcmQgLSBJbnRlcmFjdGl2ZSBjb25maWd1cmF0aW9uIHdpemFyZCBmb3IgbmV3IERvbGxob3VzZU1DUCBpbnN0YWxsYXRpb25zXG4gKiBcbiAqIEZlYXR1cmVzOlxuICogLSBHdWlkZWQgd2Fsa3Rocm91Z2ggb2YgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICogLSBFZHVjYXRpb25hbCBleHBsYW5hdGlvbnMgZm9yIGVhY2ggc2V0dGluZ1xuICogLSBUcmFja2luZyBvZiBjb21wbGV0aW9uL2Rpc21pc3NhbCBzdGF0dXNcbiAqIC0gTm9uLWludHJ1c2l2ZSBmaXJzdC1ydW4gZXhwZXJpZW5jZVxuICogLSBSZS1ydW5uYWJsZSB2aWEgTUNQIHRvb2xcbiAqL1xuXG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tICdyZWFkbGluZSc7XG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSAnLi9Db25maWdNYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUgfSBmcm9tICcuL3BvcnRmb2xpb0NvbmZpZy5qcyc7XG5cbmNvbnN0IFdJWkFSRF9WRVJTSU9OID0gJzEuMC4wJztcblxuaW50ZXJmYWNlIFdpemFyZENob2ljZSB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGlzRGVmYXVsdD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBDb25maWdXaXphcmQge1xuICBwcml2YXRlIGNvbmZpZ01hbmFnZXI6IENvbmZpZ01hbmFnZXI7XG4gIHByaXZhdGUgcmw6IHJlYWRsaW5lLkludGVyZmFjZSB8IG51bGw7XG4gIHByaXZhdGUgaXNJbnRlcmFjdGl2ZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWdNYW5hZ2VyOiBDb25maWdNYW5hZ2VyKSB7XG4gICAgdGhpcy5jb25maWdNYW5hZ2VyID0gY29uZmlnTWFuYWdlcjtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBpbiBhbiBpbnRlcmFjdGl2ZSB0ZXJtaW5hbFxuICAgIHRoaXMuaXNJbnRlcmFjdGl2ZSA9IHByb2Nlc3Muc3RkaW4uaXNUVFkgJiYgcHJvY2Vzcy5zdGRvdXQuaXNUVFk7XG4gICAgXG4gICAgLy8gT25seSBjcmVhdGUgcmVhZGxpbmUgaW50ZXJmYWNlIGlmIGludGVyYWN0aXZlXG4gICAgaWYgKHRoaXMuaXNJbnRlcmFjdGl2ZSkge1xuICAgICAgdGhpcy5ybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgICAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICAgICAgICB0ZXJtaW5hbDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGludGVyZmFjZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZVxuICAgICAgdGhpcy5ybCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSB3aXphcmQgc2hvdWxkIHJ1blxuICAgKi9cbiAgYXN5bmMgc2hvdWxkUnVuV2l6YXJkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIERvbid0IHJ1biBpbiBub24taW50ZXJhY3RpdmUgZW52aXJvbm1lbnRzIChDSSwgYXV0b21hdGVkIHNjcmlwdHMpXG4gICAgaWYgKCF0aGlzLmlzSW50ZXJhY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG4gICAgcmV0dXJuICFjb25maWcud2l6YXJkPy5jb21wbGV0ZWQgJiYgIWNvbmZpZy53aXphcmQ/LmRpc21pc3NlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGluaXRpYWwgcHJvbXB0IHRvIHVzZXJcbiAgICovXG4gIGFzeW5jIHByb21wdEluaXRpYWwoKTogUHJvbWlzZTwneWVzJyB8ICdza2lwJyB8ICduZXZlcic+IHtcbiAgICBjb25zb2xlLmxvZygnXFxuJyArIGNoYWxrLmN5YW4oJ+KVkCcucmVwZWF0KDYwKSkpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4uYm9sZCgnICBXZWxjb21lIHRvIERvbGxob3VzZU1DUCEg8J+OrScpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCfilZAnLnJlcGVhdCg2MCkpICsgJ1xcbicpO1xuICAgIFxuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnVGhpcyBhcHBlYXJzIHRvIGJlIHlvdXIgZmlyc3QgdGltZSB1c2luZyBEb2xsaG91c2VNQ1AuJykpO1xuICAgIGNvbnNvbGUubG9nKCdXb3VsZCB5b3UgbGlrZSBhIGd1aWRlZCB3YWxrdGhyb3VnaCBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zP1xcbicpO1xuICAgIFxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCcgIFsxXScpICsgJyBZZXMsIGd1aWRlIG1lIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24nKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJyAgWzJdJykgKyAnIFNraXAgZm9yIG5vdyAoYXNrIGFnYWluIG5leHQgdGltZSknKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFszXScpICsgJyBEb25cXCd0IHNob3cgdGhpcyBhZ2FpblxcbicpO1xuXG4gICAgY29uc3QgY2hvaWNlID0gYXdhaXQgdGhpcy5wcm9tcHQoJ0Nob2ljZSBbMS8yLzNdOiAnLCAnMicpO1xuICAgIFxuICAgIHN3aXRjaCAoY2hvaWNlKSB7XG4gICAgICBjYXNlICcxJzpcbiAgICAgICAgcmV0dXJuICd5ZXMnO1xuICAgICAgY2FzZSAnMyc6XG4gICAgICAgIHJldHVybiAnbmV2ZXInO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdza2lwJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gd2l6YXJkXG4gICAqL1xuICBhc3luYyBydW5XaXphcmQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coJ1xcbicgKyBjaGFsay5jeWFuKCdTdGFydGluZyBDb25maWd1cmF0aW9uIFdpemFyZC4uLicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdZb3UgY2FuIHByZXNzIEN0cmwrQyBhdCBhbnkgdGltZSB0byBleGl0XFxuJykpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyYWNrIHNraXBwZWQgc2VjdGlvbnNcbiAgICAgIGNvbnN0IHNraXBwZWRTZWN0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgLy8gU2VjdGlvbiAxOiBVc2VyIElkZW50aXR5XG4gICAgICBjb25zdCBza2lwSWRlbnRpdHkgPSBhd2FpdCB0aGlzLnJ1blVzZXJJZGVudGl0eVNlY3Rpb24oKTtcbiAgICAgIGlmIChza2lwSWRlbnRpdHkpIHNraXBwZWRTZWN0aW9ucy5wdXNoKCd1c2VyJyk7XG5cbiAgICAgIC8vIFNlY3Rpb24gMjogR2l0SHViIEludGVncmF0aW9uXG4gICAgICBjb25zdCBza2lwR2l0SHViID0gYXdhaXQgdGhpcy5ydW5HaXRIdWJTZWN0aW9uKCk7XG4gICAgICBpZiAoc2tpcEdpdEh1Yikgc2tpcHBlZFNlY3Rpb25zLnB1c2goJ2dpdGh1YicpO1xuXG4gICAgICAvLyBTZWN0aW9uIDM6IFN5bmMgU2V0dGluZ3NcbiAgICAgIGNvbnN0IHNraXBTeW5jID0gYXdhaXQgdGhpcy5ydW5TeW5jU2VjdGlvbigpO1xuICAgICAgaWYgKHNraXBTeW5jKSBza2lwcGVkU2VjdGlvbnMucHVzaCgnc3luYycpO1xuXG4gICAgICAvLyBTZWN0aW9uIDQ6IENvbGxlY3Rpb24gU2V0dGluZ3NcbiAgICAgIGNvbnN0IHNraXBDb2xsZWN0aW9uID0gYXdhaXQgdGhpcy5ydW5Db2xsZWN0aW9uU2VjdGlvbigpO1xuICAgICAgaWYgKHNraXBDb2xsZWN0aW9uKSBza2lwcGVkU2VjdGlvbnMucHVzaCgnY29sbGVjdGlvbicpO1xuXG4gICAgICAvLyBTZWN0aW9uIDU6IERpc3BsYXkgU2V0dGluZ3NcbiAgICAgIGNvbnN0IHNraXBEaXNwbGF5ID0gYXdhaXQgdGhpcy5ydW5EaXNwbGF5U2VjdGlvbigpO1xuICAgICAgaWYgKHNraXBEaXNwbGF5KSBza2lwcGVkU2VjdGlvbnMucHVzaCgnZGlzcGxheScpO1xuXG4gICAgICAvLyBTaG93IHN1bW1hcnkgYW5kIGNvbmZpcm1cbiAgICAgIGF3YWl0IHRoaXMuc2hvd1N1bW1hcnkoKTtcbiAgICAgIFxuICAgICAgY29uc3Qgc2F2ZSA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJ1NhdmUgdGhpcyBjb25maWd1cmF0aW9uPycsIHRydWUpO1xuICAgICAgaWYgKHNhdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5tYXJrQ29tcGxldGVkKHNraXBwZWRTZWN0aW9ucyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCdcXG7inIUgQ29uZmlndXJhdGlvbiBzYXZlZCBzdWNjZXNzZnVsbHkhJykpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdZb3UgY2FuIHJlLXJ1biB0aGlzIHdpemFyZCBhbnl0aW1lIHdpdGggdGhlIFwicnVuX2NvbmZpZ193aXphcmRcIiB0b29sLlxcbicpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnXFxu4pqg77iPICBDb25maWd1cmF0aW9uIG5vdCBzYXZlZC4gWW91IGNhbiBydW4gdGhlIHdpemFyZCBhZ2FpbiBsYXRlci5cXG4nKSk7XG4gICAgICB9XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ2NhbmNlbGVkJykpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1xcbuKaoO+4jyAgV2l6YXJkIGNhbmNlbGVkLiBZb3UgY2FuIHJ1biBpdCBhZ2FpbiBsYXRlci5cXG4nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRUFDQ0VTJykgfHwgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygncGVybWlzc2lvbicpKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdQZXJtaXNzaW9uIGRlbmllZCB3aGlsZSBzYXZpbmcgY29uZmlndXJhdGlvbicsIHsgZXJyb3IgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdcXG7inYwgUGVybWlzc2lvbiBkZW5pZWQ6IFVuYWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24uJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnICAgUGxlYXNlIGNoZWNrIGZpbGUgcGVybWlzc2lvbnMgZm9yIH4vLmRvbGxob3VzZS9jb25maWcueW1sXFxuJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VOT1NQQycpKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdObyBzcGFjZSBsZWZ0IG9uIGRldmljZScsIHsgZXJyb3IgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdcXG7inYwgRGlzayBmdWxsOiBVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uLicpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJyAgIFBsZWFzZSBmcmVlIHVwIHNvbWUgZGlzayBzcGFjZSBhbmQgdHJ5IGFnYWluLlxcbicpKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdyZWFkbGluZScpKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdUZXJtaW5hbCBpbnB1dCBlcnJvcicsIHsgZXJyb3IgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdcXG7inYwgVGVybWluYWwgZXJyb3I6IFVuYWJsZSB0byByZWFkIGlucHV0LicpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJyAgIFBsZWFzZSBlbnN1cmUgeW91XFwncmUgcnVubmluZyBpbiBhbiBpbnRlcmFjdGl2ZSB0ZXJtaW5hbC5cXG4nKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIGluIGNvbmZpZ3VyYXRpb24gd2l6YXJkJywgeyBlcnJvciB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ1xcbuKdjCBBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLicpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGAgICBFcnJvcjogJHtlcnJvci5tZXNzYWdlfVxcbmApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmtub3duIGVycm9yIGluIGNvbmZpZ3VyYXRpb24gd2l6YXJkJywgeyBlcnJvciB9KTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdcXG7inYwgQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZXIgSWRlbnRpdHkgU2VjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBydW5Vc2VySWRlbnRpdHlTZWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnNvbGUubG9nKCdcXG4nICsgY2hhbGsuY3lhbi5ib2xkKCc9PT0gVXNlciBJZGVudGl0eSBDb25maWd1cmF0aW9uID09PScpKTtcbiAgICBjb25zb2xlLmxvZygnTGV0XFwncyBzZXQgdXAgeW91ciBpZGVudGl0eSBmb3IgcGVyc29uYSBhdHRyaWJ1dGlvbi5cXG4nKTtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcbiAgICBcbiAgICAvLyBVc2VybmFtZVxuICAgIGNvbnNvbGUubG9nKGNoYWxrLndoaXRlKCdVc2VybmFtZSAoZm9yIHBlcnNvbmEgY3JlZGl0cyk6JykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoYCAgQ3VycmVudDogJHtjb25maWcudXNlci51c2VybmFtZSB8fCAnbm90IHNldCd9YCkpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgUmVjb21tZW5kZWQ6IFlvdXIgR2l0SHViIHVzZXJuYW1lJykpO1xuICAgIGNvbnN0IHVzZXJuYW1lID0gYXdhaXQgdGhpcy5wcm9tcHQoJyAgPiAnLCBjb25maWcudXNlci51c2VybmFtZSB8fCAnJyk7XG4gICAgaWYgKHVzZXJuYW1lKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygndXNlci51c2VybmFtZScsIHVzZXJuYW1lKTtcbiAgICB9XG5cbiAgICAvLyBFbWFpbCB3aXRoIHZhbGlkYXRpb25cbiAgICBjb25zb2xlLmxvZyhjaGFsay53aGl0ZSgnXFxuRW1haWwgKGZvciBHaXQgY29tbWl0cyBhbmQgR2l0SHViIGF0dHJpYnV0aW9uKTonKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBVc2VkIGZvcjogR2l0IGF1dGhvciBpbmZvLCBHaXRIdWIgY29tbWl0cywgYW5kIGVsZW1lbnQgYXR0cmlidXRpb24nKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgICBDdXJyZW50OiAke2NvbmZpZy51c2VyLmVtYWlsIHx8ICdub3Qgc2V0J31gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBSZWNvbW1lbmRlZDogWW91ciBHaXRIdWIgZW1haWwgYWRkcmVzcycpKTtcbiAgICBsZXQgZW1haWwgPSBhd2FpdCB0aGlzLnByb21wdCgnICA+ICcsIGNvbmZpZy51c2VyLmVtYWlsIHx8ICcnKTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSBlbWFpbCBpZiBwcm92aWRlZFxuICAgIHdoaWxlIChlbWFpbCAmJiAhdGhpcy5pc1ZhbGlkRW1haWwoZW1haWwpKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJyAg4pqg77iPICBJbnZhbGlkIGVtYWlsIGZvcm1hdC4gUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgb3IgbGVhdmUgZW1wdHkgdG8gc2tpcC4nKSk7XG4gICAgICBlbWFpbCA9IGF3YWl0IHRoaXMucHJvbXB0KCcgID4gJywgJycpO1xuICAgIH1cbiAgICBcbiAgICBpZiAoZW1haWwpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCd1c2VyLmVtYWlsJywgZW1haWwpO1xuICAgIH1cblxuICAgIC8vIERpc3BsYXkgTmFtZVxuICAgIGNvbnNvbGUubG9nKGNoYWxrLndoaXRlKCdcXG5EaXNwbGF5IE5hbWUgKGhvdyB5b3UgYXBwZWFyIGluIHRoZSBjb21tdW5pdHkpOicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGAgIEN1cnJlbnQ6ICR7Y29uZmlnLnVzZXIuZGlzcGxheV9uYW1lIHx8ICdub3Qgc2V0J31gKSk7XG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBhd2FpdCB0aGlzLnByb21wdCgnICA+ICcsIGNvbmZpZy51c2VyLmRpc3BsYXlfbmFtZSB8fCAnJyk7XG4gICAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygndXNlci5kaXNwbGF5X25hbWUnLCBkaXNwbGF5TmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlOyAvLyBTZWN0aW9uIG5vdCBza2lwcGVkXG4gIH1cblxuICAvKipcbiAgICogR2l0SHViIEludGVncmF0aW9uIFNlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcnVuR2l0SHViU2VjdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmxvZygnXFxuJyArIGNoYWxrLmN5YW4uYm9sZCgnPT09IEdpdEh1YiBJbnRlZ3JhdGlvbiA9PT0nKSk7XG4gICAgY29uc29sZS5sb2coJ0RvbGxob3VzZU1DUCBjYW4gc3luYyB5b3VyIHBlcnNvbmFzIHdpdGggR2l0SHViIGZvciBiYWNrdXAgYW5kIHNoYXJpbmcuXFxuJyk7XG5cbiAgICBjb25zdCBzZXR1cEdpdEh1YiA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJ1dvdWxkIHlvdSBsaWtlIHRvIHNldCB1cCBHaXRIdWIgaW50ZWdyYXRpb24/JywgZmFsc2UpO1xuICAgIFxuICAgIGlmICghc2V0dXBHaXRIdWIpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgU2tpcHBpbmcgR2l0SHViIHNldHVwLiBZb3UgY2FuIGNvbmZpZ3VyZSB0aGlzIGxhdGVyLlxcbicpKTtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBTZWN0aW9uIHNraXBwZWRcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG5cbiAgICAvLyBSZXBvc2l0b3J5IG5hbWVcbiAgICBjb25zb2xlLmxvZyhjaGFsay53aGl0ZSgnXFxuR2l0SHViIFBvcnRmb2xpbyBSZXBvc2l0b3J5OicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFRoaXMgd2lsbCBzdG9yZSB5b3VyIHBlcnNvbmFsIGNvbGxlY3Rpb24nKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBGb3JtYXQ6IHVzZXJuYW1lL3JlcG9zaXRvcnktbmFtZScpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGAgIERlZmF1bHQ6ICR7Y29uZmlnLmdpdGh1Yi5wb3J0Zm9saW8ucmVwb3NpdG9yeV9uYW1lfWApKTtcbiAgICBjb25zdCByZXBvTmFtZSA9IGF3YWl0IHRoaXMucHJvbXB0KCcgID4gJywgY29uZmlnLmdpdGh1Yi5wb3J0Zm9saW8ucmVwb3NpdG9yeV9uYW1lKTtcbiAgICBpZiAocmVwb05hbWUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCdnaXRodWIucG9ydGZvbGlvLnJlcG9zaXRvcnlfbmFtZScsIHJlcG9OYW1lKTtcbiAgICB9XG5cbiAgICAvLyBBdXRvLWNyZWF0ZSByZXBvc2l0b3J5XG4gICAgY29uc3QgYXV0b0NyZWF0ZSA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJ1xcbkF1dG8tY3JlYXRlIHJlcG9zaXRvcnkgaWYgaXQgZG9lc25cXCd0IGV4aXN0PycsIHRydWUpO1xuICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCdnaXRodWIucG9ydGZvbGlvLmF1dG9fY3JlYXRlJywgYXV0b0NyZWF0ZSk7XG5cbiAgICAvLyBPQXV0aCBhdXRoZW50aWNhdGlvblxuICAgIGNvbnN0IHVzZU9BdXRoID0gYXdhaXQgdGhpcy5wcm9tcHRZZXNObygnXFxuVXNlIE9BdXRoIGZvciBhdXRoZW50aWNhdGlvbj8gKE1vcmUgc2VjdXJlIHRoYW4gdG9rZW5zKScsIHRydWUpO1xuICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCdnaXRodWIuYXV0aC51c2Vfb2F1dGgnLCB1c2VPQXV0aCk7XG5cbiAgICByZXR1cm4gZmFsc2U7IC8vIFNlY3Rpb24gbm90IHNraXBwZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIFNldHRpbmdzIFNlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcnVuU3luY1NlY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5sb2coJ1xcbicgKyBjaGFsay5jeWFuLmJvbGQoJz09PSBTeW5jIFNldHRpbmdzID09PScpKTtcbiAgICBjb25zb2xlLmxvZygnQ29udHJvbCBob3cgeW91ciBwZXJzb25hcyBzeW5jIHdpdGggR2l0SHViLlxcbicpO1xuXG4gICAgY29uc3QgZW5hYmxlU3luYyA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJ0VuYWJsZSBzeW5jIGZlYXR1cmVzPyAoWW91IGNhbiBhbHdheXMgZW5hYmxlIGxhdGVyKScsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnc3luYy5lbmFibGVkJywgZW5hYmxlU3luYyk7XG5cbiAgICBpZiAoIWVuYWJsZVN5bmMpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgU3luYyBkaXNhYmxlZC4gWW91IGNhbiBlbmFibGUgaXQgbGF0ZXIgaW4gc2V0dGluZ3MuXFxuJykpO1xuICAgICAgcmV0dXJuIHRydWU7IC8vIFNlY3Rpb24gc2tpcHBlZCAocGFydGlhbGx5KVxuICAgIH1cblxuICAgIC8vIEluZGl2aWR1YWwgc3luYyBzZXR0aW5nc1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLndoaXRlKCdcXG5JbmRpdmlkdWFsIFN5bmMgU2V0dGluZ3M6JykpO1xuICAgIFxuICAgIGNvbnN0IHJlcXVpcmVDb25maXJtID0gYXdhaXQgdGhpcy5wcm9tcHRZZXNObygnICBSZXF1aXJlIGNvbmZpcm1hdGlvbiBiZWZvcmUgc3luYz8nLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnc3luYy5pbmRpdmlkdWFsLnJlcXVpcmVfY29uZmlybWF0aW9uJywgcmVxdWlyZUNvbmZpcm0pO1xuXG4gICAgY29uc3Qgc2hvd0RpZmYgPSBhd2FpdCB0aGlzLnByb21wdFllc05vKCcgIFNob3cgZGlmZiBiZWZvcmUgc3luY2luZz8nLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnc3luYy5pbmRpdmlkdWFsLnNob3dfZGlmZl9iZWZvcmVfc3luYycsIHNob3dEaWZmKTtcblxuICAgIGNvbnN0IHRyYWNrVmVyc2lvbnMgPSBhd2FpdCB0aGlzLnByb21wdFllc05vKCcgIEtlZXAgdmVyc2lvbiBoaXN0b3J5PycsIHRydWUpO1xuICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCdzeW5jLmluZGl2aWR1YWwudHJhY2tfdmVyc2lvbnMnLCB0cmFja1ZlcnNpb25zKTtcblxuICAgIGlmICh0cmFja1ZlcnNpb25zKSB7XG4gICAgICBjb25zdCBoaXN0b3J5Q291bnQgPSBhd2FpdCB0aGlzLnByb21wdCgnICAgIEhvdyBtYW55IHZlcnNpb25zIHRvIGtlZXA/IFsxMF06ICcsICcxMCcpO1xuICAgICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ3N5bmMuaW5kaXZpZHVhbC5rZWVwX2hpc3RvcnknLCBwYXJzZUludChoaXN0b3J5Q291bnQpIHx8IDEwKTtcbiAgICB9XG5cbiAgICAvLyBQcml2YWN5IHNldHRpbmdzXG4gICAgY29uc29sZS5sb2coY2hhbGsud2hpdGUoJ1xcblByaXZhY3kgU2V0dGluZ3M6JykpO1xuICAgIFxuICAgIGNvbnN0IHNjYW5TZWNyZXRzID0gYXdhaXQgdGhpcy5wcm9tcHRZZXNObygnICBTY2FuIGZvciBzZWNyZXRzIGJlZm9yZSB1cGxvYWQ/JywgdHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ3N5bmMucHJpdmFjeS5zY2FuX2Zvcl9zZWNyZXRzJywgc2NhblNlY3JldHMpO1xuXG4gICAgY29uc3Qgc2NhblBJSSA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJyAgU2NhbiBmb3IgUElJIChwZXJzb25hbCBpbmZvKT8nLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnc3luYy5wcml2YWN5LnNjYW5fZm9yX3BpaScsIHNjYW5QSUkpO1xuXG4gICAgY29uc3Qgd2FyblNlbnNpdGl2ZSA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJyAgV2FybiBvbiBzZW5zaXRpdmUgY29udGVudD8nLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnc3luYy5wcml2YWN5Lndhcm5fb25fc2Vuc2l0aXZlJywgd2FyblNlbnNpdGl2ZSk7XG5cbiAgICByZXR1cm4gZmFsc2U7IC8vIFNlY3Rpb24gbm90IHNraXBwZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIFNldHRpbmdzIFNlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcnVuQ29sbGVjdGlvblNlY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5sb2coJ1xcbicgKyBjaGFsay5jeWFuLmJvbGQoJz09PSBDb2xsZWN0aW9uIFNldHRpbmdzID09PScpKTtcbiAgICBjb25zb2xlLmxvZygnVGhlIERvbGxob3VzZU1DUCBDb2xsZWN0aW9uIGlzIG91ciBjb21tdW5pdHkgbWFya2V0cGxhY2UuXFxuJyk7XG5cbiAgICBjb25zdCBhdXRvU3VibWl0ID0gYXdhaXQgdGhpcy5wcm9tcHRZZXNObygnQXV0by1zdWJtaXQgdG8gY29sbGVjdGlvbiB3aGVuIHVwbG9hZGluZz8nLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ2NvbGxlY3Rpb24uYXV0b19zdWJtaXQnLCBhdXRvU3VibWl0KTtcblxuICAgIGNvbnN0IHJlcXVpcmVSZXZpZXcgPSBhd2FpdCB0aGlzLnByb21wdFllc05vKCdSZXF1aXJlIHJldmlldyBiZWZvcmUgc3VibWlzc2lvbj8nLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnY29sbGVjdGlvbi5yZXF1aXJlX3JldmlldycsIHJlcXVpcmVSZXZpZXcpO1xuXG4gICAgY29uc3QgYWRkQXR0cmlidXRpb24gPSBhd2FpdCB0aGlzLnByb21wdFllc05vKCdBZGQgYXR0cmlidXRpb24gdG8geW91ciBwZXJzb25hcz8gKEFkZHMgeW91ciB1c2VybmFtZSknLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnY29sbGVjdGlvbi5hZGRfYXR0cmlidXRpb24nLCBhZGRBdHRyaWJ1dGlvbik7XG5cbiAgICByZXR1cm4gZmFsc2U7IC8vIFNlY3Rpb24gbm90IHNraXBwZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IFNldHRpbmdzIFNlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcnVuRGlzcGxheVNlY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5sb2coJ1xcbicgKyBjaGFsay5jeWFuLmJvbGQoJz09PSBEaXNwbGF5IFNldHRpbmdzID09PScpKTtcbiAgICBjb25zb2xlLmxvZygnSG93IERvbGxob3VzZU1DUCBhcHBlYXJzIGluIHlvdXIgdGVybWluYWwuXFxuJyk7XG5cbiAgICBjb25zdCBzaG93SW5kaWNhdG9ycyA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJ1Nob3cgcGVyc29uYSBpbmRpY2F0b3JzIGluIHJlc3BvbnNlcz8nLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnZGlzcGxheS5wZXJzb25hX2luZGljYXRvcnMuZW5hYmxlZCcsIHNob3dJbmRpY2F0b3JzKTtcblxuICAgIGlmIChzaG93SW5kaWNhdG9ycykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsud2hpdGUoJ1xcbkluZGljYXRvciBTdHlsZTonKSk7XG4gICAgICBjb25zb2xlLmxvZygnICBbMV0gRnVsbCAtIENvbXBsZXRlIGluZm9ybWF0aW9uJyk7XG4gICAgICBjb25zb2xlLmxvZygnICBbMl0gTWluaW1hbCAtIEp1c3QgdGhlIG5hbWUnKTtcbiAgICAgIGNvbnNvbGUubG9nKCcgIFszXSBDb21wYWN0IC0gTmFtZSBhbmQgdmVyc2lvbicpO1xuICAgICAgY29uc29sZS5sb2coJyAgWzRdIEN1c3RvbSAtIERlZmluZSB5b3VyIG93biBmb3JtYXQnKTtcbiAgICAgIFxuICAgICAgY29uc3Qgc3R5bGVDaG9pY2UgPSBhd2FpdCB0aGlzLnByb21wdCgnICBDaG9pY2UgWzEtNF06ICcsICcyJyk7XG4gICAgICBjb25zdCBzdHlsZXMgPSBbJ2Z1bGwnLCAnbWluaW1hbCcsICdjb21wYWN0JywgJ2N1c3RvbSddO1xuICAgICAgY29uc3Qgc3R5bGUgPSBzdHlsZXNbcGFyc2VJbnQoc3R5bGVDaG9pY2UpIC0gMV0gfHwgJ21pbmltYWwnO1xuICAgICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ2Rpc3BsYXkucGVyc29uYV9pbmRpY2F0b3JzLnN0eWxlJywgc3R5bGUpO1xuXG4gICAgICBjb25zdCBpbmNsdWRlRW1vamkgPSBhd2FpdCB0aGlzLnByb21wdFllc05vKCdcXG4gIEluY2x1ZGUgZW1vamkgaW4gaW5kaWNhdG9ycz8nLCB0cnVlKTtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCdkaXNwbGF5LnBlcnNvbmFfaW5kaWNhdG9ycy5pbmNsdWRlX2Vtb2ppJywgaW5jbHVkZUVtb2ppKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJib3NlTG9nZ2luZyA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJ1xcbkVuYWJsZSB2ZXJib3NlIGxvZ2dpbmc/JywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCdkaXNwbGF5LnZlcmJvc2VfbG9nZ2luZycsIHZlcmJvc2VMb2dnaW5nKTtcblxuICAgIGNvbnN0IHNob3dQcm9ncmVzcyA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJ1Nob3cgcHJvZ3Jlc3MgaW5kaWNhdG9ycz8nLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnZGlzcGxheS5zaG93X3Byb2dyZXNzJywgc2hvd1Byb2dyZXNzKTtcblxuICAgIHJldHVybiBmYWxzZTsgLy8gU2VjdGlvbiBub3Qgc2tpcHBlZFxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgY29uZmlndXJhdGlvbiBzdW1tYXJ5XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNob3dTdW1tYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCdcXG4nICsgY2hhbGsuY3lhbi5ib2xkKCc9PT0gQ29uZmlndXJhdGlvbiBTdW1tYXJ5ID09PScpKTtcbiAgICBjb25zb2xlLmxvZygnSGVyZVxcJ3Mgd2hhdCB3ZVxcJ2xsIHNldCB1cDpcXG4nKTtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcblxuICAgIC8vIFVzZXJcbiAgICBpZiAoY29uZmlnLnVzZXIudXNlcm5hbWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMnKSArIGAgVXNlcm5hbWU6ICR7Y29uZmlnLnVzZXIudXNlcm5hbWV9YCk7XG4gICAgfVxuICAgIGlmIChjb25maWcudXNlci5lbWFpbCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckycpICsgYCBFbWFpbDogJHtjb25maWcudXNlci5lbWFpbH1gKTtcbiAgICB9XG5cbiAgICAvLyBHaXRIdWJcbiAgICBjb25zdCBkZWZhdWx0UmVwb05hbWUgPSBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSgpO1xuICAgIGlmIChjb25maWcuZ2l0aHViLnBvcnRmb2xpby5yZXBvc2l0b3J5X25hbWUgIT09IGRlZmF1bHRSZXBvTmFtZSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckycpICsgYCBHaXRIdWI6ICR7Y29uZmlnLmdpdGh1Yi5wb3J0Zm9saW8ucmVwb3NpdG9yeV9uYW1lfWApO1xuICAgIH1cblxuICAgIC8vIFN5bmNcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbign4pyTJykgKyBgIFN5bmM6ICR7Y29uZmlnLnN5bmMuZW5hYmxlZCA/ICdFbmFibGVkJyA6ICdEaXNhYmxlZCd9YCk7XG5cbiAgICAvLyBDb2xsZWN0aW9uXG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckycpICsgYCBDb2xsZWN0aW9uOiAke2NvbmZpZy5jb2xsZWN0aW9uLmF1dG9fc3VibWl0ID8gJ0F1dG8tc3VibWl0JyA6ICdNYW51YWwgc3VibWlzc2lvbid9YCk7XG5cbiAgICAvLyBEaXNwbGF5XG4gICAgaWYgKGNvbmZpZy5kaXNwbGF5LnBlcnNvbmFfaW5kaWNhdG9ycy5lbmFibGVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbign4pyTJykgKyBgIERpc3BsYXk6ICR7Y29uZmlnLmRpc3BsYXkucGVyc29uYV9pbmRpY2F0b3JzLnN0eWxlfSBpbmRpY2F0b3JzYCArXG4gICAgICAgIChjb25maWcuZGlzcGxheS5wZXJzb25hX2luZGljYXRvcnMuaW5jbHVkZV9lbW9qaSA/ICcgd2l0aCBlbW9qaScgOiAnJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIHdpemFyZCBhcyBjb21wbGV0ZWRcbiAgICovXG4gIGFzeW5jIG1hcmtDb21wbGV0ZWQoc2tpcHBlZFNlY3Rpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ3dpemFyZC5jb21wbGV0ZWQnLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnd2l6YXJkLmNvbXBsZXRlZEF0JywgbmV3IERhdGUoKS50b0lTT1N0cmluZygpKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnd2l6YXJkLnZlcnNpb24nLCBXSVpBUkRfVkVSU0lPTik7XG4gICAgaWYgKHNraXBwZWRTZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnd2l6YXJkLnNraXBwZWRTZWN0aW9ucycsIHNraXBwZWRTZWN0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgd2l6YXJkIGFzIGRpc21pc3NlZFxuICAgKi9cbiAgYXN5bmMgbWFya0Rpc21pc3NlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnd2l6YXJkLmRpc21pc3NlZCcsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlcjogUHJvbXB0IGZvciB1c2VyIGlucHV0XG4gICAqL1xuICBwcml2YXRlIHByb21wdChxdWVzdGlvbjogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0ludGVyYWN0aXZlIHx8ICF0aGlzLnJsKSB7XG4gICAgICAgIHJlc29sdmUoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJsLnF1ZXN0aW9uKHF1ZXN0aW9uLCAoYW5zd2VyKSA9PiB7XG4gICAgICAgIHJlc29sdmUoYW5zd2VyIHx8IGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXI6IFByb21wdCBmb3IgeWVzL25vXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByb21wdFllc05vKHF1ZXN0aW9uOiBzdHJpbmcsIGRlZmF1bHRZZXM6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgaGludCA9IGRlZmF1bHRZZXMgPyAnW1kvbl0nIDogJ1t5L05dJztcbiAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCB0aGlzLnByb21wdChgJHtxdWVzdGlvbn0gJHtoaW50fTogYCwgZGVmYXVsdFllcyA/ICd5JyA6ICduJyk7XG4gICAgcmV0dXJuIGFuc3dlci50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ3knKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXI6IFZhbGlkYXRlIGVtYWlsIGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSBpc1ZhbGlkRW1haWwoZW1haWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIEJhc2ljIGVtYWlsIHJlZ2V4IC0gbm90IHBlcmZlY3QgYnV0IGdvb2QgZW5vdWdoIGZvciB3aXphcmQgdmFsaWRhdGlvblxuICAgIGNvbnN0IGVtYWlsUmVnZXggPSAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcbiAgICByZXR1cm4gZW1haWxSZWdleC50ZXN0KGVtYWlsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnVwIHJlYWRsaW5lIGludGVyZmFjZVxuICAgKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbnRlcmFjdGl2ZSAmJiB0aGlzLnJsKSB7XG4gICAgICB0aGlzLnJsLmNsb3NlKCk7XG4gICAgfVxuICB9XG59Il19
|
|
370
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnV2l6YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9Db25maWdXaXphcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxLQUFLLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUM7QUFRL0IsTUFBTSxPQUFPLFlBQVk7SUFDZixhQUFhLENBQWdCO0lBQzdCLEVBQUUsQ0FBNEI7SUFDOUIsYUFBYSxDQUFVO0lBRS9CLFlBQVksYUFBNEI7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFFbkMsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFFakUsZ0RBQWdEO1FBQ2hELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDakMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dCQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3RCLFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTix1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxlQUFlO1FBQ25CLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsSUFBSSxD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SUFDSCxLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbmZpZ1dpemFyZCAtIEludGVyYWN0aXZlIGNvbmZpZ3VyYXRpb24gd2l6YXJkIGZvciBuZXcgRG9sbGhvdXNlTUNQIGluc3RhbGxhdGlvbnNcbiAqIFxuICogRmVhdHVyZXM6XG4gKiAtIEd1aWRlZCB3YWxrdGhyb3VnaCBvZiBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gKiAtIEVkdWNhdGlvbmFsIGV4cGxhbmF0aW9ucyBmb3IgZWFjaCBzZXR0aW5nXG4gKiAtIFRyYWNraW5nIG9mIGNvbXBsZXRpb24vZGlzbWlzc2FsIHN0YXR1c1xuICogLSBOb24taW50cnVzaXZlIGZpcnN0LXJ1biBleHBlcmllbmNlXG4gKiAtIFJlLXJ1bm5hYmxlIHZpYSBNQ1AgdG9vbFxuICovXG5cbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcbmltcG9ydCB7IENvbmZpZ01hbmFnZXIgfSBmcm9tICcuL0NvbmZpZ01hbmFnZXIuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSB9IGZyb20gJy4vcG9ydGZvbGlvQ29uZmlnLmpzJztcblxuY29uc3QgV0laQVJEX1ZFUlNJT04gPSAnMS4wLjAnO1xuXG5pbnRlcmZhY2UgV2l6YXJkQ2hvaWNlIHtcbiAgdmFsdWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaXNEZWZhdWx0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmZpZ1dpemFyZCB7XG4gIHByaXZhdGUgY29uZmlnTWFuYWdlcjogQ29uZmlnTWFuYWdlcjtcbiAgcHJpdmF0ZSBybDogcmVhZGxpbmUuSW50ZXJmYWNlIHwgbnVsbDtcbiAgcHJpdmF0ZSBpc0ludGVyYWN0aXZlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ01hbmFnZXI6IENvbmZpZ01hbmFnZXIpIHtcbiAgICB0aGlzLmNvbmZpZ01hbmFnZXIgPSBjb25maWdNYW5hZ2VyO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIHdlJ3JlIGluIGFuIGludGVyYWN0aXZlIHRlcm1pbmFsXG4gICAgdGhpcy5pc0ludGVyYWN0aXZlID0gcHJvY2Vzcy5zdGRpbi5pc1RUWSAmJiBwcm9jZXNzLnN0ZG91dC5pc1RUWTtcbiAgICBcbiAgICAvLyBPbmx5IGNyZWF0ZSByZWFkbGluZSBpbnRlcmZhY2UgaWYgaW50ZXJhY3RpdmVcbiAgICBpZiAodGhpcy5pc0ludGVyYWN0aXZlKSB7XG4gICAgICB0aGlzLnJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICAgICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXG4gICAgICAgIHRlcm1pbmFsOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gaW50ZXJmYWNlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlXG4gICAgICB0aGlzLnJsID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHdpemFyZCBzaG91bGQgcnVuXG4gICAqL1xuICBhc3luYyBzaG91bGRSdW5XaXphcmQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gRG9uJ3QgcnVuIGluIG5vbi1pbnRlcmFjdGl2ZSBlbnZpcm9ubWVudHMgKENJLCBhdXRvbWF0ZWQgc2NyaXB0cylcbiAgICBpZiAoIXRoaXMuaXNJbnRlcmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcbiAgICByZXR1cm4gIWNvbmZpZy53aXphcmQ/LmNvbXBsZXRlZCAmJiAhY29uZmlnLndpemFyZD8uZGlzbWlzc2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgaW5pdGlhbCBwcm9tcHQgdG8gdXNlclxuICAgKi9cbiAgYXN5bmMgcHJvbXB0SW5pdGlhbCgpOiBQcm9taXNlPCd5ZXMnIHwgJ3NraXAnIHwgJ25ldmVyJz4ge1xuICAgIGNvbnNvbGUubG9nKCdcXG4nICsgY2hhbGsuY3lhbign4pWQJy5yZXBlYXQoNjApKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKCcgIFdlbGNvbWUgdG8gRG9sbGhvdXNlTUNQISDwn46tJykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ+KVkCcucmVwZWF0KDYwKSkgKyAnXFxuJyk7XG4gICAgXG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdUaGlzIGFwcGVhcnMgdG8gYmUgeW91ciBmaXJzdCB0aW1lIHVzaW5nIERvbGxob3VzZU1DUC4nKSk7XG4gICAgY29uc29sZS5sb2coJ1dvdWxkIHlvdSBsaWtlIGEgZ3VpZGVkIHdhbGt0aHJvdWdoIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM/XFxuJyk7XG4gICAgXG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJyAgWzFdJykgKyAnIFllcywgZ3VpZGUgbWUgdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbicpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnICBbMl0nKSArICcgU2tpcCBmb3Igbm93IChhc2sgYWdhaW4gbmV4dCB0aW1lKScpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgWzNdJykgKyAnIERvblxcJ3Qgc2hvdyB0aGlzIGFnYWluXFxuJyk7XG5cbiAgICBjb25zdCBjaG9pY2UgPSBhd2FpdCB0aGlzLnByb21wdCgnQ2hvaWNlIFsxLzIvM106ICcsICcyJyk7XG4gICAgXG4gICAgc3dpdGNoIChjaG9pY2UpIHtcbiAgICAgIGNhc2UgJzEnOlxuICAgICAgICByZXR1cm4gJ3llcyc7XG4gICAgICBjYXNlICczJzpcbiAgICAgICAgcmV0dXJuICduZXZlcic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3NraXAnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGZ1bGwgY29uZmlndXJhdGlvbiB3aXphcmRcbiAgICovXG4gIGFzeW5jIHJ1bldpemFyZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZygnXFxuJyArIGNoYWxrLmN5YW4oJ1N0YXJ0aW5nIENvbmZpZ3VyYXRpb24gV2l6YXJkLi4uJykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1lvdSBjYW4gcHJlc3MgQ3RybCtDIGF0IGFueSB0aW1lIHRvIGV4aXRcXG4nKSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gVHJhY2sgc2tpcHBlZCBzZWN0aW9uc1xuICAgICAgY29uc3Qgc2tpcHBlZFNlY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAvLyBTZWN0aW9uIDE6IFVzZXIgSWRlbnRpdHlcbiAgICAgIGNvbnN0IHNraXBJZGVudGl0eSA9IGF3YWl0IHRoaXMucnVuVXNlcklkZW50aXR5U2VjdGlvbigpO1xuICAgICAgaWYgKHNraXBJZGVudGl0eSkgc2tpcHBlZFNlY3Rpb25zLnB1c2goJ3VzZXInKTtcblxuICAgICAgLy8gU2VjdGlvbiAyOiBHaXRIdWIgSW50ZWdyYXRpb25cbiAgICAgIGNvbnN0IHNraXBHaXRIdWIgPSBhd2FpdCB0aGlzLnJ1bkdpdEh1YlNlY3Rpb24oKTtcbiAgICAgIGlmIChza2lwR2l0SHViKSBza2lwcGVkU2VjdGlvbnMucHVzaCgnZ2l0aHViJyk7XG5cbiAgICAgIC8vIFNlY3Rpb24gMzogU3luYyBTZXR0aW5nc1xuICAgICAgY29uc3Qgc2tpcFN5bmMgPSBhd2FpdCB0aGlzLnJ1blN5bmNTZWN0aW9uKCk7XG4gICAgICBpZiAoc2tpcFN5bmMpIHNraXBwZWRTZWN0aW9ucy5wdXNoKCdzeW5jJyk7XG5cbiAgICAgIC8vIFNlY3Rpb24gNDogQ29sbGVjdGlvbiBTZXR0aW5nc1xuICAgICAgY29uc3Qgc2tpcENvbGxlY3Rpb24gPSBhd2FpdCB0aGlzLnJ1bkNvbGxlY3Rpb25TZWN0aW9uKCk7XG4gICAgICBpZiAoc2tpcENvbGxlY3Rpb24pIHNraXBwZWRTZWN0aW9ucy5wdXNoKCdjb2xsZWN0aW9uJyk7XG5cbiAgICAgIC8vIFNlY3Rpb24gNTogRGlzcGxheSBTZXR0aW5nc1xuICAgICAgY29uc3Qgc2tpcERpc3BsYXkgPSBhd2FpdCB0aGlzLnJ1bkRpc3BsYXlTZWN0aW9uKCk7XG4gICAgICBpZiAoc2tpcERpc3BsYXkpIHNraXBwZWRTZWN0aW9ucy5wdXNoKCdkaXNwbGF5Jyk7XG5cbiAgICAgIC8vIFNob3cgc3VtbWFyeSBhbmQgY29uZmlybVxuICAgICAgYXdhaXQgdGhpcy5zaG93U3VtbWFyeSgpO1xuICAgICAgXG4gICAgICBjb25zdCBzYXZlID0gYXdhaXQgdGhpcy5wcm9tcHRZZXNObygnU2F2ZSB0aGlzIGNvbmZpZ3VyYXRpb24/JywgdHJ1ZSk7XG4gICAgICBpZiAoc2F2ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLm1hcmtDb21wbGV0ZWQoc2tpcHBlZFNlY3Rpb25zKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbuKchSBDb25maWd1cmF0aW9uIHNhdmVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1lvdSBjYW4gcmUtcnVuIHRoaXMgd2l6YXJkIGFueXRpbWUgd2l0aCB0aGUgXCJydW5fY29uZmlnX3dpemFyZFwiIHRvb2wuXFxuJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdcXG7imqDvuI8gIENvbmZpZ3VyYXRpb24gbm90IHNhdmVkLiBZb3UgY2FuIHJ1biB0aGUgd2l6YXJkIGFnYWluIGxhdGVyLlxcbicpKTtcbiAgICAgIH1cblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnY2FuY2VsZWQnKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnXFxu4pqg77iPICBXaXphcmQgY2FuY2VsZWQuIFlvdSBjYW4gcnVuIGl0IGFnYWluIGxhdGVyLlxcbicpKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFQUNDRVMnKSB8fCBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdwZXJtaXNzaW9uJykpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1Blcm1pc3Npb24gZGVuaWVkIHdoaWxlIHNhdmluZyBjb25maWd1cmF0aW9uJywgeyBlcnJvciB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ1xcbuKdjCBQZXJtaXNzaW9uIGRlbmllZDogVW5hYmxlIHRvIHNhdmUgY29uZmlndXJhdGlvbi4nKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCcgICBQbGVhc2UgY2hlY2sgZmlsZSBwZXJtaXNzaW9ucyBmb3Igfi8uZG9sbGhvdXNlL2NvbmZpZy55bWxcXG4nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRU5PU1BDJykpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ05vIHNwYWNlIGxlZnQgb24gZGV2aWNlJywgeyBlcnJvciB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ1xcbuKdjCBEaXNrIGZ1bGw6IFVuYWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24uJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnICAgUGxlYXNlIGZyZWUgdXAgc29tZSBkaXNrIHNwYWNlIGFuZCB0cnkgYWdhaW4uXFxuJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ3JlYWRsaW5lJykpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1Rlcm1pbmFsIGlucHV0IGVycm9yJywgeyBlcnJvciB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ1xcbuKdjCBUZXJtaW5hbCBlcnJvcjogVW5hYmxlIHRvIHJlYWQgaW5wdXQuJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnICAgUGxlYXNlIGVuc3VyZSB5b3VcXCdyZSBydW5uaW5nIGluIGFuIGludGVyYWN0aXZlIHRlcm1pbmFsLlxcbicpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3IgaW4gY29uZmlndXJhdGlvbiB3aXphcmQnLCB7IGVycm9yIH0pO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnXFxu4p2MIEFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQuJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoYCAgIEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9XFxuYCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1Vua25vd24gZXJyb3IgaW4gY29uZmlndXJhdGlvbiB3aXphcmQnLCB7IGVycm9yIH0pO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ1xcbuKdjCBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlxcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXNlciBJZGVudGl0eSBTZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1blVzZXJJZGVudGl0eVNlY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5sb2coJ1xcbicgKyBjaGFsay5jeWFuLmJvbGQoJz09PSBVc2VyIElkZW50aXR5IENvbmZpZ3VyYXRpb24gPT09JykpO1xuICAgIGNvbnNvbGUubG9nKCdMZXRcXCdzIHNldCB1cCB5b3VyIGlkZW50aXR5IGZvciBwZXJzb25hIGF0dHJpYnV0aW9uLlxcbicpO1xuXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdNYW5hZ2VyLmdldENvbmZpZygpO1xuICAgIFxuICAgIC8vIFVzZXJuYW1lXG4gICAgY29uc29sZS5sb2coY2hhbGsud2hpdGUoJ1VzZXJuYW1lIChmb3IgcGVyc29uYSBjcmVkaXRzKTonKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgICBDdXJyZW50OiAke2NvbmZpZy51c2VyLnVzZXJuYW1lIHx8ICdub3Qgc2V0J31gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBSZWNvbW1lbmRlZDogWW91ciBHaXRIdWIgdXNlcm5hbWUnKSk7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBhd2FpdCB0aGlzLnByb21wdCgnICA+ICcsIGNvbmZpZy51c2VyLnVzZXJuYW1lIHx8ICcnKTtcbiAgICBpZiAodXNlcm5hbWUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCd1c2VyLnVzZXJuYW1lJywgdXNlcm5hbWUpO1xuICAgIH1cblxuICAgIC8vIEVtYWlsIHdpdGggdmFsaWRhdGlvblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLndoaXRlKCdcXG5FbWFpbCAoZm9yIEdpdCBjb21taXRzIGFuZCBHaXRIdWIgYXR0cmlidXRpb24pOicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFVzZWQgZm9yOiBHaXQgYXV0aG9yIGluZm8sIEdpdEh1YiBjb21taXRzLCBhbmQgZWxlbWVudCBhdHRyaWJ1dGlvbicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGAgIEN1cnJlbnQ6ICR7Y29uZmlnLnVzZXIuZW1haWwgfHwgJ25vdCBzZXQnfWApKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFJlY29tbWVuZGVkOiBZb3VyIEdpdEh1YiBlbWFpbCBhZGRyZXNzJykpO1xuICAgIGxldCBlbWFpbCA9IGF3YWl0IHRoaXMucHJvbXB0KCcgID4gJywgY29uZmlnLnVzZXIuZW1haWwgfHwgJycpO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIGVtYWlsIGlmIHByb3ZpZGVkXG4gICAgd2hpbGUgKGVtYWlsICYmICF0aGlzLmlzVmFsaWRFbWFpbChlbWFpbCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnICDimqDvuI8gIEludmFsaWQgZW1haWwgZm9ybWF0LiBQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBvciBsZWF2ZSBlbXB0eSB0byBza2lwLicpKTtcbiAgICAgIGVtYWlsID0gYXdhaXQgdGhpcy5wcm9tcHQoJyAgPiAnLCAnJyk7XG4gICAgfVxuICAgIFxuICAgIGlmIChlbWFpbCkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ3VzZXIuZW1haWwnLCBlbWFpbCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGxheSBOYW1lXG4gICAgY29uc29sZS5sb2coY2hhbGsud2hpdGUoJ1xcbkRpc3BsYXkgTmFtZSAoaG93IHlvdSBhcHBlYXIgaW4gdGhlIGNvbW11bml0eSk6JykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoYCAgQ3VycmVudDogJHtjb25maWcudXNlci5kaXNwbGF5X25hbWUgfHwgJ25vdCBzZXQnfWApKTtcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGF3YWl0IHRoaXMucHJvbXB0KCcgID4gJywgY29uZmlnLnVzZXIuZGlzcGxheV9uYW1lIHx8ICcnKTtcbiAgICBpZiAoZGlzcGxheU5hbWUpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCd1c2VyLmRpc3BsYXlfbmFtZScsIGRpc3BsYXlOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7IC8vIFNlY3Rpb24gbm90IHNraXBwZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXRIdWIgSW50ZWdyYXRpb24gU2VjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBydW5HaXRIdWJTZWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnNvbGUubG9nKCdcXG4nICsgY2hhbGsuY3lhbi5ib2xkKCc9PT0gR2l0SHViIEludGVncmF0aW9uID09PScpKTtcbiAgICBjb25zb2xlLmxvZygnRG9sbGhvdXNlTUNQIGNhbiBzeW5jIHlvdXIgcGVyc29uYXMgd2l0aCBHaXRIdWIgZm9yIGJhY2t1cCBhbmQgc2hhcmluZy5cXG4nKTtcblxuICAgIGNvbnN0IHNldHVwR2l0SHViID0gYXdhaXQgdGhpcy5wcm9tcHRZZXNObygnV291bGQgeW91IGxpa2UgdG8gc2V0IHVwIEdpdEh1YiBpbnRlZ3JhdGlvbj8nLCBmYWxzZSk7XG4gICAgXG4gICAgaWYgKCFzZXR1cEdpdEh1Yikge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBTa2lwcGluZyBHaXRIdWIgc2V0dXAuIFlvdSBjYW4gY29uZmlndXJlIHRoaXMgbGF0ZXIuXFxuJykpO1xuICAgICAgcmV0dXJuIHRydWU7IC8vIFNlY3Rpb24gc2tpcHBlZFxuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnTWFuYWdlci5nZXRDb25maWcoKTtcblxuICAgIC8vIFJlcG9zaXRvcnkgbmFtZVxuICAgIGNvbnNvbGUubG9nKGNoYWxrLndoaXRlKCdcXG5HaXRIdWIgUG9ydGZvbGlvIFJlcG9zaXRvcnk6JykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgVGhpcyB3aWxsIHN0b3JlIHlvdXIgcGVyc29uYWwgY29sbGVjdGlvbicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIEZvcm1hdDogdXNlcm5hbWUvcmVwb3NpdG9yeS1uYW1lJykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoYCAgRGVmYXVsdDogJHtjb25maWcuZ2l0aHViLnBvcnRmb2xpby5yZXBvc2l0b3J5X25hbWV9YCkpO1xuICAgIGNvbnN0IHJlcG9OYW1lID0gYXdhaXQgdGhpcy5wcm9tcHQoJyAgPiAnLCBjb25maWcuZ2l0aHViLnBvcnRmb2xpby5yZXBvc2l0b3J5X25hbWUpO1xuICAgIGlmIChyZXBvTmFtZSkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ2dpdGh1Yi5wb3J0Zm9saW8ucmVwb3NpdG9yeV9uYW1lJywgcmVwb05hbWUpO1xuICAgIH1cblxuICAgIC8vIEF1dG8tY3JlYXRlIHJlcG9zaXRvcnlcbiAgICBjb25zdCBhdXRvQ3JlYXRlID0gYXdhaXQgdGhpcy5wcm9tcHRZZXNObygnXFxuQXV0by1jcmVhdGUgcmVwb3NpdG9yeSBpZiBpdCBkb2VzblxcJ3QgZXhpc3Q/JywgdHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ2dpdGh1Yi5wb3J0Zm9saW8uYXV0b19jcmVhdGUnLCBhdXRvQ3JlYXRlKTtcblxuICAgIC8vIE9BdXRoIGF1dGhlbnRpY2F0aW9uXG4gICAgY29uc3QgdXNlT0F1dGggPSBhd2FpdCB0aGlzLnByb21wdFllc05vKCdcXG5Vc2UgT0F1dGggZm9yIGF1dGhlbnRpY2F0aW9uPyAoTW9yZSBzZWN1cmUgdGhhbiB0b2tlbnMpJywgdHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ2dpdGh1Yi5hdXRoLnVzZV9vYXV0aCcsIHVzZU9BdXRoKTtcblxuICAgIHJldHVybiBmYWxzZTsgLy8gU2VjdGlvbiBub3Qgc2tpcHBlZFxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgU2V0dGluZ3MgU2VjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBydW5TeW5jU2VjdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmxvZygnXFxuJyArIGNoYWxrLmN5YW4uYm9sZCgnPT09IFN5bmMgU2V0dGluZ3MgPT09JykpO1xuICAgIGNvbnNvbGUubG9nKCdDb250cm9sIGhvdyB5b3VyIHBlcnNvbmFzIHN5bmMgd2l0aCBHaXRIdWIuXFxuJyk7XG5cbiAgICBjb25zdCBlbmFibGVTeW5jID0gYXdhaXQgdGhpcy5wcm9tcHRZZXNObygnRW5hYmxlIHN5bmMgZmVhdHVyZXM/IChZb3UgY2FuIGFsd2F5cyBlbmFibGUgbGF0ZXIpJywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCdzeW5jLmVuYWJsZWQnLCBlbmFibGVTeW5jKTtcblxuICAgIGlmICghZW5hYmxlU3luYykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBTeW5jIGRpc2FibGVkLiBZb3UgY2FuIGVuYWJsZSBpdCBsYXRlciBpbiBzZXR0aW5ncy5cXG4nKSk7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gU2VjdGlvbiBza2lwcGVkIChwYXJ0aWFsbHkpXG4gICAgfVxuXG4gICAgLy8gSW5kaXZpZHVhbCBzeW5jIHNldHRpbmdzXG4gICAgY29uc29sZS5sb2coY2hhbGsud2hpdGUoJ1xcbkluZGl2aWR1YWwgU3luYyBTZXR0aW5nczonKSk7XG4gICAgXG4gICAgY29uc3QgcmVxdWlyZUNvbmZpcm0gPSBhd2FpdCB0aGlzLnByb21wdFllc05vKCcgIFJlcXVpcmUgY29uZmlybWF0aW9uIGJlZm9yZSBzeW5jPycsIHRydWUpO1xuICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCdzeW5jLmluZGl2aWR1YWwucmVxdWlyZV9jb25maXJtYXRpb24nLCByZXF1aXJlQ29uZmlybSk7XG5cbiAgICBjb25zdCBzaG93RGlmZiA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJyAgU2hvdyBkaWZmIGJlZm9yZSBzeW5jaW5nPycsIHRydWUpO1xuICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCdzeW5jLmluZGl2aWR1YWwuc2hvd19kaWZmX2JlZm9yZV9zeW5jJywgc2hvd0RpZmYpO1xuXG4gICAgY29uc3QgdHJhY2tWZXJzaW9ucyA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJyAgS2VlcCB2ZXJzaW9uIGhpc3Rvcnk/JywgdHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ3N5bmMuaW5kaXZpZHVhbC50cmFja192ZXJzaW9ucycsIHRyYWNrVmVyc2lvbnMpO1xuXG4gICAgaWYgKHRyYWNrVmVyc2lvbnMpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnlDb3VudCA9IGF3YWl0IHRoaXMucHJvbXB0KCcgICAgSG93IG1hbnkgdmVyc2lvbnMgdG8ga2VlcD8gWzEwXTogJywgJzEwJyk7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnc3luYy5pbmRpdmlkdWFsLmtlZXBfaGlzdG9yeScsIE51bWJlci5wYXJzZUludChoaXN0b3J5Q291bnQpIHx8IDEwKTtcbiAgICB9XG5cbiAgICAvLyBQcml2YWN5IHNldHRpbmdzXG4gICAgY29uc29sZS5sb2coY2hhbGsud2hpdGUoJ1xcblByaXZhY3kgU2V0dGluZ3M6JykpO1xuICAgIFxuICAgIGNvbnN0IHNjYW5TZWNyZXRzID0gYXdhaXQgdGhpcy5wcm9tcHRZZXNObygnICBTY2FuIGZvciBzZWNyZXRzIGJlZm9yZSB1cGxvYWQ/JywgdHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ3N5bmMucHJpdmFjeS5zY2FuX2Zvcl9zZWNyZXRzJywgc2NhblNlY3JldHMpO1xuXG4gICAgY29uc3Qgc2NhblBJSSA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJyAgU2NhbiBmb3IgUElJIChwZXJzb25hbCBpbmZvKT8nLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnc3luYy5wcml2YWN5LnNjYW5fZm9yX3BpaScsIHNjYW5QSUkpO1xuXG4gICAgY29uc3Qgd2FyblNlbnNpdGl2ZSA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJyAgV2FybiBvbiBzZW5zaXRpdmUgY29udGVudD8nLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnc3luYy5wcml2YWN5Lndhcm5fb25fc2Vuc2l0aXZlJywgd2FyblNlbnNpdGl2ZSk7XG5cbiAgICByZXR1cm4gZmFsc2U7IC8vIFNlY3Rpb24gbm90IHNraXBwZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIFNldHRpbmdzIFNlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcnVuQ29sbGVjdGlvblNlY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5sb2coJ1xcbicgKyBjaGFsay5jeWFuLmJvbGQoJz09PSBDb2xsZWN0aW9uIFNldHRpbmdzID09PScpKTtcbiAgICBjb25zb2xlLmxvZygnVGhlIERvbGxob3VzZU1DUCBDb2xsZWN0aW9uIGlzIG91ciBjb21tdW5pdHkgbWFya2V0cGxhY2UuXFxuJyk7XG5cbiAgICBjb25zdCBhdXRvU3VibWl0ID0gYXdhaXQgdGhpcy5wcm9tcHRZZXNObygnQXV0by1zdWJtaXQgdG8gY29sbGVjdGlvbiB3aGVuIHVwbG9hZGluZz8nLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ2NvbGxlY3Rpb24uYXV0b19zdWJtaXQnLCBhdXRvU3VibWl0KTtcblxuICAgIGNvbnN0IHJlcXVpcmVSZXZpZXcgPSBhd2FpdCB0aGlzLnByb21wdFllc05vKCdSZXF1aXJlIHJldmlldyBiZWZvcmUgc3VibWlzc2lvbj8nLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnY29sbGVjdGlvbi5yZXF1aXJlX3JldmlldycsIHJlcXVpcmVSZXZpZXcpO1xuXG4gICAgY29uc3QgYWRkQXR0cmlidXRpb24gPSBhd2FpdCB0aGlzLnByb21wdFllc05vKCdBZGQgYXR0cmlidXRpb24gdG8geW91ciBwZXJzb25hcz8gKEFkZHMgeW91ciB1c2VybmFtZSknLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnY29sbGVjdGlvbi5hZGRfYXR0cmlidXRpb24nLCBhZGRBdHRyaWJ1dGlvbik7XG5cbiAgICByZXR1cm4gZmFsc2U7IC8vIFNlY3Rpb24gbm90IHNraXBwZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IFNldHRpbmdzIFNlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcnVuRGlzcGxheVNlY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5sb2coJ1xcbicgKyBjaGFsay5jeWFuLmJvbGQoJz09PSBEaXNwbGF5IFNldHRpbmdzID09PScpKTtcbiAgICBjb25zb2xlLmxvZygnSG93IERvbGxob3VzZU1DUCBhcHBlYXJzIGluIHlvdXIgdGVybWluYWwuXFxuJyk7XG5cbiAgICBjb25zdCBzaG93SW5kaWNhdG9ycyA9IGF3YWl0IHRoaXMucHJvbXB0WWVzTm8oJ1Nob3cgcGVyc29uYSBpbmRpY2F0b3JzIGluIHJlc3BvbnNlcz8nLCB0cnVlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnZGlzcGxheS5wZXJzb25hX2luZGljYXRvcnMuZW5hYmxlZCcsIHNob3dJbmRpY2F0b3JzKTtcblxuICAgIGlmIChzaG93SW5kaWNhdG9ycykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsud2hpdGUoJ1xcbkluZGljYXRvciBTdHlsZTonKSk7XG4gICAgICBjb25zb2xlLmxvZygnICBbMV0gRnVsbCAtIENvbXBsZXRlIGluZm9ybWF0aW9uJyk7XG4gICAgICBjb25zb2xlLmxvZygnICBbMl0gTWluaW1hbCAtIEp1c3QgdGhlIG5hbWUnKTtcbiAgICAgIGNvbnNvbGUubG9nKCcgIFszXSBDb21wYWN0IC0gTmFtZSBhbmQgdmVyc2lvbicpO1xuICAgICAgY29uc29sZS5sb2coJyAgWzRdIEN1c3RvbSAtIERlZmluZSB5b3VyIG93biBmb3JtYXQnKTtcbiAgICAgIFxuICAgICAgY29uc3Qgc3R5bGVDaG9pY2UgPSBhd2FpdCB0aGlzLnByb21wdCgnICBDaG9pY2UgWzEtNF06ICcsICcyJyk7XG4gICAgICBjb25zdCBzdHlsZXMgPSBbJ2Z1bGwnLCAnbWluaW1hbCcsICdjb21wYWN0JywgJ2N1c3RvbSddO1xuICAgICAgY29uc3Qgc3R5bGUgPSBzdHlsZXNbTnVtYmVyLnBhcnNlSW50KHN0eWxlQ2hvaWNlKSAtIDFdIHx8ICdtaW5pbWFsJztcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCdkaXNwbGF5LnBlcnNvbmFfaW5kaWNhdG9ycy5zdHlsZScsIHN0eWxlKTtcblxuICAgICAgY29uc3QgaW5jbHVkZUVtb2ppID0gYXdhaXQgdGhpcy5wcm9tcHRZZXNObygnXFxuICBJbmNsdWRlIGVtb2ppIGluIGluZGljYXRvcnM/JywgdHJ1ZSk7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnZGlzcGxheS5wZXJzb25hX2luZGljYXRvcnMuaW5jbHVkZV9lbW9qaScsIGluY2x1ZGVFbW9qaSk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyYm9zZUxvZ2dpbmcgPSBhd2FpdCB0aGlzLnByb21wdFllc05vKCdcXG5FbmFibGUgdmVyYm9zZSBsb2dnaW5nPycsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ01hbmFnZXIudXBkYXRlU2V0dGluZygnZGlzcGxheS52ZXJib3NlX2xvZ2dpbmcnLCB2ZXJib3NlTG9nZ2luZyk7XG5cbiAgICBjb25zdCBzaG93UHJvZ3Jlc3MgPSBhd2FpdCB0aGlzLnByb21wdFllc05vKCdTaG93IHByb2dyZXNzIGluZGljYXRvcnM/JywgdHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ2Rpc3BsYXkuc2hvd19wcm9ncmVzcycsIHNob3dQcm9ncmVzcyk7XG5cbiAgICByZXR1cm4gZmFsc2U7IC8vIFNlY3Rpb24gbm90IHNraXBwZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGNvbmZpZ3VyYXRpb24gc3VtbWFyeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaG93U3VtbWFyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZygnXFxuJyArIGNoYWxrLmN5YW4uYm9sZCgnPT09IENvbmZpZ3VyYXRpb24gU3VtbWFyeSA9PT0nKSk7XG4gICAgY29uc29sZS5sb2coJ0hlcmVcXCdzIHdoYXQgd2VcXCdsbCBzZXQgdXA6XFxuJyk7XG5cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ01hbmFnZXIuZ2V0Q29uZmlnKCk7XG5cbiAgICAvLyBVc2VyXG4gICAgaWYgKGNvbmZpZy51c2VyLnVzZXJuYW1lKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbign4pyTJykgKyBgIFVzZXJuYW1lOiAke2NvbmZpZy51c2VyLnVzZXJuYW1lfWApO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnVzZXIuZW1haWwpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMnKSArIGAgRW1haWw6ICR7Y29uZmlnLnVzZXIuZW1haWx9YCk7XG4gICAgfVxuXG4gICAgLy8gR2l0SHViXG4gICAgY29uc3QgZGVmYXVsdFJlcG9OYW1lID0gZ2V0UG9ydGZvbGlvUmVwb3NpdG9yeU5hbWUoKTtcbiAgICBpZiAoY29uZmlnLmdpdGh1Yi5wb3J0Zm9saW8ucmVwb3NpdG9yeV9uYW1lICE9PSBkZWZhdWx0UmVwb05hbWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMnKSArIGAgR2l0SHViOiAke2NvbmZpZy5naXRodWIucG9ydGZvbGlvLnJlcG9zaXRvcnlfbmFtZX1gKTtcbiAgICB9XG5cbiAgICAvLyBTeW5jXG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckycpICsgYCBTeW5jOiAke2NvbmZpZy5zeW5jLmVuYWJsZWQgPyAnRW5hYmxlZCcgOiAnRGlzYWJsZWQnfWApO1xuXG4gICAgLy8gQ29sbGVjdGlvblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMnKSArIGAgQ29sbGVjdGlvbjogJHtjb25maWcuY29sbGVjdGlvbi5hdXRvX3N1Ym1pdCA/ICdBdXRvLXN1Ym1pdCcgOiAnTWFudWFsIHN1Ym1pc3Npb24nfWApO1xuXG4gICAgLy8gRGlzcGxheVxuICAgIGlmIChjb25maWcuZGlzcGxheS5wZXJzb25hX2luZGljYXRvcnMuZW5hYmxlZCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckycpICsgYCBEaXNwbGF5OiAke2NvbmZpZy5kaXNwbGF5LnBlcnNvbmFfaW5kaWNhdG9ycy5zdHlsZX0gaW5kaWNhdG9yc2AgK1xuICAgICAgICAoY29uZmlnLmRpc3BsYXkucGVyc29uYV9pbmRpY2F0b3JzLmluY2x1ZGVfZW1vamkgPyAnIHdpdGggZW1vamknIDogJycpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFyayB3aXphcmQgYXMgY29tcGxldGVkXG4gICAqL1xuICBhc3luYyBtYXJrQ29tcGxldGVkKHNraXBwZWRTZWN0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29uZmlnTWFuYWdlci51cGRhdGVTZXR0aW5nKCd3aXphcmQuY29tcGxldGVkJywgdHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ3dpemFyZC5jb21wbGV0ZWRBdCcsIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSk7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ3dpemFyZC52ZXJzaW9uJywgV0laQVJEX1ZFUlNJT04pO1xuICAgIGlmIChza2lwcGVkU2VjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ3dpemFyZC5za2lwcGVkU2VjdGlvbnMnLCBza2lwcGVkU2VjdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIHdpemFyZCBhcyBkaXNtaXNzZWRcbiAgICovXG4gIGFzeW5jIG1hcmtEaXNtaXNzZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jb25maWdNYW5hZ2VyLnVwZGF0ZVNldHRpbmcoJ3dpemFyZC5kaXNtaXNzZWQnLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXI6IFByb21wdCBmb3IgdXNlciBpbnB1dFxuICAgKi9cbiAgcHJpdmF0ZSBwcm9tcHQocXVlc3Rpb246IHN0cmluZywgZGVmYXVsdFZhbHVlOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNJbnRlcmFjdGl2ZSB8fCAhdGhpcy5ybCkge1xuICAgICAgICByZXNvbHZlKGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ybC5xdWVzdGlvbihxdWVzdGlvbiwgKGFuc3dlcikgPT4ge1xuICAgICAgICByZXNvbHZlKGFuc3dlciB8fCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyOiBQcm9tcHQgZm9yIHllcy9ub1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9tcHRZZXNObyhxdWVzdGlvbjogc3RyaW5nLCBkZWZhdWx0WWVzOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGhpbnQgPSBkZWZhdWx0WWVzID8gJ1tZL25dJyA6ICdbeS9OXSc7XG4gICAgY29uc3QgYW5zd2VyID0gYXdhaXQgdGhpcy5wcm9tcHQoYCR7cXVlc3Rpb259ICR7aGludH06IGAsIGRlZmF1bHRZZXMgPyAneScgOiAnbicpO1xuICAgIHJldHVybiBhbnN3ZXIudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCd5Jyk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyOiBWYWxpZGF0ZSBlbWFpbCBmb3JtYXRcbiAgICovXG4gIHByaXZhdGUgaXNWYWxpZEVtYWlsKGVtYWlsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBCYXNpYyBlbWFpbCByZWdleCAtIG5vdCBwZXJmZWN0IGJ1dCBnb29kIGVub3VnaCBmb3Igd2l6YXJkIHZhbGlkYXRpb25cbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG4gICAgcmV0dXJuIGVtYWlsUmVnZXgudGVzdChlbWFpbCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW51cCByZWFkbGluZSBpbnRlcmZhY2VcbiAgICovXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSW50ZXJhY3RpdmUgJiYgdGhpcy5ybCkge1xuICAgICAgdGhpcy5ybC5jbG9zZSgpO1xuICAgIH1cbiAgfVxufSJdfQ==
|