@dollhousemcp/mcp-server 2.0.0-rc.5 → 2.0.0
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 +54 -17
- package/README.github.md +2 -2
- package/README.md +2 -2
- package/README.md.backup +284 -224
- package/README.npm.md +2 -2
- 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/editElement.d.ts.map +1 -1
- package/dist/handlers/element-crud/editElement.js +39 -18
- package/dist/handlers/element-crud/helpers.d.ts.map +1 -1
- package/dist/handlers/element-crud/helpers.js +30 -3
- 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/GatekeeperTypes.d.ts +4 -0
- package/dist/handlers/mcp-aql/GatekeeperTypes.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/GatekeeperTypes.js +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +33 -0
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +232 -23
- 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/UnifiedEndpoint.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/UnifiedEndpoint.js +4 -3
- 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/ElementPolicies.d.ts +17 -0
- package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ElementPolicies.js +91 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts +5 -3
- package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/policies/ToolClassification.js +56 -2
- package/dist/handlers/mcp-aql/types.d.ts +22 -0
- package/dist/handlers/mcp-aql/types.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/types.js +47 -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 +8 -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/PolicyExportService.d.ts.map +1 -1
- package/dist/services/PolicyExportService.js +8 -1
- 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/constants/version.d.ts +0 -3
- package/dist/constants/version.d.ts.map +0 -1
- package/dist/constants/version.js +0 -4
- package/dist/logging/sinks/SSELogSink.d.ts +0 -35
- package/dist/logging/sinks/SSELogSink.d.ts.map +0 -1
- package/dist/logging/sinks/SSELogSink.js +0 -181
- package/dist/logging/viewer/viewerHtml.d.ts +0 -8
- package/dist/logging/viewer/viewerHtml.d.ts.map +0 -1
- package/dist/logging/viewer/viewerHtml.js +0 -204
- package/dist/web/public/public/app.js +0 -1878
|
@@ -38,7 +38,6 @@
|
|
|
38
38
|
* - Security audit logging for relationship operations
|
|
39
39
|
*/
|
|
40
40
|
import { parseElementId, formatElementId } from '../../utils/elementId.js';
|
|
41
|
-
import { SecurityMonitor } from '../../security/securityMonitor.js';
|
|
42
41
|
import { UnicodeValidator } from '../../security/validators/unicodeValidator.js';
|
|
43
42
|
/**
|
|
44
43
|
* Type guard to check if a relationship is successfully parsed
|
|
@@ -225,21 +224,8 @@ export function createRelationship(targetType, targetName, relationType, strengt
|
|
|
225
224
|
throw new Error(`Relationship strength must be between 0 and 1, got ${strength}`);
|
|
226
225
|
}
|
|
227
226
|
const element = formatElementId(normalizedType.normalizedContent, normalizedName.normalizedContent);
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
// Now: Log relationship creation for security audit trail
|
|
231
|
-
SecurityMonitor.logSecurityEvent({
|
|
232
|
-
type: 'ELEMENT_CREATED',
|
|
233
|
-
severity: 'LOW',
|
|
234
|
-
source: 'RelationshipTypes.createRelationship',
|
|
235
|
-
details: `Created relationship to ${element}`,
|
|
236
|
-
metadata: {
|
|
237
|
-
targetType: normalizedType.normalizedContent,
|
|
238
|
-
targetName: normalizedName.normalizedContent,
|
|
239
|
-
relationType: normalizedRelType || 'unspecified',
|
|
240
|
-
strength: strength ?? 1.0
|
|
241
|
-
}
|
|
242
|
-
});
|
|
227
|
+
// Relationship creation is internal index construction, not a security event.
|
|
228
|
+
// Aggregate counts logged in "Relationship discovery completed" summary.
|
|
243
229
|
return {
|
|
244
230
|
element,
|
|
245
231
|
type: normalizedRelType,
|
|
@@ -338,4 +324,4 @@ export const RelationshipTypes = {
|
|
|
338
324
|
// Semantic relationships
|
|
339
325
|
SEMANTIC_SIMILARITY: 'semantic_similarity'
|
|
340
326
|
};
|
|
341
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsYXRpb25zaGlwVHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcG9ydGZvbGlvL3R5cGVzL1JlbGF0aW9uc2hpcFR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBaUdqRjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxHQUFpQjtJQUNwRCxPQUFPLFNBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxJQUFJO1FBQ3hDLFlBQVksSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxJQUFJO1FBQzlDLFlBQVksSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsR0FBaUI7SUFDckQsT0FBTyxTQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDO0FBQ25ELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQWlCO0lBQ2xELE9BQU8sQ0FBQyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBcUI7SUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixPQUFPO1lBQ0wsR0FBRyxHQUFHO1lBQ04sVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxVQUFVLEVBQUUscUVBQXFFO1NBQ2xGLENBQUM7SUFDSixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixPQUFPO1lBQ0wsR0FBRyxHQUFHO1lBQ04sVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxVQUFVLEVBQUUsZ0RBQWdELFVBQVUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1NBQ3BHLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRTVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLGtGQUFrRjtRQUNsRixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdELElBQUksV0FBbUIsQ0FBQztRQUV4QixJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RCLFdBQVcsR0FBRywrQkFBK0IsVUFBVSxDQUFDLGlCQUFpQiwwREFBMEQsQ0FBQztRQUN0SSxDQUFDO2FBQU0sSUFBSSxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsV0FBVyxHQUFHLCtCQUErQixVQUFVLENBQUMsaUJBQWlCLDREQUE0RCxDQUFDO1FBQ3hJLENBQUM7YUFBTSxJQUFJLFVBQVUsS0FBSyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xFLFdBQVcsR0FBRywrQkFBK0IsVUFBVSxDQUFDLGlCQUFpQiwyREFBMkQsQ0FBQztRQUN2SSxDQUFDO2FBQU0sSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5RCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDN0QsSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztvQkFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFDRCxXQUFXLEdBQUcsK0JBQStCLFVBQVUsQ0FBQyxpQkFBaUIsbURBQW1ELFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxDQUFDO1FBQ3JNLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxHQUFHLCtCQUErQixVQUFVLENBQUMsaUJBQWlCLGtDQUFrQyxDQUFDO1FBQzlHLENBQUM7UUFFRCxPQUFPO1lBQ0wsR0FBRyxHQUFHO1lBQ04sVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxVQUFVLEVBQUUsV0FBVztTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxHQUFHLEdBQUc7UUFDTixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUk7UUFDdkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ3ZCLE9BQU8sRUFBRSxJQUFJO0tBQ2QsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLGFBQWlDLEVBQ2pDLGlCQUEwQixLQUFLO0lBRS9CLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUVwRCxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxVQUFrQixFQUNsQixVQUFrQixFQUNsQixZQUFxQixFQUNyQixRQUFpQixFQUNqQixRQUE4QjtJQUU5QixtRkFBbUY7SUFDbkYsNkRBQTZEO0lBQzdELCtFQUErRTtJQUMvRSxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxjQUFjLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5RCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELGNBQWMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoSCxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLElBQUksaUJBQXFDLENBQUM7SUFDMUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxhQUFhLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckgsQ0FBQztRQUNELGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLElBQUksUUFBUSxLQUFLLFNBQVMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN2RixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRXBHLDREQUE0RDtJQUM1RCxvREFBb0Q7SUFDcEQsMERBQTBEO0lBQzFELGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQixJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsTUFBTSxFQUFFLHNDQUFzQztRQUM5QyxPQUFPLEVBQUUsMkJBQTJCLE9BQU8sRUFBRTtRQUM3QyxRQUFRLEVBQUU7WUFDUixVQUFVLEVBQUUsY0FBYyxDQUFDLGlCQUFpQjtZQUM1QyxVQUFVLEVBQUUsY0FBYyxDQUFDLGlCQUFpQjtZQUM1QyxZQUFZLEVBQUUsaUJBQWlCLElBQUksYUFBYTtZQUNoRCxRQUFRLEVBQUUsUUFBUSxJQUFJLEdBQUc7U0FDMUI7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsT0FBTztRQUNQLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsUUFBUTtRQUNSLFFBQVE7UUFDUixVQUFVLEVBQUUsY0FBYyxDQUFDLGlCQUFpQjtRQUM1QyxVQUFVLEVBQUUsY0FBYyxDQUFDLGlCQUFpQjtRQUM1QyxPQUFPLEVBQUUsSUFBSTtLQUNkLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBUTtJQUMzQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUc7UUFDSCxPQUFPLEdBQUcsS0FBSyxRQUFRO1FBQ3ZCLFNBQVMsSUFBSSxHQUFHO1FBQ2hCLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxRQUFRO1FBQy9CLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsYUFBbUM7SUFFbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWdDLENBQUM7SUFFeEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkQsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsYUFBaUM7SUFFakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7SUFFekQsS0FBSyxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkQsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLGFBQWlDO0lBRWpDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO0lBRXZELEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDaEMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsYUFBaUM7SUFFakMsT0FBTyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FDM0MsYUFBaUMsRUFDakMsV0FBbUI7SUFFbkIsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHO0lBQy9CLDJCQUEyQjtJQUMzQixVQUFVLEVBQUUsWUFBWTtJQUV4QixzQkFBc0I7SUFDdEIsSUFBSSxFQUFFLE1BQU07SUFDWixPQUFPLEVBQUUsU0FBUztJQUVsQiwwQkFBMEI7SUFDMUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLGFBQWE7SUFFMUIsNEJBQTRCO0lBQzVCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFlBQVksRUFBRSxjQUFjO0lBRTVCLDBCQUEwQjtJQUMxQixXQUFXLEVBQUUsYUFBYTtJQUMxQixXQUFXLEVBQUUsYUFBYTtJQUUxQix5QkFBeUI7SUFDekIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsUUFBUSxFQUFFLFVBQVU7SUFFcEIseUJBQXlCO0lBQ3pCLG1CQUFtQixFQUFFLHFCQUFxQjtDQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlLXNhZmUgcmVsYXRpb25zaGlwIGRlZmluaXRpb25zIGZvciBFbmhhbmNlZCBJbmRleFxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB0eXBlIHN5c3RlbSBmb3IgbWFuYWdpbmcgcmVsYXRpb25zaGlwc1xuICogYmV0d2VlbiBlbGVtZW50cyBpbiB0aGUgRG9sbGhvdXNlTUNQIEVuaGFuY2VkIEluZGV4LiBJdCBpbXBsZW1lbnRzIGEgdGhyZWUtdGllclxuICogdHlwZSBoaWVyYXJjaHkgdGhhdCBlbnN1cmVzIGJvdGggY29tcGlsZS10aW1lIGFuZCBydW50aW1lIHNhZmV0eS5cbiAqXG4gKiAjIyBUeXBlIEhpZXJhcmNoeTpcbiAqIDEuIEJhc2VSZWxhdGlvbnNoaXAgLSBUaGUgc3RvcmFnZSBmb3JtYXQgKHdoYXQncyBwZXJzaXN0ZWQgdG8gZGlzaylcbiAqIDIuIFBhcnNlZFJlbGF0aW9uc2hpcCAtIFZhbGlkIHJ1bnRpbWUgZm9ybWF0IHdpdGggZXh0cmFjdGVkIG1ldGFkYXRhXG4gKiAzLiBJbnZhbGlkUmVsYXRpb25zaGlwIC0gRXJyb3Igc3RhdGUgd2l0aCBkZXRhaWxlZCBkaWFnbm9zdGljc1xuICpcbiAqICMjIEtleSBGZWF0dXJlczpcbiAqIC0gU3Ryb25nbHktdHlwZWQgaW50ZXJmYWNlcyB3aXRoIGRpc2NyaW1pbmF0ZWQgdW5pb25zXG4gKiAtIFJ1bnRpbWUgdHlwZSBndWFyZHMgZm9yIHNhZmUgdHlwZSBuYXJyb3dpbmdcbiAqIC0gRGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMgd2l0aCBwb3NpdGlvbiBpbmZvcm1hdGlvblxuICogLSBCYXRjaCBwcm9jZXNzaW5nIHV0aWxpdGllcyB3aXRoIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnNcbiAqIC0gUmVsYXRpb25zaGlwIGRlZHVwbGljYXRpb24gYW5kIHNvcnRpbmcgYWxnb3JpdGhtc1xuICpcbiAqICMjIFVzYWdlIEV4YW1wbGU6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBQYXJzZSBhIHJlbGF0aW9uc2hpcCBmcm9tIHN0b3JhZ2VcbiAqIGNvbnN0IHN0b3JlZDogQmFzZVJlbGF0aW9uc2hpcCA9IHsgZWxlbWVudDogJ3BlcnNvbmFzOmV4cGVydC1jb2RlcicgfTtcbiAqIGNvbnN0IHBhcnNlZCA9IHBhcnNlUmVsYXRpb25zaGlwKHN0b3JlZCk7XG4gKlxuICogaWYgKGlzUGFyc2VkUmVsYXRpb25zaGlwKHBhcnNlZCkpIHtcbiAqICAgY29uc29sZS5sb2coYFR5cGU6ICR7cGFyc2VkLnRhcmdldFR5cGV9LCBOYW1lOiAke3BhcnNlZC50YXJnZXROYW1lfWApO1xuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS5lcnJvcihgUGFyc2UgZmFpbGVkOiAke3BhcnNlZC5wYXJzZUVycm9yfWApO1xuICogfVxuICogYGBgXG4gKlxuICogRklYRVMgSU1QTEVNRU5URUQgKElzc3VlICMxMTAzKTpcbiAqIC0gVHlwZS1zYWZlIHJlbGF0aW9uc2hpcCB2YXJpYW50cyB3aXRoIGRpc2NyaW1pbmF0ZWQgdW5pb25zXG4gKiAtIENvbXBpbGUtdGltZSB2YWxpZGF0aW9uIHRocm91Z2ggVHlwZVNjcmlwdCdzIHR5cGUgc3lzdGVtXG4gKiAtIFJ1bnRpbWUgdHlwZSBndWFyZHMgZm9yIHNhZmUgdHlwZSBuYXJyb3dpbmdcbiAqIC0gU2FmZSBwYXJzaW5nIHV0aWxpdGllcyB3aXRoIGRldGFpbGVkIGVycm9yIHJlcG9ydGluZ1xuICogLSBTZWN1cml0eSBhdWRpdCBsb2dnaW5nIGZvciByZWxhdGlvbnNoaXAgb3BlcmF0aW9uc1xuICovXG5cbmltcG9ydCB7IHBhcnNlRWxlbWVudElkLCBmb3JtYXRFbGVtZW50SWQgfSBmcm9tICcuLi8uLi91dGlscy9lbGVtZW50SWQuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuXG4vKipcbiAqIEJhc2UgcmVsYXRpb25zaGlwIGludGVyZmFjZSAtIHRoZSBzdG9yYWdlIGZvcm1hdFxuICpcbiAqIFRoaXMgaXMgdGhlIGZ1bmRhbWVudGFsIHJlbGF0aW9uc2hpcCBzdHJ1Y3R1cmUgdGhhdCBnZXRzIHBlcnNpc3RlZCB0byBkaXNrLlxuICogSXQgY29udGFpbnMgb25seSB0aGUgcmF3IGRhdGEgd2l0aG91dCBhbnkgcGFyc2VkIG9yIGNvbXB1dGVkIGZpZWxkcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVsYXRpb25zaGlwOiBCYXNlUmVsYXRpb25zaGlwID0ge1xuICogICBlbGVtZW50OiAnc2tpbGxzOmRlYnVnZ2luZycsXG4gKiAgIHR5cGU6ICdzaW1pbGFyX3RvJyxcbiAqICAgc3RyZW5ndGg6IDAuODUsXG4gKiAgIG1ldGFkYXRhOiB7IHJlYXNvbjogJ0JvdGggaW52b2x2ZSBjb2RlIGFuYWx5c2lzJyB9XG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVJlbGF0aW9uc2hpcCB7XG4gIC8qKiBFbGVtZW50IElEIGluIGZvcm1hdCBcInR5cGU6bmFtZVwiIChlLmcuLCBcInBlcnNvbmFzOmV4cGVydFwiLCBcInNraWxsczpyZWZhY3RvclwiKSAqL1xuICBlbGVtZW50OiBzdHJpbmc7XG5cbiAgLyoqIFNlbWFudGljIHJlbGF0aW9uc2hpcCB0eXBlIGZyb20gUmVsYXRpb25zaGlwVHlwZXMgZW51bSAoZS5nLiwgJ3VzZXMnLCAnc2ltaWxhcl90bycsICdleHRlbmRzJykgKi9cbiAgdHlwZT86IHN0cmluZztcblxuICAvKiogUmVsYXRpb25zaGlwIHN0cmVuZ3RoL2NvbmZpZGVuY2Ugc2NvcmUgYmV0d2VlbiAwLjAgYW5kIDEuMCAoaW5jbHVzaXZlKSAqL1xuICBzdHJlbmd0aD86IG51bWJlcjtcblxuICAvKiogRXh0ZW5zaWJsZSBtZXRhZGF0YSBmb3IgY3VzdG9tIHByb3BlcnRpZXMgKGUuZy4sIHNpbWlsYXJpdHkgc2NvcmVzLCB0aW1lc3RhbXBzKSAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogUGFyc2VkIHJlbGF0aW9uc2hpcCB3aXRoIGV4dHJhY3RlZCB0eXBlIGFuZCBuYW1lIGNvbXBvbmVudHNcbiAqXG4gKiBUaGlzIGlzIHRoZSBydW50aW1lIGZvcm1hdCBhZnRlciBzdWNjZXNzZnVsbHkgcGFyc2luZyBhIEJhc2VSZWxhdGlvbnNoaXAuXG4gKiBJdCBpbmNsdWRlcyBhbGwgYmFzZSBmaWVsZHMgcGx1cyBleHRyYWN0ZWQgbWV0YWRhdGEgZm9yIGVmZmljaWVudCBxdWVyeWluZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcGFyc2VkOiBQYXJzZWRSZWxhdGlvbnNoaXAgPSB7XG4gKiAgIGVsZW1lbnQ6ICdwZXJzb25hczpleHBlcnQtY29kZXInLFxuICogICB0eXBlOiAnc2ltaWxhcl90bycsXG4gKiAgIHN0cmVuZ3RoOiAwLjksXG4gKiAgIHRhcmdldFR5cGU6ICdwZXJzb25hcycsICAvLyBFeHRyYWN0ZWQgZnJvbSBlbGVtZW50XG4gKiAgIHRhcmdldE5hbWU6ICdleHBlcnQtY29kZXInLCAgLy8gRXh0cmFjdGVkIGZyb20gZWxlbWVudFxuICogICBpc1ZhbGlkOiB0cnVlICAvLyBUeXBlIGRpc2NyaW1pbmF0b3JcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRSZWxhdGlvbnNoaXAgZXh0ZW5kcyBCYXNlUmVsYXRpb25zaGlwIHtcbiAgLyoqIEV4dHJhY3RlZCBlbGVtZW50IHR5cGUgKGUuZy4sICdwZXJzb25hcycsICdza2lsbHMnLCAndGVtcGxhdGVzJykgKi9cbiAgdGFyZ2V0VHlwZTogc3RyaW5nO1xuXG4gIC8qKiBFeHRyYWN0ZWQgZWxlbWVudCBuYW1lIChlLmcuLCAnZXhwZXJ0LWNvZGVyJywgJ2RlYnVnZ2luZycpICovXG4gIHRhcmdldE5hbWU6IHN0cmluZztcblxuICAvKiogVHlwZSBkaXNjcmltaW5hdG9yIC0gYWx3YXlzIHRydWUgZm9yIHZhbGlkIHBhcnNlZCByZWxhdGlvbnNoaXBzICovXG4gIGlzVmFsaWQ6IHRydWU7XG59XG5cbi8qKlxuICogSW52YWxpZCByZWxhdGlvbnNoaXAgc3RhdGUgd2l0aCBkaWFnbm9zdGljIGluZm9ybWF0aW9uXG4gKlxuICogVGhpcyB0eXBlIHJlcHJlc2VudHMgYSByZWxhdGlvbnNoaXAgdGhhdCBmYWlsZWQgdG8gcGFyc2UsIHByZXNlcnZpbmdcbiAqIHRoZSBvcmlnaW5hbCBkYXRhIHdoaWxlIHByb3ZpZGluZyBkZXRhaWxlZCBlcnJvciBjb250ZXh0IGZvciBkZWJ1Z2dpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGludmFsaWQ6IEludmFsaWRSZWxhdGlvbnNoaXAgPSB7XG4gKiAgIGVsZW1lbnQ6ICdtYWxmb3JtZWQ6ZWxlbWVudDppZCcsXG4gKiAgIHRhcmdldFR5cGU6IG51bGwsXG4gKiAgIHRhcmdldE5hbWU6IG51bGwsXG4gKiAgIGlzVmFsaWQ6IGZhbHNlLFxuICogICBwYXJzZUVycm9yOiAnSW52YWxpZCBlbGVtZW50IElEIGZvcm1hdDogXCJtYWxmb3JtZWQ6ZWxlbWVudDppZFwiIC0gbXVsdGlwbGUgc2VwYXJhdG9ycy4uLidcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnZhbGlkUmVsYXRpb25zaGlwIGV4dGVuZHMgQmFzZVJlbGF0aW9uc2hpcCB7XG4gIC8qKiBOdWxsIHdoZW4gcGFyc2luZyBmYWlscyAqL1xuICB0YXJnZXRUeXBlOiBudWxsO1xuXG4gIC8qKiBOdWxsIHdoZW4gcGFyc2luZyBmYWlscyAqL1xuICB0YXJnZXROYW1lOiBudWxsO1xuXG4gIC8qKiBUeXBlIGRpc2NyaW1pbmF0b3IgLSBhbHdheXMgZmFsc2UgZm9yIGludmFsaWQgcmVsYXRpb25zaGlwcyAqL1xuICBpc1ZhbGlkOiBmYWxzZTtcblxuICAvKiogRGV0YWlsZWQgZXJyb3IgbWVzc2FnZSB3aXRoIHBvc2l0aW9uIGluZm9ybWF0aW9uIGFuZCBleHBlY3RlZCBmb3JtYXQgKi9cbiAgcGFyc2VFcnJvcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVuaW9uIHR5cGUgZm9yIGFsbCByZWxhdGlvbnNoaXAgdmFyaWFudHNcbiAqL1xuZXhwb3J0IHR5cGUgUmVsYXRpb25zaGlwID0gQmFzZVJlbGF0aW9uc2hpcCB8IFBhcnNlZFJlbGF0aW9uc2hpcCB8IEludmFsaWRSZWxhdGlvbnNoaXA7XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHJlbGF0aW9uc2hpcCBpcyBzdWNjZXNzZnVsbHkgcGFyc2VkXG4gKlxuICogQHBhcmFtIHJlbCAtIFRoZSByZWxhdGlvbnNoaXAgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHJlbGF0aW9uc2hpcCBpcyBhIFBhcnNlZFJlbGF0aW9uc2hpcCB3aXRoIHZhbGlkIGRhdGFcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVsID0gcGFyc2VSZWxhdGlvbnNoaXAoYmFzZVJlbCk7XG4gKiBpZiAoaXNQYXJzZWRSZWxhdGlvbnNoaXAocmVsKSkge1xuICogICAvLyBUeXBlU2NyaXB0IGtub3dzIHJlbCBpcyBQYXJzZWRSZWxhdGlvbnNoaXAgaGVyZVxuICogICBjb25zb2xlLmxvZyhyZWwudGFyZ2V0VHlwZSwgcmVsLnRhcmdldE5hbWUpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcnNlZFJlbGF0aW9uc2hpcChyZWw6IFJlbGF0aW9uc2hpcCk6IHJlbCBpcyBQYXJzZWRSZWxhdGlvbnNoaXAge1xuICByZXR1cm4gJ2lzVmFsaWQnIGluIHJlbCAmJiByZWwuaXNWYWxpZCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgJ3RhcmdldFR5cGUnIGluIHJlbCAmJiByZWwudGFyZ2V0VHlwZSAhPT0gbnVsbCAmJlxuICAgICAgICAgJ3RhcmdldE5hbWUnIGluIHJlbCAmJiByZWwudGFyZ2V0TmFtZSAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgcmVsYXRpb25zaGlwIGZhaWxlZCB0byBwYXJzZVxuICpcbiAqIEBwYXJhbSByZWwgLSBUaGUgcmVsYXRpb25zaGlwIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSByZWxhdGlvbnNoaXAgaXMgYW4gSW52YWxpZFJlbGF0aW9uc2hpcCB3aXRoIGVycm9yIGRldGFpbHNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVsID0gcGFyc2VSZWxhdGlvbnNoaXAoYmFzZVJlbCk7XG4gKiBpZiAoaXNJbnZhbGlkUmVsYXRpb25zaGlwKHJlbCkpIHtcbiAqICAgY29uc29sZS5lcnJvcihgUGFyc2UgZmFpbGVkOiAke3JlbC5wYXJzZUVycm9yfWApO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ludmFsaWRSZWxhdGlvbnNoaXAocmVsOiBSZWxhdGlvbnNoaXApOiByZWwgaXMgSW52YWxpZFJlbGF0aW9uc2hpcCB7XG4gIHJldHVybiAnaXNWYWxpZCcgaW4gcmVsICYmIHJlbC5pc1ZhbGlkID09PSBmYWxzZTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgcmVsYXRpb25zaGlwIGlzIHVucGFyc2VkIChiYXNlIHR5cGUgb25seSlcbiAqXG4gKiBAcGFyYW0gcmVsIC0gVGhlIHJlbGF0aW9uc2hpcCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcmVsYXRpb25zaGlwIGlzIGEgQmFzZVJlbGF0aW9uc2hpcCB3aXRob3V0IHBhcnNlZCBmaWVsZHNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaWYgKGlzQmFzZVJlbGF0aW9uc2hpcChyZWwpKSB7XG4gKiAgIC8vIE5lZWQgdG8gcGFyc2UgdGhpcyByZWxhdGlvbnNoaXAgYmVmb3JlIHVzZVxuICogICBjb25zdCBwYXJzZWQgPSBwYXJzZVJlbGF0aW9uc2hpcChyZWwpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Jhc2VSZWxhdGlvbnNoaXAocmVsOiBSZWxhdGlvbnNoaXApOiByZWwgaXMgQmFzZVJlbGF0aW9uc2hpcCB7XG4gIHJldHVybiAhKCdpc1ZhbGlkJyBpbiByZWwpO1xufVxuXG4vKipcbiAqIFNhZmVseSBwYXJzZSBhIGJhc2UgcmVsYXRpb25zaGlwIGludG8gYSB0eXBlZCByZWxhdGlvbnNoaXAgdmFyaWFudFxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gcGFyc2UgdGhlIGVsZW1lbnQgSUQgYW5kIGV4dHJhY3QgdHlwZS9uYW1lIGNvbXBvbmVudHMuXG4gKiBJZiBwYXJzaW5nIGZhaWxzLCBpdCByZXR1cm5zIGFuIEludmFsaWRSZWxhdGlvbnNoaXAgd2l0aCBkZXRhaWxlZCBlcnJvciBjb250ZXh0XG4gKiBpbmNsdWRpbmcgcG9zaXRpb24gaW5mb3JtYXRpb24gYW5kIHdoYXQgd2FzIGV4cGVjdGVkLlxuICpcbiAqIEBwYXJhbSByZWwgLSBUaGUgYmFzZSByZWxhdGlvbnNoaXAgdG8gcGFyc2VcbiAqIEByZXR1cm5zIFBhcnNlZFJlbGF0aW9uc2hpcCBpZiBzdWNjZXNzZnVsLCBJbnZhbGlkUmVsYXRpb25zaGlwIHdpdGggZGlhZ25vc3RpY3MgaWYgZmFpbGVkXG4gKlxuICogQGV4YW1wbGUgU3VjY2VzcyBjYXNlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBiYXNlOiBCYXNlUmVsYXRpb25zaGlwID0geyBlbGVtZW50OiAnc2tpbGxzOmRlYnVnZ2luZycgfTtcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlUmVsYXRpb25zaGlwKGJhc2UpO1xuICogLy8gcmVzdWx0OiBQYXJzZWRSZWxhdGlvbnNoaXAgd2l0aCB0YXJnZXRUeXBlPSdza2lsbHMnLCB0YXJnZXROYW1lPSdkZWJ1Z2dpbmcnXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBFcnJvciBjYXNlcyB3aXRoIGRldGFpbGVkIGRpYWdub3N0aWNzXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwYXJzZVJlbGF0aW9uc2hpcCh7IGVsZW1lbnQ6ICduby1zZXBhcmF0b3InIH0pO1xuICogLy8gRXJyb3I6IFwibWlzc2luZyBzZXBhcmF0b3IgJzonXCJcbiAqXG4gKiBwYXJzZVJlbGF0aW9uc2hpcCh7IGVsZW1lbnQ6ICc6bWlzc2luZy10eXBlJyB9KTtcbiAqIC8vIEVycm9yOiBcIm1pc3NpbmcgdHlwZSBiZWZvcmUgJzonXCJcbiAqXG4gKiBwYXJzZVJlbGF0aW9uc2hpcCh7IGVsZW1lbnQ6ICd0b286bWFueTpjb2xvbnMnIH0pO1xuICogLy8gRXJyb3I6IFwibXVsdGlwbGUgc2VwYXJhdG9ycyAnOicgZm91bmQgYXQgcG9zaXRpb25zIFszLCA4XVwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVsYXRpb25zaGlwKHJlbDogQmFzZVJlbGF0aW9uc2hpcCk6IFBhcnNlZFJlbGF0aW9uc2hpcCB8IEludmFsaWRSZWxhdGlvbnNoaXAge1xuICBpZiAoIXJlbC5lbGVtZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlbCxcbiAgICAgIHRhcmdldFR5cGU6IG51bGwsXG4gICAgICB0YXJnZXROYW1lOiBudWxsLFxuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBwYXJzZUVycm9yOiAnSW52YWxpZCBlbGVtZW50IElEOiBtaXNzaW5nIG9yIGVtcHR5IChleHBlY3RlZCBmb3JtYXQ6IFwidHlwZTpuYW1lXCIpJ1xuICAgIH07XG4gIH1cblxuICAvLyBGSVg6IERNQ1AtU0VDLTAwNCAtIE5vcm1hbGl6ZSBVbmljb2RlIGJlZm9yZSBwYXJzaW5nIHRvIHByZXZlbnQgYXR0YWNrc1xuICBjb25zdCBub3JtYWxpemVkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUocmVsLmVsZW1lbnQpO1xuICBpZiAoIW5vcm1hbGl6ZWQuaXNWYWxpZCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZWwsXG4gICAgICB0YXJnZXRUeXBlOiBudWxsLFxuICAgICAgdGFyZ2V0TmFtZTogbnVsbCxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgcGFyc2VFcnJvcjogYEludmFsaWQgZWxlbWVudCBJRCAtIFVuaWNvZGUgc2VjdXJpdHkgaXNzdWU6ICR7bm9ybWFsaXplZC5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlRWxlbWVudElkKG5vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnQpO1xuXG4gIGlmICghcGFyc2VkKSB7XG4gICAgLy8gUHJvdmlkZSBkZXRhaWxlZCBlcnJvciBjb250ZXh0IGFib3V0IHdoYXQgd2FzIGZvdW5kICh1c2Ugbm9ybWFsaXplZCBmb3Igc2FmZXR5KVxuICAgIGNvbnN0IGNvbG9uSW5kZXggPSBub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50LmluZGV4T2YoJzonKTtcbiAgICBsZXQgZXJyb3JEZXRhaWw6IHN0cmluZztcblxuICAgIGlmIChjb2xvbkluZGV4ID09PSAtMSkge1xuICAgICAgZXJyb3JEZXRhaWwgPSBgSW52YWxpZCBlbGVtZW50IElEIGZvcm1hdDogXCIke25vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnR9XCIgLSBtaXNzaW5nIHNlcGFyYXRvciAnOicgKGV4cGVjdGVkIGZvcm1hdDogXCJ0eXBlOm5hbWVcIilgO1xuICAgIH0gZWxzZSBpZiAoY29sb25JbmRleCA9PT0gMCkge1xuICAgICAgZXJyb3JEZXRhaWwgPSBgSW52YWxpZCBlbGVtZW50IElEIGZvcm1hdDogXCIke25vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnR9XCIgLSBtaXNzaW5nIHR5cGUgYmVmb3JlICc6JyAoZXhwZWN0ZWQgZm9ybWF0OiBcInR5cGU6bmFtZVwiKWA7XG4gICAgfSBlbHNlIGlmIChjb2xvbkluZGV4ID09PSBub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50Lmxlbmd0aCAtIDEpIHtcbiAgICAgIGVycm9yRGV0YWlsID0gYEludmFsaWQgZWxlbWVudCBJRCBmb3JtYXQ6IFwiJHtub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50fVwiIC0gbWlzc2luZyBuYW1lIGFmdGVyICc6JyAoZXhwZWN0ZWQgZm9ybWF0OiBcInR5cGU6bmFtZVwiKWA7XG4gICAgfSBlbHNlIGlmIChub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50LnNwbGl0KCc6JykubGVuZ3RoID4gMikge1xuICAgICAgY29uc3QgcG9zaXRpb25zID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnRbaV0gPT09ICc6JykgcG9zaXRpb25zLnB1c2goaSk7XG4gICAgICB9XG4gICAgICBlcnJvckRldGFpbCA9IGBJbnZhbGlkIGVsZW1lbnQgSUQgZm9ybWF0OiBcIiR7bm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudH1cIiAtIG11bHRpcGxlIHNlcGFyYXRvcnMgJzonIGZvdW5kIGF0IHBvc2l0aW9ucyBbJHtwb3NpdGlvbnMuam9pbignLCAnKX1dIChleHBlY3RlZCBmb3JtYXQ6IFwidHlwZTpuYW1lXCIgd2l0aCBzaW5nbGUgJzonKWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yRGV0YWlsID0gYEludmFsaWQgZWxlbWVudCBJRCBmb3JtYXQ6IFwiJHtub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50fVwiIChleHBlY3RlZCBmb3JtYXQ6IFwidHlwZTpuYW1lXCIpYDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVsLFxuICAgICAgdGFyZ2V0VHlwZTogbnVsbCxcbiAgICAgIHRhcmdldE5hbWU6IG51bGwsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIHBhcnNlRXJyb3I6IGVycm9yRGV0YWlsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ucmVsLFxuICAgIHRhcmdldFR5cGU6IHBhcnNlZC50eXBlLFxuICAgIHRhcmdldE5hbWU6IHBhcnNlZC5uYW1lLFxuICAgIGlzVmFsaWQ6IHRydWVcbiAgfTtcbn1cblxuLyoqXG4gKiBCYXRjaCBwYXJzZSByZWxhdGlvbnNoaXBzIHdpdGggdHlwZSBzYWZldHlcbiAqIEZpbHRlcnMgb3V0IGludmFsaWQgcmVsYXRpb25zaGlwcyBieSBkZWZhdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlbGF0aW9uc2hpcHMoXG4gIHJlbGF0aW9uc2hpcHM6IEJhc2VSZWxhdGlvbnNoaXBbXSxcbiAgaW5jbHVkZUludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZVxuKTogUGFyc2VkUmVsYXRpb25zaGlwW10gfCAoUGFyc2VkUmVsYXRpb25zaGlwIHwgSW52YWxpZFJlbGF0aW9uc2hpcClbXSB7XG4gIGNvbnN0IHBhcnNlZCA9IHJlbGF0aW9uc2hpcHMubWFwKHBhcnNlUmVsYXRpb25zaGlwKTtcblxuICBpZiAoaW5jbHVkZUludmFsaWQpIHtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgLy8gRmlsdGVyIHRvIG9ubHkgdmFsaWQgcmVsYXRpb25zaGlwc1xuICByZXR1cm4gcGFyc2VkLmZpbHRlcihpc1BhcnNlZFJlbGF0aW9uc2hpcCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IHJlbGF0aW9uc2hpcCB3aXRoIHZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aW9uc2hpcChcbiAgdGFyZ2V0VHlwZTogc3RyaW5nLFxuICB0YXJnZXROYW1lOiBzdHJpbmcsXG4gIHJlbGF0aW9uVHlwZT86IHN0cmluZyxcbiAgc3RyZW5ndGg/OiBudW1iZXIsXG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PlxuKTogUGFyc2VkUmVsYXRpb25zaGlwIHtcbiAgLy8gRklYOiBETUNQLVNFQy0wMDQgLSBOb3JtYWxpemUgVW5pY29kZSBpbiB1c2VyIGlucHV0IHRvIHByZXZlbnQgaG9tb2dyYXBoIGF0dGFja3NcbiAgLy8gUHJldmlvdXNseTogQWNjZXB0aW5nIHJhdyB1c2VyIGlucHV0IHdpdGhvdXQgbm9ybWFsaXphdGlvblxuICAvLyBOb3c6IE5vcm1hbGl6aW5nIGFsbCBzdHJpbmcgaW5wdXRzIHRvIHByZXZlbnQgVW5pY29kZS1iYXNlZCBzZWN1cml0eSBhdHRhY2tzXG4gIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodGFyZ2V0VHlwZSk7XG4gIGlmICghbm9ybWFsaXplZFR5cGUuaXNWYWxpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0YXJnZXQgdHlwZSAtIFVuaWNvZGUgc2VjdXJpdHkgaXNzdWU6ICR7bm9ybWFsaXplZFR5cGUuZGV0ZWN0ZWRJc3N1ZXM/LmpvaW4oJywgJyl9YCk7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkTmFtZSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHRhcmdldE5hbWUpO1xuICBpZiAoIW5vcm1hbGl6ZWROYW1lLmlzVmFsaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFyZ2V0IG5hbWUgLSBVbmljb2RlIHNlY3VyaXR5IGlzc3VlOiAke25vcm1hbGl6ZWROYW1lLmRldGVjdGVkSXNzdWVzPy5qb2luKCcsICcpfWApO1xuICB9XG5cbiAgLy8gQWxzbyBub3JtYWxpemUgcmVsYXRpb25zaGlwIHR5cGUgaWYgcHJvdmlkZWRcbiAgbGV0IG5vcm1hbGl6ZWRSZWxUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmIChyZWxhdGlvblR5cGUpIHtcbiAgICBjb25zdCBub3JtYWxpemVkUmVsID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUocmVsYXRpb25UeXBlKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRSZWwuaXNWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlbGF0aW9uc2hpcCB0eXBlIC0gVW5pY29kZSBzZWN1cml0eSBpc3N1ZTogJHtub3JtYWxpemVkUmVsLmRldGVjdGVkSXNzdWVzPy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBub3JtYWxpemVkUmVsVHlwZSA9IG5vcm1hbGl6ZWRSZWwubm9ybWFsaXplZENvbnRlbnQ7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBzdHJlbmd0aCBpcyBpbiByYW5nZVxuICBpZiAoc3RyZW5ndGggIT09IHVuZGVmaW5lZCAmJiAoc3RyZW5ndGggPCAwIHx8IHN0cmVuZ3RoID4gMSB8fCBOdW1iZXIuaXNOYU4oc3RyZW5ndGgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVsYXRpb25zaGlwIHN0cmVuZ3RoIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBnb3QgJHtzdHJlbmd0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IGVsZW1lbnQgPSBmb3JtYXRFbGVtZW50SWQobm9ybWFsaXplZFR5cGUubm9ybWFsaXplZENvbnRlbnQsIG5vcm1hbGl6ZWROYW1lLm5vcm1hbGl6ZWRDb250ZW50KTtcblxuICAvLyBGSVg6IEFkZCBzZWN1cml0eSBhdWRpdCBsb2dnaW5nIGZvciByZWxhdGlvbnNoaXAgY3JlYXRpb25cbiAgLy8gUHJldmlvdXNseTogTm8gbG9nZ2luZyBvZiByZWxhdGlvbnNoaXAgb3BlcmF0aW9uc1xuICAvLyBOb3c6IExvZyByZWxhdGlvbnNoaXAgY3JlYXRpb24gZm9yIHNlY3VyaXR5IGF1ZGl0IHRyYWlsXG4gIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICB0eXBlOiAnRUxFTUVOVF9DUkVBVEVEJyxcbiAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgc291cmNlOiAnUmVsYXRpb25zaGlwVHlwZXMuY3JlYXRlUmVsYXRpb25zaGlwJyxcbiAgICBkZXRhaWxzOiBgQ3JlYXRlZCByZWxhdGlvbnNoaXAgdG8gJHtlbGVtZW50fWAsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIHRhcmdldFR5cGU6IG5vcm1hbGl6ZWRUeXBlLm5vcm1hbGl6ZWRDb250ZW50LFxuICAgICAgdGFyZ2V0TmFtZTogbm9ybWFsaXplZE5hbWUubm9ybWFsaXplZENvbnRlbnQsXG4gICAgICByZWxhdGlvblR5cGU6IG5vcm1hbGl6ZWRSZWxUeXBlIHx8ICd1bnNwZWNpZmllZCcsXG4gICAgICBzdHJlbmd0aDogc3RyZW5ndGggPz8gMS4wXG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGVsZW1lbnQsXG4gICAgdHlwZTogbm9ybWFsaXplZFJlbFR5cGUsXG4gICAgc3RyZW5ndGgsXG4gICAgbWV0YWRhdGEsXG4gICAgdGFyZ2V0VHlwZTogbm9ybWFsaXplZFR5cGUubm9ybWFsaXplZENvbnRlbnQsXG4gICAgdGFyZ2V0TmFtZTogbm9ybWFsaXplZE5hbWUubm9ybWFsaXplZENvbnRlbnQsXG4gICAgaXNWYWxpZDogdHJ1ZVxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgcmVsYXRpb25zaGlwIGhhcyByZXF1aXJlZCBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUmVsYXRpb25zaGlwKHJlbDogYW55KTogcmVsIGlzIEJhc2VSZWxhdGlvbnNoaXAge1xuICByZXR1cm4gISEocmVsICYmXG4gICAgICAgICAgICB0eXBlb2YgcmVsID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgJ2VsZW1lbnQnIGluIHJlbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHJlbC5lbGVtZW50ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgcmVsLmVsZW1lbnQubGVuZ3RoID4gMCk7XG59XG5cbi8qKlxuICogR3JvdXAgcmVsYXRpb25zaGlwcyBieSB0YXJnZXQgdHlwZSBmb3IgZWZmaWNpZW50IHByb2Nlc3NpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwUmVsYXRpb25zaGlwc0J5VHlwZShcbiAgcmVsYXRpb25zaGlwczogUGFyc2VkUmVsYXRpb25zaGlwW11cbik6IE1hcDxzdHJpbmcsIFBhcnNlZFJlbGF0aW9uc2hpcFtdPiB7XG4gIGNvbnN0IGdyb3VwZWQgPSBuZXcgTWFwPHN0cmluZywgUGFyc2VkUmVsYXRpb25zaGlwW10+KCk7XG5cbiAgZm9yIChjb25zdCByZWwgb2YgcmVsYXRpb25zaGlwcykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZ3JvdXBlZC5nZXQocmVsLnRhcmdldFR5cGUpIHx8IFtdO1xuICAgIGV4aXN0aW5nLnB1c2gocmVsKTtcbiAgICBncm91cGVkLnNldChyZWwudGFyZ2V0VHlwZSwgZXhpc3RpbmcpO1xuICB9XG5cbiAgcmV0dXJuIGdyb3VwZWQ7XG59XG5cbi8qKlxuICogRmluZCBkdXBsaWNhdGUgcmVsYXRpb25zaGlwcyAoc2FtZSB0YXJnZXQgZWxlbWVudClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREdXBsaWNhdGVSZWxhdGlvbnNoaXBzKFxuICByZWxhdGlvbnNoaXBzOiBCYXNlUmVsYXRpb25zaGlwW11cbik6IEJhc2VSZWxhdGlvbnNoaXBbXVtdIHtcbiAgY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBCYXNlUmVsYXRpb25zaGlwW10+KCk7XG5cbiAgZm9yIChjb25zdCByZWwgb2YgcmVsYXRpb25zaGlwcykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZWxlbWVudE1hcC5nZXQocmVsLmVsZW1lbnQpIHx8IFtdO1xuICAgIGV4aXN0aW5nLnB1c2gocmVsKTtcbiAgICBlbGVtZW50TWFwLnNldChyZWwuZWxlbWVudCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgLy8gUmV0dXJuIG9ubHkgZ3JvdXBzIHdpdGggZHVwbGljYXRlc1xuICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50TWFwLnZhbHVlcygpKS5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAubGVuZ3RoID4gMSk7XG59XG5cbi8qKlxuICogTWVyZ2UgZHVwbGljYXRlIHJlbGF0aW9uc2hpcHMsIGtlZXBpbmcgaGlnaGVzdCBzdHJlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVkdXBsaWNhdGVSZWxhdGlvbnNoaXBzKFxuICByZWxhdGlvbnNoaXBzOiBCYXNlUmVsYXRpb25zaGlwW11cbik6IEJhc2VSZWxhdGlvbnNoaXBbXSB7XG4gIGNvbnN0IGVsZW1lbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgQmFzZVJlbGF0aW9uc2hpcD4oKTtcblxuICBmb3IgKGNvbnN0IHJlbCBvZiByZWxhdGlvbnNoaXBzKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBlbGVtZW50TWFwLmdldChyZWwuZWxlbWVudCk7XG5cbiAgICBpZiAoIWV4aXN0aW5nIHx8IChyZWwuc3RyZW5ndGggfHwgMCkgPiAoZXhpc3Rpbmcuc3RyZW5ndGggfHwgMCkpIHtcbiAgICAgIGVsZW1lbnRNYXAuc2V0KHJlbC5lbGVtZW50LCByZWwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnRNYXAudmFsdWVzKCkpO1xufVxuXG4vKipcbiAqIFNvcnQgcmVsYXRpb25zaGlwcyBieSBzdHJlbmd0aCAoZGVzY2VuZGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRSZWxhdGlvbnNoaXBzQnlTdHJlbmd0aChcbiAgcmVsYXRpb25zaGlwczogQmFzZVJlbGF0aW9uc2hpcFtdXG4pOiBCYXNlUmVsYXRpb25zaGlwW10ge1xuICByZXR1cm4gWy4uLnJlbGF0aW9uc2hpcHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBzdHJlbmd0aEEgPSBhLnN0cmVuZ3RoIHx8IDA7XG4gICAgY29uc3Qgc3RyZW5ndGhCID0gYi5zdHJlbmd0aCB8fCAwO1xuICAgIHJldHVybiBzdHJlbmd0aEIgLSBzdHJlbmd0aEE7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbHRlciByZWxhdGlvbnNoaXBzIGJ5IG1pbmltdW0gc3RyZW5ndGggdGhyZXNob2xkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJSZWxhdGlvbnNoaXBzQnlTdHJlbmd0aChcbiAgcmVsYXRpb25zaGlwczogQmFzZVJlbGF0aW9uc2hpcFtdLFxuICBtaW5TdHJlbmd0aDogbnVtYmVyXG4pOiBCYXNlUmVsYXRpb25zaGlwW10ge1xuICByZXR1cm4gcmVsYXRpb25zaGlwcy5maWx0ZXIocmVsID0+IChyZWwuc3RyZW5ndGggfHwgMCkgPj0gbWluU3RyZW5ndGgpO1xufVxuXG4vKipcbiAqIFJlbGF0aW9uc2hpcCB0eXBlIGFsaWFzZXMgZm9yIGNvbW1vbiBwYXR0ZXJuc1xuICovXG5leHBvcnQgY29uc3QgUmVsYXRpb25zaGlwVHlwZXMgPSB7XG4gIC8vIFNpbWlsYXJpdHkgcmVsYXRpb25zaGlwc1xuICBTSU1JTEFSX1RPOiAnc2ltaWxhcl90bycsXG5cbiAgLy8gVXNhZ2UgcmVsYXRpb25zaGlwc1xuICBVU0VTOiAndXNlcycsXG4gIFVTRURfQlk6ICd1c2VkX2J5JyxcblxuICAvLyBFeHRlbnNpb24gcmVsYXRpb25zaGlwc1xuICBFWFRFTkRTOiAnZXh0ZW5kcycsXG4gIEVYVEVOREVEX0JZOiAnZXh0ZW5kZWRfYnknLFxuXG4gIC8vIENvbXBvc2l0aW9uIHJlbGF0aW9uc2hpcHNcbiAgQ09OVEFJTlM6ICdjb250YWlucycsXG4gIENPTlRBSU5FRF9CWTogJ2NvbnRhaW5lZF9ieScsXG5cbiAgLy8gRGVidWdnaW5nIHJlbGF0aW9uc2hpcHNcbiAgSEVMUFNfREVCVUc6ICdoZWxwc19kZWJ1ZycsXG4gIERFQlVHR0VEX0JZOiAnZGVidWdnZWRfYnknLFxuXG4gIC8vIENvbmZsaWN0IHJlbGF0aW9uc2hpcHNcbiAgQ09OVFJBRElDVFM6ICdjb250cmFkaWN0cycsXG4gIFNVUFBPUlRTOiAnc3VwcG9ydHMnLFxuXG4gIC8vIFNlbWFudGljIHJlbGF0aW9uc2hpcHNcbiAgU0VNQU5USUNfU0lNSUxBUklUWTogJ3NlbWFudGljX3NpbWlsYXJpdHknXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbnNoaXBUeXBlID0gdHlwZW9mIFJlbGF0aW9uc2hpcFR5cGVzW2tleW9mIHR5cGVvZiBSZWxhdGlvbnNoaXBUeXBlc107Il19
|
|
327
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsYXRpb25zaGlwVHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcG9ydGZvbGlvL3R5cGVzL1JlbGF0aW9uc2hpcFR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFpR2pGOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEdBQWlCO0lBQ3BELE9BQU8sU0FBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLElBQUk7UUFDeEMsWUFBWSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLElBQUk7UUFDOUMsWUFBWSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQztBQUN4RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxHQUFpQjtJQUNyRCxPQUFPLFNBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBaUI7SUFDbEQsT0FBTyxDQUFDLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxHQUFxQjtJQUNyRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE9BQU87WUFDTCxHQUFHLEdBQUc7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LFlBQVksRUFBRSxjQUFjO0lBRTVCLDBCQUEwQjtJQUMxQixXQUFXLEVBQUUsYUFBYTtJQUMxQixXQUFXLEVBQUUsYUFBYTtJQUUxQix5QkFBeUI7SUFDekIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsUUFBUSxFQUFFLFVBQVU7SUFFcEIseUJBQXlCO0lBQ3pCLG1CQUFtQixFQUFFLHFCQUFxQjtDQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlLXNhZmUgcmVsYXRpb25zaGlwIGRlZmluaXRpb25zIGZvciBFbmhhbmNlZCBJbmRleFxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB0eXBlIHN5c3RlbSBmb3IgbWFuYWdpbmcgcmVsYXRpb25zaGlwc1xuICogYmV0d2VlbiBlbGVtZW50cyBpbiB0aGUgRG9sbGhvdXNlTUNQIEVuaGFuY2VkIEluZGV4LiBJdCBpbXBsZW1lbnRzIGEgdGhyZWUtdGllclxuICogdHlwZSBoaWVyYXJjaHkgdGhhdCBlbnN1cmVzIGJvdGggY29tcGlsZS10aW1lIGFuZCBydW50aW1lIHNhZmV0eS5cbiAqXG4gKiAjIyBUeXBlIEhpZXJhcmNoeTpcbiAqIDEuIEJhc2VSZWxhdGlvbnNoaXAgLSBUaGUgc3RvcmFnZSBmb3JtYXQgKHdoYXQncyBwZXJzaXN0ZWQgdG8gZGlzaylcbiAqIDIuIFBhcnNlZFJlbGF0aW9uc2hpcCAtIFZhbGlkIHJ1bnRpbWUgZm9ybWF0IHdpdGggZXh0cmFjdGVkIG1ldGFkYXRhXG4gKiAzLiBJbnZhbGlkUmVsYXRpb25zaGlwIC0gRXJyb3Igc3RhdGUgd2l0aCBkZXRhaWxlZCBkaWFnbm9zdGljc1xuICpcbiAqICMjIEtleSBGZWF0dXJlczpcbiAqIC0gU3Ryb25nbHktdHlwZWQgaW50ZXJmYWNlcyB3aXRoIGRpc2NyaW1pbmF0ZWQgdW5pb25zXG4gKiAtIFJ1bnRpbWUgdHlwZSBndWFyZHMgZm9yIHNhZmUgdHlwZSBuYXJyb3dpbmdcbiAqIC0gRGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMgd2l0aCBwb3NpdGlvbiBpbmZvcm1hdGlvblxuICogLSBCYXRjaCBwcm9jZXNzaW5nIHV0aWxpdGllcyB3aXRoIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnNcbiAqIC0gUmVsYXRpb25zaGlwIGRlZHVwbGljYXRpb24gYW5kIHNvcnRpbmcgYWxnb3JpdGhtc1xuICpcbiAqICMjIFVzYWdlIEV4YW1wbGU6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBQYXJzZSBhIHJlbGF0aW9uc2hpcCBmcm9tIHN0b3JhZ2VcbiAqIGNvbnN0IHN0b3JlZDogQmFzZVJlbGF0aW9uc2hpcCA9IHsgZWxlbWVudDogJ3BlcnNvbmFzOmV4cGVydC1jb2RlcicgfTtcbiAqIGNvbnN0IHBhcnNlZCA9IHBhcnNlUmVsYXRpb25zaGlwKHN0b3JlZCk7XG4gKlxuICogaWYgKGlzUGFyc2VkUmVsYXRpb25zaGlwKHBhcnNlZCkpIHtcbiAqICAgY29uc29sZS5sb2coYFR5cGU6ICR7cGFyc2VkLnRhcmdldFR5cGV9LCBOYW1lOiAke3BhcnNlZC50YXJnZXROYW1lfWApO1xuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS5lcnJvcihgUGFyc2UgZmFpbGVkOiAke3BhcnNlZC5wYXJzZUVycm9yfWApO1xuICogfVxuICogYGBgXG4gKlxuICogRklYRVMgSU1QTEVNRU5URUQgKElzc3VlICMxMTAzKTpcbiAqIC0gVHlwZS1zYWZlIHJlbGF0aW9uc2hpcCB2YXJpYW50cyB3aXRoIGRpc2NyaW1pbmF0ZWQgdW5pb25zXG4gKiAtIENvbXBpbGUtdGltZSB2YWxpZGF0aW9uIHRocm91Z2ggVHlwZVNjcmlwdCdzIHR5cGUgc3lzdGVtXG4gKiAtIFJ1bnRpbWUgdHlwZSBndWFyZHMgZm9yIHNhZmUgdHlwZSBuYXJyb3dpbmdcbiAqIC0gU2FmZSBwYXJzaW5nIHV0aWxpdGllcyB3aXRoIGRldGFpbGVkIGVycm9yIHJlcG9ydGluZ1xuICogLSBTZWN1cml0eSBhdWRpdCBsb2dnaW5nIGZvciByZWxhdGlvbnNoaXAgb3BlcmF0aW9uc1xuICovXG5cbmltcG9ydCB7IHBhcnNlRWxlbWVudElkLCBmb3JtYXRFbGVtZW50SWQgfSBmcm9tICcuLi8uLi91dGlscy9lbGVtZW50SWQuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5cbi8qKlxuICogQmFzZSByZWxhdGlvbnNoaXAgaW50ZXJmYWNlIC0gdGhlIHN0b3JhZ2UgZm9ybWF0XG4gKlxuICogVGhpcyBpcyB0aGUgZnVuZGFtZW50YWwgcmVsYXRpb25zaGlwIHN0cnVjdHVyZSB0aGF0IGdldHMgcGVyc2lzdGVkIHRvIGRpc2suXG4gKiBJdCBjb250YWlucyBvbmx5IHRoZSByYXcgZGF0YSB3aXRob3V0IGFueSBwYXJzZWQgb3IgY29tcHV0ZWQgZmllbGRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZWxhdGlvbnNoaXA6IEJhc2VSZWxhdGlvbnNoaXAgPSB7XG4gKiAgIGVsZW1lbnQ6ICdza2lsbHM6ZGVidWdnaW5nJyxcbiAqICAgdHlwZTogJ3NpbWlsYXJfdG8nLFxuICogICBzdHJlbmd0aDogMC44NSxcbiAqICAgbWV0YWRhdGE6IHsgcmVhc29uOiAnQm90aCBpbnZvbHZlIGNvZGUgYW5hbHlzaXMnIH1cbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlUmVsYXRpb25zaGlwIHtcbiAgLyoqIEVsZW1lbnQgSUQgaW4gZm9ybWF0IFwidHlwZTpuYW1lXCIgKGUuZy4sIFwicGVyc29uYXM6ZXhwZXJ0XCIsIFwic2tpbGxzOnJlZmFjdG9yXCIpICovXG4gIGVsZW1lbnQ6IHN0cmluZztcblxuICAvKiogU2VtYW50aWMgcmVsYXRpb25zaGlwIHR5cGUgZnJvbSBSZWxhdGlvbnNoaXBUeXBlcyBlbnVtIChlLmcuLCAndXNlcycsICdzaW1pbGFyX3RvJywgJ2V4dGVuZHMnKSAqL1xuICB0eXBlPzogc3RyaW5nO1xuXG4gIC8qKiBSZWxhdGlvbnNoaXAgc3RyZW5ndGgvY29uZmlkZW5jZSBzY29yZSBiZXR3ZWVuIDAuMCBhbmQgMS4wIChpbmNsdXNpdmUpICovXG4gIHN0cmVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKiBFeHRlbnNpYmxlIG1ldGFkYXRhIGZvciBjdXN0b20gcHJvcGVydGllcyAoZS5nLiwgc2ltaWxhcml0eSBzY29yZXMsIHRpbWVzdGFtcHMpICovXG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBQYXJzZWQgcmVsYXRpb25zaGlwIHdpdGggZXh0cmFjdGVkIHR5cGUgYW5kIG5hbWUgY29tcG9uZW50c1xuICpcbiAqIFRoaXMgaXMgdGhlIHJ1bnRpbWUgZm9ybWF0IGFmdGVyIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIGEgQmFzZVJlbGF0aW9uc2hpcC5cbiAqIEl0IGluY2x1ZGVzIGFsbCBiYXNlIGZpZWxkcyBwbHVzIGV4dHJhY3RlZCBtZXRhZGF0YSBmb3IgZWZmaWNpZW50IHF1ZXJ5aW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBwYXJzZWQ6IFBhcnNlZFJlbGF0aW9uc2hpcCA9IHtcbiAqICAgZWxlbWVudDogJ3BlcnNvbmFzOmV4cGVydC1jb2RlcicsXG4gKiAgIHR5cGU6ICdzaW1pbGFyX3RvJyxcbiAqICAgc3RyZW5ndGg6IDAuOSxcbiAqICAgdGFyZ2V0VHlwZTogJ3BlcnNvbmFzJywgIC8vIEV4dHJhY3RlZCBmcm9tIGVsZW1lbnRcbiAqICAgdGFyZ2V0TmFtZTogJ2V4cGVydC1jb2RlcicsICAvLyBFeHRyYWN0ZWQgZnJvbSBlbGVtZW50XG4gKiAgIGlzVmFsaWQ6IHRydWUgIC8vIFR5cGUgZGlzY3JpbWluYXRvclxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFJlbGF0aW9uc2hpcCBleHRlbmRzIEJhc2VSZWxhdGlvbnNoaXAge1xuICAvKiogRXh0cmFjdGVkIGVsZW1lbnQgdHlwZSAoZS5nLiwgJ3BlcnNvbmFzJywgJ3NraWxscycsICd0ZW1wbGF0ZXMnKSAqL1xuICB0YXJnZXRUeXBlOiBzdHJpbmc7XG5cbiAgLyoqIEV4dHJhY3RlZCBlbGVtZW50IG5hbWUgKGUuZy4sICdleHBlcnQtY29kZXInLCAnZGVidWdnaW5nJykgKi9cbiAgdGFyZ2V0TmFtZTogc3RyaW5nO1xuXG4gIC8qKiBUeXBlIGRpc2NyaW1pbmF0b3IgLSBhbHdheXMgdHJ1ZSBmb3IgdmFsaWQgcGFyc2VkIHJlbGF0aW9uc2hpcHMgKi9cbiAgaXNWYWxpZDogdHJ1ZTtcbn1cblxuLyoqXG4gKiBJbnZhbGlkIHJlbGF0aW9uc2hpcCBzdGF0ZSB3aXRoIGRpYWdub3N0aWMgaW5mb3JtYXRpb25cbiAqXG4gKiBUaGlzIHR5cGUgcmVwcmVzZW50cyBhIHJlbGF0aW9uc2hpcCB0aGF0IGZhaWxlZCB0byBwYXJzZSwgcHJlc2VydmluZ1xuICogdGhlIG9yaWdpbmFsIGRhdGEgd2hpbGUgcHJvdmlkaW5nIGRldGFpbGVkIGVycm9yIGNvbnRleHQgZm9yIGRlYnVnZ2luZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgaW52YWxpZDogSW52YWxpZFJlbGF0aW9uc2hpcCA9IHtcbiAqICAgZWxlbWVudDogJ21hbGZvcm1lZDplbGVtZW50OmlkJyxcbiAqICAgdGFyZ2V0VHlwZTogbnVsbCxcbiAqICAgdGFyZ2V0TmFtZTogbnVsbCxcbiAqICAgaXNWYWxpZDogZmFsc2UsXG4gKiAgIHBhcnNlRXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgSUQgZm9ybWF0OiBcIm1hbGZvcm1lZDplbGVtZW50OmlkXCIgLSBtdWx0aXBsZSBzZXBhcmF0b3JzLi4uJ1xuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludmFsaWRSZWxhdGlvbnNoaXAgZXh0ZW5kcyBCYXNlUmVsYXRpb25zaGlwIHtcbiAgLyoqIE51bGwgd2hlbiBwYXJzaW5nIGZhaWxzICovXG4gIHRhcmdldFR5cGU6IG51bGw7XG5cbiAgLyoqIE51bGwgd2hlbiBwYXJzaW5nIGZhaWxzICovXG4gIHRhcmdldE5hbWU6IG51bGw7XG5cbiAgLyoqIFR5cGUgZGlzY3JpbWluYXRvciAtIGFsd2F5cyBmYWxzZSBmb3IgaW52YWxpZCByZWxhdGlvbnNoaXBzICovXG4gIGlzVmFsaWQ6IGZhbHNlO1xuXG4gIC8qKiBEZXRhaWxlZCBlcnJvciBtZXNzYWdlIHdpdGggcG9zaXRpb24gaW5mb3JtYXRpb24gYW5kIGV4cGVjdGVkIGZvcm1hdCAqL1xuICBwYXJzZUVycm9yOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVW5pb24gdHlwZSBmb3IgYWxsIHJlbGF0aW9uc2hpcCB2YXJpYW50c1xuICovXG5leHBvcnQgdHlwZSBSZWxhdGlvbnNoaXAgPSBCYXNlUmVsYXRpb25zaGlwIHwgUGFyc2VkUmVsYXRpb25zaGlwIHwgSW52YWxpZFJlbGF0aW9uc2hpcDtcblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgcmVsYXRpb25zaGlwIGlzIHN1Y2Nlc3NmdWxseSBwYXJzZWRcbiAqXG4gKiBAcGFyYW0gcmVsIC0gVGhlIHJlbGF0aW9uc2hpcCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcmVsYXRpb25zaGlwIGlzIGEgUGFyc2VkUmVsYXRpb25zaGlwIHdpdGggdmFsaWQgZGF0YVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZWwgPSBwYXJzZVJlbGF0aW9uc2hpcChiYXNlUmVsKTtcbiAqIGlmIChpc1BhcnNlZFJlbGF0aW9uc2hpcChyZWwpKSB7XG4gKiAgIC8vIFR5cGVTY3JpcHQga25vd3MgcmVsIGlzIFBhcnNlZFJlbGF0aW9uc2hpcCBoZXJlXG4gKiAgIGNvbnNvbGUubG9nKHJlbC50YXJnZXRUeXBlLCByZWwudGFyZ2V0TmFtZSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyc2VkUmVsYXRpb25zaGlwKHJlbDogUmVsYXRpb25zaGlwKTogcmVsIGlzIFBhcnNlZFJlbGF0aW9uc2hpcCB7XG4gIHJldHVybiAnaXNWYWxpZCcgaW4gcmVsICYmIHJlbC5pc1ZhbGlkID09PSB0cnVlICYmXG4gICAgICAgICAndGFyZ2V0VHlwZScgaW4gcmVsICYmIHJlbC50YXJnZXRUeXBlICE9PSBudWxsICYmXG4gICAgICAgICAndGFyZ2V0TmFtZScgaW4gcmVsICYmIHJlbC50YXJnZXROYW1lICE9PSBudWxsO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSByZWxhdGlvbnNoaXAgZmFpbGVkIHRvIHBhcnNlXG4gKlxuICogQHBhcmFtIHJlbCAtIFRoZSByZWxhdGlvbnNoaXAgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHJlbGF0aW9uc2hpcCBpcyBhbiBJbnZhbGlkUmVsYXRpb25zaGlwIHdpdGggZXJyb3IgZGV0YWlsc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZWwgPSBwYXJzZVJlbGF0aW9uc2hpcChiYXNlUmVsKTtcbiAqIGlmIChpc0ludmFsaWRSZWxhdGlvbnNoaXAocmVsKSkge1xuICogICBjb25zb2xlLmVycm9yKGBQYXJzZSBmYWlsZWQ6ICR7cmVsLnBhcnNlRXJyb3J9YCk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW52YWxpZFJlbGF0aW9uc2hpcChyZWw6IFJlbGF0aW9uc2hpcCk6IHJlbCBpcyBJbnZhbGlkUmVsYXRpb25zaGlwIHtcbiAgcmV0dXJuICdpc1ZhbGlkJyBpbiByZWwgJiYgcmVsLmlzVmFsaWQgPT09IGZhbHNlO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSByZWxhdGlvbnNoaXAgaXMgdW5wYXJzZWQgKGJhc2UgdHlwZSBvbmx5KVxuICpcbiAqIEBwYXJhbSByZWwgLSBUaGUgcmVsYXRpb25zaGlwIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSByZWxhdGlvbnNoaXAgaXMgYSBCYXNlUmVsYXRpb25zaGlwIHdpdGhvdXQgcGFyc2VkIGZpZWxkc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpZiAoaXNCYXNlUmVsYXRpb25zaGlwKHJlbCkpIHtcbiAqICAgLy8gTmVlZCB0byBwYXJzZSB0aGlzIHJlbGF0aW9uc2hpcCBiZWZvcmUgdXNlXG4gKiAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUmVsYXRpb25zaGlwKHJlbCk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmFzZVJlbGF0aW9uc2hpcChyZWw6IFJlbGF0aW9uc2hpcCk6IHJlbCBpcyBCYXNlUmVsYXRpb25zaGlwIHtcbiAgcmV0dXJuICEoJ2lzVmFsaWQnIGluIHJlbCk7XG59XG5cbi8qKlxuICogU2FmZWx5IHBhcnNlIGEgYmFzZSByZWxhdGlvbnNoaXAgaW50byBhIHR5cGVkIHJlbGF0aW9uc2hpcCB2YXJpYW50XG4gKlxuICogVGhpcyBmdW5jdGlvbiBhdHRlbXB0cyB0byBwYXJzZSB0aGUgZWxlbWVudCBJRCBhbmQgZXh0cmFjdCB0eXBlL25hbWUgY29tcG9uZW50cy5cbiAqIElmIHBhcnNpbmcgZmFpbHMsIGl0IHJldHVybnMgYW4gSW52YWxpZFJlbGF0aW9uc2hpcCB3aXRoIGRldGFpbGVkIGVycm9yIGNvbnRleHRcbiAqIGluY2x1ZGluZyBwb3NpdGlvbiBpbmZvcm1hdGlvbiBhbmQgd2hhdCB3YXMgZXhwZWN0ZWQuXG4gKlxuICogQHBhcmFtIHJlbCAtIFRoZSBiYXNlIHJlbGF0aW9uc2hpcCB0byBwYXJzZVxuICogQHJldHVybnMgUGFyc2VkUmVsYXRpb25zaGlwIGlmIHN1Y2Nlc3NmdWwsIEludmFsaWRSZWxhdGlvbnNoaXAgd2l0aCBkaWFnbm9zdGljcyBpZiBmYWlsZWRcbiAqXG4gKiBAZXhhbXBsZSBTdWNjZXNzIGNhc2VcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGJhc2U6IEJhc2VSZWxhdGlvbnNoaXAgPSB7IGVsZW1lbnQ6ICdza2lsbHM6ZGVidWdnaW5nJyB9O1xuICogY29uc3QgcmVzdWx0ID0gcGFyc2VSZWxhdGlvbnNoaXAoYmFzZSk7XG4gKiAvLyByZXN1bHQ6IFBhcnNlZFJlbGF0aW9uc2hpcCB3aXRoIHRhcmdldFR5cGU9J3NraWxscycsIHRhcmdldE5hbWU9J2RlYnVnZ2luZydcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEVycm9yIGNhc2VzIHdpdGggZGV0YWlsZWQgZGlhZ25vc3RpY3NcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHBhcnNlUmVsYXRpb25zaGlwKHsgZWxlbWVudDogJ25vLXNlcGFyYXRvcicgfSk7XG4gKiAvLyBFcnJvcjogXCJtaXNzaW5nIHNlcGFyYXRvciAnOidcIlxuICpcbiAqIHBhcnNlUmVsYXRpb25zaGlwKHsgZWxlbWVudDogJzptaXNzaW5nLXR5cGUnIH0pO1xuICogLy8gRXJyb3I6IFwibWlzc2luZyB0eXBlIGJlZm9yZSAnOidcIlxuICpcbiAqIHBhcnNlUmVsYXRpb25zaGlwKHsgZWxlbWVudDogJ3RvbzptYW55OmNvbG9ucycgfSk7XG4gKiAvLyBFcnJvcjogXCJtdWx0aXBsZSBzZXBhcmF0b3JzICc6JyBmb3VuZCBhdCBwb3NpdGlvbnMgWzMsIDhdXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZWxhdGlvbnNoaXAocmVsOiBCYXNlUmVsYXRpb25zaGlwKTogUGFyc2VkUmVsYXRpb25zaGlwIHwgSW52YWxpZFJlbGF0aW9uc2hpcCB7XG4gIGlmICghcmVsLmVsZW1lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVsLFxuICAgICAgdGFyZ2V0VHlwZTogbnVsbCxcbiAgICAgIHRhcmdldE5hbWU6IG51bGwsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIHBhcnNlRXJyb3I6ICdJbnZhbGlkIGVsZW1lbnQgSUQ6IG1pc3Npbmcgb3IgZW1wdHkgKGV4cGVjdGVkIGZvcm1hdDogXCJ0eXBlOm5hbWVcIiknXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZJWDogRE1DUC1TRUMtMDA0IC0gTm9ybWFsaXplIFVuaWNvZGUgYmVmb3JlIHBhcnNpbmcgdG8gcHJldmVudCBhdHRhY2tzXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShyZWwuZWxlbWVudCk7XG4gIGlmICghbm9ybWFsaXplZC5pc1ZhbGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlbCxcbiAgICAgIHRhcmdldFR5cGU6IG51bGwsXG4gICAgICB0YXJnZXROYW1lOiBudWxsLFxuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBwYXJzZUVycm9yOiBgSW52YWxpZCBlbGVtZW50IElEIC0gVW5pY29kZSBzZWN1cml0eSBpc3N1ZTogJHtub3JtYWxpemVkLmRldGVjdGVkSXNzdWVzPy5qb2luKCcsICcpfWBcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcGFyc2VkID0gcGFyc2VFbGVtZW50SWQobm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudCk7XG5cbiAgaWYgKCFwYXJzZWQpIHtcbiAgICAvLyBQcm92aWRlIGRldGFpbGVkIGVycm9yIGNvbnRleHQgYWJvdXQgd2hhdCB3YXMgZm91bmQgKHVzZSBub3JtYWxpemVkIGZvciBzYWZldHkpXG4gICAgY29uc3QgY29sb25JbmRleCA9IG5vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnQuaW5kZXhPZignOicpO1xuICAgIGxldCBlcnJvckRldGFpbDogc3RyaW5nO1xuXG4gICAgaWYgKGNvbG9uSW5kZXggPT09IC0xKSB7XG4gICAgICBlcnJvckRldGFpbCA9IGBJbnZhbGlkIGVsZW1lbnQgSUQgZm9ybWF0OiBcIiR7bm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudH1cIiAtIG1pc3Npbmcgc2VwYXJhdG9yICc6JyAoZXhwZWN0ZWQgZm9ybWF0OiBcInR5cGU6bmFtZVwiKWA7XG4gICAgfSBlbHNlIGlmIChjb2xvbkluZGV4ID09PSAwKSB7XG4gICAgICBlcnJvckRldGFpbCA9IGBJbnZhbGlkIGVsZW1lbnQgSUQgZm9ybWF0OiBcIiR7bm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudH1cIiAtIG1pc3NpbmcgdHlwZSBiZWZvcmUgJzonIChleHBlY3RlZCBmb3JtYXQ6IFwidHlwZTpuYW1lXCIpYDtcbiAgICB9IGVsc2UgaWYgKGNvbG9uSW5kZXggPT09IG5vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnQubGVuZ3RoIC0gMSkge1xuICAgICAgZXJyb3JEZXRhaWwgPSBgSW52YWxpZCBlbGVtZW50IElEIGZvcm1hdDogXCIke25vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnR9XCIgLSBtaXNzaW5nIG5hbWUgYWZ0ZXIgJzonIChleHBlY3RlZCBmb3JtYXQ6IFwidHlwZTpuYW1lXCIpYDtcbiAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnQuc3BsaXQoJzonKS5sZW5ndGggPiAyKSB7XG4gICAgICBjb25zdCBwb3NpdGlvbnMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudFtpXSA9PT0gJzonKSBwb3NpdGlvbnMucHVzaChpKTtcbiAgICAgIH1cbiAgICAgIGVycm9yRGV0YWlsID0gYEludmFsaWQgZWxlbWVudCBJRCBmb3JtYXQ6IFwiJHtub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50fVwiIC0gbXVsdGlwbGUgc2VwYXJhdG9ycyAnOicgZm91bmQgYXQgcG9zaXRpb25zIFske3Bvc2l0aW9ucy5qb2luKCcsICcpfV0gKGV4cGVjdGVkIGZvcm1hdDogXCJ0eXBlOm5hbWVcIiB3aXRoIHNpbmdsZSAnOicpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JEZXRhaWwgPSBgSW52YWxpZCBlbGVtZW50IElEIGZvcm1hdDogXCIke25vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnR9XCIgKGV4cGVjdGVkIGZvcm1hdDogXCJ0eXBlOm5hbWVcIilgO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5yZWwsXG4gICAgICB0YXJnZXRUeXBlOiBudWxsLFxuICAgICAgdGFyZ2V0TmFtZTogbnVsbCxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgcGFyc2VFcnJvcjogZXJyb3JEZXRhaWxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5yZWwsXG4gICAgdGFyZ2V0VHlwZTogcGFyc2VkLnR5cGUsXG4gICAgdGFyZ2V0TmFtZTogcGFyc2VkLm5hbWUsXG4gICAgaXNWYWxpZDogdHJ1ZVxuICB9O1xufVxuXG4vKipcbiAqIEJhdGNoIHBhcnNlIHJlbGF0aW9uc2hpcHMgd2l0aCB0eXBlIHNhZmV0eVxuICogRmlsdGVycyBvdXQgaW52YWxpZCByZWxhdGlvbnNoaXBzIGJ5IGRlZmF1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVsYXRpb25zaGlwcyhcbiAgcmVsYXRpb25zaGlwczogQmFzZVJlbGF0aW9uc2hpcFtdLFxuICBpbmNsdWRlSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlXG4pOiBQYXJzZWRSZWxhdGlvbnNoaXBbXSB8IChQYXJzZWRSZWxhdGlvbnNoaXAgfCBJbnZhbGlkUmVsYXRpb25zaGlwKVtdIHtcbiAgY29uc3QgcGFyc2VkID0gcmVsYXRpb25zaGlwcy5tYXAocGFyc2VSZWxhdGlvbnNoaXApO1xuXG4gIGlmIChpbmNsdWRlSW52YWxpZCkge1xuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICAvLyBGaWx0ZXIgdG8gb25seSB2YWxpZCByZWxhdGlvbnNoaXBzXG4gIHJldHVybiBwYXJzZWQuZmlsdGVyKGlzUGFyc2VkUmVsYXRpb25zaGlwKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgcmVsYXRpb25zaGlwIHdpdGggdmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpb25zaGlwKFxuICB0YXJnZXRUeXBlOiBzdHJpbmcsXG4gIHRhcmdldE5hbWU6IHN0cmluZyxcbiAgcmVsYXRpb25UeXBlPzogc3RyaW5nLFxuICBzdHJlbmd0aD86IG51bWJlcixcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4pOiBQYXJzZWRSZWxhdGlvbnNoaXAge1xuICAvLyBGSVg6IERNQ1AtU0VDLTAwNCAtIE5vcm1hbGl6ZSBVbmljb2RlIGluIHVzZXIgaW5wdXQgdG8gcHJldmVudCBob21vZ3JhcGggYXR0YWNrc1xuICAvLyBQcmV2aW91c2x5OiBBY2NlcHRpbmcgcmF3IHVzZXIgaW5wdXQgd2l0aG91dCBub3JtYWxpemF0aW9uXG4gIC8vIE5vdzogTm9ybWFsaXppbmcgYWxsIHN0cmluZyBpbnB1dHMgdG8gcHJldmVudCBVbmljb2RlLWJhc2VkIHNlY3VyaXR5IGF0dGFja3NcbiAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh0YXJnZXRUeXBlKTtcbiAgaWYgKCFub3JtYWxpemVkVHlwZS5pc1ZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRhcmdldCB0eXBlIC0gVW5pY29kZSBzZWN1cml0eSBpc3N1ZTogJHtub3JtYWxpemVkVHlwZS5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gKTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodGFyZ2V0TmFtZSk7XG4gIGlmICghbm9ybWFsaXplZE5hbWUuaXNWYWxpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0YXJnZXQgbmFtZSAtIFVuaWNvZGUgc2VjdXJpdHkgaXNzdWU6ICR7bm9ybWFsaXplZE5hbWUuZGV0ZWN0ZWRJc3N1ZXM/LmpvaW4oJywgJyl9YCk7XG4gIH1cblxuICAvLyBBbHNvIG5vcm1hbGl6ZSByZWxhdGlvbnNoaXAgdHlwZSBpZiBwcm92aWRlZFxuICBsZXQgbm9ybWFsaXplZFJlbFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKHJlbGF0aW9uVHlwZSkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRSZWwgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShyZWxhdGlvblR5cGUpO1xuICAgIGlmICghbm9ybWFsaXplZFJlbC5pc1ZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmVsYXRpb25zaGlwIHR5cGUgLSBVbmljb2RlIHNlY3VyaXR5IGlzc3VlOiAke25vcm1hbGl6ZWRSZWwuZGV0ZWN0ZWRJc3N1ZXM/LmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIG5vcm1hbGl6ZWRSZWxUeXBlID0gbm9ybWFsaXplZFJlbC5ub3JtYWxpemVkQ29udGVudDtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHN0cmVuZ3RoIGlzIGluIHJhbmdlXG4gIGlmIChzdHJlbmd0aCAhPT0gdW5kZWZpbmVkICYmIChzdHJlbmd0aCA8IDAgfHwgc3RyZW5ndGggPiAxIHx8IE51bWJlci5pc05hTihzdHJlbmd0aCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWxhdGlvbnNoaXAgc3RyZW5ndGggbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGdvdCAke3N0cmVuZ3RofWApO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudCA9IGZvcm1hdEVsZW1lbnRJZChub3JtYWxpemVkVHlwZS5ub3JtYWxpemVkQ29udGVudCwgbm9ybWFsaXplZE5hbWUubm9ybWFsaXplZENvbnRlbnQpO1xuXG4gIC8vIFJlbGF0aW9uc2hpcCBjcmVhdGlvbiBpcyBpbnRlcm5hbCBpbmRleCBjb25zdHJ1Y3Rpb24sIG5vdCBhIHNlY3VyaXR5IGV2ZW50LlxuICAvLyBBZ2dyZWdhdGUgY291bnRzIGxvZ2dlZCBpbiBcIlJlbGF0aW9uc2hpcCBkaXNjb3ZlcnkgY29tcGxldGVkXCIgc3VtbWFyeS5cblxuICByZXR1cm4ge1xuICAgIGVsZW1lbnQsXG4gICAgdHlwZTogbm9ybWFsaXplZFJlbFR5cGUsXG4gICAgc3RyZW5ndGgsXG4gICAgbWV0YWRhdGEsXG4gICAgdGFyZ2V0VHlwZTogbm9ybWFsaXplZFR5cGUubm9ybWFsaXplZENvbnRlbnQsXG4gICAgdGFyZ2V0TmFtZTogbm9ybWFsaXplZE5hbWUubm9ybWFsaXplZENvbnRlbnQsXG4gICAgaXNWYWxpZDogdHJ1ZVxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgcmVsYXRpb25zaGlwIGhhcyByZXF1aXJlZCBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUmVsYXRpb25zaGlwKHJlbDogYW55KTogcmVsIGlzIEJhc2VSZWxhdGlvbnNoaXAge1xuICByZXR1cm4gISEocmVsICYmXG4gICAgICAgICAgICB0eXBlb2YgcmVsID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgJ2VsZW1lbnQnIGluIHJlbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHJlbC5lbGVtZW50ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgcmVsLmVsZW1lbnQubGVuZ3RoID4gMCk7XG59XG5cbi8qKlxuICogR3JvdXAgcmVsYXRpb25zaGlwcyBieSB0YXJnZXQgdHlwZSBmb3IgZWZmaWNpZW50IHByb2Nlc3NpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwUmVsYXRpb25zaGlwc0J5VHlwZShcbiAgcmVsYXRpb25zaGlwczogUGFyc2VkUmVsYXRpb25zaGlwW11cbik6IE1hcDxzdHJpbmcsIFBhcnNlZFJlbGF0aW9uc2hpcFtdPiB7XG4gIGNvbnN0IGdyb3VwZWQgPSBuZXcgTWFwPHN0cmluZywgUGFyc2VkUmVsYXRpb25zaGlwW10+KCk7XG5cbiAgZm9yIChjb25zdCByZWwgb2YgcmVsYXRpb25zaGlwcykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZ3JvdXBlZC5nZXQocmVsLnRhcmdldFR5cGUpIHx8IFtdO1xuICAgIGV4aXN0aW5nLnB1c2gocmVsKTtcbiAgICBncm91cGVkLnNldChyZWwudGFyZ2V0VHlwZSwgZXhpc3RpbmcpO1xuICB9XG5cbiAgcmV0dXJuIGdyb3VwZWQ7XG59XG5cbi8qKlxuICogRmluZCBkdXBsaWNhdGUgcmVsYXRpb25zaGlwcyAoc2FtZSB0YXJnZXQgZWxlbWVudClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREdXBsaWNhdGVSZWxhdGlvbnNoaXBzKFxuICByZWxhdGlvbnNoaXBzOiBCYXNlUmVsYXRpb25zaGlwW11cbik6IEJhc2VSZWxhdGlvbnNoaXBbXVtdIHtcbiAgY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBCYXNlUmVsYXRpb25zaGlwW10+KCk7XG5cbiAgZm9yIChjb25zdCByZWwgb2YgcmVsYXRpb25zaGlwcykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZWxlbWVudE1hcC5nZXQocmVsLmVsZW1lbnQpIHx8IFtdO1xuICAgIGV4aXN0aW5nLnB1c2gocmVsKTtcbiAgICBlbGVtZW50TWFwLnNldChyZWwuZWxlbWVudCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgLy8gUmV0dXJuIG9ubHkgZ3JvdXBzIHdpdGggZHVwbGljYXRlc1xuICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50TWFwLnZhbHVlcygpKS5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAubGVuZ3RoID4gMSk7XG59XG5cbi8qKlxuICogTWVyZ2UgZHVwbGljYXRlIHJlbGF0aW9uc2hpcHMsIGtlZXBpbmcgaGlnaGVzdCBzdHJlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVkdXBsaWNhdGVSZWxhdGlvbnNoaXBzKFxuICByZWxhdGlvbnNoaXBzOiBCYXNlUmVsYXRpb25zaGlwW11cbik6IEJhc2VSZWxhdGlvbnNoaXBbXSB7XG4gIGNvbnN0IGVsZW1lbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgQmFzZVJlbGF0aW9uc2hpcD4oKTtcblxuICBmb3IgKGNvbnN0IHJlbCBvZiByZWxhdGlvbnNoaXBzKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBlbGVtZW50TWFwLmdldChyZWwuZWxlbWVudCk7XG5cbiAgICBpZiAoIWV4aXN0aW5nIHx8IChyZWwuc3RyZW5ndGggfHwgMCkgPiAoZXhpc3Rpbmcuc3RyZW5ndGggfHwgMCkpIHtcbiAgICAgIGVsZW1lbnRNYXAuc2V0KHJlbC5lbGVtZW50LCByZWwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnRNYXAudmFsdWVzKCkpO1xufVxuXG4vKipcbiAqIFNvcnQgcmVsYXRpb25zaGlwcyBieSBzdHJlbmd0aCAoZGVzY2VuZGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRSZWxhdGlvbnNoaXBzQnlTdHJlbmd0aChcbiAgcmVsYXRpb25zaGlwczogQmFzZVJlbGF0aW9uc2hpcFtdXG4pOiBCYXNlUmVsYXRpb25zaGlwW10ge1xuICByZXR1cm4gWy4uLnJlbGF0aW9uc2hpcHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBzdHJlbmd0aEEgPSBhLnN0cmVuZ3RoIHx8IDA7XG4gICAgY29uc3Qgc3RyZW5ndGhCID0gYi5zdHJlbmd0aCB8fCAwO1xuICAgIHJldHVybiBzdHJlbmd0aEIgLSBzdHJlbmd0aEE7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbHRlciByZWxhdGlvbnNoaXBzIGJ5IG1pbmltdW0gc3RyZW5ndGggdGhyZXNob2xkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJSZWxhdGlvbnNoaXBzQnlTdHJlbmd0aChcbiAgcmVsYXRpb25zaGlwczogQmFzZVJlbGF0aW9uc2hpcFtdLFxuICBtaW5TdHJlbmd0aDogbnVtYmVyXG4pOiBCYXNlUmVsYXRpb25zaGlwW10ge1xuICByZXR1cm4gcmVsYXRpb25zaGlwcy5maWx0ZXIocmVsID0+IChyZWwuc3RyZW5ndGggfHwgMCkgPj0gbWluU3RyZW5ndGgpO1xufVxuXG4vKipcbiAqIFJlbGF0aW9uc2hpcCB0eXBlIGFsaWFzZXMgZm9yIGNvbW1vbiBwYXR0ZXJuc1xuICovXG5leHBvcnQgY29uc3QgUmVsYXRpb25zaGlwVHlwZXMgPSB7XG4gIC8vIFNpbWlsYXJpdHkgcmVsYXRpb25zaGlwc1xuICBTSU1JTEFSX1RPOiAnc2ltaWxhcl90bycsXG5cbiAgLy8gVXNhZ2UgcmVsYXRpb25zaGlwc1xuICBVU0VTOiAndXNlcycsXG4gIFVTRURfQlk6ICd1c2VkX2J5JyxcblxuICAvLyBFeHRlbnNpb24gcmVsYXRpb25zaGlwc1xuICBFWFRFTkRTOiAnZXh0ZW5kcycsXG4gIEVYVEVOREVEX0JZOiAnZXh0ZW5kZWRfYnknLFxuXG4gIC8vIENvbXBvc2l0aW9uIHJlbGF0aW9uc2hpcHNcbiAgQ09OVEFJTlM6ICdjb250YWlucycsXG4gIENPTlRBSU5FRF9CWTogJ2NvbnRhaW5lZF9ieScsXG5cbiAgLy8gRGVidWdnaW5nIHJlbGF0aW9uc2hpcHNcbiAgSEVMUFNfREVCVUc6ICdoZWxwc19kZWJ1ZycsXG4gIERFQlVHR0VEX0JZOiAnZGVidWdnZWRfYnknLFxuXG4gIC8vIENvbmZsaWN0IHJlbGF0aW9uc2hpcHNcbiAgQ09OVFJBRElDVFM6ICdjb250cmFkaWN0cycsXG4gIFNVUFBPUlRTOiAnc3VwcG9ydHMnLFxuXG4gIC8vIFNlbWFudGljIHJlbGF0aW9uc2hpcHNcbiAgU0VNQU5USUNfU0lNSUxBUklUWTogJ3NlbWFudGljX3NpbWlsYXJpdHknXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbnNoaXBUeXBlID0gdHlwZW9mIFJlbGF0aW9uc2hpcFR5cGVzW2tleW9mIHR5cGVvZiBSZWxhdGlvbnNoaXBUeXBlc107Il19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../../../src/security/audit/config/suppressions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAqCD,eAAO,MAAM,YAAY,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../../../src/security/audit/config/suppressions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAqCD,eAAO,MAAM,YAAY,EAAE,WAAW,EAwiCrC,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CA8B/C;AAuJD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CA+CzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAiBA"}
|