import { c as _c } from "react/compiler-runtime"; import React, { useEffect, useMemo } from 'react'; import type { CommandResultDisplay } from '../../commands.js'; import { ClaudeAuthProvider } from '../../services/mcp/auth.js'; import type { McpClaudeAIProxyServerConfig, McpHTTPServerConfig, McpSSEServerConfig, McpStdioServerConfig } from '../../services/mcp/types.js'; import { extractAgentMcpServers, filterToolsByServer } from '../../services/mcp/utils.js'; import { useAppState } from '../../state/AppState.js'; import { getSessionIngressAuthToken } from '../../utils/sessionIngressAuth.js'; import { MCPAgentServerMenu } from './MCPAgentServerMenu.js'; import { MCPListPanel } from './MCPListPanel.js'; import { MCPRemoteServerMenu } from './MCPRemoteServerMenu.js'; import { MCPStdioServerMenu } from './MCPStdioServerMenu.js'; import { MCPToolDetailView } from './MCPToolDetailView.js'; import { MCPToolListView } from './MCPToolListView.js'; import type { AgentMcpServerInfo, MCPViewState, ServerInfo } from './types.js'; type Props = { onComplete: (result?: string, options?: { display?: CommandResultDisplay; }) => void; }; export function MCPSettings(t0) { const $ = _c(66); const { onComplete } = t0; const mcp = useAppState(_temp); const agentDefinitions = useAppState(_temp2); const mcpClients = mcp.clients; let t1; if ($[0] === Symbol.for("react.memo_cache_sentinel")) { t1 = { type: "list" }; $[0] = t1; } else { t1 = $[0]; } const [viewState, setViewState] = React.useState(t1); let t2; if ($[1] === Symbol.for("react.memo_cache_sentinel")) { t2 = []; $[1] = t2; } else { t2 = $[1]; } const [servers, setServers] = React.useState(t2); let t3; if ($[2] !== agentDefinitions.allAgents) { t3 = extractAgentMcpServers(agentDefinitions.allAgents); $[2] = agentDefinitions.allAgents; $[3] = t3; } else { t3 = $[3]; } const agentMcpServers = t3; let t4; if ($[4] !== mcpClients) { t4 = mcpClients.filter(_temp3).sort(_temp4); $[4] = mcpClients; $[5] = t4; } else { t4 = $[5]; } const filteredClients = t4; let t5; let t6; if ($[6] !== filteredClients || $[7] !== mcp.tools) { t5 = () => { let cancelled = false; const prepareServers = async function prepareServers() { const serverInfos = await Promise.all(filteredClients.map(async client_0 => { const scope = client_0.config.scope; const isSSE = client_0.config.type === "sse"; const isHTTP = client_0.config.type === "http"; const isClaudeAIProxy = client_0.config.type === "claudeai-proxy"; let isAuthenticated = undefined; if (isSSE || isHTTP) { const authProvider = new ClaudeAuthProvider(client_0.name, client_0.config as McpSSEServerConfig | McpHTTPServerConfig); const tokens = await authProvider.tokens(); const hasSessionAuth = getSessionIngressAuthToken() !== null && client_0.type === "connected"; const hasToolsAndConnected = client_0.type === "connected" && filterToolsByServer(mcp.tools, client_0.name).length > 0; isAuthenticated = Boolean(tokens) || hasSessionAuth || hasToolsAndConnected; } const baseInfo = { name: client_0.name, client: client_0, scope }; if (isClaudeAIProxy) { return { ...baseInfo, transport: "claudeai-proxy" as const, isAuthenticated: false, config: client_0.config as McpClaudeAIProxyServerConfig }; } else { if (isSSE) { return { ...baseInfo, transport: "sse" as const, isAuthenticated, config: client_0.config as McpSSEServerConfig }; } else { if (isHTTP) { return { ...baseInfo, transport: "http" as const, isAuthenticated, config: client_0.config as McpHTTPServerConfig }; } else { return { ...baseInfo, transport: "stdio" as const, config: client_0.config as McpStdioServerConfig }; } } } })); if (cancelled) { return; } setServers(serverInfos); }; prepareServers(); return () => { cancelled = true; }; }; t6 = [filteredClients, mcp.tools]; $[6] = filteredClients; $[7] = mcp.tools; $[8] = t5; $[9] = t6; } else { t5 = $[8]; t6 = $[9]; } React.useEffect(t5, t6); let t7; let t8; if ($[10] !== agentMcpServers.length || $[11] !== filteredClients.length || $[12] !== onComplete || $[13] !== servers.length) { t7 = () => { if (servers.length === 0 && filteredClients.length > 0) { return; } if (servers.length === 0 && agentMcpServers.length === 0) { onComplete("No MCP servers configured. Please run /doctor if this is unexpected. Otherwise, run `claude mcp --help` or visit https://code.claude.com/docs/en/mcp to learn more."); } }; t8 = [servers.length, filteredClients.length, agentMcpServers.length, onComplete]; $[10] = agentMcpServers.length; $[11] = filteredClients.length; $[12] = onComplete; $[13] = servers.length; $[14] = t7; $[15] = t8; } else { t7 = $[14]; t8 = $[15]; } useEffect(t7, t8); switch (viewState.type) { case "list": { let t10; let t9; if ($[16] === Symbol.for("react.memo_cache_sentinel")) { t9 = server => setViewState({ type: "server-menu", server }); t10 = agentServer => setViewState({ type: "agent-server-menu", agentServer }); $[16] = t10; $[17] = t9; } else { t10 = $[16]; t9 = $[17]; } let t11; if ($[18] !== agentMcpServers || $[19] !== onComplete || $[20] !== servers || $[21] !== viewState.defaultTab) { t11 = ; $[18] = agentMcpServers; $[19] = onComplete; $[20] = servers; $[21] = viewState.defaultTab; $[22] = t11; } else { t11 = $[22]; } return t11; } case "server-menu": { let t9; if ($[23] !== mcp.tools || $[24] !== viewState.server.name) { t9 = filterToolsByServer(mcp.tools, viewState.server.name); $[23] = mcp.tools; $[24] = viewState.server.name; $[25] = t9; } else { t9 = $[25]; } const serverTools_0 = t9; const defaultTab = viewState.server.transport === "claudeai-proxy" ? "claude.ai" : "Claude Code"; if (viewState.server.transport === "stdio") { let t10; if ($[26] !== viewState.server) { t10 = () => setViewState({ type: "server-tools", server: viewState.server }); $[26] = viewState.server; $[27] = t10; } else { t10 = $[27]; } let t11; if ($[28] !== defaultTab) { t11 = () => setViewState({ type: "list", defaultTab }); $[28] = defaultTab; $[29] = t11; } else { t11 = $[29]; } let t12; if ($[30] !== onComplete || $[31] !== serverTools_0.length || $[32] !== t10 || $[33] !== t11 || $[34] !== viewState.server) { t12 = ; $[30] = onComplete; $[31] = serverTools_0.length; $[32] = t10; $[33] = t11; $[34] = viewState.server; $[35] = t12; } else { t12 = $[35]; } return t12; } else { let t10; if ($[36] !== viewState.server) { t10 = () => setViewState({ type: "server-tools", server: viewState.server }); $[36] = viewState.server; $[37] = t10; } else { t10 = $[37]; } let t11; if ($[38] !== defaultTab) { t11 = () => setViewState({ type: "list", defaultTab }); $[38] = defaultTab; $[39] = t11; } else { t11 = $[39]; } let t12; if ($[40] !== onComplete || $[41] !== serverTools_0.length || $[42] !== t10 || $[43] !== t11 || $[44] !== viewState.server) { t12 = ; $[40] = onComplete; $[41] = serverTools_0.length; $[42] = t10; $[43] = t11; $[44] = viewState.server; $[45] = t12; } else { t12 = $[45]; } return t12; } } case "server-tools": { let t10; let t9; if ($[46] !== viewState.server) { t9 = (_, index) => setViewState({ type: "server-tool-detail", server: viewState.server, toolIndex: index }); t10 = () => setViewState({ type: "server-menu", server: viewState.server }); $[46] = viewState.server; $[47] = t10; $[48] = t9; } else { t10 = $[47]; t9 = $[48]; } let t11; if ($[49] !== t10 || $[50] !== t9 || $[51] !== viewState.server) { t11 = ; $[49] = t10; $[50] = t9; $[51] = viewState.server; $[52] = t11; } else { t11 = $[52]; } return t11; } case "server-tool-detail": { let t9; if ($[53] !== mcp.tools || $[54] !== viewState.server.name) { t9 = filterToolsByServer(mcp.tools, viewState.server.name); $[53] = mcp.tools; $[54] = viewState.server.name; $[55] = t9; } else { t9 = $[55]; } const serverTools = t9; const tool = serverTools[viewState.toolIndex]; if (!tool) { setViewState({ type: "server-tools", server: viewState.server }); return null; } let t10; if ($[56] !== viewState.server) { t10 = () => setViewState({ type: "server-tools", server: viewState.server }); $[56] = viewState.server; $[57] = t10; } else { t10 = $[57]; } let t11; if ($[58] !== t10 || $[59] !== tool || $[60] !== viewState.server) { t11 = ; $[58] = t10; $[59] = tool; $[60] = viewState.server; $[61] = t11; } else { t11 = $[61]; } return t11; } case "agent-server-menu": { let t9; if ($[62] === Symbol.for("react.memo_cache_sentinel")) { t9 = () => setViewState({ type: "list", defaultTab: "Agents" }); $[62] = t9; } else { t9 = $[62]; } let t10; if ($[63] !== onComplete || $[64] !== viewState.agentServer) { t10 = ; $[63] = onComplete; $[64] = viewState.agentServer; $[65] = t10; } else { t10 = $[65]; } return t10; } } } function _temp4(a, b) { return a.name.localeCompare(b.name); } function _temp3(client) { return client.name !== "ide"; } function _temp2(s_0) { return s_0.agentDefinitions; } function _temp(s) { return s.mcp; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJDb21tYW5kUmVzdWx0RGlzcGxheSIsIkNsYXVkZUF1dGhQcm92aWRlciIsIk1jcENsYXVkZUFJUHJveHlTZXJ2ZXJDb25maWciLCJNY3BIVFRQU2VydmVyQ29uZmlnIiwiTWNwU1NFU2VydmVyQ29uZmlnIiwiTWNwU3RkaW9TZXJ2ZXJDb25maWciLCJleHRyYWN0QWdlbnRNY3BTZXJ2ZXJzIiwiZmlsdGVyVG9vbHNCeVNlcnZlciIsInVzZUFwcFN0YXRlIiwiZ2V0U2Vzc2lvbkluZ3Jlc3NBdXRoVG9rZW4iLCJNQ1BBZ2VudFNlcnZlck1lbnUiLCJNQ1BMaXN0UGFuZWwiLCJNQ1BSZW1vdGVTZXJ2ZXJNZW51IiwiTUNQU3RkaW9TZXJ2ZXJNZW51IiwiTUNQVG9vbERldGFpbFZpZXciLCJNQ1BUb29sTGlzdFZpZXciLCJBZ2VudE1jcFNlcnZlckluZm8iLCJNQ1BWaWV3U3RhdGUiLCJTZXJ2ZXJJbmZvIiwiUHJvcHMiLCJvbkNvbXBsZXRlIiwicmVzdWx0Iiwib3B0aW9ucyIsImRpc3BsYXkiLCJNQ1BTZXR0aW5ncyIsInQwIiwiJCIsIl9jIiwibWNwIiwiX3RlbXAiLCJhZ2VudERlZmluaXRpb25zIiwiX3RlbXAyIiwibWNwQ2xpZW50cyIsImNsaWVudHMiLCJ0MSIsIlN5bWJvbCIsImZvciIsInR5cGUiLCJ2aWV3U3RhdGUiLCJzZXRWaWV3U3RhdGUiLCJ1c2VTdGF0ZSIsInQyIiwic2VydmVycyIsInNldFNlcnZlcnMiLCJ0MyIsImFsbEFnZW50cyIsImFnZW50TWNwU2VydmVycyIsInQ0IiwiZmlsdGVyIiwiX3RlbXAzIiwic29ydCIsIl90ZW1wNCIsImZpbHRlcmVkQ2xpZW50cyIsInQ1IiwidDYiLCJ0b29scyIsImNhbmNlbGxlZCIsInByZXBhcmVTZXJ2ZXJzIiwic2VydmVySW5mb3MiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwiY2xpZW50XzAiLCJzY29wZSIsImNsaWVudCIsImNvbmZpZyIsImlzU1NFIiwiaXNIVFRQIiwiaXNDbGF1ZGVBSVByb3h5IiwiaXNBdXRoZW50aWNhdGVkIiwidW5kZWZpbmVkIiwiYXV0aFByb3ZpZGVyIiwibmFtZSIsInRva2VucyIsImhhc1Nlc3Npb25BdXRoIiwiaGFzVG9vbHNBbmRDb25uZWN0ZWQiLCJsZW5ndGgiLCJCb29sZWFuIiwiYmFzZUluZm8iLCJ0cmFuc3BvcnQiLCJjb25zdCIsInQ3IiwidDgiLCJ0MTAiLCJ0OSIsInNlcnZlciIsImFnZW50U2VydmVyIiwidDExIiwiZGVmYXVsdFRhYiIsInNlcnZlclRvb2xzXzAiLCJ0MTIiLCJzZXJ2ZXJUb29scyIsIl8iLCJpbmRleCIsInRvb2xJbmRleCIsInRvb2wiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJzXzAiLCJzIl0sInNvdXJjZXMiOlsiTUNQU2V0dGluZ3MudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ29tbWFuZFJlc3VsdERpc3BsYXkgfSBmcm9tICcuLi8uLi9jb21tYW5kcy5qcydcbmltcG9ydCB7IENsYXVkZUF1dGhQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21jcC9hdXRoLmpzJ1xuaW1wb3J0IHR5cGUge1xuICBNY3BDbGF1ZGVBSVByb3h5U2VydmVyQ29uZmlnLFxuICBNY3BIVFRQU2VydmVyQ29uZmlnLFxuICBNY3BTU0VTZXJ2ZXJDb25maWcsXG4gIE1jcFN0ZGlvU2VydmVyQ29uZmlnLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tY3AvdHlwZXMuanMnXG5pbXBvcnQge1xuICBleHRyYWN0QWdlbnRNY3BTZXJ2ZXJzLFxuICBmaWx0ZXJUb29sc0J5U2VydmVyLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tY3AvdXRpbHMuanMnXG5pbXBvcnQgeyB1c2VBcHBTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlL0FwcFN0YXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2Vzc2lvbkluZ3Jlc3NBdXRoVG9rZW4gfSBmcm9tICcuLi8uLi91dGlscy9zZXNzaW9uSW5ncmVzc0F1dGguanMnXG5pbXBvcnQgeyBNQ1BBZ2VudFNlcnZlck1lbnUgfSBmcm9tICcuL01DUEFnZW50U2VydmVyTWVudS5qcydcbmltcG9ydCB7IE1DUExpc3RQYW5lbCB9IGZyb20gJy4vTUNQTGlzdFBhbmVsLmpzJ1xuaW1wb3J0IHsgTUNQUmVtb3RlU2VydmVyTWVudSB9IGZyb20gJy4vTUNQUmVtb3RlU2VydmVyTWVudS5qcydcbmltcG9ydCB7IE1DUFN0ZGlvU2VydmVyTWVudSB9IGZyb20gJy4vTUNQU3RkaW9TZXJ2ZXJNZW51LmpzJ1xuaW1wb3J0IHsgTUNQVG9vbERldGFpbFZpZXcgfSBmcm9tICcuL01DUFRvb2xEZXRhaWxWaWV3LmpzJ1xuaW1wb3J0IHsgTUNQVG9vbExpc3RWaWV3IH0gZnJvbSAnLi9NQ1BUb29sTGlzdFZpZXcuanMnXG5pbXBvcnQgdHlwZSB7IEFnZW50TWNwU2VydmVySW5mbywgTUNQVmlld1N0YXRlLCBTZXJ2ZXJJbmZvIH0gZnJvbSAnLi90eXBlcy5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgb25Db21wbGV0ZTogKFxuICAgIHJlc3VsdD86IHN0cmluZyxcbiAgICBvcHRpb25zPzogeyBkaXNwbGF5PzogQ29tbWFuZFJlc3VsdERpc3BsYXkgfSxcbiAgKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNQ1BTZXR0aW5ncyh7IG9uQ29tcGxldGUgfTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBtY3AgPSB1c2VBcHBTdGF0ZShzID0+IHMubWNwKVxuICBjb25zdCBhZ2VudERlZmluaXRpb25zID0gdXNlQXBwU3RhdGUocyA9PiBzLmFnZW50RGVmaW5pdGlvbnMpXG4gIGNvbnN0IG1jcENsaWVudHMgPSBtY3AuY2xpZW50c1xuICBjb25zdCBbdmlld1N0YXRlLCBzZXRWaWV3U3RhdGVdID0gUmVhY3QudXNlU3RhdGU8TUNQVmlld1N0YXRlPih7XG4gICAgdHlwZTogJ2xpc3QnLFxuICB9KVxuICBjb25zdCBbc2VydmVycywgc2V0U2VydmVyc10gPSBSZWFjdC51c2VTdGF0ZTxTZXJ2ZXJJbmZvW10+KFtdKVxuXG4gIC8vIEV4dHJhY3QgYWdlbnQtc3BlY2lmaWMgTUNQIHNlcnZlcnMgZnJvbSBhZ2VudCBkZWZpbml0aW9uc1xuICBjb25zdCBhZ2VudE1jcFNlcnZlcnMgPSB1c2VNZW1vKFxuICAgICgpID0+IGV4dHJhY3RBZ2VudE1jcFNlcnZlcnMoYWdlbnREZWZpbml0aW9ucy5hbGxBZ2VudHMpLFxuICAgIFthZ2VudERlZmluaXRpb25zLmFsbEFnZW50c10sXG4gIClcblxuICBjb25zdCBmaWx0ZXJlZENsaWVudHMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBtY3BDbGllbnRzXG4gICAgICAgIC5maWx0ZXIoY2xpZW50ID0+IGNsaWVudC5uYW1lICE9PSAnaWRlJylcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpLFxuICAgIFttY3BDbGllbnRzXSxcbiAgKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlXG4gICAgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVNlcnZlcnMoKSB7XG4gICAgICBjb25zdCBzZXJ2ZXJJbmZvcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBmaWx0ZXJlZENsaWVudHMubWFwKGFzeW5jIGNsaWVudCA9PiB7XG4gICAgICAgICAgY29uc3Qgc2NvcGUgPSBjbGllbnQuY29uZmlnLnNjb3BlXG4gICAgICAgICAgY29uc3QgaXNTU0UgPSBjbGllbnQuY29uZmlnLnR5cGUgPT09ICdzc2UnXG4gICAgICAgICAgY29uc3QgaXNIVFRQID0gY2xpZW50LmNvbmZpZy50eXBlID09PSAnaHR0cCdcbiAgICAgICAgICBjb25zdCBpc0NsYXVkZUFJUHJveHkgPSBjbGllbnQuY29uZmlnLnR5cGUgPT09ICdjbGF1ZGVhaS1wcm94eSdcbiAgICAgICAgICBsZXQgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgICAgICBpZiAoaXNTU0UgfHwgaXNIVFRQKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRoUHJvdmlkZXIgPSBuZXcgQ2xhdWRlQXV0aFByb3ZpZGVyKFxuICAgICAgICAgICAgICBjbGllbnQubmFtZSxcbiAgICAgICAgICAgICAgY2xpZW50LmNvbmZpZyBhcyBNY3BTU0VTZXJ2ZXJDb25maWcgfCBNY3BIVFRQU2VydmVyQ29uZmlnLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgdG9rZW5zID0gYXdhaXQgYXV0aFByb3ZpZGVyLnRva2VucygpXG4gICAgICAgICAgICAvLyBTZXJ2ZXIgaXMgYXV0aGVudGljYXRlZCBpZjpcbiAgICAgICAgICAgIC8vIDEuIEl0IGhhcyBPQXV0aCB0b2tlbnMsIE9SXG4gICAgICAgICAgICAvLyAyLiBJdCdzIGNvbm5lY3RlZCB2aWEgc2Vzc2lvbiBhdXRoIChoYXMgc2Vzc2lvbiB0b2tlbiBhbmQgaXMgY29ubmVjdGVkKSwgT1JcbiAgICAgICAgICAgIC8vIDMuIEl0J3MgY29ubmVjdGVkIGFuZCBoYXMgdG9vbHMgKG1lYW5pbmcgaXQncyB3b3JraW5nLCByZWdhcmRsZXNzIG9mIGF1dGggbWV0aG9kKVxuICAgICAgICAgICAgY29uc3QgaGFzU2Vzc2lvbkF1dGggPVxuICAgICAgICAgICAgICBnZXRTZXNzaW9uSW5ncmVzc0F1dGhUb2tlbigpICE9PSBudWxsICYmXG4gICAgICAgICAgICAgIGNsaWVudC50eXBlID09PSAnY29ubmVjdGVkJ1xuICAgICAgICAgICAgY29uc3QgaGFzVG9vbHNBbmRDb25uZWN0ZWQgPVxuICAgICAgICAgICAgICBjbGllbnQudHlwZSA9PT0gJ2Nvbm5lY3RlZCcgJiZcbiAgICAgICAgICAgICAgZmlsdGVyVG9vbHNCeVNlcnZlcihtY3AudG9vbHMsIGNsaWVudC5uYW1lKS5sZW5ndGggPiAwXG4gICAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQgPVxuICAgICAgICAgICAgICBCb29sZWFuKHRva2VucykgfHwgaGFzU2Vzc2lvbkF1dGggfHwgaGFzVG9vbHNBbmRDb25uZWN0ZWRcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBiYXNlSW5mbyA9IHtcbiAgICAgICAgICAgIG5hbWU6IGNsaWVudC5uYW1lLFxuICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzQ2xhdWRlQUlQcm94eSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uYmFzZUluZm8sXG4gICAgICAgICAgICAgIHRyYW5zcG9ydDogJ2NsYXVkZWFpLXByb3h5JyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgY29uZmlnOiBjbGllbnQuY29uZmlnIGFzIE1jcENsYXVkZUFJUHJveHlTZXJ2ZXJDb25maWcsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1NTRSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uYmFzZUluZm8sXG4gICAgICAgICAgICAgIHRyYW5zcG9ydDogJ3NzZScgYXMgY29uc3QsXG4gICAgICAgICAgICAgIGlzQXV0aGVudGljYXRlZCxcbiAgICAgICAgICAgICAgY29uZmlnOiBjbGllbnQuY29uZmlnIGFzIE1jcFNTRVNlcnZlckNvbmZpZyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGlzSFRUUCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uYmFzZUluZm8sXG4gICAgICAgICAgICAgIHRyYW5zcG9ydDogJ2h0dHAnIGFzIGNvbnN0LFxuICAgICAgICAgICAgICBpc0F1dGhlbnRpY2F0ZWQsXG4gICAgICAgICAgICAgIGNvbmZpZzogY2xpZW50LmNvbmZpZyBhcyBNY3BIVFRQU2VydmVyQ29uZmlnLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5iYXNlSW5mbyxcbiAgICAgICAgICAgICAgdHJhbnNwb3J0OiAnc3RkaW8nIGFzIGNvbnN0LFxuICAgICAgICAgICAgICBjb25maWc6IGNsaWVudC5jb25maWcgYXMgTWNwU3RkaW9TZXJ2ZXJDb25maWcsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcblxuICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuXG4gICAgICBzZXRTZXJ2ZXJzKHNlcnZlckluZm9zKVxuICAgIH1cblxuICAgIHZvaWQgcHJlcGFyZVNlcnZlcnMoKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlXG4gICAgfVxuICB9LCBbZmlsdGVyZWRDbGllbnRzLCBtY3AudG9vbHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlcnZlcnMubGVuZ3RoID09PSAwICYmIGZpbHRlcmVkQ2xpZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBTdGlsbCBsb2FkaW5nXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBPbmx5IHNob3cgXCJubyBzZXJ2ZXJzXCIgbWVzc2FnZSBpZiBubyByZWd1bGFyIHNlcnZlcnMgQU5EIG5vIGFnZW50IHNlcnZlcnNcbiAgICBpZiAoc2VydmVycy5sZW5ndGggPT09IDAgJiYgYWdlbnRNY3BTZXJ2ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgb25Db21wbGV0ZShcbiAgICAgICAgJ05vIE1DUCBzZXJ2ZXJzIGNvbmZpZ3VyZWQuIFBsZWFzZSBydW4gL2RvY3RvciBpZiB0aGlzIGlzIHVuZXhwZWN0ZWQuIE90aGVyd2lzZSwgcnVuIGBjbGF1ZGUgbWNwIC0taGVscGAgb3IgdmlzaXQgaHR0cHM6Ly9jb2RlLmNsYXVkZS5jb20vZG9jcy9lbi9tY3AgdG8gbGVhcm4gbW9yZS4nLFxuICAgICAgKVxuICAgIH1cbiAgfSwgW1xuICAgIHNlcnZlcnMubGVuZ3RoLFxuICAgIGZpbHRlcmVkQ2xpZW50cy5sZW5ndGgsXG4gICAgYWdlbnRNY3BTZXJ2ZXJzLmxlbmd0aCxcbiAgICBvbkNvbXBsZXRlLFxuICBdKVxuXG4gIHN3aXRjaCAodmlld1N0YXRlLnR5cGUpIHtcbiAgICBjYXNlICdsaXN0JzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxNQ1BMaXN0UGFuZWxcbiAgICAgICAgICBzZXJ2ZXJzPXtzZXJ2ZXJzfVxuICAgICAgICAgIGFnZW50U2VydmVycz17YWdlbnRNY3BTZXJ2ZXJzfVxuICAgICAgICAgIG9uU2VsZWN0U2VydmVyPXtzZXJ2ZXIgPT5cbiAgICAgICAgICAgIHNldFZpZXdTdGF0ZSh7IHR5cGU6ICdzZXJ2ZXItbWVudScsIHNlcnZlciB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBvblNlbGVjdEFnZW50U2VydmVyPXsoYWdlbnRTZXJ2ZXI6IEFnZW50TWNwU2VydmVySW5mbykgPT5cbiAgICAgICAgICAgIHNldFZpZXdTdGF0ZSh7IHR5cGU6ICdhZ2VudC1zZXJ2ZXItbWVudScsIGFnZW50U2VydmVyIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIG9uQ29tcGxldGU9e29uQ29tcGxldGV9XG4gICAgICAgICAgZGVmYXVsdFRhYj17dmlld1N0YXRlLmRlZmF1bHRUYWJ9XG4gICAgICAgIC8+XG4gICAgICApXG5cbiAgICBjYXNlICdzZXJ2ZXItbWVudSc6IHtcbiAgICAgIGNvbnN0IHNlcnZlclRvb2xzID0gZmlsdGVyVG9vbHNCeVNlcnZlcihtY3AudG9vbHMsIHZpZXdTdGF0ZS5zZXJ2ZXIubmFtZSlcblxuICAgICAgY29uc3QgZGVmYXVsdFRhYiA9XG4gICAgICAgIHZpZXdTdGF0ZS5zZXJ2ZXIudHJhbnNwb3J0ID09PSAnY2xhdWRlYWktcHJveHknXG4gICAgICAgICAgPyAnY2xhdWRlLmFpJ1xuICAgICAgICAgIDogJ0NsYXVkZSBDb2RlJ1xuXG4gICAgICBpZiAodmlld1N0YXRlLnNlcnZlci50cmFuc3BvcnQgPT09ICdzdGRpbycpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8TUNQU3RkaW9TZXJ2ZXJNZW51XG4gICAgICAgICAgICBzZXJ2ZXI9e3ZpZXdTdGF0ZS5zZXJ2ZXJ9XG4gICAgICAgICAgICBzZXJ2ZXJUb29sc0NvdW50PXtzZXJ2ZXJUb29scy5sZW5ndGh9XG4gICAgICAgICAgICBvblZpZXdUb29scz17KCkgPT5cbiAgICAgICAgICAgICAgc2V0Vmlld1N0YXRlKHsgdHlwZTogJ3NlcnZlci10b29scycsIHNlcnZlcjogdmlld1N0YXRlLnNlcnZlciB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHNldFZpZXdTdGF0ZSh7IHR5cGU6ICdsaXN0JywgZGVmYXVsdFRhYiB9KX1cbiAgICAgICAgICAgIG9uQ29tcGxldGU9e29uQ29tcGxldGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8TUNQUmVtb3RlU2VydmVyTWVudVxuICAgICAgICAgICAgc2VydmVyPXt2aWV3U3RhdGUuc2VydmVyfVxuICAgICAgICAgICAgc2VydmVyVG9vbHNDb3VudD17c2VydmVyVG9vbHMubGVuZ3RofVxuICAgICAgICAgICAgb25WaWV3VG9vbHM9eygpID0+XG4gICAgICAgICAgICAgIHNldFZpZXdTdGF0ZSh7IHR5cGU6ICdzZXJ2ZXItdG9vbHMnLCBzZXJ2ZXI6IHZpZXdTdGF0ZS5zZXJ2ZXIgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRWaWV3U3RhdGUoeyB0eXBlOiAnbGlzdCcsIGRlZmF1bHRUYWIgfSl9XG4gICAgICAgICAgICBvbkNvbXBsZXRlPXtvbkNvbXBsZXRlfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlICdzZXJ2ZXItdG9vbHMnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPE1DUFRvb2xMaXN0Vmlld1xuICAgICAgICAgIHNlcnZlcj17dmlld1N0YXRlLnNlcnZlcn1cbiAgICAgICAgICBvblNlbGVjdFRvb2w9eyhfLCBpbmRleCkgPT5cbiAgICAgICAgICAgIHNldFZpZXdTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzZXJ2ZXItdG9vbC1kZXRhaWwnLFxuICAgICAgICAgICAgICBzZXJ2ZXI6IHZpZXdTdGF0ZS5zZXJ2ZXIsXG4gICAgICAgICAgICAgIHRvb2xJbmRleDogaW5kZXgsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBvbkJhY2s9eygpID0+XG4gICAgICAgICAgICBzZXRWaWV3U3RhdGUoeyB0eXBlOiAnc2VydmVyLW1lbnUnLCBzZXJ2ZXI6IHZpZXdTdGF0ZS5zZXJ2ZXIgfSlcbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICApXG5cbiAgICBjYXNlICdzZXJ2ZXItdG9vbC1kZXRhaWwnOiB7XG4gICAgICBjb25zdCBzZXJ2ZXJUb29scyA9IGZpbHRlclRvb2xzQnlTZXJ2ZXIobWNwLnRvb2xzLCB2aWV3U3RhdGUuc2VydmVyLm5hbWUpXG4gICAgICBjb25zdCB0b29sID0gc2VydmVyVG9vbHNbdmlld1N0YXRlLnRvb2xJbmRleF1cbiAgICAgIGlmICghdG9vbCkge1xuICAgICAgICBzZXRWaWV3U3RhdGUoeyB0eXBlOiAnc2VydmVyLXRvb2xzJywgc2VydmVyOiB2aWV3U3RhdGUuc2VydmVyIH0pXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8TUNQVG9vbERldGFpbFZpZXdcbiAgICAgICAgICB0b29sPXt0b29sfVxuICAgICAgICAgIHNlcnZlcj17dmlld1N0YXRlLnNlcnZlcn1cbiAgICAgICAgICBvbkJhY2s9eygpID0+XG4gICAgICAgICAgICBzZXRWaWV3U3RhdGUoeyB0eXBlOiAnc2VydmVyLXRvb2xzJywgc2VydmVyOiB2aWV3U3RhdGUuc2VydmVyIH0pXG4gICAgICAgICAgfVxuICAgICAgICAvPlxuICAgICAgKVxuICAgIH1cblxuICAgIGNhc2UgJ2FnZW50LXNlcnZlci1tZW51JzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxNQ1BBZ2VudFNlcnZlck1lbnVcbiAgICAgICAgICBhZ2VudFNlcnZlcj17dmlld1N0YXRlLmFnZW50U2VydmVyfVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRWaWV3U3RhdGUoeyB0eXBlOiAnbGlzdCcsIGRlZmF1bHRUYWI6ICdBZ2VudHMnIH0pfVxuICAgICAgICAgIG9uQ29tcGxldGU9e29uQ29tcGxldGV9XG4gICAgICAgIC8+XG4gICAgICApXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLEtBQUssSUFBSUMsU0FBUyxFQUFFQyxPQUFPLFFBQVEsT0FBTztBQUNqRCxjQUFjQyxvQkFBb0IsUUFBUSxtQkFBbUI7QUFDN0QsU0FBU0Msa0JBQWtCLFFBQVEsNEJBQTRCO0FBQy9ELGNBQ0VDLDRCQUE0QixFQUM1QkMsbUJBQW1CLEVBQ25CQyxrQkFBa0IsRUFDbEJDLG9CQUFvQixRQUNmLDZCQUE2QjtBQUNwQyxTQUNFQyxzQkFBc0IsRUFDdEJDLG1CQUFtQixRQUNkLDZCQUE2QjtBQUNwQyxTQUFTQyxXQUFXLFFBQVEseUJBQXlCO0FBQ3JELFNBQVNDLDBCQUEwQixRQUFRLG1DQUFtQztBQUM5RSxTQUFTQyxrQkFBa0IsUUFBUSx5QkFBeUI7QUFDNUQsU0FBU0MsWUFBWSxRQUFRLG1CQUFtQjtBQUNoRCxTQUFTQyxtQkFBbUIsUUFBUSwwQkFBMEI7QUFDOUQsU0FBU0Msa0JBQWtCLFFBQVEseUJBQXlCO0FBQzVELFNBQVNDLGlCQUFpQixRQUFRLHdCQUF3QjtBQUMxRCxTQUFTQyxlQUFlLFFB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