ummaya 0.2.3 → 0.2.5
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/README.md +17 -3
- package/bin/ummaya +10 -1
- package/npm-shrinkwrap.json +253 -2
- package/package.json +5 -1
- package/prompts/manifest.yaml +2 -2
- package/prompts/session_guidance_v1.md +3 -1
- package/prompts/system_v1.md +9 -7
- package/pyproject.toml +26 -7
- package/specs/2803-document-production-hardening/contracts/document-tools.schema.json +1043 -0
- package/src/ummaya/_canonical/__init__.py +2 -0
- package/src/ummaya/context/builder.py +17 -11
- package/src/ummaya/engine/engine.py +30 -113
- package/src/ummaya/engine/query.py +20 -0
- package/src/ummaya/evidence/__init__.py +44 -0
- package/src/ummaya/evidence/__main__.py +7 -0
- package/src/ummaya/evidence/dataset_contract.py +193 -0
- package/src/ummaya/evidence/document_authoring_cases.py +33 -0
- package/src/ummaya/evidence/document_harness.py +313 -0
- package/src/ummaya/evidence/document_viewer_ux.py +391 -0
- package/src/ummaya/evidence/gates.py +70 -0
- package/src/ummaya/evidence/json_types.py +20 -0
- package/src/ummaya/evidence/models.py +145 -0
- package/src/ummaya/evidence/output_payload.py +89 -0
- package/src/ummaya/evidence/payload_documents.py +233 -0
- package/src/ummaya/evidence/route_contracts.py +224 -0
- package/src/ummaya/evidence/route_helpers.py +150 -0
- package/src/ummaya/evidence/runner.py +177 -0
- package/src/ummaya/evidence/source_provenance.py +246 -0
- package/src/ummaya/evidence/source_provenance_redaction.py +176 -0
- package/src/ummaya/evidence/task_registry.py +264 -0
- package/src/ummaya/evidence/tool_layer.py +39 -0
- package/src/ummaya/evidence/tool_layer_models.py +151 -0
- package/src/ummaya/ipc/adapter_manifest_emitter.py +26 -10
- package/src/ummaya/ipc/document_intent_normalization.py +185 -0
- package/src/ummaya/ipc/frame_schema.py +52 -5
- package/src/ummaya/ipc/route_diagnostics.py +73 -0
- package/src/ummaya/ipc/stdio.py +2282 -417
- package/src/ummaya/llm/client.py +234 -59
- package/src/ummaya/llm/config.py +8 -3
- package/src/ummaya/llm/reasoning.py +84 -0
- package/src/ummaya/primitives/__init__.py +6 -2
- package/src/ummaya/primitives/delegation.py +1 -1
- package/src/ummaya/primitives/document.py +28 -0
- package/src/ummaya/settings.py +0 -3
- package/src/ummaya/tools/discovery_bridge.py +34 -2
- package/src/ummaya/tools/documents/__init__.py +297 -0
- package/src/ummaya/tools/documents/adapter_registry.py +487 -0
- package/src/ummaya/tools/documents/archive_container_probe.py +167 -0
- package/src/ummaya/tools/documents/artifact_store.py +454 -0
- package/src/ummaya/tools/documents/authoring.py +283 -0
- package/src/ummaya/tools/documents/baselines.py +114 -0
- package/src/ummaya/tools/documents/capability.py +331 -0
- package/src/ummaya/tools/documents/contracts.py +112 -0
- package/src/ummaya/tools/documents/conversion.py +521 -0
- package/src/ummaya/tools/documents/diff.py +275 -0
- package/src/ummaya/tools/documents/engines.py +163 -0
- package/src/ummaya/tools/documents/evaluation.py +291 -0
- package/src/ummaya/tools/documents/explicit_values.py +108 -0
- package/src/ummaya/tools/documents/fixtures.py +174 -0
- package/src/ummaya/tools/documents/format_completion_audit.py +471 -0
- package/src/ummaya/tools/documents/formats/__init__.py +2 -0
- package/src/ummaya/tools/documents/formats/archive.py +528 -0
- package/src/ummaya/tools/documents/formats/base.py +41 -0
- package/src/ummaya/tools/documents/formats/code_file.py +211 -0
- package/src/ummaya/tools/documents/formats/data_file.py +272 -0
- package/src/ummaya/tools/documents/formats/hwp.py +284 -0
- package/src/ummaya/tools/documents/formats/hwpx.py +1837 -0
- package/src/ummaya/tools/documents/formats/odf.py +435 -0
- package/src/ummaya/tools/documents/formats/ooxml.py +1030 -0
- package/src/ummaya/tools/documents/formats/passive.py +766 -0
- package/src/ummaya/tools/documents/formats/pdf.py +702 -0
- package/src/ummaya/tools/documents/formats/text_web.py +268 -0
- package/src/ummaya/tools/documents/hwp_conversion_probe.py +178 -0
- package/src/ummaya/tools/documents/hwp_direct_candidate.py +141 -0
- package/src/ummaya/tools/documents/inspection.py +289 -0
- package/src/ummaya/tools/documents/intake.py +1079 -0
- package/src/ummaya/tools/documents/legacy_office_promotion_probe.py +366 -0
- package/src/ummaya/tools/documents/models.py +1598 -0
- package/src/ummaya/tools/documents/odf_promotion_probe.py +167 -0
- package/src/ummaya/tools/documents/orchestrator.py +96 -0
- package/src/ummaya/tools/documents/passive_capability_probe.py +251 -0
- package/src/ummaya/tools/documents/patch.py +170 -0
- package/src/ummaya/tools/documents/pdfa_conformance.py +284 -0
- package/src/ummaya/tools/documents/pdfa_promotion_probe.py +198 -0
- package/src/ummaya/tools/documents/permissions.py +110 -0
- package/src/ummaya/tools/documents/planner.py +616 -0
- package/src/ummaya/tools/documents/registry.py +2733 -0
- package/src/ummaya/tools/documents/render.py +978 -0
- package/src/ummaya/tools/documents/render_comparison.py +113 -0
- package/src/ummaya/tools/documents/render_comparison_models.py +74 -0
- package/src/ummaya/tools/documents/render_comparison_regions.py +73 -0
- package/src/ummaya/tools/documents/render_comparison_style.py +161 -0
- package/src/ummaya/tools/documents/reread.py +157 -0
- package/src/ummaya/tools/documents/runtime_authoring.py +244 -0
- package/src/ummaya/tools/documents/runtime_authoring_bundle.py +76 -0
- package/src/ummaya/tools/documents/scorecard.py +184 -0
- package/src/ummaya/tools/documents/socratic_planner.py +193 -0
- package/src/ummaya/tools/documents/style.py +48 -0
- package/src/ummaya/tools/documents/tool_defs.py +523 -0
- package/src/ummaya/tools/documents/validate.py +347 -0
- package/src/ummaya/tools/executor.py +61 -12
- package/src/ummaya/tools/geocoding/kakao_client.py +1 -2
- package/src/ummaya/tools/kma/apihub_catalog.py +984 -1
- package/src/ummaya/tools/kma/apihub_structured_adapter.py +86 -6
- package/src/ummaya/tools/kma/apihub_url_adapter.py +593 -0
- package/src/ummaya/tools/kma/apihub_url_catalog.py +296 -0
- package/src/ummaya/tools/live_proxy.py +0 -3
- package/src/ummaya/tools/location_adapters.py +8 -6
- package/src/ummaya/tools/manifest_metadata.py +16 -3
- package/src/ummaya/tools/models.py +5 -1
- package/src/ummaya/tools/mvp_surface.py +2 -2
- package/src/ummaya/tools/nmc/emergency_search.py +8 -6
- package/src/ummaya/tools/register_all.py +17 -0
- package/src/ummaya/tools/registry.py +10 -1
- package/src/ummaya/tools/resolve_location.py +4 -4
- package/src/ummaya/tools/routing/__init__.py +59 -0
- package/src/ummaya/tools/routing/builder.py +105 -0
- package/src/ummaya/tools/routing/cards.py +29 -0
- package/src/ummaya/tools/routing/decision_service.py +534 -0
- package/src/ummaya/tools/routing/decision_types.py +74 -0
- package/src/ummaya/tools/routing/feasibility.py +122 -0
- package/src/ummaya/tools/routing/intent.py +17 -0
- package/src/ummaya/tools/routing/intent_extractor.py +207 -0
- package/src/ummaya/tools/routing/intent_patterns.py +160 -0
- package/src/ummaya/tools/routing/intent_public_data.py +150 -0
- package/src/ummaya/tools/routing/intent_types.py +48 -0
- package/src/ummaya/tools/routing/lint.py +78 -0
- package/src/ummaya/tools/routing/metadata.py +174 -0
- package/src/ummaya/tools/routing/projection.py +340 -0
- package/src/ummaya/tools/routing/retrieval_policy.py +629 -0
- package/src/ummaya/tools/routing/schema.py +81 -0
- package/src/ummaya/tools/routing/types.py +96 -0
- package/src/ummaya/tools/routing_index.py +2 -2
- package/src/ummaya/tools/search.py +40 -106
- package/src/ummaya/tools/verified_data_go_kr/_manifest.py +115 -25
- package/src/ummaya/tools/verified_data_go_kr/airkorea_air_quality.py +109 -4
- package/src/ummaya/tools/verified_data_go_kr/nmc_aed_site.py +108 -2
- package/src/ummaya/tools/verified_data_go_kr/pps_bid_public_info.py +174 -9
- package/src/ummaya/tools/verified_data_go_kr/tago_bus_arrival.py +66 -3
- package/src/ummaya/tools/verified_data_go_kr/tago_bus_location.py +12 -2
- package/src/ummaya/tools/verified_data_go_kr/tago_bus_route.py +8 -2
- package/src/ummaya/tools/verified_data_go_kr/tago_bus_route_station.py +114 -0
- package/src/ummaya/tools/verified_data_go_kr/tago_bus_station.py +14 -3
- package/src/ummaya/tools/verify_canonical_map.py +21 -0
- package/tests/fixtures/documents/public_forms/baselines.yaml +113 -0
- package/tui/package.json +1 -2
- package/tui/src/.cc-byte-identical-whitelist.yaml +266 -0
- package/tui/src/QueryEngine.ts +12 -4
- package/tui/src/bridge/inboundAttachments.ts +3 -3
- package/tui/src/cli/handlers/auth.ts +4 -13
- package/tui/src/cli/handlers/mcp.tsx +3 -3
- package/tui/src/cli/print.ts +69 -18
- package/tui/src/cli/update.ts +13 -13
- package/tui/src/commands/copy/index.ts +1 -1
- package/tui/src/commands/cost/cost.ts +2 -2
- package/tui/src/commands/init-verifiers.ts +5 -5
- package/tui/src/commands/init.ts +30 -30
- package/tui/src/commands/insights.ts +44 -44
- package/tui/src/commands/install-github-app/install-github-app.tsx +2 -2
- package/tui/src/commands/install-github-app/setupGitHubActions.ts +3 -3
- package/tui/src/commands/install-github-app/types.ts +8 -30
- package/tui/src/commands/install.tsx +5 -5
- package/tui/src/commands/mcp/addCommand.ts +5 -5
- package/tui/src/commands/mcp/xaaIdpCommand.ts +2 -2
- package/tui/src/commands/plugin/ManageMarketplaces.tsx +2 -2
- package/tui/src/commands/plugin/types.ts +6 -28
- package/tui/src/commands/plugin/unifiedTypes.ts +4 -26
- package/tui/src/commands/reasoning/index.ts +13 -0
- package/tui/src/commands/reasoning/reasoning.tsx +177 -0
- package/tui/src/commands/rename/generateSessionName.ts +1 -1
- package/tui/src/commands/thinkback/thinkback.tsx +3 -3
- package/tui/src/commands.ts +2 -0
- package/tui/src/components/Feedback.tsx +1 -1
- package/tui/src/components/LogoV2/EmergencyTip.tsx +11 -2
- package/tui/src/components/LogoV2/WelcomeV2.tsx +1 -3
- package/tui/src/components/Messages.tsx +2 -1
- package/tui/src/components/ScrollKeybindingHandler.tsx +6 -6
- package/tui/src/components/Spinner/types.ts +6 -28
- package/tui/src/components/Spinner.tsx +2 -2
- package/tui/src/components/agents/generateAgent.ts +1 -1
- package/tui/src/components/agents/new-agent-creation/types.ts +4 -26
- package/tui/src/components/config/EnvSecretIsolatedEditor.tsx +1 -1
- package/tui/src/components/design-system/LoadingState.tsx +2 -2
- package/tui/src/components/mcp/types.ts +16 -38
- package/tui/src/components/messages/AssistantToolUseMessage.tsx +3 -2
- package/tui/src/components/messages/UserCrossSessionMessage.ts +16 -4
- package/tui/src/components/messages/UserForkBoilerplateMessage.ts +16 -4
- package/tui/src/components/messages/UserGitHubWebhookMessage.ts +16 -4
- package/tui/src/components/messages/UserToolResultMessage/utils.tsx +3 -2
- package/tui/src/components/permissions/MonitorPermissionRequest/MonitorPermissionRequest.ts +9 -4
- package/tui/src/components/permissions/ReviewArtifactPermissionRequest/ReviewArtifactPermissionRequest.ts +9 -4
- package/tui/src/components/primitive/DocumentSocraticReviewBlock.tsx +129 -0
- package/tui/src/components/primitive/DocumentToolResultCard.tsx +224 -0
- package/tui/src/components/primitive/documentSocraticReview.ts +215 -0
- package/tui/src/components/primitive/index.tsx +43 -1
- package/tui/src/components/primitive/types.ts +137 -0
- package/tui/src/components/ui/option.ts +4 -26
- package/tui/src/constants/common.ts +0 -2
- package/tui/src/constants/prompts.ts +4 -3
- package/tui/src/constants/querySource.ts +4 -26
- package/tui/src/entrypoints/sdk/controlTypes.ts +26 -48
- package/tui/src/entrypoints/sdk/coreTypes.generated.ts +3 -25
- package/tui/src/entrypoints/sdk/runtimeTypes.ts +38 -60
- package/tui/src/entrypoints/sdk/sdkUtilityTypes.ts +4 -26
- package/tui/src/entrypoints/sdk/settingsTypes.generated.ts +3 -25
- package/tui/src/entrypoints/sdk/toolTypes.ts +3 -25
- package/tui/src/hooks/toolPermission/handlers/interactiveHandler.ts +10 -0
- package/tui/src/hooks/useApiKeyVerification.ts +1 -1
- package/tui/src/hooks/useVirtualScroll.ts +1 -1
- package/tui/src/ink/ink.tsx +33 -14
- package/tui/src/ink/reconciler.ts +2 -3
- package/tui/src/ink/render-to-screen.ts +30 -10
- package/tui/src/ipc/bridge.ts +62 -15
- package/tui/src/ipc/bridgeSingleton.ts +5 -1
- package/tui/src/ipc/codec.ts +29 -3
- package/tui/src/ipc/frames.generated.ts +407 -312
- package/tui/src/ipc/llmClient.ts +279 -76
- package/tui/src/ipc/llmTypes.ts +16 -1
- package/tui/src/ipc/schema/frame.schema.json +1 -3475
- package/tui/src/keybindings/defaultBindings.ts +4 -0
- package/tui/src/main.tsx +32 -11
- package/tui/src/native-ts/file-index/index.ts +33 -3
- package/tui/src/observability/surface.ts +2 -2
- package/tui/src/probes/toolRegistryProbe.tsx +3 -1
- package/tui/src/projectOnboardingState.ts +7 -6
- package/tui/src/query/chatMessageTypes.ts +18 -0
- package/tui/src/query/chatMessagesBuilder.ts +1 -1
- package/tui/src/query/deps.ts +1 -1
- package/tui/src/query/messageGuards.ts +106 -0
- package/tui/src/query/publicDataTerminalRepair.ts +384 -0
- package/tui/src/query/run.ts +1075 -0
- package/tui/src/query/supportBoundary.ts +168 -0
- package/tui/src/query/toolResultErrors.ts +103 -0
- package/tui/src/query/toolRunner.ts +687 -0
- package/tui/src/query/unavailableToolRepair.ts +118 -0
- package/tui/src/query.ts +9 -1721
- package/tui/src/screens/REPL.tsx +42 -31
- package/tui/src/services/api/adapterManifest.ts +4 -0
- package/tui/src/services/api/backendChat/events.ts +117 -0
- package/tui/src/services/api/backendChat/finalMessage.ts +40 -0
- package/tui/src/services/api/backendChat/frame.ts +9 -0
- package/tui/src/services/api/backendChat/streaming.ts +430 -0
- package/tui/src/services/api/backendChat/types.ts +62 -0
- package/tui/src/services/api/backendChat.ts +1 -0
- package/tui/src/services/api/client.ts +98 -14
- package/tui/src/services/api/errorUtils.ts +5 -5
- package/tui/src/services/api/errors.ts +1 -1
- package/tui/src/services/api/logging.ts +1 -1
- package/tui/src/services/api/ummaya/evidence.ts +194 -0
- package/tui/src/services/api/ummaya/messages.ts +255 -0
- package/tui/src/services/api/ummaya/nonStreaming.ts +66 -0
- package/tui/src/services/api/ummaya/provider.ts +200 -0
- package/tui/src/services/api/ummaya/reasoning.ts +24 -0
- package/tui/src/services/api/ummaya/request.ts +200 -0
- package/tui/src/services/api/ummaya/selectionContext.ts +240 -0
- package/tui/src/services/api/ummaya/streaming.ts +365 -0
- package/tui/src/services/api/ummaya/streamingPayload.ts +129 -0
- package/tui/src/services/api/ummaya/streamingReader.ts +40 -0
- package/tui/src/services/api/ummaya/toolSelection.ts +217 -0
- package/tui/src/services/api/ummaya/types.ts +110 -0
- package/tui/src/services/api/ummaya/usage.ts +30 -0
- package/tui/src/services/api/ummaya.ts +26 -364
- package/tui/src/services/api/withRetry.ts +1 -1
- package/tui/src/services/awaySummary.ts +2 -2
- package/tui/src/services/claudeAiLimits.ts +1 -1
- package/tui/src/services/compact/autoCompact.ts +1 -1
- package/tui/src/services/compact/compact.ts +1 -1
- package/tui/src/services/lsp/types.ts +8 -30
- package/tui/src/services/tips/types.ts +6 -28
- package/tui/src/services/tokenEstimation.ts +1 -1
- package/tui/src/services/toolRegistry/bootGuard.ts +5 -5
- package/tui/src/services/toolUseSummary/toolUseSummaryGenerator.ts +1 -1
- package/tui/src/services/tools/toolExecution.ts +94 -1
- package/tui/src/skills/bundled/stuck.ts +12 -12
- package/tui/src/state/AppStateStore.ts +7 -0
- package/tui/src/store/pendingPermissionSlot.ts +1 -1
- package/tui/src/store/session-store.ts +10 -36
- package/tui/src/stubs/any-stub.ts +15 -10
- package/tui/src/stubs/color-diff-napi.ts +37 -23
- package/tui/src/stubs/globals.d.ts +3 -3
- package/tui/src/stubs/macro-preload.ts +23 -12
- package/tui/src/tools/AdapterTool/AdapterTool.ts +1239 -163
- package/tui/src/tools/AdapterTool/routeDiagnostics.ts +75 -0
- package/tui/src/tools/AgentTool/AgentTool.tsx +84 -1371
- package/tui/src/tools/AgentTool/agentToolHandoff.ts +114 -0
- package/tui/src/tools/AgentTool/agentToolPartialResult.ts +16 -0
- package/tui/src/tools/AgentTool/agentToolProgress.ts +32 -0
- package/tui/src/tools/AgentTool/agentToolResolver.ts +161 -0
- package/tui/src/tools/AgentTool/agentToolResult.ts +163 -0
- package/tui/src/tools/AgentTool/agentToolUtils.ts +14 -686
- package/tui/src/tools/AgentTool/asyncAgentLifecycle.ts +208 -0
- package/tui/src/tools/AgentTool/asyncLifecycle.ts +153 -0
- package/tui/src/tools/AgentTool/backgroundedCompletion.ts +126 -0
- package/tui/src/tools/AgentTool/backgroundedLifecycle.ts +174 -0
- package/tui/src/tools/AgentTool/foregroundBackground.ts +83 -0
- package/tui/src/tools/AgentTool/foregroundDrain.tsx +133 -0
- package/tui/src/tools/AgentTool/foregroundFinalize.ts +98 -0
- package/tui/src/tools/AgentTool/foregroundLifecycle.tsx +237 -0
- package/tui/src/tools/AgentTool/foregroundProgress.tsx +169 -0
- package/tui/src/tools/AgentTool/foregroundTask.ts +89 -0
- package/tui/src/tools/AgentTool/forkSubagent.ts +1 -12
- package/tui/src/tools/AgentTool/forkSubagentGate.ts +34 -0
- package/tui/src/tools/AgentTool/launchRouting.ts +203 -0
- package/tui/src/tools/AgentTool/lifecycle.ts +244 -0
- package/tui/src/tools/AgentTool/mcpRouting.ts +73 -0
- package/tui/src/tools/AgentTool/orchestrationSupport.ts +70 -0
- package/tui/src/tools/AgentTool/permissions.ts +39 -0
- package/tui/src/tools/AgentTool/promptSetup.ts +181 -0
- package/tui/src/tools/AgentTool/remoteRouting.ts +62 -0
- package/tui/src/tools/AgentTool/resultMapping.ts +116 -0
- package/tui/src/tools/AgentTool/resumeAgent.ts +39 -107
- package/tui/src/tools/AgentTool/resumeAgentHelpers.ts +140 -0
- package/tui/src/tools/AgentTool/runAgent.ts +1 -1
- package/tui/src/tools/AgentTool/runtimeConfig.ts +57 -0
- package/tui/src/tools/AgentTool/schemas.ts +196 -0
- package/tui/src/tools/AgentTool/sourceVerificationPropagation.ts +263 -0
- package/tui/src/tools/AgentTool/worktreeLifecycle.ts +105 -0
- package/tui/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +174 -202
- package/tui/src/tools/BashTool/BashTool.tsx +71 -1072
- package/tui/src/tools/BashTool/bashCommandHelpers.ts +12 -12
- package/tui/src/tools/BashTool/bashPermissions/astPreflight.ts +173 -0
- package/tui/src/tools/BashTool/bashPermissions/classifierChecks.ts +199 -0
- package/tui/src/tools/BashTool/bashPermissions/compoundGuards.ts +53 -0
- package/tui/src/tools/BashTool/bashPermissions/constants.ts +99 -0
- package/tui/src/tools/BashTool/bashPermissions/index.ts +38 -0
- package/tui/src/tools/BashTool/bashPermissions/legacyMisparsing.ts +62 -0
- package/tui/src/tools/BashTool/bashPermissions/main.ts +135 -0
- package/tui/src/tools/BashTool/bashPermissions/normalizedCommands.ts +33 -0
- package/tui/src/tools/BashTool/bashPermissions/operatorFlow.ts +98 -0
- package/tui/src/tools/BashTool/bashPermissions/permissionChecks.ts +200 -0
- package/tui/src/tools/BashTool/bashPermissions/prefixSuggestions.ts +88 -0
- package/tui/src/tools/BashTool/bashPermissions/promptClassifierRules.ts +125 -0
- package/tui/src/tools/BashTool/bashPermissions/ruleDelegates.ts +19 -0
- package/tui/src/tools/BashTool/bashPermissions/ruleMatching.ts +145 -0
- package/tui/src/tools/BashTool/bashPermissions/sandboxAutoAllow.ts +75 -0
- package/tui/src/tools/BashTool/bashPermissions/subcommandFlow.ts +205 -0
- package/tui/src/tools/BashTool/bashPermissions/subcommandGuards.ts +73 -0
- package/tui/src/tools/BashTool/bashPermissions/subcommandResultHelpers.ts +116 -0
- package/tui/src/tools/BashTool/bashPermissions/types.ts +26 -0
- package/tui/src/tools/BashTool/bashPermissions/wrapperStripping.ts +139 -0
- package/tui/src/tools/BashTool/bashPermissions.ts +26 -2621
- package/tui/src/tools/BashTool/call.ts +202 -0
- package/tui/src/tools/BashTool/callLoader.ts +35 -0
- package/tui/src/tools/BashTool/commandClassification.ts +151 -0
- package/tui/src/tools/BashTool/commandClassificationLoader.ts +40 -0
- package/tui/src/tools/BashTool/cwdReset.ts +33 -0
- package/tui/src/tools/BashTool/lineTruncation.ts +11 -0
- package/tui/src/tools/BashTool/modeValidation.ts +13 -1
- package/tui/src/tools/BashTool/outputPersistence.ts +42 -0
- package/tui/src/tools/BashTool/permissionClassification.ts +66 -0
- package/tui/src/tools/BashTool/permissionLoader.ts +44 -0
- package/tui/src/tools/BashTool/resultLoader.ts +29 -0
- package/tui/src/tools/BashTool/resultMapping.ts +83 -0
- package/tui/src/tools/BashTool/sandboxPolicy.ts +79 -0
- package/tui/src/tools/BashTool/schemas.ts +65 -0
- package/tui/src/tools/BashTool/sedEditExecution.ts +59 -0
- package/tui/src/tools/BashTool/shellExecution.tsx +245 -0
- package/tui/src/tools/BashTool/shellOutputUtils.ts +85 -0
- package/tui/src/tools/BashTool/shellPermissionGauntlet.ts +97 -0
- package/tui/src/tools/BashTool/uiLoader.ts +37 -0
- package/tui/src/tools/BriefTool/upload.ts +1 -1
- package/tui/src/tools/CalculatorTool/parser.ts +2 -2
- package/tui/src/tools/DocumentPrimitive/DocumentPrimitive.ts +262 -0
- package/tui/src/tools/DocumentPrimitive/dispatchNormalization.ts +270 -0
- package/tui/src/tools/DocumentPrimitive/documentDestinationPath.ts +18 -0
- package/tui/src/tools/DocumentPrimitive/documentMutationGuard.ts +22 -0
- package/tui/src/tools/DocumentPrimitive/documentPatchNormalization.ts +248 -0
- package/tui/src/tools/DocumentPrimitive/documentSourceVerification.ts +245 -0
- package/tui/src/tools/DocumentPrimitive/documentSourceVerificationFields.ts +103 -0
- package/tui/src/tools/DocumentPrimitive/modelVisibleOutput.ts +40 -0
- package/tui/src/tools/DocumentPrimitive/prompt.ts +35 -0
- package/tui/src/tools/FileEditTool/FileEditTool.ts +9 -507
- package/tui/src/tools/FileEditTool/call.ts +228 -0
- package/tui/src/tools/FileEditTool/validateInput.ts +196 -0
- package/tui/src/tools/FileReadTool/imageProcessor.ts +13 -0
- package/tui/src/tools/FileWriteTool/FileWriteTool.ts +7 -300
- package/tui/src/tools/FileWriteTool/call.ts +223 -0
- package/tui/src/tools/FileWriteTool/validateInput.ts +80 -0
- package/tui/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +19 -3
- package/tui/src/tools/LookupPrimitive/LookupPrimitive.ts +48 -29
- package/tui/src/tools/LookupPrimitive/prompt.ts +6 -7
- package/tui/src/tools/MCPTool/trustPolicy.ts +118 -0
- package/tui/src/tools/McpAuthTool/McpAuthTool.ts +21 -3
- package/tui/src/tools/NotebookEditTool/NotebookEditTool.ts +7 -326
- package/tui/src/tools/NotebookEditTool/call.ts +254 -0
- package/tui/src/tools/NotebookEditTool/notebookModel.ts +51 -0
- package/tui/src/tools/NotebookEditTool/validateInput.ts +142 -0
- package/tui/src/tools/PowerShellTool/PowerShellTool.tsx +46 -937
- package/tui/src/tools/PowerShellTool/acceptEditsCommandValidation.ts +162 -0
- package/tui/src/tools/PowerShellTool/call.ts +179 -0
- package/tui/src/tools/PowerShellTool/callLoader.ts +37 -0
- package/tui/src/tools/PowerShellTool/commandClassification.ts +86 -0
- package/tui/src/tools/PowerShellTool/modeValidation.ts +25 -332
- package/tui/src/tools/PowerShellTool/outputPersistence.ts +42 -0
- package/tui/src/tools/PowerShellTool/permissionClassification.ts +28 -0
- package/tui/src/tools/PowerShellTool/resultLoader.ts +31 -0
- package/tui/src/tools/PowerShellTool/resultMapping.ts +75 -0
- package/tui/src/tools/PowerShellTool/schemas.ts +40 -0
- package/tui/src/tools/PowerShellTool/shellExecution.tsx +258 -0
- package/tui/src/tools/PowerShellTool/symlinkModeValidation.ts +44 -0
- package/tui/src/tools/PowerShellTool/uiLoader.ts +37 -0
- package/tui/src/tools/PowerShellTool/validation.ts +39 -0
- package/tui/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +19 -3
- package/tui/src/tools/ResolveLocationPrimitive/ResolveLocationPrimitive.ts +30 -19
- package/tui/src/tools/ResolveLocationPrimitive/prompt.ts +2 -6
- package/tui/src/tools/SkillTool/SkillTool.ts +2 -2
- package/tui/src/tools/SubmitPrimitive/SubmitPrimitive.ts +51 -18
- package/tui/src/tools/TaskCreateTool/TaskCreateTool.ts +16 -2
- package/tui/src/tools/TaskGetTool/TaskGetTool.ts +23 -3
- package/tui/src/tools/TaskListTool/TaskListTool.ts +22 -4
- package/tui/src/tools/TaskOutputTool/TaskOutputTool.tsx +46 -547
- package/tui/src/tools/TaskOutputTool/lookup.ts +216 -0
- package/tui/src/tools/TaskOutputTool/render.tsx +257 -0
- package/tui/src/tools/TaskOutputTool/schemas.ts +55 -0
- package/tui/src/tools/TaskOutputTool/serialization.ts +36 -0
- package/tui/src/tools/TaskStopTool/TaskStopTool.ts +10 -0
- package/tui/src/tools/TaskUpdateTool/TaskUpdateTool.ts +14 -364
- package/tui/src/tools/TaskUpdateTool/completion.ts +62 -0
- package/tui/src/tools/TaskUpdateTool/schemas.ts +62 -0
- package/tui/src/tools/TaskUpdateTool/serialization.ts +46 -0
- package/tui/src/tools/TaskUpdateTool/statusUpdate.ts +247 -0
- package/tui/src/tools/TodoWriteTool/TodoWriteTool.ts +21 -2
- package/tui/src/tools/ToolSearchTool/ToolSearchTool.ts +21 -302
- package/tui/src/tools/ToolSearchTool/ccSupportTools.ts +223 -0
- package/tui/src/tools/ToolSearchTool/descriptionCache.ts +50 -0
- package/tui/src/tools/ToolSearchTool/keywordSearch.ts +216 -0
- package/tui/src/tools/ToolSearchTool/prompt.ts +10 -4
- package/tui/src/tools/ToolSearchTool/resultMapping.ts +30 -0
- package/tui/src/tools/ToolSearchTool/schemas.ts +30 -0
- package/tui/src/tools/ToolSearchTool/searchPool.ts +47 -0
- package/tui/src/tools/ToolSearchTool/supportIntentHints.ts +140 -0
- package/tui/src/tools/TranslateTool/TranslateTool.ts +1 -1
- package/tui/src/tools/VerifyPrimitive/VerifyPrimitive.ts +27 -10
- package/tui/src/tools/WebFetchTool/WebFetchTool.ts +43 -138
- package/tui/src/tools/WebFetchTool/call.ts +227 -0
- package/tui/src/tools/WebFetchTool/resolvedAddressSafety.ts +78 -0
- package/tui/src/tools/WebFetchTool/sourceVerification.ts +204 -0
- package/tui/src/tools/WebFetchTool/types.ts +23 -0
- package/tui/src/tools/WebFetchTool/urlSafety.ts +181 -0
- package/tui/src/tools/WebFetchTool/utils.ts +1 -1
- package/tui/src/tools/WebSearchTool/UI.tsx +0 -1
- package/tui/src/tools/WebSearchTool/WebSearchTool.ts +9 -313
- package/tui/src/tools/WebSearchTool/call.ts +33 -0
- package/tui/src/tools/WebSearchTool/responseMapping.ts +190 -0
- package/tui/src/tools/WebSearchTool/resultBlock.ts +47 -0
- package/tui/src/tools/WebSearchTool/schemas.ts +47 -0
- package/tui/src/tools/WebSearchTool/toolSchema.ts +12 -0
- package/tui/src/tools/WorkspaceToolAdapter/WorkspaceToolAdapter.ts +79 -0
- package/tui/src/tools/WorkspaceToolAdapter/allowedRootPolicy.ts +85 -0
- package/tui/src/tools/WorkspaceToolAdapter/documentFormatGuards.ts +73 -0
- package/tui/src/tools/WorkspaceToolAdapter/inputNormalization.ts +105 -0
- package/tui/src/tools/WorkspaceToolAdapter/mcpExposurePolicy.ts +64 -0
- package/tui/src/tools/WorkspaceToolAdapter/toolDefFactory.ts +215 -0
- package/tui/src/tools/WorkspaceToolAdapter/toolNames.ts +6 -0
- package/tui/src/tools/WorkspaceToolAdapter/workspacePolicy.ts +15 -0
- package/tui/src/tools/_shared/citizenUserText.ts +49 -0
- package/tui/src/tools/_shared/dispatchPrimitive.ts +6 -6
- package/tui/src/tools/_shared/documentChangeToPatch.ts +125 -0
- package/tui/src/tools/_shared/documentDispatchArguments.ts +87 -0
- package/tui/src/tools/_shared/documentPrimitiveTimeout.ts +13 -0
- package/tui/src/tools/_shared/documentToolResultRender.ts +98 -0
- package/tui/src/tools/_shared/locationInputRepair.ts +112 -0
- package/tui/src/tools/_shared/pendingCallRegistry.ts +1 -6
- package/tui/src/tools/_shared/rootPrimitiveInput.ts +68 -0
- package/tui/src/tools/_shared/toolChoiceRepair/documentCompletionPatterns.ts +58 -0
- package/tui/src/tools/_shared/toolChoiceRepair/documentCompletionPrompt.ts +271 -0
- package/tui/src/tools/_shared/toolChoiceRepair/documentRepair.ts +452 -0
- package/tui/src/tools/_shared/toolChoiceRepair/messageAccess.ts +80 -0
- package/tui/src/tools/_shared/toolChoiceRepair/publicDataRepair.ts +92 -0
- package/tui/src/tools/_shared/toolChoiceRepair/supportRepair.ts +135 -0
- package/tui/src/tools/_shared/toolChoiceRepair.ts +61 -0
- package/tui/src/tools/shared/mockDisclaimer.ts +1 -1
- package/tui/src/tools.ts +39 -190
- package/tui/src/types/fileSuggestion.ts +4 -26
- package/tui/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +186 -148
- package/tui/src/types/generated/events_mono/common/v1/auth.ts +25 -11
- package/tui/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +47 -30
- package/tui/src/types/generated/google/protobuf/timestamp.ts +21 -7
- package/tui/src/types/message.ts +80 -102
- package/tui/src/types/messageQueueTypes.ts +6 -28
- package/tui/src/types/notebook.ts +16 -38
- package/tui/src/types/statusLine.ts +4 -26
- package/tui/src/types/tools.ts +24 -46
- package/tui/src/types/utils.ts +6 -28
- package/tui/src/upstreamproxy/relay.ts +7 -3
- package/tui/src/upstreamproxy/upstreamproxy.ts +1 -1
- package/tui/src/utils/assistantMessageFactories.ts +9 -3
- package/tui/src/utils/attachments.ts +1 -1
- package/tui/src/utils/auth.ts +129 -139
- package/tui/src/utils/bash/ast.ts +23 -23
- package/tui/src/utils/bash/bashParser.ts +5 -5
- package/tui/src/utils/billing.ts +1 -1
- package/tui/src/utils/collapseReadSearch.ts +3 -3
- package/tui/src/utils/cronTasks.ts +1 -1
- package/tui/src/utils/execFileNoThrow.ts +1 -1
- package/tui/src/utils/filePersistence/types.ts +16 -38
- package/tui/src/utils/forkedAgent.ts +1 -1
- package/tui/src/utils/gracefulShutdown.ts +4 -4
- package/tui/src/utils/heapDumpService.ts +12 -8
- package/tui/src/utils/hooks/apiQueryHookHelper.ts +1 -1
- package/tui/src/utils/hooks/execPromptHook.ts +1 -1
- package/tui/src/utils/hooks/skillImprovement.ts +1 -1
- package/tui/src/utils/kExaoneReasoning.ts +138 -0
- package/tui/src/utils/mcp/dateTimeParser.ts +1 -1
- package/tui/src/utils/messages.ts +19 -0
- package/tui/src/utils/migrateSessions.ts +3 -3
- package/tui/src/utils/model/model.ts +6 -6
- package/tui/src/utils/multiToolLayout.ts +13 -0
- package/tui/src/utils/permissions/yoloClassifier.ts +1 -1
- package/tui/src/utils/plugins/headlessPluginInstall.ts +1 -1
- package/tui/src/utils/plugins/mcpPluginIntegration.ts +1 -1
- package/tui/src/utils/plugins/mcpbHandler.ts +1 -1
- package/tui/src/utils/plugins/pluginLoader.ts +8 -8
- package/tui/src/utils/processUserInput/processSlashCommand.tsx +2 -2
- package/tui/src/utils/processUserInput/processUserInput.ts +26 -0
- package/tui/src/utils/protectedNamespace.ts +5 -3
- package/tui/src/utils/rawJsonToolCall.ts +242 -0
- package/tui/src/utils/ripgrep.ts +16 -7
- package/tui/src/utils/sessionTitle.ts +1 -1
- package/tui/src/utils/settings/applySettingsChange.ts +4 -0
- package/tui/src/utils/settings/permissionValidation.ts +14 -2
- package/tui/src/utils/settings/types.ts +9 -3
- package/tui/src/utils/shell/prefix.ts +1 -1
- package/tui/src/utils/sideQuery.ts +1 -1
- package/tui/src/utils/stats.ts +1 -1
- package/tui/src/utils/systemThemeWatcher.ts +13 -3
- package/tui/src/utils/teleport.tsx +1 -1
- package/uv.lock +394 -22
- package/assets/copilot-gate-logo.svg +0 -58
- package/assets/govon-logo.svg +0 -40
- package/src/ummaya/eval/__init__.py +0 -5
- package/src/ummaya/eval/retrieval.py +0 -713
- package/tui/src/services/api/claude.ts +0 -3510
- package/tui/src/utils/messageStream.ts +0 -186
|
@@ -256,7 +256,7 @@ function SpinnerWithVerbInner({
|
|
|
256
256
|
const tipsEnabled = settings.spinnerTipsEnabled !== false;
|
|
257
257
|
const showClearTip = tipsEnabled && elapsedSnapshot > 1_800_000;
|
|
258
258
|
const showBtwTip = tipsEnabled && elapsedSnapshot > 30_000 && !getGlobalConfig().btwUseCount;
|
|
259
|
-
const effectiveTip = contextTipsActive ? undefined : showClearTip && !nextTask ? 'Use /clear to start fresh when switching topics and free up context' : showBtwTip && !nextTask ? "Use /btw to ask a quick side question without interrupting
|
|
259
|
+
const effectiveTip = contextTipsActive ? undefined : showClearTip && !nextTask ? 'Use /clear to start fresh when switching topics and free up context' : showBtwTip && !nextTask ? "Use /btw to ask a quick side question without interrupting UMMAYA's current work" : spinnerTip;
|
|
260
260
|
|
|
261
261
|
// Budget text (ant-only) — shown above the tip line
|
|
262
262
|
let budgetText: string | null = null;
|
|
@@ -559,4 +559,4 @@ function findNextPendingTask(tasks: Task[] | undefined): Task | undefined {
|
|
|
559
559
|
const unresolvedIds = new Set(tasks.filter(t => t.status !== 'completed').map(t => t.id));
|
|
560
560
|
return pendingTasks.find(t => !t.blockedBy.some(id => unresolvedIds.has(id))) ?? pendingTasks[0];
|
|
561
561
|
}
|
|
562
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCb3giLCJUZXh0IiwiUmVhY3QiLCJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJjb21wdXRlR2xpbW1lckluZGV4IiwiY29tcHV0ZVNoaW1tZXJTZWdtZW50cyIsIlNISU1NRVJfSU5URVJWQUxfTVMiLCJmZWF0dXJlIiwiZ2V0S2Fpcm9zQWN0aXZlIiwiZ2V0VXNlck1zZ09wdEluIiwiZ2V0RmVhdHVyZVZhbHVlX0NBQ0hFRF9NQVlfQkVfU1RBTEUiLCJpc0VudlRydXRoeSIsImNvdW50Iiwic2FtcGxlIiwiZm9ybWF0RHVyYXRpb24iLCJmb3JtYXROdW1iZXIiLCJmb3JtYXRTZWNvbmRzU2hvcnQiLCJUaGVtZSIsImFjdGl2aXR5TWFuYWdlciIsImdldFNwaW5uZXJWZXJicyIsIk1lc3NhZ2VSZXNwb25zZSIsIlRhc2tMaXN0VjIiLCJ1c2VUYXNrc1YyIiwiVGFzayIsInVzZUFwcFN0YXRlIiwidXNlVGVybWluYWxTaXplIiwic3RyaW5nV2lkdGgiLCJnZXREZWZhdWx0Q2hhcmFjdGVycyIsIlNwaW5uZXJNb2RlIiwiU3Bpbm5lckFuaW1hdGlvblJvdyIsInVzZVNldHRpbmdzIiwiaXNJblByb2Nlc3NUZWFtbWF0ZVRhc2siLCJpc0JhY2tncm91bmRUYXNrIiwiZ2V0QWxsSW5Qcm9jZXNzVGVhbW1hdGVUYXNrcyIsImdldEVmZm9ydFN1ZmZpeCIsImdldE1haW5Mb29wTW9kZWwiLCJnZXRWaWV3ZWRUZWFtbWF0ZVRhc2siLCJURUFSRFJPUF9BU1RFUklTSyIsImZpZ3VyZXMiLCJnZXRDdXJyZW50VHVyblRva2VuQnVkZ2V0IiwiZ2V0VHVybk91dHB1dFRva2VucyIsIlRlYW1tYXRlU3Bpbm5lclRyZWUiLCJ1c2VBbmltYXRpb25GcmFtZSIsImdldEdsb2JhbENvbmZpZyIsIkRFRkFVTFRfQ0hBUkFDVEVSUyIsIlNQSU5ORVJfRlJBTUVTIiwicmV2ZXJzZSIsIlByb3BzIiwibW9kZSIsImxvYWRpbmdTdGFydFRpbWVSZWYiLCJSZWZPYmplY3QiLCJ0b3RhbFBhdXNlZE1zUmVmIiwicGF1c2VTdGFydFRpbWVSZWYiLCJzcGlubmVyVGlwIiwicmVzcG9uc2VMZW5ndGhSZWYiLCJvdmVycmlkZUNvbG9yIiwib3ZlcnJpZGVTaGltbWVyQ29sb3IiLCJvdmVycmlkZU1lc3NhZ2UiLCJzcGlubmVyU3VmZml4IiwidmVyYm9zZSIsImhhc0FjdGl2ZVRvb2xzIiwibGVhZGVySXNJZGxlIiwiU3Bpbm5lcldpdGhWZXJiIiwicHJvcHMiLCJSZWFjdE5vZGUiLCJpc0JyaWVmT25seSIsInMiLCJ2aWV3aW5nQWdlbnRUYXNrSWQiLCJicmllZkVudkVuYWJsZWQiLCJwcm9jZXNzIiwiZW52IiwiQ0xBVURFX0NPREVfQlJJRUYiLCJTcGlubmVyV2l0aFZlcmJJbm5lciIsInNldHRpbmdzIiwicmVkdWNlZE1vdGlvbiIsInByZWZlcnNSZWR1Y2VkTW90aW9uIiwidGFza3MiLCJleHBhbmRlZFZpZXciLCJzaG93RXhwYW5kZWRUb2RvcyIsInNob3dTcGlubmVyVHJlZSIsInNlbGVjdGVkSVBBZ2VudEluZGV4Iiwidmlld1NlbGVjdGlvbk1vZGUiLCJmb3JlZ3JvdW5kZWRUZWFtbWF0ZSIsInVuZGVmaW5lZCIsImNvbHVtbnMiLCJ0YXNrc1YyIiwidGhpbmtpbmdTdGF0dXMiLCJzZXRUaGlua2luZ1N0YXR1cyIsInRoaW5raW5nU3RhcnRSZWYiLCJzaG93RHVyYXRpb25UaW1lciIsIlJldHVyblR5cGUiLCJzZXRUaW1lb3V0IiwiY2xlYXJTdGF0dXNUaW1lciIsImN1cnJlbnQiLCJEYXRlIiwibm93IiwiZHVyYXRpb24iLCJlbGFwc2VkIiwicmVtYWluaW5nVGhpbmtpbmdUaW1lIiwiTWF0aCIsIm1heCIsInNob3dEdXJhdGlvbiIsImNsZWFyVGltZW91dCIsImN1cnJlbnRUb2RvIiwiZmluZCIsInRhc2siLCJzdGF0dXMiLCJuZXh0VGFzayIsImZpbmROZXh0UGVuZGluZ1Rhc2siLCJyYW5kb21WZXJiIiwibGVhZGVyVmVyYiIsImFjdGl2ZUZvcm0iLCJzdWJqZWN0IiwiZWZmZWN0aXZlVmVyYiIsImlzSWRsZSIsInNwaW5uZXJWZXJiIiwibWVzc2FnZSIsIm9wZXJhdGlvbklkIiwic3RhcnRDTElBY3Rpdml0eSIsImVuZENMSUFjdGl2aXR5IiwiZWZmb3J0VmFsdWUiLCJlZmZvcnRTdWZmaXgiLCJydW5uaW5nVGVhbW1hdGVzIiwiZmlsdGVyIiwidCIsImhhc1J1bm5pbmdUZWFtbWF0ZXMiLCJsZW5ndGgiLCJhbGxJZGxlIiwiZXZlcnkiLCJ0ZWFtbWF0ZVRva2VucyIsIk9iamVjdCIsInZhbHVlcyIsInByb2dyZXNzIiwidG9rZW5Db3VudCIsImVsYXBzZWRTbmFwc2hvdCIsImxlYWRlclRva2VuQ291bnQiLCJyb3VuZCIsImRlZmF1bHRDb2xvciIsImRlZmF1bHRTaGltbWVyQ29sb3IiLCJtZXNzYWdlQ29sb3IiLCJzaGltbWVyQ29sb3IiLCJ0dGZ0VGV4dCIsImFwaU1ldHJpY3NSZWYiLCJjb21wdXRlVHRmdFRleHQiLCJpZGxlVGV4dCIsInN0YXJ0VGltZSIsImNvbnRleHRUaXBzQWN0aXZlIiwidGlwc0VuYWJsZWQiLCJzcGlubmVyVGlwc0VuYWJsZWQiLCJzaG93Q2xlYXJUaXAiLCJzaG93QnR3VGlwIiwiYnR3VXNlQ291bnQiLCJlZmZlY3RpdmVUaXAiLCJidWRnZXRUZXh0IiwiYnVkZ2V0IiwidG9rZW5zIiwidGljayIsInBjdCIsInJlbWFpbmluZyIsInJhdGUiLCJldGEiLCJtb3N0U2lnbmlmaWNhbnRPbmx5IiwiQnJpZWZTcGlubmVyUHJvcHMiLCJCcmllZlNwaW5uZXIiLCJ0MCIsIiQiLCJfYyIsIl90ZW1wNCIsInZlcmIiLCJjb25uU3RhdHVzIiwiX3RlbXA1IiwidDEiLCJ0MiIsInRpbWUiLCJydW5uaW5nQ291bnQiLCJfdGVtcDYiLCJzaG93Q29ubldhcm5pbmciLCJjb25uVGV4dCIsImRvdEZyYW1lIiwiZmxvb3IiLCJ0MyIsInJlcGVhdCIsInBhZEVuZCIsImRvdHMiLCJ0NCIsInZlcmJXaWR0aCIsInQ1IiwiZ2xpbW1lckluZGV4IiwiYmVmb3JlIiwic2hpbW1lciIsImFmdGVyIiwicmlnaHRUZXh0IiwidDYiLCJsZWZ0V2lkdGgiLCJwYWQiLCJ0NyIsInQ4IiwidDkiLCJzXzAiLCJyZW1vdGVCYWNrZ3JvdW5kVGFza0NvdW50IiwicmVtb3RlQ29ubmVjdGlvblN0YXR1cyIsIkJyaWVmSWRsZVN0YXR1cyIsIl90ZW1wNyIsIl90ZW1wOCIsImxlZnRUZXh0IiwiU3ltYm9sIiwiZm9yIiwiU3Bpbm5lciIsInJlZiIsImZyYW1lIiwicGVuZGluZ1Rhc2tzIiwidW5yZXNvbHZlZElkcyIsIlNldCIsIm1hcCIsImlkIiwiYmxvY2tlZEJ5Iiwic29tZSIsImhhcyJdLCJzb3VyY2VzIjpbIlNwaW5uZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGJpb21lLWlnbm9yZS1hbGwgYXNzaXN0L3NvdXJjZS9vcmdhbml6ZUltcG9ydHM6IEFOVC1PTkxZIGltcG9ydCBtYXJrZXJzIG11c3Qgbm90IGJlIHJlb3JkZXJlZFxuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnLi4vaW5rLmpzJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIGNvbXB1dGVHbGltbWVySW5kZXgsXG4gIGNvbXB1dGVTaGltbWVyU2VnbWVudHMsXG4gIFNISU1NRVJfSU5URVJWQUxfTVMsXG59IGZyb20gJy4uL2JyaWRnZS9icmlkZ2VTdGF0dXNVdGlsLmpzJ1xuaW1wb3J0IHsgZmVhdHVyZSB9IGZyb20gJ2J1bjpidW5kbGUnXG5pbXBvcnQgeyBnZXRLYWlyb3NBY3RpdmUsIGdldFVzZXJNc2dPcHRJbiB9IGZyb20gJy4uL2Jvb3RzdHJhcC9zdGF0ZS5qcydcbmltcG9ydCB7IGdldEZlYXR1cmVWYWx1ZV9DQUNIRURfTUFZX0JFX1NUQUxFIH0gZnJvbSAnLi4vc2VydmljZXMvYW5hbHl0aWNzL2dyb3d0aGJvb2suanMnXG5pbXBvcnQgeyBpc0VudlRydXRoeSB9IGZyb20gJy4uL3V0aWxzL2VudlV0aWxzLmpzJ1xuaW1wb3J0IHsgY291bnQgfSBmcm9tICcuLi91dGlscy9hcnJheS5qcydcbmltcG9ydCBzYW1wbGUgZnJvbSAnbG9kYXNoLWVzL3NhbXBsZS5qcydcbmltcG9ydCB7XG4gIGZvcm1hdER1cmF0aW9uLFxuICBmb3JtYXROdW1iZXIsXG4gIGZvcm1hdFNlY29uZHNTaG9ydCxcbn0gZnJvbSAnLi4vdXRpbHMvZm9ybWF0LmpzJ1xuaW1wb3J0IHR5cGUgeyBUaGVtZSB9IGZyb20gJ3NyYy91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IGFjdGl2aXR5TWFuYWdlciB9IGZyb20gJy4uL3V0aWxzL2FjdGl2aXR5TWFuYWdlci5qcydcbmltcG9ydCB7IGdldFNwaW5uZXJWZXJicyB9IGZyb20gJy4uL2NvbnN0YW50cy9zcGlubmVyVmVyYnMuanMnXG5pbXBvcnQgeyBNZXNzYWdlUmVzcG9uc2UgfSBmcm9tICcuL01lc3NhZ2VSZXNwb25zZS5qcydcbmltcG9ydCB7IFRhc2tMaXN0VjIgfSBmcm9tICcuL1Rhc2tMaXN0VjIuanMnXG5pbXBvcnQgeyB1c2VUYXNrc1YyIH0gZnJvbSAnLi4vaG9va3MvdXNlVGFza3NWMi5qcydcbmltcG9ydCB0eXBlIHsgVGFzayB9IGZyb20gJy4uL3V0aWxzL3Rhc2tzLmpzJ1xuaW1wb3J0IHsgdXNlQXBwU3RhdGUgfSBmcm9tICcuLi9zdGF0ZS9BcHBTdGF0ZS5qcydcbmltcG9ydCB7IHVzZVRlcm1pbmFsU2l6ZSB9IGZyb20gJy4uL2hvb2tzL3VzZVRlcm1pbmFsU2l6ZS5qcydcbmltcG9ydCB7IHN0cmluZ1dpZHRoIH0gZnJvbSAnLi4vaW5rL3N0cmluZ1dpZHRoLmpzJ1xuaW1wb3J0IHsgZ2V0RGVmYXVsdENoYXJhY3RlcnMsIHR5cGUgU3Bpbm5lck1vZGUgfSBmcm9tICcuL1NwaW5uZXIvaW5kZXguanMnXG5pbXBvcnQgeyBTcGlubmVyQW5pbWF0aW9uUm93IH0gZnJvbSAnLi9TcGlubmVyL1NwaW5uZXJBbmltYXRpb25Sb3cuanMnXG5pbXBvcnQgeyB1c2VTZXR0aW5ncyB9IGZyb20gJy4uL2hvb2tzL3VzZVNldHRpbmdzLmpzJ1xuaW1wb3J0IHsgaXNJblByb2Nlc3NUZWFtbWF0ZVRhc2sgfSBmcm9tICcuLi90YXNrcy9JblByb2Nlc3NUZWFtbWF0ZVRhc2svdHlwZXMuanMnXG5pbXBvcnQgeyBpc0JhY2tncm91bmRUYXNrIH0gZnJvbSAnLi4vdGFza3MvdHlwZXMuanMnXG5pbXBvcnQgeyBnZXRBbGxJblByb2Nlc3NUZWFtbWF0ZVRhc2tzIH0gZnJvbSAnLi4vdGFza3MvSW5Qcm9jZXNzVGVhbW1hdGVUYXNrL0luUHJvY2Vzc1RlYW1tYXRlVGFzay5qcydcbmltcG9ydCB7IGdldEVmZm9ydFN1ZmZpeCB9IGZyb20gJy4uL3V0aWxzL2VmZm9ydC5qcydcbmltcG9ydCB7IGdldE1haW5Mb29wTW9kZWwgfSBmcm9tICcuLi91dGlscy9tb2RlbC9tb2RlbC5qcydcbmltcG9ydCB7IGdldFZpZXdlZFRlYW1tYXRlVGFzayB9IGZyb20gJy4uL3N0YXRlL3NlbGVjdG9ycy5qcydcbmltcG9ydCB7IFRFQVJEUk9QX0FTVEVSSVNLIH0gZnJvbSAnLi4vY29uc3RhbnRzL2ZpZ3VyZXMuanMnXG5pbXBvcnQgZmlndXJlcyBmcm9tICdmaWd1cmVzJ1xuaW1wb3J0IHtcbiAgZ2V0Q3VycmVudFR1cm5Ub2tlbkJ1ZGdldCxcbiAgZ2V0VHVybk91dHB1dFRva2Vucyxcbn0gZnJvbSAnLi4vYm9vdHN0cmFwL3N0YXRlLmpzJ1xuXG5pbXBvcnQgeyBUZWFtbWF0ZVNwaW5uZXJUcmVlIH0gZnJvbSAnLi9TcGlubmVyL1RlYW1tYXRlU3Bpbm5lclRyZWUuanMnXG5pbXBvcnQgeyB1c2VBbmltYXRpb25GcmFtZSB9IGZyb20gJy4uL2luay5qcydcbmltcG9ydCB7IGdldEdsb2JhbENvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZy5qcydcbmV4cG9ydCB0eXBlIHsgU3Bpbm5lck1vZGUgfSBmcm9tICcuL1NwaW5uZXIvaW5kZXguanMnXG5cbmNvbnN0IERFRkFVTFRfQ0hBUkFDVEVSUyA9IGdldERlZmF1bHRDaGFyYWN0ZXJzKClcblxuY29uc3QgU1BJTk5FUl9GUkFNRVMgPSBbXG4gIC4uLkRFRkFVTFRfQ0hBUkFDVEVSUyxcbiAgLi4uWy4uLkRFRkFVTFRfQ0hBUkFDVEVSU10ucmV2ZXJzZSgpLFxuXVxuXG5cbnR5cGUgUHJvcHMgPSB7XG4gIG1vZGU6IFNwaW5uZXJNb2RlXG4gIGxvYWRpbmdTdGFydFRpbWVSZWY6IFJlYWN0LlJlZk9iamVjdDxudW1iZXI+XG4gIHRvdGFsUGF1c2VkTXNSZWY6IFJlYWN0LlJlZk9iamVjdDxudW1iZXI+XG4gIHBhdXNlU3RhcnRUaW1lUmVmOiBSZWFjdC5SZWZPYmplY3Q8bnVtYmVyIHwgbnVsbD5cbiAgc3Bpbm5lclRpcD86IHN0cmluZ1xuICByZXNwb25zZUxlbmd0aFJlZjogUmVhY3QuUmVmT2JqZWN0PG51bWJlcj5cbiAgb3ZlcnJpZGVDb2xvcj86IGtleW9mIFRoZW1lIHwgbnVsbFxuICBvdmVycmlkZVNoaW1tZXJDb2xvcj86IGtleW9mIFRoZW1lIHwgbnVsbFxuICBvdmVycmlkZU1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsXG4gIHNwaW5uZXJTdWZmaXg/OiBzdHJpbmcgfCBudWxsXG4gIHZlcmJvc2U6IGJvb2xlYW5cbiAgaGFzQWN0aXZlVG9vbHM/OiBib29sZWFuXG4gIC8qKiBMZWFkZXIncyB0dXJuIGhhcyBjb21wbGV0ZWQgKG5vIGFjdGl2ZSBxdWVyeSkuIFVzZWQgdG8gc3VwcHJlc3Mgc3RhbGwtcmVkIHNwaW5uZXIgd2hlbiBvbmx5IHRlYW1tYXRlcyBhcmUgcnVubmluZy4gKi9cbiAgbGVhZGVySXNJZGxlPzogYm9vbGVhblxufVxuXG4vLyBUaGluIHdyYXBwZXI6IGJyYW5jaGVzIG9uIGlzQnJpZWZPbmx5IHNvIHRoZSB0d28gdmFyaWFudHMgaGF2ZSBpbmRlcGVuZGVudFxuLy8gaG9vayBjYWxsIGNoYWlucy4gV2l0aG91dCB0aGlzIHNwbGl0LCB0b2dnbGluZyAvYnJpZWYgbWlkLXJlbmRlciB3b3VsZFxuLy8gdmlvbGF0ZSBSdWxlcyBvZiBIb29rcyAodGhlIGlubmVyIHZhcmlhbnQgY2FsbHMgfjEwIG1vcmUgaG9va3MpLlxuZXhwb3J0IGZ1bmN0aW9uIFNwaW5uZXJXaXRoVmVyYihwcm9wczogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBpc0JyaWVmT25seSA9IHVzZUFwcFN0YXRlKHMgPT4gcy5pc0JyaWVmT25seSlcbiAgLy8gUkVQTCBvdmVycmlkZXMgaXNCcmllZk9ubHnihpJmYWxzZSB3aGVuIHZpZXdpbmcgYSB0ZWFtbWF0ZSB0cmFuc2NyaXB0XG4gIC8vIChzZWUgaXNCcmllZk9ubHk9e3ZpZXdlZFRlYW1tYXRlVGFzayA/IGZhbHNlIDogaXNCcmllZk9ubHl9KS4gVGhhdFxuICAvLyBwcm9wIGlzbid0IHRocmVhZGVkIGhlcmUsIHNvIHJlcGxpY2F0ZSB0aGUgZ2F0ZSBmcm9tIHRoZSBzdG9yZSDigJRcbiAgLy8gdGVhbW1hdGUgdmlldyBuZWVkcyB0aGUgcmVhbCBzcGlubmVyICh3aGljaCBzaG93cyB0ZWFtbWF0ZSBzdGF0dXMpLlxuICBjb25zdCB2aWV3aW5nQWdlbnRUYXNrSWQgPSB1c2VBcHBTdGF0ZShzID0+IHMudmlld2luZ0FnZW50VGFza0lkKVxuICAvLyBIb2lzdGVkIHRvIG1vdW50LXRpbWUg4oCUIHRoaXMgY29tcG9uZW50IHJlLXJlbmRlcnMgYXQgYW5pbWF0aW9uIGZyYW1lcmF0ZS5cbiAgY29uc3QgYnJpZWZFbnZFbmFibGVkID1cbiAgICBmZWF0dXJlKCdLQUlST1MnKSB8fCBmZWF0dXJlKCdLQUlST1NfQlJJRUYnKVxuICAgICAgPyAvLyBiaW9tZS1pZ25vcmUgbGludC9jb3JyZWN0bmVzcy91c2VIb29rQXRUb3BMZXZlbDogZmVhdHVyZSgpIGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50XG4gICAgICAgIHVzZU1lbW8oKCkgPT4gaXNFbnZUcnV0aHkocHJvY2Vzcy5lbnYuQ0xBVURFX0NPREVfQlJJRUYpLCBbXSlcbiAgICAgIDogZmFsc2VcblxuICAvLyBSdW50aW1lIGdhdGUgbWlycm9ycyBpc0JyaWVmRW5hYmxlZCgpIGJ1dCBpbmxpbmVkIOKAlCBpbXBvcnRpbmcgZnJvbVxuICAvLyBCcmllZlRvb2wudHMgd291bGQgbGVhayB0b29sLW5hbWUgc3RyaW5ncyBpbnRvIGV4dGVybmFsIGJ1aWxkcy4gU2luZ2xlXG4gIC8vIHNwaW5uZXIgaW5zdGFuY2Ug4oaSIGhvb2tzIHN0YXkgdW5jb25kaXRpb25hbCAodHdvIHN1YnMsIG5lZ2xpZ2libGUpLlxuICBpZiAoXG4gICAgKGZlYXR1cmUoJ0tBSVJPUycpIHx8IGZlYXR1cmUoJ0tBSVJPU19CUklFRicpKSAmJlxuICAgIChnZXRLYWlyb3NBY3RpdmUoKSB8fFxuICAgICAgKGdldFVzZXJNc2dPcHRJbigpICYmXG4gICAgICAgIChicmllZkVudkVuYWJsZWQgfHxcbiAgICAgICAgICBnZXRGZWF0dXJlVmFsdWVfQ0FDSEVEX01BWV9CRV9TVEFMRSgndGVuZ3Vfa2Fpcm9zX2JyaWVmJywgZmFsc2UpKSkpICYmXG4gICAgaXNCcmllZk9ubHkgJiZcbiAgICAhdmlld2luZ0FnZW50VGFza0lkXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICA8QnJpZWZTcGlubmVyIG1vZGU9e3Byb3BzLm1vZGV9IG92ZXJyaWRlTWVzc2FnZT17cHJvcHMub3ZlcnJpZGVNZXNzYWdlfSAvPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiA8U3Bpbm5lcldpdGhWZXJiSW5uZXIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTcGlubmVyV2l0aFZlcmJJbm5lcih7XG4gIG1vZGUsXG4gIGxvYWRpbmdTdGFydFRpbWVSZWYsXG4gIHRvdGFsUGF1c2VkTXNSZWYsXG4gIHBhdXNlU3RhcnRUaW1lUmVmLFxuICBzcGlubmVyVGlwLFxuICByZXNwb25zZUxlbmd0aFJlZixcbiAgb3ZlcnJpZGVDb2xvcixcbiAgb3ZlcnJpZGVTaGltbWVyQ29sb3IsXG4gIG92ZXJyaWRlTWVzc2FnZSxcbiAgc3Bpbm5lclN1ZmZpeCxcbiAgdmVyYm9zZSxcbiAgaGFzQWN0aXZlVG9vbHMgPSBmYWxzZSxcbiAgbGVhZGVySXNJZGxlID0gZmFsc2UsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHNldHRpbmdzID0gdXNlU2V0dGluZ3MoKVxuICBjb25zdCByZWR1Y2VkTW90aW9uID0gc2V0dGluZ3MucHJlZmVyc1JlZHVjZWRNb3Rpb24gPz8gZmFsc2VcblxuICAvLyBOT1RFOiB1c2VBbmltYXRpb25GcmFtZSg1MCkgbGl2ZXMgaW4gU3Bpbm5lckFuaW1hdGlvblJvdywgbm90IGhlcmUuXG4gIC8vIFRoaXMgY29tcG9uZW50IG9ubHkgcmUtcmVuZGVycyB3aGVuIHByb3BzIG9yIGFwcCBzdGF0ZSBjaGFuZ2Ug4oCUXG4gIC8vIGl0IGlzIG5vIGxvbmdlciBvbiB0aGUgNTBtcyBjbG9jay4gQWxsIGB0aW1lYC1kZXJpdmVkIHZhbHVlc1xuICAvLyAoZnJhbWUsIGdsaW1tZXIsIHN0YWxsZWQgaW50ZW5zaXR5LCB0b2tlbiBjb3VudGVyLCB0aGlua2luZyBzaGltbWVyLFxuICAvLyBlbGFwc2VkLXRpbWUgdGltZXIpIGFyZSBjb21wdXRlZCBpbnNpZGUgdGhlIGNoaWxkLlxuXG4gIGNvbnN0IHRhc2tzID0gdXNlQXBwU3RhdGUocyA9PiBzLnRhc2tzKVxuICBjb25zdCB2aWV3aW5nQWdlbnRUYXNrSWQgPSB1c2VBcHBTdGF0ZShzID0+IHMudmlld2luZ0FnZW50VGFza0lkKVxuICBjb25zdCBleHBhbmRlZFZpZXcgPSB1c2VBcHBTdGF0ZShzID0+IHMuZXhwYW5kZWRWaWV3KVxuICBjb25zdCBzaG93RXhwYW5kZWRUb2RvcyA9IGV4cGFuZGVkVmlldyA9PT0gJ3Rhc2tzJ1xuICBjb25zdCBzaG93U3Bpbm5lclRyZWUgPSBleHBhbmRlZFZpZXcgPT09ICd0ZWFtbWF0ZXMnXG4gIGNvbnN0IHNlbGVjdGVkSVBBZ2VudEluZGV4ID0gdXNlQXBwU3RhdGUocyA9PiBzLnNlbGVjdGVkSVBBZ2VudEluZGV4KVxuICBjb25zdCB2aWV3U2VsZWN0aW9uTW9kZSA9IHVzZUFwcFN0YXRlKHMgPT4gcy52aWV3U2VsZWN0aW9uTW9kZSlcbiAgLy8gR2V0IGZvcmVncm91bmRlZCB0ZWFtbWF0ZSAoaWYgdmlld2luZyBhIHRlYW1tYXRlJ3MgdHJhbnNjcmlwdClcbiAgY29uc3QgZm9yZWdyb3VuZGVkVGVhbW1hdGUgPSB2aWV3aW5nQWdlbnRUYXNrSWRcbiAgICA/IGdldFZpZXdlZFRlYW1tYXRlVGFzayh7IHZpZXdpbmdBZ2VudFRhc2tJZCwgdGFza3MgfSlcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCB7IGNvbHVtbnMgfSA9IHVzZVRlcm1pbmFsU2l6ZSgpXG4gIGNvbnN0IHRhc2tzVjIgPSB1c2VUYXNrc1YyKClcblxuICAvLyBUcmFjayB0aGlua2luZyBzdGF0dXM6ICd0aGlua2luZycgfCBudW1iZXIgKGR1cmF0aW9uIGluIG1zKSB8IG51bGxcbiAgLy8gU2hvd3MgZWFjaCBzdGF0ZSBmb3IgbWluaW11bSAycyB0byBhdm9pZCBVSSBqYW5rXG4gIGNvbnN0IFt0aGlua2luZ1N0YXR1cywgc2V0VGhpbmtpbmdTdGF0dXNdID0gdXNlU3RhdGU8XG4gICAgJ3RoaW5raW5nJyB8IG51bWJlciB8IG51bGxcbiAgPihudWxsKVxuICBjb25zdCB0aGlua2luZ1N0YXJ0UmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgc2hvd0R1cmF0aW9uVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGxcbiAgICBsZXQgY2xlYXJTdGF0dXNUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbFxuXG4gICAgaWYgKG1vZGUgPT09ICd0aGlua2luZycpIHtcbiAgICAgIC8vIFN0YXJ0ZWQgdGhpbmtpbmdcbiAgICAgIGlmICh0aGlua2luZ1N0YXJ0UmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgdGhpbmtpbmdTdGFydFJlZi5jdXJyZW50ID0gRGF0ZS5ub3coKVxuICAgICAgICBzZXRUaGlua2luZ1N0YXR1cygndGhpbmtpbmcnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpbmtpbmdTdGFydFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBTdG9wcGVkIHRoaW5raW5nIC0gY2FsY3VsYXRlIGR1cmF0aW9uIGFuZCBlbnN1cmUgMnMgbWluaW11bSBkaXNwbGF5XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSB0aGlua2luZ1N0YXJ0UmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gdGhpbmtpbmdTdGFydFJlZi5jdXJyZW50XG4gICAgICBjb25zdCByZW1haW5pbmdUaGlua2luZ1RpbWUgPSBNYXRoLm1heCgwLCAyMDAwIC0gZWxhcHNlZClcblxuICAgICAgdGhpbmtpbmdTdGFydFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICAvLyBTaG93IFwidGhpbmtpbmcuLi5cIiBmb3IgcmVtYWluaW5nIHRpbWUgaWYgPCAycyBlbGFwc2VkLCB0aGVuIHNob3cgZHVyYXRpb25cbiAgICAgIGNvbnN0IHNob3dEdXJhdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgc2V0VGhpbmtpbmdTdGF0dXMoZHVyYXRpb24pXG4gICAgICAgIC8vIENsZWFyIGFmdGVyIDJzXG4gICAgICAgIGNsZWFyU3RhdHVzVGltZXIgPSBzZXRUaW1lb3V0KHNldFRoaW5raW5nU3RhdHVzLCAyMDAwLCBudWxsKVxuICAgICAgfVxuXG4gICAgICBpZiAocmVtYWluaW5nVGhpbmtpbmdUaW1lID4gMCkge1xuICAgICAgICBzaG93RHVyYXRpb25UaW1lciA9IHNldFRpbWVvdXQoc2hvd0R1cmF0aW9uLCByZW1haW5pbmdUaGlua2luZ1RpbWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaG93RHVyYXRpb24oKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2hvd0R1cmF0aW9uVGltZXIpIGNsZWFyVGltZW91dChzaG93RHVyYXRpb25UaW1lcilcbiAgICAgIGlmIChjbGVhclN0YXR1c1RpbWVyKSBjbGVhclRpbWVvdXQoY2xlYXJTdGF0dXNUaW1lcilcbiAgICB9XG4gIH0sIFttb2RlXSlcblxuICAvLyBGaW5kIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIHRhc2sgYW5kIG5leHQgcGVuZGluZyB0YXNrXG4gIGNvbnN0IGN1cnJlbnRUb2RvID0gdGFza3NWMj8uZmluZChcbiAgICB0YXNrID0+IHRhc2suc3RhdHVzICE9PSAncGVuZGluZycgJiYgdGFzay5zdGF0dXMgIT09ICdjb21wbGV0ZWQnLFxuICApXG4gIGNvbnN0IG5leHRUYXNrID0gZmluZE5leHRQZW5kaW5nVGFzayh0YXNrc1YyKVxuXG4gIC8vIFVzZSB1c2VTdGF0ZSB3aXRoIGluaXRpYWxpemVyIHRvIHBpY2sgYSByYW5kb20gdmVyYiBvbmNlIG9uIG1vdW50XG4gIGNvbnN0IFtyYW5kb21WZXJiXSA9IHVzZVN0YXRlKCgpID0+IHNhbXBsZShnZXRTcGlubmVyVmVyYnMoKSkpXG5cbiAgLy8gTGVhZGVyJ3Mgb3duIHZlcmIgKGFsd2F5cyB0aGUgbGVhZGVyJ3MsIHJlZ2FyZGxlc3Mgb2Ygd2hvIGlzIGZvcmVncm91bmRlZClcbiAgY29uc3QgbGVhZGVyVmVyYiA9XG4gICAgb3ZlcnJpZGVNZXNzYWdlID8/XG4gICAgY3VycmVudFRvZG8/LmFjdGl2ZUZvcm0gPz9cbiAgICBjdXJyZW50VG9kbz8uc3ViamVjdCA/P1xuICAgIHJhbmRvbVZlcmJcblxuICBjb25zdCBlZmZlY3RpdmVWZXJiID1cbiAgICBmb3JlZ3JvdW5kZWRUZWFtbWF0ZSAmJiAhZm9yZWdyb3VuZGVkVGVhbW1hdGUuaXNJZGxlXG4gICAgICA/IChmb3JlZ3JvdW5kZWRUZWFtbWF0ZS5zcGlubmVyVmVyYiA/PyByYW5kb21WZXJiKVxuICAgICAgOiBsZWFkZXJWZXJiXG4gIGNvbnN0IG1lc3NhZ2UgPSBlZmZlY3RpdmVWZXJiICsgJ+KApidcblxuICAvLyBUcmFjayBDTEkgYWN0aXZpdHkgd2hlbiBzcGlubmVyIGlzIGFjdGl2ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gJ3NwaW5uZXItJyArIG1vZGVcbiAgICBhY3Rpdml0eU1hbmFnZXIuc3RhcnRDTElBY3Rpdml0eShvcGVyYXRpb25JZClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWN0aXZpdHlNYW5hZ2VyLmVuZENMSUFjdGl2aXR5KG9wZXJhdGlvbklkKVxuICAgIH1cbiAgfSwgW21vZGVdKVxuXG4gIGNvbnN0IGVmZm9ydFZhbHVlID0gdXNlQXBwU3RhdGUocyA9PiBzLmVmZm9ydFZhbHVlKVxuICBjb25zdCBlZmZvcnRTdWZmaXggPSBnZXRFZmZvcnRTdWZmaXgoZ2V0TWFpbkxvb3BNb2RlbCgpLCBlZmZvcnRWYWx1ZSlcblxuICAvLyBDaGVjayBpZiBhbnkgcnVubmluZyBpbi1wcm9jZXNzIHRlYW1tYXRlcyBleGlzdCAobmVlZGVkIGZvciBib3RoIG1vZGVzKVxuICBjb25zdCBydW5uaW5nVGVhbW1hdGVzID0gZ2V0QWxsSW5Qcm9jZXNzVGVhbW1hdGVUYXNrcyh0YXNrcykuZmlsdGVyKFxuICAgIHQgPT4gdC5zdGF0dXMgPT09ICdydW5uaW5nJyxcbiAgKVxuICBjb25zdCBoYXNSdW5uaW5nVGVhbW1hdGVzID0gcnVubmluZ1RlYW1tYXRlcy5sZW5ndGggPiAwXG4gIGNvbnN0IGFsbElkbGUgPSBoYXNSdW5uaW5nVGVhbW1hdGVzICYmIHJ1bm5pbmdUZWFtbWF0ZXMuZXZlcnkodCA9PiB0LmlzSWRsZSlcblxuICAvLyBHYXRoZXIgYWdncmVnYXRlIHRva2VuIHN0YXRzIGZyb20gYWxsIHJ1bm5pbmcgc3dhcm0gdGVhbW1hdGVzXG4gIC8vIEluIHNwaW5uZXItdHJlZSBtb2RlLCBza2lwIGFnZ3JlZ2F0aW9uICh0ZWFtbWF0ZXMgaGF2ZSB0aGVpciBvd24gbGluZXMgaW4gdGhlIHRyZWUpXG4gIGxldCB0ZWFtbWF0ZVRva2VucyA9IDBcbiAgaWYgKCFzaG93U3Bpbm5lclRyZWUpIHtcbiAgICBmb3IgKGNvbnN0IHRhc2sgb2YgT2JqZWN0LnZhbHVlcyh0YXNrcykpIHtcbiAgICAgIGlmIChpc0luUHJvY2Vzc1RlYW1tYXRlVGFzayh0YXNrKSAmJiB0YXNrLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgIGlmICh0YXNrLnByb2dyZXNzPy50b2tlbkNvdW50KSB7XG4gICAgICAgICAgdGVhbW1hdGVUb2tlbnMgKz0gdGFzay5wcm9ncmVzcy50b2tlbkNvdW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTdGFsZSByZWFkIG9mIHRoZSByZWZzIGZvciBzaG93QnR3VGlwIGJlbG93IOKAlCB3ZSdyZSBvZmYgdGhlIDUwbXMgY2xvY2tcbiAgLy8gc28gdGhpcyBvbmx5IHVwZGF0ZXMgd2hlbiBwcm9wcy9hcHAgc3RhdGUgY2hhbmdlLCB3aGljaCBpcyBzdWZmaWNpZW50IGZvclxuICAvLyBhIGNvYXJzZSAzMHMgdGhyZXNob2xkLlxuICBjb25zdCBlbGFwc2VkU25hcHNob3QgPVxuICAgIHBhdXNlU3RhcnRUaW1lUmVmLmN1cnJlbnQgIT09IG51bGxcbiAgICAgID8gcGF1c2VTdGFydFRpbWVSZWYuY3VycmVudCAtXG4gICAgICAgIGxvYWRpbmdTdGFydFRpbWVSZWYuY3VycmVudCAtXG4gICAgICAgIHRvdGFsUGF1c2VkTXNSZWYuY3VycmVudFxuICAgICAgOiBEYXRlLm5vdygpIC0gbG9hZGluZ1N0YXJ0VGltZVJlZi5jdXJyZW50IC0gdG90YWxQYXVzZWRNc1JlZi5jdXJyZW50XG5cbiAgLy8gTGVhZGVyIHRva2VuIGNvdW50IGZvciBUZWFtbWF0ZVNwaW5uZXJUcmVlIOKAlCByZWFkIHJhdyAobm9uLWFuaW1hdGVkKSBmcm9tXG4gIC8vIHRoZSByZWYuIFRoZSB0cmVlIGlzIG9ubHkgc2hvd24gd2hlbiB0ZWFtbWF0ZXMgYXJlIHJ1bm5pbmc7IHRlYW1tYXRlXG4gIC8vIHByb2dyZXNzIHVwZGF0ZXMgdG8gcy50YXNrcyB0cmlnZ2VyIHJlLXJlbmRlcnMgdGhhdCBrZWVwIHRoaXMgZnJlc2guXG4gIGNvbnN0IGxlYWRlclRva2VuQ291bnQgPSBNYXRoLnJvdW5kKHJlc3BvbnNlTGVuZ3RoUmVmLmN1cnJlbnQgLyA0KVxuXG4gIGNvbnN0IGRlZmF1bHRDb2xvcjoga2V5b2YgVGhlbWUgPSAnY2xhdWRlJ1xuICBjb25zdCBkZWZhdWx0U2hpbW1lckNvbG9yID0gJ2NsYXVkZVNoaW1tZXInXG4gIGNvbnN0IG1lc3NhZ2VDb2xvciA9IG92ZXJyaWRlQ29sb3IgPz8gZGVmYXVsdENvbG9yXG4gIGNvbnN0IHNoaW1tZXJDb2xvciA9IG92ZXJyaWRlU2hpbW1lckNvbG9yID8/IGRlZmF1bHRTaGltbWVyQ29sb3JcblxuICAvLyBDb21wdXRlIFRURlQgc3RyaW5nIGhlcmUgKG9mZiB0aGUgNTBtcyBhbmltYXRpb24gY2xvY2spIGFuZCBwYXNzIHRvXG4gIC8vIFNwaW5uZXJBbmltYXRpb25Sb3cgc28gaXQgZm9sZHMgaW50byB0aGUgYCh0aG91Z2h0IGZvciBOcyDCtyAuLi4pYCBzdGF0dXNcbiAgLy8gbGluZSBpbnN0ZWFkIG9mIHRha2luZyBhIHNlcGFyYXRlIHJvdy4gYXBpTWV0cmljc1JlZiBpcyBhIHJlZiBzbyB0aGlzXG4gIC8vIGRvZXNuJ3QgdHJpZ2dlciByZS1yZW5kZXJzOyB3ZSBwaWNrIHVwIHVwZGF0ZXMgb24gdGhlIHBhcmVudCdzIH4yNXgvdHVyblxuICAvLyByZS1yZW5kZXIgY2FkZW5jZSwgc2FtZSBhcyB0aGUgb2xkIEFwaU1ldHJpY3NMaW5lIGRpZC5cbiAgbGV0IHR0ZnRUZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBpZiAoXG4gICAgXCJleHRlcm5hbFwiID09PSAnYW50JyAmJlxuICAgIGFwaU1ldHJpY3NSZWY/LmN1cnJlbnQgJiZcbiAgICBhcGlNZXRyaWNzUmVmLmN1cnJlbnQubGVuZ3RoID4gMFxuICApIHtcbiAgICB0dGZ0VGV4dCA9IGNvbXB1dGVUdGZ0VGV4dChhcGlNZXRyaWNzUmVmLmN1cnJlbnQpXG4gIH1cblxuICAvLyBXaGVuIGxlYWRlciBpcyBpZGxlIGJ1dCB0ZWFtbWF0ZXMgYXJlIHJ1bm5pbmcgKGFuZCB3ZSdyZSB2aWV3aW5nIHRoZSBsZWFkZXIpLFxuICAvLyBzaG93IGEgc3RhdGljIGRpbSBpZGxlIGRpc3BsYXkgaW5zdGVhZCBvZiB0aGUgYW5pbWF0ZWQgc3Bpbm5lciDigJQgb3RoZXJ3aXNlXG4gIC8vIHVzZVN0YWxsZWRBbmltYXRpb24gZGV0ZWN0cyBubyBuZXcgdG9rZW5zIGFmdGVyIDNzIGFuZCB0dXJucyB0aGUgc3Bpbm5lciByZWQuXG4gIGlmIChsZWFkZXJJc0lkbGUgJiYgaGFzUnVubmluZ1RlYW1tYXRlcyAmJiAhZm9yZWdyb3VuZGVkVGVhbW1hdGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgd2lkdGg9XCIxMDAlXCIgYWxpZ25JdGVtcz1cImZsZXgtc3RhcnRcIj5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCIgZmxleFdyYXA9XCJ3cmFwXCIgbWFyZ2luVG9wPXsxfSB3aWR0aD1cIjEwMCVcIj5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgIHtURUFSRFJPUF9BU1RFUklTS30gSWRsZVxuICAgICAgICAgICAgeyFhbGxJZGxlICYmICcgwrcgdGVhbW1hdGVzIHJ1bm5pbmcnfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICAgIHtzaG93U3Bpbm5lclRyZWUgJiYgKFxuICAgICAgICAgIDxUZWFtbWF0ZVNwaW5uZXJUcmVlXG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4PXtzZWxlY3RlZElQQWdlbnRJbmRleH1cbiAgICAgICAgICAgIGlzSW5TZWxlY3Rpb25Nb2RlPXt2aWV3U2VsZWN0aW9uTW9kZSA9PT0gJ3NlbGVjdGluZy1hZ2VudCd9XG4gICAgICAgICAgICBhbGxJZGxlPXthbGxJZGxlfVxuICAgICAgICAgICAgbGVhZGVyVG9rZW5Db3VudD17bGVhZGVyVG9rZW5Db3VudH1cbiAgICAgICAgICAgIGxlYWRlcklkbGVUZXh0PVwiSWRsZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuXG4gIC8vIFdoZW4gdmlld2luZyBhbiBpZGxlIHRlYW1tYXRlLCBzaG93IHN0YXRpYyBpZGxlIGRpc3BsYXkgaW5zdGVhZCBvZiBhbmltYXRlZCBzcGlubmVyXG4gIGlmIChmb3JlZ3JvdW5kZWRUZWFtbWF0ZT8uaXNJZGxlKSB7XG4gICAgY29uc3QgaWRsZVRleHQgPSBhbGxJZGxlXG4gICAgICA/IGAke1RFQVJEUk9QX0FTVEVSSVNLfSBXb3JrZWQgZm9yICR7Zm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIGZvcmVncm91bmRlZFRlYW1tYXRlLnN0YXJ0VGltZSl9YFxuICAgICAgOiBgJHtURUFSRFJPUF9BU1RFUklTS30gSWRsZWBcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgd2lkdGg9XCIxMDAlXCIgYWxpZ25JdGVtcz1cImZsZXgtc3RhcnRcIj5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCIgZmxleFdyYXA9XCJ3cmFwXCIgbWFyZ2luVG9wPXsxfSB3aWR0aD1cIjEwMCVcIj5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57aWRsZVRleHR9PC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgICAge3Nob3dTcGlubmVyVHJlZSAmJiBoYXNSdW5uaW5nVGVhbW1hdGVzICYmIChcbiAgICAgICAgICA8VGVhbW1hdGVTcGlubmVyVHJlZVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleD17c2VsZWN0ZWRJUEFnZW50SW5kZXh9XG4gICAgICAgICAgICBpc0luU2VsZWN0aW9uTW9kZT17dmlld1NlbGVjdGlvbk1vZGUgPT09ICdzZWxlY3RpbmctYWdlbnQnfVxuICAgICAgICAgICAgYWxsSWRsZT17YWxsSWRsZX1cbiAgICAgICAgICAgIGxlYWRlclZlcmI9e2xlYWRlcklzSWRsZSA/IHVuZGVmaW5lZCA6IGxlYWRlclZlcmJ9XG4gICAgICAgICAgICBsZWFkZXJJZGxlVGV4dD17bGVhZGVySXNJZGxlID8gJ0lkbGUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgbGVhZGVyVG9rZW5Db3VudD17bGVhZGVyVG9rZW5Db3VudH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9Cb3g+XG4gICAgKVxuICB9XG5cbiAgLy8gVGltZS1iYXNlZCB0aXAgb3ZlcnJpZGVzOiBjb2Fyc2UgdGhyZXNob2xkcyBzbyBhIHN0YWxlIHJlZiByZWFkICh3ZSdyZVxuICAvLyBvZmYgdGhlIDUwbXMgY2xvY2spIGlzIGZpbmUuIE90aGVyIHRyaWdnZXJzIChtb2RlIGNoYW5nZSwgc2V0TWVzc2FnZXMpXG4gIC8vIGNhdXNlIHJlLXJlbmRlcnMgdGhhdCByZWZyZXNoIHRoaXMgaW4gcHJhY3RpY2UuXG4gIGxldCBjb250ZXh0VGlwc0FjdGl2ZSA9IGZhbHNlXG4gIGNvbnN0IHRpcHNFbmFibGVkID0gc2V0dGluZ3Muc3Bpbm5lclRpcHNFbmFibGVkICE9PSBmYWxzZVxuICBjb25zdCBzaG93Q2xlYXJUaXAgPSB0aXBzRW5hYmxlZCAmJiBlbGFwc2VkU25hcHNob3QgPiAxXzgwMF8wMDBcbiAgY29uc3Qgc2hvd0J0d1RpcCA9XG4gICAgdGlwc0VuYWJsZWQgJiYgZWxhcHNlZFNuYXBzaG90ID4gMzBfMDAwICYmICFnZXRHbG9iYWxDb25maWcoKS5idHdVc2VDb3VudFxuXG4gIGNvbnN0IGVmZmVjdGl2ZVRpcCA9IGNvbnRleHRUaXBzQWN0aXZlXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHNob3dDbGVhclRpcCAmJiAhbmV4dFRhc2tcbiAgICAgID8gJ1VzZSAvY2xlYXIgdG8gc3RhcnQgZnJlc2ggd2hlbiBzd2l0Y2hpbmcgdG9waWNzIGFuZCBmcmVlIHVwIGNvbnRleHQnXG4gICAgICA6IHNob3dCdHdUaXAgJiYgIW5leHRUYXNrXG4gICAgICAgID8gXCJVc2UgL2J0dyB0byBhc2sgYSBxdWljayBzaWRlIHF1ZXN0aW9uIHdpdGhvdXQgaW50ZXJydXB0aW5nIENsYXVkZSdzIGN1cnJlbnQgd29ya1wiXG4gICAgICAgIDogc3Bpbm5lclRpcFxuXG4gIC8vIEJ1ZGdldCB0ZXh0IChhbnQtb25seSkg4oCUIHNob3duIGFib3ZlIHRoZSB0aXAgbGluZVxuICBsZXQgYnVkZ2V0VGV4dDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgaWYgKGZlYXR1cmUoJ1RPS0VOX0JVREdFVCcpKSB7XG4gICAgY29uc3QgYnVkZ2V0ID0gZ2V0Q3VycmVudFR1cm5Ub2tlbkJ1ZGdldCgpXG4gICAgaWYgKGJ1ZGdldCAhPT0gbnVsbCAmJiBidWRnZXQgPiAwKSB7XG4gICAgICBjb25zdCB0b2tlbnMgPSBnZXRUdXJuT3V0cHV0VG9rZW5zKClcbiAgICAgIGlmICh0b2tlbnMgPj0gYnVkZ2V0KSB7XG4gICAgICAgIGJ1ZGdldFRleHQgPSBgVGFyZ2V0OiAke2Zvcm1hdE51bWJlcih0b2tlbnMpfSB1c2VkICgke2Zvcm1hdE51bWJlcihidWRnZXQpfSBtaW4gJHtmaWd1cmVzLnRpY2t9KWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBjdCA9IE1hdGgucm91bmQoKHRva2VucyAvIGJ1ZGdldCkgKiAxMDApXG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGJ1ZGdldCAtIHRva2Vuc1xuICAgICAgICBjb25zdCByYXRlID1cbiAgICAgICAgICBlbGFwc2VkU25hcHNob3QgPiA1MDAwICYmIHRva2VucyA+PSAyMDAwXG4gICAgICAgICAgICA/IHRva2VucyAvIGVsYXBzZWRTbmFwc2hvdFxuICAgICAgICAgICAgOiAwXG4gICAgICAgIGNvbnN0IGV0YSA9XG4gICAgICAgICAgcmF0ZSA+IDBcbiAgICAgICAgICAgID8gYCBcXHUwMEI3IH4ke2Zvcm1hdER1cmF0aW9uKHJlbWFpbmluZyAvIHJhdGUsIHsgbW9zdFNpZ25pZmljYW50T25seTogdHJ1ZSB9KX1gXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIGJ1ZGdldFRleHQgPSBgVGFyZ2V0OiAke2Zvcm1hdE51bWJlcih0b2tlbnMpfSAvICR7Zm9ybWF0TnVtYmVyKGJ1ZGdldCl9ICgke3BjdH0lKSR7ZXRhfWBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHdpZHRoPVwiMTAwJVwiIGFsaWduSXRlbXM9XCJmbGV4LXN0YXJ0XCI+XG4gICAgICA8U3Bpbm5lckFuaW1hdGlvblJvd1xuICAgICAgICBtb2RlPXttb2RlfVxuICAgICAgICByZWR1Y2VkTW90aW9uPXtyZWR1Y2VkTW90aW9ufVxuICAgICAgICBoYXNBY3RpdmVUb29scz17aGFzQWN0aXZlVG9vbHN9XG4gICAgICAgIHJlc3BvbnNlTGVuZ3RoUmVmPXtyZXNwb25zZUxlbmd0aFJlZn1cbiAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgbWVzc2FnZUNvbG9yPXttZXNzYWdlQ29sb3J9XG4gICAgICAgIHNoaW1tZXJDb2xvcj17c2hpbW1lckNvbG9yfVxuICAgICAgICBvdmVycmlkZUNvbG9yPXtvdmVycmlkZUNvbG9yfVxuICAgICAgICBsb2FkaW5nU3RhcnRUaW1lUmVmPXtsb2FkaW5nU3RhcnRUaW1lUmVmfVxuICAgICAgICB0b3RhbFBhdXNlZE1zUmVmPXt0b3RhbFBhdXNlZE1zUmVmfVxuICAgICAgICBwYXVzZVN0YXJ0VGltZVJlZj17cGF1c2VTdGFydFRpbWVSZWZ9XG4gICAgICAgIHNwaW5uZXJTdWZmaXg9e3NwaW5uZXJTdWZmaXh9XG4gICAgICAgIHZlcmJvc2U9e3ZlcmJvc2V9XG4gICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgIGhhc1J1bm5pbmdUZWFtbWF0ZXM9e2hhc1J1bm5pbmdUZWFtbWF0ZXN9XG4gICAgICAgIHRlYW1tYXRlVG9rZW5zPXt0ZWFtbWF0ZVRva2Vuc31cbiAgICAgICAgZm9yZWdyb3VuZGVkVGVhbW1hdGU9e2ZvcmVncm91bmRlZFRlYW1tYXRlfVxuICAgICAgICBsZWFkZXJJc0lkbGU9e2xlYWRlcklzSWRsZX1cbiAgICAgICAgdGhpbmtpbmdTdGF0dXM9e3RoaW5raW5nU3RhdHVzfVxuICAgICAgICBlZmZvcnRTdWZmaXg9e2VmZm9ydFN1ZmZpeH1cbiAgICAgIC8+XG4gICAgICB7c2hvd1NwaW5uZXJUcmVlICYmIGhhc1J1bm5pbmdUZWFtbWF0ZXMgPyAoXG4gICAgICAgIDxUZWFtbWF0ZVNwaW5uZXJUcmVlXG4gICAgICAgICAgc2VsZWN0ZWRJbmRleD17c2VsZWN0ZWRJUEFnZW50SW5kZXh9XG4gICAgICAgICAgaXNJblNlbGVjdGlvbk1vZGU9e3ZpZXdTZWxlY3Rpb25Nb2RlID09PSAnc2VsZWN0aW5nLWFnZW50J31cbiAgICAgICAgICBhbGxJZGxlPXthbGxJZGxlfVxuICAgICAgICAgIGxlYWRlclZlcmI9e2xlYWRlcklzSWRsZSA/IHVuZGVmaW5lZCA6IGxlYWRlclZlcmJ9XG4gICAgICAgICAgbGVhZGVySWRsZVRleHQ9e2xlYWRlcklzSWRsZSA/ICdJZGxlJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBsZWFkZXJUb2tlbkNvdW50PXtsZWFkZXJUb2tlbkNvdW50fVxuICAgICAgICAvPlxuICAgICAgKSA6IHNob3dFeHBhbmRlZFRvZG9zICYmIHRhc2tzVjIgJiYgdGFza3NWMi5sZW5ndGggPiAwID8gKFxuICAgICAgICA8Qm94IHdpZHRoPVwiMTAwJVwiIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8TWVzc2FnZVJlc3BvbnNlPlxuICAgICAgICAgICAgPFRhc2tMaXN0VjIgdGFza3M9e3Rhc2tzVjJ9IC8+XG4gICAgICAgICAgPC9NZXNzYWdlUmVzcG9uc2U+XG4gICAgICAgIDwvQm94PlxuICAgICAgKSA6IG5leHRUYXNrIHx8IGVmZmVjdGl2ZVRpcCB8fCBidWRnZXRUZXh0ID8gKFxuICAgICAgICAvLyBJTVBPUlRBTlQ6IHdlIG5lZWQgdGhpcyB3aWR0aD1cIjEwMCVcIiB0byBhdm9pZCBhbiBJbmsgYnVnIHdoZXJlIHRoZVxuICAgICAgICAvLyB0aXAgZ2V0cyBkdXBsaWNhdGVkIG92ZXIgYW5kIG92ZXIgd2hpbGUgdGhlIHNwaW5uZXIgaXMgcnVubmluZyBpZlxuICAgICAgICAvLyB0aGUgdGVybWluYWwgaXMgdmVyeSBzbWFsbC4gVE9ETzogZml4IHRoaXMgaW4gSW5rLlxuICAgICAgICA8Qm94IHdpZHRoPVwiMTAwJVwiIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICB7YnVkZ2V0VGV4dCAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZVJlc3BvbnNlPlxuICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57YnVkZ2V0VGV4dH08L1RleHQ+XG4gICAgICAgICAgICA8L01lc3NhZ2VSZXNwb25zZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIHsobmV4dFRhc2sgfHwgZWZmZWN0aXZlVGlwKSAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZVJlc3BvbnNlPlxuICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICB7bmV4dFRhc2tcbiAgICAgICAgICAgICAgICAgID8gYE5leHQ6ICR7bmV4dFRhc2suc3ViamVjdH1gXG4gICAgICAgICAgICAgICAgICA6IGBUaXA6ICR7ZWZmZWN0aXZlVGlwfWB9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvTWVzc2FnZVJlc3BvbnNlPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuLy8gQnJpZWYvYXNzaXN0YW50IG1vZGUgc3Bpbm5lcjogc2luZ2xlIHN0YXR1cyBsaW5lLiBQcm9tcHRJbnB1dCBkcm9wcyBpdHNcbi8vIG93biBtYXJnaW5Ub3Agd2hlbiBpc0JyaWVmT25seSBpcyBhY3RpdmUsIHNvIHRoaXMgY29tcG9uZW50IG93bnMgdGhlXG4vLyAyLXJvdyBmb290cHJpbnQgYmV0d2VlbiBtZXNzYWdlcyBhbmQgaW5wdXQuIEZvb3RwcmludCBpcyBbYmxhbmssIGNvbnRlbnRdXG4vLyDigJQgb25lIGJsYW5rIHJvdyBhYm92ZSAoYnJlYXRoaW5nIHJvb20gdW5kZXIgdGhlIG1lc3NhZ2VzIGxpc3QpLCBzcGlubmVyXG4vLyBmbHVzaCBhZ2FpbnN0IHRoZSBpbnB1dCBiYXIuIFByb21wdElucHV0J3MgYWJzb2x1dGUtcG9zaXRpb25lZFxuLy8gTm90aWZpY2F0aW9ucyBvdmVybGF5IGNvbXBlbnNhdGVzIHdpdGggbWFyZ2luVG9wPS0yIGluIGJyaWVmIG1vZGVcbi8vIChQcm9tcHRJbnB1dC50c3g6fjI5MjgpIHNvIGl0IGZsb2F0cyBpbnRvIHRoZSBibGFuayByb3cgYWJvdmUgdGhlXG4vLyBzcGlubmVyLCBub3Qgb3ZlciB0aGUgc3Bpbm5lciBjb250ZW50LiBQYWlyZWQgd2l0aCBCcmllZklkbGVTdGF0dXMgd2hpY2hcbi8vIGtlZXBzIHRoZSBzYW1lIGZvb3RwcmludCB3aGVuIGlkbGUuXG50eXBlIEJyaWVmU3Bpbm5lclByb3BzID0ge1xuICBtb2RlOiBTcGlubmVyTW9kZVxuICBvdmVycmlkZU1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsXG59XG5cbmZ1bmN0aW9uIEJyaWVmU3Bpbm5lcih7XG4gIG1vZGUsXG4gIG92ZXJyaWRlTWVzc2FnZSxcbn06IEJyaWVmU3Bpbm5lclByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSB1c2VTZXR0aW5ncygpXG4gIGNvbnN0IHJlZHVjZWRNb3Rpb24gPSBzZXR0aW5ncy5wcmVmZXJzUmVkdWNlZE1vdGlvbiA/PyBmYWxzZVxuICBjb25zdCBbcmFuZG9tVmVyYl0gPSB1c2VTdGF0ZSgoKSA9PiBzYW1wbGUoZ2V0U3Bpbm5lclZlcmJzKCkpID8/ICdXb3JraW5nJylcbiAgY29uc3QgdmVyYiA9IG92ZXJyaWRlTWVzc2FnZSA/PyByYW5kb21WZXJiXG4gIGNvbnN0IGNvbm5TdGF0dXMgPSB1c2VBcHBTdGF0ZShzID0+IHMucmVtb3RlQ29ubmVjdGlvblN0YXR1cylcblxuICAvLyBUcmFjayBDTEkgYWN0aXZpdHkgc28gT1MvSURFIFwiYnVzeVwiIGluZGljYXRvcnMgZmlyZSBpbiBicmllZiBtb2RlIHRvb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gJ3NwaW5uZXItJyArIG1vZGVcbiAgICBhY3Rpdml0eU1hbmFnZXIuc3RhcnRDTElBY3Rpdml0eShvcGVyYXRpb25JZClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWN0aXZpdHlNYW5hZ2VyLmVuZENMSUFjdGl2aXR5KG9wZXJhdGlvbklkKVxuICAgIH1cbiAgfSwgW21vZGVdKVxuXG4gIC8vIERyaXZlIGJvdGggZG90IGN5Y2xlIGFuZCBzaGltbWVyIGZyb20gdGhlIHNoYXJlZCBjbG9jay4gVGhlIHZpZXdwb3J0XG4gIC8vIHJlZiBpcyB1bnVzZWQg4oCUIHRoZSBzcGlubmVyIHVubW91bnRzIG9uIHR1cm4gZW5kIHNvIHZpZXdwb3J0LWJhc2VkXG4gIC8vIHBhdXNpbmcgaXNuJ3QgbmVlZGVkLlxuICBjb25zdCBbLCB0aW1lXSA9IHVzZUFuaW1hdGlvbkZyYW1lKHJlZHVjZWRNb3Rpb24gPyBudWxsIDogMTIwKVxuXG4gIC8vIExvY2FsIHRhc2tzICsgcmVtb3RlIHRhc2tzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKHZpZXdlciBtb2RlIGhhcyBhblxuICAvLyBlbXB0eSBsb2NhbCBBcHBTdGF0ZS50YXNrczsgbG9jYWwgbW9kZSBoYXMgcmVtb3RlQmFja2dyb3VuZFRhc2tDb3VudD0wKS5cbiAgLy8gU3VtbWluZyBhdm9pZHMgYSBtb2RlIGJyYW5jaC5cbiAgY29uc3QgcnVubmluZ0NvdW50ID0gdXNlQXBwU3RhdGUoXG4gICAgcyA9PlxuICAgICAgY291bnQoT2JqZWN0LnZhbHVlcyhzLnRhc2tzKSwgaXNCYWNrZ3JvdW5kVGFzaykgK1xuICAgICAgcy5yZW1vdGVCYWNrZ3JvdW5kVGFza0NvdW50LFxuICApXG5cbiAgLy8gQ29ubmVjdGlvbiB0cm91YmxlIG92ZXJyaWRlcyB0aGUgdmVyYiDigJQgYGNsYXVkZSBhc3Npc3RhbnRgIGlzIGEgcHVyZSB2aWV3ZXIsXG4gIC8vIG5vdGhpbmcgdXNlZnVsIGlzIGhhcHBlbmluZyB3aGlsZSB0aGUgV1MgaXMgZG93bi5cbiAgY29uc3Qgc2hvd0Nvbm5XYXJuaW5nID1cbiAgICBjb25uU3RhdHVzID09PSAncmVjb25uZWN0aW5nJyB8fCBjb25uU3RhdHVzID09PSAnZGlzY29ubmVjdGVkJ1xuICBjb25zdCBjb25uVGV4dCA9XG4gICAgY29ublN0YXR1cyA9PT0gJ3JlY29ubmVjdGluZycgPyAnUmVjb25uZWN0aW5nJyA6ICdEaXNjb25uZWN0ZWQnXG5cbiAgLy8gRG90cyBwYWRkZWQgdG8gYSBmaXhlZCAzIGNvbHVtbnMgc28gdGhlIHJpZ2h0LWFsaWduZWQgY291bnQgZG9lc24ndFxuICAvLyBqaXR0ZXIgYXMgdGhlIGN5Y2xlIGFkdmFuY2VzLlxuICBjb25zdCBkb3RGcmFtZSA9IE1hdGguZmxvb3IodGltZSAvIDMwMCkgJSAzXG4gIGNvbnN0IGRvdHMgPSByZWR1Y2VkTW90aW9uID8gJ+KApiAgJyA6ICcuJy5yZXBlYXQoZG90RnJhbWUgKyAxKS5wYWRFbmQoMylcblxuICAvLyBTaGltbWVyOiByZXZlcnNlLXN3ZWVwIGhpZ2hsaWdodCBhY3Jvc3MgdGhlIHZlcmIuIFNraXAgZm9yIGNvbm5lY3Rpb25cbiAgLy8gd2FybmluZ3MgKHNoaW1tZXIgcmVhZHMgYXMgXCJ3b3JraW5nXCI7IFJlY29ubmVjdGluZy9EaXNjb25uZWN0ZWQgaXMgbm90KS5cbiAgY29uc3QgdmVyYldpZHRoID0gdXNlTWVtbygoKSA9PiBzdHJpbmdXaWR0aCh2ZXJiKSwgW3ZlcmJdKVxuICBjb25zdCBnbGltbWVySW5kZXggPVxuICAgIHJlZHVjZWRNb3Rpb24gfHwgc2hvd0Nvbm5XYXJuaW5nXG4gICAgICA/IC0xMDBcbiAgICAgIDogY29tcHV0ZUdsaW1tZXJJbmRleChNYXRoLmZsb29yKHRpbWUgLyBTSElNTUVSX0lOVEVSVkFMX01TKSwgdmVyYldpZHRoKVxuICBjb25zdCB7IGJlZm9yZSwgc2hpbW1lciwgYWZ0ZXIgfSA9IGNvbXB1dGVTaGltbWVyU2VnbWVudHModmVyYiwgZ2xpbW1lckluZGV4KVxuXG4gIGNvbnN0IHsgY29sdW1ucyB9ID0gdXNlVGVybWluYWxTaXplKClcbiAgY29uc3QgcmlnaHRUZXh0ID0gcnVubmluZ0NvdW50ID4gMCA/IGAke3J1bm5pbmdDb3VudH0gaW4gYmFja2dyb3VuZGAgOiAnJ1xuICAvLyBNYW51YWwgcmlnaHQtYWxpZ24gdmlhIHNwYWNlIHBhZGRpbmcg4oCUIGZsZXhHcm93IHNwYWNlcnMgaW5zaWRlXG4gIC8vIEZ1bGxzY3JlZW5MYXlvdXQncyBgbWFpbmAgc2xvdCBkb24ndCByZXNvbHZlIGEgd2lkdGggYW5kIGNhdXNlZCB0aGVcbiAgLy8gZGlmZiBlbmdpbmUgdG8gbWlzcyBkb3QtZnJhbWUgdXBkYXRlcy5cbiAgY29uc3QgbGVmdFdpZHRoID0gKHNob3dDb25uV2FybmluZyA/IHN0cmluZ1dpZHRoKGNvbm5UZXh0KSA6IHZlcmJXaWR0aCkgKyAzXG4gIGNvbnN0IHBhZCA9IE1hdGgubWF4KDEsIGNvbHVtbnMgLSAyIC0gbGVmdFdpZHRoIC0gc3RyaW5nV2lkdGgocmlnaHRUZXh0KSlcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiIHdpZHRoPVwiMTAwJVwiIG1hcmdpblRvcD17MX0gcGFkZGluZ0xlZnQ9ezJ9PlxuICAgICAge3Nob3dDb25uV2FybmluZyA/IChcbiAgICAgICAgPFRleHQgY29sb3I9XCJlcnJvclwiPntjb25uVGV4dCArIGRvdHN9PC9UZXh0PlxuICAgICAgKSA6IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7YmVmb3JlID8gPFRleHQgZGltQ29sb3I+e2JlZm9yZX08L1RleHQ+IDogbnVsbH1cbiAgICAgICAgICB7c2hpbW1lciA/IDxUZXh0PntzaGltbWVyfTwvVGV4dD4gOiBudWxsfVxuICAgICAgICAgIHthZnRlciA/IDxUZXh0IGRpbUNvbG9yPnthZnRlcn08L1RleHQ+IDogbnVsbH1cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57ZG90c308L1RleHQ+XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICAgIHtyaWdodFRleHQgPyAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPFRleHQ+eycgJy5yZXBlYXQocGFkKX08L1RleHQ+XG4gICAgICAgICAgPFRleHQgY29sb3I9XCJzdWJ0bGVcIj57cmlnaHRUZXh0fTwvVGV4dD5cbiAgICAgICAgPC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L0JveD5cbiAgKVxufVxuXG4vLyBJZGxlIHBsYWNlaG9sZGVyIGZvciBicmllZiBtb2RlLiBTYW1lIDItcm93IFtibGFuaywgY29udGVudF0gZm9vdHByaW50XG4vLyBhcyBCcmllZlNwaW5uZXIgc28gdGhlIGlucHV0IGJhciBuZXZlciBqdW1wcyB3aGVuIHRvZ2dsaW5nIGJldHdlZW5cbi8vIHdvcmtpbmcvaWRsZS9kaXNjb25uZWN0ZWQuIFNlZSBCcmllZlNwaW5uZXIncyBjb21tZW50IGZvciB0aGVcbi8vIE5vdGlmaWNhdGlvbnMgb3ZlcmxheSBjb3VwbGluZy5cbmV4cG9ydCBmdW5jdGlvbiBCcmllZklkbGVTdGF0dXMoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgY29ublN0YXR1cyA9IHVzZUFwcFN0YXRlKHMgPT4gcy5yZW1vdGVDb25uZWN0aW9uU3RhdHVzKVxuICBjb25zdCBydW5uaW5nQ291bnQgPSB1c2VBcHBTdGF0ZShcbiAgICBzID0+XG4gICAgICBjb3VudChPYmplY3QudmFsdWVzKHMudGFza3MpLCBpc0JhY2tncm91bmRUYXNrKSArXG4gICAgICBzLnJlbW90ZUJhY2tncm91bmRUYXNrQ291bnQsXG4gIClcbiAgY29uc3QgeyBjb2x1bW5zIH0gPSB1c2VUZXJtaW5hbFNpemUoKVxuXG4gIGNvbnN0IHNob3dDb25uV2FybmluZyA9XG4gICAgY29ublN0YXR1cyA9PT0gJ3JlY29ubmVjdGluZycgfHwgY29ublN0YXR1cyA9PT0gJ2Rpc2Nvbm5lY3RlZCdcbiAgY29uc3QgY29ublRleHQgPVxuICAgIGNvbm5TdGF0dXMgPT09ICdyZWNvbm5lY3RpbmcnID8gJ1JlY29ubmVjdGluZ+KApicgOiAnRGlzY29ubmVjdGVkJ1xuICBjb25zdCBsZWZ0VGV4dCA9IHNob3dDb25uV2FybmluZyA/IGNvbm5UZXh0IDogJydcbiAgY29uc3QgcmlnaHRUZXh0ID0gcnVubmluZ0NvdW50ID4gMCA/IGAke3J1bm5pbmdDb3VudH0gaW4gYmFja2dyb3VuZGAgOiAnJ1xuXG4gIGlmICghbGVmdFRleHQgJiYgIXJpZ2h0VGV4dCkgcmV0dXJuIDxCb3ggaGVpZ2h0PXsyfSAvPlxuXG4gIGNvbnN0IHBhZCA9IE1hdGgubWF4KFxuICAgIDEsXG4gICAgY29sdW1ucyAtIDIgLSBzdHJpbmdXaWR0aChsZWZ0VGV4dCkgLSBzdHJpbmdXaWR0aChyaWdodFRleHQpLFxuICApXG4gIHJldHVybiAoXG4gICAgPEJveCBtYXJnaW5Ub3A9ezF9IHBhZGRpbmdMZWZ0PXsyfT5cbiAgICAgIDxUZXh0PlxuICAgICAgICB7bGVmdFRleHQgPyA8VGV4dCBjb2xvcj1cImVycm9yXCI+e2xlZnRUZXh0fTwvVGV4dD4gOiBudWxsfVxuICAgICAgICB7cmlnaHRUZXh0ID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8VGV4dD57JyAnLnJlcGVhdChwYWQpfTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwic3VidGxlXCI+e3JpZ2h0VGV4dH08L1RleHQ+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9UZXh0PlxuICAgIDwvQm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTcGlubmVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHNldHRpbmdzID0gdXNlU2V0dGluZ3MoKVxuICBjb25zdCByZWR1Y2VkTW90aW9uID0gc2V0dGluZ3MucHJlZmVyc1JlZHVjZWRNb3Rpb24gPz8gZmFsc2VcbiAgY29uc3QgW3JlZiwgdGltZV0gPSB1c2VBbmltYXRpb25GcmFtZShyZWR1Y2VkTW90aW9uID8gbnVsbCA6IDEyMClcblxuICAvLyBSZWR1Y2VkIG1vdGlvbjogc3RhdGljIGRvdCBpbnN0ZWFkIG9mIGFuaW1hdGVkIHNwaW5uZXJcbiAgaWYgKHJlZHVjZWRNb3Rpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCByZWY9e3JlZn0gZmxleFdyYXA9XCJ3cmFwXCIgaGVpZ2h0PXsxfSB3aWR0aD17Mn0+XG4gICAgICAgIDxUZXh0IGNvbG9yPVwidGV4dFwiPuKXjzwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuXG4gIC8vIERlcml2ZSBmcmFtZSBmcm9tIHN5bmNlZCB0aW1lIC0gYWxsIHNwaW5uZXJzIGFuaW1hdGUgdG9nZXRoZXJcbiAgY29uc3QgZnJhbWUgPSBNYXRoLmZsb29yKHRpbWUgLyAxMjApICUgU1BJTk5FUl9GUkFNRVMubGVuZ3RoXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IHJlZj17cmVmfSBmbGV4V3JhcD1cIndyYXBcIiBoZWlnaHQ9ezF9IHdpZHRoPXsyfT5cbiAgICAgIDxUZXh0IGNvbG9yPVwidGV4dFwiPntTUElOTkVSX0ZSQU1FU1tmcmFtZV19PC9UZXh0PlxuICAgIDwvQm94PlxuICApXG59XG5cblxuZnVuY3Rpb24gZmluZE5leHRQZW5kaW5nVGFzayh0YXNrczogVGFza1tdIHwgdW5kZWZpbmVkKTogVGFzayB8IHVuZGVmaW5lZCB7XG4gIGlmICghdGFza3MpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgcGVuZGluZ1Rhc2tzID0gdGFza3MuZmlsdGVyKHQgPT4gdC5zdGF0dXMgPT09ICdwZW5kaW5nJylcbiAgaWYgKHBlbmRpbmdUYXNrcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoXG4gICAgdGFza3MuZmlsdGVyKHQgPT4gdC5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKS5tYXAodCA9PiB0LmlkKSxcbiAgKVxuICByZXR1cm4gKFxuICAgIHBlbmRpbmdUYXNrcy5maW5kKHQgPT4gIXQuYmxvY2tlZEJ5LnNvbWUoaWQgPT4gdW5yZXNvbHZlZElkcy5oYXMoaWQpKSkgPz9cbiAgICBwZW5kaW5nVGFza3NbMF1cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQSxTQUFTQSxHQUFHLEVBQUVDLElBQUksUUFBUSxXQUFXO0FBQ3JDLE9BQU8sS0FBS0MsS0FBSyxNQUFNLE9BQU87QUFDOUIsU0FBU0MsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDNUQsU0FDRUMsbUJBQW1CLEVBQ25CQyxzQkFBc0IsRUFDdEJDLG1CQUFtQixRQUNkLCtCQUErQjtBQUN0QyxTQUFTQyxPQUFPLFFBQVEsWUFBWTtBQUNwQyxTQUFTQyxlQUFlLEVBQUVDLGVBQWUsUUFBUSx1QkFBdUI7QUFDeEUsU0FBU0MsbUNBQW1DLFFBQVEscUNBQXFDO0FBQ3pGLFNBQVNDLFdBQVcsUUFBUSxzQkFBc0I7QUFDbEQsU0FBU0MsS0FBSyxRQUFRLG1CQUFtQjtBQUN6QyxPQUFPQyxNQUFNLE1BQU0scUJBQXFCO0FBQ3hDLFNBQ0VDLGNBQWMsRUFDZEMsWUFBWSxFQUNaQyxrQkFBa0IsUUFDYixvQkFBb0I7QUFDM0IsY0FBY0MsS0FBSyxRQUFRLG9CQUFvQjtBQUMvQyxTQUFTQyxlQUFlLFFBQVEsNkJBQTZCO0FBQzdELFNBQVNDLGVBQWUsUUFBUSw4QkFBOEI7QUFDOUQsU0FBU0MsZUFBZSxRQUFRLHNCQUFzQjtBQUN0RCxTQUFTQyxVQUFVLFFBQVEsaUJB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
|
|
562
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCb3giLCJUZXh0IiwiUmVhY3QiLCJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJjb21wdXRlR2xpbW1lckluZGV4IiwiY29tcHV0ZVNoaW1tZXJTZWdtZW50cyIsIlNISU1NRVJfSU5URVJWQUxfTVMiLCJmZWF0dXJlIiwiZ2V0S2Fpcm9zQWN0aXZlIiwiZ2V0VXNlck1zZ09wdEluIiwiZ2V0RmVhdHVyZVZhbHVlX0NBQ0hFRF9NQVlfQkVfU1RBTEUiLCJpc0VudlRydXRoeSIsImNvdW50Iiwic2FtcGxlIiwiZm9ybWF0RHVyYXRpb24iLCJmb3JtYXROdW1iZXIiLCJmb3JtYXRTZWNvbmRzU2hvcnQiLCJUaGVtZSIsImFjdGl2aXR5TWFuYWdlciIsImdldFNwaW5uZXJWZXJicyIsIk1lc3NhZ2VSZXNwb25zZSIsIlRhc2tMaXN0VjIiLCJ1c2VUYXNrc1YyIiwiVGFzayIsInVzZUFwcFN0YXRlIiwidXNlVGVybWluYWxTaXplIiwic3RyaW5nV2lkdGgiLCJnZXREZWZhdWx0Q2hhcmFjdGVycyIsIlNwaW5uZXJNb2RlIiwiU3Bpbm5lckFuaW1hdGlvblJvdyIsInVzZVNldHRpbmdzIiwiaXNJblByb2Nlc3NUZWFtbWF0ZVRhc2siLCJpc0JhY2tncm91bmRUYXNrIiwiZ2V0QWxsSW5Qcm9jZXNzVGVhbW1hdGVUYXNrcyIsImdldEVmZm9ydFN1ZmZpeCIsImdldE1haW5Mb29wTW9kZWwiLCJnZXRWaWV3ZWRUZWFtbWF0ZVRhc2siLCJURUFSRFJPUF9BU1RFUklTSyIsImZpZ3VyZXMiLCJnZXRDdXJyZW50VHVyblRva2VuQnVkZ2V0IiwiZ2V0VHVybk91dHB1dFRva2VucyIsIlRlYW1tYXRlU3Bpbm5lclRyZWUiLCJ1c2VBbmltYXRpb25GcmFtZSIsImdldEdsb2JhbENvbmZpZyIsIkRFRkFVTFRfQ0hBUkFDVEVSUyIsIlNQSU5ORVJfRlJBTUVTIiwicmV2ZXJzZSIsIlByb3BzIiwibW9kZSIsImxvYWRpbmdTdGFydFRpbWVSZWYiLCJSZWZPYmplY3QiLCJ0b3RhbFBhdXNlZE1zUmVmIiwicGF1c2VTdGFydFRpbWVSZWYiLCJzcGlubmVyVGlwIiwicmVzcG9uc2VMZW5ndGhSZWYiLCJvdmVycmlkZUNvbG9yIiwib3ZlcnJpZGVTaGltbWVyQ29sb3IiLCJvdmVycmlkZU1lc3NhZ2UiLCJzcGlubmVyU3VmZml4IiwidmVyYm9zZSIsImhhc0FjdGl2ZVRvb2xzIiwibGVhZGVySXNJZGxlIiwiU3Bpbm5lcldpdGhWZXJiIiwicHJvcHMiLCJSZWFjdE5vZGUiLCJpc0JyaWVmT25seSIsInMiLCJ2aWV3aW5nQWdlbnRUYXNrSWQiLCJicmllZkVudkVuYWJsZWQiLCJwcm9jZXNzIiwiZW52IiwiQ0xBVURFX0NPREVfQlJJRUYiLCJTcGlubmVyV2l0aFZlcmJJbm5lciIsInNldHRpbmdzIiwicmVkdWNlZE1vdGlvbiIsInByZWZlcnNSZWR1Y2VkTW90aW9uIiwidGFza3MiLCJleHBhbmRlZFZpZXciLCJzaG93RXhwYW5kZWRUb2RvcyIsInNob3dTcGlubmVyVHJlZSIsInNlbGVjdGVkSVBBZ2VudEluZGV4Iiwidmlld1NlbGVjdGlvbk1vZGUiLCJmb3JlZ3JvdW5kZWRUZWFtbWF0ZSIsInVuZGVmaW5lZCIsImNvbHVtbnMiLCJ0YXNrc1YyIiwidGhpbmtpbmdTdGF0dXMiLCJzZXRUaGlua2luZ1N0YXR1cyIsInRoaW5raW5nU3RhcnRSZWYiLCJzaG93RHVyYXRpb25UaW1lciIsIlJldHVyblR5cGUiLCJzZXRUaW1lb3V0IiwiY2xlYXJTdGF0dXNUaW1lciIsImN1cnJlbnQiLCJEYXRlIiwibm93IiwiZHVyYXRpb24iLCJlbGFwc2VkIiwicmVtYWluaW5nVGhpbmtpbmdUaW1lIiwiTWF0aCIsIm1heCIsInNob3dEdXJhdGlvbiIsImNsZWFyVGltZW91dCIsImN1cnJlbnRUb2RvIiwiZmluZCIsInRhc2siLCJzdGF0dXMiLCJuZXh0VGFzayIsImZpbmROZXh0UGVuZGluZ1Rhc2siLCJyYW5kb21WZXJiIiwibGVhZGVyVmVyYiIsImFjdGl2ZUZvcm0iLCJzdWJqZWN0IiwiZWZmZWN0aXZlVmVyYiIsImlzSWRsZSIsInNwaW5uZXJWZXJiIiwibWVzc2FnZSIsIm9wZXJhdGlvbklkIiwic3RhcnRDTElBY3Rpdml0eSIsImVuZENMSUFjdGl2aXR5IiwiZWZmb3J0VmFsdWUiLCJlZmZvcnRTdWZmaXgiLCJydW5uaW5nVGVhbW1hdGVzIiwiZmlsdGVyIiwidCIsImhhc1J1bm5pbmdUZWFtbWF0ZXMiLCJsZW5ndGgiLCJhbGxJZGxlIiwiZXZlcnkiLCJ0ZWFtbWF0ZVRva2VucyIsIk9iamVjdCIsInZhbHVlcyIsInByb2dyZXNzIiwidG9rZW5Db3VudCIsImVsYXBzZWRTbmFwc2hvdCIsImxlYWRlclRva2VuQ291bnQiLCJyb3VuZCIsImRlZmF1bHRDb2xvciIsImRlZmF1bHRTaGltbWVyQ29sb3IiLCJtZXNzYWdlQ29sb3IiLCJzaGltbWVyQ29sb3IiLCJ0dGZ0VGV4dCIsImFwaU1ldHJpY3NSZWYiLCJjb21wdXRlVHRmdFRleHQiLCJpZGxlVGV4dCIsInN0YXJ0VGltZSIsImNvbnRleHRUaXBzQWN0aXZlIiwidGlwc0VuYWJsZWQiLCJzcGlubmVyVGlwc0VuYWJsZWQiLCJzaG93Q2xlYXJUaXAiLCJzaG93QnR3VGlwIiwiYnR3VXNlQ291bnQiLCJlZmZlY3RpdmVUaXAiLCJidWRnZXRUZXh0IiwiYnVkZ2V0IiwidG9rZW5zIiwidGljayIsInBjdCIsInJlbWFpbmluZyIsInJhdGUiLCJldGEiLCJtb3N0U2lnbmlmaWNhbnRPbmx5IiwiQnJpZWZTcGlubmVyUHJvcHMiLCJCcmllZlNwaW5uZXIiLCJ0MCIsIiQiLCJfYyIsIl90ZW1wNCIsInZlcmIiLCJjb25uU3RhdHVzIiwiX3RlbXA1IiwidDEiLCJ0MiIsInRpbWUiLCJydW5uaW5nQ291bnQiLCJfdGVtcDYiLCJzaG93Q29ubldhcm5pbmciLCJjb25uVGV4dCIsImRvdEZyYW1lIiwiZmxvb3IiLCJ0MyIsInJlcGVhdCIsInBhZEVuZCIsImRvdHMiLCJ0NCIsInZlcmJXaWR0aCIsInQ1IiwiZ2xpbW1lckluZGV4IiwiYmVmb3JlIiwic2hpbW1lciIsImFmdGVyIiwicmlnaHRUZXh0IiwidDYiLCJsZWZ0V2lkdGgiLCJwYWQiLCJ0NyIsInQ4IiwidDkiLCJzXzAiLCJyZW1vdGVCYWNrZ3JvdW5kVGFza0NvdW50IiwicmVtb3RlQ29ubmVjdGlvblN0YXR1cyIsIkJyaWVmSWRsZVN0YXR1cyIsIl90ZW1wNyIsIl90ZW1wOCIsImxlZnRUZXh0IiwiU3ltYm9sIiwiZm9yIiwiU3Bpbm5lciIsInJlZiIsImZyYW1lIiwicGVuZGluZ1Rhc2tzIiwidW5yZXNvbHZlZElkcyIsIlNldCIsIm1hcCIsImlkIiwiYmxvY2tlZEJ5Iiwic29tZSIsImhhcyJdLCJzb3VyY2VzIjpbIlNwaW5uZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGJpb21lLWlnbm9yZS1hbGwgYXNzaXN0L3NvdXJjZS9vcmdhbml6ZUltcG9ydHM6IEFOVC1PTkxZIGltcG9ydCBtYXJrZXJzIG11c3Qgbm90IGJlIHJlb3JkZXJlZFxuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnLi4vaW5rLmpzJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIGNvbXB1dGVHbGltbWVySW5kZXgsXG4gIGNvbXB1dGVTaGltbWVyU2VnbWVudHMsXG4gIFNISU1NRVJfSU5URVJWQUxfTVMsXG59IGZyb20gJy4uL2JyaWRnZS9icmlkZ2VTdGF0dXNVdGlsLmpzJ1xuaW1wb3J0IHsgZmVhdHVyZSB9IGZyb20gJ2J1bjpidW5kbGUnXG5pbXBvcnQgeyBnZXRLYWlyb3NBY3RpdmUsIGdldFVzZXJNc2dPcHRJbiB9IGZyb20gJy4uL2Jvb3RzdHJhcC9zdGF0ZS5qcydcbmltcG9ydCB7IGdldEZlYXR1cmVWYWx1ZV9DQUNIRURfTUFZX0JFX1NUQUxFIH0gZnJvbSAnLi4vc2VydmljZXMvYW5hbHl0aWNzL2dyb3d0aGJvb2suanMnXG5pbXBvcnQgeyBpc0VudlRydXRoeSB9IGZyb20gJy4uL3V0aWxzL2VudlV0aWxzLmpzJ1xuaW1wb3J0IHsgY291bnQgfSBmcm9tICcuLi91dGlscy9hcnJheS5qcydcbmltcG9ydCBzYW1wbGUgZnJvbSAnbG9kYXNoLWVzL3NhbXBsZS5qcydcbmltcG9ydCB7XG4gIGZvcm1hdER1cmF0aW9uLFxuICBmb3JtYXROdW1iZXIsXG4gIGZvcm1hdFNlY29uZHNTaG9ydCxcbn0gZnJvbSAnLi4vdXRpbHMvZm9ybWF0LmpzJ1xuaW1wb3J0IHR5cGUgeyBUaGVtZSB9IGZyb20gJ3NyYy91dGlscy90aGVtZS5qcydcbmltcG9ydCB7IGFjdGl2aXR5TWFuYWdlciB9IGZyb20gJy4uL3V0aWxzL2FjdGl2aXR5TWFuYWdlci5qcydcbmltcG9ydCB7IGdldFNwaW5uZXJWZXJicyB9IGZyb20gJy4uL2NvbnN0YW50cy9zcGlubmVyVmVyYnMuanMnXG5pbXBvcnQgeyBNZXNzYWdlUmVzcG9uc2UgfSBmcm9tICcuL01lc3NhZ2VSZXNwb25zZS5qcydcbmltcG9ydCB7IFRhc2tMaXN0VjIgfSBmcm9tICcuL1Rhc2tMaXN0VjIuanMnXG5pbXBvcnQgeyB1c2VUYXNrc1YyIH0gZnJvbSAnLi4vaG9va3MvdXNlVGFza3NWMi5qcydcbmltcG9ydCB0eXBlIHsgVGFzayB9IGZyb20gJy4uL3V0aWxzL3Rhc2tzLmpzJ1xuaW1wb3J0IHsgdXNlQXBwU3RhdGUgfSBmcm9tICcuLi9zdGF0ZS9BcHBTdGF0ZS5qcydcbmltcG9ydCB7IHVzZVRlcm1pbmFsU2l6ZSB9IGZyb20gJy4uL2hvb2tzL3VzZVRlcm1pbmFsU2l6ZS5qcydcbmltcG9ydCB7IHN0cmluZ1dpZHRoIH0gZnJvbSAnLi4vaW5rL3N0cmluZ1dpZHRoLmpzJ1xuaW1wb3J0IHsgZ2V0RGVmYXVsdENoYXJhY3RlcnMsIHR5cGUgU3Bpbm5lck1vZGUgfSBmcm9tICcuL1NwaW5uZXIvaW5kZXguanMnXG5pbXBvcnQgeyBTcGlubmVyQW5pbWF0aW9uUm93IH0gZnJvbSAnLi9TcGlubmVyL1NwaW5uZXJBbmltYXRpb25Sb3cuanMnXG5pbXBvcnQgeyB1c2VTZXR0aW5ncyB9IGZyb20gJy4uL2hvb2tzL3VzZVNldHRpbmdzLmpzJ1xuaW1wb3J0IHsgaXNJblByb2Nlc3NUZWFtbWF0ZVRhc2sgfSBmcm9tICcuLi90YXNrcy9JblByb2Nlc3NUZWFtbWF0ZVRhc2svdHlwZXMuanMnXG5pbXBvcnQgeyBpc0JhY2tncm91bmRUYXNrIH0gZnJvbSAnLi4vdGFza3MvdHlwZXMuanMnXG5pbXBvcnQgeyBnZXRBbGxJblByb2Nlc3NUZWFtbWF0ZVRhc2tzIH0gZnJvbSAnLi4vdGFza3MvSW5Qcm9jZXNzVGVhbW1hdGVUYXNrL0luUHJvY2Vzc1RlYW1tYXRlVGFzay5qcydcbmltcG9ydCB7IGdldEVmZm9ydFN1ZmZpeCB9IGZyb20gJy4uL3V0aWxzL2VmZm9ydC5qcydcbmltcG9ydCB7IGdldE1haW5Mb29wTW9kZWwgfSBmcm9tICcuLi91dGlscy9tb2RlbC9tb2RlbC5qcydcbmltcG9ydCB7IGdldFZpZXdlZFRlYW1tYXRlVGFzayB9IGZyb20gJy4uL3N0YXRlL3NlbGVjdG9ycy5qcydcbmltcG9ydCB7IFRFQVJEUk9QX0FTVEVSSVNLIH0gZnJvbSAnLi4vY29uc3RhbnRzL2ZpZ3VyZXMuanMnXG5pbXBvcnQgZmlndXJlcyBmcm9tICdmaWd1cmVzJ1xuaW1wb3J0IHtcbiAgZ2V0Q3VycmVudFR1cm5Ub2tlbkJ1ZGdldCxcbiAgZ2V0VHVybk91dHB1dFRva2Vucyxcbn0gZnJvbSAnLi4vYm9vdHN0cmFwL3N0YXRlLmpzJ1xuXG5pbXBvcnQgeyBUZWFtbWF0ZVNwaW5uZXJUcmVlIH0gZnJvbSAnLi9TcGlubmVyL1RlYW1tYXRlU3Bpbm5lclRyZWUuanMnXG5pbXBvcnQgeyB1c2VBbmltYXRpb25GcmFtZSB9IGZyb20gJy4uL2luay5qcydcbmltcG9ydCB7IGdldEdsb2JhbENvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZy5qcydcbmV4cG9ydCB0eXBlIHsgU3Bpbm5lck1vZGUgfSBmcm9tICcuL1NwaW5uZXIvaW5kZXguanMnXG5cbmNvbnN0IERFRkFVTFRfQ0hBUkFDVEVSUyA9IGdldERlZmF1bHRDaGFyYWN0ZXJzKClcblxuY29uc3QgU1BJTk5FUl9GUkFNRVMgPSBbXG4gIC4uLkRFRkFVTFRfQ0hBUkFDVEVSUyxcbiAgLi4uWy4uLkRFRkFVTFRfQ0hBUkFDVEVSU10ucmV2ZXJzZSgpLFxuXVxuXG5cbnR5cGUgUHJvcHMgPSB7XG4gIG1vZGU6IFNwaW5uZXJNb2RlXG4gIGxvYWRpbmdTdGFydFRpbWVSZWY6IFJlYWN0LlJlZk9iamVjdDxudW1iZXI+XG4gIHRvdGFsUGF1c2VkTXNSZWY6IFJlYWN0LlJlZk9iamVjdDxudW1iZXI+XG4gIHBhdXNlU3RhcnRUaW1lUmVmOiBSZWFjdC5SZWZPYmplY3Q8bnVtYmVyIHwgbnVsbD5cbiAgc3Bpbm5lclRpcD86IHN0cmluZ1xuICByZXNwb25zZUxlbmd0aFJlZjogUmVhY3QuUmVmT2JqZWN0PG51bWJlcj5cbiAgb3ZlcnJpZGVDb2xvcj86IGtleW9mIFRoZW1lIHwgbnVsbFxuICBvdmVycmlkZVNoaW1tZXJDb2xvcj86IGtleW9mIFRoZW1lIHwgbnVsbFxuICBvdmVycmlkZU1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsXG4gIHNwaW5uZXJTdWZmaXg/OiBzdHJpbmcgfCBudWxsXG4gIHZlcmJvc2U6IGJvb2xlYW5cbiAgaGFzQWN0aXZlVG9vbHM/OiBib29sZWFuXG4gIC8qKiBMZWFkZXIncyB0dXJuIGhhcyBjb21wbGV0ZWQgKG5vIGFjdGl2ZSBxdWVyeSkuIFVzZWQgdG8gc3VwcHJlc3Mgc3RhbGwtcmVkIHNwaW5uZXIgd2hlbiBvbmx5IHRlYW1tYXRlcyBhcmUgcnVubmluZy4gKi9cbiAgbGVhZGVySXNJZGxlPzogYm9vbGVhblxufVxuXG4vLyBUaGluIHdyYXBwZXI6IGJyYW5jaGVzIG9uIGlzQnJpZWZPbmx5IHNvIHRoZSB0d28gdmFyaWFudHMgaGF2ZSBpbmRlcGVuZGVudFxuLy8gaG9vayBjYWxsIGNoYWlucy4gV2l0aG91dCB0aGlzIHNwbGl0LCB0b2dnbGluZyAvYnJpZWYgbWlkLXJlbmRlciB3b3VsZFxuLy8gdmlvbGF0ZSBSdWxlcyBvZiBIb29rcyAodGhlIGlubmVyIHZhcmlhbnQgY2FsbHMgfjEwIG1vcmUgaG9va3MpLlxuZXhwb3J0IGZ1bmN0aW9uIFNwaW5uZXJXaXRoVmVyYihwcm9wczogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBpc0JyaWVmT25seSA9IHVzZUFwcFN0YXRlKHMgPT4gcy5pc0JyaWVmT25seSlcbiAgLy8gUkVQTCBvdmVycmlkZXMgaXNCcmllZk9ubHnihpJmYWxzZSB3aGVuIHZpZXdpbmcgYSB0ZWFtbWF0ZSB0cmFuc2NyaXB0XG4gIC8vIChzZWUgaXNCcmllZk9ubHk9e3ZpZXdlZFRlYW1tYXRlVGFzayA/IGZhbHNlIDogaXNCcmllZk9ubHl9KS4gVGhhdFxuICAvLyBwcm9wIGlzbid0IHRocmVhZGVkIGhlcmUsIHNvIHJlcGxpY2F0ZSB0aGUgZ2F0ZSBmcm9tIHRoZSBzdG9yZSDigJRcbiAgLy8gdGVhbW1hdGUgdmlldyBuZWVkcyB0aGUgcmVhbCBzcGlubmVyICh3aGljaCBzaG93cyB0ZWFtbWF0ZSBzdGF0dXMpLlxuICBjb25zdCB2aWV3aW5nQWdlbnRUYXNrSWQgPSB1c2VBcHBTdGF0ZShzID0+IHMudmlld2luZ0FnZW50VGFza0lkKVxuICAvLyBIb2lzdGVkIHRvIG1vdW50LXRpbWUg4oCUIHRoaXMgY29tcG9uZW50IHJlLXJlbmRlcnMgYXQgYW5pbWF0aW9uIGZyYW1lcmF0ZS5cbiAgY29uc3QgYnJpZWZFbnZFbmFibGVkID1cbiAgICBmZWF0dXJlKCdLQUlST1MnKSB8fCBmZWF0dXJlKCdLQUlST1NfQlJJRUYnKVxuICAgICAgPyAvLyBiaW9tZS1pZ25vcmUgbGludC9jb3JyZWN0bmVzcy91c2VIb29rQXRUb3BMZXZlbDogZmVhdHVyZSgpIGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50XG4gICAgICAgIHVzZU1lbW8oKCkgPT4gaXNFbnZUcnV0aHkocHJvY2Vzcy5lbnYuQ0xBVURFX0NPREVfQlJJRUYpLCBbXSlcbiAgICAgIDogZmFsc2VcblxuICAvLyBSdW50aW1lIGdhdGUgbWlycm9ycyBpc0JyaWVmRW5hYmxlZCgpIGJ1dCBpbmxpbmVkIOKAlCBpbXBvcnRpbmcgZnJvbVxuICAvLyBCcmllZlRvb2wudHMgd291bGQgbGVhayB0b29sLW5hbWUgc3RyaW5ncyBpbnRvIGV4dGVybmFsIGJ1aWxkcy4gU2luZ2xlXG4gIC8vIHNwaW5uZXIgaW5zdGFuY2Ug4oaSIGhvb2tzIHN0YXkgdW5jb25kaXRpb25hbCAodHdvIHN1YnMsIG5lZ2xpZ2libGUpLlxuICBpZiAoXG4gICAgKGZlYXR1cmUoJ0tBSVJPUycpIHx8IGZlYXR1cmUoJ0tBSVJPU19CUklFRicpKSAmJlxuICAgIChnZXRLYWlyb3NBY3RpdmUoKSB8fFxuICAgICAgKGdldFVzZXJNc2dPcHRJbigpICYmXG4gICAgICAgIChicmllZkVudkVuYWJsZWQgfHxcbiAgICAgICAgICBnZXRGZWF0dXJlVmFsdWVfQ0FDSEVEX01BWV9CRV9TVEFMRSgndGVuZ3Vfa2Fpcm9zX2JyaWVmJywgZmFsc2UpKSkpICYmXG4gICAgaXNCcmllZk9ubHkgJiZcbiAgICAhdmlld2luZ0FnZW50VGFza0lkXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICA8QnJpZWZTcGlubmVyIG1vZGU9e3Byb3BzLm1vZGV9IG92ZXJyaWRlTWVzc2FnZT17cHJvcHMub3ZlcnJpZGVNZXNzYWdlfSAvPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiA8U3Bpbm5lcldpdGhWZXJiSW5uZXIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTcGlubmVyV2l0aFZlcmJJbm5lcih7XG4gIG1vZGUsXG4gIGxvYWRpbmdTdGFydFRpbWVSZWYsXG4gIHRvdGFsUGF1c2VkTXNSZWYsXG4gIHBhdXNlU3RhcnRUaW1lUmVmLFxuICBzcGlubmVyVGlwLFxuICByZXNwb25zZUxlbmd0aFJlZixcbiAgb3ZlcnJpZGVDb2xvcixcbiAgb3ZlcnJpZGVTaGltbWVyQ29sb3IsXG4gIG92ZXJyaWRlTWVzc2FnZSxcbiAgc3Bpbm5lclN1ZmZpeCxcbiAgdmVyYm9zZSxcbiAgaGFzQWN0aXZlVG9vbHMgPSBmYWxzZSxcbiAgbGVhZGVySXNJZGxlID0gZmFsc2UsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHNldHRpbmdzID0gdXNlU2V0dGluZ3MoKVxuICBjb25zdCByZWR1Y2VkTW90aW9uID0gc2V0dGluZ3MucHJlZmVyc1JlZHVjZWRNb3Rpb24gPz8gZmFsc2VcblxuICAvLyBOT1RFOiB1c2VBbmltYXRpb25GcmFtZSg1MCkgbGl2ZXMgaW4gU3Bpbm5lckFuaW1hdGlvblJvdywgbm90IGhlcmUuXG4gIC8vIFRoaXMgY29tcG9uZW50IG9ubHkgcmUtcmVuZGVycyB3aGVuIHByb3BzIG9yIGFwcCBzdGF0ZSBjaGFuZ2Ug4oCUXG4gIC8vIGl0IGlzIG5vIGxvbmdlciBvbiB0aGUgNTBtcyBjbG9jay4gQWxsIGB0aW1lYC1kZXJpdmVkIHZhbHVlc1xuICAvLyAoZnJhbWUsIGdsaW1tZXIsIHN0YWxsZWQgaW50ZW5zaXR5LCB0b2tlbiBjb3VudGVyLCB0aGlua2luZyBzaGltbWVyLFxuICAvLyBlbGFwc2VkLXRpbWUgdGltZXIpIGFyZSBjb21wdXRlZCBpbnNpZGUgdGhlIGNoaWxkLlxuXG4gIGNvbnN0IHRhc2tzID0gdXNlQXBwU3RhdGUocyA9PiBzLnRhc2tzKVxuICBjb25zdCB2aWV3aW5nQWdlbnRUYXNrSWQgPSB1c2VBcHBTdGF0ZShzID0+IHMudmlld2luZ0FnZW50VGFza0lkKVxuICBjb25zdCBleHBhbmRlZFZpZXcgPSB1c2VBcHBTdGF0ZShzID0+IHMuZXhwYW5kZWRWaWV3KVxuICBjb25zdCBzaG93RXhwYW5kZWRUb2RvcyA9IGV4cGFuZGVkVmlldyA9PT0gJ3Rhc2tzJ1xuICBjb25zdCBzaG93U3Bpbm5lclRyZWUgPSBleHBhbmRlZFZpZXcgPT09ICd0ZWFtbWF0ZXMnXG4gIGNvbnN0IHNlbGVjdGVkSVBBZ2VudEluZGV4ID0gdXNlQXBwU3RhdGUocyA9PiBzLnNlbGVjdGVkSVBBZ2VudEluZGV4KVxuICBjb25zdCB2aWV3U2VsZWN0aW9uTW9kZSA9IHVzZUFwcFN0YXRlKHMgPT4gcy52aWV3U2VsZWN0aW9uTW9kZSlcbiAgLy8gR2V0IGZvcmVncm91bmRlZCB0ZWFtbWF0ZSAoaWYgdmlld2luZyBhIHRlYW1tYXRlJ3MgdHJhbnNjcmlwdClcbiAgY29uc3QgZm9yZWdyb3VuZGVkVGVhbW1hdGUgPSB2aWV3aW5nQWdlbnRUYXNrSWRcbiAgICA/IGdldFZpZXdlZFRlYW1tYXRlVGFzayh7IHZpZXdpbmdBZ2VudFRhc2tJZCwgdGFza3MgfSlcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCB7IGNvbHVtbnMgfSA9IHVzZVRlcm1pbmFsU2l6ZSgpXG4gIGNvbnN0IHRhc2tzVjIgPSB1c2VUYXNrc1YyKClcblxuICAvLyBUcmFjayB0aGlua2luZyBzdGF0dXM6ICd0aGlua2luZycgfCBudW1iZXIgKGR1cmF0aW9uIGluIG1zKSB8IG51bGxcbiAgLy8gU2hvd3MgZWFjaCBzdGF0ZSBmb3IgbWluaW11bSAycyB0byBhdm9pZCBVSSBqYW5rXG4gIGNvbnN0IFt0aGlua2luZ1N0YXR1cywgc2V0VGhpbmtpbmdTdGF0dXNdID0gdXNlU3RhdGU8XG4gICAgJ3RoaW5raW5nJyB8IG51bWJlciB8IG51bGxcbiAgPihudWxsKVxuICBjb25zdCB0aGlua2luZ1N0YXJ0UmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgc2hvd0R1cmF0aW9uVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGxcbiAgICBsZXQgY2xlYXJTdGF0dXNUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbFxuXG4gICAgaWYgKG1vZGUgPT09ICd0aGlua2luZycpIHtcbiAgICAgIC8vIFN0YXJ0ZWQgdGhpbmtpbmdcbiAgICAgIGlmICh0aGlua2luZ1N0YXJ0UmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgdGhpbmtpbmdTdGFydFJlZi5jdXJyZW50ID0gRGF0ZS5ub3coKVxuICAgICAgICBzZXRUaGlua2luZ1N0YXR1cygndGhpbmtpbmcnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpbmtpbmdTdGFydFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBTdG9wcGVkIHRoaW5raW5nIC0gY2FsY3VsYXRlIGR1cmF0aW9uIGFuZCBlbnN1cmUgMnMgbWluaW11bSBkaXNwbGF5XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSB0aGlua2luZ1N0YXJ0UmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gdGhpbmtpbmdTdGFydFJlZi5jdXJyZW50XG4gICAgICBjb25zdCByZW1haW5pbmdUaGlua2luZ1RpbWUgPSBNYXRoLm1heCgwLCAyMDAwIC0gZWxhcHNlZClcblxuICAgICAgdGhpbmtpbmdTdGFydFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICAvLyBTaG93IFwidGhpbmtpbmcuLi5cIiBmb3IgcmVtYWluaW5nIHRpbWUgaWYgPCAycyBlbGFwc2VkLCB0aGVuIHNob3cgZHVyYXRpb25cbiAgICAgIGNvbnN0IHNob3dEdXJhdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgc2V0VGhpbmtpbmdTdGF0dXMoZHVyYXRpb24pXG4gICAgICAgIC8vIENsZWFyIGFmdGVyIDJzXG4gICAgICAgIGNsZWFyU3RhdHVzVGltZXIgPSBzZXRUaW1lb3V0KHNldFRoaW5raW5nU3RhdHVzLCAyMDAwLCBudWxsKVxuICAgICAgfVxuXG4gICAgICBpZiAocmVtYWluaW5nVGhpbmtpbmdUaW1lID4gMCkge1xuICAgICAgICBzaG93RHVyYXRpb25UaW1lciA9IHNldFRpbWVvdXQoc2hvd0R1cmF0aW9uLCByZW1haW5pbmdUaGlua2luZ1RpbWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaG93RHVyYXRpb24oKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2hvd0R1cmF0aW9uVGltZXIpIGNsZWFyVGltZW91dChzaG93RHVyYXRpb25UaW1lcilcbiAgICAgIGlmIChjbGVhclN0YXR1c1RpbWVyKSBjbGVhclRpbWVvdXQoY2xlYXJTdGF0dXNUaW1lcilcbiAgICB9XG4gIH0sIFttb2RlXSlcblxuICAvLyBGaW5kIHRoZSBjdXJyZW50IGluLXByb2dyZXNzIHRhc2sgYW5kIG5leHQgcGVuZGluZyB0YXNrXG4gIGNvbnN0IGN1cnJlbnRUb2RvID0gdGFza3NWMj8uZmluZChcbiAgICB0YXNrID0+IHRhc2suc3RhdHVzICE9PSAncGVuZGluZycgJiYgdGFzay5zdGF0dXMgIT09ICdjb21wbGV0ZWQnLFxuICApXG4gIGNvbnN0IG5leHRUYXNrID0gZmluZE5leHRQZW5kaW5nVGFzayh0YXNrc1YyKVxuXG4gIC8vIFVzZSB1c2VTdGF0ZSB3aXRoIGluaXRpYWxpemVyIHRvIHBpY2sgYSByYW5kb20gdmVyYiBvbmNlIG9uIG1vdW50XG4gIGNvbnN0IFtyYW5kb21WZXJiXSA9IHVzZVN0YXRlKCgpID0+IHNhbXBsZShnZXRTcGlubmVyVmVyYnMoKSkpXG5cbiAgLy8gTGVhZGVyJ3Mgb3duIHZlcmIgKGFsd2F5cyB0aGUgbGVhZGVyJ3MsIHJlZ2FyZGxlc3Mgb2Ygd2hvIGlzIGZvcmVncm91bmRlZClcbiAgY29uc3QgbGVhZGVyVmVyYiA9XG4gICAgb3ZlcnJpZGVNZXNzYWdlID8/XG4gICAgY3VycmVudFRvZG8/LmFjdGl2ZUZvcm0gPz9cbiAgICBjdXJyZW50VG9kbz8uc3ViamVjdCA/P1xuICAgIHJhbmRvbVZlcmJcblxuICBjb25zdCBlZmZlY3RpdmVWZXJiID1cbiAgICBmb3JlZ3JvdW5kZWRUZWFtbWF0ZSAmJiAhZm9yZWdyb3VuZGVkVGVhbW1hdGUuaXNJZGxlXG4gICAgICA/IChmb3JlZ3JvdW5kZWRUZWFtbWF0ZS5zcGlubmVyVmVyYiA/PyByYW5kb21WZXJiKVxuICAgICAgOiBsZWFkZXJWZXJiXG4gIGNvbnN0IG1lc3NhZ2UgPSBlZmZlY3RpdmVWZXJiICsgJ+KApidcblxuICAvLyBUcmFjayBDTEkgYWN0aXZpdHkgd2hlbiBzcGlubmVyIGlzIGFjdGl2ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gJ3NwaW5uZXItJyArIG1vZGVcbiAgICBhY3Rpdml0eU1hbmFnZXIuc3RhcnRDTElBY3Rpdml0eShvcGVyYXRpb25JZClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWN0aXZpdHlNYW5hZ2VyLmVuZENMSUFjdGl2aXR5KG9wZXJhdGlvbklkKVxuICAgIH1cbiAgfSwgW21vZGVdKVxuXG4gIGNvbnN0IGVmZm9ydFZhbHVlID0gdXNlQXBwU3RhdGUocyA9PiBzLmVmZm9ydFZhbHVlKVxuICBjb25zdCBlZmZvcnRTdWZmaXggPSBnZXRFZmZvcnRTdWZmaXgoZ2V0TWFpbkxvb3BNb2RlbCgpLCBlZmZvcnRWYWx1ZSlcblxuICAvLyBDaGVjayBpZiBhbnkgcnVubmluZyBpbi1wcm9jZXNzIHRlYW1tYXRlcyBleGlzdCAobmVlZGVkIGZvciBib3RoIG1vZGVzKVxuICBjb25zdCBydW5uaW5nVGVhbW1hdGVzID0gZ2V0QWxsSW5Qcm9jZXNzVGVhbW1hdGVUYXNrcyh0YXNrcykuZmlsdGVyKFxuICAgIHQgPT4gdC5zdGF0dXMgPT09ICdydW5uaW5nJyxcbiAgKVxuICBjb25zdCBoYXNSdW5uaW5nVGVhbW1hdGVzID0gcnVubmluZ1RlYW1tYXRlcy5sZW5ndGggPiAwXG4gIGNvbnN0IGFsbElkbGUgPSBoYXNSdW5uaW5nVGVhbW1hdGVzICYmIHJ1bm5pbmdUZWFtbWF0ZXMuZXZlcnkodCA9PiB0LmlzSWRsZSlcblxuICAvLyBHYXRoZXIgYWdncmVnYXRlIHRva2VuIHN0YXRzIGZyb20gYWxsIHJ1bm5pbmcgc3dhcm0gdGVhbW1hdGVzXG4gIC8vIEluIHNwaW5uZXItdHJlZSBtb2RlLCBza2lwIGFnZ3JlZ2F0aW9uICh0ZWFtbWF0ZXMgaGF2ZSB0aGVpciBvd24gbGluZXMgaW4gdGhlIHRyZWUpXG4gIGxldCB0ZWFtbWF0ZVRva2VucyA9IDBcbiAgaWYgKCFzaG93U3Bpbm5lclRyZWUpIHtcbiAgICBmb3IgKGNvbnN0IHRhc2sgb2YgT2JqZWN0LnZhbHVlcyh0YXNrcykpIHtcbiAgICAgIGlmIChpc0luUHJvY2Vzc1RlYW1tYXRlVGFzayh0YXNrKSAmJiB0YXNrLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgIGlmICh0YXNrLnByb2dyZXNzPy50b2tlbkNvdW50KSB7XG4gICAgICAgICAgdGVhbW1hdGVUb2tlbnMgKz0gdGFzay5wcm9ncmVzcy50b2tlbkNvdW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTdGFsZSByZWFkIG9mIHRoZSByZWZzIGZvciBzaG93QnR3VGlwIGJlbG93IOKAlCB3ZSdyZSBvZmYgdGhlIDUwbXMgY2xvY2tcbiAgLy8gc28gdGhpcyBvbmx5IHVwZGF0ZXMgd2hlbiBwcm9wcy9hcHAgc3RhdGUgY2hhbmdlLCB3aGljaCBpcyBzdWZmaWNpZW50IGZvclxuICAvLyBhIGNvYXJzZSAzMHMgdGhyZXNob2xkLlxuICBjb25zdCBlbGFwc2VkU25hcHNob3QgPVxuICAgIHBhdXNlU3RhcnRUaW1lUmVmLmN1cnJlbnQgIT09IG51bGxcbiAgICAgID8gcGF1c2VTdGFydFRpbWVSZWYuY3VycmVudCAtXG4gICAgICAgIGxvYWRpbmdTdGFydFRpbWVSZWYuY3VycmVudCAtXG4gICAgICAgIHRvdGFsUGF1c2VkTXNSZWYuY3VycmVudFxuICAgICAgOiBEYXRlLm5vdygpIC0gbG9hZGluZ1N0YXJ0VGltZVJlZi5jdXJyZW50IC0gdG90YWxQYXVzZWRNc1JlZi5jdXJyZW50XG5cbiAgLy8gTGVhZGVyIHRva2VuIGNvdW50IGZvciBUZWFtbWF0ZVNwaW5uZXJUcmVlIOKAlCByZWFkIHJhdyAobm9uLWFuaW1hdGVkKSBmcm9tXG4gIC8vIHRoZSByZWYuIFRoZSB0cmVlIGlzIG9ubHkgc2hvd24gd2hlbiB0ZWFtbWF0ZXMgYXJlIHJ1bm5pbmc7IHRlYW1tYXRlXG4gIC8vIHByb2dyZXNzIHVwZGF0ZXMgdG8gcy50YXNrcyB0cmlnZ2VyIHJlLXJlbmRlcnMgdGhhdCBrZWVwIHRoaXMgZnJlc2guXG4gIGNvbnN0IGxlYWRlclRva2VuQ291bnQgPSBNYXRoLnJvdW5kKHJlc3BvbnNlTGVuZ3RoUmVmLmN1cnJlbnQgLyA0KVxuXG4gIGNvbnN0IGRlZmF1bHRDb2xvcjoga2V5b2YgVGhlbWUgPSAnY2xhdWRlJ1xuICBjb25zdCBkZWZhdWx0U2hpbW1lckNvbG9yID0gJ2NsYXVkZVNoaW1tZXInXG4gIGNvbnN0IG1lc3NhZ2VDb2xvciA9IG92ZXJyaWRlQ29sb3IgPz8gZGVmYXVsdENvbG9yXG4gIGNvbnN0IHNoaW1tZXJDb2xvciA9IG92ZXJyaWRlU2hpbW1lckNvbG9yID8/IGRlZmF1bHRTaGltbWVyQ29sb3JcblxuICAvLyBDb21wdXRlIFRURlQgc3RyaW5nIGhlcmUgKG9mZiB0aGUgNTBtcyBhbmltYXRpb24gY2xvY2spIGFuZCBwYXNzIHRvXG4gIC8vIFNwaW5uZXJBbmltYXRpb25Sb3cgc28gaXQgZm9sZHMgaW50byB0aGUgYCh0aG91Z2h0IGZvciBOcyDCtyAuLi4pYCBzdGF0dXNcbiAgLy8gbGluZSBpbnN0ZWFkIG9mIHRha2luZyBhIHNlcGFyYXRlIHJvdy4gYXBpTWV0cmljc1JlZiBpcyBhIHJlZiBzbyB0aGlzXG4gIC8vIGRvZXNuJ3QgdHJpZ2dlciByZS1yZW5kZXJzOyB3ZSBwaWNrIHVwIHVwZGF0ZXMgb24gdGhlIHBhcmVudCdzIH4yNXgvdHVyblxuICAvLyByZS1yZW5kZXIgY2FkZW5jZSwgc2FtZSBhcyB0aGUgb2xkIEFwaU1ldHJpY3NMaW5lIGRpZC5cbiAgbGV0IHR0ZnRUZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBpZiAoXG4gICAgXCJleHRlcm5hbFwiID09PSAnYW50JyAmJlxuICAgIGFwaU1ldHJpY3NSZWY/LmN1cnJlbnQgJiZcbiAgICBhcGlNZXRyaWNzUmVmLmN1cnJlbnQubGVuZ3RoID4gMFxuICApIHtcbiAgICB0dGZ0VGV4dCA9IGNvbXB1dGVUdGZ0VGV4dChhcGlNZXRyaWNzUmVmLmN1cnJlbnQpXG4gIH1cblxuICAvLyBXaGVuIGxlYWRlciBpcyBpZGxlIGJ1dCB0ZWFtbWF0ZXMgYXJlIHJ1bm5pbmcgKGFuZCB3ZSdyZSB2aWV3aW5nIHRoZSBsZWFkZXIpLFxuICAvLyBzaG93IGEgc3RhdGljIGRpbSBpZGxlIGRpc3BsYXkgaW5zdGVhZCBvZiB0aGUgYW5pbWF0ZWQgc3Bpbm5lciDigJQgb3RoZXJ3aXNlXG4gIC8vIHVzZVN0YWxsZWRBbmltYXRpb24gZGV0ZWN0cyBubyBuZXcgdG9rZW5zIGFmdGVyIDNzIGFuZCB0dXJucyB0aGUgc3Bpbm5lciByZWQuXG4gIGlmIChsZWFkZXJJc0lkbGUgJiYgaGFzUnVubmluZ1RlYW1tYXRlcyAmJiAhZm9yZWdyb3VuZGVkVGVhbW1hdGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgd2lkdGg9XCIxMDAlXCIgYWxpZ25JdGVtcz1cImZsZXgtc3RhcnRcIj5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCIgZmxleFdyYXA9XCJ3cmFwXCIgbWFyZ2luVG9wPXsxfSB3aWR0aD1cIjEwMCVcIj5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgIHtURUFSRFJPUF9BU1RFUklTS30gSWRsZVxuICAgICAgICAgICAgeyFhbGxJZGxlICYmICcgwrcgdGVhbW1hdGVzIHJ1bm5pbmcnfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICAgIHtzaG93U3Bpbm5lclRyZWUgJiYgKFxuICAgICAgICAgIDxUZWFtbWF0ZVNwaW5uZXJUcmVlXG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4PXtzZWxlY3RlZElQQWdlbnRJbmRleH1cbiAgICAgICAgICAgIGlzSW5TZWxlY3Rpb25Nb2RlPXt2aWV3U2VsZWN0aW9uTW9kZSA9PT0gJ3NlbGVjdGluZy1hZ2VudCd9XG4gICAgICAgICAgICBhbGxJZGxlPXthbGxJZGxlfVxuICAgICAgICAgICAgbGVhZGVyVG9rZW5Db3VudD17bGVhZGVyVG9rZW5Db3VudH1cbiAgICAgICAgICAgIGxlYWRlcklkbGVUZXh0PVwiSWRsZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuXG4gIC8vIFdoZW4gdmlld2luZyBhbiBpZGxlIHRlYW1tYXRlLCBzaG93IHN0YXRpYyBpZGxlIGRpc3BsYXkgaW5zdGVhZCBvZiBhbmltYXRlZCBzcGlubmVyXG4gIGlmIChmb3JlZ3JvdW5kZWRUZWFtbWF0ZT8uaXNJZGxlKSB7XG4gICAgY29uc3QgaWRsZVRleHQgPSBhbGxJZGxlXG4gICAgICA/IGAke1RFQVJEUk9QX0FTVEVSSVNLfSBXb3JrZWQgZm9yICR7Zm9ybWF0RHVyYXRpb24oRGF0ZS5ub3coKSAtIGZvcmVncm91bmRlZFRlYW1tYXRlLnN0YXJ0VGltZSl9YFxuICAgICAgOiBgJHtURUFSRFJPUF9BU1RFUklTS30gSWRsZWBcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgd2lkdGg9XCIxMDAlXCIgYWxpZ25JdGVtcz1cImZsZXgtc3RhcnRcIj5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCIgZmxleFdyYXA9XCJ3cmFwXCIgbWFyZ2luVG9wPXsxfSB3aWR0aD1cIjEwMCVcIj5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57aWRsZVRleHR9PC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgICAge3Nob3dTcGlubmVyVHJlZSAmJiBoYXNSdW5uaW5nVGVhbW1hdGVzICYmIChcbiAgICAgICAgICA8VGVhbW1hdGVTcGlubmVyVHJlZVxuICAgICAgICAgICAgc2VsZWN0ZWRJbmRleD17c2VsZWN0ZWRJUEFnZW50SW5kZXh9XG4gICAgICAgICAgICBpc0luU2VsZWN0aW9uTW9kZT17dmlld1NlbGVjdGlvbk1vZGUgPT09ICdzZWxlY3RpbmctYWdlbnQnfVxuICAgICAgICAgICAgYWxsSWRsZT17YWxsSWRsZX1cbiAgICAgICAgICAgIGxlYWRlclZlcmI9e2xlYWRlcklzSWRsZSA/IHVuZGVmaW5lZCA6IGxlYWRlclZlcmJ9XG4gICAgICAgICAgICBsZWFkZXJJZGxlVGV4dD17bGVhZGVySXNJZGxlID8gJ0lkbGUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgbGVhZGVyVG9rZW5Db3VudD17bGVhZGVyVG9rZW5Db3VudH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9Cb3g+XG4gICAgKVxuICB9XG5cbiAgLy8gVGltZS1iYXNlZCB0aXAgb3ZlcnJpZGVzOiBjb2Fyc2UgdGhyZXNob2xkcyBzbyBhIHN0YWxlIHJlZiByZWFkICh3ZSdyZVxuICAvLyBvZmYgdGhlIDUwbXMgY2xvY2spIGlzIGZpbmUuIE90aGVyIHRyaWdnZXJzIChtb2RlIGNoYW5nZSwgc2V0TWVzc2FnZXMpXG4gIC8vIGNhdXNlIHJlLXJlbmRlcnMgdGhhdCByZWZyZXNoIHRoaXMgaW4gcHJhY3RpY2UuXG4gIGxldCBjb250ZXh0VGlwc0FjdGl2ZSA9IGZhbHNlXG4gIGNvbnN0IHRpcHNFbmFibGVkID0gc2V0dGluZ3Muc3Bpbm5lclRpcHNFbmFibGVkICE9PSBmYWxzZVxuICBjb25zdCBzaG93Q2xlYXJUaXAgPSB0aXBzRW5hYmxlZCAmJiBlbGFwc2VkU25hcHNob3QgPiAxXzgwMF8wMDBcbiAgY29uc3Qgc2hvd0J0d1RpcCA9XG4gICAgdGlwc0VuYWJsZWQgJiYgZWxhcHNlZFNuYXBzaG90ID4gMzBfMDAwICYmICFnZXRHbG9iYWxDb25maWcoKS5idHdVc2VDb3VudFxuXG4gIGNvbnN0IGVmZmVjdGl2ZVRpcCA9IGNvbnRleHRUaXBzQWN0aXZlXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IHNob3dDbGVhclRpcCAmJiAhbmV4dFRhc2tcbiAgICAgID8gJ1VzZSAvY2xlYXIgdG8gc3RhcnQgZnJlc2ggd2hlbiBzd2l0Y2hpbmcgdG9waWNzIGFuZCBmcmVlIHVwIGNvbnRleHQnXG4gICAgICA6IHNob3dCdHdUaXAgJiYgIW5leHRUYXNrXG4gICAgICAgID8gXCJVc2UgL2J0dyB0byBhc2sgYSBxdWljayBzaWRlIHF1ZXN0aW9uIHdpdGhvdXQgaW50ZXJydXB0aW5nIENsYXVkZSdzIGN1cnJlbnQgd29ya1wiXG4gICAgICAgIDogc3Bpbm5lclRpcFxuXG4gIC8vIEJ1ZGdldCB0ZXh0IChhbnQtb25seSkg4oCUIHNob3duIGFib3ZlIHRoZSB0aXAgbGluZVxuICBsZXQgYnVkZ2V0VGV4dDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgaWYgKGZlYXR1cmUoJ1RPS0VOX0JVREdFVCcpKSB7XG4gICAgY29uc3QgYnVkZ2V0ID0gZ2V0Q3VycmVudFR1cm5Ub2tlbkJ1ZGdldCgpXG4gICAgaWYgKGJ1ZGdldCAhPT0gbnVsbCAmJiBidWRnZXQgPiAwKSB7XG4gICAgICBjb25zdCB0b2tlbnMgPSBnZXRUdXJuT3V0cHV0VG9rZW5zKClcbiAgICAgIGlmICh0b2tlbnMgPj0gYnVkZ2V0KSB7XG4gICAgICAgIGJ1ZGdldFRleHQgPSBgVGFyZ2V0OiAke2Zvcm1hdE51bWJlcih0b2tlbnMpfSB1c2VkICgke2Zvcm1hdE51bWJlcihidWRnZXQpfSBtaW4gJHtmaWd1cmVzLnRpY2t9KWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBjdCA9IE1hdGgucm91bmQoKHRva2VucyAvIGJ1ZGdldCkgKiAxMDApXG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGJ1ZGdldCAtIHRva2Vuc1xuICAgICAgICBjb25zdCByYXRlID1cbiAgICAgICAgICBlbGFwc2VkU25hcHNob3QgPiA1MDAwICYmIHRva2VucyA+PSAyMDAwXG4gICAgICAgICAgICA/IHRva2VucyAvIGVsYXBzZWRTbmFwc2hvdFxuICAgICAgICAgICAgOiAwXG4gICAgICAgIGNvbnN0IGV0YSA9XG4gICAgICAgICAgcmF0ZSA+IDBcbiAgICAgICAgICAgID8gYCBcXHUwMEI3IH4ke2Zvcm1hdER1cmF0aW9uKHJlbWFpbmluZyAvIHJhdGUsIHsgbW9zdFNpZ25pZmljYW50T25seTogdHJ1ZSB9KX1gXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIGJ1ZGdldFRleHQgPSBgVGFyZ2V0OiAke2Zvcm1hdE51bWJlcih0b2tlbnMpfSAvICR7Zm9ybWF0TnVtYmVyKGJ1ZGdldCl9ICgke3BjdH0lKSR7ZXRhfWBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHdpZHRoPVwiMTAwJVwiIGFsaWduSXRlbXM9XCJmbGV4LXN0YXJ0XCI+XG4gICAgICA8U3Bpbm5lckFuaW1hdGlvblJvd1xuICAgICAgICBtb2RlPXttb2RlfVxuICAgICAgICByZWR1Y2VkTW90aW9uPXtyZWR1Y2VkTW90aW9ufVxuICAgICAgICBoYXNBY3RpdmVUb29scz17aGFzQWN0aXZlVG9vbHN9XG4gICAgICAgIHJlc3BvbnNlTGVuZ3RoUmVmPXtyZXNwb25zZUxlbmd0aFJlZn1cbiAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgbWVzc2FnZUNvbG9yPXttZXNzYWdlQ29sb3J9XG4gICAgICAgIHNoaW1tZXJDb2xvcj17c2hpbW1lckNvbG9yfVxuICAgICAgICBvdmVycmlkZUNvbG9yPXtvdmVycmlkZUNvbG9yfVxuICAgICAgICBsb2FkaW5nU3RhcnRUaW1lUmVmPXtsb2FkaW5nU3RhcnRUaW1lUmVmfVxuICAgICAgICB0b3RhbFBhdXNlZE1zUmVmPXt0b3RhbFBhdXNlZE1zUmVmfVxuICAgICAgICBwYXVzZVN0YXJ0VGltZVJlZj17cGF1c2VTdGFydFRpbWVSZWZ9XG4gICAgICAgIHNwaW5uZXJTdWZmaXg9e3NwaW5uZXJTdWZmaXh9XG4gICAgICAgIHZlcmJvc2U9e3ZlcmJvc2V9XG4gICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgIGhhc1J1bm5pbmdUZWFtbWF0ZXM9e2hhc1J1bm5pbmdUZWFtbWF0ZXN9XG4gICAgICAgIHRlYW1tYXRlVG9rZW5zPXt0ZWFtbWF0ZVRva2Vuc31cbiAgICAgICAgZm9yZWdyb3VuZGVkVGVhbW1hdGU9e2ZvcmVncm91bmRlZFRlYW1tYXRlfVxuICAgICAgICBsZWFkZXJJc0lkbGU9e2xlYWRlcklzSWRsZX1cbiAgICAgICAgdGhpbmtpbmdTdGF0dXM9e3RoaW5raW5nU3RhdHVzfVxuICAgICAgICBlZmZvcnRTdWZmaXg9e2VmZm9ydFN1ZmZpeH1cbiAgICAgIC8+XG4gICAgICB7c2hvd1NwaW5uZXJUcmVlICYmIGhhc1J1bm5pbmdUZWFtbWF0ZXMgPyAoXG4gICAgICAgIDxUZWFtbWF0ZVNwaW5uZXJUcmVlXG4gICAgICAgICAgc2VsZWN0ZWRJbmRleD17c2VsZWN0ZWRJUEFnZW50SW5kZXh9XG4gICAgICAgICAgaXNJblNlbGVjdGlvbk1vZGU9e3ZpZXdTZWxlY3Rpb25Nb2RlID09PSAnc2VsZWN0aW5nLWFnZW50J31cbiAgICAgICAgICBhbGxJZGxlPXthbGxJZGxlfVxuICAgICAgICAgIGxlYWRlclZlcmI9e2xlYWRlcklzSWRsZSA/IHVuZGVmaW5lZCA6IGxlYWRlclZlcmJ9XG4gICAgICAgICAgbGVhZGVySWRsZVRleHQ9e2xlYWRlcklzSWRsZSA/ICdJZGxlJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBsZWFkZXJUb2tlbkNvdW50PXtsZWFkZXJUb2tlbkNvdW50fVxuICAgICAgICAvPlxuICAgICAgKSA6IHNob3dFeHBhbmRlZFRvZG9zICYmIHRhc2tzVjIgJiYgdGFza3NWMi5sZW5ndGggPiAwID8gKFxuICAgICAgICA8Qm94IHdpZHRoPVwiMTAwJVwiIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8TWVzc2FnZVJlc3BvbnNlPlxuICAgICAgICAgICAgPFRhc2tMaXN0VjIgdGFza3M9e3Rhc2tzVjJ9IC8+XG4gICAgICAgICAgPC9NZXNzYWdlUmVzcG9uc2U+XG4gICAgICAgIDwvQm94PlxuICAgICAgKSA6IG5leHRUYXNrIHx8IGVmZmVjdGl2ZVRpcCB8fCBidWRnZXRUZXh0ID8gKFxuICAgICAgICAvLyBJTVBPUlRBTlQ6IHdlIG5lZWQgdGhpcyB3aWR0aD1cIjEwMCVcIiB0byBhdm9pZCBhbiBJbmsgYnVnIHdoZXJlIHRoZVxuICAgICAgICAvLyB0aXAgZ2V0cyBkdXBsaWNhdGVkIG92ZXIgYW5kIG92ZXIgd2hpbGUgdGhlIHNwaW5uZXIgaXMgcnVubmluZyBpZlxuICAgICAgICAvLyB0aGUgdGVybWluYWwgaXMgdmVyeSBzbWFsbC4gVE9ETzogZml4IHRoaXMgaW4gSW5rLlxuICAgICAgICA8Qm94IHdpZHRoPVwiMTAwJVwiIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICB7YnVkZ2V0VGV4dCAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZVJlc3BvbnNlPlxuICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57YnVkZ2V0VGV4dH08L1RleHQ+XG4gICAgICAgICAgICA8L01lc3NhZ2VSZXNwb25zZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIHsobmV4dFRhc2sgfHwgZWZmZWN0aXZlVGlwKSAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZVJlc3BvbnNlPlxuICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICB7bmV4dFRhc2tcbiAgICAgICAgICAgICAgICAgID8gYE5leHQ6ICR7bmV4dFRhc2suc3ViamVjdH1gXG4gICAgICAgICAgICAgICAgICA6IGBUaXA6ICR7ZWZmZWN0aXZlVGlwfWB9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvTWVzc2FnZVJlc3BvbnNlPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9Cb3g+XG4gIClcbn1cblxuLy8gQnJpZWYvYXNzaXN0YW50IG1vZGUgc3Bpbm5lcjogc2luZ2xlIHN0YXR1cyBsaW5lLiBQcm9tcHRJbnB1dCBkcm9wcyBpdHNcbi8vIG93biBtYXJnaW5Ub3Agd2hlbiBpc0JyaWVmT25seSBpcyBhY3RpdmUsIHNvIHRoaXMgY29tcG9uZW50IG93bnMgdGhlXG4vLyAyLXJvdyBmb290cHJpbnQgYmV0d2VlbiBtZXNzYWdlcyBhbmQgaW5wdXQuIEZvb3RwcmludCBpcyBbYmxhbmssIGNvbnRlbnRdXG4vLyDigJQgb25lIGJsYW5rIHJvdyBhYm92ZSAoYnJlYXRoaW5nIHJvb20gdW5kZXIgdGhlIG1lc3NhZ2VzIGxpc3QpLCBzcGlubmVyXG4vLyBmbHVzaCBhZ2FpbnN0IHRoZSBpbnB1dCBiYXIuIFByb21wdElucHV0J3MgYWJzb2x1dGUtcG9zaXRpb25lZFxuLy8gTm90aWZpY2F0aW9ucyBvdmVybGF5IGNvbXBlbnNhdGVzIHdpdGggbWFyZ2luVG9wPS0yIGluIGJyaWVmIG1vZGVcbi8vIChQcm9tcHRJbnB1dC50c3g6fjI5MjgpIHNvIGl0IGZsb2F0cyBpbnRvIHRoZSBibGFuayByb3cgYWJvdmUgdGhlXG4vLyBzcGlubmVyLCBub3Qgb3ZlciB0aGUgc3Bpbm5lciBjb250ZW50LiBQYWlyZWQgd2l0aCBCcmllZklkbGVTdGF0dXMgd2hpY2hcbi8vIGtlZXBzIHRoZSBzYW1lIGZvb3RwcmludCB3aGVuIGlkbGUuXG50eXBlIEJyaWVmU3Bpbm5lclByb3BzID0ge1xuICBtb2RlOiBTcGlubmVyTW9kZVxuICBvdmVycmlkZU1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsXG59XG5cbmZ1bmN0aW9uIEJyaWVmU3Bpbm5lcih7XG4gIG1vZGUsXG4gIG92ZXJyaWRlTWVzc2FnZSxcbn06IEJyaWVmU3Bpbm5lclByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSB1c2VTZXR0aW5ncygpXG4gIGNvbnN0IHJlZHVjZWRNb3Rpb24gPSBzZXR0aW5ncy5wcmVmZXJzUmVkdWNlZE1vdGlvbiA/PyBmYWxzZVxuICBjb25zdCBbcmFuZG9tVmVyYl0gPSB1c2VTdGF0ZSgoKSA9PiBzYW1wbGUoZ2V0U3Bpbm5lclZlcmJzKCkpID8/ICdXb3JraW5nJylcbiAgY29uc3QgdmVyYiA9IG92ZXJyaWRlTWVzc2FnZSA/PyByYW5kb21WZXJiXG4gIGNvbnN0IGNvbm5TdGF0dXMgPSB1c2VBcHBTdGF0ZShzID0+IHMucmVtb3RlQ29ubmVjdGlvblN0YXR1cylcblxuICAvLyBUcmFjayBDTEkgYWN0aXZpdHkgc28gT1MvSURFIFwiYnVzeVwiIGluZGljYXRvcnMgZmlyZSBpbiBicmllZiBtb2RlIHRvb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gJ3NwaW5uZXItJyArIG1vZGVcbiAgICBhY3Rpdml0eU1hbmFnZXIuc3RhcnRDTElBY3Rpdml0eShvcGVyYXRpb25JZClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWN0aXZpdHlNYW5hZ2VyLmVuZENMSUFjdGl2aXR5KG9wZXJhdGlvbklkKVxuICAgIH1cbiAgfSwgW21vZGVdKVxuXG4gIC8vIERyaXZlIGJvdGggZG90IGN5Y2xlIGFuZCBzaGltbWVyIGZyb20gdGhlIHNoYXJlZCBjbG9jay4gVGhlIHZpZXdwb3J0XG4gIC8vIHJlZiBpcyB1bnVzZWQg4oCUIHRoZSBzcGlubmVyIHVubW91bnRzIG9uIHR1cm4gZW5kIHNvIHZpZXdwb3J0LWJhc2VkXG4gIC8vIHBhdXNpbmcgaXNuJ3QgbmVlZGVkLlxuICBjb25zdCBbLCB0aW1lXSA9IHVzZUFuaW1hdGlvbkZyYW1lKHJlZHVjZWRNb3Rpb24gPyBudWxsIDogMTIwKVxuXG4gIC8vIExvY2FsIHRhc2tzICsgcmVtb3RlIHRhc2tzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKHZpZXdlciBtb2RlIGhhcyBhblxuICAvLyBlbXB0eSBsb2NhbCBBcHBTdGF0ZS50YXNrczsgbG9jYWwgbW9kZSBoYXMgcmVtb3RlQmFja2dyb3VuZFRhc2tDb3VudD0wKS5cbiAgLy8gU3VtbWluZyBhdm9pZHMgYSBtb2RlIGJyYW5jaC5cbiAgY29uc3QgcnVubmluZ0NvdW50ID0gdXNlQXBwU3RhdGUoXG4gICAgcyA9PlxuICAgICAgY291bnQoT2JqZWN0LnZhbHVlcyhzLnRhc2tzKSwgaXNCYWNrZ3JvdW5kVGFzaykgK1xuICAgICAgcy5yZW1vdGVCYWNrZ3JvdW5kVGFza0NvdW50LFxuICApXG5cbiAgLy8gQ29ubmVjdGlvbiB0cm91YmxlIG92ZXJyaWRlcyB0aGUgdmVyYiDigJQgYGNsYXVkZSBhc3Npc3RhbnRgIGlzIGEgcHVyZSB2aWV3ZXIsXG4gIC8vIG5vdGhpbmcgdXNlZnVsIGlzIGhhcHBlbmluZyB3aGlsZSB0aGUgV1MgaXMgZG93bi5cbiAgY29uc3Qgc2hvd0Nvbm5XYXJuaW5nID1cbiAgICBjb25uU3RhdHVzID09PSAncmVjb25uZWN0aW5nJyB8fCBjb25uU3RhdHVzID09PSAnZGlzY29ubmVjdGVkJ1xuICBjb25zdCBjb25uVGV4dCA9XG4gICAgY29ublN0YXR1cyA9PT0gJ3JlY29ubmVjdGluZycgPyAnUmVjb25uZWN0aW5nJyA6ICdEaXNjb25uZWN0ZWQnXG5cbiAgLy8gRG90cyBwYWRkZWQgdG8gYSBmaXhlZCAzIGNvbHVtbnMgc28gdGhlIHJpZ2h0LWFsaWduZWQgY291bnQgZG9lc24ndFxuICAvLyBqaXR0ZXIgYXMgdGhlIGN5Y2xlIGFkdmFuY2VzLlxuICBjb25zdCBkb3RGcmFtZSA9IE1hdGguZmxvb3IodGltZSAvIDMwMCkgJSAzXG4gIGNvbnN0IGRvdHMgPSByZWR1Y2VkTW90aW9uID8gJ+KApiAgJyA6ICcuJy5yZXBlYXQoZG90RnJhbWUgKyAxKS5wYWRFbmQoMylcblxuICAvLyBTaGltbWVyOiByZXZlcnNlLXN3ZWVwIGhpZ2hsaWdodCBhY3Jvc3MgdGhlIHZlcmIuIFNraXAgZm9yIGNvbm5lY3Rpb25cbiAgLy8gd2FybmluZ3MgKHNoaW1tZXIgcmVhZHMgYXMgXCJ3b3JraW5nXCI7IFJlY29ubmVjdGluZy9EaXNjb25uZWN0ZWQgaXMgbm90KS5cbiAgY29uc3QgdmVyYldpZHRoID0gdXNlTWVtbygoKSA9PiBzdHJpbmdXaWR0aCh2ZXJiKSwgW3ZlcmJdKVxuICBjb25zdCBnbGltbWVySW5kZXggPVxuICAgIHJlZHVjZWRNb3Rpb24gfHwgc2hvd0Nvbm5XYXJuaW5nXG4gICAgICA/IC0xMDBcbiAgICAgIDogY29tcHV0ZUdsaW1tZXJJbmRleChNYXRoLmZsb29yKHRpbWUgLyBTSElNTUVSX0lOVEVSVkFMX01TKSwgdmVyYldpZHRoKVxuICBjb25zdCB7IGJlZm9yZSwgc2hpbW1lciwgYWZ0ZXIgfSA9IGNvbXB1dGVTaGltbWVyU2VnbWVudHModmVyYiwgZ2xpbW1lckluZGV4KVxuXG4gIGNvbnN0IHsgY29sdW1ucyB9ID0gdXNlVGVybWluYWxTaXplKClcbiAgY29uc3QgcmlnaHRUZXh0ID0gcnVubmluZ0NvdW50ID4gMCA/IGAke3J1bm5pbmdDb3VudH0gaW4gYmFja2dyb3VuZGAgOiAnJ1xuICAvLyBNYW51YWwgcmlnaHQtYWxpZ24gdmlhIHNwYWNlIHBhZGRpbmcg4oCUIGZsZXhHcm93IHNwYWNlcnMgaW5zaWRlXG4gIC8vIEZ1bGxzY3JlZW5MYXlvdXQncyBgbWFpbmAgc2xvdCBkb24ndCByZXNvbHZlIGEgd2lkdGggYW5kIGNhdXNlZCB0aGVcbiAgLy8gZGlmZiBlbmdpbmUgdG8gbWlzcyBkb3QtZnJhbWUgdXBkYXRlcy5cbiAgY29uc3QgbGVmdFdpZHRoID0gKHNob3dDb25uV2FybmluZyA/IHN0cmluZ1dpZHRoKGNvbm5UZXh0KSA6IHZlcmJXaWR0aCkgKyAzXG4gIGNvbnN0IHBhZCA9IE1hdGgubWF4KDEsIGNvbHVtbnMgLSAyIC0gbGVmdFdpZHRoIC0gc3RyaW5nV2lkdGgocmlnaHRUZXh0KSlcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiIHdpZHRoPVwiMTAwJVwiIG1hcmdpblRvcD17MX0gcGFkZGluZ0xlZnQ9ezJ9PlxuICAgICAge3Nob3dDb25uV2FybmluZyA/IChcbiAgICAgICAgPFRleHQgY29sb3I9XCJlcnJvclwiPntjb25uVGV4dCArIGRvdHN9PC9UZXh0PlxuICAgICAgKSA6IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7YmVmb3JlID8gPFRleHQgZGltQ29sb3I+e2JlZm9yZX08L1RleHQ+IDogbnVsbH1cbiAgICAgICAgICB7c2hpbW1lciA/IDxUZXh0PntzaGltbWVyfTwvVGV4dD4gOiBudWxsfVxuICAgICAgICAgIHthZnRlciA/IDxUZXh0IGRpbUNvbG9yPnthZnRlcn08L1RleHQ+IDogbnVsbH1cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57ZG90c308L1RleHQ+XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICAgIHtyaWdodFRleHQgPyAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPFRleHQ+eycgJy5yZXBlYXQocGFkKX08L1RleHQ+XG4gICAgICAgICAgPFRleHQgY29sb3I9XCJzdWJ0bGVcIj57cmlnaHRUZXh0fTwvVGV4dD5cbiAgICAgICAgPC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L0JveD5cbiAgKVxufVxuXG4vLyBJZGxlIHBsYWNlaG9sZGVyIGZvciBicmllZiBtb2RlLiBTYW1lIDItcm93IFtibGFuaywgY29udGVudF0gZm9vdHByaW50XG4vLyBhcyBCcmllZlNwaW5uZXIgc28gdGhlIGlucHV0IGJhciBuZXZlciBqdW1wcyB3aGVuIHRvZ2dsaW5nIGJldHdlZW5cbi8vIHdvcmtpbmcvaWRsZS9kaXNjb25uZWN0ZWQuIFNlZSBCcmllZlNwaW5uZXIncyBjb21tZW50IGZvciB0aGVcbi8vIE5vdGlmaWNhdGlvbnMgb3ZlcmxheSBjb3VwbGluZy5cbmV4cG9ydCBmdW5jdGlvbiBCcmllZklkbGVTdGF0dXMoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgY29ublN0YXR1cyA9IHVzZUFwcFN0YXRlKHMgPT4gcy5yZW1vdGVDb25uZWN0aW9uU3RhdHVzKVxuICBjb25zdCBydW5uaW5nQ291bnQgPSB1c2VBcHBTdGF0ZShcbiAgICBzID0+XG4gICAgICBjb3VudChPYmplY3QudmFsdWVzKHMudGFza3MpLCBpc0JhY2tncm91bmRUYXNrKSArXG4gICAgICBzLnJlbW90ZUJhY2tncm91bmRUYXNrQ291bnQsXG4gIClcbiAgY29uc3QgeyBjb2x1bW5zIH0gPSB1c2VUZXJtaW5hbFNpemUoKVxuXG4gIGNvbnN0IHNob3dDb25uV2FybmluZyA9XG4gICAgY29ublN0YXR1cyA9PT0gJ3JlY29ubmVjdGluZycgfHwgY29ublN0YXR1cyA9PT0gJ2Rpc2Nvbm5lY3RlZCdcbiAgY29uc3QgY29ublRleHQgPVxuICAgIGNvbm5TdGF0dXMgPT09ICdyZWNvbm5lY3RpbmcnID8gJ1JlY29ubmVjdGluZ+KApicgOiAnRGlzY29ubmVjdGVkJ1xuICBjb25zdCBsZWZ0VGV4dCA9IHNob3dDb25uV2FybmluZyA/IGNvbm5UZXh0IDogJydcbiAgY29uc3QgcmlnaHRUZXh0ID0gcnVubmluZ0NvdW50ID4gMCA/IGAke3J1bm5pbmdDb3VudH0gaW4gYmFja2dyb3VuZGAgOiAnJ1xuXG4gIGlmICghbGVmdFRleHQgJiYgIXJpZ2h0VGV4dCkgcmV0dXJuIDxCb3ggaGVpZ2h0PXsyfSAvPlxuXG4gIGNvbnN0IHBhZCA9IE1hdGgubWF4KFxuICAgIDEsXG4gICAgY29sdW1ucyAtIDIgLSBzdHJpbmdXaWR0aChsZWZ0VGV4dCkgLSBzdHJpbmdXaWR0aChyaWdodFRleHQpLFxuICApXG4gIHJldHVybiAoXG4gICAgPEJveCBtYXJnaW5Ub3A9ezF9IHBhZGRpbmdMZWZ0PXsyfT5cbiAgICAgIDxUZXh0PlxuICAgICAgICB7bGVmdFRleHQgPyA8VGV4dCBjb2xvcj1cImVycm9yXCI+e2xlZnRUZXh0fTwvVGV4dD4gOiBudWxsfVxuICAgICAgICB7cmlnaHRUZXh0ID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8VGV4dD57JyAnLnJlcGVhdChwYWQpfTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwic3VidGxlXCI+e3JpZ2h0VGV4dH08L1RleHQ+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9UZXh0PlxuICAgIDwvQm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTcGlubmVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHNldHRpbmdzID0gdXNlU2V0dGluZ3MoKVxuICBjb25zdCByZWR1Y2VkTW90aW9uID0gc2V0dGluZ3MucHJlZmVyc1JlZHVjZWRNb3Rpb24gPz8gZmFsc2VcbiAgY29uc3QgW3JlZiwgdGltZV0gPSB1c2VBbmltYXRpb25GcmFtZShyZWR1Y2VkTW90aW9uID8gbnVsbCA6IDEyMClcblxuICAvLyBSZWR1Y2VkIG1vdGlvbjogc3RhdGljIGRvdCBpbnN0ZWFkIG9mIGFuaW1hdGVkIHNwaW5uZXJcbiAgaWYgKHJlZHVjZWRNb3Rpb24pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCByZWY9e3JlZn0gZmxleFdyYXA9XCJ3cmFwXCIgaGVpZ2h0PXsxfSB3aWR0aD17Mn0+XG4gICAgICAgIDxUZXh0IGNvbG9yPVwidGV4dFwiPuKXjzwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuXG4gIC8vIERlcml2ZSBmcmFtZSBmcm9tIHN5bmNlZCB0aW1lIC0gYWxsIHNwaW5uZXJzIGFuaW1hdGUgdG9nZXRoZXJcbiAgY29uc3QgZnJhbWUgPSBNYXRoLmZsb29yKHRpbWUgLyAxMjApICUgU1BJTk5FUl9GUkFNRVMubGVuZ3RoXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IHJlZj17cmVmfSBmbGV4V3JhcD1cIndyYXBcIiBoZWlnaHQ9ezF9IHdpZHRoPXsyfT5cbiAgICAgIDxUZXh0IGNvbG9yPVwidGV4dFwiPntTUElOTkVSX0ZSQU1FU1tmcmFtZV19PC9UZXh0PlxuICAgIDwvQm94PlxuICApXG59XG5cblxuZnVuY3Rpb24gZmluZE5leHRQZW5kaW5nVGFzayh0YXNrczogVGFza1tdIHwgdW5kZWZpbmVkKTogVGFzayB8IHVuZGVmaW5lZCB7XG4gIGlmICghdGFza3MpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgcGVuZGluZ1Rhc2tzID0gdGFza3MuZmlsdGVyKHQgPT4gdC5zdGF0dXMgPT09ICdwZW5kaW5nJylcbiAgaWYgKHBlbmRpbmdUYXNrcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoXG4gICAgdGFza3MuZmlsdGVyKHQgPT4gdC5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKS5tYXAodCA9PiB0LmlkKSxcbiAgKVxuICByZXR1cm4gKFxuICAgIHBlbmRpbmdUYXNrcy5maW5kKHQgPT4gIXQuYmxvY2tlZEJ5LnNvbWUoaWQgPT4gdW5yZXNvbHZlZElkcy5oYXMoaWQpKSkgPz9cbiAgICBwZW5kaW5nVGFza3NbMF1cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQSxTQUFTQSxHQUFHLEVBQUVDLElBQUksUUFBUSxXQUFXO0FBQ3JDLE9BQU8sS0FBS0MsS0FBSyxNQUFNLE9BQU87QUFDOUIsU0FBU0MsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDNUQsU0FDRUMsbUJBQW1CLEVBQ25CQyxzQkFBc0IsRUFDdEJDLG1CQUFtQixRQUNkLCtCQUErQjtBQUN0QyxTQUFTQyxPQUFPLFFBQVEsWUFBWTtBQUNwQyxTQUFTQyxlQUFlLEVBQUVDLGVBQWUsUUFBUSx1QkFBdUI7QUFDeEUsU0FBU0MsbUNBQW1DLFFBQVEscUNBQXFDO0FBQ3pGLFNBQVNDLFdBQVcsUUFBUSxzQkFBc0I7QUFDbEQsU0FBU0MsS0FBSyxRQUFRLG1CQUFtQjtBQUN6QyxPQUFPQyxNQUFNLE1BQU0scUJBQXFCO0FBQ3hDLFNBQ0VDLGNBQWMsRUFDZEMsWUFBWSxFQUNaQyxrQkFBa0IsUUFDYixvQkFBb0I7QUFDM0IsY0FBY0MsS0FBSyxRQUFRLG9CQUFvQjtBQUMvQyxTQUFTQyxlQUFlLFFBQVEsNkJBQTZCO0FBQzdELFNBQVNDLGVBQWUsUUFBUSw4QkFBOEI7QUFDOUQsU0FBU0MsZUFBZSxRQUFRLHNCQUFzQjtBQUN0RCxTQUFTQyxVQUFVLFFBQVEsaUJBQWlCO0FBQzVDLFNBQVNDLFVBQVUsUUFBUSx3QkFBd0I7QUFDbkQsY0FBY0MsSUFBSSxRQUFRLG1CQUFtQjtBQUM3QyxTQUFTQyxXQUFXLFFBQVEsc0JBQXNCO0FBQ2xELFNBQVNDLGVBQWUsUUFBUSw2QkFBNkI7QUFDN0QsU0FBU0MsV0FBVyxRQUFRLHVCQUF1QjtBQUNuRCxTQUFTQyxvQkFBb0IsRUFBRSxLQUFLQyxXQUFXLFFBQVEsb0JBQW9CO0FBQzNFLFNBQVNDLG1CQUFtQixRQUFRLGtDQUFrQztBQUN0RSxTQUFTQyxXQUFXLFFBQVEseUJBQXlCO0FBQ3JELFNBQVNDLHVCQUF1QixRQUFRLHlDQUF5QztBQUNqRixTQUFTQyxnQkFBZ0IsUUFBUSxtQkFBbUI7QUFDcEQsU0FBU0MsNEJBQTRCLFFBQVEseURBQXlEO0FBQ3RHLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MsZ0JBQWdCLFFBQVEseUJBQXlCO0FBQzFELFNBQVNDLHFCQUFxQixRQUFRLHVCQUF1QjtBQUM3RCxTQUFTQyxpQkFBaUIsUUFBUSx5QkFBeUI7QUFDM0QsT0FBT0MsT0FBTyxNQUFNLFNBQVM7QUFDN0IsU0FDRUMseUJBQXlCLEVBQ3pCQyxtQkFBbUIsUUFDZCx1QkFBdUI7QUFFOUIsU0FBU0MsbUJBQW1CLFFBQVEsa0NBQWtDO0FBQ3RFLFNBQVNDLGlCQUFpQixRQUFRLFdBQVc7QUFDN0MsU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxjQUFjZixXQUFXLFFBQVEsb0JBQW9CO0FBRXJELE1BQU1nQixrQkFBa0IsR0FBR2pCLG9CQUFvQixDQUFDLENBQUM7QUFFakQsTUFBTWtCLGNBQWMsR0FBRyxDQUNyQixHQUFHRCxrQkFBa0IsRUFDckIsR0FBRyxDQUFDLEdBQUdBLGtCQUFrQixDQUFDLENBQUNFLE9BQU8sQ0FBQyxDQUFDLENBQ3JDO0FBR0QsS0FBS0MsS0FBSyxHQUFHO0VBQ1hDLElBQUksRUFBRXBCLFdBQVc7RUFDakJxQixtQkFBbUIsRUFBRWxELEtBQUssQ0FBQ21ELFNBQVMsQ0FBQyxNQUFNLENBQUM7RUFDNUNDLGdCQUFnQixFQUFFcEQsS0FBSyxDQUFDbUQsU0FBUyxDQUFDLE1BQU0sQ0FBQztFQUN6Q0UsaUJBQWlCLEVBQUVyRCxLQUFLLENBQUNtRCxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztFQUNqREcsVUFBVSxDQUFDLEVBQUUsTUFBTTtFQUNuQkMsaUJBQWlCLEVBQUV2RCxLQUFLLENBQUNtRCxTQUFTLENBQUMsTUFBTSxDQUFDO0VBQzFDSyxhQUFhLENBQUMsRUFBRSxNQUFNdEMsS0FBSyxHQUFHLElBQUk7RUFDbEN1QyxvQkFBb0IsQ0FBQyxFQUFFLE1BQU12QyxLQUFLLEdBQUcsSUFBSTtFQUN6Q3dDLGVBQWUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJO0VBQy9CQyxhQUFhLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSTtFQUM3QkMsT0FBTyxFQUFFLE9BQU87RUFDaEJDLGNBQWMsQ0FBQyxFQUFFLE9BQU87RUFDeEI7RUFDQUMsWUFBWSxDQUFDLEVBQUUsT0FBTztBQUN4QixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0MsZUFBZUEsQ0FBQ0MsS0FBSyxFQUFFaEIsS0FBSyxDQUFDLEVBQUVoRCxLQUFLLENBQUNpRSxTQUFTLENBQUM7RUFDN0QsTUFBTUMsV0FBVyxHQUFHekMsV0FBVyxDQUFDMEMsQ0FBQyxJQUFJQSxDQUFDLENBQUNELFdBQVcsQ0FBQztFQUNuRDtFQUNBO0VBQ0E7RUFDQTtFQUNBLE1BQU1FLGtCQUFrQixHQUFHM0MsV0FBVyxDQUFDMEMsR0FBQyxJQUFJQSxHQUFDLENBQUNDLGtCQUFrQixDQUFDO0VBQ2pFO0VBQ0EsTUFBTUMsZUFBZSxHQUNuQjdELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSUEsT0FBTyxDQUFDLGNBQWMsQ0FBQztFQUN4QztFQUNBTixPQUFPLENBQUMsTUFBTVUsV0FBVyxDQUFDMEQsT0FBTyxDQUFDQyxHQUFHLENBQUNDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQzdELEtBQUs7O0VBRVg7RUFDQTtFQUNBO0VBQ0EsSUFDRSxDQUFDaEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJQSxPQUFPLENBQUMsY0FBYyxDQUFDLE1BQzVDQyxlQUFlLENBQUMsQ0FBQyxJQUNmQyxlQUFlLENBQUMsQ0FBQyxLQUNmMkQsZUFBZSxJQUNkMUQsbUNBQW1DLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUUsQ0FBQyxJQUN6RXVELFdBQVcsSUFDWCxDQUFDRSxrQkFBa0IsRUFDbkI7SUFDQSxPQUNFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDSixLQUFLLENBQUNmLElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDZSxLQUFLLENBQUNOLGVBQWUsQ0FBQyxHQUFHO0VBRTlFO0VBRUEsT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUlNLEtBQUssQ0FBQyxHQUFHO0FBQzVDO0FBRUEsU0FBU1Msb0JBQW9CQSxDQUFDO0VBQzVCeEIsSUFBSTtFQUNKQyxtQkFBbUI7RUFDbkJFLGdCQUFnQjtFQUNoQkMsaUJBQWlCO0VBQ2pCQyxVQUFVO0VBQ1ZDLGlCQUFpQjtFQUNqQkMsYUFBYTtFQUNiQyxvQkFBb0I7RUFDcEJDLGVBQWU7RUFDZkMsYUFBYTtFQUNiQyxPQUFPO0VBQ1BDLGNBQWMsR0FBRyxLQUFLO0VBQ3RCQyxZQUFZLEdBQUc7QUFDVixDQUFOLEVBQUVkLEtBQUssQ0FBQyxFQUFFaEQsS0FBSyxDQUFDaUUsU0FBUyxDQUFDO0VBQ3pCLE1BQU1TLFFBQVEsR0FBRzNDLFdBQVcsQ0FBQyxDQUFDO0VBQzlCLE1BQU00QyxhQUFhLEdBQUdELFFBQVEsQ0FBQ0Usb0JBQW9CLElBQUksS0FBSzs7RUFFNUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQSxNQUFNQyxLQUFLLEdBQUdwRCxXQUFXLENBQUMwQyxDQUFDLElBQUlBLENBQUMsQ0FBQ1UsS0FBSyxDQUFDO0VBQ3ZDLE1BQU1ULGtCQUFrQixHQUFHM0MsV0FBVyxDQUFDMEMsR0FBQyxJQUFJQSxHQUFDLENBQUNDLGtCQUFrQixDQUFDO0VBQ2pFLE1BQU1VLFlBQVksR0FBR3JELFdBQVcsQ0FBQzBDLEdBQUMsSUFBSUEsR0FBQyxDQUFDVyxZQUFZLENBQUM7RUFDckQsTUFBTUMsaUJBQWlCLEdBQUdELFlBQVksS0FBSyxPQUFPO0VBQ2xELE1BQU1FLGVBQWUsR0FBR0YsWUFBWSxLQUFLLFdBQVc7RUFDcEQsTUFBTUcsb0JBQW9CLEdBQUd4RCxXQUFXLENBQUMwQyxHQUFDLElBQUlBLEdBQUMsQ0FBQ2Msb0JBQW9CLENBQUM7RUFDckUsTUFBTUMsaUJBQWlCLEdBQUd6RCxXQUFXLENBQUMwQyxHQUFDLElBQUlBLEdBQUMsQ0FBQ2UsaUJBQWlCLENBQUM7RUFDL0Q7RUFDQSxNQUFNQyxvQkFBb0IsR0FBR2Ysa0JBQWtCLEdBQzNDL0IscUJBQXFCLENBQUM7SUFBRStCLGtCQUFrQjtJQUFFUztFQUFNLENBQUMsQ0FBQyxHQUNwRE8sU0FBUztFQUNiLE1BQU07SUFBRUM7RUFBUSxDQUFDLEdBQUczRCxlQUFlLENBQUMsQ0FBQztFQUNyQyxNQUFNNEQsT0FBTyxHQUFHL0QsVUFBVSxDQUFDLENBQUM7O0VBRTVCO0VBQ0E7RUFDQSxNQUFNLENBQUNnRSxjQUFjLEVBQUVDLGlCQUFpQixDQUFDLEdBQUdwRixRQUFRLENBQ2xELFVBQVUsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUMzQixDQUFDLElBQUksQ0FBQztFQUNQLE1BQU1xRixnQkFBZ0IsR0FBR3RGLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0VBRXBERixTQUFTLENBQUMsTUFBTTtJQUNkLElBQUl5RixpQkFBaUIsRUFBRUMsVUFBVSxDQUFDLE9BQU9DLFVBQVUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJO0lBQ2xFLElBQUlDLGdCQUFnQixFQUFFRixVQUFVLENBQUMsT0FBT0MsVUFBVSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFFakUsSUFBSTNDLElBQUksS0FBSyxVQUFVLEVBQUU7TUFDdkI7TUFDQSxJQUFJd0MsZ0JBQWdCLENBQUNLLE9BQU8sS0FBSyxJQUFJLEVBQUU7UUFDckNMLGdCQUFnQixDQUFDSyxPQUFPLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7UUFDckNSLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztNQUMvQjtJQUNGLENBQUMsTUFBTSxJQUFJQyxnQkFBZ0IsQ0FBQ0ssT0FBTyxLQUFLLElBQUksRUFBRTtNQUM1QztNQUNBLE1BQU1HLFFBQVEsR0FBR0YsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxHQUFHUCxnQkFBZ0IsQ0FBQ0ssT0FBTztNQUN0RCxNQUFNSSxPQUFPLEdBQUdILElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBR1AsZ0JBQWdCLENBQUNLLE9BQU87TUFDckQsTUFBTUsscUJBQXFCLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUdILE9BQU8sQ0FBQztNQUV6RFQsZ0JBQWdCLENBQUNLLE9BQU8sR0FBRyxJQUFJOztNQUUvQjtNQUNBLE1BQU1RLFlBQVksR0FBR0EsQ0FBQSxDQUFFLEVBQUUsSUFBSSxJQUFJO1FBQy9CZCxpQkFBaUIsQ0FBQ1MsUUFBUSxDQUFDO1FBQzNCO1FBQ0FKLGdCQUFnQixHQUFHRCxVQUFVLENBQUNKLGlCQUFpQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7TUFDOUQsQ0FBQztNQUVELElBQUlXLHFCQUFxQixHQUFHLENBQUMsRUFBRTtRQUM3QlQsaUJBQWlCLEdBQUdFLFVBQVUsQ0FBQ1UsWUFBWSxFQUFFSCxxQkFBcUIsQ0FBQztNQUNyRSxDQUFDLE1BQU07UUFDTEcsWUFBWSxDQUFDLENBQUM7TUFDaEI7SUFDRjtJQUVBLE9BQU8sTUFBTTtNQUNYLElBQUlaLGlCQUFpQixFQUFFYSxZQUFZLENBQUNiLGlCQUFpQixDQUFDO01BQ3RELElBQUlHLGdCQUFnQixFQUFFVSxZQUFZLENBQUNWLGdCQUFnQixDQUFDO0lBQ3RELENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQzVDLElBQUksQ0FBQyxDQUFDOztFQUVWO0VBQ0EsTUFBTXVELFdBQVcsR0FBR2xCLE9BQU8sRUFBRW1CLElBQUksQ0FDL0JDLElBQUksSUFBSUEsSUFBSSxDQUFDQyxNQUFNLEtBQUssU0FBUyxJQUFJRCxJQUFJLENBQUNDLE1BQU0sS0FBSyxXQUN2RCxDQUFDO0VBQ0QsTUFBTUMsUUFBUSxHQUFHQyxtQkFBbUIsQ0FBQ3ZCLE9BQU8sQ0FBQzs7RUFFN0M7RUFDQSxNQUFNLENBQUN3QixVQUFVLENBQUMsR0FBRzFHLFFBQVEsQ0FBQyxNQUFNVSxNQUFNLENBQUNNLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7RUFFOUQ7RUFDQSxNQUFNMkYsVUFBVSxHQUNkckQsZUFBZSxJQUNmOEMsV0FBVyxFQUFFUSxVQUFVLElBQ3ZCUixXQUFXLEVBQUVTLE9BQU8sSUFDcEJILFVBQVU7RUFFWixNQUFNSSxhQUFhLEdBQ2pCL0Isb0JBQW9CLElBQUksQ0FBQ0Esb0JBQW9CLENBQUNnQyxNQUFNLEdBQy9DaEMsb0JBQW9CLENBQUNpQyxXQUFXLElBQUlOLFVBQVUsR0FDL0NDLFVBQVU7RUFDaEIsTUFBTU0sT0FBTyxHQUFHSCxhQUFhLEdBQUcsR0FBRzs7RUFFbkM7RUFDQWpILFNBQVMsQ0FBQyxNQUFNO0lBQ2QsTUFBTXFILFdBQVcsR0FBRyxVQUFVLEdBQUdyRSxJQUFJO0lBQ3JDOUIsZUFBZSxDQUFDb0csZ0JBQWdCLENBQUNELFdBQVcsQ0FBQztJQUM3QyxPQUFPLE1BQU07TUFDWG5HLGVBQWUsQ0FBQ3FHLGNBQWMsQ0FBQ0YsV0FBVyxDQUFDO0lBQzdDLENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQ3JFLElBQUksQ0FBQyxDQUFDO0VBRVYsTUFBTXdFLFdBQVcsR0FBR2hHLFdBQVcsQ0FBQzBDLEdBQUMsSUFBSUEsR0FBQyxDQUFDc0QsV0FBVyxDQUFDO0VBQ25ELE1BQU1DLFlBQVksR0FBR3ZGLGVBQWUsQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFcUYsV0FBVyxDQUFDOztFQUVyRTtFQUNBLE1BQU1FLGdCQUFnQixHQUFHekYsNEJBQTRCLENBQUMyQyxLQUFLLENBQUMsQ0FBQytDLE1BQU0sQ0FDakVDLENBQUMsSUFBSUEsQ0FBQyxDQUFDbEIsTUFBTSxLQUFLLFNBQ3BCLENBQUM7RUFDRCxNQUFNbUIsbUJBQW1CLEdBQUdILGdCQUFnQixDQUFDSSxNQUFNLEdBQUcsQ0FBQztFQUN2RCxNQUFNQyxPQUFPLEdBQUdGLG1CQUFtQixJQUFJSCxnQkFBZ0IsQ0FBQ00sS0FBSyxDQUFDSixHQUFDLElBQUlBLEdBQUMsQ0FBQ1YsTUFBTSxDQUFDOztFQUU1RTtFQUNBO0VBQ0EsSUFBSWUsY0FBYyxHQUFHLENBQUM7RUFDdEIsSUFBSSxDQUFDbEQsZUFBZSxFQUFFO0lBQ3BCLEtBQUssTUFBTTBCLE1BQUksSUFBSXlCLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDdkQsS0FBSyxDQUFDLEVBQUU7TUFDdkMsSUFBSTdDLHVCQUF1QixDQUFDMEUsTUFBSSxDQUFDLElBQUlBLE1BQUksQ0FBQ0MsTUFBTSxLQUFLLFNBQVMsRUFBRTtRQUM5RCxJQUFJRCxNQUFJLENBQUMyQixRQUFRLEVBQUVDLFVBQVUsRUFBRTtVQUM3QkosY0FBYyxJQUFJeEIsTUFBSSxDQUFDMkIsUUFBUSxDQUFDQyxVQUFVO1FBQzVDO01BQ0Y7SUFDRjtFQUNGOztFQUVBO0VBQ0E7RUFDQTtFQUNBLE1BQU1DLGVBQWUsR0FDbkJsRixpQkFBaUIsQ0FBQ3lDLE9BQU8sS0FBSyxJQUFJLEdBQzlCekMsaUJBQWlCLENBQUN5QyxPQUFPLEdBQ3pCNUMsbUJBQW1CLENBQUM0QyxPQUFPLEdBQzNCMUMsZ0JBQWdCLENBQUMwQyxPQUFPLEdBQ3hCQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUc5QyxtQkFBbUIsQ0FBQzRDLE9BQU8sR0FBRzFDLGdCQUFnQixDQUFDMEMsT0FBTzs7RUFFekU7RUFDQTtFQUNBO0VBQ0EsTUFBTTBDLGdCQUFnQixHQUFHcEMsSUFBSSxDQUFDcUMsS0FBSyxDQUFDbEYsaUJBQWlCLENBQUN1QyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBRWxFLE1BQU00QyxZQUFZLEVBQUUsTUFBTXhILEtBQUssR0FBRyxRQUFRO0VBQzFDLE1BQU15SCxtQkFBbUIsR0FBRyxlQUFlO0VBQzNDLE1BQU1DLFlBQVksR0FBR3BGLGFBQWEsSUFBSWtGLFlBQVk7RUFDbEQsTUFBTUcsWUFBWSxHQUFHcEYsb0JBQW9CLElBQUlrRixtQkFBbUI7O0VBRWhFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFJRyxRQUFRLEVBQUUsTUFBTSxHQUFHLElBQUksR0FBRyxJQUFJO0VBQ2xDLElBQ0UsVUFBVSxLQUFLLEtBQUssSUFDcEJDLGFBQWEsRUFBRWpELE9BQU8sSUFDdEJpRCxhQUFhLENBQUNqRCxPQUFPLENBQUNpQyxNQUFNLEdBQUcsQ0FBQyxFQUNoQztJQUNBZSxRQUFRLEdBQUdFLGVBQWUsQ0FBQ0QsYUFBYSxDQUFDakQsT0FBTyxDQUFDO0VBQ25EOztFQUVBO0VBQ0E7RUFDQTtFQUNBLElBQUloQyxZQUFZLElBQUlnRSxtQkFBbUIsSUFBSSxDQUFDM0Msb0JBQW9CLEVBQUU7SUFDaEUsT0FDRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVk7QUFDdEUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDM0UsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRO0FBQ3hCLFlBQVksQ0FBQzdDLGlCQUFpQixDQUFDO0FBQy9CLFlBQVksQ0FBQyxDQUFDMEYsT0FBTyxJQUFJLHNCQUFzQjtBQUMvQyxVQUFVLEVBQUUsSUFBSTtBQUNoQixRQUFRLEVBQUUsR0FBRztBQUNiLFFBQVEsQ0FBQ2hELGVBQWUsSUFDZCxDQUFDLG1CQUFtQixDQUNsQixhQUFhLENBQUMsQ0FBQ0Msb0JBQW9CLENBQUMsQ0FDcEMsaUJBQWlCLENBQUMsQ0FBQ0MsaUJBQWlCLEtBQUssaUJBQWlCLENBQUMsQ0FDM0QsT0FBTyxDQUFDLENBQUM4QyxPQUFPLENBQUMsQ0FDakIsZ0JBQWdCLENBQUMsQ0FBQ1EsZ0JBQWdCLENBQUMsQ0FDbkMsY0FBYyxDQUFDLE1BQU0sR0FFeEI7QUFDVCxNQUFNLEVBQUUsR0FBRyxDQUFDO0VBRVY7O0VBRUE7RUFDQSxJQUFJckQsb0JBQW9CLEVBQUVnQyxNQUFNLEVBQUU7SUFDaEMsTUFBTThCLFFBQVEsR0FBR2pCLE9BQU8sR0FDcEIsR0FBRzFGLGlCQUFpQixlQUFldkIsY0FBYyxDQUFDZ0YsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxHQUFHYixvQkFBb0IsQ0FBQytELFNBQVMsQ0FBQyxFQUFFLEdBQ2hHLEdBQUc1RyxpQkFBaUIsT0FBTztJQUMvQixPQUNFLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWTtBQUN0RSxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUMzRSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDMkcsUUFBUSxDQUFDLEVBQUUsSUFBSTtBQUN6QyxRQUFRLEVBQUUsR0FBRztBQUNiLFFBQVEsQ0FBQ2pFLGVBQWUsSUFBSThDLG1CQUFtQixJQUNyQyxDQUFDLG1CQUFtQixDQUNsQixhQUFhLENBQUMsQ0FBQzdDLG9CQUFvQixDQUFDLENBQ3BDLGlCQUFpQixDQUFDLENBQUNDLGlCQUFpQixLQUFLLGlCQUFpQixDQUFDLENBQzNELE9BQU8sQ0FBQyxDQUFDOEMsT0FBTyxDQUFDLENBQ2pCLFVBQVUsQ0FBQyxDQUFDbEUsWUFBWSxHQUFHc0IsU0FBUyxHQUFHMkIsVUFBVSxDQUFDLENBQ2xELGNBQWMsQ0FBQyxDQUFDakQsWUFBWSxHQUFHLE1BQU0sR0FBR3NCLFNBQVMsQ0FBQyxDQUNsRCxnQkFBZ0IsQ0FBQyxDQUFDb0QsZ0JBQWdCLENBQUMsR0FFdEM7QUFDVCxNQUFNLEVBQUUsR0FBRyxDQUFDO0VBRVY7O0VBRUE7RUFDQTtFQUNBO0VBQ0EsSUFBSVcsaUJBQWlCLEdBQUcsS0FBSztFQUM3QixNQUFNQyxXQUFXLEdBQUcxRSxRQUFRLENBQUMyRSxrQkFBa0IsS0FBSyxLQUFLO0VBQ3pELE1BQU1DLFlBQVksR0FBR0YsV0FBVyxJQUFJYixlQUFlLEdBQUcsU0FBUztFQUMvRCxNQUFNZ0IsVUFBVSxHQUNkSCxXQUFXLElBQUliLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQzNGLGVBQWUsQ0FBQyxDQUFDLENBQUM0RyxXQUFXO0VBRTNFLE1BQU1DLFlBQVksR0FBR04saUJBQWlCLEdBQ2xDL0QsU0FBUyxHQUNUa0UsWUFBWSxJQUFJLENBQUMxQyxRQUFRLEdBQ3ZCLHFFQUFxRSxHQUNyRTJDLFVBQVUsSUFBSSxDQUFDM0MsUUFBUSxHQUNyQixrRkFBa0YsR0FDbEZ0RCxVQUFVOztFQUVsQjtFQUNBLElBQUlvRyxVQUFVLEVBQUUsTUFBTSxHQUFHLElBQUksR0FBRyxJQUFJO0VBQ3BDLElBQUlsSixPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUU7SUFDM0IsTUFBTW1KLE1BQU0sR0FBR25ILHlCQUF5QixDQUFDLENBQUM7SUFDMUMsSUFBSW1ILE1BQU0sS0FBSyxJQUFJLElBQUlBLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDakMsTUFBTUMsTUFBTSxHQUFHbkgsbUJBQW1CLENBQUMsQ0FBQztNQUNwQyxJQUFJbUgsTUFBTSxJQUFJRCxNQUFNLEVBQUU7UUFDcEJELFVBQVUsR0FBRyxXQUFXMUksWUFBWSxDQUFDNEksTUFBTSxDQUFDLFVBQVU1SSxZQUFZLENBQUMySSxNQUFNLENBQUMsUUFBUXBILE9BQU8sQ0FBQ3NILElBQUksR0FBRztNQUNuRyxDQUFDLE1BQU07UUFDTCxNQUFNQyxHQUFHLEdBQUcxRCxJQUFJLENBQUNxQyxLQUFLLENBQUVtQixNQUFNLEdBQUdELE1BQU0sR0FBSSxHQUFHLENBQUM7UUFDL0MsTUFBTUksU0FBUyxHQUFHSixNQUFNLEdBQUdDLE1BQU07UUFDakMsTUFBTUksSUFBSSxHQUNSekIsZUFBZSxHQUFHLElBQUksSUFBSXFCLE1BQU0sSUFBSSxJQUFJLEdBQ3BDQSxNQUFNLEdBQUdyQixlQUFlLEdBQ3hCLENBQUM7UUFDUCxNQUFNMEIsR0FBRyxHQUNQRCxJQUFJLEdBQUcsQ0FBQyxHQUNKLFlBQVlqSixjQUFjLENBQUNnSixTQUFTLEdBQUdDLElBQUksRUFBRTtVQUFFRSxtQkFBbUIsRUFBRTtRQUFLLENBQUMsQ0FBQyxFQUFFLEdBQzdFLEVBQUU7UUFDUlIsVUFBVSxHQUFHLFdBQVcxSSxZQUFZLENBQUM0SSxNQUFNLENBQUMsTUFBTTVJLFlBQVksQ0FBQzJJLE1BQU0sQ0FBQyxLQUFLRyxHQUFHLEtBQUtHLEdBQUcsRUFBRTtNQUMxRjtJQUNGO0VBQ0Y7RUFFQSxPQUNFLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWTtBQUNwRSxNQUFNLENBQUMsbUJBQW1CLENBQ2xCLElBQUksQ0FBQyxDQUFDaEgsSUFBSSxDQUFDLENBQ1gsYUFBYSxDQUFDLENBQUMwQixhQUFhLENBQUMsQ0FDN0IsY0FBYyxDQUFDLENBQUNkLGNBQWMsQ0FBQyxDQUMvQixpQkFBaUIsQ0FBQyxDQUFDTixpQkFBaUIsQ0FBQyxDQUNyQyxPQUFPLENBQUMsQ0FBQzhELE9BQU8sQ0FBQyxDQUNqQixZQUFZLENBQUMsQ0FBQ3VCLFlBQVksQ0FBQyxDQUMzQixZQUFZLENBQUMsQ0FBQ0MsWUFBWSxDQUFDLENBQzNCLGFBQWEsQ0FBQyxDQUFDckYsYUFBYSxDQUFDLENBQzdCLG1CQUFtQixDQUFDLENBQUNOLG1CQUFtQixDQUFDLENBQ3pDLGdCQUFnQixDQUFDLENBQUNFLGdCQUFnQixDQUFDLENBQ25DLGlCQUFpQixDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQ3JDLGFBQWEsQ0FBQyxDQUFDTSxhQUFhLENBQUMsQ0FDN0IsT0FBTyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUNqQixPQUFPLENBQUMsQ0FBQ3lCLE9BQU8sQ0FBQyxDQUNqQixtQkFBbUIsQ0FBQyxDQUFDeUMsbUJBQW1CLENBQUMsQ0FDekMsY0FBYyxDQUFDLENBQUNJLGNBQWMsQ0FBQyxDQUMvQixvQkFBb0IsQ0FBQyxDQUFDL0Msb0JBQW9CLENBQUMsQ0FDM0MsWUFBWSxDQUFDLENBQUNyQixZQUFZLENBQUMsQ0FDM0IsY0FBYyxDQUFDLENBQUN5QixjQUFjLENBQUMsQ0FDL0IsWUFBWSxDQUFDLENBQUNtQyxZQUFZLENBQUM7QUFFbkMsTUFBTSxDQUFDMUMsZUFBZSxJQUFJOEMsbUJBQW1CLEdBQ3JDLENBQUMsbUJBQW1CLENBQ2xCLGFBQWEsQ0FBQyxDQUFDN0Msb0JBQW9CLENBQUMsQ0FDcEMsaUJBQWlCLENBQUMsQ0FBQ0MsaUJBQWlCLEtBQUssaUJBQWlCLENBQUMsQ0FDM0QsT0FBTyxDQUFDLENBQUM4QyxPQUFPLENBQUMsQ0FDakIsVUFBVSxDQUFDLENBQUNsRSxZQUFZLEdBQUdzQixTQUFTLEdBQUcyQixVQUFVLENBQUMsQ0FDbEQsY0FBYyxDQUFDLENBQUNqRCxZQUFZLEdBQUcsTUFBTSxHQUFHc0IsU0FBUyxDQUFDLENBQ2xELGdCQUFnQixDQUFDLENBQUNvRCxnQkFBZ0IsQ0FBQyxHQUNuQyxHQUNBekQsaUJBQWlCLElBQUlPLE9BQU8sSUFBSUEsT0FBTyxDQUFDeUMsTUFBTSxHQUFHLENBQUMsR0FDcEQsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUTtBQUNoRCxVQUFVLENBQUMsZUFBZTtBQUMxQixZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDekMsT0FBTyxDQUFDO0FBQ3ZDLFVBQVUsRUFBRSxlQUFlO0FBQzNCLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FDSnNCLFFBQVEsSUFBSTZDLFlBQVksSUFBSUMsVUFBVTtJQUN4QztJQUNBO0lBQ0E7SUFDQSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRO0FBQ2hELFVBQVUsQ0FBQ0EsVUFBVSxJQUNULENBQUMsZUFBZTtBQUM1QixjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDQSxVQUFVLENBQUMsRUFBRSxJQUFJO0FBQy9DLFlBQVksRUFBRSxlQUFlLENBQ2xCO0FBQ1gsVUFBVSxDQUFDLENBQUM5QyxRQUFRLElBQUk2QyxZQUFZLEtBQ3hCLENBQUMsZUFBZTtBQUM1QixjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVE7QUFDNUIsZ0JBQWdCLENBQUM3QyxRQUFRLEdBQ0wsU0FBU0EsUUFBUSxDQUFDSyxPQUFPLEVBQUUsR0FDM0IsUUFBUXdDLFlBQVksRUFBRTtBQUMxQyxjQUFjLEVBQUUsSUFBSTtBQUNwQixZQUFZLEVBQUUsZUFBZSxDQUNsQjtBQUNYLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FDSixJQUFJO0FBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUVWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUtVLGlCQUFpQixHQUFHO0VBQ3ZCbEgsSUFBSSxFQUFFcEIsV0FBVztFQUNqQjZCLGVBQWUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJO0FBQ2pDLENBQUM7QUFFRCxTQUFBMEcsYUFBQUMsRUFBQTtFQUFBLE1BQUFDLENBQUEsR0FBQUMsRUFBQTtFQUFzQjtJQUFBdEgsSUFBQTtJQUFBUztFQUFBLElBQUEyRyxFQUdGO0VBQ2xCLE1BQUEzRixRQUFBLEdBQWlCM0MsV0FBVyxDQUFDLENBQUM7RUFDOUIsTUFBQTRDLGFBQUEsR0FBc0JELFFBQVEsQ0FBQUUsb0JBQThCLElBQXRDLEtBQXNDO0VBQzVELE9BQUFrQyxVQUFBLElBQXFCMUcsUUFBUSxDQUFDb0ssTUFBNEMsQ0FBQztFQUMzRSxNQUFBQyxJQUFBLEdBQWEvRyxlQUE2QixJQUE3Qm9ELFVBQTZCO0VBQzFDLE1BQUE0RCxVQUFBLEdBQW1CakosV0FBVyxDQUFDa0osTUFBNkIsQ0FBQztFQUFBLElBQUFDLEVBQUE7RUFBQSxJQUFBQyxFQUFBO0VBQUEsSUFBQVAsQ0FBQSxRQUFBckgsSUFBQTtJQUduRDJILEVBQUEsR0FBQUEsQ0FBQTtNQUNSLE1BQUF0RCxXQUFBLEdBQW9CLFVBQVUsR0FBR3JFLElBQUk7TUFDckM5QixlQUFlLENBQUFvRyxnQkFBaUIsQ0FBQ0QsV0FBVyxDQUFDO01BQUEsT0FDdEM7UUFDTG5HLGVBQWUsQ0FBQXFHLGNBQWUsQ0FBQ0YsV0FBVyxDQUFDO01BQUEsQ0FDNUM7SUFBQSxDQUNGO0lBQUV1RCxFQUFBLElBQUM1SCxJQUFJLENBQUM7SUFBQXFILENBQUEsTUFBQXJILElBQUE7SUFBQXFILENBQUEsTUFBQU0sRUFBQTtJQUFBTixDQUFBLE1BQUFPLEVBQUE7RUFBQTtJQUFBRCxFQUFBLEdBQUFOLENBQUE7SUFBQU8sRUFBQSxHQUFBUCxDQUFBO0VBQUE7RUFOVHJLLFNBQVMsQ0FBQzJLLEVBTVQsRUFBRUMsRUFBTSxDQUFDO0VBS1YsU0FBQUMsSUFBQSxJQUFpQm5JLGlCQUFpQixDQUFDZ0MsYUFBYSxHQUFiLElBQTBCLEdBQTFCLEdBQTBCLENBQUM7RUFLOUQsTUFBQW9HLFlBQUEsR0FBcUJ0SixXQUFXLENBQzlCdUosTUFHRixDQUFDO0VBSUQsTUFBQUMsZUFBQSxHQUNFUCxVQUFVLEtBQUssY0FBK0MsSUFBN0JBLFVBQVUsS0FBSyxjQUFjO0VBQ2hFLE1BQUFRLFFBQUEsR0FDRVIsVUFBVSxLQUFLLGNBQWdELEdBQS9ELGNBQStELEdBQS9ELGNBQStEO0VBSWpFLE1BQUFTLFFBQUEsR0FBaUIvRSxJQUFJLENBQUFnRixLQUFNLENBQUNOLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO0VBQUEsSUFBQU8sRUFBQTtFQUFBLElBQUFmLENBQUEsUUFBQWEsUUFBQSxJQUFBYixDQUFBLFFBQUEzRixhQUFBO0lBQzlCMEcsRUFBQSxHQUFBMUcsYUFBYSxHQUFiLFVBQTBELEdBQWxDLEdBQUcsQ0FBQTJHLE1BQU8sQ0FBQ0gsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFBSSxNQUFPLENBQUMsQ0FBQyxDQUFDO0lBQUFqQixDQUFBLE1BQUFhLFFBQUE7SUFBQWIsQ0FBQSxNQUFBM0YsYUFBQTtJQUFBMkYsQ0FBQSxNQUFBZSxFQUFBO0VBQUE7SUFBQUEsRUFBQSxHQUFBZixDQUFBO0VBQUE7RUFBdkUsTUFBQWtCLElBQUEsR0FBYUgsRUFBMEQ7RUFBQSxJQUFBSSxFQUFBO0VBQUEsSUFBQW5CLENBQUEsUUFBQUcsSUFBQTtJQUl2Q2dCLEVBQUEsR0FBQTlKLFdBQVcsQ0FBQzhJLElBQUksQ0FBQztJQUFBSCxDQUFBLE1BQUFHLElBQUE7SUFBQUgsQ0FBQSxNQUFBbUIsRUFBQTtFQUFBO0lBQUFBLEVBQUEsR0FBQW5CLENBQUE7RUFBQTtFQUFqRCxNQUFBb0IsU0FBQSxHQUFnQ0QsRUFBaUI7RUFBUyxJQUFBRSxFQUFBO0VBQUEsSUFBQXJCLENBQUEsUUFBQTNGLGFBQUEsSUFBQTJGLENBQUEsUUFBQVcsZUFBQSxJQUFBWCxDQUFBLFNBQUFRLElBQUEsSUFBQVIsQ0FBQSxTQUFBRyxJQUFBLElBQUFILENBQUEsU0FBQW9CLFNBQUE7SUFDMUQsTUFBQUUsWUFBQSxHQUNFakgsYUFBZ0MsSUFBaENzRyxlQUUwRSxHQUYxRSxJQUUwRSxHQUF0RTVLLG1CQUFtQixDQUFDK0YsSUFBSSxDQUFBZ0YsS0FBTSxDQUFDTixJQUFJLEdBQUd2SyxtQkFBbUIsQ0FBQyxFQUFFbUwsU0FBUyxDQUFDO0lBQ3pDQyxFQUFBLEdBQUFyTCxzQkFBc0IsQ0FBQ21LLElBQUksRUFBRW1CLFlBQVksQ0FBQztJQUFBdEIsQ0FBQSxNQUFBM0YsYUFBQTtJQUFBMkYsQ0FBQSxNQUFBVyxlQUFBO0lBQUFYLENBQUEsT0FBQVEsSUFBQTtJQUFBUixDQUFBLE9BQUFHLElBQUE7SUFBQUgsQ0FBQSxPQUFBb0IsU0FBQTtJQUFBcEIsQ0FBQSxPQUFBcUIsRUFBQTtFQUFBO0lBQUFBLEVBQUEsR0FBQXJCLENBQUE7RUFBQTtFQUE3RTtJQUFBdUIsTUFBQTtJQUFBQyxPQUFBO0lBQUFDO0VBQUEsSUFBbUNKLEVBQTBDO0VBRTdFO0lBQUF0RztFQUFBLElBQW9CM0QsZUFBZSxDQUFDLENBQUM7RUFDckMsTUFBQXNLLFNBQUEsR0FBa0JqQixZQUFZLEdBQUcsQ0FBd0MsR0FBdkQsR0FBc0JBLFlBQVksZ0JBQXFCLEdBQXZELEVBQXVEO0VBQUEsSUFBQWtCLEVBQUE7RUFBQSxJQUFBM0IsQ0FBQSxTQUFBWSxRQUFBLElBQUFaLENBQUEsU0FBQVcsZUFBQSxJQUFBWCxDQUFBLFNBQUFvQixTQUFBO0lBSXRETyxFQUFBLEdBQUFoQixlQUFlLEdBQUd0SixXQUFXLENBQUN1SixRQUFvQixDQUFDLEdBQW5EUSxTQUFtRDtJQUFBcEIsQ0FBQSxPQUFBWSxRQUFBO0lBQUFaLENBQUEsT0FBQVcsZUFBQTtJQUFBWCxDQUFBLE9BQUFvQixTQUFBO0lBQUFwQixDQUFBLE9BQUEyQixFQUFBO0VBQUE7SUFBQUEsRUFBQSxHQUFBM0IsQ0FBQTtFQUFBO0VBQXRFLE1BQUE0QixTQUFBLEdBQW1CRCxFQUFtRCxHQUFJLENBQUM7RUFDM0UsTUFBQUUsR0FBQSxHQUFZL0YsSUFBSSxDQUFBQyxHQUFJLENBQUMsQ0FBQyxFQUFFaEIsT0FBTyxHQUFHLENBQUMsR0FBRzZHLFNBQVMsR0FBR3ZLLFdBQVcsQ0FBQ3FLLFNBQVMsQ0FBQyxDQUFDO0VBQUEsSUFBQUksRUFBQTtFQUFBLElBQUE5QixDQUFBLFNBQUF5QixLQUFBLElBQUF6QixDQUFBLFNBQUF1QixNQUFBLElBQUF2QixDQUFBLFNBQUFZLFFBQUEsSUFBQVosQ0FBQSxTQUFBa0IsSUFBQSxJQUFBbEIsQ0FBQSxTQUFBd0IsT0FBQSxJQUFBeEIsQ0FBQSxTQUFBVyxlQUFBO0lBSXBFbUIsRUFBQSxHQUFBbkIsZUFBZSxHQUNkLENBQUMsSUFBSSxDQUFPLEtBQU8sQ0FBUCxPQUFPLENBQUUsQ0FBQUMsUUFBUSxHQUFHTSxJQUFHLENBQUUsRUFBcEMsSUFBSSxDQVFOLEdBVEEsRUFJSSxDQUFBSyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFSLEtBQU8sQ0FBQyxDQUFFQSxPQUFLLENBQUUsRUFBdEIsSUFBSSxDQUFnQyxHQUE5QyxJQUE2QyxDQUM3QyxDQUFBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUVBLFFBQU0sQ0FBRSxFQUFkLElBQUksQ0FBd0IsR0FBdkMsSUFBc0MsQ0FDdEMsQ0FBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBUixLQUFPLENBQUMsQ0FBRUEsTUFBSSxDQUFFLEVBQXJCLElBQUksQ0FBK0IsR0FBNUMsSUFBMkMsQ0FDNUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFSLEtBQU8sQ0FBQyxDQUFFUCxLQUFHLENBQUUsRUFBcEIsSUFBSSxDQUF1QixHQUUvQjtJQUFBbEIsQ0FBQSxPQUFBeUIsS0FBQTtJQUFBekIsQ0FBQSxPQUFBdUIsTUFBQTtJQUFBdkIsQ0FBQSxPQUFBWSxRQUFBO0lBQUFaLENBQUEsT0FBQWtCLElBQUE7SUFBQWxCLENBQUEsT0FBQXdCLE9BQUE7SUFBQXhCLENBQUEsT0FBQVcsZUFBQTtJQUFBWCxDQUFBLE9BQUE4QixFQUFBO0VBQUE7SUFBQUEsRUFBQSxHQUFBOUIsQ0FBQTtFQUFBO0VBQUEsSUFBQStCLEVBQUE7RUFBQSxJQUFBL0IsQ0FBQSxTQUFBNkIsR0FBQSxJQUFBN0IsQ0FBQSxTQUFBMEIsU0FBQTtJQUNBSyxFQUFBLEdBQUFMLFNBQVMsR0FBVCxFQUVHLENBQUMsSUFBSSxDQUFFLElBQUcsQ0FBQVYsTUFBTyxDQUFDYSxHQUFHLEVBQUUsRUFBdEIsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUFPLEtBQVEsQ0FBUixRQUFRLENBQUVILFVBQVEsQ0FBRSxFQUEvQixJQUFJLENBQWtDLEdBRW5DLEdBTFAsSUFLTztJQUFBMUIsQ0FBQSxPQUFBNkIsR0FBQTtJQUFBN0IsQ0FBQSxPQUFBMEIsU0FBQTtJQUFBMUIsQ0FBQSxPQUFBK0IsRUFBQTtFQUFBO0lBQUFBLEVBQUEsR0FBQS9CLENBQUE7RUFBQTtFQUFBLElBQUFnQyxFQUFBO0VBQUEsSUFBQWhDLENBQUEsU0FBQThCLEVBQUEsSUFBQTlCLENBQUEsU0FBQStCLEVBQUE7SUFoQlZDLEVBQUEsSUFBQyxHQUFHLENBQWUsYUFBSyxDQUFMLEtBQUssQ0FBTyxLQUFNLENBQU4sTUFBTSxDQUFZLFNBQUMsQ0FBRCxHQUFDLENBQWUsV0FBQyxDQUFELEdBQUMsQ0FDL0QsQ0FBQUYsRUFTRCxDQUNDLENBQUFDLEVBS00sQ0FDVCxFQWpCQyxHQUFHLENBaUJFO0lBQUEvQixDQUFBLE9BQUE4QixFQUFBO0lBQUE5QixDQUFBLE9BQUErQixFQUFBO0lBQUEvQixDQUFBLE9BQUFnQyxFQUFBO0VBQUE7SUFBQUEsRUFBQSxHQUFBaEMsQ0FBQTtFQUFBO0VBQUEsT0FqQk5nQyxFQWlCTTtBQUFBOztBQUlWO0FBQ0E7QUFDQTtBQUNBO0FBdkZBLFNBQUF0QixPQUFBdUIsR0FBQTtFQUFBLE9BNkJNMUwsS0FBSyxDQUFDc0gsTUFBTSxDQUFBQyxNQUFPLENBQUNqRSxHQUFDLENBQUFVLEtBQU0sQ0FBQyxFQUFFNUMsZ0JBQWdCLENBQUMsR0FDL0NrQyxHQUFDLENBQUFxSSx5QkFBMEI7QUFBQTtBQTlCakMsU0FBQTdCLE9BQUF4RyxDQUFBO0VBQUEsT0FRc0NBLENBQUMsQ0FBQXNJLHNCQUF1QjtBQUFBO0FBUjlELFNBQUFqQyxPQUFBO0VBQUEsT0FNc0MxSixNQUFNLENBQUNNLGVBQWUsQ0FBQyxDQUFjLENBQUMsSUFBdEMsU0FBc0M7QUFBQTtBQWtGNUUsT0FBTyxTQUFBc0wsZ0JBQUE7RUFBQSxNQUFBcEMsQ0FBQSxHQUFBQyxFQUFBO0VBQ0wsTUFBQUcsVUFBQSxHQUFtQmpKLFdBQVcsQ0FBQ2tMLE1BQTZCLENBQUM7RUFDN0QsTUFBQTVCLFlBQUEsR0FBcUJ0SixXQUFXLENBQzlCbUwsTUFHRixDQUFDO0VBQ0Q7SUFBQXZIO0VBQUEsSUFBb0IzRCxlQUFlLENBQUMsQ0FBQztFQUVyQyxNQUFBdUosZUFBQSxHQUNFUCxVQUFVLEtBQUssY0FBK0MsSUFBN0JBLFVBQVUsS0FBSyxjQUFjO0VBQ2hFLE1BQUFRLFFBQUEsR0FDRVIsVUFBVSxLQUFLLGNBQWlELEdBQWhFLG9CQUFnRSxHQUFoRSxjQUFnRTtFQUNsRSxNQUFBbUMsUUFBQSxHQUFpQjVCLGVBQWUsR0FBZkMsUUFBK0IsR0FBL0IsRUFBK0I7RUFDaEQsTUFBQWMsU0FBQSxHQUFrQmpCLFlBQVksR0FBRyxDQUF3QyxHQUF2RCxHQUFzQkEsWUFBWSxnQkFBcUIsR0FBdkQsRUFBdUQ7RUFFekUsSUFBSSxDQUFDOEIsUUFBc0IsSUFBdkIsQ0FBY2IsU0FBUztJQUFBLElBQUEzQixFQUFBO0lBQUEsSUFBQUMsQ0FBQSxRQUFBd0MsTUFBQSxDQUFBQyxHQUFBO01BQVMxQyxFQUFBLElBQUMsR0FBRyxDQUFTLE1BQUMsQ0FBRCxHQUFDLEdBQUk7TUFBQUMsQ0FBQSxNQUFBRCxFQUFBO0lBQUE7TUFBQUEsRUFBQSxHQUFBQyxDQUFBO0lBQUE7SUFBQSxPQUFsQkQsRUFBa0I7RUFBQTtFQUV0RCxNQUFBOEIsR0FBQSxHQUFZL0YsSUFBSSxDQUFBQyxHQUFJLENBQ2xCLENBQUMsRUFDRGhCLE9BQU8sR0FBRyxDQUFDLEdBQUcxRCxXQUFXLENBQUNrTCxRQUFRLENBQUMsR0FBR2xMLFdBQVcsQ0FBQ3FLLFNBQVMsQ0FDN0QsQ0FBQztFQUFBLElBQUEzQixFQUFBO0VBQUEsSUFBQUMsQ0FBQSxRQUFBdUMsUUFBQTtJQUlNeEMsRUFBQSxHQUFBd0MsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFPLEtBQU8sQ0FBUCxPQUFPLENBQUVBLFNBQU8sQ0FBRSxFQUE3QixJQUFJLENBQXVDLEdBQXZELElBQXVEO0lBQUF2QyxDQUFBLE1BQUF1QyxRQUFBO0lBQUF2QyxDQUFBLE1BQUFELEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFDLENBQUE7RUFBQTtFQUFBLElBQUFNLEVBQUE7RUFBQSxJQUFBTixDQUFBLFFBQUE2QixHQUFBLElBQUE3QixDQUFBLFFBQUEwQixTQUFBO0lBQ3ZEcEIsRUFBQSxHQUFBb0IsU0FBUyxHQUFULEVBRUcsQ0FBQyxJQUFJLENBQUUsSUFBRyxDQUFBVixNQUFPLENBQUNhLEdBQUcsRUFBRSxFQUF0QixJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQU8sS0FBUSxDQUFSLFFBQVEsQ0FBRUgsVUFBUSxDQUFFLEVBQS9CLElBQUksQ0FBa0MsR0FFbkMsR0FMUCxJQUtPO0lBQUExQixDQUFBLE1BQUE2QixHQUFBO0lBQUE3QixDQUFBLE1BQUEwQixTQUFBO0lBQUExQixDQUFBLE1BQUFNLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFOLENBQUE7RUFBQTtFQUFBLElBQUFPLEVBQUE7RUFBQSxJQUFBUCxDQUFBLFFBQUFELEVBQUEsSUFBQUMsQ0FBQSxRQUFBTSxFQUFBO0lBUlpDLEVBQUEsSUFBQyxHQUFHLENBQVksU0FBQyxDQUFELEdBQUMsQ0FBZSxXQUFDLENBQUQsR0FBQyxDQUMvQixDQUFDLElBQUksQ0FDRixDQUFBUixFQUFzRCxDQUN0RCxDQUFBTyxFQUtNLENBQ1QsRUFSQyxJQUFJLENBU1AsRUFWQyxHQUFHLENBVUU7SUFBQU4sQ0FBQSxNQUFBRCxFQUFBO0lBQUFDLENBQUEsTUFBQU0sRUFBQTtJQUFBTixDQUFBLE1BQUFPLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFQLENBQUE7RUFBQTtFQUFBLE9BVk5PLEVBVU07QUFBQTtBQWpDSCxTQUFBK0IsT0FBQUwsR0FBQTtFQUFBLE9BSUQxTCxLQUFLLENBQUNzSCxNQUFNLENBQUFDLE1BQU8sQ0FBQ2pFLEdBQUMsQ0FBQVUsS0FBTSxDQUFDLEVBQUU1QyxnQkFBZ0IsQ0FBQyxHQUMvQ2tDLEdBQUMsQ0FBQXFJLHlCQUEwQjtBQUFBO0FBTDFCLFNBQUFHLE9BQUF4SSxDQUFBO0VBQUEsT0FDK0JBLENBQUMsQ0FBQXNJLHNCQUF1QjtBQUFBO0FBb0M5RCxPQUFPLFNBQUFPLFFBQUE7RUFBQSxNQUFBMUMsQ0FBQSxHQUFBQyxFQUFBO0VBQ0wsTUFBQTdGLFFBQUEsR0FBaUIzQyxXQUFXLENBQUMsQ0FBQztFQUM5QixNQUFBNEMsYUFBQSxHQUFzQkQsUUFBUSxDQUFBRSxvQkFBOEIsSUFBdEMsS0FBc0M7RUFDNUQsT0FBQXFJLEdBQUEsRUFBQW5DLElBQUEsSUFBb0JuSSxpQkFBaUIsQ0FBQ2dDLGFBQWEsR0FBYixJQUEwQixHQUExQixHQUEwQixDQUFDO0VBR2pFLElBQUlBLGFBQWE7SUFBQSxJQUFBMEYsRUFBQTtJQUFBLElBQUFDLENBQUEsUUFBQXdDLE1BQUEsQ0FBQUMsR0FBQTtNQUdYMUMsRUFBQSxJQUFDLElBQUksQ0FBTyxLQUFNLENBQU4sTUFBTSxDQUFDLENBQUMsRUFBbkIsSUFBSSxDQUFzQjtNQUFBQyxDQUFBLE1BQUFELEVBQUE7SUFBQTtNQUFBQSxFQUFBLEdBQUFDLENBQUE7SUFBQTtJQUFBLElBQUFNLEVBQUE7SUFBQSxJQUFBTixDQUFBLFFBQUEyQyxHQUFBO01BRDdCckMsRUFBQSxJQUFDLEdBQUcsQ0FBTXFDLEdBQUcsQ0FBSEEsSUFBRSxDQUFDLENBQVcsUUFBTSxDQUFOLE1BQU0sQ0FBUyxNQUFDLENBQUQsR0FBQyxDQUFTLEtBQUMsQ0FBRCxHQUFDLENBQ2hELENBQUE1QyxFQUEwQixDQUM1QixFQUZDLEdBQUcsQ0FFRTtNQUFBQyxDQUFBLE1BQUEyQyxHQUFBO01BQUEzQyxDQUFBLE1BQUFNLEVBQUE7SUFBQTtNQUFBQSxFQUFBLEdBQUFOLENBQUE7SUFBQTtJQUFBLE9BRk5NLEVBRU07RUFBQTtFQUtWLE1BQUFzQyxLQUFBLEdBQWM5RyxJQUFJLENBQUFnRixLQUFNLENBQUNOLElBQUksR0FBRyxHQUFHLENBQUMsR0FBR2hJLGNBQWMsQ0FBQWlGLE1BQU87RUFJcEMsTUFBQXNDLEVBQUEsR0FBQXZILGNBQWMsQ0FBQ29LLEtBQUssQ0FBQztFQUFBLElBQUF0QyxFQUFBO0VBQUEsSUFBQU4sQ0FBQSxRQUFBRCxFQUFBO0lBQXpDTyxFQUFBLElBQUMsSUFBSSxDQUFPLEtBQU0sQ0FBTixNQUFNLENBQUUsQ0FBQVAsRUFBb0IsQ0FBRSxFQUF6QyxJQUFJLENBQTRDO0lBQUFDLENBQUEsTUFBQUQsRUFBQTtJQUFBQyxDQUFBLE1BQUFNLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFOLENBQUE7RUFBQTtFQUFBLElBQUFPLEVBQUE7RUFBQSxJQUFBUCxDQUFBLFFBQUEyQyxHQUFBLElBQUEzQyxDQUFBLFFBQUFNLEVBQUE7SUFEbkRDLEVBQUEsSUFBQyxHQUFHLENBQU1vQyxHQUFHLENBQUhBLElBQUUsQ0FBQyxDQUFXLFFBQU0sQ0FBTixNQUFNLENBQVMsTUFBQyxDQUFELEdBQUMsQ0FBUyxLQUFDLENBQUQsR0FBQyxDQUNoRCxDQUFBckMsRUFBZ0QsQ0FDbEQsRUFGQyxHQUFHLENBRUU7SUFBQU4sQ0FBQSxNQUFBMkMsR0FBQTtJQUFBM0MsQ0FBQSxNQUFBTSxFQUFBO0lBQUFOLENBQUEsTUFBQU8sRUFBQTtFQUFBO0lBQUFBLEVBQUEsR0FBQVAsQ0FBQTtFQUFBO0VBQUEsT0FGTk8sRUFFTTtBQUFBO0FBS1YsU0FBU2hFLG1CQUFtQkEsQ0FBQ2hDLEtBQUssRUFBRXJELElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFQSxJQUFJLEdBQUcsU0FBUyxDQUFDO0VBQ3hFLElBQUksQ0FBQ3FELEtBQUssRUFBRTtJQUNWLE9BQU9PLFNBQVM7RUFDbEI7RUFDQSxNQUFNK0gsWUFBWSxHQUFHdEksS0FBSyxDQUFDK0MsTUFBTSxDQUFDQyxDQUFDLElBQUlBLENBQUMsQ0FBQ2xCLE1BQU0sS0FBSyxTQUFTLENBQUM7RUFDOUQsSUFBSXdHLFlBQVksQ0FBQ3BGLE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFDN0IsT0FBTzNDLFNBQVM7RUFDbEI7RUFDQSxNQUFNZ0ksYUFBYSxHQUFHLElBQUlDLEdBQUcsQ0FDM0J4SSxLQUFLLENBQUMrQyxNQUFNLENBQUNDLENBQUMsSUFBSUEsQ0FBQyxDQUFDbEIsTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDMkcsR0FBRyxDQUFDekYsQ0FBQyxJQUFJQSxDQUFDLENBQUMwRixFQUFFLENBQzNELENBQUM7RUFDRCxPQUNFSixZQUFZLENBQUMxRyxJQUFJLENBQUNvQixDQUFDLElBQUksQ0FBQ0EsQ0FBQyxDQUFDMkYsU0FBUyxDQUFDQyxJQUFJLENBQUNGLEVBQUUsSUFBSUgsYUFBYSxDQUFDTSxHQUFHLENBQUNILEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFDdEVKLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFFbkIiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ContentBlock } from '@anthropic-ai/sdk/resources/index.mjs'
|
|
2
2
|
import { getUserContext } from 'src/context.js'
|
|
3
|
-
import { queryModelWithoutStreaming } from 'src/services/api/
|
|
3
|
+
import { queryModelWithoutStreaming } from 'src/services/api/ummaya.js'
|
|
4
4
|
import { getEmptyToolPermissionContext } from 'src/Tool.js'
|
|
5
5
|
import { AGENT_TOOL_NAME } from 'src/tools/AgentTool/constants.js'
|
|
6
6
|
import { prependUserContext } from 'src/utils/api.js'
|
|
@@ -1,32 +1,10 @@
|
|
|
1
1
|
// [P0 reconstructed · rebuild-stubs.ts · symbol-complete stub]
|
|
2
2
|
// Aggregated from every consumer import across src/.
|
|
3
|
-
|
|
3
|
+
import { createStub } from '../../../stubs/any-stub'
|
|
4
4
|
|
|
5
|
-
const
|
|
6
|
-
const __stub: any = new Proxy(function () {} as any, {
|
|
7
|
-
get(_t, p) {
|
|
8
|
-
if (p === Symbol.toPrimitive) return () => ""
|
|
9
|
-
if (p === Symbol.iterator) return function* () {}
|
|
10
|
-
if (p === Symbol.asyncIterator) return async function* () {}
|
|
11
|
-
if (p === Symbol.toStringTag) return "Stub"
|
|
12
|
-
if (p === Symbol.for("nodejs.util.inspect.custom")) return () => "<Stub>"
|
|
13
|
-
if (p === "inspect") return () => "<Stub>"
|
|
14
|
-
if (p === "then") return undefined
|
|
15
|
-
if (p === "toString") return () => ""
|
|
16
|
-
if (p === "valueOf") return () => undefined
|
|
17
|
-
if (p === "toJSON") return () => null
|
|
18
|
-
if (p === "length") return 0
|
|
19
|
-
if (p === "name") return "Stub"
|
|
20
|
-
if (p === "message") return ""
|
|
21
|
-
if (p === "stack") return ""
|
|
22
|
-
if (p === "constructor") return Object
|
|
23
|
-
return __stub
|
|
24
|
-
},
|
|
25
|
-
apply() { return __stub },
|
|
26
|
-
construct() { return __stub },
|
|
27
|
-
});
|
|
5
|
+
const __stub = createStub()
|
|
28
6
|
|
|
29
|
-
export type AgentWizardData =
|
|
30
|
-
export const AgentWizardData
|
|
7
|
+
export type AgentWizardData = unknown;
|
|
8
|
+
export const AgentWizardData = __stub;
|
|
31
9
|
|
|
32
10
|
export default __stub;
|
|
@@ -40,7 +40,7 @@ const MASK_CHAR = '•';
|
|
|
40
40
|
* - Input is never echoed in plaintext; each character is replaced by MASK_CHAR
|
|
41
41
|
* - Backspace removes the last buffer character (not the last mask character) —
|
|
42
42
|
* the buffer and mask are always the same length
|
|
43
|
-
* - Paste detection:
|
|
43
|
+
* - Paste detection: input longer than 1 char is accepted but still masked
|
|
44
44
|
* - No persistence until explicit Enter confirmation
|
|
45
45
|
* - Escape discards the buffer immediately
|
|
46
46
|
*/
|
|
@@ -42,7 +42,7 @@ type LoadingStateProps = {
|
|
|
42
42
|
* <LoadingState
|
|
43
43
|
* message="Loading sessions"
|
|
44
44
|
* bold
|
|
45
|
-
* subtitle="Fetching your
|
|
45
|
+
* subtitle="Fetching your UMMAYA sessions..."
|
|
46
46
|
* />
|
|
47
47
|
*/
|
|
48
48
|
export function LoadingState(t0) {
|
|
@@ -91,4 +91,4 @@ export function LoadingState(t0) {
|
|
|
91
91
|
}
|
|
92
92
|
return t6;
|
|
93
93
|
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkJveCIsIlRleHQiLCJTcGlubmVyIiwiTG9hZGluZ1N0YXRlUHJvcHMiLCJtZXNzYWdlIiwiYm9sZCIsImRpbUNvbG9yIiwic3VidGl0bGUiLCJMb2FkaW5nU3RhdGUiLCJ0MCIsIiQiLCJfYyIsInQxIiwidDIiLCJ1bmRlZmluZWQiLCJ0MyIsIlN5bWJvbCIsImZvciIsInQ0IiwidDUiLCJ0NiJdLCJzb3VyY2VzIjpbIkxvYWRpbmdTdGF0ZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4uL1NwaW5uZXIuanMnXG5cbnR5cGUgTG9hZGluZ1N0YXRlUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgbG9hZGluZyBtZXNzYWdlIHRvIGRpc3BsYXkgbmV4dCB0byB0aGUgc3Bpbm5lci5cbiAgICovXG4gIG1lc3NhZ2U6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBtZXNzYWdlIGluIGJvbGQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBib2xkPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBtZXNzYWdlIGluIGRpbW1lZCBjb2xvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpbUNvbG9yPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBzdWJ0aXRsZSBkaXNwbGF5ZWQgYmVsb3cgdGhlIG1haW4gbWVzc2FnZS5cbiAgICovXG4gIHN1YnRpdGxlPzogc3RyaW5nXG59XG5cbi8qKlxuICogQSBzcGlubmVyIHdpdGggbG9hZGluZyBtZXNzYWdlIGZvciBhc3luYyBvcGVyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyBsb2FkaW5nXG4gKiA8TG9hZGluZ1N0YXRlIG1lc3NhZ2U9XCJMb2FkaW5nLi4uXCIgLz5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQm9sZCBsb2FkaW5nIG1lc3NhZ2VcbiAqIDxMb2FkaW5nU3RhdGUgbWVzc2FnZT1cIkxvYWRpbmcgc2Vzc2lvbnNcIiBib2xkIC8+XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdpdGggc3VidGl0bGVcbiAqIDxMb2FkaW5nU3RhdGVcbiAqICAgbWVzc2FnZT1cIkxvYWRpbmcgc2Vzc2lvbnNcIlxuICogICBib2xkXG4gKiAgIHN1YnRpdGxlPVwiRmV0Y2hpbmcgeW91ciBDbGF1ZGUgQ29kZSBzZXNzaW9ucy4uLlwiXG4gKiAvPlxuICovXG5leHBvcnQgZnVuY3Rpb24gTG9hZGluZ1N0YXRlKHtcbiAgbWVzc2FnZSxcbiAgYm9sZCA9IGZhbHNlLFxuICBkaW1Db2xvciA9IGZhbHNlLFxuICBzdWJ0aXRsZSxcbn06IExvYWRpbmdTdGF0ZVByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiPlxuICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICA8VGV4dCBib2xkPXtib2xkfSBkaW1Db2xvcj17ZGltQ29sb3J9PlxuICAgICAgICAgIHsnICd9XG4gICAgICAgICAge21lc3NhZ2V9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgICAge3N1YnRpdGxlICYmIDxUZXh0IGRpbUNvbG9yPntzdWJ0aXRsZX08L1RleHQ+fVxuICAgIDwvQm94PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxLQUFLLE1BQU0sT0FBTztBQUN6QixTQUFTQyxHQUFHLEVBQUVDLElBQUksUUFBUSxjQUFjO0FBQ3hDLFNBQVNDLE9BQU8sUUFBUSxlQUFlO0FBRXZDLEtBQUtDLGlCQUFpQixHQUFHO0VBQ3ZCO0FBQ0Y7QUFDQTtFQUNFQyxPQUFPLEVBQUUsTUFBTTs7RUFFZjtBQUNGO0FB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
|
|
94
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkJveCIsIlRleHQiLCJTcGlubmVyIiwiTG9hZGluZ1N0YXRlUHJvcHMiLCJtZXNzYWdlIiwiYm9sZCIsImRpbUNvbG9yIiwic3VidGl0bGUiLCJMb2FkaW5nU3RhdGUiLCJ0MCIsIiQiLCJfYyIsInQxIiwidDIiLCJ1bmRlZmluZWQiLCJ0MyIsIlN5bWJvbCIsImZvciIsInQ0IiwidDUiLCJ0NiJdLCJzb3VyY2VzIjpbIkxvYWRpbmdTdGF0ZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4uL1NwaW5uZXIuanMnXG5cbnR5cGUgTG9hZGluZ1N0YXRlUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgbG9hZGluZyBtZXNzYWdlIHRvIGRpc3BsYXkgbmV4dCB0byB0aGUgc3Bpbm5lci5cbiAgICovXG4gIG1lc3NhZ2U6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBtZXNzYWdlIGluIGJvbGQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBib2xkPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBtZXNzYWdlIGluIGRpbW1lZCBjb2xvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpbUNvbG9yPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBzdWJ0aXRsZSBkaXNwbGF5ZWQgYmVsb3cgdGhlIG1haW4gbWVzc2FnZS5cbiAgICovXG4gIHN1YnRpdGxlPzogc3RyaW5nXG59XG5cbi8qKlxuICogQSBzcGlubmVyIHdpdGggbG9hZGluZyBtZXNzYWdlIGZvciBhc3luYyBvcGVyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyBsb2FkaW5nXG4gKiA8TG9hZGluZ1N0YXRlIG1lc3NhZ2U9XCJMb2FkaW5nLi4uXCIgLz5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQm9sZCBsb2FkaW5nIG1lc3NhZ2VcbiAqIDxMb2FkaW5nU3RhdGUgbWVzc2FnZT1cIkxvYWRpbmcgc2Vzc2lvbnNcIiBib2xkIC8+XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdpdGggc3VidGl0bGVcbiAqIDxMb2FkaW5nU3RhdGVcbiAqICAgbWVzc2FnZT1cIkxvYWRpbmcgc2Vzc2lvbnNcIlxuICogICBib2xkXG4gKiAgIHN1YnRpdGxlPVwiRmV0Y2hpbmcgeW91ciBDbGF1ZGUgQ29kZSBzZXNzaW9ucy4uLlwiXG4gKiAvPlxuICovXG5leHBvcnQgZnVuY3Rpb24gTG9hZGluZ1N0YXRlKHtcbiAgbWVzc2FnZSxcbiAgYm9sZCA9IGZhbHNlLFxuICBkaW1Db2xvciA9IGZhbHNlLFxuICBzdWJ0aXRsZSxcbn06IExvYWRpbmdTdGF0ZVByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiPlxuICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICA8VGV4dCBib2xkPXtib2xkfSBkaW1Db2xvcj17ZGltQ29sb3J9PlxuICAgICAgICAgIHsnICd9XG4gICAgICAgICAge21lc3NhZ2V9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgICAge3N1YnRpdGxlICYmIDxUZXh0IGRpbUNvbG9yPntzdWJ0aXRsZX08L1RleHQ+fVxuICAgIDwvQm94PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxLQUFLLE1BQU0sT0FBTztBQUN6QixTQUFTQyxHQUFHLEVBQUVDLElBQUksUUFBUSxjQUFjO0FBQ3hDLFNBQVNDLE9BQU8sUUFBUSxlQUFlO0FBRXZDLEtBQUtDLGlCQUFpQixHQUFHO0VBQ3ZCO0FBQ0Y7QUFDQTtFQUNFQyxPQUFPLEVBQUUsTUFBTTs7RUFFZjtBQUNGO0FB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
|
|
@@ -1,44 +1,22 @@
|
|
|
1
1
|
// [P0 reconstructed · rebuild-stubs.ts · symbol-complete stub]
|
|
2
2
|
// Aggregated from every consumer import across src/.
|
|
3
|
-
|
|
3
|
+
import { createStub } from '../../stubs/any-stub'
|
|
4
4
|
|
|
5
|
-
const
|
|
6
|
-
const __stub: any = new Proxy(function () {} as any, {
|
|
7
|
-
get(_t, p) {
|
|
8
|
-
if (p === Symbol.toPrimitive) return () => ""
|
|
9
|
-
if (p === Symbol.iterator) return function* () {}
|
|
10
|
-
if (p === Symbol.asyncIterator) return async function* () {}
|
|
11
|
-
if (p === Symbol.toStringTag) return "Stub"
|
|
12
|
-
if (p === Symbol.for("nodejs.util.inspect.custom")) return () => "<Stub>"
|
|
13
|
-
if (p === "inspect") return () => "<Stub>"
|
|
14
|
-
if (p === "then") return undefined
|
|
15
|
-
if (p === "toString") return () => ""
|
|
16
|
-
if (p === "valueOf") return () => undefined
|
|
17
|
-
if (p === "toJSON") return () => null
|
|
18
|
-
if (p === "length") return 0
|
|
19
|
-
if (p === "name") return "Stub"
|
|
20
|
-
if (p === "message") return ""
|
|
21
|
-
if (p === "stack") return ""
|
|
22
|
-
if (p === "constructor") return Object
|
|
23
|
-
return __stub
|
|
24
|
-
},
|
|
25
|
-
apply() { return __stub },
|
|
26
|
-
construct() { return __stub },
|
|
27
|
-
});
|
|
5
|
+
const __stub = createStub()
|
|
28
6
|
|
|
29
|
-
export type AgentMcpServerInfo =
|
|
30
|
-
export const AgentMcpServerInfo
|
|
31
|
-
export type ClaudeAIServerInfo =
|
|
32
|
-
export const ClaudeAIServerInfo
|
|
33
|
-
export type HTTPServerInfo =
|
|
34
|
-
export const HTTPServerInfo
|
|
35
|
-
export type MCPViewState =
|
|
36
|
-
export const MCPViewState
|
|
37
|
-
export type SSEServerInfo =
|
|
38
|
-
export const SSEServerInfo
|
|
39
|
-
export type ServerInfo =
|
|
40
|
-
export const ServerInfo
|
|
41
|
-
export type StdioServerInfo =
|
|
42
|
-
export const StdioServerInfo
|
|
7
|
+
export type AgentMcpServerInfo = unknown;
|
|
8
|
+
export const AgentMcpServerInfo = __stub;
|
|
9
|
+
export type ClaudeAIServerInfo = unknown;
|
|
10
|
+
export const ClaudeAIServerInfo = __stub;
|
|
11
|
+
export type HTTPServerInfo = unknown;
|
|
12
|
+
export const HTTPServerInfo = __stub;
|
|
13
|
+
export type MCPViewState = unknown;
|
|
14
|
+
export const MCPViewState = __stub;
|
|
15
|
+
export type SSEServerInfo = unknown;
|
|
16
|
+
export const SSEServerInfo = __stub;
|
|
17
|
+
export type ServerInfo = unknown;
|
|
18
|
+
export const ServerInfo = __stub;
|
|
19
|
+
export type StdioServerInfo = unknown;
|
|
20
|
+
export const StdioServerInfo = __stub;
|
|
43
21
|
|
|
44
22
|
export default __stub;
|