@dollhousemcp/mcp-server 2.0.0-rc.6 → 2.0.1
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 +52 -61
- package/README.github.md +2 -2
- package/README.md +284 -224
- package/README.md.backup +284 -224
- package/README.npm.md +284 -224
- package/dist/cache/LRUCache.d.ts +3 -0
- package/dist/cache/LRUCache.d.ts.map +1 -1
- package/dist/cache/LRUCache.js +36 -26
- package/dist/config/env.d.ts +14 -4
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +20 -6
- package/dist/di/Container.d.ts +21 -0
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +250 -53
- package/dist/elements/BaseElement.d.ts.map +1 -1
- package/dist/elements/BaseElement.js +5 -10
- package/dist/elements/base/BaseElementManager.d.ts +22 -0
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +47 -7
- package/dist/elements/memories/Memory.d.ts +1 -0
- package/dist/elements/memories/Memory.d.ts.map +1 -1
- package/dist/elements/memories/Memory.js +12 -8
- package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
- package/dist/elements/memories/MemoryManager.js +23 -42
- package/dist/elements/memories/MemorySearchIndex.js +2 -2
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.d.ts.map +1 -1
- package/dist/generated/version.js +3 -3
- package/dist/handlers/EnhancedIndexHandler.js +6 -6
- package/dist/handlers/element-crud/listElements.d.ts +2 -0
- package/dist/handlers/element-crud/listElements.d.ts.map +1 -1
- package/dist/handlers/element-crud/listElements.js +3 -1
- package/dist/handlers/mcp-aql/Gatekeeper.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/Gatekeeper.js +23 -17
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +14 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +110 -14
- package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationRouter.js +13 -1
- package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
- package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationSchema.js +52 -1
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts +53 -0
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -0
- package/dist/handlers/mcp-aql/evaluatePermission.js +132 -0
- package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.js +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/logging/LogHooks.js +11 -11
- package/dist/logging/LogManager.d.ts +0 -2
- package/dist/logging/LogManager.d.ts.map +1 -1
- package/dist/logging/LogManager.js +1 -3
- package/dist/logging/sinks/MemoryLogSink.d.ts +2 -0
- package/dist/logging/sinks/MemoryLogSink.d.ts.map +1 -1
- package/dist/logging/sinks/MemoryLogSink.js +12 -3
- package/dist/logging/types.d.ts +0 -2
- package/dist/logging/types.d.ts.map +1 -1
- package/dist/logging/types.js +1 -1
- package/dist/metrics/GatekeeperMetricsTracker.d.ts +32 -0
- package/dist/metrics/GatekeeperMetricsTracker.d.ts.map +1 -0
- package/dist/metrics/GatekeeperMetricsTracker.js +42 -0
- package/dist/metrics/MetricsManager.d.ts +47 -0
- package/dist/metrics/MetricsManager.d.ts.map +1 -0
- package/dist/metrics/MetricsManager.js +232 -0
- package/dist/metrics/OperationMetricsTracker.d.ts +32 -0
- package/dist/metrics/OperationMetricsTracker.d.ts.map +1 -0
- package/dist/metrics/OperationMetricsTracker.js +53 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts +27 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/DefaultElementProviderCollector.js +69 -0
- package/dist/metrics/collectors/FileLockManagerCollector.d.ts +16 -0
- package/dist/metrics/collectors/FileLockManagerCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/FileLockManagerCollector.js +51 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts +16 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/GatekeeperMetricsCollector.js +76 -0
- package/dist/metrics/collectors/LRUCacheCollector.d.ts +18 -0
- package/dist/metrics/collectors/LRUCacheCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/LRUCacheCollector.js +95 -0
- package/dist/metrics/collectors/OperationMetricsCollector.d.ts +16 -0
- package/dist/metrics/collectors/OperationMetricsCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/OperationMetricsCollector.js +80 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts +17 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/OperationalTelemetryCollector.js +26 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts +14 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/PerformanceMonitorCollector.js +141 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.d.ts +21 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/SecurityMonitorCollector.js +56 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts +15 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/SecurityTelemetryCollector.js +112 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts +16 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts.map +1 -0
- package/dist/metrics/collectors/TriggerMetricsTrackerCollector.js +26 -0
- package/dist/metrics/collectors/index.d.ts +11 -0
- package/dist/metrics/collectors/index.d.ts.map +1 -0
- package/dist/metrics/collectors/index.js +11 -0
- package/dist/metrics/sinks/MemoryMetricsSink.d.ts +22 -0
- package/dist/metrics/sinks/MemoryMetricsSink.d.ts.map +1 -0
- package/dist/metrics/sinks/MemoryMetricsSink.js +121 -0
- package/dist/metrics/types.d.ts +98 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +24 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +1 -7
- package/dist/portfolio/EnhancedIndexManager.d.ts.map +1 -1
- package/dist/portfolio/EnhancedIndexManager.js +18 -18
- package/dist/portfolio/NLPScoringManager.d.ts.map +1 -1
- package/dist/portfolio/NLPScoringManager.js +5 -9
- package/dist/portfolio/PortfolioIndexManager.js +2 -2
- package/dist/portfolio/RelationshipManager.js +2 -2
- package/dist/portfolio/VerbTriggerManager.d.ts.map +1 -1
- package/dist/portfolio/VerbTriggerManager.js +5 -19
- package/dist/portfolio/config/IndexConfig.d.ts.map +1 -1
- package/dist/portfolio/config/IndexConfig.js +1 -12
- package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.d.ts.map +1 -1
- package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.js +3 -15
- package/dist/portfolio/enhanced-index/SemanticRelationshipService.d.ts.map +1 -1
- package/dist/portfolio/enhanced-index/SemanticRelationshipService.js +2 -16
- package/dist/portfolio/types/RelationshipTypes.d.ts.map +1 -1
- package/dist/portfolio/types/RelationshipTypes.js +3 -17
- package/dist/security/audit/config/suppressions.d.ts.map +1 -1
- package/dist/security/audit/config/suppressions.js +36 -8
- package/dist/security/constants.d.ts.map +1 -1
- package/dist/security/constants.js +10 -6
- package/dist/security/fileLockManager.d.ts.map +1 -1
- package/dist/security/fileLockManager.js +8 -6
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +1 -13
- package/dist/security/securityMonitor.d.ts +2 -1
- package/dist/security/securityMonitor.d.ts.map +1 -1
- package/dist/security/securityMonitor.js +14 -3
- package/dist/security/telemetry/SecurityTelemetry.d.ts +16 -0
- package/dist/security/telemetry/SecurityTelemetry.d.ts.map +1 -1
- package/dist/security/telemetry/SecurityTelemetry.js +30 -2
- package/dist/security/tokenManager.d.ts +3 -0
- package/dist/security/tokenManager.d.ts.map +1 -1
- package/dist/security/tokenManager.js +13 -5
- package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
- package/dist/security/validation/BackgroundValidator.js +7 -7
- package/dist/server/startup.d.ts.map +1 -1
- package/dist/server/startup.js +8 -24
- package/dist/server/tools/MCPAQLTools.js +4 -1
- package/dist/services/ActivationStore.d.ts.map +1 -1
- package/dist/services/ActivationStore.js +9 -3
- package/dist/services/FileWatchService.d.ts +1 -0
- package/dist/services/FileWatchService.d.ts.map +1 -1
- package/dist/services/FileWatchService.js +83 -48
- package/dist/services/MetadataService.d.ts.map +1 -1
- package/dist/services/MetadataService.js +7 -2
- package/dist/services/query/ElementQueryService.d.ts.map +1 -1
- package/dist/services/query/ElementQueryService.js +1 -41
- package/dist/services/query/PaginationService.d.ts.map +1 -1
- package/dist/services/query/PaginationService.js +1 -14
- package/dist/services/query/SortService.d.ts.map +1 -1
- package/dist/services/query/SortService.js +1 -6
- package/dist/services/validation/ValidationService.d.ts.map +1 -1
- package/dist/services/validation/ValidationService.js +3 -8
- package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
- package/dist/storage/ElementStorageLayer.js +5 -2
- package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
- package/dist/storage/MemoryStorageLayer.js +5 -2
- package/dist/telemetry/OperationalTelemetry.js +2 -2
- package/dist/utils/EventDeduplicator.d.ts +44 -0
- package/dist/utils/EventDeduplicator.d.ts.map +1 -0
- package/dist/utils/EventDeduplicator.js +93 -0
- package/dist/utils/FileLock.d.ts.map +1 -1
- package/dist/utils/FileLock.js +1 -9
- package/dist/utils/PerformanceMonitor.d.ts.map +1 -1
- package/dist/utils/PerformanceMonitor.js +5 -5
- package/dist/utils/SlidingWindowRateLimiter.d.ts +13 -0
- package/dist/utils/SlidingWindowRateLimiter.d.ts.map +1 -0
- package/dist/utils/SlidingWindowRateLimiter.js +23 -0
- package/dist/web/console/IngestRoutes.d.ts +84 -0
- package/dist/web/console/IngestRoutes.d.ts.map +1 -0
- package/dist/web/console/IngestRoutes.js +252 -0
- package/dist/web/console/LeaderElection.d.ts +89 -0
- package/dist/web/console/LeaderElection.d.ts.map +1 -0
- package/dist/web/console/LeaderElection.js +205 -0
- package/dist/web/console/LeaderForwardingSink.d.ts +61 -0
- package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -0
- package/dist/web/console/LeaderForwardingSink.js +197 -0
- package/dist/web/console/SessionNames.d.ts +46 -0
- package/dist/web/console/SessionNames.d.ts.map +1 -0
- package/dist/web/console/SessionNames.js +257 -0
- package/dist/web/console/UnifiedConsole.d.ts +64 -0
- package/dist/web/console/UnifiedConsole.d.ts.map +1 -0
- package/dist/web/console/UnifiedConsole.js +119 -0
- package/dist/web/contentPipeline.d.ts +58 -0
- package/dist/web/contentPipeline.d.ts.map +1 -0
- package/dist/web/contentPipeline.js +112 -0
- package/dist/web/portDiscovery.d.ts +58 -0
- package/dist/web/portDiscovery.d.ts.map +1 -0
- package/dist/web/portDiscovery.js +143 -0
- package/dist/web/public/app.js +148 -60
- package/dist/web/public/logs.js +638 -0
- package/dist/web/public/metrics.js +682 -0
- package/dist/web/public/permissions.js +394 -0
- package/dist/web/public/sessions.js +369 -0
- package/dist/web/routes/healthRoutes.d.ts +16 -0
- package/dist/web/routes/healthRoutes.d.ts.map +1 -0
- package/dist/web/routes/healthRoutes.js +29 -0
- package/dist/web/routes/logRoutes.d.ts +18 -0
- package/dist/web/routes/logRoutes.d.ts.map +1 -0
- package/dist/web/routes/logRoutes.js +126 -0
- package/dist/web/routes/metricsRoutes.d.ts +17 -0
- package/dist/web/routes/metricsRoutes.d.ts.map +1 -0
- package/dist/web/routes/metricsRoutes.js +90 -0
- package/dist/web/routes/permissionRoutes.d.ts +16 -0
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -0
- package/dist/web/routes/permissionRoutes.js +133 -0
- package/dist/web/routes.d.ts.map +1 -1
- package/dist/web/routes.js +309 -339
- package/dist/web/server.d.ts +21 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +42 -4
- package/dist/web/sinks/WebSSELogSink.d.ts +15 -0
- package/dist/web/sinks/WebSSELogSink.d.ts.map +1 -0
- package/dist/web/sinks/WebSSELogSink.js +22 -0
- package/dist/web/sinks/WebSSEMetricsSink.d.ts +16 -0
- package/dist/web/sinks/WebSSEMetricsSink.d.ts.map +1 -0
- package/dist/web/sinks/WebSSEMetricsSink.js +23 -0
- package/package.json +2 -2
- package/server.json +2 -2
- package/dist/web/public/public/app.js +0 -1878
|
@@ -99,7 +99,7 @@ export class RelationshipManager {
|
|
|
99
99
|
let relationshipsFound = 0;
|
|
100
100
|
// FIX: Add timeout to prevent infinite loops
|
|
101
101
|
const MAX_DISCOVERY_TIME = 3000; // 3 seconds max
|
|
102
|
-
logger.
|
|
102
|
+
logger.debug('Starting relationship discovery');
|
|
103
103
|
// First, ensure semantic relationships are calculated
|
|
104
104
|
// (This is already done in EnhancedIndexManager)
|
|
105
105
|
// Then discover other relationship types
|
|
@@ -492,4 +492,4 @@ export class RelationshipManager {
|
|
|
492
492
|
return stats;
|
|
493
493
|
}
|
|
494
494
|
}
|
|
495
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsYXRpb25zaGlwTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb3J0Zm9saW8vUmVsYXRpb25zaGlwTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUk1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTdkQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQywyQkFBMkI7SUFDM0IsVUFBVSxFQUFFLFlBQVksRUFBRyxnQkFBZ0I7SUFFM0Msc0JBQXNCO0lBQ3RCLElBQUksRUFBRSxTQUFTO0lBQ2YsT0FBTyxFQUFFLE1BQU07SUFFZiwyQkFBMkI7SUFDM0IsZ0JBQWdCLEVBQUUsWUFBWTtJQUM5QixVQUFVLEVBQUUsa0JBQWtCO0lBQzlCLFFBQVEsRUFBRSxhQUFhO0lBQ3ZCLFdBQVcsRUFBRSxVQUFVO0lBRXZCLDBCQUEwQjtJQUMxQixXQUFXLEVBQUUsYUFBYTtJQUMxQixXQUFXLEVBQUUsYUFBYTtJQUUxQixpQ0FBaUM7SUFDakMsUUFBUSxFQUFFLGNBQWM7SUFDeEIsWUFBWSxFQUFFLFVBQVU7SUFDeEIsV0FBVyxFQUFFLGFBQWEsRUFBRyxnQkFBZ0I7SUFDN0MsV0FBVyxFQUFFLGFBQWEsRUFBRyxnQkFBZ0I7SUFFN0MsNkJBQTZCO0lBQzdCLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLFFBQVEsRUFBRSxjQUFjO0lBQ3hCLFlBQVksRUFBRSxVQUFVO0lBRXhCLHlCQUF5QjtJQUN6QixPQUFPLEVBQUUsYUFBYTtJQUN0QixXQUFXLEVBQUUsU0FBUztJQUV0Qix3QkFBd0I7SUFDeEIsVUFBVSxFQUFF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LElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUNqRCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWxhdGlvbnNoaXAgTWFuYWdlciAtIERpc2NvdmVycyBhbmQgbWFuYWdlcyBjcm9zcy1lbGVtZW50IHJlbGF0aW9uc2hpcHNcbiAqXG4gKiBJbXBsZW1lbnRzIEdyYXBoUkFHLXN0eWxlIHJlbGF0aW9uc2hpcCB0cmFja2luZyBiZXR3ZWVuIGVsZW1lbnRzOlxuICogLSBzaW1pbGFyX3RvOiBTZW1hbnRpYyBzaW1pbGFyaXR5IChKYWNjYXJkLWJhc2VkKVxuICogLSB1c2VkX2J5IC8gdXNlczogVXNhZ2UgZGVwZW5kZW5jaWVzXG4gKiAtIHByZXJlcXVpc2l0ZV9mb3IgLyBkZXBlbmRzX29uOiBMZWFybmluZyBwYXRoc1xuICogLSBoZWxwc19kZWJ1ZyAvIGRlYnVnZ2VkX2J5OiBEZWJ1Z2dpbmcgcmVsYXRpb25zaGlwc1xuICogLSBjb250cmFkaWN0cyAvIHN1cHBvcnRzOiBDb25mbGljdGluZyBvciBzdXBwb3J0aW5nIGVsZW1lbnRzXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyByZWxhdGlvbnNoaXAgZGlzY292ZXJ5IGZyb20gY29udGVudFxuICogLSBHcmFwaCB0cmF2ZXJzYWwgZm9yIHJlbGF0aW9uc2hpcCBwYXRoc1xuICogLSBSZWxhdGlvbnNoaXAgc3RyZW5ndGggc2NvcmluZ1xuICogLSBCaWRpcmVjdGlvbmFsIHJlbGF0aW9uc2hpcCB0cmFja2luZ1xuICpcbiAqIEZJWEVTIElNUExFTUVOVEVEIChJc3N1ZSAjMTA5OSk6XG4gKiAtIFVzZXMgY2VudHJhbGl6ZWQgZWxlbWVudCBJRCBwYXJzaW5nIHV0aWxpdGllc1xuICogLSBDb25zaXN0ZW50IElEIGZvcm1hdCBoYW5kbGluZ1xuICovXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBFbmhhbmNlZEluZGV4LCBFbGVtZW50RGVmaW5pdGlvbiB9IGZyb20gJy4vdHlwZXMvSW5kZXhUeXBlcy5qcyc7XG5pbXBvcnQgeyBOTFBTY29yaW5nTWFuYWdlciB9IGZyb20gJy4vTkxQU2NvcmluZ01hbmFnZXIuanMnO1xuaW1wb3J0IHsgVmVyYlRyaWdnZXJNYW5hZ2VyIH0gZnJvbSAnLi9WZXJiVHJpZ2dlck1hbmFnZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBwYXJzZUVsZW1lbnRJZCB9IGZyb20gJy4uL3V0aWxzL2VsZW1lbnRJZC5qcyc7XG5pbXBvcnQgeyBJbmRleENvbmZpZ01hbmFnZXIgfSBmcm9tICcuL2NvbmZpZy9JbmRleENvbmZpZy5qcyc7XG5pbXBvcnQge1xuICBCYXNlUmVsYXRpb25zaGlwXG59IGZyb20gJy4vdHlwZXMvUmVsYXRpb25zaGlwVHlwZXMuanMnO1xuXG4vLyBVc2UgQmFzZVJlbGF0aW9uc2hpcCBpbnN0ZWFkIG9mIGltcG9ydGluZyBSZWxhdGlvbnNoaXAgZnJvbSBFbmhhbmNlZEluZGV4TWFuYWdlclxudHlwZSBSZWxhdGlvbnNoaXAgPSBCYXNlUmVsYXRpb25zaGlwO1xuXG4vKipcbiAqIFJlbGF0aW9uc2hpcCB0eXBlcyBhbmQgdGhlaXIgaW52ZXJzZSBtYXBwaW5nc1xuICovXG5leHBvcnQgY29uc3QgUkVMQVRJT05TSElQX1RZUEVTID0ge1xuICAvLyBTaW1pbGFyaXR5IHJlbGF0aW9uc2hpcHNcbiAgc2ltaWxhcl90bzogJ3NpbWlsYXJfdG8nLCAgLy8gQmlkaXJlY3Rpb25hbFxuXG4gIC8vIFVzYWdlIHJlbGF0aW9uc2hpcHNcbiAgdXNlczogJ3VzZWRfYnknLFxuICB1c2VkX2J5OiAndXNlcycsXG5cbiAgLy8gRGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzXG4gIHByZXJlcXVpc2l0ZV9mb3I6ICdkZXBlbmRzX29uJyxcbiAgZGVwZW5kc19vbjogJ3ByZXJlcXVpc2l0ZV9mb3InLFxuICByZXF1aXJlczogJ3JlcXVpcmVkX2J5JyxcbiAgcmVxdWlyZWRfYnk6ICdyZXF1aXJlcycsXG5cbiAgLy8gRGVidWdnaW5nIHJlbGF0aW9uc2hpcHNcbiAgaGVscHNfZGVidWc6ICdkZWJ1Z2dlZF9ieScsXG4gIGRlYnVnZ2VkX2J5OiAnaGVscHNfZGVidWcnLFxuXG4gIC8vIFN1cHBvcnQvY29uZmxpY3QgcmVsYXRpb25zaGlwc1xuICBzdXBwb3J0czogJ3N1cHBvcnRlZF9ieScsXG4gIHN1cHBvcnRlZF9ieTogJ3N1cHBvcnRzJyxcbiAgY29udHJhZGljdHM6ICdjb250cmFkaWN0cycsICAvLyBCaWRpcmVjdGlvbmFsXG4gIGNvbXBsZW1lbnRzOiAnY29tcGxlbWVudHMnLCAgLy8gQmlkaXJlY3Rpb25hbFxuXG4gIC8vIEhpZXJhcmNoaWNhbCByZWxhdGlvbnNoaXBzXG4gIHBhcmVudF9vZjogJ2NoaWxkX29mJyxcbiAgY2hpbGRfb2Y6ICdwYXJlbnRfb2YnLFxuICBjb250YWluczogJ2NvbnRhaW5lZF9ieScsXG4gIGNvbnRhaW5lZF9ieTogJ2NvbnRhaW5zJyxcblxuICAvLyBUZW1wb3JhbCByZWxhdGlvbnNoaXBzXG4gIGZvbGxvd3M6ICdwcmVjZWRlZF9ieScsXG4gIHByZWNlZGVkX2J5OiAnZm9sbG93cycsXG5cbiAgLy8gRXhhbXBsZSByZWxhdGlvbnNoaXBzXG4gIGV4YW1wbGVfb2Y6ICdoYXNfZXhhbXBsZScsXG4gIGhhc19leGFtcGxlOiAnZXhhbXBsZV9vZidcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uc2hpcFR5cGUgPSBrZXlvZiB0eXBlb2YgUkVMQVRJT05TSElQX1RZUEVTO1xuXG4vKipcbiAqIFJlbGF0aW9uc2hpcCBkaXNjb3ZlcnkgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbGF0aW9uc2hpcENvbmZpZyB7XG4gIC8vIE1pbmltdW0gY29uZmlkZW5jZSB0byBlc3RhYmxpc2ggcmVsYXRpb25zaGlwXG4gIG1pbkNvbmZpZGVuY2U/OiBudW1iZXI7XG5cbiAgLy8gTWF4aW11bSByZWxhdGlvbnNoaXBzIHBlciBlbGVtZW50XG4gIG1heFJlbGF0aW9uc2hpcHNQZXJFbGVtZW50PzogbnVtYmVyO1xuXG4gIC8vIEVuYWJsZSBhdXRvbWF0aWMgZGlzY292ZXJ5XG4gIGVuYWJsZUF1dG9EaXNjb3Zlcnk/OiBib29sZWFuO1xuXG4gIC8vIEN1c3RvbSByZWxhdGlvbnNoaXAgcGF0dGVybnNcbiAgY3VzdG9tUGF0dGVybnM/OiBSZWxhdGlvbnNoaXBQYXR0ZXJuW107XG59XG5cbi8qKlxuICogUGF0dGVybiBmb3IgZGlzY292ZXJpbmcgcmVsYXRpb25zaGlwc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbGF0aW9uc2hpcFBhdHRlcm4ge1xuICB0eXBlOiBSZWxhdGlvbnNoaXBUeXBlO1xuICBwYXR0ZXJuOiBSZWdFeHA7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgYmlkaXJlY3Rpb25hbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogR3JhcGggdHJhdmVyc2FsIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmF2ZXJzYWxPcHRpb25zIHtcbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIHJlbGF0aW9uc2hpcFR5cGVzPzogUmVsYXRpb25zaGlwVHlwZVtdO1xuICBtaW5TdHJlbmd0aD86IG51bWJlcjtcbiAgdmlzaXRlZD86IFNldDxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFBhdGggYmV0d2VlbiBlbGVtZW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRQYXRoIHtcbiAgcGF0aDogc3RyaW5nW107XG4gIHJlbGF0aW9uc2hpcHM6IFJlbGF0aW9uc2hpcFR5cGVbXTtcbiAgdG90YWxTdHJlbmd0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbGF0aW9uc2hpcE1hbmFnZXJPcHRpb25zIHtcbiAgY29uZmlnPzogUmVsYXRpb25zaGlwQ29uZmlnO1xuICBpbmRleENvbmZpZ01hbmFnZXI6IEluZGV4Q29uZmlnTWFuYWdlcjtcbiAgdmVyYlRyaWdnZXJNYW5hZ2VyOiBWZXJiVHJpZ2dlck1hbmFnZXI7XG4gIG5scFNjb3Jpbmc6IE5MUFNjb3JpbmdNYW5hZ2VyO1xufVxuXG5leHBvcnQgY2xhc3MgUmVsYXRpb25zaGlwTWFuYWdlciB7XG4gIHByaXZhdGUgX25scFNjb3Jpbmc6IE5MUFNjb3JpbmdNYW5hZ2VyO1xuICBwcml2YXRlIHZlcmJUcmlnZ2VyczogVmVyYlRyaWdnZXJNYW5hZ2VyO1xuICBwcml2YXRlIGNvbmZpZzogUmVsYXRpb25zaGlwQ29uZmlnO1xuXG4gIC8vIERlZmF1bHQgcGF0dGVybnMgZm9yIHJlbGF0aW9uc2hpcCBkaXNjb3ZlcnlcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UGF0dGVybnM6IFJlbGF0aW9uc2hpcFBhdHRlcm5bXSA9IFtcbiAgICAvLyBVc2FnZSBwYXR0ZXJuc1xuICAgIHsgdHlwZTogJ3VzZXMnLCBwYXR0ZXJuOiAvdXNlcz9cXHMrKFxcdytbLVxcd10qKS9naSwgY29uZmlkZW5jZTogMC44IH0sXG4gICAgeyB0eXBlOiAndXNlcycsIHBhdHRlcm46IC9yZXF1aXJlcz9cXHMrKFxcdytbLVxcd10qKS9naSwgY29uZmlkZW5jZTogMC43IH0sXG4gICAgeyB0eXBlOiAndXNlcycsIHBhdHRlcm46IC9kZXBlbmRzP1xccytvblxccysoXFx3K1stXFx3XSopL2dpLCBjb25maWRlbmNlOiAwLjcgfSxcblxuICAgIC8vIFByZXJlcXVpc2l0ZSBwYXR0ZXJuc1xuICAgIHsgdHlwZTogJ3ByZXJlcXVpc2l0ZV9mb3InLCBwYXR0ZXJuOiAvcHJlcmVxdWlzaXRlXFxzK2ZvclxccysoXFx3K1stXFx3XSopL2dpLCBjb25maWRlbmNlOiAwLjkgfSxcbiAgICB7IHR5cGU6ICdkZXBlbmRzX29uJywgcGF0dGVybjogL2FmdGVyXFxzKyhcXHcrWy1cXHddKikvZ2ksIGNvbmZpZGVuY2U6IDAuNiB9LFxuXG4gICAgLy8gRGVidWcgcGF0dGVybnNcbiAgICB7IHR5cGU6ICdoZWxwc19kZWJ1ZycsIHBhdHRlcm46IC9kZWJ1Zyg/OnN8Z2luZyk/XFxzKyhcXHcrWy1cXHddKikvZ2ksIGNvbmZpZGVuY2U6IDAuNyB9LFxuICAgIHsgdHlwZTogJ2hlbHBzX2RlYnVnJywgcGF0dGVybjogL3Ryb3VibGVzaG9vdCg/OnN8aW5nKT9cXHMrKFxcdytbLVxcd10qKS9naSwgY29uZmlkZW5jZTogMC43IH0sXG5cbiAgICAvLyBTdXBwb3J0IHBhdHRlcm5zXG4gICAgeyB0eXBlOiAnc3VwcG9ydHMnLCBwYXR0ZXJuOiAvc3VwcG9ydHM/XFxzKyhcXHcrWy1cXHddKikvZ2ksIGNvbmZpZGVuY2U6IDAuOCB9LFxuICAgIHsgdHlwZTogJ2NvbXBsZW1lbnRzJywgcGF0dGVybjogL2NvbXBsZW1lbnRzP1xccysoXFx3K1stXFx3XSopL2dpLCBjb25maWRlbmNlOiAwLjggfSxcbiAgICB7IHR5cGU6ICdjb250cmFkaWN0cycsIHBhdHRlcm46IC9jb250cmFkaWN0cz9cXHMrKFxcdytbLVxcd10qKS9naSwgY29uZmlkZW5jZTogMC45IH0sXG5cbiAgICAvLyBFeGFtcGxlIHBhdHRlcm5zXG4gICAgeyB0eXBlOiAnZXhhbXBsZV9vZicsIHBhdHRlcm46IC9leGFtcGxlXFxzK29mXFxzKyhcXHcrWy1cXHddKikvZ2ksIGNvbmZpZGVuY2U6IDAuOSB9LFxuICAgIHsgdHlwZTogJ2hhc19leGFtcGxlJywgcGF0dGVybjogL3NlZVxccysoXFx3K1stXFx3XSopXFxzK2ZvclxccytleGFtcGxlL2dpLCBjb25maWRlbmNlOiAwLjcgfVxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlbGF0aW9uc2hpcE1hbmFnZXJPcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29uZmlnID0ge30sXG4gICAgICB2ZXJiVHJpZ2dlck1hbmFnZXIsXG4gICAgICBubHBTY29yaW5nLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBtaW5Db25maWRlbmNlOiBjb25maWcubWluQ29uZmlkZW5jZSB8fCAwLjUsXG4gICAgICBtYXhSZWxhdGlvbnNoaXBzUGVyRWxlbWVudDogY29uZmlnLm1heFJlbGF0aW9uc2hpcHNQZXJFbGVtZW50IHx8IDIwLFxuICAgICAgZW5hYmxlQXV0b0Rpc2NvdmVyeTogY29uZmlnLmVuYWJsZUF1dG9EaXNjb3ZlcnkgIT09IGZhbHNlLFxuICAgICAgY3VzdG9tUGF0dGVybnM6IGNvbmZpZy5jdXN0b21QYXR0ZXJucyB8fCBbXVxuICAgIH07XG5cbiAgICB0aGlzLl9ubHBTY29yaW5nID0gbmxwU2NvcmluZztcbiAgICB0aGlzLnZlcmJUcmlnZ2VycyA9IHZlcmJUcmlnZ2VyTWFuYWdlcjtcblxuICAgIGxvZ2dlci5kZWJ1ZygnUmVsYXRpb25zaGlwTWFuYWdlciBpbml0aWFsaXplZCcsIHsgY29uZmlnOiB0aGlzLmNvbmZpZyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb3ZlciByZWxhdGlvbnNoaXBzIGZvciBhbGwgZWxlbWVudHMgaW4gdGhlIGluZGV4XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlzY292ZXJSZWxhdGlvbnNoaXBzKGluZGV4OiBFbmhhbmNlZEluZGV4KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgcmVsYXRpb25zaGlwc0ZvdW5kID0gMDtcblxuICAgIC8vIEZJWDogQWRkIHRpbWVvdXQgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wc1xuICAgIGNvbnN0IE1BWF9ESVNDT1ZFUllfVElNRSA9IDMwMDA7IC8vIDMgc2Vjb25kcyBtYXhcblxuICAgIGxvZ2dlci5pbmZvKCdTdGFydGluZyByZWxhdGlvbnNoaXAgZGlzY292ZXJ5Jyk7XG5cbiAgICAvLyBGaXJzdCwgZW5zdXJlIHNlbWFudGljIHJlbGF0aW9uc2hpcHMgYXJlIGNhbGN1bGF0ZWRcbiAgICAvLyAoVGhpcyBpcyBhbHJlYWR5IGRvbmUgaW4gRW5oYW5jZWRJbmRleE1hbmFnZXIpXG5cbiAgICAvLyBUaGVuIGRpc2NvdmVyIG90aGVyIHJlbGF0aW9uc2hpcCB0eXBlc1xuICAgIGZvciAoY29uc3QgW3R5cGUsIGVsZW1lbnRzXSBvZiBPYmplY3QuZW50cmllcyhpbmRleC5lbGVtZW50cykpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnRzKSkge1xuICAgICAgICAvLyBGSVg6IENoZWNrIHRpbWVvdXRcbiAgICAgICAgaWYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiBNQVhfRElTQ09WRVJZX1RJTUUpIHtcbiAgICAgICAgICBsb2dnZXIud2FybignUmVsYXRpb25zaGlwIGRpc2NvdmVyeSB0aW1lb3V0Jywge1xuICAgICAgICAgICAgZWxhcHNlZDogRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSxcbiAgICAgICAgICAgIHJlbGF0aW9uc2hpcHNGb3VuZFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgdGhpcy5kaXNjb3ZlckVsZW1lbnRSZWxhdGlvbnNoaXBzKFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgYCR7dHlwZX06JHtuYW1lfWAsXG4gICAgICAgICAgaW5kZXhcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBNZXJnZSBkaXNjb3ZlcmVkIHJlbGF0aW9uc2hpcHMgd2l0aCBleGlzdGluZyBvbmVzXG4gICAgICAgIGlmIChkaXNjb3ZlcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoIWVsZW1lbnQucmVsYXRpb25zaGlwcykge1xuICAgICAgICAgICAgZWxlbWVudC5yZWxhdGlvbnNoaXBzID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCByZWwgb2YgZGlzY292ZXJlZCkge1xuICAgICAgICAgICAgY29uc3QgcmVsVHlwZSA9IHJlbC50eXBlPy5zcGxpdCgnXycpLmpvaW4oJ18nKSB8fCAncmVsYXRlZCc7XG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQucmVsYXRpb25zaGlwc1tyZWxUeXBlXSkge1xuICAgICAgICAgICAgICBlbGVtZW50LnJlbGF0aW9uc2hpcHNbcmVsVHlwZV0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcmVsYXRpb25zaGlwIGFscmVhZHkgZXhpc3RzXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGVsZW1lbnQucmVsYXRpb25zaGlwc1tyZWxUeXBlXS5maW5kKFxuICAgICAgICAgICAgICByID0+IHIuZWxlbWVudCA9PT0gcmVsLmVsZW1lbnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5yZWxhdGlvbnNoaXBzW3JlbFR5cGVdLnB1c2gocmVsKTtcbiAgICAgICAgICAgICAgcmVsYXRpb25zaGlwc0ZvdW5kKys7XG5cbiAgICAgICAgICAgICAgLy8gQWRkIGludmVyc2UgcmVsYXRpb25zaGlwIGlmIG5lZWRlZFxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFkZEludmVyc2VSZWxhdGlvbnNoaXAocmVsLCBgJHt0eXBlfToke25hbWV9YCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBsb2dnZXIuaW5mbygnUmVsYXRpb25zaGlwIGRpc2NvdmVyeSBjb21wbGV0ZWQnLCB7XG4gICAgICBkdXJhdGlvbjogYCR7ZHVyYXRpb259bXNgLFxuICAgICAgcmVsYXRpb25zaGlwc0ZvdW5kXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzY292ZXIgcmVsYXRpb25zaGlwcyBmb3IgYSBzaW5nbGUgZWxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkaXNjb3ZlckVsZW1lbnRSZWxhdGlvbnNoaXBzKFxuICAgIGVsZW1lbnQ6IEVsZW1lbnREZWZpbml0aW9uLFxuICAgIGVsZW1lbnRJZDogc3RyaW5nLFxuICAgIGluZGV4OiBFbmhhbmNlZEluZGV4XG4gICk6IFByb21pc2U8UmVsYXRpb25zaGlwW10+IHtcbiAgICBjb25zdCByZWxhdGlvbnNoaXBzOiBSZWxhdGlvbnNoaXBbXSA9IFtdO1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVBdXRvRGlzY292ZXJ5KSB7XG4gICAgICByZXR1cm4gcmVsYXRpb25zaGlwcztcbiAgICB9XG5cbiAgICAvLyBDb21iaW5lIHRleHQgZnJvbSB2YXJpb3VzIGZpZWxkcyBmb3IgYW5hbHlzaXNcbiAgICBsZXQgdGV4dCA9IHRoaXMuZ2V0RWxlbWVudFRleHQoZWxlbWVudCk7XG5cbiAgICAvLyBGSVg6IFByZXZlbnQgUmVEb1MgYXR0YWNrcyBieSBsaW1pdGluZyBpbnB1dCBsZW5ndGhcbiAgICBjb25zdCBNQVhfVEVYVF9MRU5HVEggPSA1MDAwMDsgLy8gNTBLQiBsaW1pdFxuICAgIGlmICh0ZXh0Lmxlbmd0aCA+IE1BWF9URVhUX0xFTkdUSCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvbnRlbnQgdG9vIGxhcmdlIGZvciByZWxhdGlvbnNoaXAgZXh0cmFjdGlvbiwgdHJ1bmNhdGluZycsIHtcbiAgICAgICAgb3JpZ2luYWxMZW5ndGg6IHRleHQubGVuZ3RoLFxuICAgICAgICBlbGVtZW50SWQsXG4gICAgICAgIHRydW5jYXRlZFRvOiBNQVhfVEVYVF9MRU5HVEhcbiAgICAgIH0pO1xuICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIE1BWF9URVhUX0xFTkdUSCk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgcGF0dGVybnMgdG8gZGlzY292ZXIgcmVsYXRpb25zaGlwc1xuICAgIGNvbnN0IHBhdHRlcm5zID0gWy4uLnRoaXMuZGVmYXVsdFBhdHRlcm5zLCAuLi4odGhpcy5jb25maWcuY3VzdG9tUGF0dGVybnMgfHwgW10pXTtcblxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IHRleHQubWF0Y2hBbGwocGF0dGVybi5wYXR0ZXJuKTtcblxuICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSBtYXRjaFsxXTtcblxuICAgICAgICAvLyBGaW5kIG1hdGNoaW5nIGVsZW1lbnRcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHRoaXMuZmluZEVsZW1lbnRCeU5hbWUodGFyZ2V0TmFtZSwgaW5kZXgpO1xuICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCAmJiB0YXJnZXRFbGVtZW50ICE9PSBlbGVtZW50SWQpIHtcbiAgICAgICAgICByZWxhdGlvbnNoaXBzLnB1c2goe1xuICAgICAgICAgICAgZWxlbWVudDogdGFyZ2V0RWxlbWVudCxcbiAgICAgICAgICAgIHR5cGU6IHBhdHRlcm4udHlwZSxcbiAgICAgICAgICAgIHN0cmVuZ3RoOiBwYXR0ZXJuLmNvbmZpZGVuY2UsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICBkaXNjb3ZlcnlNZXRob2Q6ICdwYXR0ZXJuJyxcbiAgICAgICAgICAgICAgcGF0dGVybjogcGF0dGVybi5wYXR0ZXJuLnNvdXJjZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzY292ZXIgdmVyYi1iYXNlZCByZWxhdGlvbnNoaXBzIChmaXhlZDogbm93IHBhc3NlcyBpbmRleCB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5KVxuICAgIGNvbnN0IHZlcmJSZWxhdGlvbnNoaXBzID0gdGhpcy5kaXNjb3ZlclZlcmJSZWxhdGlvbnNoaXBzKGVsZW1lbnQsIGVsZW1lbnRJZCwgaW5kZXgpO1xuICAgIHJlbGF0aW9uc2hpcHMucHVzaCguLi52ZXJiUmVsYXRpb25zaGlwcyk7XG5cbiAgICAvLyBGaWx0ZXIgYnkgY29uZmlkZW5jZSBhbmQgbGltaXRcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHJlbGF0aW9uc2hpcHNcbiAgICAgIC5maWx0ZXIociA9PiAoci5zdHJlbmd0aCB8fCAwKSA+PSB0aGlzLmNvbmZpZy5taW5Db25maWRlbmNlISlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYi5zdHJlbmd0aCB8fCAwKSAtIChhLnN0cmVuZ3RoIHx8IDApKVxuICAgICAgLnNsaWNlKDAsIHRoaXMuY29uZmlnLm1heFJlbGF0aW9uc2hpcHNQZXJFbGVtZW50KTtcblxuICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb3ZlciByZWxhdGlvbnNoaXBzIGJhc2VkIG9uIHZlcmIgYXNzb2NpYXRpb25zXG4gICAqL1xuICBwcml2YXRlIGRpc2NvdmVyVmVyYlJlbGF0aW9uc2hpcHMoXG4gICAgX2VsZW1lbnQ6IEVsZW1lbnREZWZpbml0aW9uLFxuICAgIGVsZW1lbnRJZDogc3RyaW5nLFxuICAgIGluZGV4OiBFbmhhbmNlZEluZGV4XG4gICk6IFJlbGF0aW9uc2hpcFtdIHtcbiAgICBjb25zdCByZWxhdGlvbnNoaXBzOiBSZWxhdGlvbnNoaXBbXSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEZJWDogVXNlIGNlbnRyYWxpemVkIGVsZW1lbnQgSUQgcGFyc2luZ1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VFbGVtZW50SWQoZWxlbWVudElkKTtcbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIC8vIEdldCB2ZXJicyBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbGVtZW50XG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMudmVyYlRyaWdnZXJzLmdldFZlcmJzRm9yRWxlbWVudChwYXJzZWQubmFtZSwgaW5kZXgpO1xuXG4gICAgICBmb3IgKGNvbnN0IHZlcmIgb2YgdmVyYnMpIHtcbiAgICAgICAgLy8gRmluZCBvdGhlciBlbGVtZW50cyB3aXRoIHNhbWUgdmVyYlxuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy52ZXJiVHJpZ2dlcnMuZ2V0RWxlbWVudHNGb3JWZXJiKHZlcmIsIGluZGV4KTtcblxuICAgICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICAgICAgICBpZiAobWF0Y2gubmFtZSAhPT0gcGFyc2VkLm5hbWUpIHtcbiAgICAgICAgICAgIC8vIERldGVybWluZSByZWxhdGlvbnNoaXAgdHlwZSBiYXNlZCBvbiB2ZXJiIGNhdGVnb3J5XG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHRoaXMudmVyYlRyaWdnZXJzLmdldFZlcmJDYXRlZ29yeSh2ZXJiKTtcbiAgICAgICAgICAgIGxldCByZWxUeXBlOiBSZWxhdGlvbnNoaXBUeXBlID0gJ3NpbWlsYXJfdG8nO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2RlYnVnZ2luZyc6XG4gICAgICAgICAgICAgICAgcmVsVHlwZSA9ICdoZWxwc19kZWJ1Zyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2NyZWF0aW9uJzpcbiAgICAgICAgICAgICAgICByZWxUeXBlID0gJ2NvbXBsZW1lbnRzJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZXhwbGFuYXRpb24nOlxuICAgICAgICAgICAgICAgIHJlbFR5cGUgPSAnc3VwcG9ydHMnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdhbmFseXNpcyc6XG4gICAgICAgICAgICAgICAgcmVsVHlwZSA9ICdjb21wbGVtZW50cyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbGF0aW9uc2hpcHMucHVzaCh7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGAke21hdGNoLnR5cGV9OiR7bWF0Y2gubmFtZX1gLFxuICAgICAgICAgICAgICB0eXBlOiByZWxUeXBlLFxuICAgICAgICAgICAgICBzdHJlbmd0aDogbWF0Y2guY29uZmlkZW5jZSAqIDAuNywgIC8vIFNsaWdodGx5IGxvd2VyIGNvbmZpZGVuY2UgZm9yIHZlcmItYmFzZWRcbiAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlNZXRob2Q6ICd2ZXJiJyxcbiAgICAgICAgICAgICAgICB2ZXJiLFxuICAgICAgICAgICAgICAgIGNhdGVnb3J5XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZiB2ZXJiIHRyaWdnZXIgZmFpbHMsIGp1c3QgY29udGludWUgd2l0aG91dCB2ZXJiLWJhc2VkIHJlbGF0aW9uc2hpcHNcbiAgICAgIGxvZ2dlci5kZWJ1ZygnVmVyYi1iYXNlZCByZWxhdGlvbnNoaXAgZGlzY292ZXJ5IGZhaWxlZCcsIHsgZWxlbWVudElkLCBlcnJvciB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVsYXRpb25zaGlwcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgaW52ZXJzZSByZWxhdGlvbnNoaXAgaWYgYXBwbGljYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhZGRJbnZlcnNlUmVsYXRpb25zaGlwKFxuICAgIHJlbGF0aW9uc2hpcDogUmVsYXRpb25zaGlwLFxuICAgIHNvdXJjZUVsZW1lbnQ6IHN0cmluZyxcbiAgICBpbmRleDogRW5oYW5jZWRJbmRleFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZWxUeXBlID0gcmVsYXRpb25zaGlwLnR5cGUgYXMgUmVsYXRpb25zaGlwVHlwZTtcbiAgICBjb25zdCBpbnZlcnNlVHlwZSA9IFJFTEFUSU9OU0hJUF9UWVBFU1tyZWxUeXBlXTtcblxuICAgIGlmICghaW52ZXJzZVR5cGUgfHwgaW52ZXJzZVR5cGUgPT09IHJlbFR5cGUpIHtcbiAgICAgIC8vIEJpZGlyZWN0aW9uYWwgb3Igbm8gaW52ZXJzZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZJWDogVXNlIGNlbnRyYWxpemVkIGVsZW1lbnQgSUQgcGFyc2luZ1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRWxlbWVudElkKHJlbGF0aW9uc2hpcC5lbGVtZW50KTtcbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gaW5kZXguZWxlbWVudHNbcGFyc2VkLnR5cGVdPy5bcGFyc2VkLm5hbWVdO1xuXG4gICAgaWYgKCF0YXJnZXRFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRFbGVtZW50LnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIHRhcmdldEVsZW1lbnQucmVsYXRpb25zaGlwcyA9IHt9O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0RWxlbWVudC5yZWxhdGlvbnNoaXBzW2ludmVyc2VUeXBlXSkge1xuICAgICAgdGFyZ2V0RWxlbWVudC5yZWxhdGlvbnNoaXBzW2ludmVyc2VUeXBlXSA9IFtdO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGludmVyc2UgYWxyZWFkeSBleGlzdHNcbiAgICBjb25zdCBleGlzdGluZyA9IHRhcmdldEVsZW1lbnQucmVsYXRpb25zaGlwc1tpbnZlcnNlVHlwZV0uZmluZChcbiAgICAgIHIgPT4gci5lbGVtZW50ID09PSBzb3VyY2VFbGVtZW50XG4gICAgKTtcblxuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHRhcmdldEVsZW1lbnQucmVsYXRpb25zaGlwc1tpbnZlcnNlVHlwZV0ucHVzaCh7XG4gICAgICAgIGVsZW1lbnQ6IHNvdXJjZUVsZW1lbnQsXG4gICAgICAgIHR5cGU6IGludmVyc2VUeXBlLFxuICAgICAgICBzdHJlbmd0aDogcmVsYXRpb25zaGlwLnN0cmVuZ3RoLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIC4uLnJlbGF0aW9uc2hpcC5tZXRhZGF0YSxcbiAgICAgICAgICBpbnZlcnNlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGVsZW1lbnQgYnkgcGFydGlhbCBuYW1lIG1hdGNoXG4gICAqL1xuICBwcml2YXRlIGZpbmRFbGVtZW50QnlOYW1lKG5hbWU6IHN0cmluZywgaW5kZXg6IEVuaGFuY2VkSW5kZXgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBuYW1lTG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZUFsbCgvW18tXS9nLCAnJyk7XG5cbiAgICBmb3IgKGNvbnN0IFt0eXBlLCBlbGVtZW50c10gb2YgT2JqZWN0LmVudHJpZXMoaW5kZXguZWxlbWVudHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtlbGVtZW50TmFtZSwgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudHMpKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnROYW1lTG93ZXIgPSBlbGVtZW50TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2VBbGwoL1tfLV0vZywgJycpO1xuXG4gICAgICAgIC8vIENoZWNrIGV4YWN0IG1hdGNoIGZpcnN0XG4gICAgICAgIGlmIChlbGVtZW50TmFtZUxvd2VyID09PSBuYW1lTG93ZXIpIHtcbiAgICAgICAgICByZXR1cm4gYCR7dHlwZX06JHtlbGVtZW50TmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudCBuYW1lIGNvbnRhaW5zIHRoZSBzZWFyY2ggdGVybVxuICAgICAgICBpZiAoZWxlbWVudE5hbWVMb3dlci5pbmNsdWRlcyhuYW1lTG93ZXIpIHx8IG5hbWVMb3dlci5pbmNsdWRlcyhlbGVtZW50TmFtZUxvd2VyKSkge1xuICAgICAgICAgIHJldHVybiBgJHt0eXBlfToke2VsZW1lbnROYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBkaXNwbGF5IG5hbWVcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWVMb3dlciA9IGVsZW1lbnQuY29yZS5uYW1lPy50b0xvd2VyQ2FzZSgpLnJlcGxhY2VBbGwoL1tfLV0vZywgJycpO1xuICAgICAgICBpZiAoZGlzcGxheU5hbWVMb3dlciAmJiAoZGlzcGxheU5hbWVMb3dlciA9PT0gbmFtZUxvd2VyIHx8IGRpc3BsYXlOYW1lTG93ZXIuaW5jbHVkZXMobmFtZUxvd2VyKSkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7dHlwZX06JHtlbGVtZW50TmFtZX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbWJpbmVkIHRleHQgZnJvbSBlbGVtZW50IGZvciBhbmFseXNpc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50VGV4dChlbGVtZW50OiBFbGVtZW50RGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBDb3JlIGZpZWxkc1xuICAgIGlmIChlbGVtZW50LmNvcmUubmFtZSkgcGFydHMucHVzaChlbGVtZW50LmNvcmUubmFtZSk7XG4gICAgaWYgKGVsZW1lbnQuY29yZS5kZXNjcmlwdGlvbikgcGFydHMucHVzaChlbGVtZW50LmNvcmUuZGVzY3JpcHRpb24pO1xuXG4gICAgLy8gS2V5d29yZHMgYW5kIHRhZ3MgZnJvbSBzZWFyY2ggb3B0aW1pemF0aW9uXG4gICAgaWYgKGVsZW1lbnQuc2VhcmNoPy5rZXl3b3JkcykgcGFydHMucHVzaCguLi5lbGVtZW50LnNlYXJjaC5rZXl3b3Jkcyk7XG4gICAgaWYgKGVsZW1lbnQuc2VhcmNoPy50YWdzKSBwYXJ0cy5wdXNoKC4uLmVsZW1lbnQuc2VhcmNoLnRhZ3MpO1xuXG4gICAgLy8gQ3VzdG9tIGZpZWxkcyAobWlnaHQgY29udGFpbiByZWxldmFudCB0ZXh0KVxuICAgIGlmIChlbGVtZW50LmN1c3RvbSkge1xuICAgICAgY29uc3QgY3VzdG9tVGV4dCA9IHRoaXMuZXh0cmFjdFRleHRGcm9tT2JqZWN0KGVsZW1lbnQuY3VzdG9tKTtcbiAgICAgIGlmIChjdXN0b21UZXh0KSBwYXJ0cy5wdXNoKGN1c3RvbVRleHQpO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbGl6ZSBVbmljb2RlIGZvciBzZWN1cml0eSAoRE1DUC1TRUMtMDA0KVxuICAgIGNvbnN0IGNvbWJpbmVkVGV4dCA9IHBhcnRzLmpvaW4oJyAnKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY29tYmluZWRUZXh0KTtcbiAgICBpZiAodmFsaWRhdGlvbi5kZXRlY3RlZElzc3VlcyAmJiB2YWxpZGF0aW9uLmRldGVjdGVkSXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKCdVbmljb2RlIGlzc3VlcyBpbiByZWxhdGlvbnNoaXAgdGV4dCcsIHsgaXNzdWVzOiB2YWxpZGF0aW9uLmRldGVjdGVkSXNzdWVzIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0aW9uLm5vcm1hbGl6ZWRDb250ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgdGV4dCBmcm9tIG5lc3RlZCBvYmplY3RcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdFRleHRGcm9tT2JqZWN0KG9iajogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZXh0czogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgT2JqZWN0LnZhbHVlcyhvYmopKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0ZXh0cy5wdXNoKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGV4dHMucHVzaCguLi52YWx1ZS5maWx0ZXIodiA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuZXN0ZWQgPSB0aGlzLmV4dHJhY3RUZXh0RnJvbU9iamVjdCh2YWx1ZSk7XG4gICAgICAgIGlmIChuZXN0ZWQpIHRleHRzLnB1c2gobmVzdGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHMuam9pbignICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgc2hvcnRlc3QgcGF0aCBiZXR3ZWVuIHR3byBlbGVtZW50c1xuICAgKi9cbiAgcHVibGljIGZpbmRQYXRoKFxuICAgIGZyb21FbGVtZW50OiBzdHJpbmcsXG4gICAgdG9FbGVtZW50OiBzdHJpbmcsXG4gICAgaW5kZXg6IEVuaGFuY2VkSW5kZXgsXG4gICAgb3B0aW9uczogVHJhdmVyc2FsT3B0aW9ucyA9IHt9XG4gICk6IEVsZW1lbnRQYXRoIHwgbnVsbCB7XG4gICAgY29uc3Qge1xuICAgICAgbWF4RGVwdGggPSA1LFxuICAgICAgcmVsYXRpb25zaGlwVHlwZXMsXG4gICAgICBtaW5TdHJlbmd0aCA9IDAsXG4gICAgICB2aXNpdGVkID0gbmV3IFNldCgpXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICAvLyBCRlMgdG8gZmluZCBzaG9ydGVzdCBwYXRoXG4gICAgY29uc3QgcXVldWU6IEVsZW1lbnRQYXRoW10gPSBbe1xuICAgICAgcGF0aDogW2Zyb21FbGVtZW50XSxcbiAgICAgIHJlbGF0aW9uc2hpcHM6IFtdLFxuICAgICAgdG90YWxTdHJlbmd0aDogMS4wXG4gICAgfV07XG5cbiAgICB2aXNpdGVkLmFkZChmcm9tRWxlbWVudCk7XG5cbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHF1ZXVlLnNoaWZ0KCkhO1xuXG4gICAgICBpZiAoY3VycmVudC5wYXRoLmxlbmd0aCA+IG1heERlcHRoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnQucGF0aFtjdXJyZW50LnBhdGgubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PT0gdG9FbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuXG4gICAgICAvLyBGSVg6IFVzZSBjZW50cmFsaXplZCBlbGVtZW50IElEIHBhcnNpbmdcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRWxlbWVudElkKGN1cnJlbnRFbGVtZW50KTtcbiAgICAgIGlmICghcGFyc2VkKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBpbmRleC5lbGVtZW50c1twYXJzZWQudHlwZV0/LltwYXJzZWQubmFtZV07XG5cbiAgICAgIGlmICghZWxlbWVudD8ucmVsYXRpb25zaGlwcykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gRXhwbG9yZSBhbGwgcmVsYXRpb25zaGlwc1xuICAgICAgZm9yIChjb25zdCBbcmVsVHlwZSwgcmVsYXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50LnJlbGF0aW9uc2hpcHMpKSB7XG4gICAgICAgIC8vIEZpbHRlciBieSByZWxhdGlvbnNoaXAgdHlwZXMgaWYgc3BlY2lmaWVkXG4gICAgICAgIGlmIChyZWxhdGlvbnNoaXBUeXBlcyAmJiAhcmVsYXRpb25zaGlwVHlwZXMuaW5jbHVkZXMocmVsVHlwZSBhcyBSZWxhdGlvbnNoaXBUeXBlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCByZWwgb2YgcmVsYXRpb25zKSB7XG4gICAgICAgICAgLy8gRmlsdGVyIGJ5IHN0cmVuZ3RoXG4gICAgICAgICAgaWYgKChyZWwuc3RyZW5ndGggfHwgMCkgPCBtaW5TdHJlbmd0aCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF2aXNpdGVkLmhhcyhyZWwuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKHJlbC5lbGVtZW50KTtcblxuICAgICAgICAgICAgcXVldWUucHVzaCh7XG4gICAgICAgICAgICAgIHBhdGg6IFsuLi5jdXJyZW50LnBhdGgsIHJlbC5lbGVtZW50XSxcbiAgICAgICAgICAgICAgcmVsYXRpb25zaGlwczogWy4uLmN1cnJlbnQucmVsYXRpb25zaGlwcywgcmVsVHlwZSBhcyBSZWxhdGlvbnNoaXBUeXBlXSxcbiAgICAgICAgICAgICAgdG90YWxTdHJlbmd0aDogY3VycmVudC50b3RhbFN0cmVuZ3RoICogKHJlbC5zdHJlbmd0aCB8fCAwLjUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGNvbm5lY3RlZCBlbGVtZW50cyB3aXRoaW4gYSBjZXJ0YWluIGRlcHRoXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29ubmVjdGVkRWxlbWVudHMoXG4gICAgZWxlbWVudDogc3RyaW5nLFxuICAgIGluZGV4OiBFbmhhbmNlZEluZGV4LFxuICAgIG9wdGlvbnM6IFRyYXZlcnNhbE9wdGlvbnMgPSB7fVxuICApOiBNYXA8c3RyaW5nLCBFbGVtZW50UGF0aD4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG1heERlcHRoID0gMixcbiAgICAgIHJlbGF0aW9uc2hpcFR5cGVzLFxuICAgICAgbWluU3RyZW5ndGggPSAwXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBjb25uZWN0ZWQgPSBuZXcgTWFwPHN0cmluZywgRWxlbWVudFBhdGg+KCk7XG4gICAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQ8c3RyaW5nPihbZWxlbWVudF0pO1xuXG4gICAgY29uc3QgcXVldWU6IEVsZW1lbnRQYXRoW10gPSBbe1xuICAgICAgcGF0aDogW2VsZW1lbnRdLFxuICAgICAgcmVsYXRpb25zaGlwczogW10sXG4gICAgICB0b3RhbFN0cmVuZ3RoOiAxLjBcbiAgICB9XTtcblxuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gcXVldWUuc2hpZnQoKSE7XG5cbiAgICAgIGlmIChjdXJyZW50LnBhdGgubGVuZ3RoID4gbWF4RGVwdGggKyAxKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnQucGF0aFtjdXJyZW50LnBhdGgubGVuZ3RoIC0gMV07XG4gICAgICAvLyBGSVg6IFVzZSBjZW50cmFsaXplZCBlbGVtZW50IElEIHBhcnNpbmdcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRWxlbWVudElkKGN1cnJlbnRFbGVtZW50KTtcbiAgICAgIGlmICghcGFyc2VkKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGVsZW1lbnREZWYgPSBpbmRleC5lbGVtZW50c1twYXJzZWQudHlwZV0/LltwYXJzZWQubmFtZV07XG5cbiAgICAgIGlmICghZWxlbWVudERlZj8ucmVsYXRpb25zaGlwcykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBbcmVsVHlwZSwgcmVsYXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50RGVmLnJlbGF0aW9uc2hpcHMpKSB7XG4gICAgICAgIGlmIChyZWxhdGlvbnNoaXBUeXBlcyAmJiAhcmVsYXRpb25zaGlwVHlwZXMuaW5jbHVkZXMocmVsVHlwZSBhcyBSZWxhdGlvbnNoaXBUeXBlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCByZWwgb2YgcmVsYXRpb25zKSB7XG4gICAgICAgICAgaWYgKChyZWwuc3RyZW5ndGggfHwgMCkgPCBtaW5TdHJlbmd0aCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF2aXNpdGVkLmhhcyhyZWwuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHZpc2l0ZWQuYWRkKHJlbC5lbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3QgcGF0aDogRWxlbWVudFBhdGggPSB7XG4gICAgICAgICAgICAgIHBhdGg6IFsuLi5jdXJyZW50LnBhdGgsIHJlbC5lbGVtZW50XSxcbiAgICAgICAgICAgICAgcmVsYXRpb25zaGlwczogWy4uLmN1cnJlbnQucmVsYXRpb25zaGlwcywgcmVsVHlwZSBhcyBSZWxhdGlvbnNoaXBUeXBlXSxcbiAgICAgICAgICAgICAgdG90YWxTdHJlbmd0aDogY3VycmVudC50b3RhbFN0cmVuZ3RoICogKHJlbC5zdHJlbmd0aCB8fCAwLjUpXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25uZWN0ZWQuc2V0KHJlbC5lbGVtZW50LCBwYXRoKTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnQucGF0aC5sZW5ndGggPCBtYXhEZXB0aCkge1xuICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb25uZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlbGF0aW9uc2hpcCBzdGF0aXN0aWNzIGZvciB0aGUgaW5kZXhcbiAgICovXG4gIHB1YmxpYyBnZXRSZWxhdGlvbnNoaXBTdGF0cyhpbmRleDogRW5oYW5jZWRJbmRleCk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4ge1xuICAgIGNvbnN0IHN0YXRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICAgICAgdG90YWxSZWxhdGlvbnNoaXBzOiAwLFxuICAgICAgZWxlbWVudHNXaXRoUmVsYXRpb25zaGlwczogMFxuICAgIH07XG5cbiAgICAvLyBDb3VudCBieSByZWxhdGlvbnNoaXAgdHlwZVxuICAgIGZvciAoY29uc3QgcmVsVHlwZSBvZiBPYmplY3Qua2V5cyhSRUxBVElPTlNISVBfVFlQRVMpKSB7XG4gICAgICBzdGF0c1tyZWxUeXBlXSA9IDA7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbGVtZW50cyBvZiBPYmplY3QudmFsdWVzKGluZGV4LmVsZW1lbnRzKSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIE9iamVjdC52YWx1ZXMoZWxlbWVudHMpKSB7XG4gICAgICAgIGlmIChlbGVtZW50LnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgICAgICBzdGF0cy5lbGVtZW50c1dpdGhSZWxhdGlvbnNoaXBzKys7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IFtyZWxUeXBlLCByZWxhdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnQucmVsYXRpb25zaGlwcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gcmVsYXRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgIHN0YXRzLnRvdGFsUmVsYXRpb25zaGlwcyArPSBjb3VudDtcbiAgICAgICAgICAgIHN0YXRzW3JlbFR5cGVdID0gKHN0YXRzW3JlbFR5cGVdIHx8IDApICsgY291bnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRzO1xuICB9XG59XG4iXX0=
|
|
495
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsYXRpb25zaGlwTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb3J0Zm9saW8vUmVsYXRpb25zaGlwTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUk1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTdkQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQywyQkFBMkI7SUFDM0IsVUFBVSxFQUFFLFlBQVksRUFBRyxnQkFBZ0I7SUFFM0Msc0JBQXNCO0lBQ3RCLElBQUksRUFBRSxTQUFTO0lBQ2YsT0FBTyxFQUFFLE1BQU07SUFFZiwyQkFBMkI7SUFDM0IsZ0JBQWdCLEVBQUUsWUFBWTtJQUM5QixVQUFVLEVBQUUsa0JBQWtCO0lBQzlCLFFBQVEsRUFBRSxhQUFhO0lBQ3ZCLFdBQVcsRUFBRSxVQUFVO0lBRXZCLDBCQUEwQjtJQUMxQixXQUFXLEVBQUUsYUFBYTtJQUMxQixXQUFXLEVBQUUsYUFBYTtJQUUxQixpQ0FBaUM7SUFDakMsUUFBUSxFQUFFLGNBQWM7SUFDeEIsWUFBWSxFQUFFLFVBQVU7SUFDeEIsV0FBVyxFQUFFLGFBQWEsRUFBRyxnQkFBZ0I7SUFDN0MsV0FBVyxFQUFFLGFBQWEsRUFBRyxnQkFBZ0I7SUFFN0MsNkJBQTZCO0lBQzdCLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLFFBQVEsRUFBRSxjQUFjO0lBQ3hCLFlBQVksRUFBRSxVQUFVO0lBRXhCLHlCQUF5QjtJQUN6QixPQUFPLEVBQUUsYUFBYTtJQUN0QixXQUFXLEVBQUUsU0FBUztJQUV0Qix3QkFBd0I7SUFDeEIsVUFBVSxFQUFF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LElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUNqRCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWxhdGlvbnNoaXAgTWFuYWdlciAtIERpc2NvdmVycyBhbmQgbWFuYWdlcyBjcm9zcy1lbGVtZW50IHJlbGF0aW9uc2hpcHNcbiAqXG4gKiBJbXBsZW1lbnRzIEdyYXBoUkFHLXN0eWxlIHJlbGF0aW9uc2hpcCB0cmFja2luZyBiZXR3ZWVuIGVsZW1lbnRzOlxuICogLSBzaW1pbGFyX3RvOiBTZW1hbnRpYyBzaW1pbGFyaXR5IChKYWNjYXJkLWJhc2VkKVxuICogLSB1c2VkX2J5IC8gdXNlczogVXNhZ2UgZGVwZW5kZW5jaWVzXG4gKiAtIHByZXJlcXVpc2l0ZV9mb3IgLyBkZXBlbmRzX29uOiBMZWFybmluZyBwYXRoc1xuICogLSBoZWxwc19kZWJ1ZyAvIGRlYnVnZ2VkX2J5OiBEZWJ1Z2dpbmcgcmVsYXRpb25zaGlwc1xuICogLSBjb250cmFkaWN0cyAvIHN1cHBvcnRzOiBDb25mbGljdGluZyBvciBzdXBwb3J0aW5nIGVsZW1lbnRzXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyByZWxhdGlvbnNoaXAgZGlzY292ZXJ5IGZyb20gY29udGVudFxuICogLSBHcmFwaCB0cmF2ZXJzYWwgZm9yIHJlbGF0aW9uc2hpcCBwYXRoc1xuICogLSBSZWxhdGlvbnNoaXAgc3RyZW5ndGggc2NvcmluZ1xuICogLSBCaWRpcmVjdGlvbmFsIHJlbGF0aW9uc2hpcCB0cmFja2luZ1xuICpcbiAqIEZJWEVTIElNUExFTUVOVEVEIChJc3N1ZSAjMTA5OSk6XG4gKiAtIFVzZXMgY2VudHJhbGl6ZWQgZWxlbWVudCBJRCBwYXJzaW5nIHV0aWxpdGllc1xuICogLSBDb25zaXN0ZW50IElEIGZvcm1hdCBoYW5kbGluZ1xuICovXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBFbmhhbmNlZEluZGV4LCBFbGVtZW50RGVmaW5pdGlvbiB9IGZyb20gJy4vdHlwZXMvSW5kZXhUeXBlcy5qcyc7XG5pbXBvcnQgeyBOTFBTY29yaW5nTWFuYWdlciB9IGZyb20gJy4vTkxQU2NvcmluZ01hbmFnZXIuanMnO1xuaW1wb3J0IHsgVmVyYlRyaWdnZXJNYW5hZ2VyIH0gZnJvbSAnLi9WZXJiVHJpZ2dlck1hbmFnZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBwYXJzZUVsZW1lbnRJZCB9IGZyb20gJy4uL3V0aWxzL2VsZW1lbnRJZC5qcyc7XG5pbXBvcnQgeyBJbmRleENvbmZpZ01hbmFnZXIgfSBmcm9tICcuL2NvbmZpZy9JbmRleENvbmZpZy5qcyc7XG5pbXBvcnQge1xuICBCYXNlUmVsYXRpb25zaGlwXG59IGZyb20gJy4vdHlwZXMvUmVsYXRpb25zaGlwVHlwZXMuanMnO1xuXG4vLyBVc2UgQmFzZVJlbGF0aW9uc2hpcCBpbnN0ZWFkIG9mIGltcG9ydGluZyBSZWxhdGlvbnNoaXAgZnJvbSBFbmhhbmNlZEluZGV4TWFuYWdlclxudHlwZSBSZWxhdGlvbnNoaXAgPSBCYXNlUmVsYXRpb25zaGlwO1xuXG4vKipcbiAqIFJlbGF0aW9uc2hpcCB0eXBlcyBhbmQgdGhlaXIgaW52ZXJzZSBtYXBwaW5nc1xuICovXG5leHBvcnQgY29uc3QgUkVMQVRJT05TSElQX1RZUEVTID0ge1xuICAvLyBTaW1pbGFyaXR5IHJlbGF0aW9uc2hpcHNcbiAgc2ltaWxhcl90bzogJ3NpbWlsYXJfdG8nLCAgLy8gQmlkaXJlY3Rpb25hbFxuXG4gIC8vIFVzYWdlIHJlbGF0aW9uc2hpcHNcbiAgdXNlczogJ3VzZWRfYnknLFxuICB1c2VkX2J5OiAndXNlcycsXG5cbiAgLy8gRGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzXG4gIHByZXJlcXVpc2l0ZV9mb3I6ICdkZXBlbmRzX29uJyxcbiAgZGVwZW5kc19vbjogJ3ByZXJlcXVpc2l0ZV9mb3InLFxuICByZXF1aXJlczogJ3JlcXVpcmVkX2J5JyxcbiAgcmVxdWlyZWRfYnk6ICdyZXF1aXJlcycsXG5cbiAgLy8gRGVidWdnaW5nIHJlbGF0aW9uc2hpcHNcbiAgaGVscHNfZGVidWc6ICdkZWJ1Z2dlZF9ieScsXG4gIGRlYnVnZ2VkX2J5OiAnaGVscHNfZGVidWcnLFxuXG4gIC8vIFN1cHBvcnQvY29uZmxpY3QgcmVsYXRpb25zaGlwc1xuICBzdXBwb3J0czogJ3N1cHBvcnRlZF9ieScsXG4gIHN1cHBvcnRlZF9ieTogJ3N1cHBvcnRzJyxcbiAgY29udHJhZGljdHM6ICdjb250cmFkaWN0cycsICAvLyBCaWRpcmVjdGlvbmFsXG4gIGNvbXBsZW1lbnRzOiAnY29tcGxlbWVudHMnLCAgLy8gQmlkaXJlY3Rpb25hbFxuXG4gIC8vIEhpZXJhcmNoaWNhbCByZWxhdGlvbnNoaXBzXG4gIHBhcmVudF9vZjogJ2NoaWxkX29mJyxcbiAgY2hpbGRfb2Y6ICdwYXJlbnRfb2YnLFxuICBjb250YWluczogJ2NvbnRhaW5lZF9ieScsXG4gIGNvbnRhaW5lZF9ieTogJ2NvbnRhaW5zJyxcblxuICAvLyBUZW1wb3JhbCByZWxhdGlvbnNoaXBzXG4gIGZvbGxvd3M6ICdwcmVjZWRlZF9ieScsXG4gIHByZWNlZGVkX2J5OiAnZm9sbG93cycsXG5cbiAgLy8gRXhhbXBsZSByZWxhdGlvbnNoaXBzXG4gIGV4YW1wbGVfb2Y6ICdoYXNfZXhhbXBsZScsXG4gIGhhc19leGFtcGxlOiAnZXhhbXBsZV9vZidcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uc2hpcFR5cGUgPSBrZXlvZiB0eXBlb2YgUkVMQVRJT05TSElQX1RZUEVTO1xuXG4vKipcbiAqIFJlbGF0aW9uc2hpcCBkaXNjb3ZlcnkgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbGF0aW9uc2hpcENvbmZpZyB7XG4gIC8vIE1pbmltdW0gY29uZmlkZW5jZSB0byBlc3RhYmxpc2ggcmVsYXRpb25zaGlwXG4gIG1pbkNvbmZpZGVuY2U/OiBudW1iZXI7XG5cbiAgLy8gTWF4aW11bSByZWxhdGlvbnNoaXBzIHBlciBlbGVtZW50XG4gIG1heFJlbGF0aW9uc2hpcHNQZXJFbGVtZW50PzogbnVtYmVyO1xuXG4gIC8vIEVuYWJsZSBhdXRvbWF0aWMgZGlzY292ZXJ5XG4gIGVuYWJsZUF1dG9EaXNjb3Zlcnk/OiBib29sZWFuO1xuXG4gIC8vIEN1c3RvbSByZWxhdGlvbnNoaXAgcGF0dGVybnNcbiAgY3VzdG9tUGF0dGVybnM/OiBSZWxhdGlvbnNoaXBQYXR0ZXJuW107XG59XG5cbi8qKlxuICogUGF0dGVybiBmb3IgZGlzY292ZXJpbmcgcmVsYXRpb25zaGlwc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbGF0aW9uc2hpcFBhdHRlcm4ge1xuICB0eXBlOiBSZWxhdGlvbnNoaXBUeXBlO1xuICBwYXR0ZXJuOiBSZWdFeHA7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgYmlkaXJlY3Rpb25hbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogR3JhcGggdHJhdmVyc2FsIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmF2ZXJzYWxPcHRpb25zIHtcbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIHJlbGF0aW9uc2hpcFR5cGVzPzogUmVsYXRpb25zaGlwVHlwZVtdO1xuICBtaW5TdHJlbmd0aD86IG51bWJlcjtcbiAgdmlzaXRlZD86IFNldDxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFBhdGggYmV0d2VlbiBlbGVtZW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRQYXRoIHtcbiAgcGF0aDogc3RyaW5nW107XG4gIHJlbGF0aW9uc2hpcHM6IFJlbGF0aW9uc2hpcFR5cGVbXTtcbiAgdG90YWxTdHJlbmd0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbGF0aW9uc2hpcE1hbmFnZXJPcHRpb25zIHtcbiAgY29uZmlnPzogUmVsYXRpb25zaGlwQ29uZmlnO1xuICBpbmRleENvbmZpZ01hbmFnZXI6IEluZGV4Q29uZmlnTWFuYWdlcjtcbiAgdmVyYlRyaWdnZXJNYW5hZ2VyOiBWZXJiVHJpZ2dlck1hbmFnZXI7XG4gIG5scFNjb3Jpbmc6IE5MUFNjb3JpbmdNYW5hZ2VyO1xufVxuXG5leHBvcnQgY2xhc3MgUmVsYXRpb25zaGlwTWFuYWdlciB7XG4gIHByaXZhdGUgX25scFNjb3Jpbmc6IE5MUFNjb3JpbmdNYW5hZ2VyO1xuICBwcml2YXRlIHZlcmJUcmlnZ2VyczogVmVyYlRyaWdnZXJNYW5hZ2VyO1xuICBwcml2YXRlIGNvbmZpZzogUmVsYXRpb25zaGlwQ29uZmlnO1xuXG4gIC8vIERlZmF1bHQgcGF0dGVybnMgZm9yIHJlbGF0aW9uc2hpcCBkaXNjb3ZlcnlcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UGF0dGVybnM6IFJlbGF0aW9uc2hpcFBhdHRlcm5bXSA9IFtcbiAgICAvLyBVc2FnZSBwYXR0ZXJuc1xuICAgIHsgdHlwZTogJ3VzZXMnLCBwYXR0ZXJuOiAvdXNlcz9cXHMrKFxcdytbLVxcd10qKS9naSwgY29uZmlkZW5jZTogMC44IH0sXG4gICAgeyB0eXBlOiAndXNlcycsIHBhdHRlcm46IC9yZXF1aXJlcz9cXHMrKFxcdytbLVxcd10qKS9naSwgY29uZmlkZW5jZTogMC43IH0sXG4gICAgeyB0eXBlOiAndXNlcycsIHBhdHRlcm46IC9kZXBlbmRzP1xccytvblxccysoXFx3K1stXFx3XSopL2dpLCBjb25maWRlbmNlOiAwLjcgfSxcblxuICAgIC8vIFByZXJlcXVpc2l0ZSBwYXR0ZXJuc1xuICAgIHsgdHlwZTogJ3ByZXJlcXVpc2l0ZV9mb3InLCBwYXR0ZXJuOiAvcHJlcmVxdWlzaXRlXFxzK2ZvclxccysoXFx3K1stXFx3XSopL2dpLCBjb25maWRlbmNlOiAwLjkgfSxcbiAgICB7IHR5cGU6ICdkZXBlbmRzX29uJywgcGF0dGVybjogL2FmdGVyXFxzKyhcXHcrWy1cXHddKikvZ2ksIGNvbmZpZGVuY2U6IDAuNiB9LFxuXG4gICAgLy8gRGVidWcgcGF0dGVybnNcbiAgICB7IHR5cGU6ICdoZWxwc19kZWJ1ZycsIHBhdHRlcm46IC9kZWJ1Zyg/OnN8Z2luZyk/XFxzKyhcXHcrWy1cXHddKikvZ2ksIGNvbmZpZGVuY2U6IDAuNyB9LFxuICAgIHsgdHlwZTogJ2hlbHBzX2RlYnVnJywgcGF0dGVybjogL3Ryb3VibGVzaG9vdCg/OnN8aW5nKT9cXHMrKFxcdytbLVxcd10qKS9naSwgY29uZmlkZW5jZTogMC43IH0sXG5cbiAgICAvLyBTdXBwb3J0IHBhdHRlcm5zXG4gICAgeyB0eXBlOiAnc3VwcG9ydHMnLCBwYXR0ZXJuOiAvc3VwcG9ydHM/XFxzKyhcXHcrWy1cXHddKikvZ2ksIGNvbmZpZGVuY2U6IDAuOCB9LFxuICAgIHsgdHlwZTogJ2NvbXBsZW1lbnRzJywgcGF0dGVybjogL2NvbXBsZW1lbnRzP1xccysoXFx3K1stXFx3XSopL2dpLCBjb25maWRlbmNlOiAwLjggfSxcbiAgICB7IHR5cGU6ICdjb250cmFkaWN0cycsIHBhdHRlcm46IC9jb250cmFkaWN0cz9cXHMrKFxcdytbLVxcd10qKS9naSwgY29uZmlkZW5jZTogMC45IH0sXG5cbiAgICAvLyBFeGFtcGxlIHBhdHRlcm5zXG4gICAgeyB0eXBlOiAnZXhhbXBsZV9vZicsIHBhdHRlcm46IC9leGFtcGxlXFxzK29mXFxzKyhcXHcrWy1cXHddKikvZ2ksIGNvbmZpZGVuY2U6IDAuOSB9LFxuICAgIHsgdHlwZTogJ2hhc19leGFtcGxlJywgcGF0dGVybjogL3NlZVxccysoXFx3K1stXFx3XSopXFxzK2ZvclxccytleGFtcGxlL2dpLCBjb25maWRlbmNlOiAwLjcgfVxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlbGF0aW9uc2hpcE1hbmFnZXJPcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29uZmlnID0ge30sXG4gICAgICB2ZXJiVHJpZ2dlck1hbmFnZXIsXG4gICAgICBubHBTY29yaW5nLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBtaW5Db25maWRlbmNlOiBjb25maWcubWluQ29uZmlkZW5jZSB8fCAwLjUsXG4gICAgICBtYXhSZWxhdGlvbnNoaXBzUGVyRWxlbWVudDogY29uZmlnLm1heFJlbGF0aW9uc2hpcHNQZXJFbGVtZW50IHx8IDIwLFxuICAgICAgZW5hYmxlQXV0b0Rpc2NvdmVyeTogY29uZmlnLmVuYWJsZUF1dG9EaXNjb3ZlcnkgIT09IGZhbHNlLFxuICAgICAgY3VzdG9tUGF0dGVybnM6IGNvbmZpZy5jdXN0b21QYXR0ZXJucyB8fCBbXVxuICAgIH07XG5cbiAgICB0aGlzLl9ubHBTY29yaW5nID0gbmxwU2NvcmluZztcbiAgICB0aGlzLnZlcmJUcmlnZ2VycyA9IHZlcmJUcmlnZ2VyTWFuYWdlcjtcblxuICAgIGxvZ2dlci5kZWJ1ZygnUmVsYXRpb25zaGlwTWFuYWdlciBpbml0aWFsaXplZCcsIHsgY29uZmlnOiB0aGlzLmNvbmZpZyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb3ZlciByZWxhdGlvbnNoaXBzIGZvciBhbGwgZWxlbWVudHMgaW4gdGhlIGluZGV4XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlzY292ZXJSZWxhdGlvbnNoaXBzKGluZGV4OiBFbmhhbmNlZEluZGV4KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgcmVsYXRpb25zaGlwc0ZvdW5kID0gMDtcblxuICAgIC8vIEZJWDogQWRkIHRpbWVvdXQgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wc1xuICAgIGNvbnN0IE1BWF9ESVNDT1ZFUllfVElNRSA9IDMwMDA7IC8vIDMgc2Vjb25kcyBtYXhcblxuICAgIGxvZ2dlci5kZWJ1ZygnU3RhcnRpbmcgcmVsYXRpb25zaGlwIGRpc2NvdmVyeScpO1xuXG4gICAgLy8gRmlyc3QsIGVuc3VyZSBzZW1hbnRpYyByZWxhdGlvbnNoaXBzIGFyZSBjYWxjdWxhdGVkXG4gICAgLy8gKFRoaXMgaXMgYWxyZWFkeSBkb25lIGluIEVuaGFuY2VkSW5kZXhNYW5hZ2VyKVxuXG4gICAgLy8gVGhlbiBkaXNjb3ZlciBvdGhlciByZWxhdGlvbnNoaXAgdHlwZXNcbiAgICBmb3IgKGNvbnN0IFt0eXBlLCBlbGVtZW50c10gb2YgT2JqZWN0LmVudHJpZXMoaW5kZXguZWxlbWVudHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50cykpIHtcbiAgICAgICAgLy8gRklYOiBDaGVjayB0aW1lb3V0XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID4gTUFYX0RJU0NPVkVSWV9USU1FKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ1JlbGF0aW9uc2hpcCBkaXNjb3ZlcnkgdGltZW91dCcsIHtcbiAgICAgICAgICAgIGVsYXBzZWQ6IERhdGUubm93KCkgLSBzdGFydFRpbWUsXG4gICAgICAgICAgICByZWxhdGlvbnNoaXBzRm91bmRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IHRoaXMuZGlzY292ZXJFbGVtZW50UmVsYXRpb25zaGlwcyhcbiAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgIGAke3R5cGV9OiR7bmFtZX1gLFxuICAgICAgICAgIGluZGV4XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTWVyZ2UgZGlzY292ZXJlZCByZWxhdGlvbnNoaXBzIHdpdGggZXhpc3Rpbmcgb25lc1xuICAgICAgICBpZiAoZGlzY292ZXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKCFlbGVtZW50LnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVsYXRpb25zaGlwcyA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoY29uc3QgcmVsIG9mIGRpc2NvdmVyZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbFR5cGUgPSByZWwudHlwZT8uc3BsaXQoJ18nKS5qb2luKCdfJykgfHwgJ3JlbGF0ZWQnO1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50LnJlbGF0aW9uc2hpcHNbcmVsVHlwZV0pIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5yZWxhdGlvbnNoaXBzW3JlbFR5cGVdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHJlbGF0aW9uc2hpcCBhbHJlYWR5IGV4aXN0c1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBlbGVtZW50LnJlbGF0aW9uc2hpcHNbcmVsVHlwZV0uZmluZChcbiAgICAgICAgICAgICAgciA9PiByLmVsZW1lbnQgPT09IHJlbC5lbGVtZW50XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQucmVsYXRpb25zaGlwc1tyZWxUeXBlXS5wdXNoKHJlbCk7XG4gICAgICAgICAgICAgIHJlbGF0aW9uc2hpcHNGb3VuZCsrO1xuXG4gICAgICAgICAgICAgIC8vIEFkZCBpbnZlcnNlIHJlbGF0aW9uc2hpcCBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRJbnZlcnNlUmVsYXRpb25zaGlwKHJlbCwgYCR7dHlwZX06JHtuYW1lfWAsIGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgbG9nZ2VyLmluZm8oJ1JlbGF0aW9uc2hpcCBkaXNjb3ZlcnkgY29tcGxldGVkJywge1xuICAgICAgZHVyYXRpb246IGAke2R1cmF0aW9ufW1zYCxcbiAgICAgIHJlbGF0aW9uc2hpcHNGb3VuZFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2NvdmVyIHJlbGF0aW9uc2hpcHMgZm9yIGEgc2luZ2xlIGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGlzY292ZXJFbGVtZW50UmVsYXRpb25zaGlwcyhcbiAgICBlbGVtZW50OiBFbGVtZW50RGVmaW5pdGlvbixcbiAgICBlbGVtZW50SWQ6IHN0cmluZyxcbiAgICBpbmRleDogRW5oYW5jZWRJbmRleFxuICApOiBQcm9taXNlPFJlbGF0aW9uc2hpcFtdPiB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwczogUmVsYXRpb25zaGlwW10gPSBbXTtcblxuICAgIGlmICghdGhpcy5jb25maWcuZW5hYmxlQXV0b0Rpc2NvdmVyeSkge1xuICAgICAgcmV0dXJuIHJlbGF0aW9uc2hpcHM7XG4gICAgfVxuXG4gICAgLy8gQ29tYmluZSB0ZXh0IGZyb20gdmFyaW91cyBmaWVsZHMgZm9yIGFuYWx5c2lzXG4gICAgbGV0IHRleHQgPSB0aGlzLmdldEVsZW1lbnRUZXh0KGVsZW1lbnQpO1xuXG4gICAgLy8gRklYOiBQcmV2ZW50IFJlRG9TIGF0dGFja3MgYnkgbGltaXRpbmcgaW5wdXQgbGVuZ3RoXG4gICAgY29uc3QgTUFYX1RFWFRfTEVOR1RIID0gNTAwMDA7IC8vIDUwS0IgbGltaXRcbiAgICBpZiAodGV4dC5sZW5ndGggPiBNQVhfVEVYVF9MRU5HVEgpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDb250ZW50IHRvbyBsYXJnZSBmb3IgcmVsYXRpb25zaGlwIGV4dHJhY3Rpb24sIHRydW5jYXRpbmcnLCB7XG4gICAgICAgIG9yaWdpbmFsTGVuZ3RoOiB0ZXh0Lmxlbmd0aCxcbiAgICAgICAgZWxlbWVudElkLFxuICAgICAgICB0cnVuY2F0ZWRUbzogTUFYX1RFWFRfTEVOR1RIXG4gICAgICB9KTtcbiAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBNQVhfVEVYVF9MRU5HVEgpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHBhdHRlcm5zIHRvIGRpc2NvdmVyIHJlbGF0aW9uc2hpcHNcbiAgICBjb25zdCBwYXR0ZXJucyA9IFsuLi50aGlzLmRlZmF1bHRQYXR0ZXJucywgLi4uKHRoaXMuY29uZmlnLmN1c3RvbVBhdHRlcm5zIHx8IFtdKV07XG5cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSB0ZXh0Lm1hdGNoQWxsKHBhdHRlcm4ucGF0dGVybik7XG5cbiAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgICBjb25zdCB0YXJnZXROYW1lID0gbWF0Y2hbMV07XG5cbiAgICAgICAgLy8gRmluZCBtYXRjaGluZyBlbGVtZW50XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0aGlzLmZpbmRFbGVtZW50QnlOYW1lKHRhcmdldE5hbWUsIGluZGV4KTtcbiAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQgJiYgdGFyZ2V0RWxlbWVudCAhPT0gZWxlbWVudElkKSB7XG4gICAgICAgICAgcmVsYXRpb25zaGlwcy5wdXNoKHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IHRhcmdldEVsZW1lbnQsXG4gICAgICAgICAgICB0eXBlOiBwYXR0ZXJuLnR5cGUsXG4gICAgICAgICAgICBzdHJlbmd0aDogcGF0dGVybi5jb25maWRlbmNlLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgZGlzY292ZXJ5TWV0aG9kOiAncGF0dGVybicsXG4gICAgICAgICAgICAgIHBhdHRlcm46IHBhdHRlcm4ucGF0dGVybi5zb3VyY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc2NvdmVyIHZlcmItYmFzZWQgcmVsYXRpb25zaGlwcyAoZml4ZWQ6IG5vdyBwYXNzZXMgaW5kZXggdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSlcbiAgICBjb25zdCB2ZXJiUmVsYXRpb25zaGlwcyA9IHRoaXMuZGlzY292ZXJWZXJiUmVsYXRpb25zaGlwcyhlbGVtZW50LCBlbGVtZW50SWQsIGluZGV4KTtcbiAgICByZWxhdGlvbnNoaXBzLnB1c2goLi4udmVyYlJlbGF0aW9uc2hpcHMpO1xuXG4gICAgLy8gRmlsdGVyIGJ5IGNvbmZpZGVuY2UgYW5kIGxpbWl0XG4gICAgY29uc3QgZmlsdGVyZWQgPSByZWxhdGlvbnNoaXBzXG4gICAgICAuZmlsdGVyKHIgPT4gKHIuc3RyZW5ndGggfHwgMCkgPj0gdGhpcy5jb25maWcubWluQ29uZmlkZW5jZSEpXG4gICAgICAuc29ydCgoYSwgYikgPT4gKGIuc3RyZW5ndGggfHwgMCkgLSAoYS5zdHJlbmd0aCB8fCAwKSlcbiAgICAgIC5zbGljZSgwLCB0aGlzLmNvbmZpZy5tYXhSZWxhdGlvbnNoaXBzUGVyRWxlbWVudCk7XG5cbiAgICByZXR1cm4gZmlsdGVyZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzY292ZXIgcmVsYXRpb25zaGlwcyBiYXNlZCBvbiB2ZXJiIGFzc29jaWF0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBkaXNjb3ZlclZlcmJSZWxhdGlvbnNoaXBzKFxuICAgIF9lbGVtZW50OiBFbGVtZW50RGVmaW5pdGlvbixcbiAgICBlbGVtZW50SWQ6IHN0cmluZyxcbiAgICBpbmRleDogRW5oYW5jZWRJbmRleFxuICApOiBSZWxhdGlvbnNoaXBbXSB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwczogUmVsYXRpb25zaGlwW10gPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBGSVg6IFVzZSBjZW50cmFsaXplZCBlbGVtZW50IElEIHBhcnNpbmdcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRWxlbWVudElkKGVsZW1lbnRJZCk7XG4gICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICAvLyBHZXQgdmVyYnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZWxlbWVudFxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLnZlcmJUcmlnZ2Vycy5nZXRWZXJic0ZvckVsZW1lbnQocGFyc2VkLm5hbWUsIGluZGV4KTtcblxuICAgICAgZm9yIChjb25zdCB2ZXJiIG9mIHZlcmJzKSB7XG4gICAgICAgIC8vIEZpbmQgb3RoZXIgZWxlbWVudHMgd2l0aCBzYW1lIHZlcmJcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMudmVyYlRyaWdnZXJzLmdldEVsZW1lbnRzRm9yVmVyYih2ZXJiLCBpbmRleCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgICAgICAgaWYgKG1hdGNoLm5hbWUgIT09IHBhcnNlZC5uYW1lKSB7XG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgcmVsYXRpb25zaGlwIHR5cGUgYmFzZWQgb24gdmVyYiBjYXRlZ29yeVxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLnZlcmJUcmlnZ2Vycy5nZXRWZXJiQ2F0ZWdvcnkodmVyYik7XG4gICAgICAgICAgICBsZXQgcmVsVHlwZTogUmVsYXRpb25zaGlwVHlwZSA9ICdzaW1pbGFyX3RvJztcblxuICAgICAgICAgICAgc3dpdGNoIChjYXRlZ29yeSkge1xuICAgICAgICAgICAgICBjYXNlICdkZWJ1Z2dpbmcnOlxuICAgICAgICAgICAgICAgIHJlbFR5cGUgPSAnaGVscHNfZGVidWcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdjcmVhdGlvbic6XG4gICAgICAgICAgICAgICAgcmVsVHlwZSA9ICdjb21wbGVtZW50cyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2V4cGxhbmF0aW9uJzpcbiAgICAgICAgICAgICAgICByZWxUeXBlID0gJ3N1cHBvcnRzJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnYW5hbHlzaXMnOlxuICAgICAgICAgICAgICAgIHJlbFR5cGUgPSAnY29tcGxlbWVudHMnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZWxhdGlvbnNoaXBzLnB1c2goe1xuICAgICAgICAgICAgICBlbGVtZW50OiBgJHttYXRjaC50eXBlfToke21hdGNoLm5hbWV9YCxcbiAgICAgICAgICAgICAgdHlwZTogcmVsVHlwZSxcbiAgICAgICAgICAgICAgc3RyZW5ndGg6IG1hdGNoLmNvbmZpZGVuY2UgKiAwLjcsICAvLyBTbGlnaHRseSBsb3dlciBjb25maWRlbmNlIGZvciB2ZXJiLWJhc2VkXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5TWV0aG9kOiAndmVyYicsXG4gICAgICAgICAgICAgICAgdmVyYixcbiAgICAgICAgICAgICAgICBjYXRlZ29yeVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSWYgdmVyYiB0cmlnZ2VyIGZhaWxzLCBqdXN0IGNvbnRpbnVlIHdpdGhvdXQgdmVyYi1iYXNlZCByZWxhdGlvbnNoaXBzXG4gICAgICBsb2dnZXIuZGVidWcoJ1ZlcmItYmFzZWQgcmVsYXRpb25zaGlwIGRpc2NvdmVyeSBmYWlsZWQnLCB7IGVsZW1lbnRJZCwgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbGF0aW9uc2hpcHM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGludmVyc2UgcmVsYXRpb25zaGlwIGlmIGFwcGxpY2FibGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYWRkSW52ZXJzZVJlbGF0aW9uc2hpcChcbiAgICByZWxhdGlvbnNoaXA6IFJlbGF0aW9uc2hpcCxcbiAgICBzb3VyY2VFbGVtZW50OiBzdHJpbmcsXG4gICAgaW5kZXg6IEVuaGFuY2VkSW5kZXhcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVsVHlwZSA9IHJlbGF0aW9uc2hpcC50eXBlIGFzIFJlbGF0aW9uc2hpcFR5cGU7XG4gICAgY29uc3QgaW52ZXJzZVR5cGUgPSBSRUxBVElPTlNISVBfVFlQRVNbcmVsVHlwZV07XG5cbiAgICBpZiAoIWludmVyc2VUeXBlIHx8IGludmVyc2VUeXBlID09PSByZWxUeXBlKSB7XG4gICAgICAvLyBCaWRpcmVjdGlvbmFsIG9yIG5vIGludmVyc2VcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGSVg6IFVzZSBjZW50cmFsaXplZCBlbGVtZW50IElEIHBhcnNpbmdcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUVsZW1lbnRJZChyZWxhdGlvbnNoaXAuZWxlbWVudCk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGluZGV4LmVsZW1lbnRzW3BhcnNlZC50eXBlXT8uW3BhcnNlZC5uYW1lXTtcblxuICAgIGlmICghdGFyZ2V0RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0RWxlbWVudC5yZWxhdGlvbnNoaXBzKSB7XG4gICAgICB0YXJnZXRFbGVtZW50LnJlbGF0aW9uc2hpcHMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldEVsZW1lbnQucmVsYXRpb25zaGlwc1tpbnZlcnNlVHlwZV0pIHtcbiAgICAgIHRhcmdldEVsZW1lbnQucmVsYXRpb25zaGlwc1tpbnZlcnNlVHlwZV0gPSBbXTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBpbnZlcnNlIGFscmVhZHkgZXhpc3RzXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0YXJnZXRFbGVtZW50LnJlbGF0aW9uc2hpcHNbaW52ZXJzZVR5cGVdLmZpbmQoXG4gICAgICByID0+IHIuZWxlbWVudCA9PT0gc291cmNlRWxlbWVudFxuICAgICk7XG5cbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICB0YXJnZXRFbGVtZW50LnJlbGF0aW9uc2hpcHNbaW52ZXJzZVR5cGVdLnB1c2goe1xuICAgICAgICBlbGVtZW50OiBzb3VyY2VFbGVtZW50LFxuICAgICAgICB0eXBlOiBpbnZlcnNlVHlwZSxcbiAgICAgICAgc3RyZW5ndGg6IHJlbGF0aW9uc2hpcC5zdHJlbmd0aCxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAuLi5yZWxhdGlvbnNoaXAubWV0YWRhdGEsXG4gICAgICAgICAgaW52ZXJzZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBlbGVtZW50IGJ5IHBhcnRpYWwgbmFtZSBtYXRjaFxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kRWxlbWVudEJ5TmFtZShuYW1lOiBzdHJpbmcsIGluZGV4OiBFbmhhbmNlZEluZGV4KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbmFtZUxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2VBbGwoL1tfLV0vZywgJycpO1xuXG4gICAgZm9yIChjb25zdCBbdHlwZSwgZWxlbWVudHNdIG9mIE9iamVjdC5lbnRyaWVzKGluZGV4LmVsZW1lbnRzKSkge1xuICAgICAgZm9yIChjb25zdCBbZWxlbWVudE5hbWUsIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnRzKSkge1xuICAgICAgICBjb25zdCBlbGVtZW50TmFtZUxvd2VyID0gZWxlbWVudE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlQWxsKC9bXy1dL2csICcnKTtcblxuICAgICAgICAvLyBDaGVjayBleGFjdCBtYXRjaCBmaXJzdFxuICAgICAgICBpZiAoZWxlbWVudE5hbWVMb3dlciA9PT0gbmFtZUxvd2VyKSB7XG4gICAgICAgICAgcmV0dXJuIGAke3R5cGV9OiR7ZWxlbWVudE5hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGVsZW1lbnQgbmFtZSBjb250YWlucyB0aGUgc2VhcmNoIHRlcm1cbiAgICAgICAgaWYgKGVsZW1lbnROYW1lTG93ZXIuaW5jbHVkZXMobmFtZUxvd2VyKSB8fCBuYW1lTG93ZXIuaW5jbHVkZXMoZWxlbWVudE5hbWVMb3dlcikpIHtcbiAgICAgICAgICByZXR1cm4gYCR7dHlwZX06JHtlbGVtZW50TmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZGlzcGxheSBuYW1lXG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lTG93ZXIgPSBlbGVtZW50LmNvcmUubmFtZT8udG9Mb3dlckNhc2UoKS5yZXBsYWNlQWxsKC9bXy1dL2csICcnKTtcbiAgICAgICAgaWYgKGRpc3BsYXlOYW1lTG93ZXIgJiYgKGRpc3BsYXlOYW1lTG93ZXIgPT09IG5hbWVMb3dlciB8fCBkaXNwbGF5TmFtZUxvd2VyLmluY2x1ZGVzKG5hbWVMb3dlcikpKSB7XG4gICAgICAgICAgcmV0dXJuIGAke3R5cGV9OiR7ZWxlbWVudE5hbWV9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb21iaW5lZCB0ZXh0IGZyb20gZWxlbWVudCBmb3IgYW5hbHlzaXNcbiAgICovXG4gIHByaXZhdGUgZ2V0RWxlbWVudFRleHQoZWxlbWVudDogRWxlbWVudERlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gQ29yZSBmaWVsZHNcbiAgICBpZiAoZWxlbWVudC5jb3JlLm5hbWUpIHBhcnRzLnB1c2goZWxlbWVudC5jb3JlLm5hbWUpO1xuICAgIGlmIChlbGVtZW50LmNvcmUuZGVzY3JpcHRpb24pIHBhcnRzLnB1c2goZWxlbWVudC5jb3JlLmRlc2NyaXB0aW9uKTtcblxuICAgIC8vIEtleXdvcmRzIGFuZCB0YWdzIGZyb20gc2VhcmNoIG9wdGltaXphdGlvblxuICAgIGlmIChlbGVtZW50LnNlYXJjaD8ua2V5d29yZHMpIHBhcnRzLnB1c2goLi4uZWxlbWVudC5zZWFyY2gua2V5d29yZHMpO1xuICAgIGlmIChlbGVtZW50LnNlYXJjaD8udGFncykgcGFydHMucHVzaCguLi5lbGVtZW50LnNlYXJjaC50YWdzKTtcblxuICAgIC8vIEN1c3RvbSBmaWVsZHMgKG1pZ2h0IGNvbnRhaW4gcmVsZXZhbnQgdGV4dClcbiAgICBpZiAoZWxlbWVudC5jdXN0b20pIHtcbiAgICAgIGNvbnN0IGN1c3RvbVRleHQgPSB0aGlzLmV4dHJhY3RUZXh0RnJvbU9iamVjdChlbGVtZW50LmN1c3RvbSk7XG4gICAgICBpZiAoY3VzdG9tVGV4dCkgcGFydHMucHVzaChjdXN0b21UZXh0KTtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWxpemUgVW5pY29kZSBmb3Igc2VjdXJpdHkgKERNQ1AtU0VDLTAwNClcbiAgICBjb25zdCBjb21iaW5lZFRleHQgPSBwYXJ0cy5qb2luKCcgJyk7XG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGNvbWJpbmVkVGV4dCk7XG4gICAgaWYgKHZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXMgJiYgdmFsaWRhdGlvbi5kZXRlY3RlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIud2FybignVW5pY29kZSBpc3N1ZXMgaW4gcmVsYXRpb25zaGlwIHRleHQnLCB7IGlzc3VlczogdmFsaWRhdGlvbi5kZXRlY3RlZElzc3VlcyB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGlvbi5ub3JtYWxpemVkQ29udGVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHRleHQgZnJvbSBuZXN0ZWQgb2JqZWN0XG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RUZXh0RnJvbU9iamVjdChvYmo6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdGV4dHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMob2JqKSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGV4dHMucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRleHRzLnB1c2goLi4udmFsdWUuZmlsdGVyKHYgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbmVzdGVkID0gdGhpcy5leHRyYWN0VGV4dEZyb21PYmplY3QodmFsdWUpO1xuICAgICAgICBpZiAobmVzdGVkKSB0ZXh0cy5wdXNoKG5lc3RlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHNob3J0ZXN0IHBhdGggYmV0d2VlbiB0d28gZWxlbWVudHNcbiAgICovXG4gIHB1YmxpYyBmaW5kUGF0aChcbiAgICBmcm9tRWxlbWVudDogc3RyaW5nLFxuICAgIHRvRWxlbWVudDogc3RyaW5nLFxuICAgIGluZGV4OiBFbmhhbmNlZEluZGV4LFxuICAgIG9wdGlvbnM6IFRyYXZlcnNhbE9wdGlvbnMgPSB7fVxuICApOiBFbGVtZW50UGF0aCB8IG51bGwge1xuICAgIGNvbnN0IHtcbiAgICAgIG1heERlcHRoID0gNSxcbiAgICAgIHJlbGF0aW9uc2hpcFR5cGVzLFxuICAgICAgbWluU3RyZW5ndGggPSAwLFxuICAgICAgdmlzaXRlZCA9IG5ldyBTZXQoKVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgLy8gQkZTIHRvIGZpbmQgc2hvcnRlc3QgcGF0aFxuICAgIGNvbnN0IHF1ZXVlOiBFbGVtZW50UGF0aFtdID0gW3tcbiAgICAgIHBhdGg6IFtmcm9tRWxlbWVudF0sXG4gICAgICByZWxhdGlvbnNoaXBzOiBbXSxcbiAgICAgIHRvdGFsU3RyZW5ndGg6IDEuMFxuICAgIH1dO1xuXG4gICAgdmlzaXRlZC5hZGQoZnJvbUVsZW1lbnQpO1xuXG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBxdWV1ZS5zaGlmdCgpITtcblxuICAgICAgaWYgKGN1cnJlbnQucGF0aC5sZW5ndGggPiBtYXhEZXB0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50LnBhdGhbY3VycmVudC5wYXRoLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IHRvRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cblxuICAgICAgLy8gRklYOiBVc2UgY2VudHJhbGl6ZWQgZWxlbWVudCBJRCBwYXJzaW5nXG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUVsZW1lbnRJZChjdXJyZW50RWxlbWVudCk7XG4gICAgICBpZiAoIXBhcnNlZCkgY29udGludWU7XG4gICAgICBjb25zdCBlbGVtZW50ID0gaW5kZXguZWxlbWVudHNbcGFyc2VkLnR5cGVdPy5bcGFyc2VkLm5hbWVdO1xuXG4gICAgICBpZiAoIWVsZW1lbnQ/LnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEV4cGxvcmUgYWxsIHJlbGF0aW9uc2hpcHNcbiAgICAgIGZvciAoY29uc3QgW3JlbFR5cGUsIHJlbGF0aW9uc10gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudC5yZWxhdGlvbnNoaXBzKSkge1xuICAgICAgICAvLyBGaWx0ZXIgYnkgcmVsYXRpb25zaGlwIHR5cGVzIGlmIHNwZWNpZmllZFxuICAgICAgICBpZiAocmVsYXRpb25zaGlwVHlwZXMgJiYgIXJlbGF0aW9uc2hpcFR5cGVzLmluY2x1ZGVzKHJlbFR5cGUgYXMgUmVsYXRpb25zaGlwVHlwZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmVsIG9mIHJlbGF0aW9ucykge1xuICAgICAgICAgIC8vIEZpbHRlciBieSBzdHJlbmd0aFxuICAgICAgICAgIGlmICgocmVsLnN0cmVuZ3RoIHx8IDApIDwgbWluU3RyZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdmlzaXRlZC5oYXMocmVsLmVsZW1lbnQpKSB7XG4gICAgICAgICAgICB2aXNpdGVkLmFkZChyZWwuZWxlbWVudCk7XG5cbiAgICAgICAgICAgIHF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICBwYXRoOiBbLi4uY3VycmVudC5wYXRoLCByZWwuZWxlbWVudF0sXG4gICAgICAgICAgICAgIHJlbGF0aW9uc2hpcHM6IFsuLi5jdXJyZW50LnJlbGF0aW9uc2hpcHMsIHJlbFR5cGUgYXMgUmVsYXRpb25zaGlwVHlwZV0sXG4gICAgICAgICAgICAgIHRvdGFsU3RyZW5ndGg6IGN1cnJlbnQudG90YWxTdHJlbmd0aCAqIChyZWwuc3RyZW5ndGggfHwgMC41KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBjb25uZWN0ZWQgZWxlbWVudHMgd2l0aGluIGEgY2VydGFpbiBkZXB0aFxuICAgKi9cbiAgcHVibGljIGdldENvbm5lY3RlZEVsZW1lbnRzKFxuICAgIGVsZW1lbnQ6IHN0cmluZyxcbiAgICBpbmRleDogRW5oYW5jZWRJbmRleCxcbiAgICBvcHRpb25zOiBUcmF2ZXJzYWxPcHRpb25zID0ge31cbiAgKTogTWFwPHN0cmluZywgRWxlbWVudFBhdGg+IHtcbiAgICBjb25zdCB7XG4gICAgICBtYXhEZXB0aCA9IDIsXG4gICAgICByZWxhdGlvbnNoaXBUeXBlcyxcbiAgICAgIG1pblN0cmVuZ3RoID0gMFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgY29ubmVjdGVkID0gbmV3IE1hcDxzdHJpbmcsIEVsZW1lbnRQYXRoPigpO1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PHN0cmluZz4oW2VsZW1lbnRdKTtcblxuICAgIGNvbnN0IHF1ZXVlOiBFbGVtZW50UGF0aFtdID0gW3tcbiAgICAgIHBhdGg6IFtlbGVtZW50XSxcbiAgICAgIHJlbGF0aW9uc2hpcHM6IFtdLFxuICAgICAgdG90YWxTdHJlbmd0aDogMS4wXG4gICAgfV07XG5cbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHF1ZXVlLnNoaWZ0KCkhO1xuXG4gICAgICBpZiAoY3VycmVudC5wYXRoLmxlbmd0aCA+IG1heERlcHRoICsgMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50LnBhdGhbY3VycmVudC5wYXRoLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gRklYOiBVc2UgY2VudHJhbGl6ZWQgZWxlbWVudCBJRCBwYXJzaW5nXG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUVsZW1lbnRJZChjdXJyZW50RWxlbWVudCk7XG4gICAgICBpZiAoIXBhcnNlZCkgY29udGludWU7XG4gICAgICBjb25zdCBlbGVtZW50RGVmID0gaW5kZXguZWxlbWVudHNbcGFyc2VkLnR5cGVdPy5bcGFyc2VkLm5hbWVdO1xuXG4gICAgICBpZiAoIWVsZW1lbnREZWY/LnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW3JlbFR5cGUsIHJlbGF0aW9uc10gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudERlZi5yZWxhdGlvbnNoaXBzKSkge1xuICAgICAgICBpZiAocmVsYXRpb25zaGlwVHlwZXMgJiYgIXJlbGF0aW9uc2hpcFR5cGVzLmluY2x1ZGVzKHJlbFR5cGUgYXMgUmVsYXRpb25zaGlwVHlwZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmVsIG9mIHJlbGF0aW9ucykge1xuICAgICAgICAgIGlmICgocmVsLnN0cmVuZ3RoIHx8IDApIDwgbWluU3RyZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdmlzaXRlZC5oYXMocmVsLmVsZW1lbnQpKSB7XG4gICAgICAgICAgICB2aXNpdGVkLmFkZChyZWwuZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhdGg6IEVsZW1lbnRQYXRoID0ge1xuICAgICAgICAgICAgICBwYXRoOiBbLi4uY3VycmVudC5wYXRoLCByZWwuZWxlbWVudF0sXG4gICAgICAgICAgICAgIHJlbGF0aW9uc2hpcHM6IFsuLi5jdXJyZW50LnJlbGF0aW9uc2hpcHMsIHJlbFR5cGUgYXMgUmVsYXRpb25zaGlwVHlwZV0sXG4gICAgICAgICAgICAgIHRvdGFsU3RyZW5ndGg6IGN1cnJlbnQudG90YWxTdHJlbmd0aCAqIChyZWwuc3RyZW5ndGggfHwgMC41KVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29ubmVjdGVkLnNldChyZWwuZWxlbWVudCwgcGF0aCk7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50LnBhdGgubGVuZ3RoIDwgbWF4RGVwdGgpIHtcbiAgICAgICAgICAgICAgcXVldWUucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29ubmVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZWxhdGlvbnNoaXAgc3RhdGlzdGljcyBmb3IgdGhlIGluZGV4XG4gICAqL1xuICBwdWJsaWMgZ2V0UmVsYXRpb25zaGlwU3RhdHMoaW5kZXg6IEVuaGFuY2VkSW5kZXgpOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHtcbiAgICBjb25zdCBzdGF0czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgICAgIHRvdGFsUmVsYXRpb25zaGlwczogMCxcbiAgICAgIGVsZW1lbnRzV2l0aFJlbGF0aW9uc2hpcHM6IDBcbiAgICB9O1xuXG4gICAgLy8gQ291bnQgYnkgcmVsYXRpb25zaGlwIHR5cGVcbiAgICBmb3IgKGNvbnN0IHJlbFR5cGUgb2YgT2JqZWN0LmtleXMoUkVMQVRJT05TSElQX1RZUEVTKSkge1xuICAgICAgc3RhdHNbcmVsVHlwZV0gPSAwO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZWxlbWVudHMgb2YgT2JqZWN0LnZhbHVlcyhpbmRleC5lbGVtZW50cykpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBPYmplY3QudmFsdWVzKGVsZW1lbnRzKSkge1xuICAgICAgICBpZiAoZWxlbWVudC5yZWxhdGlvbnNoaXBzKSB7XG4gICAgICAgICAgc3RhdHMuZWxlbWVudHNXaXRoUmVsYXRpb25zaGlwcysrO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbcmVsVHlwZSwgcmVsYXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50LnJlbGF0aW9uc2hpcHMpKSB7XG4gICAgICAgICAgICBjb25zdCBjb3VudCA9IHJlbGF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBzdGF0cy50b3RhbFJlbGF0aW9uc2hpcHMgKz0gY291bnQ7XG4gICAgICAgICAgICBzdGF0c1tyZWxUeXBlXSA9IChzdGF0c1tyZWxUeXBlXSB8fCAwKSArIGNvdW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0cztcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VerbTriggerManager.d.ts","sourceRoot":"","sources":["../../src/portfolio/VerbTriggerManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAoB,MAAM,uBAAuB,CAAC;AAI3F;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;CAoCzB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAEhC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,mBAAmB,CAAC;CACtE;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,GAAE,iBAAsB;IAW1C;;OAEG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAmE5C;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;OAIG;IACI,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,EAAE;IAI7E;;OAEG;IACH,OAAO,CAAC,0BAA0B;
|
|
1
|
+
{"version":3,"file":"VerbTriggerManager.d.ts","sourceRoot":"","sources":["../../src/portfolio/VerbTriggerManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAoB,MAAM,uBAAuB,CAAC;AAI3F;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;CAoCzB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAEhC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,mBAAmB,CAAC;CACtE;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,GAAE,iBAAsB;IAW1C;;OAEG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAmE5C;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;OAIG;IACI,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,EAAE;IAI7E;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAqKlC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASnD;;;;OAIG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE;IAwBrE;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAY5D;;OAEG;IACI,UAAU,IAAI,IAAI;IAQzB;;;;OAIG;IACI,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,EAAE;IA0C9E;;OAEG;IACI,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE;CAqDpE"}
|
|
@@ -330,23 +330,6 @@ export class VerbTriggerManager {
|
|
|
330
330
|
const limited = filtered.slice(0, this.config.maxElementsPerVerb);
|
|
331
331
|
// Cache the results
|
|
332
332
|
this.verbCache.set(verb, limited);
|
|
333
|
-
// FIX: Proper audit logging for verb trigger operations
|
|
334
|
-
// Previously: Used 'ELEMENT_CREATED' which was incorrect
|
|
335
|
-
// Now: Using 'VERB_TRIGGERED' for operational observability
|
|
336
|
-
if (limited.length > 0) {
|
|
337
|
-
SecurityMonitor.logSecurityEvent({
|
|
338
|
-
type: 'VERB_TRIGGERED', // Cast needed until security types updated
|
|
339
|
-
severity: 'LOW',
|
|
340
|
-
source: 'VerbTriggerManager.getElementsForVerb',
|
|
341
|
-
details: `Verb '${verb}' triggered, matched ${limited.length} elements`,
|
|
342
|
-
metadata: {
|
|
343
|
-
verb,
|
|
344
|
-
elementCount: limited.length,
|
|
345
|
-
topElement: limited[0]?.name,
|
|
346
|
-
confidence: limited[0]?.confidence
|
|
347
|
-
}
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
333
|
return limited;
|
|
351
334
|
}
|
|
352
335
|
/**
|
|
@@ -427,8 +410,11 @@ export class VerbTriggerManager {
|
|
|
427
410
|
* Clear verb cache (useful after index updates)
|
|
428
411
|
*/
|
|
429
412
|
clearCache() {
|
|
413
|
+
const cleared = this.verbCache.size;
|
|
430
414
|
this.verbCache.clear();
|
|
431
|
-
|
|
415
|
+
if (cleared > 0) {
|
|
416
|
+
logger.debug('Verb cache cleared', { entriesCleared: cleared });
|
|
417
|
+
}
|
|
432
418
|
}
|
|
433
419
|
/**
|
|
434
420
|
* Get all verbs that map to a specific element
|
|
@@ -522,4 +508,4 @@ export class VerbTriggerManager {
|
|
|
522
508
|
return [...new Set(suggestions)]; // Remove duplicates
|
|
523
509
|
}
|
|
524
510
|
}
|
|
525
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVyYlRyaWdnZXJNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvcnRmb2xpby9WZXJiVHJpZ2dlck1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUU5RTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRztJQUMzQixxQkFBcUI7SUFDckIsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDO0lBRXJGLHFCQUFxQjtJQUNyQixRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUM7SUFFbEYseUJBQXlCO0lBQ3pCLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQztJQUUzRiwyQkFBMkI7SUFDM0IsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDO0lBRTFGLGtCQUFrQjtJQUNsQixNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7SUFFaEYsc0JBQXNCO0lBQ3RCLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxTQUFT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LFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDdkQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFFLG9CQUFvQjtJQUN6RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZlcmIgVHJpZ2dlciBNYW5hZ2VyIC0gTWFwcyBhY3Rpb24gdmVyYnMgdG8gZWxlbWVudHNcbiAqXG4gKiBUaGlzIG1hbmFnZXIgaGFuZGxlcyB2ZXJiLWJhc2VkIGFjdGlvbiB0cmlnZ2VycyB0aGF0IG1hcCB1c2VyIGludGVudFxuICogdG8gc3BlY2lmaWMgZWxlbWVudHMuIFVzZXMgYWN0aW9uIHZlcmJzIChkZWJ1ZywgZml4LCBjcmVhdGUpIGluc3RlYWRcbiAqIG9mIG5vdW5zIGZvciBiZXR0ZXIgaW50ZW50IG1hdGNoaW5nLlxuICpcbiAqIEtleSBwcmluY2lwbGVzOlxuICogLSBWZXJicyBoYXZlIGhpZ2hlciBhdHRlbnRpb24gcHJvYmFiaWxpdHkgdGhhbiBub3Vuc1xuICogLSBNdWx0aXBsZSB2ZXJicyBjYW4gbWFwIHRvIHRoZSBzYW1lIGVsZW1lbnRcbiAqIC0gVmVyYnMgYXJlIGV4dHJhY3RlZCBmcm9tIHF1ZXJpZXMgYW5kIGVsZW1lbnQgbWV0YWRhdGFcbiAqIC0gU3VwcG9ydHMgc3lub255bXMgYW5kIHJlbGF0ZWQgdmVyYiBmb3Jtc1xuICovXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBFbmhhbmNlZEluZGV4LCBFbGVtZW50RGVmaW5pdGlvbiwgQWN0aW9uRGVmaW5pdGlvbiB9IGZyb20gJy4vdHlwZXMvSW5kZXhUeXBlcy5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5cbi8qKlxuICogVmVyYiB0YXhvbm9teSAtIENvbW1vbiB2ZXJicyBncm91cGVkIGJ5IGludGVudFxuICovXG5leHBvcnQgY29uc3QgVkVSQl9UQVhPTk9NWSA9IHtcbiAgLy8gRGVidWdnaW5nICYgRml4aW5nXG4gIGRlYnVnZ2luZzogWydkZWJ1ZycsICdmaXgnLCAndHJvdWJsZXNob290JywgJ2RpYWdub3NlJywgJ3NvbHZlJywgJ3Jlc29sdmUnLCAncmVwYWlyJ10sXG5cbiAgLy8gQ3JlYXRpbmcgJiBXcml0aW5nXG4gIGNyZWF0aW9uOiBbJ2NyZWF0ZScsICd3cml0ZScsICdnZW5lcmF0ZScsICdtYWtlJywgJ2J1aWxkJywgJ2NvbnN0cnVjdCcsICdjb21wb3NlJ10sXG5cbiAgLy8gRXhwbGFuYXRpb24gJiBMZWFybmluZ1xuICBleHBsYW5hdGlvbjogWydleHBsYWluJywgJ3RlYWNoJywgJ2NsYXJpZnknLCAnZGVzY3JpYmUnLCAnc2ltcGxpZnknLCAnZWxhYm9yYXRlJywgJ2RlZmluZSddLFxuXG4gIC8vIEFuYWx5c2lzICYgSW52ZXN0aWdhdGlvblxuICBhbmFseXNpczogWydhbmFseXplJywgJ2ludmVzdGlnYXRlJywgJ2V4YW1pbmUnLCAnaW5zcGVjdCcsICdyZXZpZXcnLCAnYXNzZXNzJywgJ2V2YWx1YXRlJ10sXG5cbiAgLy8gTWVtb3J5ICYgUmVjYWxsXG4gIHJlY2FsbDogWydyZW1lbWJlcicsICdyZWNhbGwnLCAncmV0cmlldmUnLCAnZmluZCcsICdsb2NhdGUnLCAnc2VhcmNoJywgJ2xvb2t1cCddLFxuXG4gIC8vIEV4ZWN1dGlvbiAmIFJ1bm5pbmdcbiAgZXhlY3V0aW9uOiBbJ3J1bicsICdleGVjdXRlJywgJ3N0YXJ0JywgJ2xhdW5jaCcsICdhY3RpdmF0ZScsICd0cmlnZ2VyJywgJ2ludm9rZSddLFxuXG4gIC8vIFRlc3RpbmcgJiBWYWxpZGF0aW9uXG4gIHRlc3Rpbmc6IFsndGVzdCcsICd2ZXJpZnknLCAndmFsaWRhdGUnLCAnY2hlY2snLCAnY29uZmlybScsICdlbnN1cmUnLCAncHJvdmUnXSxcblxuICAvLyBDb25maWd1cmF0aW9uICYgU2V0dXBcbiAgY29uZmlndXJhdGlvbjogWydjb25maWd1cmUnLCAnc2V0dXAnLCAnaW5zdGFsbCcsICdpbml0aWFsaXplJywgJ3ByZXBhcmUnLCAnYXJyYW5nZSddLFxuXG4gIC8vIFNlY3VyaXR5ICYgUHJvdGVjdGlvblxuICBzZWN1cml0eTogWydzZWN1cmUnLCAncHJvdGVjdCcsICdhdWRpdCcsICdzY2FuJywgJ2VuY3J5cHQnLCAnYXV0aGVudGljYXRlJywgJ2F1dGhvcml6ZSddLFxuXG4gIC8vIE9wdGltaXphdGlvbiAmIEltcHJvdmVtZW50XG4gIG9wdGltaXphdGlvbjogWydvcHRpbWl6ZScsICdpbXByb3ZlJywgJ2VuaGFuY2UnLCAncmVmYWN0b3InLCAnc3RyZWFtbGluZScsICdhY2NlbGVyYXRlJ10sXG5cbiAgLy8gRG9jdW1lbnRhdGlvblxuICBkb2N1bWVudGF0aW9uOiBbJ2RvY3VtZW50JywgJ2Fubm90YXRlJywgJ2NvbW1lbnQnLCAncmVjb3JkJywgJ25vdGUnLCAnbG9nJ10sXG5cbiAgLy8gQ29sbGFib3JhdGlvblxuICBjb2xsYWJvcmF0aW9uOiBbJ3NoYXJlJywgJ2NvbGxhYm9yYXRlJywgJ3N5bmMnLCAnbWVyZ2UnLCAnaW50ZWdyYXRlJywgJ2NvbWJpbmUnXVxufTtcblxuLyoqXG4gKiBWZXJiIHRyaWdnZXIgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmJUcmlnZ2VyQ29uZmlnIHtcbiAgLy8gTWluaW11bSBjb25maWRlbmNlIHRvIHRyaWdnZXJcbiAgY29uZmlkZW5jZVRocmVzaG9sZD86IG51bWJlcjtcblxuICAvLyBXaGV0aGVyIHRvIGluY2x1ZGUgc3lub255bXNcbiAgaW5jbHVkZVN5bm9ueW1zPzogYm9vbGVhbjtcblxuICAvLyBNYXhpbXVtIGVsZW1lbnRzIHRvIHJldHVybiBwZXIgdmVyYlxuICBtYXhFbGVtZW50c1BlclZlcmI/OiBudW1iZXI7XG5cbiAgLy8gQ3VzdG9tIHZlcmIgbWFwcGluZ3NcbiAgY3VzdG9tVmVyYnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG59XG5cbi8qKlxuICogVmVyYiBtYXRjaCByZXN1bHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJiTWF0Y2gge1xuICB2ZXJiOiBzdHJpbmc7XG4gIGVsZW1lbnRzOiBFbGVtZW50TWF0Y2hbXTtcbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudE1hdGNoIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgc291cmNlOiAnZXhwbGljaXQnIHwgJ2luZmVycmVkJyB8ICduYW1lLWJhc2VkJyB8ICdkZXNjcmlwdGlvbi1iYXNlZCc7XG59XG5cbmV4cG9ydCBjbGFzcyBWZXJiVHJpZ2dlck1hbmFnZXIge1xuICBwcml2YXRlIHZlcmJDYWNoZTogTWFwPHN0cmluZywgRWxlbWVudE1hdGNoW10+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGNvbmZpZzogVmVyYlRyaWdnZXJDb25maWc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBWZXJiVHJpZ2dlckNvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBjb25maWRlbmNlVGhyZXNob2xkOiBjb25maWcuY29uZmlkZW5jZVRocmVzaG9sZCB8fCAwLjUsXG4gICAgICBpbmNsdWRlU3lub255bXM6IGNvbmZpZy5pbmNsdWRlU3lub255bXMgIT09IGZhbHNlLFxuICAgICAgbWF4RWxlbWVudHNQZXJWZXJiOiBjb25maWcubWF4RWxlbWVudHNQZXJWZXJiIHx8IDEwLFxuICAgICAgY3VzdG9tVmVyYnM6IGNvbmZpZy5jdXN0b21WZXJicyB8fCB7fVxuICAgIH07XG5cbiAgICBsb2dnZXIuZGVidWcoJ1ZlcmJUcmlnZ2VyTWFuYWdlciBpbml0aWFsaXplZCcsIHsgY29uZmlnOiB0aGlzLmNvbmZpZyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHZlcmJzIGZyb20gYSB1c2VyIHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgZXh0cmFjdFZlcmJzKHF1ZXJ5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gVW5pY29kZSB2YWxpZGF0aW9uIGZvciBzZWN1cml0eVxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShxdWVyeSk7XG4gICAgaWYgKHZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXMgJiYgdmFsaWRhdGlvbi5kZXRlY3RlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdVTklDT0RFX1ZBTElEQVRJT05fRVJST1InLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ1ZlcmJUcmlnZ2VyTWFuYWdlci5leHRyYWN0VmVyYnMnLFxuICAgICAgICBkZXRhaWxzOiBgVW5pY29kZSBpc3N1ZXMgaW4gcXVlcnk6ICR7dmFsaWRhdGlvbi5kZXRlY3RlZElzc3Vlcy5qb2luKCcsICcpfWBcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHZlcmJzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IHZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIENoZWNrIGVhY2ggd29yZCBhZ2FpbnN0IG91ciB2ZXJiIHRheG9ub215XG4gICAgY29uc3Qgd29yZHMgPSBub3JtYWxpemVkUXVlcnkuc3BsaXQoL1xccysvKTtcblxuICAgIGZvciAoY29uc3Qgd29yZCBvZiB3b3Jkcykge1xuICAgICAgLy8gRGlyZWN0IHZlcmIgY2hlY2tcbiAgICAgIGlmICh0aGlzLmlzS25vd25WZXJiKHdvcmQpKSB7XG4gICAgICAgIHZlcmJzLnB1c2god29yZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBpbXBlcmF0aXZlIGZvcm1zIChjb21tb24gaW4gY29tbWFuZHMpXG4gICAgICAvLyBcImRlYnVnIHRoaXNcIiwgXCJmaXggdGhlIGVycm9yXCIsIFwiY3JlYXRlIGEgdGVzdFwiXG4gICAgICBjb25zdCBpbXBlcmF0aXZlUGF0dGVybnMgPSBbXG4gICAgICAgIC9eKGRlYnVnfGZpeHxjcmVhdGV8d3JpdGV8dGVzdHxydW58ZXhwbGFpbnxhbmFseXplKS8sXG4gICAgICAgIC8oaW5nKSQvICAvLyBHZXJ1bmRzOiBkZWJ1Z2dpbmcsIHRlc3RpbmcsIGNyZWF0aW5nXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgaW1wZXJhdGl2ZVBhdHRlcm5zKSB7XG4gICAgICAgIGlmIChwYXR0ZXJuLnRlc3Qod29yZCkgJiYgIXZlcmJzLmluY2x1ZGVzKHdvcmQpKSB7XG4gICAgICAgICAgY29uc3QgYmFzZVZlcmIgPSB0aGlzLmdldEJhc2VWZXJiKHdvcmQpO1xuICAgICAgICAgIGlmIChiYXNlVmVyYikgdmVyYnMucHVzaChiYXNlVmVyYik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbHNvIGNoZWNrIGZvciB2ZXJiIHBocmFzZXNcbiAgICBjb25zdCB2ZXJiUGhyYXNlcyA9IFtcbiAgICAgICdmaWd1cmUgb3V0JywgJ3dvcmsgb3V0JywgJ3NvcnQgb3V0JywgJ2ZpbmQgb3V0JyxcbiAgICAgICdzZXQgdXAnLCAnY2xlYW4gdXAnLCAnZm9sbG93IHVwJyxcbiAgICAgICdicmVhayBkb3duJywgJ3dyaXRlIGRvd24nLCAndHJhY2sgZG93bidcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBwaHJhc2Ugb2YgdmVyYlBocmFzZXMpIHtcbiAgICAgIGlmIChub3JtYWxpemVkUXVlcnkuaW5jbHVkZXMocGhyYXNlKSkge1xuICAgICAgICAvLyBNYXAgcGhyYXNlcyB0byBiYXNlIHZlcmJzXG4gICAgICAgIGNvbnN0IGJhc2VWZXJiID0gdGhpcy5tYXBQaHJhc2VUb1ZlcmIocGhyYXNlKTtcbiAgICAgICAgaWYgKGJhc2VWZXJiICYmICF2ZXJicy5pbmNsdWRlcyhiYXNlVmVyYikpIHtcbiAgICAgICAgICB2ZXJicy5wdXNoKGJhc2VWZXJiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluY2x1ZGUgY3VzdG9tIHZlcmJzIGZyb20gY29uZmlnXG4gICAgZm9yIChjb25zdCBjdXN0b21WZXJiIG9mIE9iamVjdC5rZXlzKHRoaXMuY29uZmlnLmN1c3RvbVZlcmJzIHx8IHt9KSkge1xuICAgICAgaWYgKG5vcm1hbGl6ZWRRdWVyeS5pbmNsdWRlcyhjdXN0b21WZXJiKSAmJiAhdmVyYnMuaW5jbHVkZXMoY3VzdG9tVmVyYikpIHtcbiAgICAgICAgdmVyYnMucHVzaChjdXN0b21WZXJiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoJ0V4dHJhY3RlZCB2ZXJicyBmcm9tIHF1ZXJ5JywgeyBxdWVyeSwgdmVyYnMgfSk7XG4gICAgcmV0dXJuIHZlcmJzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgd29yZCBpcyBhIGtub3duIHZlcmJcbiAgICovXG4gIHByaXZhdGUgaXNLbm93blZlcmIod29yZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCB2ZXJicyBvZiBPYmplY3QudmFsdWVzKFZFUkJfVEFYT05PTVkpKSB7XG4gICAgICBpZiAodmVyYnMuaW5jbHVkZXMod29yZCkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGJhc2UgZm9ybSBvZiBhIHZlcmIgKHJlbW92ZSAtaW5nLCAtZWQsIGV0Yy4pXG4gICAqXG4gICAqIFRyYW5zZm9ybXMgdmVyYiB2YXJpYXRpb25zIGJhY2sgdG8gdGhlaXIgYmFzZSBmb3JtIHRvIGVuYWJsZSBmbGV4aWJsZSBtYXRjaGluZy5cbiAgICogRm9yIGV4YW1wbGUsIFwiZGVidWdnaW5nXCIsIFwiZGVidWdnZWRcIiwgXCJkZWJ1Z3NcIiBhbGwgbWFwIHRvIFwiZGVidWdcIi5cbiAgICovXG4gIHByaXZhdGUgZ2V0QmFzZVZlcmIod29yZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gSGFuZGxlIGNvbW1vbiB2ZXJiIGVuZGluZ3Mgd2l0aCByZWdleCB0cmFuc2Zvcm1hdGlvbnNcbiAgICBjb25zdCB0cmFuc2Zvcm1hdGlvbnM6IFtSZWdFeHAsIHN0cmluZ11bXSA9IFtcbiAgICAgIC8vIEhhbmRsZSBnZXJ1bmRzIHdpdGggZG91YmxlZCBjb25zb25hbnRzIChkZWJ1Z2dpbmfihpJkZWJ1ZywgcnVubmluZ+KGknJ1biwgcGxhbm5pbmfihpJwbGFuKVxuICAgICAgLy8gUGF0dGVybjogLyhbYmNkZmdoamtsbW5wcXJzdHZ3eHl6XSlcXDFpbmckLyBjYXB0dXJlcyBkb3VibGVkIGNvbnNvbmFudCArIFwiaW5nXCJcbiAgICAgIC8vIFJlcGxhY2VtZW50OiAnJDEnIGtlZXBzIG9ubHkgc2luZ2xlIGNvbnNvbmFudFxuICAgICAgWy8oW2JjZGZnaGprbG1ucHFyc3R2d3h5el0pXFwxaW5nJC8sICckMSddLFxuICAgICAgWy9pbmckLywgJyddLCAgICAgIC8vIGNyZWF0aW5nIC0+IGNyZWF0ZSwgdGVzdGluZyAtPiB0ZXN0XG4gICAgICBbL3lpbmckLywgJ3knXSwgICAgLy8gYXBwbHlpbmcgLT4gYXBwbHlcbiAgICAgIFsvaWVkJC8sICd5J10sICAgICAvLyBzaW1wbGlmaWVkIC0+IHNpbXBsaWZ5XG4gICAgICBbL2VkJC8sICcnXSwgICAgICAgLy8gY3JlYXRlZCAtPiBjcmVhdGVcbiAgICAgIFsvdGVkJC8sICd0J10sICAgICAvLyBzdGFydGVkIC0+IHN0YXJ0XG4gICAgICBbL3NlcyQvLCAncyddLCAgICAgLy8gYW5hbHlzZXMgLT4gYW5hbHlzZVxuICAgICAgWy96ZXMkLywgJ3plJ10sICAgIC8vIGFuYWx5emVzIC0+IGFuYWx5emVcbiAgICAgIFsvdmVzJC8sICd2ZSddLCAgICAvLyBpbXByb3ZlcyAtPiBpbXByb3ZlXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgW3BhdHRlcm4sIHJlcGxhY2VtZW50XSBvZiB0cmFuc2Zvcm1hdGlvbnMpIHtcbiAgICAgIGlmIChwYXR0ZXJuLnRlc3Qod29yZCkpIHtcbiAgICAgICAgY29uc3QgYmFzZSA9IHdvcmQucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudCk7XG4gICAgICAgIGlmICh0aGlzLmlzS25vd25WZXJiKGJhc2UpKSByZXR1cm4gYmFzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBpdCdzIGFscmVhZHkgYSBiYXNlIHZlcmJcbiAgICBpZiAodGhpcy5pc0tub3duVmVyYih3b3JkKSkgcmV0dXJuIHdvcmQ7XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgdmVyYiBwaHJhc2VzIHRvIGJhc2UgdmVyYnNcbiAgICovXG4gIHByaXZhdGUgbWFwUGhyYXNlVG9WZXJiKHBocmFzZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgcGhyYXNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ2ZpZ3VyZSBvdXQnOiAnc29sdmUnLFxuICAgICAgJ3dvcmsgb3V0JzogJ3NvbHZlJyxcbiAgICAgICdzb3J0IG91dCc6ICdmaXgnLFxuICAgICAgJ2ZpbmQgb3V0JzogJ2Rpc2NvdmVyJyxcbiAgICAgICdzZXQgdXAnOiAnY29uZmlndXJlJyxcbiAgICAgICdjbGVhbiB1cCc6ICdyZWZhY3RvcicsXG4gICAgICAnZm9sbG93IHVwJzogJ3RyYWNrJyxcbiAgICAgICdicmVhayBkb3duJzogJ2FuYWx5emUnLFxuICAgICAgJ3dyaXRlIGRvd24nOiAnZG9jdW1lbnQnLFxuICAgICAgJ3RyYWNrIGRvd24nOiAnZmluZCdcbiAgICB9O1xuXG4gICAgcmV0dXJuIHBocmFzZU1hcFtwaHJhc2VdIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGVsZW1lbnRzIHRoYXQgbWF0Y2ggYSBzcGVjaWZpYyB2ZXJiXG4gICAqIEBwYXJhbSB2ZXJiIFRoZSB2ZXJiIHRvIHNlYXJjaCBmb3JcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggaW4gKHBhc3NlZCB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5KVxuICAgKi9cbiAgcHVibGljIGdldEVsZW1lbnRzRm9yVmVyYih2ZXJiOiBzdHJpbmcsIGluZGV4OiBFbmhhbmNlZEluZGV4KTogRWxlbWVudE1hdGNoW10ge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzRm9yVmVyYkludGVybmFsKHZlcmIsIGluZGV4LCBuZXcgU2V0KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIHZlcnNpb24gd2l0aCB2aXNpdGVkIHRyYWNraW5nIHRvIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uXG4gICAqL1xuICBwcml2YXRlIGdldEVsZW1lbnRzRm9yVmVyYkludGVybmFsKFxuICAgIHZlcmI6IHN0cmluZyxcbiAgICBpbmRleDogRW5oYW5jZWRJbmRleCxcbiAgICB2aXNpdGVkOiBTZXQ8c3RyaW5nPlxuICApOiBFbGVtZW50TWF0Y2hbXSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UndmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhpcyB2ZXJiIChwcmV2ZW50cyBpbmZpbml0ZSByZWN1cnNpb24pXG4gICAgaWYgKHZpc2l0ZWQuaGFzKHZlcmIpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHZpc2l0ZWQuYWRkKHZlcmIpO1xuXG4gICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICBpZiAodGhpcy52ZXJiQ2FjaGUuaGFzKHZlcmIpKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJiQ2FjaGUuZ2V0KHZlcmIpITtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50czogRWxlbWVudE1hdGNoW10gPSBbXTtcblxuICAgIC8vIDEuIENoZWNrIGN1c3RvbSB2ZXJiIG1hcHBpbmdzIGZpcnN0IChoaWdoZXN0IHByaW9yaXR5KVxuICAgIC8vIEN1c3RvbSB2ZXJicyBnZXQgY29uZmlkZW5jZSAwLjk1IHRvIGVuc3VyZSB0aGV5IG92ZXJyaWRlIGluZGV4LWJhc2VkIG1hcHBpbmdzLlxuICAgIC8vIFRoaXMgYWxsb3dzIHJ1bnRpbWUgY3VzdG9taXphdGlvbiBvZiB2ZXJiLXRvLWVsZW1lbnQgbWFwcGluZ3MsIGVuYWJsaW5nIHVzZXJzXG4gICAgLy8gdG8gZGVmaW5lIHRoZWlyIG93biBhY3Rpb24gdHJpZ2dlcnMgdGhhdCB0YWtlIHByZWNlZGVuY2Ugb3ZlciBzeXN0ZW0gZGVmYXVsdHMuXG4gICAgLy8gRklYOiBVc2Ugb3B0aW9uYWwgY2hhaW4gZm9yIGJldHRlciBtYWludGFpbmFiaWxpdHkgKFNvbmFyQ2xvdWQgTDI4OClcbiAgICBpZiAodGhpcy5jb25maWcuY3VzdG9tVmVyYnM/Llt2ZXJiXSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50TmFtZSBvZiB0aGlzLmNvbmZpZy5jdXN0b21WZXJic1t2ZXJiXSkge1xuICAgICAgICBjb25zdCBlbGVtZW50VHlwZSA9IHRoaXMuZmluZEVsZW1lbnRUeXBlKGVsZW1lbnROYW1lLCBpbmRleCk7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGVsZW1lbnROYW1lLFxuICAgICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlLFxuICAgICAgICAgIGNvbmZpZGVuY2U6IDAuOTUsICAvLyBWZXJ5IGhpZ2ggY29uZmlkZW5jZSBmb3IgY3VzdG9tIG1hcHBpbmdzXG4gICAgICAgICAgc291cmNlOiAnZXhwbGljaXQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIENoZWNrIGV4cGxpY2l0IHZlcmIgbWFwcGluZ3MgaW4gYWN0aW9uX3RyaWdnZXJzXG4gICAgaWYgKGluZGV4LmFjdGlvbl90cmlnZ2Vyc1t2ZXJiXSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50TmFtZSBvZiBpbmRleC5hY3Rpb25fdHJpZ2dlcnNbdmVyYl0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSB0aGlzLmZpbmRFbGVtZW50VHlwZShlbGVtZW50TmFtZSwgaW5kZXgpO1xuICAgICAgICBsZXQgY29uZmlkZW5jZSA9IDAuOTsgLy8gRGVmYXVsdCBmb3IgYWN0aW9uX3RyaWdnZXJzXG5cbiAgICAgICAgLy8gVHJ5IHRvIGdldCBhY3R1YWwgY29uZmlkZW5jZSBmcm9tIGVsZW1lbnQuYWN0aW9ucy5cbiAgICAgICAgLy8gVGhpcyBwcmVzZXJ2ZXMgdGhlIGNvbmZpZGVuY2UgdmFsdWUgZGVmaW5lZCBpbiB0aGUgZWxlbWVudCdzIGFjdGlvbiBkZWZpbml0aW9uXG4gICAgICAgIC8vIHJhdGhlciB0aGFuIHVzaW5nIGEgaGFyZGNvZGVkIGRlZmF1bHQuIEVhY2ggZWxlbWVudCBjYW4gc3BlY2lmeSBkaWZmZXJlbnRcbiAgICAgICAgLy8gY29uZmlkZW5jZSBsZXZlbHMgZm9yIGRpZmZlcmVudCBhY3Rpb25zIGJhc2VkIG9uIGhvdyB3ZWxsLXN1aXRlZCBpdCBpcyBmb3JcbiAgICAgICAgLy8gdGhhdCBwYXJ0aWN1bGFyIHZlcmIgKGUuZy4sIGEgZGVidWdnaW5nIHRvb2wgbWlnaHQgaGF2ZSAwLjk1IGZvciBcImRlYnVnXCJcbiAgICAgICAgLy8gYnV0IG9ubHkgMC42IGZvciBcImFuYWx5emVcIikuXG4gICAgICAgIGlmIChlbGVtZW50VHlwZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGluZGV4LmVsZW1lbnRzW2VsZW1lbnRUeXBlXT8uW2VsZW1lbnROYW1lXTtcbiAgICAgICAgICBpZiAoZWxlbWVudD8uYWN0aW9ucykge1xuICAgICAgICAgICAgLy8gRmluZCB0aGUgYWN0aW9uIGRlZmluaXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgdmVyYlxuICAgICAgICAgICAgY29uc3QgYWN0aW9uRGVmID0gT2JqZWN0LnZhbHVlcyhlbGVtZW50LmFjdGlvbnMpLmZpbmQoXG4gICAgICAgICAgICAgIChhOiBBY3Rpb25EZWZpbml0aW9uKSA9PiBhLnZlcmIgPT09IHZlcmJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYWN0aW9uRGVmPy5jb25maWRlbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29uZmlkZW5jZSA9IGFjdGlvbkRlZi5jb25maWRlbmNlOyAgLy8gVXNlIGVsZW1lbnQncyBkZWZpbmVkIGNvbmZpZGVuY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBlbGVtZW50TmFtZSxcbiAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSxcbiAgICAgICAgICBjb25maWRlbmNlLCAgLy8gTm93IHVzZXMgYWN0dWFsIGNvbmZpZGVuY2UgZnJvbSBlbGVtZW50IGRlZmluaXRpb25cbiAgICAgICAgICBzb3VyY2U6ICdleHBsaWNpdCdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gQ2hlY2sgZWxlbWVudCBhY3Rpb25zIGZvciB0aGlzIHZlcmJcbiAgICBmb3IgKGNvbnN0IFt0eXBlLCB0eXBlRWxlbWVudHNdIG9mIE9iamVjdC5lbnRyaWVzKGluZGV4LmVsZW1lbnRzKSkge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXModHlwZUVsZW1lbnRzKSkge1xuICAgICAgICBpZiAoZWxlbWVudC5hY3Rpb25zKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhlbGVtZW50LmFjdGlvbnMpKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnZlcmIgPT09IHZlcmIpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBlbGVtZW50cy5maW5kKGUgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgICAgaWYgKCFleGlzdGluZykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICBjb25maWRlbmNlOiBhY3Rpb24uY29uZmlkZW5jZSB8fCAwLjcsXG4gICAgICAgICAgICAgICAgICBzb3VyY2U6ICdleHBsaWNpdCdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIENoZWNrIHN5bm9ueW1zIGlmIGVuYWJsZWQgKHdpdGggZGVwdGggbGltaXQpXG4gICAgaWYgKHRoaXMuY29uZmlnLmluY2x1ZGVTeW5vbnltcyAmJiB2aXNpdGVkLnNpemUgPCA1KSB7ICAvLyBNYXggcmVjdXJzaW9uIGRlcHRoIG9mIDVcbiAgICAgIGNvbnN0IHN5bm9ueW1zID0gdGhpcy5nZXRTeW5vbnltcyh2ZXJiKTtcbiAgICAgIGZvciAoY29uc3Qgc3lub255bSBvZiBzeW5vbnltcykge1xuICAgICAgICBpZiAoc3lub255bSAhPT0gdmVyYiAmJiAhdmlzaXRlZC5oYXMoc3lub255bSkpIHtcbiAgICAgICAgICAvLyBQYXNzIHRoZSB2aXNpdGVkIHNldCB0byByZWN1cnNpdmUgY2FsbHNcbiAgICAgICAgICBjb25zdCBzeW5vbnltRWxlbWVudHMgPSB0aGlzLmdldEVsZW1lbnRzRm9yVmVyYkludGVybmFsKHN5bm9ueW0sIGluZGV4LCB2aXNpdGVkKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGVsZW0gb2Ygc3lub255bUVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGVsZW1lbnRzLmZpbmQoZSA9PiBlLm5hbWUgPT09IGVsZW0ubmFtZSk7XG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLmVsZW0sXG4gICAgICAgICAgICAgICAgY29uZmlkZW5jZTogZWxlbS5jb25maWRlbmNlICogMC44LCAvLyBMb3dlciBjb25maWRlbmNlIGZvciBzeW5vbnltc1xuICAgICAgICAgICAgICAgIHNvdXJjZTogJ2luZmVycmVkJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LiBJbmZlciBmcm9tIGVsZW1lbnQgbmFtZXMgKGUuZy4sIFwiZGVidWctZGV0ZWN0aXZlXCIgLT4gXCJkZWJ1Z1wiKVxuICAgIGZvciAoY29uc3QgW3R5cGUsIHR5cGVFbGVtZW50c10gb2YgT2JqZWN0LmVudHJpZXMoaW5kZXguZWxlbWVudHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lXSBvZiBPYmplY3QuZW50cmllcyh0eXBlRWxlbWVudHMpKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnROYW1lTG93ZXIgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChlbGVtZW50TmFtZUxvd2VyLmluY2x1ZGVzKHZlcmIpIHx8XG4gICAgICAgICAgICBlbGVtZW50TmFtZUxvd2VyLmluY2x1ZGVzKHRoaXMuZ2V0QmFzZVZlcmIodmVyYikgfHwgdmVyYikpIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGVsZW1lbnRzLmZpbmQoZSA9PiBlLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICBjb25maWRlbmNlOiAwLjYsICAvLyBNZWRpdW0gY29uZmlkZW5jZSBmb3IgbmFtZS1iYXNlZFxuICAgICAgICAgICAgICBzb3VyY2U6ICduYW1lLWJhc2VkJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNi4gSW5mZXIgZnJvbSBkZXNjcmlwdGlvbnNcbiAgICBmb3IgKGNvbnN0IFt0eXBlLCB0eXBlRWxlbWVudHNdIG9mIE9iamVjdC5lbnRyaWVzKGluZGV4LmVsZW1lbnRzKSkge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXModHlwZUVsZW1lbnRzKSkge1xuICAgICAgICBpZiAoZWxlbWVudC5jb3JlLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgY29uc3QgZGVzY0xvd2VyID0gZWxlbWVudC5jb3JlLmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGRlc2NMb3dlci5pbmNsdWRlcyh2ZXJiKSB8fCBkZXNjTG93ZXIuaW5jbHVkZXModGhpcy5nZXRCYXNlVmVyYih2ZXJiKSB8fCB2ZXJiKSkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBlbGVtZW50cy5maW5kKGUgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGNvbmZpZGVuY2U6IDAuNCwgIC8vIExvd2VyIGNvbmZpZGVuY2UgZm9yIGRlc2NyaXB0aW9uLWJhc2VkXG4gICAgICAgICAgICAgICAgc291cmNlOiAnZGVzY3JpcHRpb24tYmFzZWQnXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbHRlciBieSBjb25maWRlbmNlIHRocmVzaG9sZFxuICAgIGNvbnN0IGZpbHRlcmVkID0gZWxlbWVudHMuZmlsdGVyKGUgPT4gZS5jb25maWRlbmNlID49IHRoaXMuY29uZmlnLmNvbmZpZGVuY2VUaHJlc2hvbGQhKTtcblxuICAgIC8vIFNvcnQgYnkgY29uZmlkZW5jZSAoaGlnaGVzdCBmaXJzdClcbiAgICBmaWx0ZXJlZC5zb3J0KChhLCBiKSA9PiBiLmNvbmZpZGVuY2UgLSBhLmNvbmZpZGVuY2UpO1xuXG4gICAgLy8gTGltaXQgcmVzdWx0c1xuICAgIGNvbnN0IGxpbWl0ZWQgPSBmaWx0ZXJlZC5zbGljZSgwLCB0aGlzLmNvbmZpZy5tYXhFbGVtZW50c1BlclZlcmIpO1xuXG4gICAgLy8gQ2FjaGUgdGhlIHJlc3VsdHNcbiAgICB0aGlzLnZlcmJDYWNoZS5zZXQodmVyYiwgbGltaXRlZCk7XG5cbiAgICAvLyBGSVg6IFByb3BlciBhdWRpdCBsb2dnaW5nIGZvciB2ZXJiIHRyaWdnZXIgb3BlcmF0aW9uc1xuICAgIC8vIFByZXZpb3VzbHk6IFVzZWQgJ0VMRU1FTlRfQ1JFQVRFRCcgd2hpY2ggd2FzIGluY29ycmVjdFxuICAgIC8vIE5vdzogVXNpbmcgJ1ZFUkJfVFJJR0dFUkVEJyBmb3Igb3BlcmF0aW9uYWwgb2JzZXJ2YWJpbGl0eVxuICAgIGlmIChsaW1pdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1ZFUkJfVFJJR0dFUkVEJyBhcyBhbnksIC8vIENhc3QgbmVlZGVkIHVudGlsIHNlY3VyaXR5IHR5cGVzIHVwZGF0ZWRcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdWZXJiVHJpZ2dlck1hbmFnZXIuZ2V0RWxlbWVudHNGb3JWZXJiJyxcbiAgICAgICAgZGV0YWlsczogYFZlcmIgJyR7dmVyYn0nIHRyaWdnZXJlZCwgbWF0Y2hlZCAke2xpbWl0ZWQubGVuZ3RofSBlbGVtZW50c2AsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgdmVyYixcbiAgICAgICAgICBlbGVtZW50Q291bnQ6IGxpbWl0ZWQubGVuZ3RoLFxuICAgICAgICAgIHRvcEVsZW1lbnQ6IGxpbWl0ZWRbMF0/Lm5hbWUsXG4gICAgICAgICAgY29uZmlkZW5jZTogbGltaXRlZFswXT8uY29uZmlkZW5jZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGltaXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGVsZW1lbnQgdHlwZSBieSBuYW1lXG4gICAqIEZJWDogSGFuZGxlIGNhc2Ugd2hlcmUgaW5kZXguZWxlbWVudHMgbWlnaHQgYmUgdW5kZWZpbmVkXG4gICAqL1xuICBwcml2YXRlIGZpbmRFbGVtZW50VHlwZShlbGVtZW50TmFtZTogc3RyaW5nLCBpbmRleDogRW5oYW5jZWRJbmRleCk6IHN0cmluZyB7XG4gICAgaWYgKCFpbmRleC5lbGVtZW50cykge1xuICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gICAgZm9yIChjb25zdCBbdHlwZSwgZWxlbWVudHNdIG9mIE9iamVjdC5lbnRyaWVzKGluZGV4LmVsZW1lbnRzKSkge1xuICAgICAgaWYgKChlbGVtZW50cyBhcyBhbnkpW2VsZW1lbnROYW1lXSkge1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICd1bmtub3duJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3lub255bXMgZm9yIGEgdmVyYlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTeW5vbnltcyh2ZXJiOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgZm9yIChjb25zdCBbLCB2ZXJic10gb2YgT2JqZWN0LmVudHJpZXMoVkVSQl9UQVhPTk9NWSkpIHtcbiAgICAgIGlmICh2ZXJicy5pbmNsdWRlcyh2ZXJiKSkge1xuICAgICAgICByZXR1cm4gdmVyYnM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbdmVyYl07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZlcmIgY2F0ZWdvcnlcbiAgICovXG4gIHB1YmxpYyBnZXRWZXJiQ2F0ZWdvcnkodmVyYjogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBbY2F0ZWdvcnksIHZlcmJzXSBvZiBPYmplY3QuZW50cmllcyhWRVJCX1RBWE9OT01ZKSkge1xuICAgICAgaWYgKHZlcmJzLmluY2x1ZGVzKHZlcmIpKSB7XG4gICAgICAgIHJldHVybiBjYXRlZ29yeTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhIHF1ZXJ5IGFuZCBnZXQgYWxsIHZlcmIgbWF0Y2hlc1xuICAgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHRvIHByb2Nlc3NcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggaW5cbiAgICovXG4gIHB1YmxpYyBwcm9jZXNzUXVlcnkocXVlcnk6IHN0cmluZywgaW5kZXg6IEVuaGFuY2VkSW5kZXgpOiBWZXJiTWF0Y2hbXSB7XG4gICAgY29uc3QgdmVyYnMgPSB0aGlzLmV4dHJhY3RWZXJicyhxdWVyeSk7XG4gICAgY29uc3QgbWF0Y2hlczogVmVyYk1hdGNoW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgdmVyYiBvZiB2ZXJicykge1xuICAgICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmdldEVsZW1lbnRzRm9yVmVyYih2ZXJiLCBpbmRleCk7XG4gICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBtYXRjaGVzLnB1c2goe1xuICAgICAgICAgIHZlcmIsXG4gICAgICAgICAgZWxlbWVudHMsXG4gICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuZ2V0VmVyYkNhdGVnb3J5KHZlcmIpIHx8IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2dnZXIuaW5mbygnUHJvY2Vzc2VkIHF1ZXJ5IGZvciB2ZXJiIHRyaWdnZXJzJywge1xuICAgICAgcXVlcnksXG4gICAgICB2ZXJic0ZvdW5kOiB2ZXJicy5sZW5ndGgsXG4gICAgICBtYXRjaGVzRm91bmQ6IG1hdGNoZXMubGVuZ3RoXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY3VzdG9tIHZlcmIgbWFwcGluZ1xuICAgKi9cbiAgcHVibGljIGFkZEN1c3RvbVZlcmIodmVyYjogc3RyaW5nLCBlbGVtZW50czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmN1c3RvbVZlcmJzKSB7XG4gICAgICB0aGlzLmNvbmZpZy5jdXN0b21WZXJicyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZy5jdXN0b21WZXJic1t2ZXJiXSA9IGVsZW1lbnRzO1xuXG4gICAgLy8gQ2xlYXIgY2FjaGUgZm9yIHRoaXMgdmVyYlxuICAgIHRoaXMudmVyYkNhY2hlLmRlbGV0ZSh2ZXJiKTtcblxuICAgIGxvZ2dlci5kZWJ1ZygnQWRkZWQgY3VzdG9tIHZlcmIgbWFwcGluZycsIHsgdmVyYiwgZWxlbWVudHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdmVyYiBjYWNoZSAodXNlZnVsIGFmdGVyIGluZGV4IHVwZGF0ZXMpXG4gICAqL1xuICBwdWJsaWMgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZlcmJDYWNoZS5jbGVhcigpO1xuICAgIGxvZ2dlci5kZWJ1ZygnVmVyYiBjYWNoZSBjbGVhcmVkJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB2ZXJicyB0aGF0IG1hcCB0byBhIHNwZWNpZmljIGVsZW1lbnRcbiAgICogQHBhcmFtIGVsZW1lbnROYW1lIFRoZSBlbGVtZW50IHRvIGdldCB2ZXJicyBmb3JcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggaW4gKHBhc3NlZCB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5KVxuICAgKi9cbiAgcHVibGljIGdldFZlcmJzRm9yRWxlbWVudChlbGVtZW50TmFtZTogc3RyaW5nLCBpbmRleDogRW5oYW5jZWRJbmRleCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2ZXJiczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIENoZWNrIGFjdGlvbl90cmlnZ2VycyAodXNlIG9wdGlvbmFsIGNoYWluIGZvciByb2J1c3RuZXNzKVxuICAgIC8vIEZJWDogSGFuZGxlIGNhc2Ugd2hlcmUgYWN0aW9uX3RyaWdnZXJzIG1pZ2h0IGJlIHVuZGVmaW5lZFxuICAgIGlmIChpbmRleC5hY3Rpb25fdHJpZ2dlcnMpIHtcbiAgICAgIGZvciAoY29uc3QgW3ZlcmIsIGVsZW1lbnRzXSBvZiBPYmplY3QuZW50cmllcyhpbmRleC5hY3Rpb25fdHJpZ2dlcnMpKSB7XG4gICAgICAgIGlmIChlbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50TmFtZSkpIHtcbiAgICAgICAgICB2ZXJicy5wdXNoKHZlcmIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZWxlbWVudCdzIG93biBhY3Rpb25zXG4gICAgLy8gRklYOiBIYW5kbGUgY2FzZSB3aGVyZSBpbmRleC5lbGVtZW50cyBtaWdodCBiZSB1bmRlZmluZWRcbiAgICBpZiAoaW5kZXguZWxlbWVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZUVsZW1lbnRzIG9mIE9iamVjdC52YWx1ZXMoaW5kZXguZWxlbWVudHMpKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSAodHlwZUVsZW1lbnRzIGFzIGFueSlbZWxlbWVudE5hbWVdO1xuICAgICAgICBpZiAoZWxlbWVudD8uYWN0aW9ucykge1xuICAgICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIE9iamVjdC52YWx1ZXMoZWxlbWVudC5hY3Rpb25zKSkge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uVmVyYiA9IChhY3Rpb24gYXMgYW55KS52ZXJiO1xuICAgICAgICAgICAgaWYgKGFjdGlvblZlcmIgJiYgIXZlcmJzLmluY2x1ZGVzKGFjdGlvblZlcmIpKSB7XG4gICAgICAgICAgICAgIHZlcmJzLnB1c2goYWN0aW9uVmVyYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgbmFtZS1iYXNlZCBpbmZlcmVuY2VcbiAgICBjb25zdCBlbGVtZW50TmFtZUxvd2VyID0gZWxlbWVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKGNvbnN0IHZlcmJMaXN0IG9mIE9iamVjdC52YWx1ZXMoVkVSQl9UQVhPTk9NWSkpIHtcbiAgICAgIGZvciAoY29uc3QgdmVyYiBvZiB2ZXJiTGlzdCkge1xuICAgICAgICBpZiAoZWxlbWVudE5hbWVMb3dlci5pbmNsdWRlcyh2ZXJiKSAmJiAhdmVyYnMuaW5jbHVkZXModmVyYikpIHtcbiAgICAgICAgICB2ZXJicy5wdXNoKHZlcmIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHN1Z2dlc3RlZCB2ZXJicyBmb3IgYW4gZWxlbWVudCBiYXNlZCBvbiBpdHMgdHlwZSBhbmQgbmFtZVxuICAgKi9cbiAgcHVibGljIHN1Z2dlc3RWZXJic0ZvckVsZW1lbnQoZWxlbWVudDogRWxlbWVudERlZmluaXRpb24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbmFtZSA9IGVsZW1lbnQuY29yZS5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdHlwZSA9IGVsZW1lbnQuY29yZS50eXBlO1xuXG4gICAgLy8gVHlwZS1iYXNlZCBzdWdnZXN0aW9uc1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAncGVyc29uYXMnOlxuICAgICAgICBpZiAobmFtZS5pbmNsdWRlcygnZGVidWcnKSkge1xuICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goJ2RlYnVnJywgJ2ZpeCcsICd0cm91Ymxlc2hvb3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZS5pbmNsdWRlcygnY3JlYXRpdmUnKSB8fCBuYW1lLmluY2x1ZGVzKCd3cml0ZXInKSkge1xuICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goJ3dyaXRlJywgJ2NyZWF0ZScsICdjb21wb3NlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoJ2FuYWx5c3QnKSkge1xuICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goJ2FuYWx5emUnLCAnZXhhbWluZScsICdpbnZlc3RpZ2F0ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lLmluY2x1ZGVzKCdleHBsYWluJykpIHtcbiAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKCdleHBsYWluJywgJ3RlYWNoJywgJ3NpbXBsaWZ5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ21lbW9yaWVzJzpcbiAgICAgICAgc3VnZ2VzdGlvbnMucHVzaCgncmVtZW1iZXInLCAncmVjYWxsJywgJ3JldHJpZXZlJyk7XG4gICAgICAgIGlmIChuYW1lLmluY2x1ZGVzKCdzZXNzaW9uJykpIHtcbiAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKCdyZXZpZXcnLCAnZmluZCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdza2lsbHMnOlxuICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKCd1c2UnLCAnYXBwbHknLCAnZXhlY3V0ZScpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndGVtcGxhdGVzJzpcbiAgICAgICAgc3VnZ2VzdGlvbnMucHVzaCgnY3JlYXRlJywgJ2dlbmVyYXRlJywgJ2ZpbGwnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2FnZW50cyc6XG4gICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goJ3J1bicsICdleGVjdXRlJywgJ2FjdGl2YXRlJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIE5hbWUtYmFzZWQgc3VnZ2VzdGlvbnNcbiAgICBmb3IgKGNvbnN0IFssIHZlcmJzXSBvZiBPYmplY3QuZW50cmllcyhWRVJCX1RBWE9OT01ZKSkge1xuICAgICAgZm9yIChjb25zdCB2ZXJiIG9mIHZlcmJzKSB7XG4gICAgICAgIGlmIChuYW1lLmluY2x1ZGVzKHZlcmIpICYmICFzdWdnZXN0aW9ucy5pbmNsdWRlcyh2ZXJiKSkge1xuICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2godmVyYik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQoc3VnZ2VzdGlvbnMpXTsgIC8vIFJlbW92ZSBkdXBsaWNhdGVzXG4gIH1cbn0iXX0=
|
|
511
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVyYlRyaWdnZXJNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvcnRmb2xpby9WZXJiVHJpZ2dlck1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUU5RTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRztJQUMzQixxQkFBcUI7SUFDckIsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDO0lBRXJGLHFCQUFxQjtJQUNyQixRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUM7SUFFbEYseUJBQXlCO0lBQ3pCLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQztJQUUzRiwyQkFBMkI7SUFDM0IsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDO0lBRTFGLGtCQUFrQjtJQUNsQixNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7SUFFaEYsc0JBQXNCO0lBQ3RCLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxTQUFT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QUFDLENBQUM7Z0JBQ25ELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUM3QixXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDckMsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxRQUFRO2dCQUNYLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDNUMsTUFBTTtZQUVSLEtBQUssV0FBVztnQkFDZCxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQy9DLE1BQU07WUFFUixLQUFLLFFBQVE7Z0JBQ1gsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNO1FBQ1YsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixLQUFLLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN0RCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3ZELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBRSxvQkFBb0I7SUFDekQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWZXJiIFRyaWdnZXIgTWFuYWdlciAtIE1hcHMgYWN0aW9uIHZlcmJzIHRvIGVsZW1lbnRzXG4gKlxuICogVGhpcyBtYW5hZ2VyIGhhbmRsZXMgdmVyYi1iYXNlZCBhY3Rpb24gdHJpZ2dlcnMgdGhhdCBtYXAgdXNlciBpbnRlbnRcbiAqIHRvIHNwZWNpZmljIGVsZW1lbnRzLiBVc2VzIGFjdGlvbiB2ZXJicyAoZGVidWcsIGZpeCwgY3JlYXRlKSBpbnN0ZWFkXG4gKiBvZiBub3VucyBmb3IgYmV0dGVyIGludGVudCBtYXRjaGluZy5cbiAqXG4gKiBLZXkgcHJpbmNpcGxlczpcbiAqIC0gVmVyYnMgaGF2ZSBoaWdoZXIgYXR0ZW50aW9uIHByb2JhYmlsaXR5IHRoYW4gbm91bnNcbiAqIC0gTXVsdGlwbGUgdmVyYnMgY2FuIG1hcCB0byB0aGUgc2FtZSBlbGVtZW50XG4gKiAtIFZlcmJzIGFyZSBleHRyYWN0ZWQgZnJvbSBxdWVyaWVzIGFuZCBlbGVtZW50IG1ldGFkYXRhXG4gKiAtIFN1cHBvcnRzIHN5bm9ueW1zIGFuZCByZWxhdGVkIHZlcmIgZm9ybXNcbiAqL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgRW5oYW5jZWRJbmRleCwgRWxlbWVudERlZmluaXRpb24sIEFjdGlvbkRlZmluaXRpb24gfSBmcm9tICcuL3R5cGVzL0luZGV4VHlwZXMuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuXG4vKipcbiAqIFZlcmIgdGF4b25vbXkgLSBDb21tb24gdmVyYnMgZ3JvdXBlZCBieSBpbnRlbnRcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUkJfVEFYT05PTVkgPSB7XG4gIC8vIERlYnVnZ2luZyAmIEZpeGluZ1xuICBkZWJ1Z2dpbmc6IFsnZGVidWcnLCAnZml4JywgJ3Ryb3VibGVzaG9vdCcsICdkaWFnbm9zZScsICdzb2x2ZScsICdyZXNvbHZlJywgJ3JlcGFpciddLFxuXG4gIC8vIENyZWF0aW5nICYgV3JpdGluZ1xuICBjcmVhdGlvbjogWydjcmVhdGUnLCAnd3JpdGUnLCAnZ2VuZXJhdGUnLCAnbWFrZScsICdidWlsZCcsICdjb25zdHJ1Y3QnLCAnY29tcG9zZSddLFxuXG4gIC8vIEV4cGxhbmF0aW9uICYgTGVhcm5pbmdcbiAgZXhwbGFuYXRpb246IFsnZXhwbGFpbicsICd0ZWFjaCcsICdjbGFyaWZ5JywgJ2Rlc2NyaWJlJywgJ3NpbXBsaWZ5JywgJ2VsYWJvcmF0ZScsICdkZWZpbmUnXSxcblxuICAvLyBBbmFseXNpcyAmIEludmVzdGlnYXRpb25cbiAgYW5hbHlzaXM6IFsnYW5hbHl6ZScsICdpbnZlc3RpZ2F0ZScsICdleGFtaW5lJywgJ2luc3BlY3QnLCAncmV2aWV3JywgJ2Fzc2VzcycsICdldmFsdWF0ZSddLFxuXG4gIC8vIE1lbW9yeSAmIFJlY2FsbFxuICByZWNhbGw6IFsncmVtZW1iZXInLCAncmVjYWxsJywgJ3JldHJpZXZlJywgJ2ZpbmQnLCAnbG9jYXRlJywgJ3NlYXJjaCcsICdsb29rdXAnXSxcblxuICAvLyBFeGVjdXRpb24gJiBSdW5uaW5nXG4gIGV4ZWN1dGlvbjogWydydW4nLCAnZXhlY3V0ZScsICdzdGFydCcsICdsYXVuY2gnLCAnYWN0aXZhdGUnLCAndHJpZ2dlcicsICdpbnZva2UnXSxcblxuICAvLyBUZXN0aW5nICYgVmFsaWRhdGlvblxuICB0ZXN0aW5nOiBbJ3Rlc3QnLCAndmVyaWZ5JywgJ3ZhbGlkYXRlJywgJ2NoZWNrJywgJ2NvbmZpcm0nLCAnZW5zdXJlJywgJ3Byb3ZlJ10sXG5cbiAgLy8gQ29uZmlndXJhdGlvbiAmIFNldHVwXG4gIGNvbmZpZ3VyYXRpb246IFsnY29uZmlndXJlJywgJ3NldHVwJywgJ2luc3RhbGwnLCAnaW5pdGlhbGl6ZScsICdwcmVwYXJlJywgJ2FycmFuZ2UnXSxcblxuICAvLyBTZWN1cml0eSAmIFByb3RlY3Rpb25cbiAgc2VjdXJpdHk6IFsnc2VjdXJlJywgJ3Byb3RlY3QnLCAnYXVkaXQnLCAnc2NhbicsICdlbmNyeXB0JywgJ2F1dGhlbnRpY2F0ZScsICdhdXRob3JpemUnXSxcblxuICAvLyBPcHRpbWl6YXRpb24gJiBJbXByb3ZlbWVudFxuICBvcHRpbWl6YXRpb246IFsnb3B0aW1pemUnLCAnaW1wcm92ZScsICdlbmhhbmNlJywgJ3JlZmFjdG9yJywgJ3N0cmVhbWxpbmUnLCAnYWNjZWxlcmF0ZSddLFxuXG4gIC8vIERvY3VtZW50YXRpb25cbiAgZG9jdW1lbnRhdGlvbjogWydkb2N1bWVudCcsICdhbm5vdGF0ZScsICdjb21tZW50JywgJ3JlY29yZCcsICdub3RlJywgJ2xvZyddLFxuXG4gIC8vIENvbGxhYm9yYXRpb25cbiAgY29sbGFib3JhdGlvbjogWydzaGFyZScsICdjb2xsYWJvcmF0ZScsICdzeW5jJywgJ21lcmdlJywgJ2ludGVncmF0ZScsICdjb21iaW5lJ11cbn07XG5cbi8qKlxuICogVmVyYiB0cmlnZ2VyIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJiVHJpZ2dlckNvbmZpZyB7XG4gIC8vIE1pbmltdW0gY29uZmlkZW5jZSB0byB0cmlnZ2VyXG4gIGNvbmZpZGVuY2VUaHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLy8gV2hldGhlciB0byBpbmNsdWRlIHN5bm9ueW1zXG4gIGluY2x1ZGVTeW5vbnltcz86IGJvb2xlYW47XG5cbiAgLy8gTWF4aW11bSBlbGVtZW50cyB0byByZXR1cm4gcGVyIHZlcmJcbiAgbWF4RWxlbWVudHNQZXJWZXJiPzogbnVtYmVyO1xuXG4gIC8vIEN1c3RvbSB2ZXJiIG1hcHBpbmdzXG4gIGN1c3RvbVZlcmJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xufVxuXG4vKipcbiAqIFZlcmIgbWF0Y2ggcmVzdWx0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyYk1hdGNoIHtcbiAgdmVyYjogc3RyaW5nO1xuICBlbGVtZW50czogRWxlbWVudE1hdGNoW107XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRNYXRjaCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBjb25maWRlbmNlOiBudW1iZXI7XG4gIHNvdXJjZTogJ2V4cGxpY2l0JyB8ICdpbmZlcnJlZCcgfCAnbmFtZS1iYXNlZCcgfCAnZGVzY3JpcHRpb24tYmFzZWQnO1xufVxuXG5leHBvcnQgY2xhc3MgVmVyYlRyaWdnZXJNYW5hZ2VyIHtcbiAgcHJpdmF0ZSB2ZXJiQ2FjaGU6IE1hcDxzdHJpbmcsIEVsZW1lbnRNYXRjaFtdPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBjb25maWc6IFZlcmJUcmlnZ2VyQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogVmVyYlRyaWdnZXJDb25maWcgPSB7fSkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgY29uZmlkZW5jZVRocmVzaG9sZDogY29uZmlnLmNvbmZpZGVuY2VUaHJlc2hvbGQgfHwgMC41LFxuICAgICAgaW5jbHVkZVN5bm9ueW1zOiBjb25maWcuaW5jbHVkZVN5bm9ueW1zICE9PSBmYWxzZSxcbiAgICAgIG1heEVsZW1lbnRzUGVyVmVyYjogY29uZmlnLm1heEVsZW1lbnRzUGVyVmVyYiB8fCAxMCxcbiAgICAgIGN1c3RvbVZlcmJzOiBjb25maWcuY3VzdG9tVmVyYnMgfHwge31cbiAgICB9O1xuXG4gICAgbG9nZ2VyLmRlYnVnKCdWZXJiVHJpZ2dlck1hbmFnZXIgaW5pdGlhbGl6ZWQnLCB7IGNvbmZpZzogdGhpcy5jb25maWcgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCB2ZXJicyBmcm9tIGEgdXNlciBxdWVyeVxuICAgKi9cbiAgcHVibGljIGV4dHJhY3RWZXJicyhxdWVyeTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIC8vIFVuaWNvZGUgdmFsaWRhdGlvbiBmb3Igc2VjdXJpdHlcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUocXVlcnkpO1xuICAgIGlmICh2YWxpZGF0aW9uLmRldGVjdGVkSXNzdWVzICYmIHZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVU5JQ09ERV9WQUxJREFUSU9OX0VSUk9SJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdWZXJiVHJpZ2dlck1hbmFnZXIuZXh0cmFjdFZlcmJzJyxcbiAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgaXNzdWVzIGluIHF1ZXJ5OiAke3ZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXMuam9pbignLCAnKX1gXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJiczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBub3JtYWxpemVkUXVlcnkgPSB2YWxpZGF0aW9uLm5vcm1hbGl6ZWRDb250ZW50LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBDaGVjayBlYWNoIHdvcmQgYWdhaW5zdCBvdXIgdmVyYiB0YXhvbm9teVxuICAgIGNvbnN0IHdvcmRzID0gbm9ybWFsaXplZFF1ZXJ5LnNwbGl0KC9cXHMrLyk7XG5cbiAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgIC8vIERpcmVjdCB2ZXJiIGNoZWNrXG4gICAgICBpZiAodGhpcy5pc0tub3duVmVyYih3b3JkKSkge1xuICAgICAgICB2ZXJicy5wdXNoKHdvcmQpO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgaW1wZXJhdGl2ZSBmb3JtcyAoY29tbW9uIGluIGNvbW1hbmRzKVxuICAgICAgLy8gXCJkZWJ1ZyB0aGlzXCIsIFwiZml4IHRoZSBlcnJvclwiLCBcImNyZWF0ZSBhIHRlc3RcIlxuICAgICAgY29uc3QgaW1wZXJhdGl2ZVBhdHRlcm5zID0gW1xuICAgICAgICAvXihkZWJ1Z3xmaXh8Y3JlYXRlfHdyaXRlfHRlc3R8cnVufGV4cGxhaW58YW5hbHl6ZSkvLFxuICAgICAgICAvKGluZykkLyAgLy8gR2VydW5kczogZGVidWdnaW5nLCB0ZXN0aW5nLCBjcmVhdGluZ1xuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGltcGVyYXRpdmVQYXR0ZXJucykge1xuICAgICAgICBpZiAocGF0dGVybi50ZXN0KHdvcmQpICYmICF2ZXJicy5pbmNsdWRlcyh3b3JkKSkge1xuICAgICAgICAgIGNvbnN0IGJhc2VWZXJiID0gdGhpcy5nZXRCYXNlVmVyYih3b3JkKTtcbiAgICAgICAgICBpZiAoYmFzZVZlcmIpIHZlcmJzLnB1c2goYmFzZVZlcmIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxzbyBjaGVjayBmb3IgdmVyYiBwaHJhc2VzXG4gICAgY29uc3QgdmVyYlBocmFzZXMgPSBbXG4gICAgICAnZmlndXJlIG91dCcsICd3b3JrIG91dCcsICdzb3J0IG91dCcsICdmaW5kIG91dCcsXG4gICAgICAnc2V0IHVwJywgJ2NsZWFuIHVwJywgJ2ZvbGxvdyB1cCcsXG4gICAgICAnYnJlYWsgZG93bicsICd3cml0ZSBkb3duJywgJ3RyYWNrIGRvd24nXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgcGhyYXNlIG9mIHZlcmJQaHJhc2VzKSB7XG4gICAgICBpZiAobm9ybWFsaXplZFF1ZXJ5LmluY2x1ZGVzKHBocmFzZSkpIHtcbiAgICAgICAgLy8gTWFwIHBocmFzZXMgdG8gYmFzZSB2ZXJic1xuICAgICAgICBjb25zdCBiYXNlVmVyYiA9IHRoaXMubWFwUGhyYXNlVG9WZXJiKHBocmFzZSk7XG4gICAgICAgIGlmIChiYXNlVmVyYiAmJiAhdmVyYnMuaW5jbHVkZXMoYmFzZVZlcmIpKSB7XG4gICAgICAgICAgdmVyYnMucHVzaChiYXNlVmVyYik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbmNsdWRlIGN1c3RvbSB2ZXJicyBmcm9tIGNvbmZpZ1xuICAgIGZvciAoY29uc3QgY3VzdG9tVmVyYiBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZy5jdXN0b21WZXJicyB8fCB7fSkpIHtcbiAgICAgIGlmIChub3JtYWxpemVkUXVlcnkuaW5jbHVkZXMoY3VzdG9tVmVyYikgJiYgIXZlcmJzLmluY2x1ZGVzKGN1c3RvbVZlcmIpKSB7XG4gICAgICAgIHZlcmJzLnB1c2goY3VzdG9tVmVyYik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKCdFeHRyYWN0ZWQgdmVyYnMgZnJvbSBxdWVyeScsIHsgcXVlcnksIHZlcmJzIH0pO1xuICAgIHJldHVybiB2ZXJicztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHdvcmQgaXMgYSBrbm93biB2ZXJiXG4gICAqL1xuICBwcml2YXRlIGlzS25vd25WZXJiKHdvcmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgdmVyYnMgb2YgT2JqZWN0LnZhbHVlcyhWRVJCX1RBWE9OT01ZKSkge1xuICAgICAgaWYgKHZlcmJzLmluY2x1ZGVzKHdvcmQpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBiYXNlIGZvcm0gb2YgYSB2ZXJiIChyZW1vdmUgLWluZywgLWVkLCBldGMuKVxuICAgKlxuICAgKiBUcmFuc2Zvcm1zIHZlcmIgdmFyaWF0aW9ucyBiYWNrIHRvIHRoZWlyIGJhc2UgZm9ybSB0byBlbmFibGUgZmxleGlibGUgbWF0Y2hpbmcuXG4gICAqIEZvciBleGFtcGxlLCBcImRlYnVnZ2luZ1wiLCBcImRlYnVnZ2VkXCIsIFwiZGVidWdzXCIgYWxsIG1hcCB0byBcImRlYnVnXCIuXG4gICAqL1xuICBwcml2YXRlIGdldEJhc2VWZXJiKHdvcmQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIC8vIEhhbmRsZSBjb21tb24gdmVyYiBlbmRpbmdzIHdpdGggcmVnZXggdHJhbnNmb3JtYXRpb25zXG4gICAgY29uc3QgdHJhbnNmb3JtYXRpb25zOiBbUmVnRXhwLCBzdHJpbmddW10gPSBbXG4gICAgICAvLyBIYW5kbGUgZ2VydW5kcyB3aXRoIGRvdWJsZWQgY29uc29uYW50cyAoZGVidWdnaW5n4oaSZGVidWcsIHJ1bm5pbmfihpJydW4sIHBsYW5uaW5n4oaScGxhbilcbiAgICAgIC8vIFBhdHRlcm46IC8oW2JjZGZnaGprbG1ucHFyc3R2d3h5el0pXFwxaW5nJC8gY2FwdHVyZXMgZG91YmxlZCBjb25zb25hbnQgKyBcImluZ1wiXG4gICAgICAvLyBSZXBsYWNlbWVudDogJyQxJyBrZWVwcyBvbmx5IHNpbmdsZSBjb25zb25hbnRcbiAgICAgIFsvKFtiY2RmZ2hqa2xtbnBxcnN0dnd4eXpdKVxcMWluZyQvLCAnJDEnXSxcbiAgICAgIFsvaW5nJC8sICcnXSwgICAgICAvLyBjcmVhdGluZyAtPiBjcmVhdGUsIHRlc3RpbmcgLT4gdGVzdFxuICAgICAgWy95aW5nJC8sICd5J10sICAgIC8vIGFwcGx5aW5nIC0+IGFwcGx5XG4gICAgICBbL2llZCQvLCAneSddLCAgICAgLy8gc2ltcGxpZmllZCAtPiBzaW1wbGlmeVxuICAgICAgWy9lZCQvLCAnJ10sICAgICAgIC8vIGNyZWF0ZWQgLT4gY3JlYXRlXG4gICAgICBbL3RlZCQvLCAndCddLCAgICAgLy8gc3RhcnRlZCAtPiBzdGFydFxuICAgICAgWy9zZXMkLywgJ3MnXSwgICAgIC8vIGFuYWx5c2VzIC0+IGFuYWx5c2VcbiAgICAgIFsvemVzJC8sICd6ZSddLCAgICAvLyBhbmFseXplcyAtPiBhbmFseXplXG4gICAgICBbL3ZlcyQvLCAndmUnXSwgICAgLy8gaW1wcm92ZXMgLT4gaW1wcm92ZVxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IFtwYXR0ZXJuLCByZXBsYWNlbWVudF0gb2YgdHJhbnNmb3JtYXRpb25zKSB7XG4gICAgICBpZiAocGF0dGVybi50ZXN0KHdvcmQpKSB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSB3b3JkLnJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnQpO1xuICAgICAgICBpZiAodGhpcy5pc0tub3duVmVyYihiYXNlKSkgcmV0dXJuIGJhc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhbHJlYWR5IGEgYmFzZSB2ZXJiXG4gICAgaWYgKHRoaXMuaXNLbm93blZlcmIod29yZCkpIHJldHVybiB3b3JkO1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogTWFwIHZlcmIgcGhyYXNlcyB0byBiYXNlIHZlcmJzXG4gICAqL1xuICBwcml2YXRlIG1hcFBocmFzZVRvVmVyYihwaHJhc2U6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHBocmFzZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdmaWd1cmUgb3V0JzogJ3NvbHZlJyxcbiAgICAgICd3b3JrIG91dCc6ICdzb2x2ZScsXG4gICAgICAnc29ydCBvdXQnOiAnZml4JyxcbiAgICAgICdmaW5kIG91dCc6ICdkaXNjb3ZlcicsXG4gICAgICAnc2V0IHVwJzogJ2NvbmZpZ3VyZScsXG4gICAgICAnY2xlYW4gdXAnOiAncmVmYWN0b3InLFxuICAgICAgJ2ZvbGxvdyB1cCc6ICd0cmFjaycsXG4gICAgICAnYnJlYWsgZG93bic6ICdhbmFseXplJyxcbiAgICAgICd3cml0ZSBkb3duJzogJ2RvY3VtZW50JyxcbiAgICAgICd0cmFjayBkb3duJzogJ2ZpbmQnXG4gICAgfTtcblxuICAgIHJldHVybiBwaHJhc2VNYXBbcGhyYXNlXSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbGVtZW50cyB0aGF0IG1hdGNoIGEgc3BlY2lmaWMgdmVyYlxuICAgKiBAcGFyYW0gdmVyYiBUaGUgdmVyYiB0byBzZWFyY2ggZm9yXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGluIChwYXNzZWQgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSlcbiAgICovXG4gIHB1YmxpYyBnZXRFbGVtZW50c0ZvclZlcmIodmVyYjogc3RyaW5nLCBpbmRleDogRW5oYW5jZWRJbmRleCk6IEVsZW1lbnRNYXRjaFtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0ZvclZlcmJJbnRlcm5hbCh2ZXJiLCBpbmRleCwgbmV3IFNldCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCB2ZXJzaW9uIHdpdGggdmlzaXRlZCB0cmFja2luZyB0byBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvblxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50c0ZvclZlcmJJbnRlcm5hbChcbiAgICB2ZXJiOiBzdHJpbmcsXG4gICAgaW5kZXg6IEVuaGFuY2VkSW5kZXgsXG4gICAgdmlzaXRlZDogU2V0PHN0cmluZz5cbiAgKTogRWxlbWVudE1hdGNoW10ge1xuICAgIC8vIENoZWNrIGlmIHdlJ3ZlIGFscmVhZHkgcHJvY2Vzc2VkIHRoaXMgdmVyYiAocHJldmVudHMgaW5maW5pdGUgcmVjdXJzaW9uKVxuICAgIGlmICh2aXNpdGVkLmhhcyh2ZXJiKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB2aXNpdGVkLmFkZCh2ZXJiKTtcblxuICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgaWYgKHRoaXMudmVyYkNhY2hlLmhhcyh2ZXJiKSkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyYkNhY2hlLmdldCh2ZXJiKSE7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudHM6IEVsZW1lbnRNYXRjaFtdID0gW107XG5cbiAgICAvLyAxLiBDaGVjayBjdXN0b20gdmVyYiBtYXBwaW5ncyBmaXJzdCAoaGlnaGVzdCBwcmlvcml0eSlcbiAgICAvLyBDdXN0b20gdmVyYnMgZ2V0IGNvbmZpZGVuY2UgMC45NSB0byBlbnN1cmUgdGhleSBvdmVycmlkZSBpbmRleC1iYXNlZCBtYXBwaW5ncy5cbiAgICAvLyBUaGlzIGFsbG93cyBydW50aW1lIGN1c3RvbWl6YXRpb24gb2YgdmVyYi10by1lbGVtZW50IG1hcHBpbmdzLCBlbmFibGluZyB1c2Vyc1xuICAgIC8vIHRvIGRlZmluZSB0aGVpciBvd24gYWN0aW9uIHRyaWdnZXJzIHRoYXQgdGFrZSBwcmVjZWRlbmNlIG92ZXIgc3lzdGVtIGRlZmF1bHRzLlxuICAgIC8vIEZJWDogVXNlIG9wdGlvbmFsIGNoYWluIGZvciBiZXR0ZXIgbWFpbnRhaW5hYmlsaXR5IChTb25hckNsb3VkIEwyODgpXG4gICAgaWYgKHRoaXMuY29uZmlnLmN1c3RvbVZlcmJzPy5bdmVyYl0pIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudE5hbWUgb2YgdGhpcy5jb25maWcuY3VzdG9tVmVyYnNbdmVyYl0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSB0aGlzLmZpbmRFbGVtZW50VHlwZShlbGVtZW50TmFtZSwgaW5kZXgpO1xuICAgICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBlbGVtZW50TmFtZSxcbiAgICAgICAgICB0eXBlOiBlbGVtZW50VHlwZSxcbiAgICAgICAgICBjb25maWRlbmNlOiAwLjk1LCAgLy8gVmVyeSBoaWdoIGNvbmZpZGVuY2UgZm9yIGN1c3RvbSBtYXBwaW5nc1xuICAgICAgICAgIHNvdXJjZTogJ2V4cGxpY2l0J1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBleHBsaWNpdCB2ZXJiIG1hcHBpbmdzIGluIGFjdGlvbl90cmlnZ2Vyc1xuICAgIGlmIChpbmRleC5hY3Rpb25fdHJpZ2dlcnNbdmVyYl0pIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudE5hbWUgb2YgaW5kZXguYWN0aW9uX3RyaWdnZXJzW3ZlcmJdKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gdGhpcy5maW5kRWxlbWVudFR5cGUoZWxlbWVudE5hbWUsIGluZGV4KTtcbiAgICAgICAgbGV0IGNvbmZpZGVuY2UgPSAwLjk7IC8vIERlZmF1bHQgZm9yIGFjdGlvbl90cmlnZ2Vyc1xuXG4gICAgICAgIC8vIFRyeSB0byBnZXQgYWN0dWFsIGNvbmZpZGVuY2UgZnJvbSBlbGVtZW50LmFjdGlvbnMuXG4gICAgICAgIC8vIFRoaXMgcHJlc2VydmVzIHRoZSBjb25maWRlbmNlIHZhbHVlIGRlZmluZWQgaW4gdGhlIGVsZW1lbnQncyBhY3Rpb24gZGVmaW5pdGlvblxuICAgICAgICAvLyByYXRoZXIgdGhhbiB1c2luZyBhIGhhcmRjb2RlZCBkZWZhdWx0LiBFYWNoIGVsZW1lbnQgY2FuIHNwZWNpZnkgZGlmZmVyZW50XG4gICAgICAgIC8vIGNvbmZpZGVuY2UgbGV2ZWxzIGZvciBkaWZmZXJlbnQgYWN0aW9ucyBiYXNlZCBvbiBob3cgd2VsbC1zdWl0ZWQgaXQgaXMgZm9yXG4gICAgICAgIC8vIHRoYXQgcGFydGljdWxhciB2ZXJiIChlLmcuLCBhIGRlYnVnZ2luZyB0b29sIG1pZ2h0IGhhdmUgMC45NSBmb3IgXCJkZWJ1Z1wiXG4gICAgICAgIC8vIGJ1dCBvbmx5IDAuNiBmb3IgXCJhbmFseXplXCIpLlxuICAgICAgICBpZiAoZWxlbWVudFR5cGUgIT09ICd1bmtub3duJykge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpbmRleC5lbGVtZW50c1tlbGVtZW50VHlwZV0/LltlbGVtZW50TmFtZV07XG4gICAgICAgICAgaWYgKGVsZW1lbnQ/LmFjdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIGFjdGlvbiBkZWZpbml0aW9uIGZvciB0aGlzIHNwZWNpZmljIHZlcmJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkRlZiA9IE9iamVjdC52YWx1ZXMoZWxlbWVudC5hY3Rpb25zKS5maW5kKFxuICAgICAgICAgICAgICAoYTogQWN0aW9uRGVmaW5pdGlvbikgPT4gYS52ZXJiID09PSB2ZXJiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGFjdGlvbkRlZj8uY29uZmlkZW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGNvbmZpZGVuY2UgPSBhY3Rpb25EZWYuY29uZmlkZW5jZTsgIC8vIFVzZSBlbGVtZW50J3MgZGVmaW5lZCBjb25maWRlbmNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogZWxlbWVudE5hbWUsXG4gICAgICAgICAgdHlwZTogZWxlbWVudFR5cGUsXG4gICAgICAgICAgY29uZmlkZW5jZSwgIC8vIE5vdyB1c2VzIGFjdHVhbCBjb25maWRlbmNlIGZyb20gZWxlbWVudCBkZWZpbml0aW9uXG4gICAgICAgICAgc291cmNlOiAnZXhwbGljaXQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIENoZWNrIGVsZW1lbnQgYWN0aW9ucyBmb3IgdGhpcyB2ZXJiXG4gICAgZm9yIChjb25zdCBbdHlwZSwgdHlwZUVsZW1lbnRzXSBvZiBPYmplY3QuZW50cmllcyhpbmRleC5lbGVtZW50cykpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHR5cGVFbGVtZW50cykpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuYWN0aW9ucykge1xuICAgICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIE9iamVjdC52YWx1ZXMoZWxlbWVudC5hY3Rpb25zKSkge1xuICAgICAgICAgICAgaWYgKGFjdGlvbi52ZXJiID09PSB2ZXJiKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gZWxlbWVudHMuZmluZChlID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgY29uZmlkZW5jZTogYWN0aW9uLmNvbmZpZGVuY2UgfHwgMC43LFxuICAgICAgICAgICAgICAgICAgc291cmNlOiAnZXhwbGljaXQnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBDaGVjayBzeW5vbnltcyBpZiBlbmFibGVkICh3aXRoIGRlcHRoIGxpbWl0KVxuICAgIGlmICh0aGlzLmNvbmZpZy5pbmNsdWRlU3lub255bXMgJiYgdmlzaXRlZC5zaXplIDwgNSkgeyAgLy8gTWF4IHJlY3Vyc2lvbiBkZXB0aCBvZiA1XG4gICAgICBjb25zdCBzeW5vbnltcyA9IHRoaXMuZ2V0U3lub255bXModmVyYik7XG4gICAgICBmb3IgKGNvbnN0IHN5bm9ueW0gb2Ygc3lub255bXMpIHtcbiAgICAgICAgaWYgKHN5bm9ueW0gIT09IHZlcmIgJiYgIXZpc2l0ZWQuaGFzKHN5bm9ueW0pKSB7XG4gICAgICAgICAgLy8gUGFzcyB0aGUgdmlzaXRlZCBzZXQgdG8gcmVjdXJzaXZlIGNhbGxzXG4gICAgICAgICAgY29uc3Qgc3lub255bUVsZW1lbnRzID0gdGhpcy5nZXRFbGVtZW50c0ZvclZlcmJJbnRlcm5hbChzeW5vbnltLCBpbmRleCwgdmlzaXRlZCk7XG4gICAgICAgICAgZm9yIChjb25zdCBlbGVtIG9mIHN5bm9ueW1FbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBlbGVtZW50cy5maW5kKGUgPT4gZS5uYW1lID09PSBlbGVtLm5hbWUpO1xuICAgICAgICAgICAgaWYgKCFleGlzdGluZykge1xuICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAuLi5lbGVtLFxuICAgICAgICAgICAgICAgIGNvbmZpZGVuY2U6IGVsZW0uY29uZmlkZW5jZSAqIDAuOCwgLy8gTG93ZXIgY29uZmlkZW5jZSBmb3Igc3lub255bXNcbiAgICAgICAgICAgICAgICBzb3VyY2U6ICdpbmZlcnJlZCdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gSW5mZXIgZnJvbSBlbGVtZW50IG5hbWVzIChlLmcuLCBcImRlYnVnLWRldGVjdGl2ZVwiIC0+IFwiZGVidWdcIilcbiAgICBmb3IgKGNvbnN0IFt0eXBlLCB0eXBlRWxlbWVudHNdIG9mIE9iamVjdC5lbnRyaWVzKGluZGV4LmVsZW1lbnRzKSkge1xuICAgICAgZm9yIChjb25zdCBbbmFtZV0gb2YgT2JqZWN0LmVudHJpZXModHlwZUVsZW1lbnRzKSkge1xuICAgICAgICBjb25zdCBlbGVtZW50TmFtZUxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoZWxlbWVudE5hbWVMb3dlci5pbmNsdWRlcyh2ZXJiKSB8fFxuICAgICAgICAgICAgZWxlbWVudE5hbWVMb3dlci5pbmNsdWRlcyh0aGlzLmdldEJhc2VWZXJiKHZlcmIpIHx8IHZlcmIpKSB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBlbGVtZW50cy5maW5kKGUgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgY29uZmlkZW5jZTogMC42LCAgLy8gTWVkaXVtIGNvbmZpZGVuY2UgZm9yIG5hbWUtYmFzZWRcbiAgICAgICAgICAgICAgc291cmNlOiAnbmFtZS1iYXNlZCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDYuIEluZmVyIGZyb20gZGVzY3JpcHRpb25zXG4gICAgZm9yIChjb25zdCBbdHlwZSwgdHlwZUVsZW1lbnRzXSBvZiBPYmplY3QuZW50cmllcyhpbmRleC5lbGVtZW50cykpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHR5cGVFbGVtZW50cykpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuY29yZS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIGNvbnN0IGRlc2NMb3dlciA9IGVsZW1lbnQuY29yZS5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChkZXNjTG93ZXIuaW5jbHVkZXModmVyYikgfHwgZGVzY0xvd2VyLmluY2x1ZGVzKHRoaXMuZ2V0QmFzZVZlcmIodmVyYikgfHwgdmVyYikpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gZWxlbWVudHMuZmluZChlID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICBjb25maWRlbmNlOiAwLjQsICAvLyBMb3dlciBjb25maWRlbmNlIGZvciBkZXNjcmlwdGlvbi1iYXNlZFxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ2Rlc2NyaXB0aW9uLWJhc2VkJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgYnkgY29uZmlkZW5jZSB0aHJlc2hvbGRcbiAgICBjb25zdCBmaWx0ZXJlZCA9IGVsZW1lbnRzLmZpbHRlcihlID0+IGUuY29uZmlkZW5jZSA+PSB0aGlzLmNvbmZpZy5jb25maWRlbmNlVGhyZXNob2xkISk7XG5cbiAgICAvLyBTb3J0IGJ5IGNvbmZpZGVuY2UgKGhpZ2hlc3QgZmlyc3QpXG4gICAgZmlsdGVyZWQuc29ydCgoYSwgYikgPT4gYi5jb25maWRlbmNlIC0gYS5jb25maWRlbmNlKTtcblxuICAgIC8vIExpbWl0IHJlc3VsdHNcbiAgICBjb25zdCBsaW1pdGVkID0gZmlsdGVyZWQuc2xpY2UoMCwgdGhpcy5jb25maWcubWF4RWxlbWVudHNQZXJWZXJiKTtcblxuICAgIC8vIENhY2hlIHRoZSByZXN1bHRzXG4gICAgdGhpcy52ZXJiQ2FjaGUuc2V0KHZlcmIsIGxpbWl0ZWQpO1xuXG4gICAgcmV0dXJuIGxpbWl0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBlbGVtZW50IHR5cGUgYnkgbmFtZVxuICAgKiBGSVg6IEhhbmRsZSBjYXNlIHdoZXJlIGluZGV4LmVsZW1lbnRzIG1pZ2h0IGJlIHVuZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kRWxlbWVudFR5cGUoZWxlbWVudE5hbWU6IHN0cmluZywgaW5kZXg6IEVuaGFuY2VkSW5kZXgpOiBzdHJpbmcge1xuICAgIGlmICghaW5kZXguZWxlbWVudHMpIHtcbiAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW3R5cGUsIGVsZW1lbnRzXSBvZiBPYmplY3QuZW50cmllcyhpbmRleC5lbGVtZW50cykpIHtcbiAgICAgIGlmICgoZWxlbWVudHMgYXMgYW55KVtlbGVtZW50TmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAndW5rbm93bic7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN5bm9ueW1zIGZvciBhIHZlcmJcbiAgICovXG4gIHByaXZhdGUgZ2V0U3lub255bXModmVyYjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGZvciAoY29uc3QgWywgdmVyYnNdIG9mIE9iamVjdC5lbnRyaWVzKFZFUkJfVEFYT05PTVkpKSB7XG4gICAgICBpZiAodmVyYnMuaW5jbHVkZXModmVyYikpIHtcbiAgICAgICAgcmV0dXJuIHZlcmJzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3ZlcmJdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB2ZXJiIGNhdGVnb3J5XG4gICAqL1xuICBwdWJsaWMgZ2V0VmVyYkNhdGVnb3J5KHZlcmI6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGZvciAoY29uc3QgW2NhdGVnb3J5LCB2ZXJic10gb2YgT2JqZWN0LmVudHJpZXMoVkVSQl9UQVhPTk9NWSkpIHtcbiAgICAgIGlmICh2ZXJicy5pbmNsdWRlcyh2ZXJiKSkge1xuICAgICAgICByZXR1cm4gY2F0ZWdvcnk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYSBxdWVyeSBhbmQgZ2V0IGFsbCB2ZXJiIG1hdGNoZXNcbiAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBwcm9jZXNzXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGluXG4gICAqL1xuICBwdWJsaWMgcHJvY2Vzc1F1ZXJ5KHF1ZXJ5OiBzdHJpbmcsIGluZGV4OiBFbmhhbmNlZEluZGV4KTogVmVyYk1hdGNoW10ge1xuICAgIGNvbnN0IHZlcmJzID0gdGhpcy5leHRyYWN0VmVyYnMocXVlcnkpO1xuICAgIGNvbnN0IG1hdGNoZXM6IFZlcmJNYXRjaFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHZlcmIgb2YgdmVyYnMpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5nZXRFbGVtZW50c0ZvclZlcmIodmVyYiwgaW5kZXgpO1xuICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICB2ZXJiLFxuICAgICAgICAgIGVsZW1lbnRzLFxuICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLmdldFZlcmJDYXRlZ29yeSh2ZXJiKSB8fCB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oJ1Byb2Nlc3NlZCBxdWVyeSBmb3IgdmVyYiB0cmlnZ2VycycsIHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgdmVyYnNGb3VuZDogdmVyYnMubGVuZ3RoLFxuICAgICAgbWF0Y2hlc0ZvdW5kOiBtYXRjaGVzLmxlbmd0aFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGN1c3RvbSB2ZXJiIG1hcHBpbmdcbiAgICovXG4gIHB1YmxpYyBhZGRDdXN0b21WZXJiKHZlcmI6IHN0cmluZywgZWxlbWVudHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5jdXN0b21WZXJicykge1xuICAgICAgdGhpcy5jb25maWcuY3VzdG9tVmVyYnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5jb25maWcuY3VzdG9tVmVyYnNbdmVyYl0gPSBlbGVtZW50cztcblxuICAgIC8vIENsZWFyIGNhY2hlIGZvciB0aGlzIHZlcmJcbiAgICB0aGlzLnZlcmJDYWNoZS5kZWxldGUodmVyYik7XG5cbiAgICBsb2dnZXIuZGVidWcoJ0FkZGVkIGN1c3RvbSB2ZXJiIG1hcHBpbmcnLCB7IHZlcmIsIGVsZW1lbnRzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHZlcmIgY2FjaGUgKHVzZWZ1bCBhZnRlciBpbmRleCB1cGRhdGVzKVxuICAgKi9cbiAgcHVibGljIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3QgY2xlYXJlZCA9IHRoaXMudmVyYkNhY2hlLnNpemU7XG4gICAgdGhpcy52ZXJiQ2FjaGUuY2xlYXIoKTtcbiAgICBpZiAoY2xlYXJlZCA+IDApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnVmVyYiBjYWNoZSBjbGVhcmVkJywgeyBlbnRyaWVzQ2xlYXJlZDogY2xlYXJlZCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB2ZXJicyB0aGF0IG1hcCB0byBhIHNwZWNpZmljIGVsZW1lbnRcbiAgICogQHBhcmFtIGVsZW1lbnROYW1lIFRoZSBlbGVtZW50IHRvIGdldCB2ZXJicyBmb3JcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggaW4gKHBhc3NlZCB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5KVxuICAgKi9cbiAgcHVibGljIGdldFZlcmJzRm9yRWxlbWVudChlbGVtZW50TmFtZTogc3RyaW5nLCBpbmRleDogRW5oYW5jZWRJbmRleCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2ZXJiczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIENoZWNrIGFjdGlvbl90cmlnZ2VycyAodXNlIG9wdGlvbmFsIGNoYWluIGZvciByb2J1c3RuZXNzKVxuICAgIC8vIEZJWDogSGFuZGxlIGNhc2Ugd2hlcmUgYWN0aW9uX3RyaWdnZXJzIG1pZ2h0IGJlIHVuZGVmaW5lZFxuICAgIGlmIChpbmRleC5hY3Rpb25fdHJpZ2dlcnMpIHtcbiAgICAgIGZvciAoY29uc3QgW3ZlcmIsIGVsZW1lbnRzXSBvZiBPYmplY3QuZW50cmllcyhpbmRleC5hY3Rpb25fdHJpZ2dlcnMpKSB7XG4gICAgICAgIGlmIChlbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50TmFtZSkpIHtcbiAgICAgICAgICB2ZXJicy5wdXNoKHZlcmIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZWxlbWVudCdzIG93biBhY3Rpb25zXG4gICAgLy8gRklYOiBIYW5kbGUgY2FzZSB3aGVyZSBpbmRleC5lbGVtZW50cyBtaWdodCBiZSB1bmRlZmluZWRcbiAgICBpZiAoaW5kZXguZWxlbWVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZUVsZW1lbnRzIG9mIE9iamVjdC52YWx1ZXMoaW5kZXguZWxlbWVudHMpKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSAodHlwZUVsZW1lbnRzIGFzIGFueSlbZWxlbWVudE5hbWVdO1xuICAgICAgICBpZiAoZWxlbWVudD8uYWN0aW9ucykge1xuICAgICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIE9iamVjdC52YWx1ZXMoZWxlbWVudC5hY3Rpb25zKSkge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uVmVyYiA9IChhY3Rpb24gYXMgYW55KS52ZXJiO1xuICAgICAgICAgICAgaWYgKGFjdGlvblZlcmIgJiYgIXZlcmJzLmluY2x1ZGVzKGFjdGlvblZlcmIpKSB7XG4gICAgICAgICAgICAgIHZlcmJzLnB1c2goYWN0aW9uVmVyYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgbmFtZS1iYXNlZCBpbmZlcmVuY2VcbiAgICBjb25zdCBlbGVtZW50TmFtZUxvd2VyID0gZWxlbWVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKGNvbnN0IHZlcmJMaXN0IG9mIE9iamVjdC52YWx1ZXMoVkVSQl9UQVhPTk9NWSkpIHtcbiAgICAgIGZvciAoY29uc3QgdmVyYiBvZiB2ZXJiTGlzdCkge1xuICAgICAgICBpZiAoZWxlbWVudE5hbWVMb3dlci5pbmNsdWRlcyh2ZXJiKSAmJiAhdmVyYnMuaW5jbHVkZXModmVyYikpIHtcbiAgICAgICAgICB2ZXJicy5wdXNoKHZlcmIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHN1Z2dlc3RlZCB2ZXJicyBmb3IgYW4gZWxlbWVudCBiYXNlZCBvbiBpdHMgdHlwZSBhbmQgbmFtZVxuICAgKi9cbiAgcHVibGljIHN1Z2dlc3RWZXJic0ZvckVsZW1lbnQoZWxlbWVudDogRWxlbWVudERlZmluaXRpb24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbmFtZSA9IGVsZW1lbnQuY29yZS5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdHlwZSA9IGVsZW1lbnQuY29yZS50eXBlO1xuXG4gICAgLy8gVHlwZS1iYXNlZCBzdWdnZXN0aW9uc1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAncGVyc29uYXMnOlxuICAgICAgICBpZiAobmFtZS5pbmNsdWRlcygnZGVidWcnKSkge1xuICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goJ2RlYnVnJywgJ2ZpeCcsICd0cm91Ymxlc2hvb3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZS5pbmNsdWRlcygnY3JlYXRpdmUnKSB8fCBuYW1lLmluY2x1ZGVzKCd3cml0ZXInKSkge1xuICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goJ3dyaXRlJywgJ2NyZWF0ZScsICdjb21wb3NlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoJ2FuYWx5c3QnKSkge1xuICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goJ2FuYWx5emUnLCAnZXhhbWluZScsICdpbnZlc3RpZ2F0ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lLmluY2x1ZGVzKCdleHBsYWluJykpIHtcbiAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKCdleHBsYWluJywgJ3RlYWNoJywgJ3NpbXBsaWZ5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ21lbW9yaWVzJzpcbiAgICAgICAgc3VnZ2VzdGlvbnMucHVzaCgncmVtZW1iZXInLCAncmVjYWxsJywgJ3JldHJpZXZlJyk7XG4gICAgICAgIGlmIChuYW1lLmluY2x1ZGVzKCdzZXNzaW9uJykpIHtcbiAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKCdyZXZpZXcnLCAnZmluZCcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdza2lsbHMnOlxuICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKCd1c2UnLCAnYXBwbHknLCAnZXhlY3V0ZScpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndGVtcGxhdGVzJzpcbiAgICAgICAgc3VnZ2VzdGlvbnMucHVzaCgnY3JlYXRlJywgJ2dlbmVyYXRlJywgJ2ZpbGwnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2FnZW50cyc6XG4gICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goJ3J1bicsICdleGVjdXRlJywgJ2FjdGl2YXRlJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIE5hbWUtYmFzZWQgc3VnZ2VzdGlvbnNcbiAgICBmb3IgKGNvbnN0IFssIHZlcmJzXSBvZiBPYmplY3QuZW50cmllcyhWRVJCX1RBWE9OT01ZKSkge1xuICAgICAgZm9yIChjb25zdCB2ZXJiIG9mIHZlcmJzKSB7XG4gICAgICAgIGlmIChuYW1lLmluY2x1ZGVzKHZlcmIpICYmICFzdWdnZXN0aW9ucy5pbmNsdWRlcyh2ZXJiKSkge1xuICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2godmVyYik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQoc3VnZ2VzdGlvbnMpXTsgIC8vIFJlbW92ZSBkdXBsaWNhdGVzXG4gIH1cbn0iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexConfig.d.ts","sourceRoot":"","sources":["../../../src/portfolio/config/IndexConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,kBAAkB;IAEjC,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,aAAa,EAAE,OAAO,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IAGF,WAAW,EAAE;QACX,wBAAwB,EAAE,MAAM,CAAC;QACjC,wBAAwB,EAAE,MAAM,CAAC;QACjC,0BAA0B,EAAE,MAAM,CAAC;QACnC,mBAAmB,EAAE,MAAM,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,0BAA0B,EAAE,MAAM,CAAC;QACnC,mBAAmB,EAAE,MAAM,CAAC;QAC5B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,kBAAkB,EAAE,OAAO,CAAC;QAC5B,uBAAuB,EAAE,MAAM,CAAC;KACjC,CAAC;IAGF,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IAGF,GAAG,EAAE;QACH,kBAAkB,EAAE,MAAM,CAAC;QAC3B,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;QACF,iBAAiB,EAAE;YACjB,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;KACH,CAAC;IAGF,KAAK,EAAE;QACL,mBAAmB,EAAE,MAAM,CAAC;QAC5B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IAGF,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,uBAAuB,EAAE,OAAO,CAAC;QACjC,iBAAiB,EAAE,MAAM,CAAC;QAC1B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAoDnB;;IAWF;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBxC;;OAEG;IACI,SAAS,IAAI,kBAAkB;IAItC;;OAEG;IACU,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"IndexConfig.d.ts","sourceRoot":"","sources":["../../../src/portfolio/config/IndexConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,kBAAkB;IAEjC,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,aAAa,EAAE,OAAO,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IAGF,WAAW,EAAE;QACX,wBAAwB,EAAE,MAAM,CAAC;QACjC,wBAAwB,EAAE,MAAM,CAAC;QACjC,0BAA0B,EAAE,MAAM,CAAC;QACnC,mBAAmB,EAAE,MAAM,CAAC;QAC5B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,0BAA0B,EAAE,MAAM,CAAC;QACnC,mBAAmB,EAAE,MAAM,CAAC;QAC5B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,kBAAkB,EAAE,OAAO,CAAC;QAC5B,uBAAuB,EAAE,MAAM,CAAC;KACjC,CAAC;IAGF,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IAGF,GAAG,EAAE;QACH,kBAAkB,EAAE,MAAM,CAAC;QAC3B,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;QACF,iBAAiB,EAAE;YACjB,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;KACH,CAAC;IAGF,KAAK,EAAE;QACL,mBAAmB,EAAE,MAAM,CAAC;QAC5B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IAGF,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,uBAAuB,EAAE,OAAO,CAAC;QACjC,iBAAiB,EAAE,MAAM,CAAC;QAC1B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAoDnB;;IAWF;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBxC;;OAEG;IACI,SAAS,IAAI,kBAAkB;IAItC;;OAEG;IACU,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB9E;;;OAGG;IACH,OAAO,CAAC,cAAc;IAuKtB;;OAEG;IACU,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB7C;;OAEG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAe7B;;OAEG;IACU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CA4B1D"}
|