@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
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission evaluation for PreToolUse hooks across all AI platforms.
|
|
3
|
+
*
|
|
4
|
+
* Provides the `evaluate_permission` MCP-AQL READ operation, enabling
|
|
5
|
+
* Claude Code, Cursor, Gemini CLI, Windsurf, and Codex to use
|
|
6
|
+
* DollhouseMCP as their permission evaluation backend via hooks.
|
|
7
|
+
*
|
|
8
|
+
* Three-stage evaluation pipeline:
|
|
9
|
+
* 1. Rate limiting — prevents abuse
|
|
10
|
+
* 2. Static tool classification — built-in allow/deny rules
|
|
11
|
+
* 3. Element policy evaluation — active element gatekeeper policies
|
|
12
|
+
*
|
|
13
|
+
* Returns platform-specific response formats so each platform's hook
|
|
14
|
+
* script receives the JSON shape it expects.
|
|
15
|
+
*/
|
|
16
|
+
import type { RateLimiter } from '../../utils/RateLimiter.js';
|
|
17
|
+
import type { ToolClassificationResult, CliToolPolicyResult } from './policies/ToolClassification.js';
|
|
18
|
+
import type { ActiveElement } from './policies/ElementPolicies.js';
|
|
19
|
+
/** Error thrown when permission evaluation fails at a specific stage */
|
|
20
|
+
export declare class PermissionEvaluationError extends Error {
|
|
21
|
+
readonly stage: 'rate_limit' | 'classification' | 'policy' | 'element_fetch';
|
|
22
|
+
readonly toolName: string;
|
|
23
|
+
constructor(message: string, stage: 'rate_limit' | 'classification' | 'policy' | 'element_fetch', toolName: string, cause?: unknown);
|
|
24
|
+
}
|
|
25
|
+
/** Dependencies injected from MCPAQLHandler */
|
|
26
|
+
export interface EvaluatePermissionDeps {
|
|
27
|
+
permissionPromptLimiter: RateLimiter;
|
|
28
|
+
classifyTool: (toolName: string, toolInput: Record<string, unknown>) => ToolClassificationResult;
|
|
29
|
+
evaluateCliToolPolicy: (toolName: string, toolInput: Record<string, unknown>, elements: ActiveElement[]) => CliToolPolicyResult;
|
|
30
|
+
getActiveElements: () => Promise<ActiveElement[]>;
|
|
31
|
+
}
|
|
32
|
+
/** Known platform identifiers */
|
|
33
|
+
export declare const SUPPORTED_PLATFORMS: string[];
|
|
34
|
+
/**
|
|
35
|
+
* Format permission evaluation response for platform-specific hook scripts.
|
|
36
|
+
* Each platform expects a different JSON shape from its hook response.
|
|
37
|
+
*
|
|
38
|
+
* Unknown platforms default to claude_code format with a warning log.
|
|
39
|
+
*/
|
|
40
|
+
export declare function formatPermissionResponse(decision: 'allow' | 'deny' | 'ask', platform: string, _input: Record<string, unknown>, reason?: string): Record<string, unknown>;
|
|
41
|
+
/**
|
|
42
|
+
* Evaluate a CLI permission request for PreToolUse hooks.
|
|
43
|
+
*
|
|
44
|
+
* @param params - Tool name, input, and target platform
|
|
45
|
+
* @param deps - Injected dependencies from MCPAQLHandler
|
|
46
|
+
* @returns Platform-formatted permission decision
|
|
47
|
+
*/
|
|
48
|
+
export declare function evaluatePermission(params: {
|
|
49
|
+
tool_name?: unknown;
|
|
50
|
+
input?: unknown;
|
|
51
|
+
platform?: unknown;
|
|
52
|
+
}, deps: EvaluatePermissionDeps): Promise<Record<string, unknown>>;
|
|
53
|
+
//# sourceMappingURL=evaluatePermission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluatePermission.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/evaluatePermission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACtG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,wEAAwE;AACxE,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,SAAgB,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,CAAC;IACpF,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAG/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,EACnE,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,OAAO;CAOlB;AAED,+CAA+C;AAC/C,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,WAAW,CAAC;IACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,wBAAwB,CAAC;IACjG,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,mBAAmB,CAAC;IAChI,iBAAiB,EAAE,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACnD;AA2CD,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,UAAkC,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,EAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EACpE,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA8ClC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission evaluation for PreToolUse hooks across all AI platforms.
|
|
3
|
+
*
|
|
4
|
+
* Provides the `evaluate_permission` MCP-AQL READ operation, enabling
|
|
5
|
+
* Claude Code, Cursor, Gemini CLI, Windsurf, and Codex to use
|
|
6
|
+
* DollhouseMCP as their permission evaluation backend via hooks.
|
|
7
|
+
*
|
|
8
|
+
* Three-stage evaluation pipeline:
|
|
9
|
+
* 1. Rate limiting — prevents abuse
|
|
10
|
+
* 2. Static tool classification — built-in allow/deny rules
|
|
11
|
+
* 3. Element policy evaluation — active element gatekeeper policies
|
|
12
|
+
*
|
|
13
|
+
* Returns platform-specific response formats so each platform's hook
|
|
14
|
+
* script receives the JSON shape it expects.
|
|
15
|
+
*/
|
|
16
|
+
/** Error thrown when permission evaluation fails at a specific stage */
|
|
17
|
+
export class PermissionEvaluationError extends Error {
|
|
18
|
+
stage;
|
|
19
|
+
toolName;
|
|
20
|
+
constructor(message, stage, toolName, cause) {
|
|
21
|
+
super(message, cause ? { cause } : undefined);
|
|
22
|
+
this.name = 'PermissionEvaluationError';
|
|
23
|
+
this.stage = stage;
|
|
24
|
+
this.toolName = toolName;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Optional reason field, only included when reason is provided */
|
|
28
|
+
function withReason(obj, reason, key = 'reason') {
|
|
29
|
+
return reason ? { ...obj, [key]: reason } : obj;
|
|
30
|
+
}
|
|
31
|
+
/** Gemini: maps 'ask' to 'deny' (no interactive support) */
|
|
32
|
+
function formatGemini(decision, reason) {
|
|
33
|
+
return withReason({ decision: decision === 'ask' ? 'deny' : decision }, reason);
|
|
34
|
+
}
|
|
35
|
+
/** Cursor: uses 'permission' field instead of 'decision' */
|
|
36
|
+
function formatCursor(decision, reason) {
|
|
37
|
+
return withReason({ permission: decision }, reason);
|
|
38
|
+
}
|
|
39
|
+
/** Windsurf: uses boolean 'allowed' field */
|
|
40
|
+
function formatWindsurf(decision, reason) {
|
|
41
|
+
return withReason({ allowed: decision === 'allow' }, reason);
|
|
42
|
+
}
|
|
43
|
+
/** Codex: wraps in hookSpecificOutput, maps 'ask' to 'deny' */
|
|
44
|
+
function formatCodex(decision, reason) {
|
|
45
|
+
return { hookSpecificOutput: withReason({ permissionDecision: decision === 'ask' ? 'deny' : decision }, reason) };
|
|
46
|
+
}
|
|
47
|
+
/** Claude Code (default): uses 'decision' with 'message' for ask, 'reason' for deny */
|
|
48
|
+
function formatClaudeCode(decision, reason) {
|
|
49
|
+
if (decision === 'allow')
|
|
50
|
+
return { decision: 'allow' };
|
|
51
|
+
if (decision === 'ask')
|
|
52
|
+
return withReason({ decision: 'ask' }, reason, 'message');
|
|
53
|
+
return withReason({ decision: 'deny' }, reason);
|
|
54
|
+
}
|
|
55
|
+
/** Platform formatter lookup */
|
|
56
|
+
const platformFormatters = {
|
|
57
|
+
gemini: formatGemini,
|
|
58
|
+
cursor: formatCursor,
|
|
59
|
+
windsurf: formatWindsurf,
|
|
60
|
+
codex: formatCodex,
|
|
61
|
+
claude_code: formatClaudeCode,
|
|
62
|
+
};
|
|
63
|
+
/** Known platform identifiers */
|
|
64
|
+
export const SUPPORTED_PLATFORMS = Object.keys(platformFormatters);
|
|
65
|
+
/**
|
|
66
|
+
* Format permission evaluation response for platform-specific hook scripts.
|
|
67
|
+
* Each platform expects a different JSON shape from its hook response.
|
|
68
|
+
*
|
|
69
|
+
* Unknown platforms default to claude_code format with a warning log.
|
|
70
|
+
*/
|
|
71
|
+
export function formatPermissionResponse(decision, platform, _input, reason) {
|
|
72
|
+
switch (platform) {
|
|
73
|
+
case 'gemini': return formatGemini(decision, reason);
|
|
74
|
+
case 'cursor': return formatCursor(decision, reason);
|
|
75
|
+
case 'windsurf': return formatWindsurf(decision, reason);
|
|
76
|
+
case 'codex': return formatCodex(decision, reason);
|
|
77
|
+
case 'claude_code': return formatClaudeCode(decision, reason);
|
|
78
|
+
default:
|
|
79
|
+
// Import lazily to avoid circular dependency at module load time
|
|
80
|
+
import('../../utils/logger.js').then(({ logger }) => {
|
|
81
|
+
logger.warn(`[evaluatePermission] Unknown platform "${platform}", defaulting to claude_code format. Supported: ${SUPPORTED_PLATFORMS.join(', ')}`);
|
|
82
|
+
}).catch(() => { });
|
|
83
|
+
return formatClaudeCode(decision, reason);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Evaluate a CLI permission request for PreToolUse hooks.
|
|
88
|
+
*
|
|
89
|
+
* @param params - Tool name, input, and target platform
|
|
90
|
+
* @param deps - Injected dependencies from MCPAQLHandler
|
|
91
|
+
* @returns Platform-formatted permission decision
|
|
92
|
+
*/
|
|
93
|
+
export async function evaluatePermission(params, deps) {
|
|
94
|
+
const toolName = typeof params.tool_name === 'string' ? params.tool_name : '';
|
|
95
|
+
const inputRaw = params.input;
|
|
96
|
+
const input = (inputRaw && typeof inputRaw === 'object')
|
|
97
|
+
? inputRaw
|
|
98
|
+
: {};
|
|
99
|
+
const platform = typeof params.platform === 'string' ? params.platform : 'claude_code';
|
|
100
|
+
// Rate limit
|
|
101
|
+
const rateStatus = deps.permissionPromptLimiter.checkLimit();
|
|
102
|
+
if (!rateStatus.allowed) {
|
|
103
|
+
return formatPermissionResponse('deny', platform, input, 'Rate limit exceeded');
|
|
104
|
+
}
|
|
105
|
+
deps.permissionPromptLimiter.consumeToken();
|
|
106
|
+
// Stage 1: Static classification
|
|
107
|
+
const classification = deps.classifyTool(toolName, input);
|
|
108
|
+
if (classification.behavior === 'allow') {
|
|
109
|
+
return formatPermissionResponse('allow', platform, input);
|
|
110
|
+
}
|
|
111
|
+
if (classification.behavior === 'deny') {
|
|
112
|
+
return formatPermissionResponse('deny', platform, input, classification.reason);
|
|
113
|
+
}
|
|
114
|
+
// Stage 2: Element policy evaluation
|
|
115
|
+
let elements;
|
|
116
|
+
try {
|
|
117
|
+
elements = await deps.getActiveElements();
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
throw new PermissionEvaluationError(`Failed to fetch active elements for policy evaluation: ${err instanceof Error ? err.message : String(err)}`, 'element_fetch', toolName, err);
|
|
121
|
+
}
|
|
122
|
+
const decision = deps.evaluateCliToolPolicy(toolName, input, elements);
|
|
123
|
+
if (decision.behavior === 'deny') {
|
|
124
|
+
return formatPermissionResponse('deny', platform, input, decision.message);
|
|
125
|
+
}
|
|
126
|
+
if (decision.behavior === 'confirm') {
|
|
127
|
+
return formatPermissionResponse('ask', platform, input, decision.message || 'Requires confirmation per element policy');
|
|
128
|
+
}
|
|
129
|
+
// Default: allow
|
|
130
|
+
return formatPermissionResponse('allow', platform, input);
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGVQZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvZXZhbHVhdGVQZXJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBTUgsd0VBQXdFO0FBQ3hFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxLQUFLO0lBQ2xDLEtBQUssQ0FBK0Q7SUFDcEUsUUFBUSxDQUFTO0lBRWpDLFlBQ0UsT0FBZSxFQUNmLEtBQW1FLEVBQ25FLFFBQWdCLEVBQ2hCLEtBQWU7UUFFZixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFVRCxtRUFBbUU7QUFDbkUsU0FBUyxVQUFVLENBQUMsR0FBNEIsRUFBRSxNQUFlLEVBQUUsR0FBRyxHQUFHLFFBQVE7SUFDL0UsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFlO0lBQ3JELE9BQU8sVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFT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QUMsQ0FBQztJQUNsRixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLElBQUksUUFBeUIsQ0FBQztJQUM5QixJQUFJLENBQUM7UUFDSCxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSx5QkFBeUIsQ0FDakMsMERBQTBELEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUM1RyxlQUFlLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV2RSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDakMsT0FBTyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxPQUFPLHdCQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUNwRCxRQUFRLENBQUMsT0FBTyxJQUFJLDBDQUEwQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixPQUFPLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVybWlzc2lvbiBldmFsdWF0aW9uIGZvciBQcmVUb29sVXNlIGhvb2tzIGFjcm9zcyBhbGwgQUkgcGxhdGZvcm1zLlxuICpcbiAqIFByb3ZpZGVzIHRoZSBgZXZhbHVhdGVfcGVybWlzc2lvbmAgTUNQLUFRTCBSRUFEIG9wZXJhdGlvbiwgZW5hYmxpbmdcbiAqIENsYXVkZSBDb2RlLCBDdXJzb3IsIEdlbWluaSBDTEksIFdpbmRzdXJmLCBhbmQgQ29kZXggdG8gdXNlXG4gKiBEb2xsaG91c2VNQ1AgYXMgdGhlaXIgcGVybWlzc2lvbiBldmFsdWF0aW9uIGJhY2tlbmQgdmlhIGhvb2tzLlxuICpcbiAqIFRocmVlLXN0YWdlIGV2YWx1YXRpb24gcGlwZWxpbmU6XG4gKiAxLiBSYXRlIGxpbWl0aW5nIOKAlCBwcmV2ZW50cyBhYnVzZVxuICogMi4gU3RhdGljIHRvb2wgY2xhc3NpZmljYXRpb24g4oCUIGJ1aWx0LWluIGFsbG93L2RlbnkgcnVsZXNcbiAqIDMuIEVsZW1lbnQgcG9saWN5IGV2YWx1YXRpb24g4oCUIGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXNcbiAqXG4gKiBSZXR1cm5zIHBsYXRmb3JtLXNwZWNpZmljIHJlc3BvbnNlIGZvcm1hdHMgc28gZWFjaCBwbGF0Zm9ybSdzIGhvb2tcbiAqIHNjcmlwdCByZWNlaXZlcyB0aGUgSlNPTiBzaGFwZSBpdCBleHBlY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9SYXRlTGltaXRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdCwgQ2xpVG9vbFBvbGljeVJlc3VsdCB9IGZyb20gJy4vcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aXZlRWxlbWVudCB9IGZyb20gJy4vcG9saWNpZXMvRWxlbWVudFBvbGljaWVzLmpzJztcblxuLyoqIEVycm9yIHRocm93biB3aGVuIHBlcm1pc3Npb24gZXZhbHVhdGlvbiBmYWlscyBhdCBhIHNwZWNpZmljIHN0YWdlICovXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkV2YWx1YXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWdlOiAncmF0ZV9saW1pdCcgfCAnY2xhc3NpZmljYXRpb24nIHwgJ3BvbGljeScgfCAnZWxlbWVudF9mZXRjaCc7XG4gIHB1YmxpYyByZWFkb25seSB0b29sTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdGFnZTogJ3JhdGVfbGltaXQnIHwgJ2NsYXNzaWZpY2F0aW9uJyB8ICdwb2xpY3knIHwgJ2VsZW1lbnRfZmV0Y2gnLFxuICAgIHRvb2xOYW1lOiBzdHJpbmcsXG4gICAgY2F1c2U/OiB1bmtub3duLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSA/IHsgY2F1c2UgfSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5uYW1lID0gJ1Blcm1pc3Npb25FdmFsdWF0aW9uRXJyb3InO1xuICAgIHRoaXMuc3RhZ2UgPSBzdGFnZTtcbiAgICB0aGlzLnRvb2xOYW1lID0gdG9vbE5hbWU7XG4gIH1cbn1cblxuLyoqIERlcGVuZGVuY2llcyBpbmplY3RlZCBmcm9tIE1DUEFRTEhhbmRsZXIgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbHVhdGVQZXJtaXNzaW9uRGVwcyB7XG4gIHBlcm1pc3Npb25Qcm9tcHRMaW1pdGVyOiBSYXRlTGltaXRlcjtcbiAgY2xhc3NpZnlUb29sOiAodG9vbE5hbWU6IHN0cmluZywgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0O1xuICBldmFsdWF0ZUNsaVRvb2xQb2xpY3k6ICh0b29sTmFtZTogc3RyaW5nLCB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBlbGVtZW50czogQWN0aXZlRWxlbWVudFtdKSA9PiBDbGlUb29sUG9saWN5UmVzdWx0O1xuICBnZXRBY3RpdmVFbGVtZW50czogKCkgPT4gUHJvbWlzZTxBY3RpdmVFbGVtZW50W10+O1xufVxuXG4vKiogT3B0aW9uYWwgcmVhc29uIGZpZWxkLCBvbmx5IGluY2x1ZGVkIHdoZW4gcmVhc29uIGlzIHByb3ZpZGVkICovXG5mdW5jdGlvbiB3aXRoUmVhc29uKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlYXNvbj86IHN0cmluZywga2V5ID0gJ3JlYXNvbicpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiByZWFzb24gPyB7IC4uLm9iaiwgW2tleV06IHJlYXNvbiB9IDogb2JqO1xufVxuXG4vKiogR2VtaW5pOiBtYXBzICdhc2snIHRvICdkZW55JyAobm8gaW50ZXJhY3RpdmUgc3VwcG9ydCkgKi9cbmZ1bmN0aW9uIGZvcm1hdEdlbWluaShkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgZGVjaXNpb246IGRlY2lzaW9uID09PSAnYXNrJyA/ICdkZW55JyA6IGRlY2lzaW9uIH0sIHJlYXNvbik7XG59XG5cbi8qKiBDdXJzb3I6IHVzZXMgJ3Blcm1pc3Npb24nIGZpZWxkIGluc3RlYWQgb2YgJ2RlY2lzaW9uJyAqL1xuZnVuY3Rpb24gZm9ybWF0Q3Vyc29yKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBwZXJtaXNzaW9uOiBkZWNpc2lvbiB9LCByZWFzb24pO1xufVxuXG4vKiogV2luZHN1cmY6IHVzZXMgYm9vbGVhbiAnYWxsb3dlZCcgZmllbGQgKi9cbmZ1bmN0aW9uIGZvcm1hdFdpbmRzdXJmKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBhbGxvd2VkOiBkZWNpc2lvbiA9PT0gJ2FsbG93JyB9LCByZWFzb24pO1xufVxuXG4vKiogQ29kZXg6IHdyYXBzIGluIGhvb2tTcGVjaWZpY091dHB1dCwgbWFwcyAnYXNrJyB0byAnZGVueScgKi9cbmZ1bmN0aW9uIGZvcm1hdENvZGV4KGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHsgaG9va1NwZWNpZmljT3V0cHV0OiB3aXRoUmVhc29uKHsgcGVybWlzc2lvbkRlY2lzaW9uOiBkZWNpc2lvbiA9PT0gJ2FzaycgPyAnZGVueScgOiBkZWNpc2lvbiB9LCByZWFzb24pIH07XG59XG5cbi8qKiBDbGF1ZGUgQ29kZSAoZGVmYXVsdCk6IHVzZXMgJ2RlY2lzaW9uJyB3aXRoICdtZXNzYWdlJyBmb3IgYXNrLCAncmVhc29uJyBmb3IgZGVueSAqL1xuZnVuY3Rpb24gZm9ybWF0Q2xhdWRlQ29kZShkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmIChkZWNpc2lvbiA9PT0gJ2FsbG93JykgcmV0dXJuIHsgZGVjaXNpb246ICdhbGxvdycgfTtcbiAgaWYgKGRlY2lzaW9uID09PSAnYXNrJykgcmV0dXJuIHdpdGhSZWFzb24oeyBkZWNpc2lvbjogJ2FzaycgfSwgcmVhc29uLCAnbWVzc2FnZScpO1xuICByZXR1cm4gd2l0aFJlYXNvbih7IGRlY2lzaW9uOiAnZGVueScgfSwgcmVhc29uKTtcbn1cblxuLyoqIFBsYXRmb3JtIGZvcm1hdHRlciBsb29rdXAgKi9cbmNvbnN0IHBsYXRmb3JtRm9ybWF0dGVyczogUmVjb3JkPHN0cmluZywgKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge1xuICBnZW1pbmk6IGZvcm1hdEdlbWluaSxcbiAgY3Vyc29yOiBmb3JtYXRDdXJzb3IsXG4gIHdpbmRzdXJmOiBmb3JtYXRXaW5kc3VyZixcbiAgY29kZXg6IGZvcm1hdENvZGV4LFxuICBjbGF1ZGVfY29kZTogZm9ybWF0Q2xhdWRlQ29kZSxcbn07XG5cbi8qKiBLbm93biBwbGF0Zm9ybSBpZGVudGlmaWVycyAqL1xuZXhwb3J0IGNvbnN0IFNVUFBPUlRFRF9QTEFURk9STVMgPSBPYmplY3Qua2V5cyhwbGF0Zm9ybUZvcm1hdHRlcnMpO1xuXG4vKipcbiAqIEZvcm1hdCBwZXJtaXNzaW9uIGV2YWx1YXRpb24gcmVzcG9uc2UgZm9yIHBsYXRmb3JtLXNwZWNpZmljIGhvb2sgc2NyaXB0cy5cbiAqIEVhY2ggcGxhdGZvcm0gZXhwZWN0cyBhIGRpZmZlcmVudCBKU09OIHNoYXBlIGZyb20gaXRzIGhvb2sgcmVzcG9uc2UuXG4gKlxuICogVW5rbm93biBwbGF0Zm9ybXMgZGVmYXVsdCB0byBjbGF1ZGVfY29kZSBmb3JtYXQgd2l0aCBhIHdhcm5pbmcgbG9nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKFxuICBkZWNpc2lvbjogJ2FsbG93JyB8ICdkZW55JyB8ICdhc2snLFxuICBwbGF0Zm9ybTogc3RyaW5nLFxuICBfaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICByZWFzb24/OiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdnZW1pbmknOiByZXR1cm4gZm9ybWF0R2VtaW5pKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ2N1cnNvcic6IHJldHVybiBmb3JtYXRDdXJzb3IoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnd2luZHN1cmYnOiByZXR1cm4gZm9ybWF0V2luZHN1cmYoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnY29kZXgnOiByZXR1cm4gZm9ybWF0Q29kZXgoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnY2xhdWRlX2NvZGUnOiByZXR1cm4gZm9ybWF0Q2xhdWRlQ29kZShkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gSW1wb3J0IGxhemlseSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IGF0IG1vZHVsZSBsb2FkIHRpbWVcbiAgICAgIGltcG9ydCgnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJykudGhlbigoeyBsb2dnZXIgfSkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybihgW2V2YWx1YXRlUGVybWlzc2lvbl0gVW5rbm93biBwbGF0Zm9ybSBcIiR7cGxhdGZvcm19XCIsIGRlZmF1bHRpbmcgdG8gY2xhdWRlX2NvZGUgZm9ybWF0LiBTdXBwb3J0ZWQ6ICR7U1VQUE9SVEVEX1BMQVRGT1JNUy5qb2luKCcsICcpfWApO1xuICAgICAgfSkuY2F0Y2goKCkgPT4geyAvKiBsb2dnZXIgbm90IGF2YWlsYWJsZSAqLyB9KTtcbiAgICAgIHJldHVybiBmb3JtYXRDbGF1ZGVDb2RlKGRlY2lzaW9uLCByZWFzb24pO1xuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGUgYSBDTEkgcGVybWlzc2lvbiByZXF1ZXN0IGZvciBQcmVUb29sVXNlIGhvb2tzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUb29sIG5hbWUsIGlucHV0LCBhbmQgdGFyZ2V0IHBsYXRmb3JtXG4gKiBAcGFyYW0gZGVwcyAtIEluamVjdGVkIGRlcGVuZGVuY2llcyBmcm9tIE1DUEFRTEhhbmRsZXJcbiAqIEByZXR1cm5zIFBsYXRmb3JtLWZvcm1hdHRlZCBwZXJtaXNzaW9uIGRlY2lzaW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsdWF0ZVBlcm1pc3Npb24oXG4gIHBhcmFtczogeyB0b29sX25hbWU/OiB1bmtub3duOyBpbnB1dD86IHVua25vd247IHBsYXRmb3JtPzogdW5rbm93biB9LFxuICBkZXBzOiBFdmFsdWF0ZVBlcm1pc3Npb25EZXBzLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCB0b29sTmFtZSA9IHR5cGVvZiBwYXJhbXMudG9vbF9uYW1lID09PSAnc3RyaW5nJyA/IHBhcmFtcy50b29sX25hbWUgOiAnJztcbiAgY29uc3QgaW5wdXRSYXcgPSBwYXJhbXMuaW5wdXQ7XG4gIGNvbnN0IGlucHV0ID0gKGlucHV0UmF3ICYmIHR5cGVvZiBpbnB1dFJhdyA9PT0gJ29iamVjdCcpXG4gICAgPyBpbnB1dFJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIDoge307XG4gIGNvbnN0IHBsYXRmb3JtID0gdHlwZW9mIHBhcmFtcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycgPyBwYXJhbXMucGxhdGZvcm0gOiAnY2xhdWRlX2NvZGUnO1xuXG4gIC8vIFJhdGUgbGltaXRcbiAgY29uc3QgcmF0ZVN0YXR1cyA9IGRlcHMucGVybWlzc2lvblByb21wdExpbWl0ZXIuY2hlY2tMaW1pdCgpO1xuICBpZiAoIXJhdGVTdGF0dXMuYWxsb3dlZCkge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2RlbnknLCBwbGF0Zm9ybSwgaW5wdXQsICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyk7XG4gIH1cbiAgZGVwcy5wZXJtaXNzaW9uUHJvbXB0TGltaXRlci5jb25zdW1lVG9rZW4oKTtcblxuICAvLyBTdGFnZSAxOiBTdGF0aWMgY2xhc3NpZmljYXRpb25cbiAgY29uc3QgY2xhc3NpZmljYXRpb24gPSBkZXBzLmNsYXNzaWZ5VG9vbCh0b29sTmFtZSwgaW5wdXQpO1xuICBpZiAoY2xhc3NpZmljYXRpb24uYmVoYXZpb3IgPT09ICdhbGxvdycpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCk7XG4gIH1cbiAgaWYgKGNsYXNzaWZpY2F0aW9uLmJlaGF2aW9yID09PSAnZGVueScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdkZW55JywgcGxhdGZvcm0sIGlucHV0LCBjbGFzc2lmaWNhdGlvbi5yZWFzb24pO1xuICB9XG5cbiAgLy8gU3RhZ2UgMjogRWxlbWVudCBwb2xpY3kgZXZhbHVhdGlvblxuICBsZXQgZWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXTtcbiAgdHJ5IHtcbiAgICBlbGVtZW50cyA9IGF3YWl0IGRlcHMuZ2V0QWN0aXZlRWxlbWVudHMoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IFBlcm1pc3Npb25FdmFsdWF0aW9uRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIGZldGNoIGFjdGl2ZSBlbGVtZW50cyBmb3IgcG9saWN5IGV2YWx1YXRpb246ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICAnZWxlbWVudF9mZXRjaCcsIHRvb2xOYW1lLCBlcnIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBkZWNpc2lvbiA9IGRlcHMuZXZhbHVhdGVDbGlUb29sUG9saWN5KHRvb2xOYW1lLCBpbnB1dCwgZWxlbWVudHMpO1xuXG4gIGlmIChkZWNpc2lvbi5iZWhhdmlvciA9PT0gJ2RlbnknKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnZGVueScsIHBsYXRmb3JtLCBpbnB1dCwgZGVjaXNpb24ubWVzc2FnZSk7XG4gIH1cbiAgaWYgKGRlY2lzaW9uLmJlaGF2aW9yID09PSAnY29uZmlybScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhc2snLCBwbGF0Zm9ybSwgaW5wdXQsXG4gICAgICBkZWNpc2lvbi5tZXNzYWdlIHx8ICdSZXF1aXJlcyBjb25maXJtYXRpb24gcGVyIGVsZW1lbnQgcG9saWN5Jyk7XG4gIH1cblxuICAvLyBEZWZhdWx0OiBhbGxvd1xuICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCk7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolClassification.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/ToolClassification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1E,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,aAAa,CAAC;IACzB,wFAAwF;IACxF,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;QAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,uBAAuB,CAAC;CACzC;
|
|
1
|
+
{"version":3,"file":"ToolClassification.d.ts","sourceRoot":"","sources":["../../../../src/handlers/mcp-aql/policies/ToolClassification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1E,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,aAAa,CAAC;IACzB,wFAAwF;IACxF,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,eAAe,GAAG,iBAAiB,GAAG,cAAc,CAAC;QAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,uBAAuB,CAAC;CACzC;AA0OD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,wBAAwB,CAsC1B;AAiHD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,EAAE,wBAAwB,GACvC,cAAc,CA0ChB;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB;;;;;;;;;;;;EAYlC;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,EAAE,aAAa,EAAE,GAC9B,mBAAmB,CA2JrB"}
|
|
@@ -67,6 +67,7 @@ const SAFE_MCP_OPERATIONS = new Set([
|
|
|
67
67
|
'get_build_info',
|
|
68
68
|
'get_cache_budget_report',
|
|
69
69
|
'query_logs',
|
|
70
|
+
'query_metrics',
|
|
70
71
|
'find_similar_elements',
|
|
71
72
|
'get_element_relationships',
|
|
72
73
|
'search_by_verb',
|
|
@@ -657,4 +658,4 @@ function buildMatchTargets(toolName, toolInput) {
|
|
|
657
658
|
}
|
|
658
659
|
return targets;
|
|
659
660
|
}
|
|
660
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbENsYXNzaWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBaUNsRCx3RUFBd0U7QUFFeEU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sK0JBQStCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDOUMsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLHdCQUF3QixFQUFRLHFCQUFxQjtJQUNyRCwyQkFBMkIsRUFBSyxxQkFBcUI7Q0FDdEQsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbEMsZUFBZTtJQUNmLGFBQWE7SUFDYixxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQiw0QkFBNEI7SUFDNUIsd0JBQXdCO0lBQ3hCLDZCQUE2QjtJQUM3QixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHlCQUF5QjtJQUN6QixZQUFZO0lBQ1osdUJBQXVCO0lBQ3ZCLDJCQUEyQjtJ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Q0FBQyxDQUFDLENBQUM7UUFDM0YsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUb29sIENsYXNzaWZpY2F0aW9uIGZvciBDTEktTGV2ZWwgUGVybWlzc2lvbiBQcm9tcHRzXG4gKlxuICogUHJvdmlkZXMgc3RhdGljIGNsYXNzaWZpY2F0aW9uIG9mIENsYXVkZSBDb2RlIENMSSB0b29sIGNhbGxzIGFuZFxuICogZXZhbHVhdGlvbiBhZ2FpbnN0IGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXMuXG4gKlxuICogVXNlZCBieSB0aGUgcGVybWlzc2lvbl9wcm9tcHQgb3BlcmF0aW9uIChJc3N1ZSAjNjI1KSB0byBldmFsdWF0ZVxuICogLS1wZXJtaXNzaW9uLXByb21wdC10b29sIHJlcXVlc3RzIHdpdGhvdXQgcmVxdWlyaW5nIExMTSBldmFsdWF0aW9uLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBtYXRjaGVzUGF0dGVybiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3BhdHRlcm5NYXRjaGVyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL0VsZW1lbnRQb2xpY2llcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJpc2tBc3Nlc3NtZW50IH0gZnJvbSAnLi4vR2F0ZWtlZXBlclR5cGVzLmpzJztcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBUb29sUmlza0xldmVsID0gJ3NhZmUnIHwgJ21vZGVyYXRlJyB8ICdkYW5nZXJvdXMnIHwgJ2Jsb2NrZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdCB7XG4gIHJpc2tMZXZlbDogVG9vbFJpc2tMZXZlbDtcbiAgLyoqICdhbGxvdycgPSBhdXRvLWFwcHJvdmUsICdkZW55JyA9IGF1dG8tcmVqZWN0LCAnZXZhbHVhdGUnID0gY2hlY2sgZWxlbWVudCBwb2xpY2llcyAqL1xuICBiZWhhdmlvcjogJ2FsbG93JyB8ICdkZW55JyB8ICdldmFsdWF0ZSc7XG4gIHJlYXNvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeUV2YWx1YXRpb25Db250ZXh0IHtcbiAgZXZhbHVhdGVkRWxlbWVudHM6IEFycmF5PHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG1hdGNoZWQ/OiAnYWxsb3dQYXR0ZXJucycgfCAnY29uZmlybVBhdHRlcm5zJyB8ICdkZW55UGF0dGVybnMnO1xuICAgIG1hdGNoZWRQYXR0ZXJuPzogc3RyaW5nO1xuICAgIG1hdGNoZWRUYXJnZXQ/OiBzdHJpbmc7XG4gIH0+O1xuICBkZWNpc2lvbkNoYWluOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGlUb29sUG9saWN5UmVzdWx0IHtcbiAgYmVoYXZpb3I6ICdhbGxvdycgfCAnZGVueScgfCAnZXZhbHVhdGUnIHwgJ2NvbmZpcm0nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBjb25maXJtU291cmNlPzogc3RyaW5nO1xuICBwb2xpY3lDb250ZXh0PzogUG9saWN5RXZhbHVhdGlvbkNvbnRleHQ7XG59XG5cbi8vIOKUgOKUgCBHYXRla2VlcGVyLUVzc2VudGlhbCBPcGVyYXRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIE1DUC1BUUwgb3BlcmF0aW9ucyB0aGF0IG11c3QgTkVWRVIgYmUgYmxvY2tlZCBieSBwZXJtaXNzaW9uX3Byb21wdCxcbiAqIGV2ZW4gaWYgZWxlbWVudCBkZW55UGF0dGVybnMgd291bGQgbWF0Y2ggdGhlIE1DUCB0b29sIG5hbWUuXG4gKlxuICogVGhlc2UgYXJlIGVzc2VudGlhbCBmb3IgdGhlIEdhdGVrZWVwZXIgZmxvdyBpdHNlbGYuIEJsb2NraW5nIHRoZW1cbiAqIHdvdWxkIHByZXZlbnQgdGhlIGh1bWFuLWluLXRoZS1sb29wIGFwcHJvdmFsIHBhdGggZnJvbSBmdW5jdGlvbmluZ1xuICogKGUuZy4sIGEgZGVueVBhdHRlcm4gb2YgJ21jcF9fRG9sbGhvdXNlTUNQKicgd291bGQgYmxvY2sgY29uZmlybV9vcGVyYXRpb24pLlxuICovXG5jb25zdCBHQVRFS0VFUEVSX0VTU0VOVElBTF9PUEVSQVRJT05TID0gbmV3IFNldChbXG4gICdjb25maXJtX29wZXJhdGlvbicsXG4gICd2ZXJpZnlfY2hhbGxlbmdlJyxcbiAgJ3Blcm1pc3Npb25fcHJvbXB0JyxcbiAgJ2ludHJvc3BlY3QnLFxuICAnZ2V0X2FjdGl2ZV9lbGVtZW50cycsXG4gICdnZXRfZXhlY3V0aW9uX3N0YXRlJyxcbiAgJ2dldF9nYXRoZXJlZF9kYXRhJyxcbiAgJ2FwcHJvdmVfY2xpX3Blcm1pc3Npb24nLCAgICAgICAvLyBJc3N1ZSAjNjI1IFBoYXNlIDNcbiAgJ2dldF9wZW5kaW5nX2NsaV9hcHByb3ZhbHMnLCAgICAvLyBJc3N1ZSAjNjI1IFBoYXNlIDNcbl0pO1xuXG4vKipcbiAqIE1DUC1BUUwgb3BlcmF0aW9ucyB0aGF0IGFyZSBpbmhlcmVudGx5IHJlYWQtb25seS5cbiAqXG4gKiBUaGVzZSBhdXRvLWFsbG93IGluIHBlcm1pc3Npb25fcHJvbXB0IChubyBlbGVtZW50IHBvbGljeSBldmFsdWF0aW9uKS5cbiAqIFRoZSBHYXRla2VlcGVyIChMYXllciAyKSBzdGlsbCBhcHBsaWVzIGl0cyBvd24gcGVyLW9wZXJhdGlvbiBwb2xpY2llcyxcbiAqIHNvIHRoaXMgZG9lc24ndCBieXBhc3Mgc2VydmVyLXNpZGUgYWNjZXNzIGNvbnRyb2wg4oCUIGl0IGp1c3QgYXZvaWRzXG4gKiB1bm5lY2Vzc2FyeSAnZXZhbHVhdGUnIHJvdW5kLXRyaXBzIGZvciBvcGVyYXRpb25zIHRoYXQgY2FuJ3QgbW9kaWZ5IHN0YXRlLlxuICovXG5jb25zdCBTQUZFX01DUF9PUEVSQVRJT05TID0gbmV3IFNldChbXG4gICdsaXN0X2VsZW1lbnRzJyxcbiAgJ2dldF9lbGVtZW50JyxcbiAgJ2dldF9lbGVtZW50X2RldGFpbHMnLFxuICAnc2VhcmNoX2VsZW1lbnRzJyxcbiAgJ3F1ZXJ5X2VsZW1lbnRzJyxcbiAgJ2dldF9hY3RpdmVfZWxlbWVudHMnLFxuICAndmFsaWRhdGVfZWxlbWVudCcsXG4gICdyZW5kZXInLFxuICAnZXhwb3J0X2VsZW1lbnQnLFxuICAnaW50cm9zcGVjdCcsXG4gICdnZXRfZXhlY3V0aW9uX3N0YXRlJyxcbiAgJ2dldF9nYXRoZXJlZF9kYXRhJyxcbiAgJ2Jyb3dzZV9jb2xsZWN0aW9uJyxcbiAgJ3NlYXJjaF9jb2xsZWN0aW9uJyxcbiAgJ3NlYXJjaF9jb2xsZWN0aW9uX2VuaGFuY2VkJyxcbiAgJ2dldF9jb2xsZWN0aW9uX2NvbnRlbnQnLFxuICAnZ2V0X2NvbGxlY3Rpb25fY2FjaGVfaGVhbHRoJyxcbiAgJ3BvcnRmb2xpb19zdGF0dXMnLFxuICAncG9ydGZvbGlvX2NvbmZpZycsXG4gICdzZWFyY2hfcG9ydGZvbGlvJyxcbiAgJ3NlYXJjaF9hbGwnLFxuICAnY2hlY2tfZ2l0aHViX2F1dGgnLFxuICAnb2F1dGhfaGVscGVyX3N0YXR1cycsXG4gICdkb2xsaG91c2VfY29uZmlnJyxcbiAgJ2dldF9idWlsZF9pbmZvJyxcbiAgJ2dldF9jYWNoZV9idWRnZXRfcmVwb3J0JyxcbiAgJ3F1ZXJ5X2xvZ3MnLFxuICAnZmluZF9zaW1pbGFyX2VsZW1lbnRzJyxcbiAgJ2dldF9lbGVtZW50X3JlbGF0aW9uc2hpcHMnLFxuICAnc2VhcmNoX2J5X3ZlcmInLFxuICAnZ2V0X3JlbGF0aW9uc2hpcF9zdGF0cycsXG4gICdnZXRfZWZmZWN0aXZlX2NsaV9wb2xpY2llcycsXG4gICdnZXRfcGVuZGluZ19jbGlfYXBwcm92YWxzJyxcbl0pO1xuXG4vLyDilIDilIAgU3RhdGljIENsYXNzaWZpY2F0aW9uIExpc3RzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRvb2xzIHRoYXQgYXJlIGFsd2F5cyBzYWZlIChyZWFkLW9ubHksIG5vIHNpZGUgZWZmZWN0cykuXG4gKlxuICogTk9URTogXCJTYWZlXCIgaGVyZSBtZWFucyBubyBkZXN0cnVjdGl2ZSBzaWRlIGVmZmVjdHMg4oCUIGl0IGRvZXMgTk9UIG1lYW5cbiAqIHVucmVzdHJpY3RlZC4gUmVhZC1vbmx5IHRvb2xzIGNhbiBzdGlsbCBwb3NlIGluZm9ybWF0aW9uLWxlYWthZ2Ugb3JcbiAqIHNjb3BlLWNyZWVwIHJpc2tzIHdoZW4gdXNlZCB0byBhY2Nlc3MgZmlsZXMgb3V0c2lkZSB0aGUgcHJvamVjdCB3b3JraW5nXG4gKiBkaXJlY3RvcnkgKGUuZy4sIH4vLnNzaC8qLCAvZXRjL3Bhc3N3ZCwgY3JlZGVudGlhbHMgaW4gaG9tZSBkaXJlY3RvcmllcykuXG4gKiBNb3N0IExMTSBjbGllbnRzIChDbGF1ZGUgQ29kZSwgQ3Vyc29yLCBldGMuKSBhbHJlYWR5IGVuZm9yY2UgZGlyZWN0b3J5XG4gKiBzY29waW5nIGF0IHRoZSBjbGllbnQgbGV2ZWwuIFRoZSBgYXNzZXNzUmlzaygpYCBmdW5jdGlvbiBhcHBsaWVzIGEgc21hbGxcbiAqIHNjb3JlIGJ1bXAgZm9yIHJlYWQgb3BlcmF0aW9ucyB0YXJnZXRpbmcgb3V0LW9mLXNjb3BlIHBhdGhzIGFzIGFuXG4gKiBhZGRpdGlvbmFsIHNpZ25hbCBmb3IgYXBwcm92YWwgcG9saWNpZXMuXG4gKi9cbmNvbnN0IFNBRkVfVE9PTFMgPSBuZXcgU2V0KFtcbiAgJ1JlYWQnLFxuICAnR3JlcCcsXG4gICdHbG9iJyxcbiAgJ1dlYkZldGNoJyxcbiAgJ1dlYlNlYXJjaCcsXG4gICdUYXNrQ3JlYXRlJyxcbiAgJ1Rhc2tVcGRhdGUnLFxuICAnVGFza0dldCcsXG4gICdUYXNrTGlzdCcsXG4gICdUYXNrT3V0cHV0JyxcbiAgJ0Fza1VzZXJRdWVzdGlvbicsXG4gICdFbnRlclBsYW5Nb2RlJyxcbiAgJ0V4aXRQbGFuTW9kZScsXG4gICdUb2RvUmVhZCcsXG4gICdUb2RvV3JpdGUnLFxuXSk7XG5cbi8qKiBCYXNoIGNvbW1hbmQgcHJlZml4ZXMvcGF0dGVybnMgdGhhdCBhcmUgc2FmZSAqL1xuY29uc3QgU0FGRV9CQVNIX1BBVFRFUk5TID0gW1xuICAnZ2l0IHN0YXR1cyonLFxuICAnZ2l0IGxvZyonLFxuICAnZ2l0IGRpZmYqJyxcbiAgJ2dpdCBicmFuY2gqJyxcbiAgJ2dpdCBzaG93KicsXG4gICdnaXQgcmVtb3RlKicsXG4gICdnaXQgc3Rhc2ggbGlzdConLFxuICAnbHMqJyxcbiAgJ3B3ZCcsXG4gICdjYXQgKicsXG4gICdoZWFkIConLFxuICAndGFpbCAqJyxcbiAgJ3djIConLFxuICAnZWNobyAqJyxcbiAgJ25wbSB0ZXN0KicsXG4gICducG0gcnVuIGxpbnQqJyxcbiAgJ25wbSBydW4gYnVpbGQqJyxcbiAgJ25wbSBydW4gdGVzdConLFxuICAnbnBtIHJ1biBjaGVjayonLFxuICAnbnBtIHJ1biB0eXBlY2hlY2sqJyxcbiAgJ25wbSBydW4gZm9ybWF0KicsXG4gICducG0gbHMqJyxcbiAgJ25wbSBpbmZvKicsXG4gICducG0gb3V0ZGF0ZWQqJyxcbiAgJ25weCBqZXN0KicsXG4gICducHggdHNjIC0tbm9FbWl0KicsXG4gICdub2RlIC0tdmVyc2lvbionLFxuICAnd2hpY2ggKicsXG4gICd0eXBlIConLFxuICAnZ2ggaXNzdWUgbGlzdConLFxuICAnZ2ggaXNzdWUgdmlldyonLFxuICAnZ2ggcHIgbGlzdConLFxuICAnZ2ggcHIgdmlldyonLFxuICAnZ2ggcHIgY2hlY2tzKicsXG5dO1xuXG4vKiogQmFzaCBjb21tYW5kIHBhdHRlcm5zIHRoYXQgYXJlIGRhbmdlcm91cyAqL1xuY29uc3QgREFOR0VST1VTX0JBU0hfUEFUVEVSTlMgPSBbXG4gICdybSAtcmYgKicsXG4gICdybSAtZnIgKicsXG4gICdnaXQgcHVzaCAtLWZvcmNlKicsXG4gICdnaXQgcHVzaCAtZiAqJyxcbiAgJ2dpdCByZXNldCAtLWhhcmQqJyxcbiAgJ2dpdCBjbGVhbiAtZionLFxuICAnZ2l0IGNoZWNrb3V0IC0tIConLFxuICAnZ2l0IGJyYW5jaCAtRCAqJyxcbiAgJ2NobW9kIDc3NyonLFxuICAnY2htb2QgLVIgNzc3KicsXG4gICdjaG1vZCArcyAqJyxcbiAgJ2Nob3duIHJvb3QgKicsXG4gICdzdWRvIConLFxuICAnZG9hcyAqJyxcbiAgJ3N1IC0qJyxcbiAgJ2V2YWwgKicsXG4gIC8vIFBpcGUtdG8tc2hlbGwgcGF0dGVybnMgKHdpdGggYW5kIHdpdGhvdXQgc3BhY2VzLCBtdWx0aXBsZSBzaGVsbHMpXG4gICcqfCBzaCcsXG4gICcqfCBzaCAqJyxcbiAgJyp8c2gnLFxuICAnKnxzaCAqJyxcbiAgJyp8IGJhc2gnLFxuICAnKnwgYmFzaCAqJyxcbiAgJyp8YmFzaCcsXG4gICcqfGJhc2ggKicsXG4gICcqfCB6c2gnLFxuICAnKnx6c2gnLFxuICAnY3VybCAqIHwgKicsXG4gICd3Z2V0ICogfCAqJyxcbiAgLy8gUGFja2FnZSBtYW5hZ2VyIGluc3RhbGxzIChjYW4gZXhlY3V0ZSBhcmJpdHJhcnkgcG9zdC1pbnN0YWxsIHNjcmlwdHMpXG4gICducG0gaW5zdGFsbCAqJyxcbiAgJ25wbSBpbnN0YWxsJyxcbiAgJ25wbSBpIConLFxuICAnbnBtIGknLFxuICAneWFybiBhZGQgKicsXG4gICd5YXJuIGluc3RhbGwqJyxcbiAgJ3BpcCBpbnN0YWxsIConLFxuICAnZ2VtIGluc3RhbGwgKicsXG4gIC8vIEVudmlyb25tZW50IG1hbmlwdWxhdGlvbiAocGF0aCBwb2lzb25pbmcsIGxpYnJhcnkgaW5qZWN0aW9uLCB2YXJpYWJsZSBkZXN0cnVjdGlvbilcbiAgJ2V4cG9ydCBQQVRIPSonLFxuICAnZXhwb3J0IExEX1BSRUxPQUQ9KicsXG4gICdleHBvcnQgTERfTElCUkFSWV9QQVRIPSonLFxuICAnZW52IC1pIConLFxuICAndW5zZXQgKicsXG4gIC8vIFByb2Nlc3MgY29udHJvbCAoY2FuIHRlcm1pbmF0ZSBhZ2VudHMgb3Igc3lzdGVtIHByb2Nlc3NlcylcbiAgJ2tpbGwgKicsXG4gICdraWxsIC0qJyxcbiAgJ3BraWxsIConLFxuICAna2lsbGFsbCAqJyxcbiAgLy8gTmV0d29yayB0b29scyAoZXhmaWx0cmF0aW9uLCByZXZlcnNlIHNoZWxscylcbiAgJ25jIConLFxuICAnbmMgLSonLFxuICAnbmV0Y2F0IConLFxuICAnbmNhdCAqJyxcbiAgJ3NvY2F0IConLFxuICAvLyBBcmNoaXZlIG9wZXJhdGlvbnMgKGFyY2hpdmUgYm9tYnMsIHJvb3QgZGlyZWN0b3J5IGV4ZmlsdHJhdGlvbi9yYW5zb213YXJlKVxuICAndGFyIC14ZiAqJyxcbiAgJ3RhciB4ZiAqJyxcbiAgJ3ppcCAtciAqIC8nLFxuICAvLyBDb21tYW5kIGNoYWluaW5nIHdpdGggZGFuZ2Vyb3VzIHN1YmNvbW1hbmRzXG4gICcqOyBybSAtcmYgKicsXG4gICcqJiYgcm0gLXJmIConLFxuICAnKnx8IHJtIC1yZiAqJyxcbiAgJyo7IHN1ZG8gKicsXG4gICcqJiYgc3VkbyAqJyxcbiAgJyp8fCBzdWRvIConLFxuICAnKjsgZXZhbCAqJyxcbiAgJyomJiBldmFsIConLFxuICAvLyBTdWJwcm9jZXNzIGV4ZWN1dGlvbiB3cmFwcGVycyAoYnlwYXNzIG91dGVyIGNvbW1hbmQgY2xhc3NpZmljYXRpb24pXG4gICdiYXNoIC1jIConLFxuICAnc2ggLWMgKicsXG4gICd6c2ggLWMgKicsXG4gICcvYmluL2Jhc2ggLWMgKicsXG4gICcvYmluL3NoIC1jIConLFxuICAvLyBQcm9jZXNzIHN1YnN0aXR1dGlvbiAoY2FuIGluamVjdCBhcmJpdHJhcnkgY29tbWFuZCBvdXRwdXQpXG4gICcqPCgqJyxcbiAgLy8gRW5jb2RlZCBwYXlsb2FkIGV4ZWN1dGlvbiAoYmFzZTY0LWRlY29kZSBwaXBlZCB0byBzaGVsbClcbiAgJypiYXNlNjQgLWQqfConLFxuICAnKmJhc2U2NCAtLWRlY29kZSp8KicsXG4gICcqYmFzZTY0IC1EKnwqJyxcbl07XG5cbi8qKiBCYXNoIGNvbW1hbmQgcGF0dGVybnMgdGhhdCBhcmUgYWx3YXlzIGJsb2NrZWQgKi9cbmNvbnN0IEJMT0NLRURfQkFTSF9QQVRURVJOUyA9IFtcbiAgJ21rZnMqJyxcbiAgJ2RkIGlmPSonLFxuICAnOigpezp8OiZ9OzonLFxuICAnZm9ybWF0IConLFxuICAnKigpeyAqJyxcbl07XG5cbi8vIOKUgOKUgCBTdGF0aWMgQ2xhc3NpZmljYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQ2xhc3NpZnkgYSBDTEkgdG9vbCBjYWxsIGJ5IHJpc2sgbGV2ZWwgdXNpbmcgc3RhdGljIHJ1bGVzLlxuICpcbiAqIFJldHVybnMgJ2FsbG93JyBmb3Iga25vd24tc2FmZSB0b29scywgJ2RlbnknIGZvciBrbm93bi1kYW5nZXJvdXMgcGF0dGVybnMsXG4gKiBhbmQgJ2V2YWx1YXRlJyBmb3IgYW55dGhpbmcgdGhhdCBuZWVkcyBmdXJ0aGVyIHBvbGljeSBjaGVja2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5VG9vbChcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0IHtcbiAgLy8gS25vd24tc2FmZSB0b29sczogYXV0by1hbGxvd1xuICBpZiAoU0FGRV9UT09MUy5oYXModG9vbE5hbWUpKSB7XG4gICAgcmV0dXJuIHsgcmlza0xldmVsOiAnc2FmZScsIGJlaGF2aW9yOiAnYWxsb3cnLCByZWFzb246IGAke3Rvb2xOYW1lfSBpcyBhIHJlYWQtb25seSB0b29sYCB9O1xuICB9XG5cbiAgLy8gQmFzaDogc3ViLWNsYXNzaWZ5IGJ5IGNvbW1hbmQgY29udGVudFxuICBpZiAodG9vbE5hbWUgPT09ICdCYXNoJykge1xuICAgIHJldHVybiBjbGFzc2lmeUJhc2hDb21tYW5kKHRvb2xJbnB1dCk7XG4gIH1cblxuICAvLyBNQ1AgdG9vbCBjYWxsczogYXV0by1hbGxvdyBnYXRla2VlcGVyLWVzc2VudGlhbCBhbmQgc2FmZSByZWFkLW9ubHkgb3BlcmF0aW9ucywgZXZhbHVhdGUgb3RoZXJzXG4gIGlmICh0b29sTmFtZS5zdGFydHNXaXRoKCdtY3BfXycpKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdHlwZW9mIHRvb2xJbnB1dC5vcGVyYXRpb24gPT09ICdzdHJpbmcnID8gdG9vbElucHV0Lm9wZXJhdGlvbiA6ICcnO1xuICAgIGlmIChvcGVyYXRpb24gJiYgR0FURUtFRVBFUl9FU1NFTlRJQUxfT1BFUkFUSU9OUy5oYXMob3BlcmF0aW9uKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmlza0xldmVsOiAnc2FmZScsXG4gICAgICAgIGJlaGF2aW9yOiAnYWxsb3cnLFxuICAgICAgICByZWFzb246IGBHYXRla2VlcGVyLWVzc2VudGlhbCBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScg4oCUIGNhbm5vdCBiZSBibG9ja2VkIGJ5IHBlcm1pc3Npb25fcHJvbXB0YCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChvcGVyYXRpb24gJiYgU0FGRV9NQ1BfT1BFUkFUSU9OUy5oYXMob3BlcmF0aW9uKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmlza0xldmVsOiAnc2FmZScsXG4gICAgICAgIGJlaGF2aW9yOiAnYWxsb3cnLFxuICAgICAgICByZWFzb246IGBSZWFkLW9ubHkgTUNQIG9wZXJhdGlvbiAnJHtvcGVyYXRpb259J2AsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246ICdNQ1AgdG9vbCBjYWxsIHJlcXVpcmVzIHBvbGljeSBldmFsdWF0aW9uJyB9O1xuICB9XG5cbiAgLy8gRWRpdCwgV3JpdGUsIEFnZW50LCBOb3RlYm9va0VkaXQsIGV0Yy46IG1vZGVyYXRlIHJpc2tcbiAgaWYgKFsnRWRpdCcsICdXcml0ZScsICdBZ2VudCcsICdOb3RlYm9va0VkaXQnXS5pbmNsdWRlcyh0b29sTmFtZSkpIHtcbiAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246IGAke3Rvb2xOYW1lfSBtb2RpZmllcyBzdGF0ZSwgcmVxdWlyZXMgcG9saWN5IGV2YWx1YXRpb25gIH07XG4gIH1cblxuICAvLyBVbmtub3duIHRvb2w6IGV2YWx1YXRlIChwZXJtaXNzaXZlIGRlZmF1bHQgZm9yIFBoYXNlIDEpXG4gIHJldHVybiB7IHJpc2tMZXZlbDogJ21vZGVyYXRlJywgYmVoYXZpb3I6ICdldmFsdWF0ZScsIHJlYXNvbjogYFVua25vd24gdG9vbCAnJHt0b29sTmFtZX0nLCByZXF1aXJlcyBwb2xpY3kgZXZhbHVhdGlvbmAgfTtcbn1cblxuLyoqXG4gKiBTdWItY2xhc3NpZnkgQmFzaCBjb21tYW5kcyBieSBtYXRjaGluZyBhZ2FpbnN0IGtub3duIHBhdHRlcm5zLlxuICovXG5mdW5jdGlvbiBjbGFzc2lmeUJhc2hDb21tYW5kKFxuICB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBUb29sQ2xhc3NpZmljYXRpb25SZXN1bHQge1xuICBjb25zdCBjb21tYW5kID0gdHlwZW9mIHRvb2xJbnB1dC5jb21tYW5kID09PSAnc3RyaW5nJyA/IHRvb2xJbnB1dC5jb21tYW5kLnRyaW0oKSA6ICcnO1xuXG4gIGlmICghY29tbWFuZCkge1xuICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ21vZGVyYXRlJywgYmVoYXZpb3I6ICdldmFsdWF0ZScsIHJlYXNvbjogJ0VtcHR5IEJhc2ggY29tbWFuZCcgfTtcbiAgfVxuXG4gIC8vIENoZWNrIGJsb2NrZWQgcGF0dGVybnMgZmlyc3QgKGhpZ2hlc3QgcHJpb3JpdHkpXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBCTE9DS0VEX0JBU0hfUEFUVEVSTlMpIHtcbiAgICBpZiAobWF0Y2hlc1BhdHRlcm4oY29tbWFuZCwgcGF0dGVybikpIHtcbiAgICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ2Jsb2NrZWQnLCBiZWhhdmlvcjogJ2RlbnknLCByZWFzb246IGBCbG9ja2VkIGNvbW1hbmQgcGF0dGVybjogJHtwYXR0ZXJufWAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBkYW5nZXJvdXMgcGF0dGVybnNcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIERBTkdFUk9VU19CQVNIX1BBVFRFUk5TKSB7XG4gICAgaWYgKG1hdGNoZXNQYXR0ZXJuKGNvbW1hbmQsIHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdkYW5nZXJvdXMnLCBiZWhhdmlvcjogJ2RlbnknLCByZWFzb246IGBEYW5nZXJvdXMgY29tbWFuZCBwYXR0ZXJuOiAke3BhdHRlcm59YCB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIHNhZmUgcGF0dGVybnNcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIFNBRkVfQkFTSF9QQVRURVJOUykge1xuICAgIGlmIChtYXRjaGVzUGF0dGVybihjb21tYW5kLCBwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIHsgcmlza0xldmVsOiAnc2FmZScsIGJlaGF2aW9yOiAnYWxsb3cnLCByZWFzb246IGBTYWZlIGNvbW1hbmQgcGF0dGVybjogJHtwYXR0ZXJufWAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBVbmNsYXNzaWZpZWQ6IGV2YWx1YXRlIGFnYWluc3QgZWxlbWVudCBwb2xpY2llc1xuICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246ICdCYXNoIGNvbW1hbmQgbm90IHN0YXRpY2FsbHkgY2xhc3NpZmllZCcgfTtcbn1cblxuLy8g4pSA4pSAIFJpc2sgQXNzZXNzbWVudCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBCYXNlIHJpc2sgc2NvcmVzIGJ5IGNsYXNzaWZpY2F0aW9uIGxldmVsICgwLTEwMCBzY2FsZSkuXG4gKlxuICogU2NvcmUgcmFuZ2VzOlxuICogLSAgMDogICAgIHNhZmUg4oCUIHJlYWQtb25seSB0b29scywgbm8gc2lkZSBlZmZlY3RzXG4gKiAtICAxLTM5OiAgbG93IOKAlCBtaW5vciBzaWRlIGVmZmVjdHMsIGVhc2lseSByZXZlcnNpYmxlXG4gKiAtIDQwLTU5OiAgbW9kZXJhdGUg4oCUIGZpbGUgd3JpdGVzLCBwYWNrYWdlIGluc3RhbGxzLCB1bmNsYXNzaWZpZWQgY29tbWFuZHNcbiAqIC0gNjAtNzk6ICBlbGV2YXRlZCDigJQgbW9kZXJhdGUgKyBhZ2dyYXZhdGluZyBmYWN0b3JzIChuZXR3b3JrLCBmaWxlIGNyZWF0aW9uKVxuICogLSA4MC05OTogIGRhbmdlcm91cyDigJQgZGVzdHJ1Y3RpdmUgY29tbWFuZHMsIHByaXZpbGVnZSBlc2NhbGF0aW9uXG4gKiAtIDEwMDogICAgYmxvY2tlZCDigJQgYWx3YXlzIGRlbmllZCAoZS5nLiwgcmV2ZXJzZSBzaGVsbHMsIGRpc2sgd2lwZSlcbiAqXG4gKiBBZGp1c3RtZW50cyBhcHBsaWVkIG9uIHRvcCBvZiBiYXNlOiBpcnJldmVyc2libGUgcGF0dGVybiAoKzEwKSxcbiAqIG5ldHdvcmsgb3BlcmF0aW9uICgrMTApLCBvdXQtb2Ytc2NvcGUgcmVhZCAoKzEwKSwgZmlsZSBjcmVhdGlvbiAoKzUpLlxuICogU2NvcmUgaXMgY2FwcGVkIGF0IDEwMC5cbiAqL1xuY29uc3QgUklTS19TQ09SRVM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gIHNhZmU6IDAsXG4gIG1vZGVyYXRlOiA0MCxcbiAgZGFuZ2Vyb3VzOiA4MCxcbiAgYmxvY2tlZDogMTAwLFxufTtcblxuLyoqIFJlYWQtb25seSB0b29scyB0aGF0IG1heSByZWZlcmVuY2UgZmlsZSBwYXRocyAqL1xuY29uc3QgU0FGRV9SRUFEX1RPT0xTID0gbmV3IFNldChbJ1JlYWQnLCAnR3JlcCcsICdHbG9iJ10pO1xuXG4vKiogU2Vuc2l0aXZlIHBhdGggcHJlZml4ZXMgdGhhdCBpbmRpY2F0ZSBvdXQtb2Ytc2NvcGUgcmVhZHMgKi9cbmNvbnN0IFNFTlNJVElWRV9QQVRIX1BSRUZJWEVTID0gW1xuICAnfi8uc3NoLycsICd+Ly5nbnVwZy8nLCAnfi8uYXdzLycsICd+Ly5jb25maWcvJyxcbiAgJ34vLmVudicsICd+Ly5uZXRyYycsICd+Ly5ucG1yYycsXG4gICcvZXRjL3NoYWRvdycsICcvZXRjL3Bhc3N3ZCcsICcvZXRjL3N1ZG9lcnMnLFxuICAnL3Byb2MvJywgJy9zeXMvJyxcbl07XG5cbi8qKlxuICogSGV1cmlzdGljOiBkb2VzIGEgcGF0aCBsb29rIGxpa2UgaXQgdGFyZ2V0cyBmaWxlcyBvdXRzaWRlIHRoZSBwcm9qZWN0IHNjb3BlP1xuICogQ2hlY2tzIGZvciBob21lLWRpcmVjdG9yeSBzZW5zaXRpdmUgcGF0aHMsIHN5c3RlbSBwYXRocywgYW5kIHBhcmVudCB0cmF2ZXJzYWxzLlxuICovXG5mdW5jdGlvbiBpc091dE9mU2NvcGVQYXRoKHRhcmdldFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBub3JtYWxpemVkID0gdGFyZ2V0UGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgLy8gRXhwbGljaXQgc2Vuc2l0aXZlIHBhdGhzXG4gIGZvciAoY29uc3QgcHJlZml4IG9mIFNFTlNJVElWRV9QQVRIX1BSRUZJWEVTKSB7XG4gICAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aChwcmVmaXgpIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoYC8ke3ByZWZpeH1gKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gSG9tZSBkaXJlY3RvcnkgcmVmZXJlbmNlcyAofi8uLi4pIHRoYXQgYXJlbid0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0XG4gIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoJ34vJykgfHwgbm9ybWFsaXplZC5zdGFydHNXaXRoKCcvVXNlcnMvJykgfHwgbm9ybWFsaXplZC5zdGFydHNXaXRoKCcvaG9tZS8nKSkge1xuICAgIC8vIEhldXJpc3RpYzogcmVhZGluZyBzZW5zaXRpdmUgZG90ZmlsZXMvZGlycyBvdXRzaWRlIGEgcHJvamVjdC5cbiAgICAvLyBUYXJnZXRzIGtub3duIGNyZWRlbnRpYWwvY29uZmlnIHN0b3JlcyDigJQgYXZvaWRzIGZhbHNlIHBvc2l0aXZlcyBmb3JcbiAgICAvLyBjb21tb24gcHJvamVjdCBkb3RmaWxlcyBsaWtlIC5naXRodWIvLCAudnNjb2RlLywgLmVzbGludHJjLCBldGMuXG4gICAgaWYgKC9cXC9cXC4oc3NofGdudXBnfGF3c3xhenVyZXxnY2xvdWR8a3ViZXxkb2NrZXJ8bnBtcmN8bmV0cmN8ZW52fGJhc2hfaGlzdG9yeXx6c2hfaGlzdG9yeXxjcmVkZW50aWFsc3xwYXNzd29yZHxzZWNyZXQpL2kudGVzdChub3JtYWxpemVkKSkgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBCYXNoIGNvbW1hbmQgcGF0dGVybnMgdGhhdCBhcmUgaXJyZXZlcnNpYmxlICovXG5jb25zdCBJUlJFVkVSU0lCTEVfUEFUVEVSTlMgPSBbXG4gICdybSAtcmYgKicsXG4gICdybSAtZnIgKicsXG4gICdnaXQgcHVzaCAtLWZvcmNlKicsXG4gICdnaXQgcHVzaCAtZiAqJyxcbiAgJ2dpdCByZXNldCAtLWhhcmQqJyxcbiAgJ2dpdCBjbGVhbiAtZionLFxuICAnbWtmcyonLFxuICAnZGQgaWY9KicsXG4gICdkcm9wIConLFxuICAndHJ1bmNhdGUgKicsXG5dO1xuXG4vKipcbiAqIEFzc2VzcyB0aGUgcmlzayBvZiBhIENMSSB0b29sIGNhbGwuXG4gKlxuICogUmV0dXJucyBhIG51bWVyaWMgc2NvcmUgKDAtMTAwKSBhbmQgaXJyZXZlcnNpYmlsaXR5IGluZGljYXRvciBiYXNlZCBvblxuICogdGhlIHN0YXRpYyBjbGFzc2lmaWNhdGlvbiBhbmQgdG9vbC1zcGVjaWZpYyBoZXVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB0b29sTmFtZSAtIFRoZSB0b29sIGJlaW5nIGNhbGxlZFxuICogQHBhcmFtIHRvb2xJbnB1dCAtIFRoZSB0b29sIGlucHV0IHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjbGFzc2lmaWNhdGlvbiAtIFRoZSByZXN1bHQgZnJvbSBjbGFzc2lmeVRvb2woKVxuICogQHJldHVybnMgUmlzayBhc3Nlc3NtZW50IHdpdGggc2NvcmUsIGlycmV2ZXJzaWJpbGl0eSwgYW5kIGNvbnRyaWJ1dGluZyBmYWN0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3Nlc3NSaXNrKFxuICB0b29sTmFtZTogc3RyaW5nLFxuICB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjbGFzc2lmaWNhdGlvbjogVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0XG4pOiBSaXNrQXNzZXNzbWVudCB7XG4gIGxldCBzY29yZSA9IFJJU0tfU0NPUkVTW2NsYXNzaWZpY2F0aW9uLnJpc2tMZXZlbF0gPz8gNDA7XG4gIGNvbnN0IGZhY3RvcnM6IHN0cmluZ1tdID0gW2BCYXNlOiAke2NsYXNzaWZpY2F0aW9uLnJpc2tMZXZlbH0gKCR7UklTS19TQ09SRVNbY2xhc3NpZmljYXRpb24ucmlza0xldmVsXSA/PyA0MH0pYF07XG4gIGxldCBpcnJldmVyc2libGUgPSBmYWxzZTtcblxuICAvLyBDaGVjayBmb3IgaXJyZXZlcnNpYmxlIHBhdHRlcm5zIGluIEJhc2ggY29tbWFuZHNcbiAgaWYgKHRvb2xOYW1lID09PSAnQmFzaCcgJiYgdHlwZW9mIHRvb2xJbnB1dC5jb21tYW5kID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGNvbW1hbmQgPSB0b29sSW5wdXQuY29tbWFuZC50cmltKCk7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIElSUkVWRVJTSUJMRV9QQVRURVJOUykge1xuICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKGNvbW1hbmQsIHBhdHRlcm4pKSB7XG4gICAgICAgIGlycmV2ZXJzaWJsZSA9IHRydWU7XG4gICAgICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDEwKTtcbiAgICAgICAgZmFjdG9ycy5wdXNoKGBJcnJldmVyc2libGUgcGF0dGVybjogJHtwYXR0ZXJufSAoKzEwKWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOZXR3b3JrIG9wZXJhdGlvbnMgaW5jcmVhc2Ugcmlza1xuICAgIGlmICgvXFxiKGN1cmx8d2dldHxmZXRjaHxuY3xuZXRjYXR8bmNhdHxzb2NhdClcXGIvLnRlc3QoY29tbWFuZCkpIHtcbiAgICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDEwKTtcbiAgICAgIGZhY3RvcnMucHVzaCgnTmV0d29yayBvcGVyYXRpb24gKCsxMCknKTtcbiAgICB9XG4gIH1cblxuICAvLyBXcml0ZS9FZGl0IG9wZXJhdGlvbnM6IGZpbGUgY3JlYXRpb24gaW5jcmVhc2VzIHJpc2sgc2xpZ2h0bHlcbiAgaWYgKHRvb2xOYW1lID09PSAnV3JpdGUnKSB7XG4gICAgc2NvcmUgPSBNYXRoLm1pbigxMDAsIHNjb3JlICsgNSk7XG4gICAgZmFjdG9ycy5wdXNoKCdGaWxlIGNyZWF0aW9uICgrNSknKTtcbiAgfVxuXG4gIC8vIFJlYWQtb25seSB0b29scyB0YXJnZXRpbmcgcGF0aHMgb3V0c2lkZSB0aGUgd29ya2luZyBkaXJlY3RvcnkuXG4gIC8vIE1vc3QgY2xpZW50cyBhbHJlYWR5IGVuZm9yY2UgZGlyZWN0b3J5IHNjb3BpbmcsIGJ1dCB0aGlzIHByb3ZpZGVzIGFuXG4gIC8vIGFkZGl0aW9uYWwgc2lnbmFsIGZvciBhcHByb3ZhbCBwb2xpY2llcyB0byBhY3Qgb24uXG4gIGlmIChTQUZFX1JFQURfVE9PTFMuaGFzKHRvb2xOYW1lKSkge1xuICAgIGNvbnN0IHRhcmdldFBhdGggPSAodG9vbElucHV0LmZpbGVfcGF0aCA/PyB0b29sSW5wdXQucGF0aCA/PyAnJykgYXMgc3RyaW5nO1xuICAgIGlmICh0YXJnZXRQYXRoICYmIGlzT3V0T2ZTY29wZVBhdGgodGFyZ2V0UGF0aCkpIHtcbiAgICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDEwKTtcbiAgICAgIGZhY3RvcnMucHVzaCgnT3V0LW9mLXNjb3BlIHJlYWQgcGF0aCAoKzEwKScpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IHNjb3JlLCBpcnJldmVyc2libGUsIGZhY3RvcnMgfTtcbn1cblxuLy8g4pSA4pSAIFN0YXRpYyBQb2xpY3kgRGF0YSBFeHBvcnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUmV0dXJuIGFsbCBzdGF0aWMgY2xhc3NpZmljYXRpb24gZGF0YSBmb3IgYnJpZGdlIHBvbGljeSBleHBvcnQuXG4gKlxuICogVXNlZCBieSBQb2xpY3lFeHBvcnRTZXJ2aWNlIHRvIHdyaXRlIHRoZSBicmlkZ2UtY29tcGF0aWJsZSBwb2xpY3kgZmlsZS5cbiAqIEFsbCBkYXRhIGlzIHJldHVybmVkIGFzIHBsYWluIGFycmF5cy9vYmplY3RzIChubyBTZXRzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpY1BvbGljeURhdGEoKSB7XG4gIHJldHVybiB7XG4gICAgc2FmZV90b29sczogWy4uLlNBRkVfVE9PTFNdLFxuICAgIHNhZmVfYmFzaF9wYXR0ZXJuczogWy4uLlNBRkVfQkFTSF9QQVRURVJOU10sXG4gICAgZGFuZ2Vyb3VzX2Jhc2hfcGF0dGVybnM6IFsuLi5EQU5HRVJPVVNfQkFTSF9QQVRURVJOU10sXG4gICAgYmxvY2tlZF9iYXNoX3BhdHRlcm5zOiBbLi4uQkxPQ0tFRF9CQVNIX1BBVFRFUk5TXSxcbiAgICBpcnJldmVyc2libGVfcGF0dGVybnM6IFsuLi5JUlJFVkVSU0lCTEVfUEFUVEVSTlNdLFxuICAgIHNlbnNpdGl2ZV9wYXRoX3ByZWZpeGVzOiBbLi4uU0VOU0lUSVZFX1BBVEhfUFJFRklYRVNdLFxuICAgIGdhdGVrZWVwZXJfZXNzZW50aWFsX29wZXJhdGlvbnM6IFsuLi5HQVRFS0VFUEVSX0VTU0VOVElBTF9PUEVSQVRJT05TXSxcbiAgICBzYWZlX21jcF9vcGVyYXRpb25zOiBbLi4uU0FGRV9NQ1BfT1BFUkFUSU9OU10sXG4gICAgcmlza19zY29yZXM6IHsgLi4uUklTS19TQ09SRVMgfSxcbiAgfTtcbn1cblxuLy8g4pSA4pSAIEVsZW1lbnQgUG9saWN5IEV2YWx1YXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRXZhbHVhdGUgYSBDTEkgdG9vbCBjYWxsIGFnYWluc3QgYWN0aXZlIGVsZW1lbnQgZ2F0ZWtlZXBlciBwb2xpY2llcy5cbiAqXG4gKiBGb3VyLXN0ZXAgZXZhbHVhdGlvbiBwZXIgZWxlbWVudCAoSXNzdWUgIzYyNSBQaGFzZSAyLCBJc3N1ZSAjMTY2MCk6XG4gKiAxLiBkZW55UGF0dGVybnMgKGhpZ2hlc3QgcHJpb3JpdHkpIOKAlCBmaXJzdCBtYXRjaCA9IGltbWVkaWF0ZSBkZW55XG4gKiAxLjUuIGNvbmZpcm1QYXR0ZXJucyDigJQgZmlyc3QgbWF0Y2ggPSBpbW1lZGlhdGUgY29uZmlybSAocmVxdWlyZXMgYXBwcm92YWwpXG4gKiAyLiBhbGxvd1BhdHRlcm5zIOKAlCBpZiBlbGVtZW50IGRlZmluZXMgdGhlbSwgcmVjb3JkIHdoZXRoZXIgdG9vbCBtYXRjaGVkXG4gKiAzLiBBZnRlciBhbGwgZWxlbWVudHM6IGlmIGFueSBoYWQgYWxsb3dQYXR0ZXJucyBidXQgdG9vbCB3YXNuJ3QgYWxsb3dlZCBieSBhbnkgPSBkZW55XG4gKlxuICogVW5pb24gc2VtYW50aWNzOiB0b29sIG11c3QgbWF0Y2ggYXQgbGVhc3QgT05FIGVsZW1lbnQncyBhbGxvd1BhdHRlcm5zIChub3QgYWxsKS5cbiAqIEVsZW1lbnRzIHdpdGhvdXQgYWxsb3dQYXR0ZXJucyBkb24ndCByZXN0cmljdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVG9vbCBtYXRjaGVzIGFsbG93UGF0dGVybnMgaW4gZWxlbWVudCBBIGJ1dCBub3QgQiDihpIgQUxMT1dFRCAodW5pb24gc2VtYW50aWNzKVxuICogLy8gVG9vbCBtYXRjaGVzIGRlbnlQYXR0ZXJucyBpbiBhbnkgZWxlbWVudCDihpIgREVOSUVEIChkZW55IGFsd2F5cyB3aW5zKVxuICogLy8gVG9vbCBtYXRjaGVzIG5vIGFsbG93UGF0dGVybnMgYnV0IHNvbWUgZXhpc3Qg4oaSIERFTklFRCAoXCJub3QgaW4gYW55IGFsbG93bGlzdFwiKVxuICogLy8gTm8gYWxsb3dQYXR0ZXJucyBkZWZpbmVkIGFueXdoZXJlIOKGkiBQaGFzZSAxIGJlaGF2aW9yIChmYWxsIHRocm91Z2ggdG8gZGVmYXVsdClcbiAqXG4gKiBAcmV0dXJucyAnZGVueScgaWYgYmxvY2tlZCwgJ2V2YWx1YXRlJyBpZiBwZXJtaXR0ZWQgdG8gZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQ2xpVG9vbFBvbGljeShcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgYWN0aXZlRWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXVxuKTogQ2xpVG9vbFBvbGljeVJlc3VsdCB7XG4gIGNvbnN0IGV2YWx1YXRlZEVsZW1lbnRzOiBQb2xpY3lFdmFsdWF0aW9uQ29udGV4dFsnZXZhbHVhdGVkRWxlbWVudHMnXSA9IFtdO1xuICBjb25zdCBkZWNpc2lvbkNoYWluOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gIGlmICghYWN0aXZlRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKCdObyBhY3RpdmUgZWxlbWVudHMg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0Jyk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSAke3Rvb2xOYW1lfTogbm8gYWN0aXZlIGVsZW1lbnRzLCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdGApO1xuICAgIHJldHVybiB7XG4gICAgICBiZWhhdmlvcjogJ2V2YWx1YXRlJyxcbiAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQnVpbGQgdGhlIHN0cmluZ3MgdG8gbWF0Y2ggYWdhaW5zdCBwYXR0ZXJuc1xuICBjb25zdCBtYXRjaFRhcmdldHMgPSBidWlsZE1hdGNoVGFyZ2V0cyh0b29sTmFtZSwgdG9vbElucHV0KTtcbiAgY29uc3QgZWxlbWVudFR5cGVTdW1tYXJ5ID0gc3VtbWFyaXplRWxlbWVudFR5cGVzKGFjdGl2ZUVsZW1lbnRzKTtcbiAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBFdmFsdWF0aW5nICR7dG9vbE5hbWV9IGFnYWluc3QgJHthY3RpdmVFbGVtZW50cy5sZW5ndGh9IGVsZW1lbnRzICgke2VsZW1lbnRUeXBlU3VtbWFyeX0pLCBtYXRjaFRhcmdldHM6IFske21hdGNoVGFyZ2V0cy5qb2luKCcsICcpfV1gKTtcblxuICBsZXQgYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMgPSBmYWxzZTtcbiAgbGV0IHRvb2xBbGxvd2VkQnlBbnlFbGVtZW50ID0gZmFsc2U7XG4gIGNvbnN0IGVsZW1lbnRzV2l0aEFsbG93UGF0dGVybnM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFjdGl2ZUVsZW1lbnRzKSB7XG4gICAgY29uc3QgcmVzdHJpY3Rpb25zID0gZWxlbWVudC5tZXRhZGF0YT8uZ2F0ZWtlZXBlcj8uZXh0ZXJuYWxSZXN0cmljdGlvbnM7XG4gICAgY29uc3QgZGVueVBhdHRlcm5zID0gcmVzdHJpY3Rpb25zPy5kZW55UGF0dGVybnM7XG4gICAgY29uc3QgY29uZmlybVBhdHRlcm5zID0gcmVzdHJpY3Rpb25zPy5jb25maXJtUGF0dGVybnM7XG4gICAgY29uc3QgYWxsb3dQYXR0ZXJucyA9IHJlc3RyaWN0aW9ucz8uYWxsb3dQYXR0ZXJucztcblxuICAgIGNvbnN0IGhhc1Jlc3RyaWN0aW9ucyA9IChBcnJheS5pc0FycmF5KGRlbnlQYXR0ZXJucykgJiYgZGVueVBhdHRlcm5zLmxlbmd0aCA+IDApXG4gICAgICB8fCAoQXJyYXkuaXNBcnJheShjb25maXJtUGF0dGVybnMpICYmIGNvbmZpcm1QYXR0ZXJucy5sZW5ndGggPiAwKVxuICAgICAgfHwgKEFycmF5LmlzQXJyYXkoYWxsb3dQYXR0ZXJucykgJiYgYWxsb3dQYXR0ZXJucy5sZW5ndGggPiAwKTtcblxuICAgIGlmICghaGFzUmVzdHJpY3Rpb25zKSB7XG4gICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHsgdHlwZTogZWxlbWVudC50eXBlLCBuYW1lOiBlbGVtZW50Lm5hbWUgfSk7XG4gICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9Jzogbm8gZXh0ZXJuYWxSZXN0cmljdGlvbnNgKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBubyBleHRlcm5hbFJlc3RyaWN0aW9ucywgc2tpcHBpbmdgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBldmFsdWF0aW5nIChkZW55OiAke0FycmF5LmlzQXJyYXkoZGVueVBhdHRlcm5zKSA/IGRlbnlQYXR0ZXJucy5sZW5ndGggOiAwfSwgY29uZmlybTogJHtBcnJheS5pc0FycmF5KGNvbmZpcm1QYXR0ZXJucykgPyBjb25maXJtUGF0dGVybnMubGVuZ3RoIDogMH0sIGFsbG93OiAke0FycmF5LmlzQXJyYXkoYWxsb3dQYXR0ZXJucykgPyBhbGxvd1BhdHRlcm5zLmxlbmd0aCA6IDB9IHBhdHRlcm5zKWApO1xuXG4gICAgLy8gU3RlcCAxOiBDaGVjayBkZW55UGF0dGVybnMgKGhpZ2hlc3QgcHJpb3JpdHkpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVueVBhdHRlcm5zKSkge1xuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGRlbnlQYXR0ZXJucykge1xuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgbWF0Y2hUYXJnZXRzKSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKHRhcmdldCwgcGF0dGVybikpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgbWF0Y2hlZDogJ2RlbnlQYXR0ZXJucycsXG4gICAgICAgICAgICAgIG1hdGNoZWRQYXR0ZXJuOiBwYXR0ZXJuLFxuICAgICAgICAgICAgICBtYXRjaGVkVGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgREVOWTogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIGRlbnlQYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIERFTlk6ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBkZW55UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlZCAnJHt0YXJnZXR9JyAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmVoYXZpb3I6ICdkZW55JyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERlbmllZCBieSAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgcG9saWN5OiBwYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCxcbiAgICAgICAgICAgICAgcG9saWN5Q29udGV4dDogeyBldmFsdWF0ZWRFbGVtZW50cywgZGVjaXNpb25DaGFpbiB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdGVwIDEuNTogQ2hlY2sgY29uZmlybVBhdHRlcm5zIChyZXF1aXJlcyBhcHByb3ZhbCDigJQgSXNzdWUgIzE2NjApXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlybVBhdHRlcm5zKSAmJiBjb25maXJtUGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGNvbmZpcm1QYXR0ZXJucykge1xuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgbWF0Y2hUYXJnZXRzKSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKHRhcmdldCwgcGF0dGVybikpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgbWF0Y2hlZDogJ2NvbmZpcm1QYXR0ZXJucycsXG4gICAgICAgICAgICAgIG1hdGNoZWRQYXR0ZXJuOiBwYXR0ZXJuLFxuICAgICAgICAgICAgICBtYXRjaGVkVGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgQ09ORklSTTogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIGNvbmZpcm1QYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIENPTkZJUk06ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBjb25maXJtUGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlZCAnJHt0YXJnZXR9JyAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmVoYXZpb3I6ICdjb25maXJtJyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYFJlcXVpcmVzIGFwcHJvdmFsOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgcG9saWN5IHJlcXVpcmVzIGNvbmZpcm1hdGlvbiBmb3IgcGF0dGVybiAnJHtwYXR0ZXJufSdgLFxuICAgICAgICAgICAgICBjb25maXJtU291cmNlOiBgJHtlbGVtZW50LnR5cGV9OiR7ZWxlbWVudC5uYW1lfWAsXG4gICAgICAgICAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBDaGVjayBhbGxvd1BhdHRlcm5zXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxsb3dQYXR0ZXJucykgJiYgYWxsb3dQYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgICBhbnlFbGVtZW50SGFzQWxsb3dQYXR0ZXJucyA9IHRydWU7XG4gICAgICBlbGVtZW50c1dpdGhBbGxvd1BhdHRlcm5zLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9J2ApO1xuICAgICAgbGV0IG1hdGNoZWRBbGxvdyA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgYWxsb3dQYXR0ZXJucykge1xuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgbWF0Y2hUYXJnZXRzKSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKHRhcmdldCwgcGF0dGVybikpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgbWF0Y2hlZDogJ2FsbG93UGF0dGVybnMnLFxuICAgICAgICAgICAgICBtYXRjaGVkUGF0dGVybjogcGF0dGVybixcbiAgICAgICAgICAgICAgbWF0Y2hlZFRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogYWxsb3dQYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIEFMTE9XOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgYWxsb3dQYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVkICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICB0b29sQWxsb3dlZEJ5QW55RWxlbWVudCA9IHRydWU7XG4gICAgICAgICAgICBtYXRjaGVkQWxsb3cgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaGVkQWxsb3cpIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW1hdGNoZWRBbGxvdykge1xuICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHsgdHlwZTogZWxlbWVudC50eXBlLCBuYW1lOiBlbGVtZW50Lm5hbWUgfSk7XG4gICAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBhbGxvd1BhdHRlcm5zIGRlZmluZWQgYnV0IG5vIG1hdGNoYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goeyB0eXBlOiBlbGVtZW50LnR5cGUsIG5hbWU6IGVsZW1lbnQubmFtZSB9KTtcbiAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBkZW55UGF0dGVybnMgY2hlY2tlZCwgbm8gbWF0Y2hgKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdGVwIDM6IElmIGFueSBlbGVtZW50IGhhZCBhbGxvd1BhdHRlcm5zLCB0b29sIG11c3QgaGF2ZSBtYXRjaGVkIGF0IGxlYXN0IG9uZVxuICBpZiAoYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMgJiYgIXRvb2xBbGxvd2VkQnlBbnlFbGVtZW50KSB7XG4gICAgY29uc3QgcmVzdHJpY3RvcnMgPSBlbGVtZW50c1dpdGhBbGxvd1BhdHRlcm5zLmpvaW4oJywgJyk7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKGBERU5ZOiB0b29sIG5vdCBpbiBhbnkgZWxlbWVudCBhbGxvd2xpc3QgKHJlc3RyaWN0ZWQgYnk6ICR7cmVzdHJpY3RvcnN9KWApO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gREVOWTogJHt0b29sTmFtZX0gbm90IGluIGFueSBhbGxvd2xpc3QgKHJlc3RyaWN0ZWQgYnk6ICR7cmVzdHJpY3RvcnN9KSAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICAgIHJldHVybiB7XG4gICAgICBiZWhhdmlvcjogJ2RlbnknLFxuICAgICAgbWVzc2FnZTogYFRvb2wgJyR7dG9vbE5hbWV9JyBub3QgcGVybWl0dGVkIGJ5IGFsbG93bGlzdHMgZGVmaW5lZCBpbjogJHtyZXN0cmljdG9yc30uIEVpdGhlciBkZWFjdGl2YXRlIHRoZXNlIGVsZW1lbnRzIG9yIGFkZCBhbGxvd1BhdHRlcm5zIHRvIG1hdGNoIHRoaXMgdG9vbC5gLFxuICAgICAgcG9saWN5Q29udGV4dDogeyBldmFsdWF0ZWRFbGVtZW50cywgZGVjaXNpb25DaGFpbiB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMpIHtcbiAgICBkZWNpc2lvbkNoYWluLnB1c2goJ1Rvb2wgbWF0Y2hlZCBhbGxvd2xpc3Qg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0Jyk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSAke3Rvb2xOYW1lfTogbWF0Y2hlZCBhbGxvd2xpc3QsIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0ICgke2VsYXBzZWQoc3RhcnRUaW1lKX0pYCk7XG4gIH0gZWxzZSB7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKCdObyBhbGxvd1BhdHRlcm5zIGRlZmluZWQg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IChQaGFzZSAxIGJlaGF2aW9yKScpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHt0b29sTmFtZX06IG5vIGFsbG93UGF0dGVybnMgZGVmaW5lZCwgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmVoYXZpb3I6ICdldmFsdWF0ZScsXG4gICAgcG9saWN5Q29udGV4dDogeyBldmFsdWF0ZWRFbGVtZW50cywgZGVjaXNpb25DaGFpbiB9LFxuICB9O1xufVxuXG4vKiogRm9ybWF0IGVsYXBzZWQgdGltZSBzaW5jZSBzdGFydFRpbWUgaW4gbWlsbGlzZWNvbmRzLiAqL1xuZnVuY3Rpb24gZWxhcHNlZChzdGFydFRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHsocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWUpLnRvRml4ZWQoMil9bXNgO1xufVxuXG4vKiogU3VtbWFyaXplIGFjdGl2ZSBlbGVtZW50IHR5cGVzIGZvciB0aGUgZW50cnkgbG9nIChlLmcuLCBcIjMgcGVyc29uYXMsIDIgc2tpbGxzLCAxIGVuc2VtYmxlXCIpLiAqL1xuZnVuY3Rpb24gc3VtbWFyaXplRWxlbWVudFR5cGVzKGVsZW1lbnRzOiBBY3RpdmVFbGVtZW50W10pOiBzdHJpbmcge1xuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IGVsIG9mIGVsZW1lbnRzKSB7XG4gICAgY291bnRzLnNldChlbC50eXBlLCAoY291bnRzLmdldChlbC50eXBlKSA/PyAwKSArIDEpO1xuICB9XG4gIHJldHVybiBbLi4uY291bnRzLmVudHJpZXMoKV0ubWFwKChbdHlwZSwgY291bnRdKSA9PiBgJHtjb3VudH0gJHt0eXBlfSR7Y291bnQgPiAxID8gJ3MnIDogJyd9YCkuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBNYXhpbXVtIGlucHV0IGxlbmd0aCBmb3IgcGF0dGVybiBtYXRjaGluZyB0YXJnZXRzLlxuICogVHJ1bmNhdGVzIGxvbmcgY29tbWFuZHMvcGF0aHMgdG8gcHJldmVudCBEb1MgdmlhIHBhdGhvbG9naWNhbCBnbG9iIG1hdGNoaW5nLlxuICovXG5jb25zdCBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIID0gMTAwMDtcblxuLyoqXG4gKiBTdHJpcCBudWxsIGJ5dGVzLCBjb250cm9sIGNoYXJhY3RlcnMsIGFuZCBub3JtYWxpemUgVW5pY29kZSBmb3IgbWF0Y2ggaW5wdXQuXG4gKiBQcmVzZXJ2ZXMgdGFiIChcXHgwOSksIG5ld2xpbmUgKFxceDBBKSwgY2FycmlhZ2UgcmV0dXJuIChcXHgwRCkuXG4gKiBQcmV2ZW50cyBwYXR0ZXJuIGJ5cGFzcyB2aWEgaW5qZWN0ZWQgY29udHJvbCBjaGFyYWN0ZXJzIG9yIFVuaWNvZGVcbiAqIG5vcm1hbGl6YXRpb24gYXR0YWNrcyAoZS5nLiwgY29tYmluaW5nIGNoYXJhY3RlcnMgdGhhdCBsb29rIGxpa2UgQVNDSUkpLlxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZU1hdGNoSW5wdXQoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIE5vcm1hbGl6ZSBVbmljb2RlIHRvIE5GQyAoY2Fub25pY2FsIGRlY29tcG9zaXRpb24gdGhlbiBjb21wb3NpdGlvbikuXG4gIC8vIFRoaXMgcHJldmVudHMgYnlwYXNzIHZpYSBjb21iaW5pbmcgY2hhcmFjdGVycyBvciBhbHRlcm5hdGl2ZSByZXByZXNlbnRhdGlvbnMuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBpbnB1dC5ub3JtYWxpemUoJ05GQycpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICByZXR1cm4gbm9ybWFsaXplZC5yZXBsYWNlKC9bXFx4MDAtXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgJycpO1xufVxuXG4vKipcbiAqIEJ1aWxkIG1hdGNoIHRhcmdldCBzdHJpbmdzIGZvciBhIHRvb2wgY2FsbC5cbiAqXG4gKiBGb3IgQmFzaDogbWF0Y2hlcyBhZ2FpbnN0IHRoZSB0b29sIG5hbWUgYW5kIFwiQmFzaDo8Y29tbWFuZD5cIlxuICogRm9yIEVkaXQvV3JpdGU6IG1hdGNoZXMgYWdhaW5zdCB0aGUgdG9vbCBuYW1lIGFuZCBcIkVkaXQ6PGZpbGVfcGF0aD5cIlxuICogRm9yIE1DUCB0b29sczogbWF0Y2hlcyBhZ2FpbnN0IHRoZSBmdWxsIHRvb2wgbmFtZVxuICpcbiAqIElucHV0cyBhcmUgdHJ1bmNhdGVkIHRvIE1BWF9NQVRDSF9JTlBVVF9MRU5HVEggYW5kIHNhbml0aXplZCB0byBwcmV2ZW50XG4gKiBEb1MgdmlhIHBhdGhvbG9naWNhbCBnbG9iIG1hdGNoaW5nIGFuZCBwYXR0ZXJuIGJ5cGFzcyB2aWEgY29udHJvbCBjaGFycy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRNYXRjaFRhcmdldHMoXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgdGFyZ2V0cyA9IFt0b29sTmFtZV07XG5cbiAgaWYgKHRvb2xOYW1lID09PSAnQmFzaCcgJiYgdHlwZW9mIHRvb2xJbnB1dC5jb21tYW5kID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHNhbml0aXplZCA9IHNhbml0aXplTWF0Y2hJbnB1dCh0b29sSW5wdXQuY29tbWFuZC5zbGljZSgwLCBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIKSk7XG4gICAgdGFyZ2V0cy5wdXNoKGBCYXNoOiR7c2FuaXRpemVkfWApO1xuICB9IGVsc2UgaWYgKCh0b29sTmFtZSA9PT0gJ0VkaXQnIHx8IHRvb2xOYW1lID09PSAnV3JpdGUnKSAmJiB0eXBlb2YgdG9vbElucHV0LmZpbGVfcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBzYW5pdGl6ZU1hdGNoSW5wdXQodG9vbElucHV0LmZpbGVfcGF0aC5zbGljZSgwLCBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIKSk7XG4gICAgdGFyZ2V0cy5wdXNoKGAke3Rvb2xOYW1lfToke3Nhbml0aXplZH1gKTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXRzO1xufVxuIl19
|
|
661
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbENsYXNzaWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBaUNsRCx3RUFBd0U7QUFFeEU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sK0JBQStCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDOUMsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLHdCQUF3QixFQUFRLHFCQUFxQjtJQUNyRCwyQkFBMkIsRUFBSyxxQkFBcUI7Q0FDdEQsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbEMsZUFBZTtJQUNmLGFBQWE7SUFDYixxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQiw0QkFBNEI7SUFDNUIsd0JBQXdCO0lBQ3hCLDZCQUE2QjtJQUM3QixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHlCQUF5QjtJQUN6QixZQUFZO0lBQ1osZUFBZTtJQUNmLHVCQUF1QjtJQUN2QiwyQkFBMkI7SUFDM0IsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4Qiw0QkFBNEI7SUFDNUIsMkJBQTJCO0NBQzVCLENBQUMsQ0FBQztBQUVILHNFQUFzRTtBQUV0RTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3pCLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtJQUNOLFVBQVU7SUFDVixXQUFXO0lBQ1gsWUFBWTtJQUNaLFlBQVk7SUFDWixTQUFTO0lBQ1QsVUFBVTtJQUNWLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGNBQWM7SUFDZCxVQUFVO0lBQ1YsV0FBVztDQUNaLENBQUMsQ0FBQztBQUVILG1EQUFtRDtBQUNuRCxNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLGFBQWE7SUFDYixVQUFVO0lBQ1YsV0FBVztJQUNYLGFBQWE7SUFDYixXQUFXO0lBQ1gsYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixLQUFLO0lBQ0wsS0FBSztJQUNMLE9BQU87SUFDUCxRQUFRO0lBQ1IsUUFBUTtJQUNSLE1BQU07SUFDTixRQUFRO0lBQ1IsV0FBVztJQUNYLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsaUJBQWlCO0lBQ2pCLFNBQVM7SUFDVCxXQUFXO0lBQ1gsZUFBZTtJQUNmLFdBQVc7SUFDWCxtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLFNBQVM7SUFDVCxRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixhQUFhO0lBQ2IsYUFBYTtJQUNiLGVBQWU7Q0FDaEIsQ0FBQztBQUVGLCtDQUErQztBQUMvQyxNQUFNLHVCQUF1QixHQUFHO0lBQzlCLFVBQVU7SUFDVixVQUFVO0lBQ1YsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsWUFBWTtJQUNaLGVBQWU7SUFDZixZQUFZO0lBQ1osY0FBYztJQUNkLFFBQVE7SUFDUixRQUFRO0lBQ1IsT0FBTztJQUNQLFFBQVE7SUFDUixvRUFBb0U7SUFDcEUsT0FBTztJQUNQLFNBQVM7SUFDVCxNQUFNO0lBQ04sUUFBUTtJQUNSLFNBQVM7SUFDVCxXQUFXO0lBQ1gsUUFBUTtJQUNSLFVBQVU7SUFDVixRQUFRO0lBQ1IsT0FBTztJQUNQLFlBQVk7SUFDWixZQUFZO0lBQ1osd0VBQXdFO0lBQ3hFLGVBQWU7SUFDZixhQUFhO0lBQ2IsU0FBUztJQUNULE9BQU87SUFDUCxZQUFZO0lBQ1osZUFBZTtJQUNmLGVBQWU7SUFDZixlQUFlO0lBQ2YscUZBQXFGO0lBQ3JGLGVBQWU7SUFDZixxQkFBcUI7SUFDckIsMEJBQTBCO0lBQzFCLFVBQVU7SUFDVixTQUFTO0lBQ1QsNkRBQTZEO0lBQzdELFFBQVE7SUFDUixTQUFTO0lBQ1QsU0FBUztJQUNULFdBQVc7SUFDWCwrQ0FBK0M7SUFDL0MsTUFBTTtJQUNOLE9BQU87SUFDUCxVQUFVO0lBQ1YsUUFBUTtJQUNSLFNBQVM7SUFDVCw2RUFBNkU7SUFDN0UsV0FBVztJQUNYLFVBQVU7SUFDVixZQUFZO0lBQ1osOENBQThDO0lBQzlDLGFBQWE7SUFDYixjQUFjO0lBQ2QsY0FBYztJQUNkLFdBQVc7SUFDWCxZQUFZO0lBQ1osWUFBWTtJQUNaLFdBQVc7SUFDWCxZQUFZO0lBQ1osc0VBQXNFO0lBQ3RFLFdBQVc7SUFDWCxTQUFTO0lBQ1QsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QsNkRBQTZEO0lBQzdELE1BQU07SUFDTiwyREFBMkQ7SUFDM0QsZUFBZTtJQUNmLHFCQUFxQjtJQUNyQixlQUFlO0NBQ2hCLENBQUM7QUFFRixvREFBb0Q7QUFDcEQsTUFBTSxxQkFBcUIsR0FBRztJQUM1QixPQUFPO0lBQ1AsU0FBUztJQUNULGFBQWE7SUFDYixVQUFVO0lBQ1YsUUFBUTtDQUNULENBQUM7QUFFRixzRUFBc0U7QUFFdEU7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixRQUFnQixFQUNoQixTQUFrQztJQUVsQywrQkFBK0I7SUFDL0IsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLHNCQUFzQixFQUFFLENBQUM7SUFDN0YsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUN4QixPQUFPLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxpR0FBaUc7SUFDakcsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDakMsTUFBTSxTQUFTLEdBQUcsT0FBTyxTQUFTLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JGLElBQUksU0FBUyxJQUFJLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLE1BQU07Z0JBQ2pCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixNQUFNLEVBQUUsbUNBQW1DLFNBQVMsNENBQTRDO2FBQ2pHLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDcEQsT0FBTztnQkFDTCxTQUFTLEVBQUUsTUFBTTtnQkFDakIsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLE1BQU0sRUFBRSw0QkFBNEIsU0FBUyxHQUFHO2FBQ2pELENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsMENBQTBDLEVBQUUsQ0FBQztJQUM3RyxDQUFDO0lBRUQsd0RBQXdEO0lBQ3hELElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsNkNBQTZDLEVBQUUsQ0FBQztJQUMzSCxDQUFDO0lBRUQsMERBQTBEO0lBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixRQUFRLCtCQUErQixFQUFFLENBQUM7QUFDM0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDMUIsU0FBa0M7SUFFbEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxTQUFTLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRXRGLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQUM7SUFDdkYsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxLQUFLLE1BQU0sT0FBTyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDNUMsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsNEJBQTRCLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDbkcsQ0FBQztJQUNILENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsS0FBSyxNQUFNLE9BQU8sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQzlDLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLDhCQUE4QixPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3ZHLENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLEtBQUssTUFBTSxPQUFPLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSx5QkFBeUIsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUM5RixDQUFDO0lBQ0gsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSx3Q0FBd0MsRUFBRSxDQUFDO0FBQzNHLENBQUM7QUFFRCxxRUFBcUU7QUFFckU7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFdBQVcsR0FBMkI7SUFDMUMsSUFBSSxFQUFFLENBQUM7SUFDUCxRQUFRLEVBQUUsRUFBRTtJQUNaLFNBQVMsRUFBRSxFQUFFO0lBQ2IsT0FBTyxFQUFFLEdBQUc7Q0FDYixDQUFDO0FBRUYsb0RBQW9EO0FBQ3BELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRTFELCtEQUErRDtBQUMvRCxNQUFNLHVCQUF1QixHQUFHO0lBQzlCLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVk7SUFDL0MsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVO0lBQ2hDLGFBQWEsRUFBRSxhQUFhLEVBQUUsY0FBYztJQUM1QyxRQUFRLEVBQUUsT0FBTztDQUNsQixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxVQUFrQjtJQUMxQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVsRCwyQkFBMkI7SUFDM0IsS0FBSyxNQUFNLE1BQU0sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQzdDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3ZHLGdFQUFnRTtRQUNoRSxzRUFBc0U7UUFDdEUsbUVBQW1FO1FBQ25FLElBQUksb0hBQW9ILENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pKLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxrREFBa0Q7QUFDbEQsTUFBTSxxQkFBcUIsR0FBRztJQUM1QixVQUFVO0lBQ1YsVUFBVTtJQUNWLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixPQUFPO0lBQ1AsU0FBUztJQUNULFFBQVE7SUFDUixZQUFZO0NBQ2IsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixRQUFnQixFQUNoQixTQUFrQyxFQUNsQyxjQUF3QztJQUV4QyxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4RCxNQUFNLE9BQU8sR0FBYSxDQUFDLFNBQVMsY0FBYyxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakgsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRXpCLG1EQUFtRDtJQUNuRCxJQUFJLFFBQVEsS0FBSyxNQUFNLElBQUksT0FBTyxTQUFTLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsS0FBSyxNQUFNLE9BQU8sSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzVDLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixPQUFPLFFBQVEsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFFRCxtQ0FBbUM7UUFDbkMsSUFBSSw0Q0FBNEMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN6QixLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLHVFQUF1RTtJQUN2RSxxREFBcUQ7SUFDckQsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFXLENBQUM7UUFDM0UsSUFBSSxVQUFVLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzFDLENBQUM7QUFFRCxxRUFBcUU7QUFFckU7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU87UUFDTCxVQUFVLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUMzQixrQkFBa0IsRUFBRSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7UUFDM0MsdUJBQXVCLEVBQUUsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO1FBQ3JELHFCQUFxQixFQUFFLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztRQUNqRCxxQkFBcUIsRUFBRSxDQUFDLEdBQUcscUJBQXFCLENBQUM7UUFDakQsdUJBQXVCLEVBQUUsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO1FBQ3JELCtCQUErQixFQUFFLENBQUMsR0FBRywrQkFBK0IsQ0FBQztRQUNyRSxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsbUJBQW1CLENBQUM7UUFDN0MsV0FBVyxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUU7S0FDaEMsQ0FBQztBQUNKLENBQUM7QUFFRCxzRUFBc0U7QUFFdEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFFBQWdCLEVBQ2hCLFNBQWtDLEVBQ2xDLGNBQStCO0lBRS9CLE1BQU0saUJBQWlCLEdBQWlELEVBQUUsQ0FBQztJQUMzRSxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7SUFFbkMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRXBDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsYUFBYSxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxRQUFRLCtDQUErQyxDQUFDLENBQUM7UUFDckYsT0FBTztZQUNMLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLGFBQWEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRTtTQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUVELDhDQUE4QztJQUM5QyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUQsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqRSxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixRQUFRLFlBQVksY0FBYyxDQUFDLE1BQU0sY0FBYyxrQkFBa0IscUJBQXFCLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWpLLElBQUksMEJBQTBCLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLElBQUksdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0lBQ3BDLE1BQU0seUJBQXlCLEdBQWEsRUFBRSxDQUFDO0lBRS9DLEtBQUssTUFBTSxPQUFPLElBQUksY0FBYyxFQUFFLENBQUM7UUFDckMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsb0JBQW9CLENBQUM7UUFDeEUsTUFBTSxZQUFZLEdBQUcsWUFBWSxFQUFFLFlBQVksQ0FBQztRQUNoRCxNQUFNLGVBQWUsR0FBRyxZQUFZLEVBQUUsZUFBZSxDQUFDO1FBQ3RELE1BQU0sYUFBYSxHQUFHLFlBQVksRUFBRSxhQUFhLENBQUM7UUFFbEQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2VBQzNFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztlQUM5RCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVoRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLDRCQUE0QixDQUFDLENBQUM7WUFDakYsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksc0NBQXNDLENBQUMsQ0FBQztZQUNqRyxTQUFTO1FBQ1gsQ0FBQztRQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLHdCQUF3QixLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaFMsZ0RBQWdEO1FBQ2hELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2hDLEtBQUssTUFBTSxPQUFPLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ25DLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtvQkFBRSxTQUFTO2dCQUMxQyxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUNsQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3QkFDcEMsaUJBQWlCLENBQUMsSUFBSSxDQUFDOzRCQUNyQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7NEJBQ2xCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTs0QkFDbEIsT0FBTyxFQUFFLGNBQWM7NEJBQ3ZCLGNBQWMsRUFBRSxPQUFPOzRCQUN2QixhQUFhLEVBQUUsTUFBTTt5QkFDdEIsQ0FBQyxDQUFDO3dCQUNILGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixPQUFPLGNBQWMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDM0csTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsT0FBTyxjQUFjLE1BQU0sTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN6SSxPQUFPOzRCQUNMLFFBQVEsRUFBRSxNQUFNOzRCQUNoQixPQUFPLEVBQUUsYUFBYSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLHNCQUFzQixPQUFPLGNBQWMsTUFBTSxHQUFHOzRCQUN2RyxhQUFhLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUU7eUJBQ3BELENBQUM7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxvRUFBb0U7UUFDcEUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakUsS0FBSyxNQUFNLE9BQU8sSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO29CQUFFLFNBQVM7Z0JBQzFDLEtBQUssTUFBTSxNQUFNLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2xDLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUNwQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7NEJBQ3JCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTs0QkFDbEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJOzRCQUNsQixPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixjQUFjLEVBQUUsT0FBTzs0QkFDdkIsYUFBYSxFQUFFLE1BQU07eUJBQ3RCLENBQUMsQ0FBQzt3QkFDSCxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxxQkFBcUIsT0FBTyxjQUFjLE1BQU0sR0FBRyxDQUFDLENBQUM7d0JBQ2pILE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUkscUJBQXFCLE9BQU8sY0FBYyxNQUFNLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDL0ksT0FBTzs0QkFDTCxRQUFRLEVBQUUsU0FBa0I7NEJBQzVCLE9BQU8sRUFBRSxzQkFBc0IsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSwrQ0FBK0MsT0FBTyxHQUFHOzRCQUNySCxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7NEJBQ2hELGFBQWEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRTt5QkFDcEQsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELDhCQUE4QjtRQUM5QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3RCwwQkFBMEIsR0FBRyxJQUFJLENBQUM7WUFDbEMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNwRSxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7WUFFekIsS0FBSyxNQUFNLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO29CQUFFLFNBQVM7Z0JBQzFDLEtBQUssTUFBTSxNQUFNLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2xDLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUNwQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7NEJBQ3JCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTs0QkFDbEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJOzRCQUNsQixPQUFPLEVBQUUsZUFBZTs0QkFDeEIsY0FBYyxFQUFFLE9BQU87NEJBQ3ZCLGFBQWEsRUFBRSxNQUFNO3lCQUN0QixDQUFDLENBQUM7d0JBQ0gsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksb0JBQW9CLE9BQU8sY0FBYyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3dCQUN2RyxNQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLG1CQUFtQixPQUFPLGNBQWMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDbkgsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO3dCQUMvQixZQUFZLEdBQUcsSUFBSSxDQUFDO3dCQUNwQixNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLFlBQVk7b0JBQUUsTUFBTTtZQUMxQixDQUFDO1lBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNsQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ25FLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLHVDQUF1QyxDQUFDLENBQUM7WUFDOUYsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04saUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLG1DQUFtQyxDQUFDLENBQUM7UUFDMUYsQ0FBQztJQUNILENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsSUFBSSwwQkFBMEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDM0QsTUFBTSxXQUFXLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pELGFBQWEsQ0FBQyxJQUFJLENBQUMsMkRBQTJELFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDOUYsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsUUFBUSx5Q0FBeUMsV0FBVyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0gsT0FBTztZQUNMLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE9BQU8sRUFBRSxTQUFTLFFBQVEsNkNBQTZDLFdBQVcsNkVBQTZFO1lBQy9KLGFBQWEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRTtTQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksMEJBQTBCLEVBQUUsQ0FBQztRQUMvQixhQUFhLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDdkUsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLFFBQVEsaURBQWlELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUcsQ0FBQztTQUFNLENBQUM7UUFDTixhQUFhLENBQUMsSUFBSSxDQUFDLHVFQUF1RSxDQUFDLENBQUM7UUFDNUYsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLFFBQVEsd0RBQXdELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRLEVBQUUsVUFBVTtRQUNwQixhQUFhLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUU7S0FDcEQsQ0FBQztBQUNKLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsU0FBUyxPQUFPLENBQUMsU0FBaUI7SUFDaEMsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNELENBQUM7QUFFRCxtR0FBbUc7QUFDbkcsU0FBUyxxQkFBcUIsQ0FBQyxRQUF5QjtJQUN0RCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUN6QyxLQUFLLE1BQU0sRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUcsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBRXBDOzs7OztHQUtHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxLQUFhO0lBQ3ZDLHVFQUF1RTtJQUN2RSxnRkFBZ0Y7SUFDaEYsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyw0Q0FBNEM7SUFDNUMsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLGlCQUFpQixDQUN4QixRQUFnQixFQUNoQixTQUFrQztJQUVsQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTNCLElBQUksUUFBUSxLQUFLLE1BQU0sSUFBSSxPQUFPLFNBQVMsQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDakUsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUN6RixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO1NBQU0sSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLElBQUksUUFBUSxLQUFLLE9BQU8sQ0FBQyxJQUFJLE9BQU8sU0FBUyxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNwRyxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVG9vbCBDbGFzc2lmaWNhdGlvbiBmb3IgQ0xJLUxldmVsIFBlcm1pc3Npb24gUHJvbXB0c1xuICpcbiAqIFByb3ZpZGVzIHN0YXRpYyBjbGFzc2lmaWNhdGlvbiBvZiBDbGF1ZGUgQ29kZSBDTEkgdG9vbCBjYWxscyBhbmRcbiAqIGV2YWx1YXRpb24gYWdhaW5zdCBhY3RpdmUgZWxlbWVudCBnYXRla2VlcGVyIHBvbGljaWVzLlxuICpcbiAqIFVzZWQgYnkgdGhlIHBlcm1pc3Npb25fcHJvbXB0IG9wZXJhdGlvbiAoSXNzdWUgIzYyNSkgdG8gZXZhbHVhdGVcbiAqIC0tcGVybWlzc2lvbi1wcm9tcHQtdG9vbCByZXF1ZXN0cyB3aXRob3V0IHJlcXVpcmluZyBMTE0gZXZhbHVhdGlvbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hlc1BhdHRlcm4gfSBmcm9tICcuLi8uLi8uLi91dGlscy9wYXR0ZXJuTWF0Y2hlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBBY3RpdmVFbGVtZW50IH0gZnJvbSAnLi9FbGVtZW50UG9saWNpZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSaXNrQXNzZXNzbWVudCB9IGZyb20gJy4uL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5cbi8vIOKUgOKUgCBUeXBlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgVG9vbFJpc2tMZXZlbCA9ICdzYWZlJyB8ICdtb2RlcmF0ZScgfCAnZGFuZ2Vyb3VzJyB8ICdibG9ja2VkJztcblxuZXhwb3J0IGludGVyZmFjZSBUb29sQ2xhc3NpZmljYXRpb25SZXN1bHQge1xuICByaXNrTGV2ZWw6IFRvb2xSaXNrTGV2ZWw7XG4gIC8qKiAnYWxsb3cnID0gYXV0by1hcHByb3ZlLCAnZGVueScgPSBhdXRvLXJlamVjdCwgJ2V2YWx1YXRlJyA9IGNoZWNrIGVsZW1lbnQgcG9saWNpZXMgKi9cbiAgYmVoYXZpb3I6ICdhbGxvdycgfCAnZGVueScgfCAnZXZhbHVhdGUnO1xuICByZWFzb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lFdmFsdWF0aW9uQ29udGV4dCB7XG4gIGV2YWx1YXRlZEVsZW1lbnRzOiBBcnJheTx7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBtYXRjaGVkPzogJ2FsbG93UGF0dGVybnMnIHwgJ2NvbmZpcm1QYXR0ZXJucycgfCAnZGVueVBhdHRlcm5zJztcbiAgICBtYXRjaGVkUGF0dGVybj86IHN0cmluZztcbiAgICBtYXRjaGVkVGFyZ2V0Pzogc3RyaW5nO1xuICB9PjtcbiAgZGVjaXNpb25DaGFpbjogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpVG9vbFBvbGljeVJlc3VsdCB7XG4gIGJlaGF2aW9yOiAnYWxsb3cnIHwgJ2RlbnknIHwgJ2V2YWx1YXRlJyB8ICdjb25maXJtJztcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgY29uZmlybVNvdXJjZT86IHN0cmluZztcbiAgcG9saWN5Q29udGV4dD86IFBvbGljeUV2YWx1YXRpb25Db250ZXh0O1xufVxuXG4vLyDilIDilIAgR2F0ZWtlZXBlci1Fc3NlbnRpYWwgT3BlcmF0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBNQ1AtQVFMIG9wZXJhdGlvbnMgdGhhdCBtdXN0IE5FVkVSIGJlIGJsb2NrZWQgYnkgcGVybWlzc2lvbl9wcm9tcHQsXG4gKiBldmVuIGlmIGVsZW1lbnQgZGVueVBhdHRlcm5zIHdvdWxkIG1hdGNoIHRoZSBNQ1AgdG9vbCBuYW1lLlxuICpcbiAqIFRoZXNlIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBHYXRla2VlcGVyIGZsb3cgaXRzZWxmLiBCbG9ja2luZyB0aGVtXG4gKiB3b3VsZCBwcmV2ZW50IHRoZSBodW1hbi1pbi10aGUtbG9vcCBhcHByb3ZhbCBwYXRoIGZyb20gZnVuY3Rpb25pbmdcbiAqIChlLmcuLCBhIGRlbnlQYXR0ZXJuIG9mICdtY3BfX0RvbGxob3VzZU1DUConIHdvdWxkIGJsb2NrIGNvbmZpcm1fb3BlcmF0aW9uKS5cbiAqL1xuY29uc3QgR0FURUtFRVBFUl9FU1NFTlRJQUxfT1BFUkFUSU9OUyA9IG5ldyBTZXQoW1xuICAnY29uZmlybV9vcGVyYXRpb24nLFxuICAndmVyaWZ5X2NoYWxsZW5nZScsXG4gICdwZXJtaXNzaW9uX3Byb21wdCcsXG4gICdpbnRyb3NwZWN0JyxcbiAgJ2dldF9hY3RpdmVfZWxlbWVudHMnLFxuICAnZ2V0X2V4ZWN1dGlvbl9zdGF0ZScsXG4gICdnZXRfZ2F0aGVyZWRfZGF0YScsXG4gICdhcHByb3ZlX2NsaV9wZXJtaXNzaW9uJywgICAgICAgLy8gSXNzdWUgIzYyNSBQaGFzZSAzXG4gICdnZXRfcGVuZGluZ19jbGlfYXBwcm92YWxzJywgICAgLy8gSXNzdWUgIzYyNSBQaGFzZSAzXG5dKTtcblxuLyoqXG4gKiBNQ1AtQVFMIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW5oZXJlbnRseSByZWFkLW9ubHkuXG4gKlxuICogVGhlc2UgYXV0by1hbGxvdyBpbiBwZXJtaXNzaW9uX3Byb21wdCAobm8gZWxlbWVudCBwb2xpY3kgZXZhbHVhdGlvbikuXG4gKiBUaGUgR2F0ZWtlZXBlciAoTGF5ZXIgMikgc3RpbGwgYXBwbGllcyBpdHMgb3duIHBlci1vcGVyYXRpb24gcG9saWNpZXMsXG4gKiBzbyB0aGlzIGRvZXNuJ3QgYnlwYXNzIHNlcnZlci1zaWRlIGFjY2VzcyBjb250cm9sIOKAlCBpdCBqdXN0IGF2b2lkc1xuICogdW5uZWNlc3NhcnkgJ2V2YWx1YXRlJyByb3VuZC10cmlwcyBmb3Igb3BlcmF0aW9ucyB0aGF0IGNhbid0IG1vZGlmeSBzdGF0ZS5cbiAqL1xuY29uc3QgU0FGRV9NQ1BfT1BFUkFUSU9OUyA9IG5ldyBTZXQoW1xuICAnbGlzdF9lbGVtZW50cycsXG4gICdnZXRfZWxlbWVudCcsXG4gICdnZXRfZWxlbWVudF9kZXRhaWxzJyxcbiAgJ3NlYXJjaF9lbGVtZW50cycsXG4gICdxdWVyeV9lbGVtZW50cycsXG4gICdnZXRfYWN0aXZlX2VsZW1lbnRzJyxcbiAgJ3ZhbGlkYXRlX2VsZW1lbnQnLFxuICAncmVuZGVyJyxcbiAgJ2V4cG9ydF9lbGVtZW50JyxcbiAgJ2ludHJvc3BlY3QnLFxuICAnZ2V0X2V4ZWN1dGlvbl9zdGF0ZScsXG4gICdnZXRfZ2F0aGVyZWRfZGF0YScsXG4gICdicm93c2VfY29sbGVjdGlvbicsXG4gICdzZWFyY2hfY29sbGVjdGlvbicsXG4gICdzZWFyY2hfY29sbGVjdGlvbl9lbmhhbmNlZCcsXG4gICdnZXRfY29sbGVjdGlvbl9jb250ZW50JyxcbiAgJ2dldF9jb2xsZWN0aW9uX2NhY2hlX2hlYWx0aCcsXG4gICdwb3J0Zm9saW9fc3RhdHVzJyxcbiAgJ3BvcnRmb2xpb19jb25maWcnLFxuICAnc2VhcmNoX3BvcnRmb2xpbycsXG4gICdzZWFyY2hfYWxsJyxcbiAgJ2NoZWNrX2dpdGh1Yl9hdXRoJyxcbiAgJ29hdXRoX2hlbHBlcl9zdGF0dXMnLFxuICAnZG9sbGhvdXNlX2NvbmZpZycsXG4gICdnZXRfYnVpbGRfaW5mbycsXG4gICdnZXRfY2FjaGVfYnVkZ2V0X3JlcG9ydCcsXG4gICdxdWVyeV9sb2dzJyxcbiAgJ3F1ZXJ5X21ldHJpY3MnLFxuICAnZmluZF9zaW1pbGFyX2VsZW1lbnRzJyxcbiAgJ2dldF9lbGVtZW50X3JlbGF0aW9uc2hpcHMnLFxuICAnc2VhcmNoX2J5X3ZlcmInLFxuICAnZ2V0X3JlbGF0aW9uc2hpcF9zdGF0cycsXG4gICdnZXRfZWZmZWN0aXZlX2NsaV9wb2xpY2llcycsXG4gICdnZXRfcGVuZGluZ19jbGlfYXBwcm92YWxzJyxcbl0pO1xuXG4vLyDilIDilIAgU3RhdGljIENsYXNzaWZpY2F0aW9uIExpc3RzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRvb2xzIHRoYXQgYXJlIGFsd2F5cyBzYWZlIChyZWFkLW9ubHksIG5vIHNpZGUgZWZmZWN0cykuXG4gKlxuICogTk9URTogXCJTYWZlXCIgaGVyZSBtZWFucyBubyBkZXN0cnVjdGl2ZSBzaWRlIGVmZmVjdHMg4oCUIGl0IGRvZXMgTk9UIG1lYW5cbiAqIHVucmVzdHJpY3RlZC4gUmVhZC1vbmx5IHRvb2xzIGNhbiBzdGlsbCBwb3NlIGluZm9ybWF0aW9uLWxlYWthZ2Ugb3JcbiAqIHNjb3BlLWNyZWVwIHJpc2tzIHdoZW4gdXNlZCB0byBhY2Nlc3MgZmlsZXMgb3V0c2lkZSB0aGUgcHJvamVjdCB3b3JraW5nXG4gKiBkaXJlY3RvcnkgKGUuZy4sIH4vLnNzaC8qLCAvZXRjL3Bhc3N3ZCwgY3JlZGVudGlhbHMgaW4gaG9tZSBkaXJlY3RvcmllcykuXG4gKiBNb3N0IExMTSBjbGllbnRzIChDbGF1ZGUgQ29kZSwgQ3Vyc29yLCBldGMuKSBhbHJlYWR5IGVuZm9yY2UgZGlyZWN0b3J5XG4gKiBzY29waW5nIGF0IHRoZSBjbGllbnQgbGV2ZWwuIFRoZSBgYXNzZXNzUmlzaygpYCBmdW5jdGlvbiBhcHBsaWVzIGEgc21hbGxcbiAqIHNjb3JlIGJ1bXAgZm9yIHJlYWQgb3BlcmF0aW9ucyB0YXJnZXRpbmcgb3V0LW9mLXNjb3BlIHBhdGhzIGFzIGFuXG4gKiBhZGRpdGlvbmFsIHNpZ25hbCBmb3IgYXBwcm92YWwgcG9saWNpZXMuXG4gKi9cbmNvbnN0IFNBRkVfVE9PTFMgPSBuZXcgU2V0KFtcbiAgJ1JlYWQnLFxuICAnR3JlcCcsXG4gICdHbG9iJyxcbiAgJ1dlYkZldGNoJyxcbiAgJ1dlYlNlYXJjaCcsXG4gICdUYXNrQ3JlYXRlJyxcbiAgJ1Rhc2tVcGRhdGUnLFxuICAnVGFza0dldCcsXG4gICdUYXNrTGlzdCcsXG4gICdUYXNrT3V0cHV0JyxcbiAgJ0Fza1VzZXJRdWVzdGlvbicsXG4gICdFbnRlclBsYW5Nb2RlJyxcbiAgJ0V4aXRQbGFuTW9kZScsXG4gICdUb2RvUmVhZCcsXG4gICdUb2RvV3JpdGUnLFxuXSk7XG5cbi8qKiBCYXNoIGNvbW1hbmQgcHJlZml4ZXMvcGF0dGVybnMgdGhhdCBhcmUgc2FmZSAqL1xuY29uc3QgU0FGRV9CQVNIX1BBVFRFUk5TID0gW1xuICAnZ2l0IHN0YXR1cyonLFxuICAnZ2l0IGxvZyonLFxuICAnZ2l0IGRpZmYqJyxcbiAgJ2dpdCBicmFuY2gqJyxcbiAgJ2dpdCBzaG93KicsXG4gICdnaXQgcmVtb3RlKicsXG4gICdnaXQgc3Rhc2ggbGlzdConLFxuICAnbHMqJyxcbiAgJ3B3ZCcsXG4gICdjYXQgKicsXG4gICdoZWFkIConLFxuICAndGFpbCAqJyxcbiAgJ3djIConLFxuICAnZWNobyAqJyxcbiAgJ25wbSB0ZXN0KicsXG4gICducG0gcnVuIGxpbnQqJyxcbiAgJ25wbSBydW4gYnVpbGQqJyxcbiAgJ25wbSBydW4gdGVzdConLFxuICAnbnBtIHJ1biBjaGVjayonLFxuICAnbnBtIHJ1biB0eXBlY2hlY2sqJyxcbiAgJ25wbSBydW4gZm9ybWF0KicsXG4gICducG0gbHMqJyxcbiAgJ25wbSBpbmZvKicsXG4gICducG0gb3V0ZGF0ZWQqJyxcbiAgJ25weCBqZXN0KicsXG4gICducHggdHNjIC0tbm9FbWl0KicsXG4gICdub2RlIC0tdmVyc2lvbionLFxuICAnd2hpY2ggKicsXG4gICd0eXBlIConLFxuICAnZ2ggaXNzdWUgbGlzdConLFxuICAnZ2ggaXNzdWUgdmlldyonLFxuICAnZ2ggcHIgbGlzdConLFxuICAnZ2ggcHIgdmlldyonLFxuICAnZ2ggcHIgY2hlY2tzKicsXG5dO1xuXG4vKiogQmFzaCBjb21tYW5kIHBhdHRlcm5zIHRoYXQgYXJlIGRhbmdlcm91cyAqL1xuY29uc3QgREFOR0VST1VTX0JBU0hfUEFUVEVSTlMgPSBbXG4gICdybSAtcmYgKicsXG4gICdybSAtZnIgKicsXG4gICdnaXQgcHVzaCAtLWZvcmNlKicsXG4gICdnaXQgcHVzaCAtZiAqJyxcbiAgJ2dpdCByZXNldCAtLWhhcmQqJyxcbiAgJ2dpdCBjbGVhbiAtZionLFxuICAnZ2l0IGNoZWNrb3V0IC0tIConLFxuICAnZ2l0IGJyYW5jaCAtRCAqJyxcbiAgJ2NobW9kIDc3NyonLFxuICAnY2htb2QgLVIgNzc3KicsXG4gICdjaG1vZCArcyAqJyxcbiAgJ2Nob3duIHJvb3QgKicsXG4gICdzdWRvIConLFxuICAnZG9hcyAqJyxcbiAgJ3N1IC0qJyxcbiAgJ2V2YWwgKicsXG4gIC8vIFBpcGUtdG8tc2hlbGwgcGF0dGVybnMgKHdpdGggYW5kIHdpdGhvdXQgc3BhY2VzLCBtdWx0aXBsZSBzaGVsbHMpXG4gICcqfCBzaCcsXG4gICcqfCBzaCAqJyxcbiAgJyp8c2gnLFxuICAnKnxzaCAqJyxcbiAgJyp8IGJhc2gnLFxuICAnKnwgYmFzaCAqJyxcbiAgJyp8YmFzaCcsXG4gICcqfGJhc2ggKicsXG4gICcqfCB6c2gnLFxuICAnKnx6c2gnLFxuICAnY3VybCAqIHwgKicsXG4gICd3Z2V0ICogfCAqJyxcbiAgLy8gUGFja2FnZSBtYW5hZ2VyIGluc3RhbGxzIChjYW4gZXhlY3V0ZSBhcmJpdHJhcnkgcG9zdC1pbnN0YWxsIHNjcmlwdHMpXG4gICducG0gaW5zdGFsbCAqJyxcbiAgJ25wbSBpbnN0YWxsJyxcbiAgJ25wbSBpIConLFxuICAnbnBtIGknLFxuICAneWFybiBhZGQgKicsXG4gICd5YXJuIGluc3RhbGwqJyxcbiAgJ3BpcCBpbnN0YWxsIConLFxuICAnZ2VtIGluc3RhbGwgKicsXG4gIC8vIEVudmlyb25tZW50IG1hbmlwdWxhdGlvbiAocGF0aCBwb2lzb25pbmcsIGxpYnJhcnkgaW5qZWN0aW9uLCB2YXJpYWJsZSBkZXN0cnVjdGlvbilcbiAgJ2V4cG9ydCBQQVRIPSonLFxuICAnZXhwb3J0IExEX1BSRUxPQUQ9KicsXG4gICdleHBvcnQgTERfTElCUkFSWV9QQVRIPSonLFxuICAnZW52IC1pIConLFxuICAndW5zZXQgKicsXG4gIC8vIFByb2Nlc3MgY29udHJvbCAoY2FuIHRlcm1pbmF0ZSBhZ2VudHMgb3Igc3lzdGVtIHByb2Nlc3NlcylcbiAgJ2tpbGwgKicsXG4gICdraWxsIC0qJyxcbiAgJ3BraWxsIConLFxuICAna2lsbGFsbCAqJyxcbiAgLy8gTmV0d29yayB0b29scyAoZXhmaWx0cmF0aW9uLCByZXZlcnNlIHNoZWxscylcbiAgJ25jIConLFxuICAnbmMgLSonLFxuICAnbmV0Y2F0IConLFxuICAnbmNhdCAqJyxcbiAgJ3NvY2F0IConLFxuICAvLyBBcmNoaXZlIG9wZXJhdGlvbnMgKGFyY2hpdmUgYm9tYnMsIHJvb3QgZGlyZWN0b3J5IGV4ZmlsdHJhdGlvbi9yYW5zb213YXJlKVxuICAndGFyIC14ZiAqJyxcbiAgJ3RhciB4ZiAqJyxcbiAgJ3ppcCAtciAqIC8nLFxuICAvLyBDb21tYW5kIGNoYWluaW5nIHdpdGggZGFuZ2Vyb3VzIHN1YmNvbW1hbmRzXG4gICcqOyBybSAtcmYgKicsXG4gICcqJiYgcm0gLXJmIConLFxuICAnKnx8IHJtIC1yZiAqJyxcbiAgJyo7IHN1ZG8gKicsXG4gICcqJiYgc3VkbyAqJyxcbiAgJyp8fCBzdWRvIConLFxuICAnKjsgZXZhbCAqJyxcbiAgJyomJiBldmFsIConLFxuICAvLyBTdWJwcm9jZXNzIGV4ZWN1dGlvbiB3cmFwcGVycyAoYnlwYXNzIG91dGVyIGNvbW1hbmQgY2xhc3NpZmljYXRpb24pXG4gICdiYXNoIC1jIConLFxuICAnc2ggLWMgKicsXG4gICd6c2ggLWMgKicsXG4gICcvYmluL2Jhc2ggLWMgKicsXG4gICcvYmluL3NoIC1jIConLFxuICAvLyBQcm9jZXNzIHN1YnN0aXR1dGlvbiAoY2FuIGluamVjdCBhcmJpdHJhcnkgY29tbWFuZCBvdXRwdXQpXG4gICcqPCgqJyxcbiAgLy8gRW5jb2RlZCBwYXlsb2FkIGV4ZWN1dGlvbiAoYmFzZTY0LWRlY29kZSBwaXBlZCB0byBzaGVsbClcbiAgJypiYXNlNjQgLWQqfConLFxuICAnKmJhc2U2NCAtLWRlY29kZSp8KicsXG4gICcqYmFzZTY0IC1EKnwqJyxcbl07XG5cbi8qKiBCYXNoIGNvbW1hbmQgcGF0dGVybnMgdGhhdCBhcmUgYWx3YXlzIGJsb2NrZWQgKi9cbmNvbnN0IEJMT0NLRURfQkFTSF9QQVRURVJOUyA9IFtcbiAgJ21rZnMqJyxcbiAgJ2RkIGlmPSonLFxuICAnOigpezp8OiZ9OzonLFxuICAnZm9ybWF0IConLFxuICAnKigpeyAqJyxcbl07XG5cbi8vIOKUgOKUgCBTdGF0aWMgQ2xhc3NpZmljYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQ2xhc3NpZnkgYSBDTEkgdG9vbCBjYWxsIGJ5IHJpc2sgbGV2ZWwgdXNpbmcgc3RhdGljIHJ1bGVzLlxuICpcbiAqIFJldHVybnMgJ2FsbG93JyBmb3Iga25vd24tc2FmZSB0b29scywgJ2RlbnknIGZvciBrbm93bi1kYW5nZXJvdXMgcGF0dGVybnMsXG4gKiBhbmQgJ2V2YWx1YXRlJyBmb3IgYW55dGhpbmcgdGhhdCBuZWVkcyBmdXJ0aGVyIHBvbGljeSBjaGVja2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5VG9vbChcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0IHtcbiAgLy8gS25vd24tc2FmZSB0b29sczogYXV0by1hbGxvd1xuICBpZiAoU0FGRV9UT09MUy5oYXModG9vbE5hbWUpKSB7XG4gICAgcmV0dXJuIHsgcmlza0xldmVsOiAnc2FmZScsIGJlaGF2aW9yOiAnYWxsb3cnLCByZWFzb246IGAke3Rvb2xOYW1lfSBpcyBhIHJlYWQtb25seSB0b29sYCB9O1xuICB9XG5cbiAgLy8gQmFzaDogc3ViLWNsYXNzaWZ5IGJ5IGNvbW1hbmQgY29udGVudFxuICBpZiAodG9vbE5hbWUgPT09ICdCYXNoJykge1xuICAgIHJldHVybiBjbGFzc2lmeUJhc2hDb21tYW5kKHRvb2xJbnB1dCk7XG4gIH1cblxuICAvLyBNQ1AgdG9vbCBjYWxsczogYXV0by1hbGxvdyBnYXRla2VlcGVyLWVzc2VudGlhbCBhbmQgc2FmZSByZWFkLW9ubHkgb3BlcmF0aW9ucywgZXZhbHVhdGUgb3RoZXJzXG4gIGlmICh0b29sTmFtZS5zdGFydHNXaXRoKCdtY3BfXycpKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdHlwZW9mIHRvb2xJbnB1dC5vcGVyYXRpb24gPT09ICdzdHJpbmcnID8gdG9vbElucHV0Lm9wZXJhdGlvbiA6ICcnO1xuICAgIGlmIChvcGVyYXRpb24gJiYgR0FURUtFRVBFUl9FU1NFTlRJQUxfT1BFUkFUSU9OUy5oYXMob3BlcmF0aW9uKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmlza0xldmVsOiAnc2FmZScsXG4gICAgICAgIGJlaGF2aW9yOiAnYWxsb3cnLFxuICAgICAgICByZWFzb246IGBHYXRla2VlcGVyLWVzc2VudGlhbCBvcGVyYXRpb24gJyR7b3BlcmF0aW9ufScg4oCUIGNhbm5vdCBiZSBibG9ja2VkIGJ5IHBlcm1pc3Npb25fcHJvbXB0YCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChvcGVyYXRpb24gJiYgU0FGRV9NQ1BfT1BFUkFUSU9OUy5oYXMob3BlcmF0aW9uKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmlza0xldmVsOiAnc2FmZScsXG4gICAgICAgIGJlaGF2aW9yOiAnYWxsb3cnLFxuICAgICAgICByZWFzb246IGBSZWFkLW9ubHkgTUNQIG9wZXJhdGlvbiAnJHtvcGVyYXRpb259J2AsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246ICdNQ1AgdG9vbCBjYWxsIHJlcXVpcmVzIHBvbGljeSBldmFsdWF0aW9uJyB9O1xuICB9XG5cbiAgLy8gRWRpdCwgV3JpdGUsIEFnZW50LCBOb3RlYm9va0VkaXQsIGV0Yy46IG1vZGVyYXRlIHJpc2tcbiAgaWYgKFsnRWRpdCcsICdXcml0ZScsICdBZ2VudCcsICdOb3RlYm9va0VkaXQnXS5pbmNsdWRlcyh0b29sTmFtZSkpIHtcbiAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246IGAke3Rvb2xOYW1lfSBtb2RpZmllcyBzdGF0ZSwgcmVxdWlyZXMgcG9saWN5IGV2YWx1YXRpb25gIH07XG4gIH1cblxuICAvLyBVbmtub3duIHRvb2w6IGV2YWx1YXRlIChwZXJtaXNzaXZlIGRlZmF1bHQgZm9yIFBoYXNlIDEpXG4gIHJldHVybiB7IHJpc2tMZXZlbDogJ21vZGVyYXRlJywgYmVoYXZpb3I6ICdldmFsdWF0ZScsIHJlYXNvbjogYFVua25vd24gdG9vbCAnJHt0b29sTmFtZX0nLCByZXF1aXJlcyBwb2xpY3kgZXZhbHVhdGlvbmAgfTtcbn1cblxuLyoqXG4gKiBTdWItY2xhc3NpZnkgQmFzaCBjb21tYW5kcyBieSBtYXRjaGluZyBhZ2FpbnN0IGtub3duIHBhdHRlcm5zLlxuICovXG5mdW5jdGlvbiBjbGFzc2lmeUJhc2hDb21tYW5kKFxuICB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBUb29sQ2xhc3NpZmljYXRpb25SZXN1bHQge1xuICBjb25zdCBjb21tYW5kID0gdHlwZW9mIHRvb2xJbnB1dC5jb21tYW5kID09PSAnc3RyaW5nJyA/IHRvb2xJbnB1dC5jb21tYW5kLnRyaW0oKSA6ICcnO1xuXG4gIGlmICghY29tbWFuZCkge1xuICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ21vZGVyYXRlJywgYmVoYXZpb3I6ICdldmFsdWF0ZScsIHJlYXNvbjogJ0VtcHR5IEJhc2ggY29tbWFuZCcgfTtcbiAgfVxuXG4gIC8vIENoZWNrIGJsb2NrZWQgcGF0dGVybnMgZmlyc3QgKGhpZ2hlc3QgcHJpb3JpdHkpXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBCTE9DS0VEX0JBU0hfUEFUVEVSTlMpIHtcbiAgICBpZiAobWF0Y2hlc1BhdHRlcm4oY29tbWFuZCwgcGF0dGVybikpIHtcbiAgICAgIHJldHVybiB7IHJpc2tMZXZlbDogJ2Jsb2NrZWQnLCBiZWhhdmlvcjogJ2RlbnknLCByZWFzb246IGBCbG9ja2VkIGNvbW1hbmQgcGF0dGVybjogJHtwYXR0ZXJufWAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBkYW5nZXJvdXMgcGF0dGVybnNcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIERBTkdFUk9VU19CQVNIX1BBVFRFUk5TKSB7XG4gICAgaWYgKG1hdGNoZXNQYXR0ZXJuKGNvbW1hbmQsIHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4geyByaXNrTGV2ZWw6ICdkYW5nZXJvdXMnLCBiZWhhdmlvcjogJ2RlbnknLCByZWFzb246IGBEYW5nZXJvdXMgY29tbWFuZCBwYXR0ZXJuOiAke3BhdHRlcm59YCB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIHNhZmUgcGF0dGVybnNcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIFNBRkVfQkFTSF9QQVRURVJOUykge1xuICAgIGlmIChtYXRjaGVzUGF0dGVybihjb21tYW5kLCBwYXR0ZXJuKSkge1xuICAgICAgcmV0dXJuIHsgcmlza0xldmVsOiAnc2FmZScsIGJlaGF2aW9yOiAnYWxsb3cnLCByZWFzb246IGBTYWZlIGNvbW1hbmQgcGF0dGVybjogJHtwYXR0ZXJufWAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBVbmNsYXNzaWZpZWQ6IGV2YWx1YXRlIGFnYWluc3QgZWxlbWVudCBwb2xpY2llc1xuICByZXR1cm4geyByaXNrTGV2ZWw6ICdtb2RlcmF0ZScsIGJlaGF2aW9yOiAnZXZhbHVhdGUnLCByZWFzb246ICdCYXNoIGNvbW1hbmQgbm90IHN0YXRpY2FsbHkgY2xhc3NpZmllZCcgfTtcbn1cblxuLy8g4pSA4pSAIFJpc2sgQXNzZXNzbWVudCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBCYXNlIHJpc2sgc2NvcmVzIGJ5IGNsYXNzaWZpY2F0aW9uIGxldmVsICgwLTEwMCBzY2FsZSkuXG4gKlxuICogU2NvcmUgcmFuZ2VzOlxuICogLSAgMDogICAgIHNhZmUg4oCUIHJlYWQtb25seSB0b29scywgbm8gc2lkZSBlZmZlY3RzXG4gKiAtICAxLTM5OiAgbG93IOKAlCBtaW5vciBzaWRlIGVmZmVjdHMsIGVhc2lseSByZXZlcnNpYmxlXG4gKiAtIDQwLTU5OiAgbW9kZXJhdGUg4oCUIGZpbGUgd3JpdGVzLCBwYWNrYWdlIGluc3RhbGxzLCB1bmNsYXNzaWZpZWQgY29tbWFuZHNcbiAqIC0gNjAtNzk6ICBlbGV2YXRlZCDigJQgbW9kZXJhdGUgKyBhZ2dyYXZhdGluZyBmYWN0b3JzIChuZXR3b3JrLCBmaWxlIGNyZWF0aW9uKVxuICogLSA4MC05OTogIGRhbmdlcm91cyDigJQgZGVzdHJ1Y3RpdmUgY29tbWFuZHMsIHByaXZpbGVnZSBlc2NhbGF0aW9uXG4gKiAtIDEwMDogICAgYmxvY2tlZCDigJQgYWx3YXlzIGRlbmllZCAoZS5nLiwgcmV2ZXJzZSBzaGVsbHMsIGRpc2sgd2lwZSlcbiAqXG4gKiBBZGp1c3RtZW50cyBhcHBsaWVkIG9uIHRvcCBvZiBiYXNlOiBpcnJldmVyc2libGUgcGF0dGVybiAoKzEwKSxcbiAqIG5ldHdvcmsgb3BlcmF0aW9uICgrMTApLCBvdXQtb2Ytc2NvcGUgcmVhZCAoKzEwKSwgZmlsZSBjcmVhdGlvbiAoKzUpLlxuICogU2NvcmUgaXMgY2FwcGVkIGF0IDEwMC5cbiAqL1xuY29uc3QgUklTS19TQ09SRVM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gIHNhZmU6IDAsXG4gIG1vZGVyYXRlOiA0MCxcbiAgZGFuZ2Vyb3VzOiA4MCxcbiAgYmxvY2tlZDogMTAwLFxufTtcblxuLyoqIFJlYWQtb25seSB0b29scyB0aGF0IG1heSByZWZlcmVuY2UgZmlsZSBwYXRocyAqL1xuY29uc3QgU0FGRV9SRUFEX1RPT0xTID0gbmV3IFNldChbJ1JlYWQnLCAnR3JlcCcsICdHbG9iJ10pO1xuXG4vKiogU2Vuc2l0aXZlIHBhdGggcHJlZml4ZXMgdGhhdCBpbmRpY2F0ZSBvdXQtb2Ytc2NvcGUgcmVhZHMgKi9cbmNvbnN0IFNFTlNJVElWRV9QQVRIX1BSRUZJWEVTID0gW1xuICAnfi8uc3NoLycsICd+Ly5nbnVwZy8nLCAnfi8uYXdzLycsICd+Ly5jb25maWcvJyxcbiAgJ34vLmVudicsICd+Ly5uZXRyYycsICd+Ly5ucG1yYycsXG4gICcvZXRjL3NoYWRvdycsICcvZXRjL3Bhc3N3ZCcsICcvZXRjL3N1ZG9lcnMnLFxuICAnL3Byb2MvJywgJy9zeXMvJyxcbl07XG5cbi8qKlxuICogSGV1cmlzdGljOiBkb2VzIGEgcGF0aCBsb29rIGxpa2UgaXQgdGFyZ2V0cyBmaWxlcyBvdXRzaWRlIHRoZSBwcm9qZWN0IHNjb3BlP1xuICogQ2hlY2tzIGZvciBob21lLWRpcmVjdG9yeSBzZW5zaXRpdmUgcGF0aHMsIHN5c3RlbSBwYXRocywgYW5kIHBhcmVudCB0cmF2ZXJzYWxzLlxuICovXG5mdW5jdGlvbiBpc091dE9mU2NvcGVQYXRoKHRhcmdldFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBub3JtYWxpemVkID0gdGFyZ2V0UGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgLy8gRXhwbGljaXQgc2Vuc2l0aXZlIHBhdGhzXG4gIGZvciAoY29uc3QgcHJlZml4IG9mIFNFTlNJVElWRV9QQVRIX1BSRUZJWEVTKSB7XG4gICAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aChwcmVmaXgpIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoYC8ke3ByZWZpeH1gKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gSG9tZSBkaXJlY3RvcnkgcmVmZXJlbmNlcyAofi8uLi4pIHRoYXQgYXJlbid0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0XG4gIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoJ34vJykgfHwgbm9ybWFsaXplZC5zdGFydHNXaXRoKCcvVXNlcnMvJykgfHwgbm9ybWFsaXplZC5zdGFydHNXaXRoKCcvaG9tZS8nKSkge1xuICAgIC8vIEhldXJpc3RpYzogcmVhZGluZyBzZW5zaXRpdmUgZG90ZmlsZXMvZGlycyBvdXRzaWRlIGEgcHJvamVjdC5cbiAgICAvLyBUYXJnZXRzIGtub3duIGNyZWRlbnRpYWwvY29uZmlnIHN0b3JlcyDigJQgYXZvaWRzIGZhbHNlIHBvc2l0aXZlcyBmb3JcbiAgICAvLyBjb21tb24gcHJvamVjdCBkb3RmaWxlcyBsaWtlIC5naXRodWIvLCAudnNjb2RlLywgLmVzbGludHJjLCBldGMuXG4gICAgaWYgKC9cXC9cXC4oc3NofGdudXBnfGF3c3xhenVyZXxnY2xvdWR8a3ViZXxkb2NrZXJ8bnBtcmN8bmV0cmN8ZW52fGJhc2hfaGlzdG9yeXx6c2hfaGlzdG9yeXxjcmVkZW50aWFsc3xwYXNzd29yZHxzZWNyZXQpL2kudGVzdChub3JtYWxpemVkKSkgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBCYXNoIGNvbW1hbmQgcGF0dGVybnMgdGhhdCBhcmUgaXJyZXZlcnNpYmxlICovXG5jb25zdCBJUlJFVkVSU0lCTEVfUEFUVEVSTlMgPSBbXG4gICdybSAtcmYgKicsXG4gICdybSAtZnIgKicsXG4gICdnaXQgcHVzaCAtLWZvcmNlKicsXG4gICdnaXQgcHVzaCAtZiAqJyxcbiAgJ2dpdCByZXNldCAtLWhhcmQqJyxcbiAgJ2dpdCBjbGVhbiAtZionLFxuICAnbWtmcyonLFxuICAnZGQgaWY9KicsXG4gICdkcm9wIConLFxuICAndHJ1bmNhdGUgKicsXG5dO1xuXG4vKipcbiAqIEFzc2VzcyB0aGUgcmlzayBvZiBhIENMSSB0b29sIGNhbGwuXG4gKlxuICogUmV0dXJucyBhIG51bWVyaWMgc2NvcmUgKDAtMTAwKSBhbmQgaXJyZXZlcnNpYmlsaXR5IGluZGljYXRvciBiYXNlZCBvblxuICogdGhlIHN0YXRpYyBjbGFzc2lmaWNhdGlvbiBhbmQgdG9vbC1zcGVjaWZpYyBoZXVyaXN0aWNzLlxuICpcbiAqIEBwYXJhbSB0b29sTmFtZSAtIFRoZSB0b29sIGJlaW5nIGNhbGxlZFxuICogQHBhcmFtIHRvb2xJbnB1dCAtIFRoZSB0b29sIGlucHV0IHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjbGFzc2lmaWNhdGlvbiAtIFRoZSByZXN1bHQgZnJvbSBjbGFzc2lmeVRvb2woKVxuICogQHJldHVybnMgUmlzayBhc3Nlc3NtZW50IHdpdGggc2NvcmUsIGlycmV2ZXJzaWJpbGl0eSwgYW5kIGNvbnRyaWJ1dGluZyBmYWN0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3Nlc3NSaXNrKFxuICB0b29sTmFtZTogc3RyaW5nLFxuICB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjbGFzc2lmaWNhdGlvbjogVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0XG4pOiBSaXNrQXNzZXNzbWVudCB7XG4gIGxldCBzY29yZSA9IFJJU0tfU0NPUkVTW2NsYXNzaWZpY2F0aW9uLnJpc2tMZXZlbF0gPz8gNDA7XG4gIGNvbnN0IGZhY3RvcnM6IHN0cmluZ1tdID0gW2BCYXNlOiAke2NsYXNzaWZpY2F0aW9uLnJpc2tMZXZlbH0gKCR7UklTS19TQ09SRVNbY2xhc3NpZmljYXRpb24ucmlza0xldmVsXSA/PyA0MH0pYF07XG4gIGxldCBpcnJldmVyc2libGUgPSBmYWxzZTtcblxuICAvLyBDaGVjayBmb3IgaXJyZXZlcnNpYmxlIHBhdHRlcm5zIGluIEJhc2ggY29tbWFuZHNcbiAgaWYgKHRvb2xOYW1lID09PSAnQmFzaCcgJiYgdHlwZW9mIHRvb2xJbnB1dC5jb21tYW5kID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGNvbW1hbmQgPSB0b29sSW5wdXQuY29tbWFuZC50cmltKCk7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIElSUkVWRVJTSUJMRV9QQVRURVJOUykge1xuICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKGNvbW1hbmQsIHBhdHRlcm4pKSB7XG4gICAgICAgIGlycmV2ZXJzaWJsZSA9IHRydWU7XG4gICAgICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDEwKTtcbiAgICAgICAgZmFjdG9ycy5wdXNoKGBJcnJldmVyc2libGUgcGF0dGVybjogJHtwYXR0ZXJufSAoKzEwKWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOZXR3b3JrIG9wZXJhdGlvbnMgaW5jcmVhc2Ugcmlza1xuICAgIGlmICgvXFxiKGN1cmx8d2dldHxmZXRjaHxuY3xuZXRjYXR8bmNhdHxzb2NhdClcXGIvLnRlc3QoY29tbWFuZCkpIHtcbiAgICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDEwKTtcbiAgICAgIGZhY3RvcnMucHVzaCgnTmV0d29yayBvcGVyYXRpb24gKCsxMCknKTtcbiAgICB9XG4gIH1cblxuICAvLyBXcml0ZS9FZGl0IG9wZXJhdGlvbnM6IGZpbGUgY3JlYXRpb24gaW5jcmVhc2VzIHJpc2sgc2xpZ2h0bHlcbiAgaWYgKHRvb2xOYW1lID09PSAnV3JpdGUnKSB7XG4gICAgc2NvcmUgPSBNYXRoLm1pbigxMDAsIHNjb3JlICsgNSk7XG4gICAgZmFjdG9ycy5wdXNoKCdGaWxlIGNyZWF0aW9uICgrNSknKTtcbiAgfVxuXG4gIC8vIFJlYWQtb25seSB0b29scyB0YXJnZXRpbmcgcGF0aHMgb3V0c2lkZSB0aGUgd29ya2luZyBkaXJlY3RvcnkuXG4gIC8vIE1vc3QgY2xpZW50cyBhbHJlYWR5IGVuZm9yY2UgZGlyZWN0b3J5IHNjb3BpbmcsIGJ1dCB0aGlzIHByb3ZpZGVzIGFuXG4gIC8vIGFkZGl0aW9uYWwgc2lnbmFsIGZvciBhcHByb3ZhbCBwb2xpY2llcyB0byBhY3Qgb24uXG4gIGlmIChTQUZFX1JFQURfVE9PTFMuaGFzKHRvb2xOYW1lKSkge1xuICAgIGNvbnN0IHRhcmdldFBhdGggPSAodG9vbElucHV0LmZpbGVfcGF0aCA/PyB0b29sSW5wdXQucGF0aCA/PyAnJykgYXMgc3RyaW5nO1xuICAgIGlmICh0YXJnZXRQYXRoICYmIGlzT3V0T2ZTY29wZVBhdGgodGFyZ2V0UGF0aCkpIHtcbiAgICAgIHNjb3JlID0gTWF0aC5taW4oMTAwLCBzY29yZSArIDEwKTtcbiAgICAgIGZhY3RvcnMucHVzaCgnT3V0LW9mLXNjb3BlIHJlYWQgcGF0aCAoKzEwKScpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IHNjb3JlLCBpcnJldmVyc2libGUsIGZhY3RvcnMgfTtcbn1cblxuLy8g4pSA4pSAIFN0YXRpYyBQb2xpY3kgRGF0YSBFeHBvcnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUmV0dXJuIGFsbCBzdGF0aWMgY2xhc3NpZmljYXRpb24gZGF0YSBmb3IgYnJpZGdlIHBvbGljeSBleHBvcnQuXG4gKlxuICogVXNlZCBieSBQb2xpY3lFeHBvcnRTZXJ2aWNlIHRvIHdyaXRlIHRoZSBicmlkZ2UtY29tcGF0aWJsZSBwb2xpY3kgZmlsZS5cbiAqIEFsbCBkYXRhIGlzIHJldHVybmVkIGFzIHBsYWluIGFycmF5cy9vYmplY3RzIChubyBTZXRzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpY1BvbGljeURhdGEoKSB7XG4gIHJldHVybiB7XG4gICAgc2FmZV90b29sczogWy4uLlNBRkVfVE9PTFNdLFxuICAgIHNhZmVfYmFzaF9wYXR0ZXJuczogWy4uLlNBRkVfQkFTSF9QQVRURVJOU10sXG4gICAgZGFuZ2Vyb3VzX2Jhc2hfcGF0dGVybnM6IFsuLi5EQU5HRVJPVVNfQkFTSF9QQVRURVJOU10sXG4gICAgYmxvY2tlZF9iYXNoX3BhdHRlcm5zOiBbLi4uQkxPQ0tFRF9CQVNIX1BBVFRFUk5TXSxcbiAgICBpcnJldmVyc2libGVfcGF0dGVybnM6IFsuLi5JUlJFVkVSU0lCTEVfUEFUVEVSTlNdLFxuICAgIHNlbnNpdGl2ZV9wYXRoX3ByZWZpeGVzOiBbLi4uU0VOU0lUSVZFX1BBVEhfUFJFRklYRVNdLFxuICAgIGdhdGVrZWVwZXJfZXNzZW50aWFsX29wZXJhdGlvbnM6IFsuLi5HQVRFS0VFUEVSX0VTU0VOVElBTF9PUEVSQVRJT05TXSxcbiAgICBzYWZlX21jcF9vcGVyYXRpb25zOiBbLi4uU0FGRV9NQ1BfT1BFUkFUSU9OU10sXG4gICAgcmlza19zY29yZXM6IHsgLi4uUklTS19TQ09SRVMgfSxcbiAgfTtcbn1cblxuLy8g4pSA4pSAIEVsZW1lbnQgUG9saWN5IEV2YWx1YXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRXZhbHVhdGUgYSBDTEkgdG9vbCBjYWxsIGFnYWluc3QgYWN0aXZlIGVsZW1lbnQgZ2F0ZWtlZXBlciBwb2xpY2llcy5cbiAqXG4gKiBGb3VyLXN0ZXAgZXZhbHVhdGlvbiBwZXIgZWxlbWVudCAoSXNzdWUgIzYyNSBQaGFzZSAyLCBJc3N1ZSAjMTY2MCk6XG4gKiAxLiBkZW55UGF0dGVybnMgKGhpZ2hlc3QgcHJpb3JpdHkpIOKAlCBmaXJzdCBtYXRjaCA9IGltbWVkaWF0ZSBkZW55XG4gKiAxLjUuIGNvbmZpcm1QYXR0ZXJucyDigJQgZmlyc3QgbWF0Y2ggPSBpbW1lZGlhdGUgY29uZmlybSAocmVxdWlyZXMgYXBwcm92YWwpXG4gKiAyLiBhbGxvd1BhdHRlcm5zIOKAlCBpZiBlbGVtZW50IGRlZmluZXMgdGhlbSwgcmVjb3JkIHdoZXRoZXIgdG9vbCBtYXRjaGVkXG4gKiAzLiBBZnRlciBhbGwgZWxlbWVudHM6IGlmIGFueSBoYWQgYWxsb3dQYXR0ZXJucyBidXQgdG9vbCB3YXNuJ3QgYWxsb3dlZCBieSBhbnkgPSBkZW55XG4gKlxuICogVW5pb24gc2VtYW50aWNzOiB0b29sIG11c3QgbWF0Y2ggYXQgbGVhc3QgT05FIGVsZW1lbnQncyBhbGxvd1BhdHRlcm5zIChub3QgYWxsKS5cbiAqIEVsZW1lbnRzIHdpdGhvdXQgYWxsb3dQYXR0ZXJucyBkb24ndCByZXN0cmljdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVG9vbCBtYXRjaGVzIGFsbG93UGF0dGVybnMgaW4gZWxlbWVudCBBIGJ1dCBub3QgQiDihpIgQUxMT1dFRCAodW5pb24gc2VtYW50aWNzKVxuICogLy8gVG9vbCBtYXRjaGVzIGRlbnlQYXR0ZXJucyBpbiBhbnkgZWxlbWVudCDihpIgREVOSUVEIChkZW55IGFsd2F5cyB3aW5zKVxuICogLy8gVG9vbCBtYXRjaGVzIG5vIGFsbG93UGF0dGVybnMgYnV0IHNvbWUgZXhpc3Qg4oaSIERFTklFRCAoXCJub3QgaW4gYW55IGFsbG93bGlzdFwiKVxuICogLy8gTm8gYWxsb3dQYXR0ZXJucyBkZWZpbmVkIGFueXdoZXJlIOKGkiBQaGFzZSAxIGJlaGF2aW9yIChmYWxsIHRocm91Z2ggdG8gZGVmYXVsdClcbiAqXG4gKiBAcmV0dXJucyAnZGVueScgaWYgYmxvY2tlZCwgJ2V2YWx1YXRlJyBpZiBwZXJtaXR0ZWQgdG8gZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQ2xpVG9vbFBvbGljeShcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgYWN0aXZlRWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXVxuKTogQ2xpVG9vbFBvbGljeVJlc3VsdCB7XG4gIGNvbnN0IGV2YWx1YXRlZEVsZW1lbnRzOiBQb2xpY3lFdmFsdWF0aW9uQ29udGV4dFsnZXZhbHVhdGVkRWxlbWVudHMnXSA9IFtdO1xuICBjb25zdCBkZWNpc2lvbkNoYWluOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gIGlmICghYWN0aXZlRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKCdObyBhY3RpdmUgZWxlbWVudHMg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0Jyk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSAke3Rvb2xOYW1lfTogbm8gYWN0aXZlIGVsZW1lbnRzLCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdGApO1xuICAgIHJldHVybiB7XG4gICAgICBiZWhhdmlvcjogJ2V2YWx1YXRlJyxcbiAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQnVpbGQgdGhlIHN0cmluZ3MgdG8gbWF0Y2ggYWdhaW5zdCBwYXR0ZXJuc1xuICBjb25zdCBtYXRjaFRhcmdldHMgPSBidWlsZE1hdGNoVGFyZ2V0cyh0b29sTmFtZSwgdG9vbElucHV0KTtcbiAgY29uc3QgZWxlbWVudFR5cGVTdW1tYXJ5ID0gc3VtbWFyaXplRWxlbWVudFR5cGVzKGFjdGl2ZUVsZW1lbnRzKTtcbiAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSBFdmFsdWF0aW5nICR7dG9vbE5hbWV9IGFnYWluc3QgJHthY3RpdmVFbGVtZW50cy5sZW5ndGh9IGVsZW1lbnRzICgke2VsZW1lbnRUeXBlU3VtbWFyeX0pLCBtYXRjaFRhcmdldHM6IFske21hdGNoVGFyZ2V0cy5qb2luKCcsICcpfV1gKTtcblxuICBsZXQgYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMgPSBmYWxzZTtcbiAgbGV0IHRvb2xBbGxvd2VkQnlBbnlFbGVtZW50ID0gZmFsc2U7XG4gIGNvbnN0IGVsZW1lbnRzV2l0aEFsbG93UGF0dGVybnM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGFjdGl2ZUVsZW1lbnRzKSB7XG4gICAgY29uc3QgcmVzdHJpY3Rpb25zID0gZWxlbWVudC5tZXRhZGF0YT8uZ2F0ZWtlZXBlcj8uZXh0ZXJuYWxSZXN0cmljdGlvbnM7XG4gICAgY29uc3QgZGVueVBhdHRlcm5zID0gcmVzdHJpY3Rpb25zPy5kZW55UGF0dGVybnM7XG4gICAgY29uc3QgY29uZmlybVBhdHRlcm5zID0gcmVzdHJpY3Rpb25zPy5jb25maXJtUGF0dGVybnM7XG4gICAgY29uc3QgYWxsb3dQYXR0ZXJucyA9IHJlc3RyaWN0aW9ucz8uYWxsb3dQYXR0ZXJucztcblxuICAgIGNvbnN0IGhhc1Jlc3RyaWN0aW9ucyA9IChBcnJheS5pc0FycmF5KGRlbnlQYXR0ZXJucykgJiYgZGVueVBhdHRlcm5zLmxlbmd0aCA+IDApXG4gICAgICB8fCAoQXJyYXkuaXNBcnJheShjb25maXJtUGF0dGVybnMpICYmIGNvbmZpcm1QYXR0ZXJucy5sZW5ndGggPiAwKVxuICAgICAgfHwgKEFycmF5LmlzQXJyYXkoYWxsb3dQYXR0ZXJucykgJiYgYWxsb3dQYXR0ZXJucy5sZW5ndGggPiAwKTtcblxuICAgIGlmICghaGFzUmVzdHJpY3Rpb25zKSB7XG4gICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHsgdHlwZTogZWxlbWVudC50eXBlLCBuYW1lOiBlbGVtZW50Lm5hbWUgfSk7XG4gICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9Jzogbm8gZXh0ZXJuYWxSZXN0cmljdGlvbnNgKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBubyBleHRlcm5hbFJlc3RyaWN0aW9ucywgc2tpcHBpbmdgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBldmFsdWF0aW5nIChkZW55OiAke0FycmF5LmlzQXJyYXkoZGVueVBhdHRlcm5zKSA/IGRlbnlQYXR0ZXJucy5sZW5ndGggOiAwfSwgY29uZmlybTogJHtBcnJheS5pc0FycmF5KGNvbmZpcm1QYXR0ZXJucykgPyBjb25maXJtUGF0dGVybnMubGVuZ3RoIDogMH0sIGFsbG93OiAke0FycmF5LmlzQXJyYXkoYWxsb3dQYXR0ZXJucykgPyBhbGxvd1BhdHRlcm5zLmxlbmd0aCA6IDB9IHBhdHRlcm5zKWApO1xuXG4gICAgLy8gU3RlcCAxOiBDaGVjayBkZW55UGF0dGVybnMgKGhpZ2hlc3QgcHJpb3JpdHkpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVueVBhdHRlcm5zKSkge1xuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGRlbnlQYXR0ZXJucykge1xuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgbWF0Y2hUYXJnZXRzKSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKHRhcmdldCwgcGF0dGVybikpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgbWF0Y2hlZDogJ2RlbnlQYXR0ZXJucycsXG4gICAgICAgICAgICAgIG1hdGNoZWRQYXR0ZXJuOiBwYXR0ZXJuLFxuICAgICAgICAgICAgICBtYXRjaGVkVGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgREVOWTogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIGRlbnlQYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIERFTlk6ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBkZW55UGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlZCAnJHt0YXJnZXR9JyAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmVoYXZpb3I6ICdkZW55JyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERlbmllZCBieSAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgcG9saWN5OiBwYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCxcbiAgICAgICAgICAgICAgcG9saWN5Q29udGV4dDogeyBldmFsdWF0ZWRFbGVtZW50cywgZGVjaXNpb25DaGFpbiB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdGVwIDEuNTogQ2hlY2sgY29uZmlybVBhdHRlcm5zIChyZXF1aXJlcyBhcHByb3ZhbCDigJQgSXNzdWUgIzE2NjApXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlybVBhdHRlcm5zKSAmJiBjb25maXJtUGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIGNvbmZpcm1QYXR0ZXJucykge1xuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgbWF0Y2hUYXJnZXRzKSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKHRhcmdldCwgcGF0dGVybikpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgbWF0Y2hlZDogJ2NvbmZpcm1QYXR0ZXJucycsXG4gICAgICAgICAgICAgIG1hdGNoZWRQYXR0ZXJuOiBwYXR0ZXJuLFxuICAgICAgICAgICAgICBtYXRjaGVkVGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgQ09ORklSTTogJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nIGNvbmZpcm1QYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIENPTkZJUk06ICR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JyBjb25maXJtUGF0dGVybiAnJHtwYXR0ZXJufScgbWF0Y2hlZCAnJHt0YXJnZXR9JyAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYmVoYXZpb3I6ICdjb25maXJtJyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogYFJlcXVpcmVzIGFwcHJvdmFsOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgcG9saWN5IHJlcXVpcmVzIGNvbmZpcm1hdGlvbiBmb3IgcGF0dGVybiAnJHtwYXR0ZXJufSdgLFxuICAgICAgICAgICAgICBjb25maXJtU291cmNlOiBgJHtlbGVtZW50LnR5cGV9OiR7ZWxlbWVudC5uYW1lfWAsXG4gICAgICAgICAgICAgIHBvbGljeUNvbnRleHQ6IHsgZXZhbHVhdGVkRWxlbWVudHMsIGRlY2lzaW9uQ2hhaW4gfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBDaGVjayBhbGxvd1BhdHRlcm5zXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxsb3dQYXR0ZXJucykgJiYgYWxsb3dQYXR0ZXJucy5sZW5ndGggPiAwKSB7XG4gICAgICBhbnlFbGVtZW50SGFzQWxsb3dQYXR0ZXJucyA9IHRydWU7XG4gICAgICBlbGVtZW50c1dpdGhBbGxvd1BhdHRlcm5zLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9J2ApO1xuICAgICAgbGV0IG1hdGNoZWRBbGxvdyA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgYWxsb3dQYXR0ZXJucykge1xuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgbWF0Y2hUYXJnZXRzKSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXNQYXR0ZXJuKHRhcmdldCwgcGF0dGVybikpIHtcbiAgICAgICAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGUsXG4gICAgICAgICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgICAgbWF0Y2hlZDogJ2FsbG93UGF0dGVybnMnLFxuICAgICAgICAgICAgICBtYXRjaGVkUGF0dGVybjogcGF0dGVybixcbiAgICAgICAgICAgICAgbWF0Y2hlZFRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWNpc2lvbkNoYWluLnB1c2goYCR7ZWxlbWVudC50eXBlfSAnJHtlbGVtZW50Lm5hbWV9JzogYWxsb3dQYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVzICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtDbGlQb2xpY3ldIEFMTE9XOiAke2VsZW1lbnQudHlwZX0gJyR7ZWxlbWVudC5uYW1lfScgYWxsb3dQYXR0ZXJuICcke3BhdHRlcm59JyBtYXRjaGVkICcke3RhcmdldH0nYCk7XG4gICAgICAgICAgICB0b29sQWxsb3dlZEJ5QW55RWxlbWVudCA9IHRydWU7XG4gICAgICAgICAgICBtYXRjaGVkQWxsb3cgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaGVkQWxsb3cpIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW1hdGNoZWRBbGxvdykge1xuICAgICAgICBldmFsdWF0ZWRFbGVtZW50cy5wdXNoKHsgdHlwZTogZWxlbWVudC50eXBlLCBuYW1lOiBlbGVtZW50Lm5hbWUgfSk7XG4gICAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBhbGxvd1BhdHRlcm5zIGRlZmluZWQgYnV0IG5vIG1hdGNoYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2YWx1YXRlZEVsZW1lbnRzLnB1c2goeyB0eXBlOiBlbGVtZW50LnR5cGUsIG5hbWU6IGVsZW1lbnQubmFtZSB9KTtcbiAgICAgIGRlY2lzaW9uQ2hhaW4ucHVzaChgJHtlbGVtZW50LnR5cGV9ICcke2VsZW1lbnQubmFtZX0nOiBkZW55UGF0dGVybnMgY2hlY2tlZCwgbm8gbWF0Y2hgKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdGVwIDM6IElmIGFueSBlbGVtZW50IGhhZCBhbGxvd1BhdHRlcm5zLCB0b29sIG11c3QgaGF2ZSBtYXRjaGVkIGF0IGxlYXN0IG9uZVxuICBpZiAoYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMgJiYgIXRvb2xBbGxvd2VkQnlBbnlFbGVtZW50KSB7XG4gICAgY29uc3QgcmVzdHJpY3RvcnMgPSBlbGVtZW50c1dpdGhBbGxvd1BhdHRlcm5zLmpvaW4oJywgJyk7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKGBERU5ZOiB0b29sIG5vdCBpbiBhbnkgZWxlbWVudCBhbGxvd2xpc3QgKHJlc3RyaWN0ZWQgYnk6ICR7cmVzdHJpY3RvcnN9KWApO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gREVOWTogJHt0b29sTmFtZX0gbm90IGluIGFueSBhbGxvd2xpc3QgKHJlc3RyaWN0ZWQgYnk6ICR7cmVzdHJpY3RvcnN9KSAoJHtlbGFwc2VkKHN0YXJ0VGltZSl9KWApO1xuICAgIHJldHVybiB7XG4gICAgICBiZWhhdmlvcjogJ2RlbnknLFxuICAgICAgbWVzc2FnZTogYFRvb2wgJyR7dG9vbE5hbWV9JyBub3QgcGVybWl0dGVkIGJ5IGFsbG93bGlzdHMgZGVmaW5lZCBpbjogJHtyZXN0cmljdG9yc30uIEVpdGhlciBkZWFjdGl2YXRlIHRoZXNlIGVsZW1lbnRzIG9yIGFkZCBhbGxvd1BhdHRlcm5zIHRvIG1hdGNoIHRoaXMgdG9vbC5gLFxuICAgICAgcG9saWN5Q29udGV4dDogeyBldmFsdWF0ZWRFbGVtZW50cywgZGVjaXNpb25DaGFpbiB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoYW55RWxlbWVudEhhc0FsbG93UGF0dGVybnMpIHtcbiAgICBkZWNpc2lvbkNoYWluLnB1c2goJ1Rvb2wgbWF0Y2hlZCBhbGxvd2xpc3Qg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0Jyk7XG4gICAgbG9nZ2VyLmRlYnVnKGBbQ2xpUG9saWN5XSAke3Rvb2xOYW1lfTogbWF0Y2hlZCBhbGxvd2xpc3QsIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0ICgke2VsYXBzZWQoc3RhcnRUaW1lKX0pYCk7XG4gIH0gZWxzZSB7XG4gICAgZGVjaXNpb25DaGFpbi5wdXNoKCdObyBhbGxvd1BhdHRlcm5zIGRlZmluZWQg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IChQaGFzZSAxIGJlaGF2aW9yKScpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgW0NsaVBvbGljeV0gJHt0b29sTmFtZX06IG5vIGFsbG93UGF0dGVybnMgZGVmaW5lZCwgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgKCR7ZWxhcHNlZChzdGFydFRpbWUpfSlgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmVoYXZpb3I6ICdldmFsdWF0ZScsXG4gICAgcG9saWN5Q29udGV4dDogeyBldmFsdWF0ZWRFbGVtZW50cywgZGVjaXNpb25DaGFpbiB9LFxuICB9O1xufVxuXG4vKiogRm9ybWF0IGVsYXBzZWQgdGltZSBzaW5jZSBzdGFydFRpbWUgaW4gbWlsbGlzZWNvbmRzLiAqL1xuZnVuY3Rpb24gZWxhcHNlZChzdGFydFRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHsocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWUpLnRvRml4ZWQoMil9bXNgO1xufVxuXG4vKiogU3VtbWFyaXplIGFjdGl2ZSBlbGVtZW50IHR5cGVzIGZvciB0aGUgZW50cnkgbG9nIChlLmcuLCBcIjMgcGVyc29uYXMsIDIgc2tpbGxzLCAxIGVuc2VtYmxlXCIpLiAqL1xuZnVuY3Rpb24gc3VtbWFyaXplRWxlbWVudFR5cGVzKGVsZW1lbnRzOiBBY3RpdmVFbGVtZW50W10pOiBzdHJpbmcge1xuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IGVsIG9mIGVsZW1lbnRzKSB7XG4gICAgY291bnRzLnNldChlbC50eXBlLCAoY291bnRzLmdldChlbC50eXBlKSA/PyAwKSArIDEpO1xuICB9XG4gIHJldHVybiBbLi4uY291bnRzLmVudHJpZXMoKV0ubWFwKChbdHlwZSwgY291bnRdKSA9PiBgJHtjb3VudH0gJHt0eXBlfSR7Y291bnQgPiAxID8gJ3MnIDogJyd9YCkuam9pbignLCAnKTtcbn1cblxuLyoqXG4gKiBNYXhpbXVtIGlucHV0IGxlbmd0aCBmb3IgcGF0dGVybiBtYXRjaGluZyB0YXJnZXRzLlxuICogVHJ1bmNhdGVzIGxvbmcgY29tbWFuZHMvcGF0aHMgdG8gcHJldmVudCBEb1MgdmlhIHBhdGhvbG9naWNhbCBnbG9iIG1hdGNoaW5nLlxuICovXG5jb25zdCBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIID0gMTAwMDtcblxuLyoqXG4gKiBTdHJpcCBudWxsIGJ5dGVzLCBjb250cm9sIGNoYXJhY3RlcnMsIGFuZCBub3JtYWxpemUgVW5pY29kZSBmb3IgbWF0Y2ggaW5wdXQuXG4gKiBQcmVzZXJ2ZXMgdGFiIChcXHgwOSksIG5ld2xpbmUgKFxceDBBKSwgY2FycmlhZ2UgcmV0dXJuIChcXHgwRCkuXG4gKiBQcmV2ZW50cyBwYXR0ZXJuIGJ5cGFzcyB2aWEgaW5qZWN0ZWQgY29udHJvbCBjaGFyYWN0ZXJzIG9yIFVuaWNvZGVcbiAqIG5vcm1hbGl6YXRpb24gYXR0YWNrcyAoZS5nLiwgY29tYmluaW5nIGNoYXJhY3RlcnMgdGhhdCBsb29rIGxpa2UgQVNDSUkpLlxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZU1hdGNoSW5wdXQoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIE5vcm1hbGl6ZSBVbmljb2RlIHRvIE5GQyAoY2Fub25pY2FsIGRlY29tcG9zaXRpb24gdGhlbiBjb21wb3NpdGlvbikuXG4gIC8vIFRoaXMgcHJldmVudHMgYnlwYXNzIHZpYSBjb21iaW5pbmcgY2hhcmFjdGVycyBvciBhbHRlcm5hdGl2ZSByZXByZXNlbnRhdGlvbnMuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBpbnB1dC5ub3JtYWxpemUoJ05GQycpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICByZXR1cm4gbm9ybWFsaXplZC5yZXBsYWNlKC9bXFx4MDAtXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgJycpO1xufVxuXG4vKipcbiAqIEJ1aWxkIG1hdGNoIHRhcmdldCBzdHJpbmdzIGZvciBhIHRvb2wgY2FsbC5cbiAqXG4gKiBGb3IgQmFzaDogbWF0Y2hlcyBhZ2FpbnN0IHRoZSB0b29sIG5hbWUgYW5kIFwiQmFzaDo8Y29tbWFuZD5cIlxuICogRm9yIEVkaXQvV3JpdGU6IG1hdGNoZXMgYWdhaW5zdCB0aGUgdG9vbCBuYW1lIGFuZCBcIkVkaXQ6PGZpbGVfcGF0aD5cIlxuICogRm9yIE1DUCB0b29sczogbWF0Y2hlcyBhZ2FpbnN0IHRoZSBmdWxsIHRvb2wgbmFtZVxuICpcbiAqIElucHV0cyBhcmUgdHJ1bmNhdGVkIHRvIE1BWF9NQVRDSF9JTlBVVF9MRU5HVEggYW5kIHNhbml0aXplZCB0byBwcmV2ZW50XG4gKiBEb1MgdmlhIHBhdGhvbG9naWNhbCBnbG9iIG1hdGNoaW5nIGFuZCBwYXR0ZXJuIGJ5cGFzcyB2aWEgY29udHJvbCBjaGFycy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRNYXRjaFRhcmdldHMoXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgdGFyZ2V0cyA9IFt0b29sTmFtZV07XG5cbiAgaWYgKHRvb2xOYW1lID09PSAnQmFzaCcgJiYgdHlwZW9mIHRvb2xJbnB1dC5jb21tYW5kID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHNhbml0aXplZCA9IHNhbml0aXplTWF0Y2hJbnB1dCh0b29sSW5wdXQuY29tbWFuZC5zbGljZSgwLCBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIKSk7XG4gICAgdGFyZ2V0cy5wdXNoKGBCYXNoOiR7c2FuaXRpemVkfWApO1xuICB9IGVsc2UgaWYgKCh0b29sTmFtZSA9PT0gJ0VkaXQnIHx8IHRvb2xOYW1lID09PSAnV3JpdGUnKSAmJiB0eXBlb2YgdG9vbElucHV0LmZpbGVfcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBzYW5pdGl6ZU1hdGNoSW5wdXQodG9vbElucHV0LmZpbGVfcGF0aC5zbGljZSgwLCBNQVhfTUFUQ0hfSU5QVVRfTEVOR1RIKSk7XG4gICAgdGFyZ2V0cy5wdXNoKGAke3Rvb2xOYW1lfToke3Nhbml0aXplZH1gKTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXRzO1xufVxuIl19
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|