@automagik/genie 4.260419.2 → 4.260419.4
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/dist/genie.js +119 -18
- package/package.json +1 -1
- package/plugins/genie/.claude-plugin/plugin.json +1 -1
- package/plugins/genie/agents/engineer/AGENTS.md +3 -3
- package/plugins/genie/agents/pm/AGENTS.md +2 -2
- package/plugins/genie/agents/pm/HEARTBEAT.md +1 -1
- package/plugins/genie/agents/team-lead/AGENTS.md +5 -5
- package/plugins/genie/agents/team-lead/HEARTBEAT.md +2 -2
- package/plugins/genie/package.json +1 -1
- package/plugins/genie/rules/genie-orchestration.md +3 -3
- package/skills/dream/SKILL.md +1 -1
- package/skills/genie-hacks/SKILL.md +2 -2
- package/skills/pm/SKILL.md +1 -1
- package/skills/wish/SKILL.md +9 -97
- package/skills/work/SKILL.md +1 -1
- package/templates/wish-template.md +99 -0
package/dist/genie.js
CHANGED
|
@@ -379,7 +379,9 @@ PANE_ID="$1"
|
|
|
379
379
|
COLOR=$(${bin} display-message -p -t "$PANE_ID" '#{@genie_color}' 2>/dev/null)
|
|
380
380
|
[ -z "$COLOR" ] && COLOR="default"
|
|
381
381
|
${bin} set-option -w pane-active-border-style "fg=$COLOR"
|
|
382
|
-
`),chmodSync3(PANE_COLOR_SCRIPT,493)}async function applyPaneColor(paneId,color,windowId){let hex=TMUX_COLOR_MAP[color]??TMUX_COLOR_MAP.blue;try{ensurePaneColorScript(),await executeTmux2(`set-option -p -t '${paneId}' @genie_color '${hex}'`);try{let{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db));await(await getConnection2())`UPDATE executors SET pane_color = ${hex} WHERE tmux_pane_id = ${paneId}`}catch{}if(windowId)await executeTmux2(`set-hook -w -t '${windowId}' pane-focus-in "run-shell '${PANE_COLOR_SCRIPT} #{pane_id}'"`)}catch{}}async function rehydratePaneColorHook(windowId){try{ensurePaneColorScript(),await executeTmux2(`set-hook -w -t '${windowId}' pane-focus-in "run-shell '${PANE_COLOR_SCRIPT} #{pane_id}'"`)}catch{}}async function resolveRepoSession(repoPath){let derived=basename2(repoPath);try{let sessions=await listSessions(),exact=sessions.find((s)=>s.name===derived);if(exact)return exact.name;if(process.env.TMUX)try{let name=(await executeTmux2("display-message -p '#{session_name}'")).trim();if(name)return name}catch{}let partial=sessions.find((s)=>s.name.includes(derived));if(partial)return partial.name}catch{}return derived}async function isPaneAlive(paneId){if(!paneId||paneId==="inline")return!1;if(!/^%\d+$/.test(paneId))return!1;try{return(await executeTmux2(`display-message -t '${paneId}' -p '#{pane_dead}'`)).trim()==="0"}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);if(message.includes("no server running")||message.includes("server exited")||message.includes("error connecting"))throw new TmuxUnreachableError(message);return!1}}async function isPaneProcessRunning(paneId,processName,execSyncFn){if(!paneId||paneId==="inline")return!1;if(!/^%\d+$/.test(paneId))return!1;try{let panePid=(await executeTmux2(`display-message -t '${paneId}' -p '#{pane_pid}'`)).trim();if(!panePid||!/^\d+$/.test(panePid))return!1;return(execSyncFn??(await import("child_process")).execSync)(`pgrep -la -P ${panePid} 2>/dev/null; for cpid in $(pgrep -P ${panePid} 2>/dev/null); do pgrep -la -P "$cpid" 2>/dev/null; done; true`,{encoding:"utf-8",timeout:5000}).toLowerCase().includes(processName.toLowerCase())}catch{return!1}}async function killWindow(sessionName,windowName){try{return await executeTmux2(`kill-window -t ${shellQuote(`${sessionName}:${windowName}`)}`),!0}catch{return!1}}var TMUX_COLOR_MAP,PANE_COLOR_SCRIPT,TmuxUnreachableError;var init_tmux=__esm(()=>{init_ensure_tmux();init_team_lead_command();TMUX_COLOR_MAP={red:"#b83030",blue:"#2a6cb8",green:"#20a050",yellow:"#b8a020",purple:"#7830b8",orange:"#b86820",pink:"#b83078",cyan:"#20a0a0"},PANE_COLOR_SCRIPT=`${__require("os").homedir()}/.genie/tmux-pane-color.sh`;TmuxUnreachableError=class TmuxUnreachableError extends Error{constructor(message){super(message);this.name="TmuxUnreachableError"}}});var exports_agent_registry={};__export(exports_agent_registry,{update:()=>update,unregister:()=>unregister,setCurrentExecutor:()=>setCurrentExecutor,saveTemplate:()=>saveTemplate,removeSubPane:()=>removeSubPane,register:()=>register,reconcileStaleSpawns:()=>reconcileStaleSpawns,listTemplates:()=>listTemplates,listAgents:()=>listAgents,list:()=>list,getTeamLeadEntry:()=>getTeamLeadEntry,getPane:()=>getPane,getElapsedTime:()=>getElapsedTime,getAgentEffectiveState:()=>getAgentEffectiveState,getAgentByName:()=>getAgentByName,getAgent:()=>getAgent,get:()=>get,findOrCreateAgent:()=>findOrCreateAgent,findByWindow:()=>findByWindow,findByTask:()=>findByTask,findByPane:()=>findByPane,filterBySession:()=>filterBySession,addSubPane:()=>addSubPane});import{createHash,randomUUID as randomUUID3}from"crypto";function ts(v){if(!v)return new Date().toISOString();return v instanceof Date?v.toISOString():v}function rowToAgent(r){let agent={id:r.id,paneId:r.pane_id,session:r.session,worktree:r.worktree??null,startedAt:ts(r.started_at),state:r.state,lastStateChange:ts(r.last_state_change),repoPath:r.repo_path};if(r.task_id!=null)agent.taskId=r.task_id;if(r.task_title!=null)agent.taskTitle=r.task_title;if(r.wish_slug!=null)agent.wishSlug=r.wish_slug;if(r.group_number!=null)agent.groupNumber=r.group_number;if(r.claude_session_id!=null)agent.claudeSessionId=r.claude_session_id;if(r.window_name!=null)agent.windowName=r.window_name;if(r.window_id!=null)agent.windowId=r.window_id;if(r.role!=null)agent.role=r.role;if(r.custom_name!=null)agent.customName=r.custom_name;if(r.sub_panes!=null){let sp=typeof r.sub_panes==="string"?JSON.parse(r.sub_panes):r.sub_panes;if(Array.isArray(sp)&&sp.length>0)agent.subPanes=sp}if(r.provider!=null)agent.provider=r.provider;if(r.transport!=null)agent.transport=r.transport;if(r.skill!=null)agent.skill=r.skill;if(r.team!=null)agent.team=r.team;if(r.tmux_window!=null)agent.window=r.tmux_window;if(r.native_agent_id!=null)agent.nativeAgentId=r.native_agent_id;if(r.native_color!=null)agent.nativeColor=r.native_color;if(r.native_team_enabled)agent.nativeTeamEnabled=r.native_team_enabled;if(r.parent_session_id!=null)agent.parentSessionId=r.parent_session_id;if(r.suspended_at!=null)agent.suspendedAt=ts(r.suspended_at);if(r.auto_resume!=null)agent.autoResume=r.auto_resume;if(r.resume_attempts!=null)agent.resumeAttempts=r.resume_attempts;if(r.last_resume_attempt!=null)agent.lastResumeAttempt=ts(r.last_resume_attempt);if(r.max_resume_attempts!=null)agent.maxResumeAttempts=r.max_resume_attempts;if(r.pane_color!=null)agent.paneColor=r.pane_color;return agent.currentExecutorId=r.current_executor_id??null,agent.reportsTo=r.reports_to??null,agent.title=r.title??null,agent}function rowToTemplate(r){let tpl={id:r.id,provider:r.provider,team:r.team,cwd:r.cwd,lastSpawnedAt:ts(r.last_spawned_at)};if(r.role!=null)tpl.role=r.role;if(r.skill!=null)tpl.skill=r.skill;if(r.extra_args!=null){let ea=typeof r.extra_args==="string"?JSON.parse(r.extra_args):r.extra_args;if(Array.isArray(ea)&&ea.length>0)tpl.extraArgs=ea}if(r.native_team_enabled)tpl.nativeTeamEnabled=r.native_team_enabled;return tpl}function shortProjectHash(repoPath){return createHash("sha1").update(repoPath).digest("hex").slice(0,8)}function buildProjectTeamLeadEntryId(teamName,session,repoPath){return`team-lead:${session}:${shortProjectHash(repoPath)}:${teamName}`}function buildSessionTeamLeadEntryId(teamName,session){return`team-lead:${session}:${teamName}`}function buildLegacyTeamLeadEntryId(teamName){return`team-lead:${teamName}`}async function register(agent){let sql=await getConnection(),now=new Date().toISOString();
|
|
382
|
+
`),chmodSync3(PANE_COLOR_SCRIPT,493)}async function applyPaneColor(paneId,color,windowId){let hex=TMUX_COLOR_MAP[color]??TMUX_COLOR_MAP.blue;try{ensurePaneColorScript(),await executeTmux2(`set-option -p -t '${paneId}' @genie_color '${hex}'`);try{let{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db));await(await getConnection2())`UPDATE executors SET pane_color = ${hex} WHERE tmux_pane_id = ${paneId}`}catch{}if(windowId)await executeTmux2(`set-hook -w -t '${windowId}' pane-focus-in "run-shell '${PANE_COLOR_SCRIPT} #{pane_id}'"`)}catch{}}async function rehydratePaneColorHook(windowId){try{ensurePaneColorScript(),await executeTmux2(`set-hook -w -t '${windowId}' pane-focus-in "run-shell '${PANE_COLOR_SCRIPT} #{pane_id}'"`)}catch{}}async function resolveRepoSession(repoPath){let derived=basename2(repoPath);try{let sessions=await listSessions(),exact=sessions.find((s)=>s.name===derived);if(exact)return exact.name;if(process.env.TMUX)try{let name=(await executeTmux2("display-message -p '#{session_name}'")).trim();if(name)return name}catch{}let partial=sessions.find((s)=>s.name.includes(derived));if(partial)return partial.name}catch{}return derived}async function isPaneAlive(paneId){if(!paneId||paneId==="inline")return!1;if(!/^%\d+$/.test(paneId))return!1;try{return(await executeTmux2(`display-message -t '${paneId}' -p '#{pane_dead}'`)).trim()==="0"}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);if(message.includes("no server running")||message.includes("server exited")||message.includes("error connecting"))throw new TmuxUnreachableError(message);return!1}}async function isPaneProcessRunning(paneId,processName,execSyncFn){if(!paneId||paneId==="inline")return!1;if(!/^%\d+$/.test(paneId))return!1;try{let panePid=(await executeTmux2(`display-message -t '${paneId}' -p '#{pane_pid}'`)).trim();if(!panePid||!/^\d+$/.test(panePid))return!1;return(execSyncFn??(await import("child_process")).execSync)(`pgrep -la -P ${panePid} 2>/dev/null; for cpid in $(pgrep -P ${panePid} 2>/dev/null); do pgrep -la -P "$cpid" 2>/dev/null; done; true`,{encoding:"utf-8",timeout:5000}).toLowerCase().includes(processName.toLowerCase())}catch{return!1}}async function killWindow(sessionName,windowName){try{return await executeTmux2(`kill-window -t ${shellQuote(`${sessionName}:${windowName}`)}`),!0}catch{return!1}}var TMUX_COLOR_MAP,PANE_COLOR_SCRIPT,TmuxUnreachableError;var init_tmux=__esm(()=>{init_ensure_tmux();init_team_lead_command();TMUX_COLOR_MAP={red:"#b83030",blue:"#2a6cb8",green:"#20a050",yellow:"#b8a020",purple:"#7830b8",orange:"#b86820",pink:"#b83078",cyan:"#20a0a0"},PANE_COLOR_SCRIPT=`${__require("os").homedir()}/.genie/tmux-pane-color.sh`;TmuxUnreachableError=class TmuxUnreachableError extends Error{constructor(message){super(message);this.name="TmuxUnreachableError"}}});var exports_agent_registry={};__export(exports_agent_registry,{update:()=>update,unregister:()=>unregister,setCurrentExecutor:()=>setCurrentExecutor,saveTemplate:()=>saveTemplate,removeSubPane:()=>removeSubPane,register:()=>register,reconcileStaleSpawns:()=>reconcileStaleSpawns,listTemplates:()=>listTemplates,listAgents:()=>listAgents,list:()=>list,getTeamLeadEntry:()=>getTeamLeadEntry,getPane:()=>getPane,getElapsedTime:()=>getElapsedTime,getAgentEffectiveState:()=>getAgentEffectiveState,getAgentByName:()=>getAgentByName,getAgent:()=>getAgent,get:()=>get,findOrCreateAgent:()=>findOrCreateAgent,findByWindow:()=>findByWindow,findByTask:()=>findByTask,findByPane:()=>findByPane,filterBySession:()=>filterBySession,addSubPane:()=>addSubPane});import{createHash,randomUUID as randomUUID3}from"crypto";function ts(v){if(!v)return new Date().toISOString();return v instanceof Date?v.toISOString():v}function rowToAgent(r){let agent={id:r.id,paneId:r.pane_id,session:r.session,worktree:r.worktree??null,startedAt:ts(r.started_at),state:r.state,lastStateChange:ts(r.last_state_change),repoPath:r.repo_path};if(r.task_id!=null)agent.taskId=r.task_id;if(r.task_title!=null)agent.taskTitle=r.task_title;if(r.wish_slug!=null)agent.wishSlug=r.wish_slug;if(r.group_number!=null)agent.groupNumber=r.group_number;if(r.claude_session_id!=null)agent.claudeSessionId=r.claude_session_id;if(r.window_name!=null)agent.windowName=r.window_name;if(r.window_id!=null)agent.windowId=r.window_id;if(r.role!=null)agent.role=r.role;if(r.custom_name!=null)agent.customName=r.custom_name;if(r.sub_panes!=null){let sp=typeof r.sub_panes==="string"?JSON.parse(r.sub_panes):r.sub_panes;if(Array.isArray(sp)&&sp.length>0)agent.subPanes=sp}if(r.provider!=null)agent.provider=r.provider;if(r.transport!=null)agent.transport=r.transport;if(r.skill!=null)agent.skill=r.skill;if(r.team!=null)agent.team=r.team;if(r.tmux_window!=null)agent.window=r.tmux_window;if(r.native_agent_id!=null)agent.nativeAgentId=r.native_agent_id;if(r.native_color!=null)agent.nativeColor=r.native_color;if(r.native_team_enabled)agent.nativeTeamEnabled=r.native_team_enabled;if(r.parent_session_id!=null)agent.parentSessionId=r.parent_session_id;if(r.suspended_at!=null)agent.suspendedAt=ts(r.suspended_at);if(r.auto_resume!=null)agent.autoResume=r.auto_resume;if(r.resume_attempts!=null)agent.resumeAttempts=r.resume_attempts;if(r.last_resume_attempt!=null)agent.lastResumeAttempt=ts(r.last_resume_attempt);if(r.max_resume_attempts!=null)agent.maxResumeAttempts=r.max_resume_attempts;if(r.pane_color!=null)agent.paneColor=r.pane_color;return agent.currentExecutorId=r.current_executor_id??null,agent.reportsTo=r.reports_to??null,agent.title=r.title??null,agent}function rowToTemplate(r){let tpl={id:r.id,provider:r.provider,team:r.team,cwd:r.cwd,lastSpawnedAt:ts(r.last_spawned_at)};if(r.role!=null)tpl.role=r.role;if(r.skill!=null)tpl.skill=r.skill;if(r.extra_args!=null){let ea=typeof r.extra_args==="string"?JSON.parse(r.extra_args):r.extra_args;if(Array.isArray(ea)&&ea.length>0)tpl.extraArgs=ea}if(r.native_team_enabled)tpl.nativeTeamEnabled=r.native_team_enabled;return tpl}function shortProjectHash(repoPath){return createHash("sha1").update(repoPath).digest("hex").slice(0,8)}function buildProjectTeamLeadEntryId(teamName,session,repoPath){return`team-lead:${session}:${shortProjectHash(repoPath)}:${teamName}`}function buildSessionTeamLeadEntryId(teamName,session){return`team-lead:${session}:${teamName}`}function buildLegacyTeamLeadEntryId(teamName){return`team-lead:${teamName}`}async function register(agent){let sql=await getConnection(),now=new Date().toISOString();if(agent.team){let existing=await sql`
|
|
383
|
+
SELECT team FROM agents WHERE id = ${agent.id} LIMIT 1
|
|
384
|
+
`;if(existing.length>0&&existing[0].team!==null&&existing[0].team!==agent.team)throw Error(`register: cross-team id collision \u2014 agent id "${agent.id}" already exists in team "${existing[0].team}", refusing to re-register under team "${agent.team}". Unregister the stale row first, or pick a different id/suffix for this spawn.`)}await sql`INSERT INTO agents (id, pane_id, session, worktree, task_id, task_title, wish_slug, group_number, started_at, state, last_state_change, repo_path, claude_session_id, window_name, window_id, role, custom_name, sub_panes, provider, transport, skill, team, tmux_window, native_agent_id, native_color, native_team_enabled, parent_session_id, suspended_at, auto_resume, resume_attempts, last_resume_attempt, max_resume_attempts, pane_color) VALUES (${agent.id}, ${agent.paneId}, ${agent.session}, ${agent.worktree??null}, ${agent.taskId??null}, ${agent.taskTitle??null}, ${agent.wishSlug??null}, ${agent.groupNumber??null}, ${agent.startedAt??now}, ${agent.state??"spawning"}, ${agent.lastStateChange??now}, ${agent.repoPath}, ${agent.claudeSessionId??null}, ${agent.windowName??null}, ${agent.windowId??null}, ${agent.role??null}, ${agent.customName??null}, ${sql.json(agent.subPanes??[])}, ${agent.provider??null}, ${agent.transport??"tmux"}, ${agent.skill??null}, ${agent.team??null}, ${agent.window??null}, ${agent.nativeAgentId??null}, ${agent.nativeColor??null}, ${agent.nativeTeamEnabled??!1}, ${agent.parentSessionId??null}, ${agent.suspendedAt??null}, ${agent.autoResume??!0}, ${agent.resumeAttempts??0}, ${agent.lastResumeAttempt??null}, ${agent.maxResumeAttempts??3}, ${agent.paneColor??null}) ON CONFLICT (id) DO UPDATE SET pane_id = EXCLUDED.pane_id, session = EXCLUDED.session, state = EXCLUDED.state, last_state_change = EXCLUDED.last_state_change, team = COALESCE(agents.team, EXCLUDED.team), role = COALESCE(agents.role, EXCLUDED.role), custom_name = COALESCE(agents.custom_name, EXCLUDED.custom_name), updated_at = now()`}async function unregister(id){await(await getConnection())`DELETE FROM agents WHERE id = ${id}`}async function get(id){let rows=await(await getConnection())`SELECT * FROM agents WHERE id = ${id}`;return rows.length>0?rowToAgent(rows[0]):null}async function list(){return(await(await getConnection())`SELECT * FROM agents`).map(rowToAgent)}async function reconcileStaleSpawns(thresholdSeconds=60){try{let sql=await getConnection(),rows=await sql`
|
|
383
385
|
UPDATE agents
|
|
384
386
|
SET state = 'error', last_state_change = now()
|
|
385
387
|
WHERE state = 'spawning'
|
|
@@ -1601,7 +1603,7 @@ process.on('SIGTERM', () => { server.close(); process.exit(0); });
|
|
|
1601
1603
|
process.on('SIGINT', () => { server.close(); process.exit(0); });
|
|
1602
1604
|
`,{mode:420});let{spawn:spawnChild}=__require("child_process");spawnChild("node",[scriptFile],{detached:!0,stdio:"ignore"}).unref();for(let i2=0;i2<30;i2++)if(await new Promise((r)=>setTimeout(r,100)),isRelayAlive(pidFile))return!0;return!1}catch{return!1}}async function generateWorkerId2(team,role){let base=role?`${team}-${role}`:team;if(!(await list()).some((w)=>w.id===base))return base;let suffix=crypto.randomUUID().slice(0,8);return`${base}-${suffix}`}async function capturePanePid2(paneId){if(paneId==="inline")return null;try{let{execSync:execSync9}=__require("child_process"),output=execSync9(genieTmuxCmd(`display -t '${paneId}' -p '#{pane_pid}'`),{encoding:"utf-8"}).trim(),pid=Number.parseInt(output,10);return pid>0?pid:null}catch{return null}}function resolveExecutorTransport2(provider,spawnTransport){if(provider==="codex")return"api";if(provider==="claude-sdk")return"process";return spawnTransport==="inline"?"process":"tmux"}async function terminateActiveExecutorWithCleanup(agentIdentityId){try{let currentExec=await getCurrentExecutor(agentIdentityId);if(!currentExec||currentExec.state==="terminated"||currentExec.state==="done")return;let provider=getProvider(currentExec.provider);if(provider)try{await provider.terminate(currentExec)}catch{}await terminateActiveExecutor(agentIdentityId)}catch{}}async function createAndLinkExecutor2(agentIdentityId,provider,transport,opts){try{let executor=await createExecutor(agentIdentityId,provider,transport,opts);return await setCurrentExecutor(agentIdentityId,executor.id),executor.id}catch{return null}}async function registerSpawnWorker(ctx,paneId,windowInfo){let nt=ctx.validated.nativeTeam,workerEntry={id:ctx.workerId,paneId,session:ctx.validated.team,provider:ctx.validated.provider,transport:ctx.transport,role:ctx.validated.role,skill:ctx.validated.skill,team:ctx.validated.team,worktree:null,startedAt:ctx.now,state:"spawning",lastStateChange:ctx.now,repoPath:ctx.cwd,claudeSessionId:ctx.claudeSessionId,nativeTeamEnabled:nt?.enabled??!1,nativeAgentId:`${ctx.agentName}@${ctx.validated.team}`,nativeColor:nt?.color??ctx.spawnColor,parentSessionId:nt?.parentSessionId??ctx.parentSessionId,window:windowInfo?.windowName,windowName:windowInfo?.windowName,windowId:windowInfo?.windowId,autoResume:ctx.autoResume===!1?!1:void 0,resumeAttempts:0};await register(workerEntry);let role=ctx.validated.role??ctx.agentName;if(role!=="council")try{await hireAgent(ctx.validated.team,role)}catch{}return workerEntry}async function notifySpawnJoin(ctx,paneId){let nt=ctx.validated.nativeTeam;if(!nt?.enabled)return;await registerNativeMember(ctx.validated.team,{agentName:ctx.agentName,agentType:nt.agentType??ctx.validated.role??"general-purpose",color:nt.color??ctx.spawnColor??"blue",tmuxPaneId:paneId,cwd:ctx.cwd,planModeRequired:nt.planModeRequired});let leaderName=await resolveTeamLeaderName(ctx.validated.team);await writeNativeInbox(ctx.validated.team,leaderName,{from:ctx.agentName,text:`Worker ${ctx.agentName} (${ctx.validated.provider}) joined team ${ctx.validated.team}. cwd: ${ctx.cwd}. Ready for tasks.`,summary:`${ctx.agentName} (${ctx.validated.provider}) joined`,timestamp:new Date().toISOString(),color:nt.color??ctx.spawnColor??"blue",read:!1})}function registerOtelRelayPane(workerId,paneId,agentName,spawnColor,repoPath){let{writeFileSync:wfs}=__require("fs"),{join:pjoin}=__require("path"),{homedir:hdir}=__require("os"),rd=pjoin(hdir(),".genie","relay");wfs(pjoin(rd,`${workerId}-pane`),paneId),wfs(pjoin(rd,`${workerId}-meta`),JSON.stringify({agent:agentName,color:spawnColor,repoPath}))}function printSpawnInfo(ctx,paneId,workerEntry){let nt=ctx.validated.nativeTeam;if(console.log(`Agent "${ctx.workerId}" spawned.`),console.log(` Provider: ${ctx.launch.provider}`),console.log(` Command: ${ctx.fullCommand}`),console.log(` Team: ${ctx.validated.team}`),console.log(` Pane: ${paneId}`),ctx.validated.role)console.log(` Role: ${ctx.validated.role}`);if(ctx.executorId)console.log(` Executor: ${ctx.executorId}`);if(ctx.validated.skill)console.log(` Skill: ${ctx.validated.skill}`);if(workerEntry.claudeSessionId)console.log(` Session: ${workerEntry.claudeSessionId}`);if(console.log(` Layout: ${ctx.layoutMode}`),nt?.enabled)console.log(" Native: enabled"),console.log(` AgentID: ${workerEntry.nativeAgentId}`),console.log(` Color: ${nt.color}`);if(ctx.otelRelayActive)console.log(` OTel: relay on port ${OTEL_RELAY_PORT}`)}function shellQuote2(arg){return`'${arg.replace(/'/g,"'\\''")}'`}function writeTmuxLaunchScript(workerId,fullCommand){let{chmodSync:chmodSync3,mkdirSync:mkdirSync10,writeFileSync:writeFileSync12}=__require("fs"),{join:join33}=__require("path"),{homedir:homedir20}=__require("os"),dir=join33(homedir20(),".genie","spawn-scripts");mkdirSync10(dir,{recursive:!0});let safeId=workerId.replace(/[^a-zA-Z0-9._-]/g,"-"),scriptPath=join33(dir,`${safeId}-${Date.now().toString(36)}.sh`);return writeFileSync12(scriptPath,`#!/bin/sh
|
|
1603
1605
|
exec ${fullCommand}
|
|
1604
|
-
`,{mode:448}),chmodSync3(scriptPath,448),scriptPath}function buildInitialSplitWindowCommand(windowId,cwd,fullCommand){let cwdFlag=cwd?` -c ${shellQuote2(cwd)}`:"";return genieTmuxCmd(`split-window -d -t ${shellQuote2(windowId)}${cwdFlag} -P -F '#{pane_id}' ${shellQuote2(fullCommand)}`)}async function resolveSpawnTeamWindow(team,cwd,sessionOverride){if(!team)return null;try{let sessionName=sessionOverride;if(!sessionName)sessionName=(await getTeam(team))?.tmuxSessionName;if(!sessionName)sessionName=await resolveRepoSession(cwd);if(!sessionName)sessionName=team;return await ensureTeamWindow(sessionName,team,cwd)}catch(err){return console.warn(`Warning: could not ensure team window for "${team}": ${err instanceof Error?err.message:err}`),null}}async function autoConfirmTrustPrompt(paneId){let{execSync:execSync9}=__require("child_process"),maxWaitMs=15000,pollMs=500,start=Date.now();while(Date.now()-start<15000){await new Promise((r)=>setTimeout(r,500));let content;try{content=execSync9(genieTmuxCmd(`capture-pane -t '${paneId}' -p`),{encoding:"utf-8"})}catch{return}if(content.includes("trust this folder")||content.includes("Quick safety check")){try{execSync9(genieTmuxCmd(`send-keys -t '${paneId}' Enter`),{encoding:"utf-8"})}catch{}return}if(content.includes("Claude Code")||content.includes("\u276F")||content.includes("Churning"))return}}function createTmuxPane(ctx,teamWindow){let{execSync:execSync9}=__require("child_process"),useLaunchScript=ctx.validated.provider==="claude"&&Boolean(ctx.validated.nativeTeam?.enabled),tmuxCommand=useLaunchScript?shellQuote2(writeTmuxLaunchScript(ctx.workerId,ctx.fullCommand)):shellQuote2(ctx.fullCommand),tmuxPrefix=genieTmuxCmd("");if(ctx.validated.windowTarget){let cwdFlag2=ctx.cwd?` -c ${shellQuote2(ctx.cwd)}`:"",cmd=`${tmuxPrefix}split-window -d -t ${shellQuote2(ctx.validated.windowTarget)}${cwdFlag2} -P -F '#{pane_id}' ${tmuxCommand}`;return execSync9(cmd,{encoding:"utf-8"}).trim()}if(ctx.validated.newWindow){let session=ctx.sessionOverride??teamWindow?.windowId?.split(":")[0]??ctx.validated.team,cwdFlag2=ctx.cwd?` -c ${shellQuote2(ctx.cwd)}`:"",sessionExists2=!1;try{execSync9(`${tmuxPrefix}has-session -t ${shellQuote2(`=${session}`)}`,{stdio:"ignore"}),sessionExists2=!0}catch{sessionExists2=!1}if(!sessionExists2)execSync9(`${tmuxPrefix}new-session -d -s ${shellQuote2(session)} -n home${cwdFlag2}`,{stdio:"ignore"});let cmd=`${tmuxPrefix}new-window -a -d -t ${shellQuote2(`${session}:`)} -n claude${cwdFlag2} -P -F '#{pane_id}' ${tmuxCommand}`;return execSync9(cmd,{encoding:"utf-8"}).trim()}if(teamWindow?.created){let cwdFlag2=ctx.cwd?` -c ${shellQuote2(ctx.cwd)}`:"",paneId=execSync9(`${tmuxPrefix}split-window -d -t ${shellQuote2(teamWindow.windowId)}${cwdFlag2} -P -F '#{pane_id}' ${tmuxCommand}`,{encoding:"utf-8"}).trim();try{execSync9(genieTmuxCmd(`kill-pane -t '${teamWindow.paneId}'`),{stdio:"ignore"})}catch{}return paneId}let splitTarget=teamWindow?`-t '${teamWindow.windowId}'
|
|
1606
|
+
`,{mode:448}),chmodSync3(scriptPath,448),scriptPath}function buildInitialSplitWindowCommand(windowId,cwd,fullCommand){let cwdFlag=cwd?` -c ${shellQuote2(cwd)}`:"";return genieTmuxCmd(`split-window -d -t ${shellQuote2(windowId)}${cwdFlag} -P -F '#{pane_id}' ${shellQuote2(fullCommand)}`)}async function resolveSpawnTeamWindow(team,cwd,sessionOverride){if(!team)return null;try{let sessionName=sessionOverride;if(!sessionName)sessionName=(await getTeam(team))?.tmuxSessionName;if(!sessionName)sessionName=await resolveRepoSession(cwd);if(!sessionName)sessionName=team;return await ensureTeamWindow(sessionName,team,cwd)}catch(err){return console.warn(`Warning: could not ensure team window for "${team}": ${err instanceof Error?err.message:err}`),null}}async function autoConfirmTrustPrompt(paneId){let{execSync:execSync9}=__require("child_process"),maxWaitMs=15000,pollMs=500,start=Date.now();while(Date.now()-start<15000){await new Promise((r)=>setTimeout(r,500));let content;try{content=execSync9(genieTmuxCmd(`capture-pane -t '${paneId}' -p`),{encoding:"utf-8"})}catch{return}if(content.includes("trust this folder")||content.includes("Quick safety check")){try{execSync9(genieTmuxCmd(`send-keys -t '${paneId}' Enter`),{encoding:"utf-8"})}catch{}return}if(content.includes("Claude Code")||content.includes("\u276F")||content.includes("Churning"))return}}function createTmuxPane(ctx,teamWindow){let{execSync:execSync9}=__require("child_process"),useLaunchScript=ctx.validated.provider==="claude"&&Boolean(ctx.validated.nativeTeam?.enabled),tmuxCommand=useLaunchScript?shellQuote2(writeTmuxLaunchScript(ctx.workerId,ctx.fullCommand)):shellQuote2(ctx.fullCommand),tmuxPrefix=genieTmuxCmd("");if(ctx.validated.windowTarget){let cwdFlag2=ctx.cwd?` -c ${shellQuote2(ctx.cwd)}`:"",cmd=`${tmuxPrefix}split-window -d -t ${shellQuote2(ctx.validated.windowTarget)}${cwdFlag2} -P -F '#{pane_id}' ${tmuxCommand}`;return execSync9(cmd,{encoding:"utf-8"}).trim()}if(ctx.validated.newWindow){let session=ctx.sessionOverride??teamWindow?.windowId?.split(":")[0]??ctx.validated.team,cwdFlag2=ctx.cwd?` -c ${shellQuote2(ctx.cwd)}`:"",sessionExists2=!1;try{execSync9(`${tmuxPrefix}has-session -t ${shellQuote2(`=${session}`)}`,{stdio:"ignore"}),sessionExists2=!0}catch{sessionExists2=!1}if(!sessionExists2)execSync9(`${tmuxPrefix}new-session -d -s ${shellQuote2(session)} -n home${cwdFlag2}`,{stdio:"ignore"});let cmd=`${tmuxPrefix}new-window -a -d -t ${shellQuote2(`${session}:`)} -n claude${cwdFlag2} -P -F '#{pane_id}' ${tmuxCommand}`;return execSync9(cmd,{encoding:"utf-8"}).trim()}if(teamWindow?.created){let cwdFlag2=ctx.cwd?` -c ${shellQuote2(ctx.cwd)}`:"",paneId=execSync9(`${tmuxPrefix}split-window -d -t ${shellQuote2(teamWindow.windowId)}${cwdFlag2} -P -F '#{pane_id}' ${tmuxCommand}`,{encoding:"utf-8"}).trim();try{execSync9(genieTmuxCmd(`kill-pane -t '${teamWindow.paneId}'`),{stdio:"ignore"})}catch{}return paneId}let callerPane=process.env.TMUX_PANE;if(!teamWindow&&!callerPane)throw Error("createTmuxPane: refusing to split with no target \u2014 neither teamWindow nor TMUX_PANE is set. "+"This indicates a missing --team or --window flag, or a caller outside tmux. See ~/.genie/reports/trace-genie-spawn-wrong-window.md");let splitTarget=teamWindow?`-t '${teamWindow.windowId}'`:`-t '${callerPane}'`,cwdFlag=ctx.cwd?`-c '${ctx.cwd}'`:"";if(useLaunchScript){let splitCmd2=`${tmuxPrefix}split-window -d ${splitTarget} ${cwdFlag} -P -F '#{pane_id}' ${tmuxCommand}`;return execSync9(splitCmd2,{encoding:"utf-8"}).trim()}let escapedCmd=ctx.fullCommand.replace(/'/g,"'\\''"),splitCmd=`${tmuxPrefix}split-window -d ${splitTarget} ${cwdFlag} -P -F '#{pane_id}' '${escapedCmd}'`;return execSync9(splitCmd,{encoding:"utf-8"}).trim()}async function applySpawnLayout(ctx,teamWindow){let{execSync:execSync9}=__require("child_process"),session=await getCurrentSessionName()??ctx.validated.team,layoutTarget=`${session}:${teamWindow?.windowName??""}`;if(!teamWindow){let wins=await listWindows(session);layoutTarget=wins[0]?wins[0].id:`${session}:`}try{execSync9(genieTmuxCmd(buildLayoutCommand(layoutTarget,ctx.layoutMode)),{stdio:"ignore"})}catch{}}async function createTmuxExecutor(ctx,paneId,pid,teamWindow){if(!ctx.agentIdentityId||!ctx.executorId)return;await createAndLinkExecutor2(ctx.agentIdentityId,ctx.validated.provider,resolveExecutorTransport2(ctx.validated.provider,"tmux"),{id:ctx.executorId,pid,tmuxSession:ctx.validated.team,tmuxPaneId:paneId,tmuxWindow:teamWindow?.windowName??null,tmuxWindowId:teamWindow?.windowId??null,claudeSessionId:ctx.claudeSessionId??null,state:"spawning",repoPath:ctx.cwd,paneColor:ctx.spawnColor})}async function finalizeTmuxSpawn(ctx,paneId,teamWindow,workerEntry){if(ctx.spawnColor&&paneId!=="inline")await applyPaneColor(paneId,ctx.spawnColor,teamWindow?.windowId);if(await saveTemplate({id:ctx.validated.role??ctx.workerId,provider:ctx.validated.provider,team:ctx.validated.team,role:ctx.validated.role,skill:ctx.validated.skill,cwd:ctx.cwd,extraArgs:ctx.extraArgs,nativeTeamEnabled:workerEntry.nativeTeamEnabled,lastSpawnedAt:new Date().toISOString()}),ctx.otelRelayActive&&paneId!=="%0")registerOtelRelayPane(ctx.workerId,paneId,ctx.agentName,ctx.spawnColor,ctx.cwd);if(teamWindow)console.log(` Window: ${teamWindow.windowName} (${teamWindow.windowId})`);printSpawnInfo(ctx,paneId,workerEntry)}async function awaitAgentReadiness(paneId){if(paneId==="inline")return;let result2=await waitForAgentReady(paneId);if(result2.ready)console.log(` \u2713 Agent ready (${(result2.elapsedMs/1000).toFixed(1)}s)`);else console.log(` \u26A0 Agent readiness timeout (${Math.round(result2.elapsedMs/1000)}s) \u2014 proceeding anyway`)}async function launchTmuxSpawn(ctx){let isolatedSessionSpawn=ctx.validated.newWindow===!0&&Boolean(ctx.sessionOverride),teamWindow=ctx.spawnIntoCurrentWindow||isolatedSessionSpawn?null:await resolveSpawnTeamWindow(ctx.validated.team,ctx.cwd,ctx.sessionOverride),paneId;try{paneId=createTmuxPane(ctx,teamWindow)}catch(err){return console.error(`Failed to create tmux pane: ${err instanceof Error?err.message:"unknown error"}`),process.exit(1)}let pid=await capturePanePid2(paneId);if(await createTmuxExecutor(ctx,paneId,pid,teamWindow),await applySpawnLayout(ctx,teamWindow),ctx.validated.provider==="claude")await autoConfirmTrustPrompt(paneId);let workerEntry=await registerSpawnWorker(ctx,paneId,teamWindow);if(await notifySpawnJoin(ctx,paneId),await finalizeTmuxSpawn(ctx,paneId,teamWindow,workerEntry),await awaitAgentReadiness(paneId),ctx.executorId)await updateExecutorState(ctx.executorId,"running").catch(()=>{});return await update(ctx.workerId,{state:"idle"}).catch(()=>{}),paneId}async function runSdkQuery(ctx,permConfig,streamOpts,sdkConfig,runtimeExtraOptions){let{ClaudeSdkProvider:ClaudeSdkProvider2}=await Promise.resolve().then(() => (init_claude_sdk(),exports_claude_sdk)),{startSession:startSession2,recordTurn:recordTurn2,updateTurnCount:updateTurnCount2,endSession:endSession2}=await Promise.resolve().then(() => exports_sdk_session_capture),{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db)),sdkProvider=new ClaudeSdkProvider2,spawnContext={agentId:ctx.agentIdentityId??ctx.workerId,executorId:ctx.executorId??crypto.randomUUID(),team:ctx.validated.team,role:ctx.validated.role,skill:ctx.validated.skill,cwd:ctx.cwd,model:ctx.validated.model,systemPrompt:ctx.validated.systemPrompt,systemPromptFile:ctx.validated.systemPromptFile,initialPrompt:ctx.validated.initialPrompt,name:ctx.validated.name},safePgCall=async(_op,fn,fallback)=>{try{let sql=await getConnection2();return await fn(sql)}catch{return fallback}},prompt2=ctx.validated.initialPrompt??`You are ${ctx.validated.role??"an agent"} on team "${ctx.validated.team}". Awaiting instructions.`,resumeSessionId=typeof runtimeExtraOptions?.resume==="string"?runtimeExtraOptions.resume:void 0,dbSessionId=null,turnIndex=0;if(resumeSessionId){let resolvedClaudeSessionId=resumeSessionId,byPgId=await safePgCall("resolve-session-resume",(sql)=>sql`
|
|
1605
1607
|
SELECT s.id, s.total_turns, COALESCE(s.claude_session_id, e.claude_session_id) as csid
|
|
1606
1608
|
FROM sessions s
|
|
1607
1609
|
LEFT JOIN executors e ON e.id = s.executor_id
|
|
@@ -1617,7 +1619,7 @@ Use a different --role name for a second worker, e.g.: --role ${role}-2`),proces
|
|
|
1617
1619
|
SELECT id FROM agents WHERE id = ${id} LIMIT 1
|
|
1618
1620
|
`).length===0)return slice}return uuid}async function resolveSpawnIdentity(name,team,uuidFactory=()=>crypto.randomUUID(),isAliveFn=(agent)=>resolveWorkerLivenessByTransport(agent)){let{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db)),rows=await(await getConnection2())`
|
|
1619
1621
|
SELECT id, pane_id, team FROM agents WHERE id = ${name} LIMIT 1
|
|
1620
|
-
`;if(rows.length===0)return{kind:"canonical",workerId:name,sessionUuid:uuidFactory()};let existing=rows[0];if(existing.team!==null&&existing.team!==team){let sessionUuid2=uuidFactory(),shortId2=await pickParallelShortId(name,team,sessionUuid2);return{kind:"parallel",workerId:`${name}-${shortId2}`,sessionUuid:sessionUuid2,canonicalId:name}}if(!(existing.pane_id?await isAliveFn({id:existing.id,paneId:existing.pane_id}):!1))return{kind:"canonical",workerId:name,sessionUuid:uuidFactory()};let sessionUuid=uuidFactory(),shortId=await pickParallelShortId(name,team,sessionUuid);return{kind:"parallel",workerId:`${name}-${shortId}`,sessionUuid,canonicalId:name}}async function resolveTeamAndResume(effectiveRole,options,agent){let teamWasExplicit=Boolean(options.team),team=await resolveTeamName3({explicitTeam:options.team,entryTeam:agent.entry?.team});if(!team){let candidates=await findTeamsContainingAgent(effectiveRole);if(candidates.length===1)team=candidates[0];else if(candidates.length>1)return console.error(`Error: agent "${effectiveRole}" is a member of multiple teams (${candidates.join(", ")}). Pass --team <name> to disambiguate.`),process.exit(1)}if(!team){if(await get2(effectiveRole))team=sanitizeTeamName(effectiveRole)}if(!team)return console.error(`Error: --team is required for agent "${effectiveRole}" (or set GENIE_TEAM, run inside a genie session, or register the agent in a team config).`),process.exit(1);let deadResumable=await findDeadResumable(team,effectiveRole);if(deadResumable)return console.log(`Resuming existing session for "${effectiveRole}" (session: ${deadResumable.claudeSessionId?.slice(0,8)}...)`),await resumeAgent(deadResumable),{team,teamWasExplicit,resumed:deadResumable.id};return{team,teamWasExplicit}}async function handleWorkerSpawn(name,options){let effectiveRole=options.role??name,agent=await resolveAgentForSpawn(name,options),{team,teamWasExplicit,resumed}=await resolveTeamAndResume(effectiveRole,options,agent);if(resumed)return resumed;let explicitRole=options.role!==void 0&&options.role!==name,identity=null;if(!explicitRole)identity=await resolveSpawnIdentity(name,team),effectiveRole=identity.workerId;else await rejectDuplicateRole(team,effectiveRole);let teamConfig=await getTeam(team);if(teamConfig?.worktreePath&&!agent.entry?.dir)agent={...agent,repoPath:teamConfig.worktreePath};let{params,parentSessionId,spawnColor}=await buildSpawnParams2(effectiveRole,team,options,agent,identity?.sessionUuid);if(!params.name)params.name=`${params.team}-${effectiveRole}`;let validated=validateSpawnParams(params),launch=buildLaunchCommand(validated),layoutMode=resolveLayoutMode(options.layout),workerId=identity?.workerId??await generateWorkerId2(validated.team,effectiveRole),insideTmux=Boolean(process.env.TMUX||options.session),nt=validated.nativeTeam,now=new Date().toISOString(),agentName=nt?.agentName??effectiveRole,agentIdentity=await findOrCreateAgent(agentName,team,effectiveRole);await terminateActiveExecutorWithCleanup(agentIdentity.id);let executorId=crypto.randomUUID(),otelRelayActive=await maybeStartOtelRelay(nt,validated,insideTmux),fullCommand=prependEnvVars(launch.command,launch.env),ctx={workerId,validated,launch,layoutMode,fullCommand,agentName,spawnColor,parentSessionId,claudeSessionId:validated.sessionId,otelRelayActive,now,transport:insideTmux?"tmux":"inline",extraArgs:options.extraArgs,cwd:agent.repoPath,spawnIntoCurrentWindow:!teamWasExplicit&&insideTmux&&!options.session,sessionOverride:options.session,autoResume:options.autoResume,agentIdentityId:agentIdentity.id,executorId};return recordAuditEvent("worker",workerId,"spawn",getActor(),{name,team:validated.team,provider:validated.provider}).catch(()=>{}),await dispatchSpawn(ctx,validated,options,agent,insideTmux)}async function cleanupWorkerNativeTeam(w){if(!w.team||!w.nativeAgentId)return;let agentName=w.nativeAgentId.split("@")[0];await clearNativeInbox(w.team,agentName).catch(()=>{}),await unregisterNativeMember(w.team,agentName).catch(()=>{})}function killWorkerPane(w){try{let{execSync:execSync9}=__require("child_process"),currentPane=execSync9(genieTmuxCmd("display-message -p '#{pane_id}'"),{encoding:"utf-8"}).trim();if(w.paneId&&/^(%\d+|inline)$/.test(w.paneId)&&w.paneId!==currentPane)execSync9(genieTmuxCmd(`kill-pane -t ${w.paneId}`),{stdio:"ignore"});else if(w.paneId===currentPane)console.log(" (skipped pane kill \u2014 would kill current session)")}catch{}}function cleanupRelayFiles(id){try{let{join:join33}=__require("path"),{homedir:homedir20}=__require("os"),{unlinkSync:unlinkSync8}=__require("fs"),relayDir=join33(homedir20(),".genie","relay");for(let suffix of["-pane","-meta"])try{unlinkSync8(join33(relayDir,`${id}${suffix}`))}catch{}}catch{}}async function resolveWorkerByName(name){let exact=await get(name);if(exact)return exact;let workers=await list(),byRole=workers.filter((w)=>w.role===name);if(byRole.length===1)return byRole[0];if(byRole.length>1){console.error(`Multiple agents with role "${name}". Specify full ID:`);for(let w of byRole)console.error(` ${w.id} (team: ${w.team})`);process.exit(1)}let bySuffix=workers.filter((w)=>w.id.endsWith(`-${name}`));if(bySuffix.length===1)return bySuffix[0];if(bySuffix.length>1){console.error(`Multiple agents matching "${name}". Specify full ID:`);for(let w of bySuffix)console.error(` ${w.id}`);process.exit(1)}console.error(`Agent "${name}" not found.`),console.error(" Run `genie agent list` to see agents."),process.exit(1)}async function handleWorkerKill(name){let w=await resolveWorkerByName(name);killWorkerPane(w),cleanupRelayFiles(w.id),await cleanupWorkerNativeTeam(w),await unregister(w.id),console.log(`Agent "${w.id}" killed and unregistered (template preserved).`),recordAuditEvent("worker",w.id,"kill",getActor(),{name}).catch(()=>{})}async function handleWorkerStop(name){let w=await resolveWorkerByName(name);if(w.state==="suspended"){console.log(`Agent "${w.id}" is already stopped.`);return}let{suspendWorker:suspendWorker2}=await Promise.resolve().then(() => (init_idle_timeout(),exports_idle_timeout));if(await suspendWorker2(w.id)){if(console.log(`Agent "${w.id}" stopped.`),w.claudeSessionId)console.log(` Session preserved: ${w.claudeSessionId}`);console.log(` Send a message to auto-resume: genie send '...' --to ${w.id}`),recordAuditEvent("worker",w.id,"stop",getActor(),{name}).catch(()=>{})}else console.error(`Failed to stop agent "${w.id}".`),process.exit(1)}async function isResumeEligible(w){if(!w.claudeSessionId)return!1;if(w.state==="done")return!1;let paneAlive=await isPaneAlive(w.paneId);if((w.state==="suspended"||w.state==="error")&&!paneAlive)return!0;if(!paneAlive&&(w.state==="working"||w.state==="idle"||w.state==="spawning"))return!0;return!1}async function resumeAllAgents(opts={}){let workers=await list(),toResume=[];for(let w of workers)if(await isResumeEligible(w))toResume.push(w);if(toResume.length===0){console.log("No eligible agents to resume.");return}console.log(`Resuming ${toResume.length} agent(s)...`);for(let w of toResume)try{await resumeAgent(w,opts)}catch(err){console.error(` Failed to resume "${w.id}": ${err instanceof Error?err.message:err}`)}}async function handleWorkerResume(name,options){let resumeOpts={resetAttempts:!options.noResetAttempts};if(options.all)return resumeAllAgents(resumeOpts);if(!name)console.error("Error: provide an agent name, or use --all to resume all eligible agents."),process.exit(1);let w=await resolveWorkerByName(name);if(!w.claudeSessionId)console.error(`Error: Agent "${w.id}" has no Claude session ID \u2014 cannot resume.`),console.error(" Only agents spawned with the Claude provider have resumable sessions."),process.exit(1);if(await isPaneAlive(w.paneId)){console.log(`Agent "${w.id}" is already running (pane ${w.paneId} is alive).`);return}await resumeAgent(w,resumeOpts)}async function buildResumeParams(agent,template,resumeSessionId){let agentName=agent.role??agent.id,provider=template?.provider??agent.provider??"claude",team=template?.team??agent.team??await discoverTeamName();if(!team)throw Error(`Cannot resume agent "${agent.id}": no team context (template, agent record, env, or session). Pass --team or set GENIE_TEAM, or run inside a registered tmux session.`);let systemPromptFile,promptMode,dirEntry=await get2(agentName);if(dirEntry?.dir)systemPromptFile=loadIdentity(dirEntry)??void 0,promptMode=dirEntry.promptMode;return{provider,team,role:agentName,skill:template?.skill??agent.skill,extraArgs:template?.extraArgs,resume:resumeSessionId,name:`${team}-${agentName}`,model:dirEntry?.model,systemPromptFile,promptMode}}function formatGroupStatus(name,group,allGroups){let detail=group.status;if(group.completedAt)detail+=` (completed at ${group.completedAt})`;else if(group.startedAt)detail+=` (started at ${group.startedAt})`;if(group.status==="blocked"&&group.dependsOn.length>0){let pending=group.dependsOn.filter((dep)=>allGroups[dep]?.status!=="done");if(pending.length>0)detail+=` (depends on ${pending.join(", ")})`}return`Group ${name}: ${detail}`}async function buildResumeContext(agent){if((agent.role==="team-lead"||agent.team&&agent.role===await resolveTeamLeaderName(agent.team))&&agent.wishSlug)try{let state=await(await Promise.resolve().then(() => (init_wish_state(),exports_wish_state))).getState(agent.wishSlug,agent.repoPath);if(state){let groupLines=Object.entries(state.groups).map(([name,group])=>formatGroupStatus(name,group,state.groups));return["You were resumed after a crash. Here's where you left off:",`Wish: ${state.wish}`,"",...groupLines,"",`Continue from where you left off. Run \`genie status ${state.wish}\` to verify, then dispatch the next wave.`].join(`
|
|
1622
|
+
`;if(rows.length===0)return{kind:"canonical",workerId:name,sessionUuid:uuidFactory()};let existing=rows[0];if(existing.team!==null&&existing.team!==team){let sessionUuid2=uuidFactory(),shortId2=await pickParallelShortId(name,team,sessionUuid2);return{kind:"parallel",workerId:`${name}-${shortId2}`,sessionUuid:sessionUuid2,canonicalId:name}}if(!(existing.pane_id?await isAliveFn({id:existing.id,paneId:existing.pane_id}):!1))return{kind:"canonical",workerId:name,sessionUuid:uuidFactory()};let sessionUuid=uuidFactory(),shortId=await pickParallelShortId(name,team,sessionUuid);return{kind:"parallel",workerId:`${name}-${shortId}`,sessionUuid,canonicalId:name}}async function resolveTeamAndResume(effectiveRole,options,agent){let teamWasExplicit=Boolean(options.team),team=await resolveTeamName3({explicitTeam:options.team,entryTeam:agent.entry?.team});if(!team){let candidates=await findTeamsContainingAgent(effectiveRole);if(candidates.length===1)team=candidates[0];else if(candidates.length>1)return console.error(`Error: agent "${effectiveRole}" is a member of multiple teams (${candidates.join(", ")}). Pass --team <name> to disambiguate.`),process.exit(1)}if(!team){if(await get2(effectiveRole))team=sanitizeTeamName(effectiveRole)}if(!team)return console.error(`Error: --team is required for agent "${effectiveRole}" (or set GENIE_TEAM, run inside a genie session, or register the agent in a team config).`),process.exit(1);let deadResumable=await findDeadResumable(team,effectiveRole);if(deadResumable)return console.log(`Resuming existing session for "${effectiveRole}" (session: ${deadResumable.claudeSessionId?.slice(0,8)}...)`),await resumeAgent(deadResumable),{team,teamWasExplicit,resumed:deadResumable.id};return{team,teamWasExplicit}}async function handleWorkerSpawn(name,options){let effectiveRole=options.role??name,agent=await resolveAgentForSpawn(name,options),{team,teamWasExplicit,resumed}=await resolveTeamAndResume(effectiveRole,options,agent);if(resumed)return resumed;let explicitRole=options.role!==void 0&&options.role!==name,identity=null;if(!explicitRole)identity=await resolveSpawnIdentity(name,team),effectiveRole=identity.workerId;else await rejectDuplicateRole(team,effectiveRole);let teamConfig=await getTeam(team);if(teamConfig?.worktreePath&&!agent.entry?.dir)agent={...agent,repoPath:teamConfig.worktreePath};let{params,parentSessionId,spawnColor}=await buildSpawnParams2(effectiveRole,team,options,agent,identity?.sessionUuid);if(!params.name)params.name=`${params.team}-${effectiveRole}`;let validated=validateSpawnParams(params),launch=buildLaunchCommand(validated),layoutMode=resolveLayoutMode(options.layout),workerId=identity?.workerId??await generateWorkerId2(validated.team,effectiveRole),insideTmux=Boolean(process.env.TMUX||options.session),nt=validated.nativeTeam,now=new Date().toISOString(),agentName=nt?.agentName??effectiveRole,agentIdentity=await findOrCreateAgent(agentName,team,effectiveRole);await terminateActiveExecutorWithCleanup(agentIdentity.id);let executorId=crypto.randomUUID(),otelRelayActive=await maybeStartOtelRelay(nt,validated,insideTmux),fullCommand=prependEnvVars(launch.command,launch.env),ctx={workerId,validated,launch,layoutMode,fullCommand,agentName,spawnColor,parentSessionId,claudeSessionId:validated.sessionId,otelRelayActive,now,transport:insideTmux?"tmux":"inline",extraArgs:options.extraArgs,cwd:agent.repoPath,spawnIntoCurrentWindow:!teamWasExplicit&&!process.env.GENIE_TEAM&&insideTmux&&!options.session,sessionOverride:options.session,autoResume:options.autoResume,agentIdentityId:agentIdentity.id,executorId};return recordAuditEvent("worker",workerId,"spawn",getActor(),{name,team:validated.team,provider:validated.provider}).catch(()=>{}),await dispatchSpawn(ctx,validated,options,agent,insideTmux)}async function cleanupWorkerNativeTeam(w){if(!w.team||!w.nativeAgentId)return;let agentName=w.nativeAgentId.split("@")[0];await clearNativeInbox(w.team,agentName).catch(()=>{}),await unregisterNativeMember(w.team,agentName).catch(()=>{})}function killWorkerPane(w){try{let{execSync:execSync9}=__require("child_process"),currentPane=execSync9(genieTmuxCmd("display-message -p '#{pane_id}'"),{encoding:"utf-8"}).trim();if(w.paneId&&/^(%\d+|inline)$/.test(w.paneId)&&w.paneId!==currentPane)execSync9(genieTmuxCmd(`kill-pane -t ${w.paneId}`),{stdio:"ignore"});else if(w.paneId===currentPane)console.log(" (skipped pane kill \u2014 would kill current session)")}catch{}}function cleanupRelayFiles(id){try{let{join:join33}=__require("path"),{homedir:homedir20}=__require("os"),{unlinkSync:unlinkSync8}=__require("fs"),relayDir=join33(homedir20(),".genie","relay");for(let suffix of["-pane","-meta"])try{unlinkSync8(join33(relayDir,`${id}${suffix}`))}catch{}}catch{}}async function resolveWorkerByName(name){let exact=await get(name);if(exact)return exact;let workers=await list(),byRole=workers.filter((w)=>w.role===name);if(byRole.length===1)return byRole[0];if(byRole.length>1){console.error(`Multiple agents with role "${name}". Specify full ID:`);for(let w of byRole)console.error(` ${w.id} (team: ${w.team})`);process.exit(1)}let bySuffix=workers.filter((w)=>w.id.endsWith(`-${name}`));if(bySuffix.length===1)return bySuffix[0];if(bySuffix.length>1){console.error(`Multiple agents matching "${name}". Specify full ID:`);for(let w of bySuffix)console.error(` ${w.id}`);process.exit(1)}console.error(`Agent "${name}" not found.`),console.error(" Run `genie agent list` to see agents."),process.exit(1)}async function handleWorkerKill(name){let w=await resolveWorkerByName(name);killWorkerPane(w),cleanupRelayFiles(w.id),await cleanupWorkerNativeTeam(w),await unregister(w.id),console.log(`Agent "${w.id}" killed and unregistered (template preserved).`),recordAuditEvent("worker",w.id,"kill",getActor(),{name}).catch(()=>{})}async function handleWorkerStop(name){let w=await resolveWorkerByName(name);if(w.state==="suspended"){console.log(`Agent "${w.id}" is already stopped.`);return}let{suspendWorker:suspendWorker2}=await Promise.resolve().then(() => (init_idle_timeout(),exports_idle_timeout));if(await suspendWorker2(w.id)){if(console.log(`Agent "${w.id}" stopped.`),w.claudeSessionId)console.log(` Session preserved: ${w.claudeSessionId}`);console.log(` Send a message to auto-resume: genie send '...' --to ${w.id}`),recordAuditEvent("worker",w.id,"stop",getActor(),{name}).catch(()=>{})}else console.error(`Failed to stop agent "${w.id}".`),process.exit(1)}async function isResumeEligible(w){if(!w.claudeSessionId)return!1;if(w.state==="done")return!1;let paneAlive=await isPaneAlive(w.paneId);if((w.state==="suspended"||w.state==="error")&&!paneAlive)return!0;if(!paneAlive&&(w.state==="working"||w.state==="idle"||w.state==="spawning"))return!0;return!1}async function resumeAllAgents(opts={}){let workers=await list(),toResume=[];for(let w of workers)if(await isResumeEligible(w))toResume.push(w);if(toResume.length===0){console.log("No eligible agents to resume.");return}console.log(`Resuming ${toResume.length} agent(s)...`);for(let w of toResume)try{await resumeAgent(w,opts)}catch(err){console.error(` Failed to resume "${w.id}": ${err instanceof Error?err.message:err}`)}}async function handleWorkerResume(name,options){let resumeOpts={resetAttempts:!options.noResetAttempts};if(options.all)return resumeAllAgents(resumeOpts);if(!name)console.error("Error: provide an agent name, or use --all to resume all eligible agents."),process.exit(1);let w=await resolveWorkerByName(name);if(!w.claudeSessionId)console.error(`Error: Agent "${w.id}" has no Claude session ID \u2014 cannot resume.`),console.error(" Only agents spawned with the Claude provider have resumable sessions."),process.exit(1);if(await isPaneAlive(w.paneId)){console.log(`Agent "${w.id}" is already running (pane ${w.paneId} is alive).`);return}await resumeAgent(w,resumeOpts)}async function buildResumeParams(agent,template,resumeSessionId){let agentName=agent.role??agent.id,provider=template?.provider??agent.provider??"claude",team=template?.team??agent.team??await discoverTeamName();if(!team)throw Error(`Cannot resume agent "${agent.id}": no team context (template, agent record, env, or session). Pass --team or set GENIE_TEAM, or run inside a registered tmux session.`);let systemPromptFile,promptMode,dirEntry=await get2(agentName);if(dirEntry?.dir)systemPromptFile=loadIdentity(dirEntry)??void 0,promptMode=dirEntry.promptMode;return{provider,team,role:agentName,skill:template?.skill??agent.skill,extraArgs:template?.extraArgs,resume:resumeSessionId,name:`${team}-${agentName}`,model:dirEntry?.model,systemPromptFile,promptMode}}function formatGroupStatus(name,group,allGroups){let detail=group.status;if(group.completedAt)detail+=` (completed at ${group.completedAt})`;else if(group.startedAt)detail+=` (started at ${group.startedAt})`;if(group.status==="blocked"&&group.dependsOn.length>0){let pending=group.dependsOn.filter((dep)=>allGroups[dep]?.status!=="done");if(pending.length>0)detail+=` (depends on ${pending.join(", ")})`}return`Group ${name}: ${detail}`}async function buildResumeContext(agent){if((agent.role==="team-lead"||agent.team&&agent.role===await resolveTeamLeaderName(agent.team))&&agent.wishSlug)try{let state=await(await Promise.resolve().then(() => (init_wish_state(),exports_wish_state))).getState(agent.wishSlug,agent.repoPath);if(state){let groupLines=Object.entries(state.groups).map(([name,group])=>formatGroupStatus(name,group,state.groups));return["You were resumed after a crash. Here's where you left off:",`Wish: ${state.wish}`,"",...groupLines,"",`Continue from where you left off. Run \`genie status ${state.wish}\` to verify, then dispatch the next wave.`].join(`
|
|
1621
1623
|
`)}}catch{}if(agent.team)return"You were resumed. Check your team's current state with `genie status`.";return}async function buildFullResumeParams(agent,template){if(!agent.claudeSessionId)throw new MissingResumeSessionError(agent.id);let params=await buildResumeParams(agent,template,agent.claudeSessionId),resumeContext=await buildResumeContext(agent);if(resumeContext)params.initialPrompt=resumeContext;if(agent.nativeTeamEnabled){let nativeResult=await resolveNativeTeam(params.team,agent.repoPath,{provider:params.provider,role:params.role,color:agent.nativeColor});if(nativeResult.nativeTeam)params.nativeTeam=nativeResult.nativeTeam}return params}async function createResumeExecutor(agent,params,paneId,teamWindow,cwd,spawnColor){let resumeAgentName=agent.role??agent.id,resumeTeam=agent.team??params.team,agentIdentity=await findOrCreateAgent(resumeAgentName,resumeTeam,agent.role);await terminateActiveExecutorWithCleanup(agentIdentity.id);let pid=await capturePanePid2(paneId);await createAndLinkExecutor2(agentIdentity.id,params.provider,resolveExecutorTransport2(params.provider,"tmux"),{pid,tmuxSession:params.team,tmuxPaneId:paneId,tmuxWindow:teamWindow?.windowName??null,tmuxWindowId:teamWindow?.windowId??null,claudeSessionId:agent.claudeSessionId??null,state:"spawning",repoPath:cwd,paneColor:spawnColor})}async function resumeAgent(agent,opts={}){let resetAttempts=opts.resetAttempts!==!1,template=(await listTemplates()).find((t)=>t.id===(agent.role??agent.id));if(resetAttempts)await update(agent.id,{resumeAttempts:0});let params=await buildFullResumeParams(agent,template),validated=validateSpawnParams(params),launch=buildLaunchCommand(validated),fullCommand=prependEnvVars(launch.command,launch.env),now=new Date().toISOString();if(!process.env.TMUX)console.error("Error: resume requires tmux. Start a tmux session first."),process.exit(1);let ctx={workerId:agent.id,validated,launch,layoutMode:resolveLayoutMode(void 0),fullCommand,agentName:agent.role??agent.id,spawnColor:agent.nativeColor??"blue",parentSessionId:agent.parentSessionId??`genie-${params.team}`,claudeSessionId:agent.claudeSessionId,otelRelayActive:!1,now,transport:"tmux",extraArgs:template?.extraArgs,cwd:template?.cwd??agent.repoPath,spawnIntoCurrentWindow:!1,autoResume:agent.autoResume},teamWindow=await resolveSpawnTeamWindow(validated.team,ctx.cwd),paneId;try{paneId=createTmuxPane(ctx,teamWindow)}catch(err){console.error(`Failed to create tmux pane: ${err instanceof Error?err.message:"unknown error"}`),process.exit(1)}if(await createResumeExecutor(agent,validated,paneId,teamWindow,ctx.cwd,ctx.spawnColor),await applySpawnLayout(ctx,teamWindow),await update(agent.id,{paneId,state:"spawning",startedAt:now,lastStateChange:now,suspendedAt:void 0,windowName:teamWindow?.windowName,windowId:teamWindow?.windowId,window:teamWindow?.windowName}),await notifySpawnJoin(ctx,paneId),await injectResumeContext(ctx.cwd??agent.repoPath??process.cwd(),agent.id,agent.role??agent.id,params.team),ctx.spawnColor&&paneId!=="inline")await applyPaneColor(paneId,ctx.spawnColor,teamWindow?.windowId);if(recordAuditEvent("worker",agent.id,"resumed",getActor(),{claudeSessionId:agent.claudeSessionId,team:agent.team}).catch(()=>{}),console.log(`Agent "${agent.id}" resumed.`),console.log(` Session: ${agent.claudeSessionId}`),console.log(` Pane: ${paneId}`),teamWindow)console.log(` Window: ${teamWindow.windowName} (${teamWindow.windowId})`)}async function resolveWorkerLiveness(w){if(/^%\d+$/.test(w.paneId))return{alive:await isPaneAlive(w.paneId),state:w.state};let execState=await getLiveExecutorState(w.id);return{alive:execState!==null,state:execState??w.state}}async function buildWorkerStatusMap(workers){let statusMap=new Map;for(let w of workers){let name=w.role||w.id,{alive,state}=await resolveWorkerLiveness(w);if(alive)statusMap.set(name,{state,team:w.team||"-"});else if(w.state==="suspended"||w.state==="error"){let attempts=w.resumeAttempts??0,max=w.maxResumeAttempts??3,autoStr=w.autoResume===!1?"off":"on";statusMap.set(name,{state:`${w.state} (${attempts}/${max} resumes, auto-resume: ${autoStr})`,team:w.team||"-",resumeAttempts:attempts,maxResumeAttempts:max,autoResume:w.autoResume!==!1})}}return statusMap}async function resolveAgentNamesBySource(source){let executorRegistry=await Promise.resolve().then(() => (init_executor_registry(),exports_executor_registry)),agentRegistry=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry)),executors=await executorRegistry.listExecutors(void 0,source),agentIds=new Set(executors.map((e)=>e.agentId)),agents=await agentRegistry.listAgents({});return new Set(agents.filter((a)=>agentIds.has(a.id)).map((a)=>a.customName??a.role??a.id))}async function handleLsCommand(options){let dirEntries=await ls(),workers=await list(),statusMap=await buildWorkerStatusMap(workers),sourceAgentNames=options.source?await resolveAgentNamesBySource(options.source):void 0,entries=[];for(let entry of dirEntries){let running=statusMap.get(entry.name);entries.push({name:entry.name,dir:entry.dir||"-",status:running?running.state:"offline",team:running?.team||"-",model:entry.model||"-",resumeAttempts:running?.resumeAttempts,maxResumeAttempts:running?.maxResumeAttempts,autoResume:running?.autoResume}),statusMap.delete(entry.name)}for(let[name,info]of statusMap)entries.push({name,dir:"(built-in)",status:info.state,team:info.team,model:"-",resumeAttempts:info.resumeAttempts,maxResumeAttempts:info.maxResumeAttempts,autoResume:info.autoResume});if(sourceAgentNames)entries=entries.filter((e)=>sourceAgentNames.has(e.name));if(options.json){console.log(JSON.stringify(entries,null,2));return}if(entries.length===0){console.log("No agents registered. Use `genie dir add <name> --dir <path>` to register one.");return}console.log(""),console.log(formatLsRow("NAME","DIR","STATUS","TEAM","MODEL")),console.log("-".repeat(106));for(let e of entries)console.log(formatLsRow(e.name,e.dir,e.status,e.team,e.model));console.log("")}function formatLsRow(name,dir,status,team,model){return`${name.padEnd(20).substring(0,20)}${dir.padEnd(30).substring(0,30)}${status.padEnd(44).substring(0,44)}${team.padEnd(12).substring(0,12)}${model}`}var UUID_REGEX;var init_agents=__esm(()=>{init_agent_directory();init_agent_registry();init_audit();init_builtin_agents();init_claude_native_teams();init_codex_config();init_defaults();init_ensure_tmux();init_executor_registry();init_otel_receiver();init_protocol_router_spawn();init_protocol_router();init_provider_adapters();init_registry();init_spawn_command();init_team_manager();init_tmux_wrapper();init_tmux();init_tmux();init_workspace();UUID_REGEX=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i});var exports_codex_logs={};__export(exports_codex_logs,{parseCodexLine:()=>parseCodexLine,extractCodexContent:()=>extractCodexContent,codexTranscriptProvider:()=>codexTranscriptProvider});import{access as access2,readFile as readFile10,readdir as readdir4}from"fs/promises";import{homedir as homedir20}from"os";import{join as join33}from"path";function getCodexDir(){return join33(homedir20(),".codex")}function getSessionsDir(){return join33(getCodexDir(),"sessions")}function getStateDbPath(){return join33(getCodexDir(),"state_5.sqlite")}async function discoverLogPath(worker){let cwd=worker.worktree||worker.repoPath,sqlitePath=await discoverViaSqlite(cwd);if(sqlitePath)try{return await access2(sqlitePath),sqlitePath}catch{}return discoverViaScan(cwd)}async function discoverViaSqlite(cwd){try{let{Database}=await import("bun:sqlite"),dbPath=getStateDbPath(),db=new Database(dbPath,{readonly:!0});try{return db.query("SELECT rollout_path FROM threads WHERE cwd = ? ORDER BY updated_at DESC LIMIT 1").get(cwd)?.rollout_path??null}finally{db.close()}}catch{return null}}async function listDirsDesc(parent,pattern){return(await readdir4(parent)).filter((d)=>pattern.test(d)).sort().reverse()}async function discoverViaScan(cwd){let sessionsDir=getSessionsDir();try{let years=await listDirsDesc(sessionsDir,/^\d{4}$/);for(let year of years.slice(0,2)){let result2=await scanYear(join33(sessionsDir,year),cwd);if(result2)return result2}}catch{}return null}async function scanYear(yearDir,cwd){let months=await listDirsDesc(yearDir,/^\d{2}$/);for(let month of months.slice(0,2)){let result2=await scanMonth(join33(yearDir,month),cwd);if(result2)return result2}return null}async function scanMonth(monthDir,cwd){let days=await listDirsDesc(monthDir,/^\d{2}$/);for(let day of days.slice(0,3)){let result2=await scanDay(join33(monthDir,day),cwd);if(result2)return result2}return null}async function scanDay(dayDir,cwd){let files=(await readdir4(dayDir)).filter((f)=>f.endsWith(".jsonl")).sort().reverse();for(let file of files.slice(0,5)){let filePath=join33(dayDir,file);if((await readSessionMeta(filePath))?.cwd===cwd)return filePath}return null}async function readSessionMeta(filePath){try{let content=await readFile10(filePath,"utf-8"),nlIdx=content.indexOf(`
|
|
1622
1624
|
`),firstLine=nlIdx===-1?content:content.slice(0,nlIdx),entry=JSON.parse(firstLine);if(entry.type==="session_meta"&&entry.payload?.cwd)return{cwd:entry.payload.cwd}}catch{}return null}function parseEventMsg(payload,ts3,base){if(payload.type==="user_message"){let text=String(payload.message??"");return text?[{...base,role:"user",timestamp:ts3,text}]:[]}if(payload.type==="agent_message"){let text=String(payload.message??"");return text?[{...base,role:"assistant",timestamp:ts3,text}]:[]}return[]}function parseResponseMessage(payload,ts3,base){let role=payload.role,text=extractCodexContent(payload.content);if(!text)return[];if(role==="user")return[{...base,role:"user",timestamp:ts3,text}];if(role==="developer")return[{...base,role:"system",timestamp:ts3,text}];if(role==="assistant")return[{...base,role:"assistant",timestamp:ts3,text}];return[]}function parseFunctionCall(payload,ts3,base){let name=String(payload.name??payload.type),callId=String(payload.call_id??""),input={};try{input=typeof payload.arguments==="string"?JSON.parse(payload.arguments):{}}catch{input={raw:payload.arguments}}let cmdText=input.command?String(Array.isArray(input.command)?input.command.join(" "):input.command):name;return[{...base,role:"tool_call",timestamp:ts3,text:`${name}: ${cmdText.slice(0,200)}`,toolCall:{id:callId,name,input}}]}function parseWebSearch(payload,ts3,base){let action=payload.action,query2=String(action?.query??"web search");return[{...base,role:"tool_call",timestamp:ts3,text:`web_search: ${query2.slice(0,200)}`,toolCall:{id:"",name:"web_search",input:{query:query2}}}]}function parseResponseItem(payload,ts3,base){if(payload.type==="message")return parseResponseMessage(payload,ts3,base);if(payload.type==="function_call"||payload.type==="shell")return parseFunctionCall(payload,ts3,base);if(payload.type==="function_call_output"){let output=String(payload.output??"").slice(0,500);return[{...base,role:"tool_result",timestamp:ts3,text:output}]}if(payload.type==="web_search_call")return parseWebSearch(payload,ts3,base);return[]}function parseCodexLine(line){if(!line.trim())return[];let raw;try{raw=JSON.parse(line)}catch{return[]}if(!raw.type||!raw.timestamp)return[];let base={provider:"codex",raw};if(!raw.payload||typeof raw.payload!=="object")return[];if(raw.type==="event_msg")return parseEventMsg(raw.payload,raw.timestamp,base);if(raw.type==="response_item")return parseResponseItem(raw.payload,raw.timestamp,base);return[]}function extractCodexContent(content){if(typeof content==="string")return content;if(!Array.isArray(content))return"";let parts=[];for(let item of content)if(typeof item==="string")parts.push(item);else if(item&&typeof item==="object"){if("text"in item)parts.push(String(item.text));else if("input_text"in item)parts.push(String(item.input_text))}return parts.join(" ")}async function readEntries(logPath){let content;try{content=await readFile10(logPath,"utf-8")}catch{return[]}return content.split(`
|
|
1623
1625
|
`).flatMap(parseCodexLine)}var codexTranscriptProvider;var init_codex_logs=__esm(()=>{codexTranscriptProvider={discoverLogPath,readEntries}});var exports_transcript={};__export(exports_transcript,{readTranscript:()=>readTranscript,getProvider:()=>getProvider2,applyFilter:()=>applyFilter});function applyFilter(entries,filter){if(!filter)return entries;let result2=entries;if(filter.since){let sinceMs=new Date(filter.since).getTime();result2=result2.filter((e)=>new Date(e.timestamp).getTime()>=sinceMs)}if(filter.roles&&filter.roles.length>0){let roles=new Set(filter.roles);result2=result2.filter((e)=>roles.has(e.role))}if(filter.last&&filter.last>0)result2=result2.slice(-filter.last);return result2}async function getClaudeProvider(){if(!_claudeProvider)_claudeProvider=(await Promise.resolve().then(() => (init_claude_logs(),exports_claude_logs))).claudeTranscriptProvider;return _claudeProvider}async function getCodexProvider(){if(!_codexProvider)_codexProvider=(await Promise.resolve().then(() => (init_codex_logs(),exports_codex_logs))).codexTranscriptProvider;return _codexProvider}async function getProvider2(worker){if((worker.provider??"claude")==="codex")return getCodexProvider();return getClaudeProvider()}async function readTranscript(worker,filter){let provider=await getProvider2(worker),logPath=await provider.discoverLogPath(worker);if(!logPath)return[];let entries=await provider.readEntries(logPath);return applyFilter(entries,filter)}var _claudeProvider,_codexProvider;function isTmuxMarkerOrNoise(line){let trimmed=line.trim();if(trimmed.includes("TMUX_MCP_START")||trimmed.includes("TMUX_MCP_DONE_"))return!0;if(line.includes('echo "TMUX_MCP_START"')||line.includes('echo "TMUX_MCP_DONE_'))return!0;if(line.includes("-bash:")||line.includes("warning: setlocale:")||line.includes("cannot change locale"))return!0;if(trimmed==="or directory")return!0;return!1}function stripTmuxMarkers(content){let filtered=content.split(`
|
|
@@ -2296,7 +2298,40 @@ ${answer}
|
|
|
2296
2298
|
WHERE repo_path = ${repo}
|
|
2297
2299
|
AND wish_file LIKE ${pattern}
|
|
2298
2300
|
ORDER BY seq
|
|
2299
|
-
`).map((r)=>({id:r.id,seq:r.seq,title:r.title,stage:r.stage,repoPath:r.repo_path}))}var init_task_close_merged=__esm(()=>{init_wish_state()});var highlights_default="./highlights-ghv9g403.scm";var init_highlights=()=>{};var tree_sitter_javascript_default="./tree-sitter-javascript-nd0q4pe9.wasm";var init_tree_sitter_javascript=()=>{};var highlights_default2="./highlights-eq9cgrbb.scm";var init_highlights2=()=>{};var tree_sitter_typescript_default="./tree-sitter-typescript-zxjzwt75.wasm";var init_tree_sitter_typescript=()=>{};var highlights_default3="./highlights-r812a2qc.scm";var init_highlights3=()=>{};var tree_sitter_markdown_default="./tree-sitter-markdown-411r6y9b.wasm";var init_tree_sitter_markdown=()=>{};var injections_default="./injections-73j83es3.scm";var init_injections=()=>{};var highlights_default4="./highlights-x6tmsnaa.scm";var init_highlights4=()=>{};var tree_sitter_markdown_inline_default="./tree-sitter-markdown_inline-j5349f42.wasm";var init_tree_sitter_markdown_inline=()=>{};var highlights_default5="./highlights-hk7bwhj4.scm";var init_highlights5=()=>{};var tree_sitter_zig_default="./tree-sitter-zig-e78zbjpm.wasm";var init_tree_sitter_zig=()=>{};import{EventEmitter}from"events";import{Buffer as Buffer2}from"buffer";import{Buffer as Buffer3}from"buffer";import{EventEmitter as EventEmitter2}from"events";import{resolve as resolve12,dirname as dirname12}from"path";import{fileURLToPath as fileURLToPath2}from"url";import{resolve as resolve22,isAbsolute,parse as parse2}from"path";import{existsSync as existsSync47}from"fs";import{basename as basename11,join as join59}from"path";import os3 from"os";import path3 from"path";import{EventEmitter as EventEmitter3}from"events";import path22 from"path";import{readFile as readFile22,writeFile as writeFile22,mkdir as mkdir22}from"fs/promises";import*as path4 from"path";import{mkdir as mkdir9,readFile as readFile16,writeFile as writeFile9}from"fs/promises";import*as path32 from"path";import{readdir as readdir7}from"fs/promises";import{dlopen,toArrayBuffer as toArrayBuffer4,JSCallback,ptr as ptr4}from"bun:ffi";import{existsSync as existsSync210,writeFileSync as writeFileSync24}from"fs";import{EventEmitter as EventEmitter4}from"events";import{toArrayBuffer,ptr}from"bun:ffi";import{ptr as ptr2,toArrayBuffer as toArrayBuffer2}from"bun:ffi";import{ptr as ptr3,toArrayBuffer as toArrayBuffer3}from"bun:ffi";import{EventEmitter as EventEmitter5}from"events";import util3 from"util";import{EventEmitter as EventEmitter7}from"events";import{Console}from"console";import fs2 from"fs";import path5 from"path";import util22 from"util";import{Writable}from"stream";import{EventEmitter as EventEmitter6}from"events";import{EventEmitter as EventEmitter8}from"events";function __exportSetter2(name,newValue){this[name]=__returnValue2.bind(null,newValue)}function wrapAssembly(lib){function patch(prototype,name,fn){let original=prototype[name];prototype[name]=function(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return fn.call(this,original,...args)}}for(let fnName of["setPosition","setMargin","setFlexBasis","setWidth","setHeight","setMinWidth","setMinHeight","setMaxWidth","setMaxHeight","setPadding","setGap"]){let methods={[Unit.Point]:lib.Node.prototype[fnName],[Unit.Percent]:lib.Node.prototype[`${fnName}Percent`],[Unit.Auto]:lib.Node.prototype[`${fnName}Auto`]};patch(lib.Node.prototype,fnName,function(original){for(var _len2=arguments.length,args=Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++)args[_key2-1]=arguments[_key2];let value=args.pop(),unit,asNumber;if(value==="auto")unit=Unit.Auto,asNumber=void 0;else if(typeof value==="object")unit=value.unit,asNumber=value.valueOf();else if(unit=typeof value==="string"&&value.endsWith("%")?Unit.Percent:Unit.Point,asNumber=parseFloat(value),value!==void 0&&!Number.isNaN(value)&&Number.isNaN(asNumber))throw Error(`Invalid value ${value} for ${fnName}`);if(!methods[unit])throw Error(`Failed to execute "${fnName}": Unsupported unit '${value}'`);if(asNumber!==void 0)return methods[unit].call(this,...args,asNumber);else return methods[unit].call(this,...args)})}function wrapMeasureFunction(measureFunction){return lib.MeasureCallback.implement({measure:function(){let{width,height:height2}=measureFunction(...arguments);return{width:width??NaN,height:height2??NaN}}})}patch(lib.Node.prototype,"setMeasureFunc",function(original,measureFunc){if(measureFunc)return original.call(this,wrapMeasureFunction(measureFunc));else return this.unsetMeasureFunc()});function wrapDirtiedFunc(dirtiedFunction){return lib.DirtiedCallback.implement({dirtied:dirtiedFunction})}return patch(lib.Node.prototype,"setDirtiedFunc",function(original,dirtiedFunc){original.call(this,wrapDirtiedFunc(dirtiedFunc))}),patch(lib.Config.prototype,"free",function(){lib.Config.destroy(this)}),patch(lib.Node,"create",(_,config)=>{return config?lib.Node.createWithConfig(config):lib.Node.createDefault()}),patch(lib.Node.prototype,"free",function(){lib.Node.destroy(this)}),patch(lib.Node.prototype,"freeRecursive",function(){for(let t=0,T=this.getChildCount();t<T;++t)this.getChild(0).freeRecursive();this.free()}),patch(lib.Node.prototype,"calculateLayout",function(original){let width=arguments.length>1&&arguments[1]!==void 0?arguments[1]:NaN,height2=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,direction=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Direction.LTR;return original.call(this,width,height2,direction)}),{Config:lib.Config,Node:lib.Node,...YGEnums_default}}function isValidBorderStyle(value){return typeof value==="string"&&VALID_BORDER_STYLES.includes(value)}function parseBorderStyle(value,fallback="single"){if(isValidBorderStyle(value))return value;if(value!==void 0&&value!==null)console.warn(`Invalid borderStyle "${value}", falling back to "${fallback}". Valid values are: ${VALID_BORDER_STYLES.join(", ")}`);return fallback}function getBorderFromSides(sides){let result2=[];if(sides.top)result2.push("top");if(sides.right)result2.push("right");if(sides.bottom)result2.push("bottom");if(sides.left)result2.push("left");return result2.length>0?result2:!1}function getBorderSides(border){return border===!0?{top:!0,right:!0,bottom:!0,left:!0}:Array.isArray(border)?{top:border.includes("top"),right:border.includes("right"),bottom:border.includes("bottom"),left:border.includes("left")}:{top:!1,right:!1,bottom:!1,left:!1}}function borderCharsToArray(chars){let array=new Uint32Array(11);return array[0]=chars.topLeft.codePointAt(0),array[1]=chars.topRight.codePointAt(0),array[2]=chars.bottomLeft.codePointAt(0),array[3]=chars.bottomRight.codePointAt(0),array[4]=chars.horizontal.codePointAt(0),array[5]=chars.vertical.codePointAt(0),array[6]=chars.topT.codePointAt(0),array[7]=chars.bottomT.codePointAt(0),array[8]=chars.leftT.codePointAt(0),array[9]=chars.rightT.codePointAt(0),array[10]=chars.cross.codePointAt(0),array}class KeyEvent{name;ctrl;meta;shift;option;sequence;number;raw;eventType;source;code;super;hyper;capsLock;numLock;baseCode;repeated;_defaultPrevented=!1;_propagationStopped=!1;constructor(key){this.name=key.name,this.ctrl=key.ctrl,this.meta=key.meta,this.shift=key.shift,this.option=key.option,this.sequence=key.sequence,this.number=key.number,this.raw=key.raw,this.eventType=key.eventType,this.source=key.source,this.code=key.code,this.super=key.super,this.hyper=key.hyper,this.capsLock=key.capsLock,this.numLock=key.numLock,this.baseCode=key.baseCode,this.repeated=key.repeated}get defaultPrevented(){return this._defaultPrevented}get propagationStopped(){return this._propagationStopped}preventDefault(){this._defaultPrevented=!0}stopPropagation(){this._propagationStopped=!0}}class PasteEvent{type="paste";bytes;metadata;_defaultPrevented=!1;_propagationStopped=!1;constructor(bytes,metadata){this.bytes=bytes,this.metadata=metadata}get defaultPrevented(){return this._defaultPrevented}get propagationStopped(){return this._propagationStopped}preventDefault(){this._defaultPrevented=!0}stopPropagation(){this._propagationStopped=!0}}class RGBA{buffer;constructor(buffer2){this.buffer=buffer2}static fromArray(array){return new RGBA(array)}static fromValues(r,g,b2,a=1){return new RGBA(new Float32Array([r,g,b2,a]))}static fromInts(r,g,b2,a=255){return new RGBA(new Float32Array([r/255,g/255,b2/255,a/255]))}static fromHex(hex){return hexToRgb(hex)}toInts(){return[Math.round(this.r*255),Math.round(this.g*255),Math.round(this.b*255),Math.round(this.a*255)]}get r(){return this.buffer[0]}set r(value){this.buffer[0]=value}get g(){return this.buffer[1]}set g(value){this.buffer[1]=value}get b(){return this.buffer[2]}set b(value){this.buffer[2]=value}get a(){return this.buffer[3]}set a(value){this.buffer[3]=value}map(fn){return[fn(this.r),fn(this.g),fn(this.b),fn(this.a)]}toString(){return`rgba(${this.r.toFixed(2)}, ${this.g.toFixed(2)}, ${this.b.toFixed(2)}, ${this.a.toFixed(2)})`}equals(other){if(!other)return!1;return this.r===other.r&&this.g===other.g&&this.b===other.b&&this.a===other.a}}function hexToRgb(hex){if(hex=hex.replace(/^#/,""),hex.length===3)hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];else if(hex.length===4)hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]+hex[3]+hex[3];if(!/^[0-9A-Fa-f]{6}$/.test(hex)&&!/^[0-9A-Fa-f]{8}$/.test(hex))return console.warn(`Invalid hex color: ${hex}, defaulting to magenta`),RGBA.fromValues(1,0,1,1);let r=parseInt(hex.substring(0,2),16)/255,g=parseInt(hex.substring(2,4),16)/255,b2=parseInt(hex.substring(4,6),16)/255,a=hex.length===8?parseInt(hex.substring(6,8),16)/255:1;return RGBA.fromValues(r,g,b2,a)}function rgbToHex(rgb){return"#"+(rgb.a===1?[rgb.r,rgb.g,rgb.b]:[rgb.r,rgb.g,rgb.b,rgb.a]).map((x)=>{let hex=Math.floor(Math.max(0,Math.min(1,x)*255)).toString(16);return hex.length===1?"0"+hex:hex}).join("")}function hsvToRgb(h,s2,v){let r=0,g=0,b2=0,i2=Math.floor(h/60)%6,f=h/60-Math.floor(h/60),p=v*(1-s2),q=v*(1-f*s2),t=v*(1-(1-f)*s2);switch(i2){case 0:r=v,g=t,b2=p;break;case 1:r=q,g=v,b2=p;break;case 2:r=p,g=v,b2=t;break;case 3:r=p,g=q,b2=v;break;case 4:r=t,g=p,b2=v;break;case 5:r=v,g=p,b2=q;break}return RGBA.fromValues(r,g,b2,1)}function parseColor(color2){if(typeof color2==="string"){let lowerColor=color2.toLowerCase();if(lowerColor==="transparent")return RGBA.fromValues(0,0,0,0);if(CSS_COLOR_NAMES[lowerColor])return hexToRgb(CSS_COLOR_NAMES[lowerColor]);return hexToRgb(color2)}return color2}function parseColorTags(text){let segments=[],currentIndex=0,colorTagRegex=/<c(\d+)>(.*?)<\/c\d+>/g,lastIndex=0,match;while((match=colorTagRegex.exec(text))!==null){if(match.index>lastIndex){let plainText=text.slice(lastIndex,match.index);if(plainText)segments.push({text:plainText,colorIndex:0})}let colorIndex=parseInt(match[1])-1,taggedText=match[2];segments.push({text:taggedText,colorIndex:Math.max(0,colorIndex)}),lastIndex=match.index+match[0].length}if(lastIndex<text.length){let remainingText=text.slice(lastIndex);if(remainingText)segments.push({text:remainingText,colorIndex:0})}return segments}function getParsedFont(fontKey){if(!parsedFonts[fontKey]){let fontDef=fonts[fontKey],parsedChars={};for(let[char,lines]of Object.entries(fontDef.chars))parsedChars[char]=lines.map((line)=>parseColorTags(line));parsedFonts[fontKey]={...fontDef,colors:fontDef.colors||1,chars:parsedChars}}return parsedFonts[fontKey]}function measureText({text,font="tiny"}){let fontDef=getParsedFont(font);if(!fontDef)return console.warn(`Font '${font}' not found`),{width:0,height:0};let currentX=0;for(let i2=0;i2<text.length;i2++){let char=text[i2].toUpperCase(),charDef=fontDef.chars[char];if(!charDef){let spaceChar=fontDef.chars[" "];if(spaceChar&&spaceChar[0]){let spaceWidth=0;for(let segment of spaceChar[0])spaceWidth+=segment.text.length;currentX+=spaceWidth}else currentX+=1;continue}let charWidth=0;if(charDef[0])for(let segment of charDef[0])charWidth+=segment.text.length;if(currentX+=charWidth,i2<text.length-1)currentX+=fontDef.letterspace_size}return{width:currentX,height:fontDef.lines}}function getCharacterPositions(text,font="tiny"){let fontDef=getParsedFont(font);if(!fontDef)return[0];let positions=[0],currentX=0;for(let i2=0;i2<text.length;i2++){let char=text[i2].toUpperCase(),charDef=fontDef.chars[char],charWidth=0;if(!charDef){let spaceChar=fontDef.chars[" "];if(spaceChar&&spaceChar[0])for(let segment of spaceChar[0])charWidth+=segment.text.length;else charWidth=1}else if(charDef[0])for(let segment of charDef[0])charWidth+=segment.text.length;if(currentX+=charWidth,i2<text.length-1)currentX+=fontDef.letterspace_size;positions.push(currentX)}return positions}function coordinateToCharacterIndex(x,text,font="tiny"){let positions=getCharacterPositions(text,font);if(x<0)return 0;for(let i2=0;i2<positions.length-1;i2++){let currentPos=positions[i2],nextPos=positions[i2+1];if(x>=currentPos&&x<nextPos){let charMidpoint=currentPos+(nextPos-currentPos)/2;return x<charMidpoint?i2:i2+1}}if(positions.length>0&&x>=positions[positions.length-1])return text.length;return 0}function renderFontToFrameBuffer(buffer2,{text,x=0,y=0,color:color2=[RGBA.fromInts(255,255,255,255)],backgroundColor=RGBA.fromInts(0,0,0,255),font="tiny"}){let{width,height:height2}=buffer2,fontDef=getParsedFont(font);if(!fontDef)return console.warn(`Font '${font}' not found`),{width:0,height:0};let colors8=Array.isArray(color2)?color2:[color2];if(y<0||y+fontDef.lines>height2)return{width:0,height:fontDef.lines};let currentX=x,startX=x;for(let i2=0;i2<text.length;i2++){let char=text[i2].toUpperCase(),charDef=fontDef.chars[char];if(!charDef){let spaceChar=fontDef.chars[" "];if(spaceChar&&spaceChar[0]){let spaceWidth=0;for(let segment of spaceChar[0])spaceWidth+=segment.text.length;currentX+=spaceWidth}else currentX+=1;continue}let charWidth=0;if(charDef[0])for(let segment of charDef[0])charWidth+=segment.text.length;if(currentX>=width)break;if(currentX+charWidth<0){currentX+=charWidth+fontDef.letterspace_size;continue}for(let lineIdx=0;lineIdx<fontDef.lines&&lineIdx<charDef.length;lineIdx++){let segments=charDef[lineIdx],renderY=y+lineIdx;if(renderY>=0&&renderY<height2){let segmentX=currentX;for(let segment of segments){let segmentColor=colors8[segment.colorIndex]||colors8[0];for(let charIdx=0;charIdx<segment.text.length;charIdx++){let renderX=segmentX+charIdx;if(renderX>=0&&renderX<width){let fontChar=segment.text[charIdx];if(fontChar!==" ")buffer2.setCellWithAlphaBlending(renderX,renderY,fontChar,parseColor(segmentColor),parseColor(backgroundColor))}}segmentX+=segment.text.length}}}if(currentX+=charWidth,i2<text.length-1)currentX+=fontDef.letterspace_size}return{width:currentX-startX,height:fontDef.lines}}function getBaseAttributes(attr){return attr&ATTRIBUTE_BASE_MASK}function createTextAttributes({bold=!1,italic=!1,underline=!1,dim=!1,blink=!1,inverse=!1,hidden=!1,strikethrough=!1}={}){let attributes=TextAttributes.NONE;if(bold)attributes|=TextAttributes.BOLD;if(italic)attributes|=TextAttributes.ITALIC;if(underline)attributes|=TextAttributes.UNDERLINE;if(dim)attributes|=TextAttributes.DIM;if(blink)attributes|=TextAttributes.BLINK;if(inverse)attributes|=TextAttributes.INVERSE;if(hidden)attributes|=TextAttributes.HIDDEN;if(strikethrough)attributes|=TextAttributes.STRIKETHROUGH;return attributes}function attributesWithLink(baseAttributes,linkId){let base=baseAttributes&ATTRIBUTE_BASE_MASK2,linkBits=(linkId&LINK_ID_PAYLOAD_MASK)<<LINK_ID_SHIFT;return base|linkBits}function getLinkId(attributes){return attributes>>>LINK_ID_SHIFT&LINK_ID_PAYLOAD_MASK}function visualizeRenderableTree(renderable,maxDepth=10){function buildTreeLines(node,prefix="",parentPrefix="",isLastChild=!0,depth=0){if(depth>=maxDepth)return[`${prefix}${node.id} ... (max depth reached)`];let lines=[],children=node.getChildren();if(lines.push(`${prefix}${node.id}`),children.length>0){let lastChildIndex=children.length-1;children.forEach((child,index)=>{let childIsLast=index===lastChildIndex,connector=childIsLast?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",childPrefix=parentPrefix+(isLastChild?" ":"\u2502 "),childLines=buildTreeLines(child,childPrefix+connector,childPrefix,childIsLast,depth+1);lines.push(...childLines)})}return lines}let treeLines=buildTreeLines(renderable);console.log(`Renderable Tree:
|
|
2301
|
+
`).map((r)=>({id:r.id,seq:r.seq,title:r.title,stage:r.stage,repoPath:r.repo_path}))}var init_task_close_merged=__esm(()=>{init_wish_state()});import{existsSync as existsSync47,readFileSync as readFileSync30}from"fs";import{join as join59}from"path";function stripBackticks(value){return value.replace(/^`+|`+$/g,"").trim()}function stripBold(value){return value.replace(/^\*\*|\*\*$/g,"").trim()}function detectHeadings(lines){let spans=[],inFence=!1;for(let i2=0;i2<lines.length;i2++){let line=lines[i2];if(/^\s*```/.test(line)){inFence=!inFence;continue}if(inFence)continue;let m=/^(#{1,6})\s+(.*?)\s*$/.exec(line);if(!m)continue;spans.push({title:m[2],level:m[1].length,start:i2+1})}let total=lines.length;for(let i2=0;i2<spans.length;i2++){let current=spans[i2];current.contentStart=current.start+1;let end=total;for(let j=i2+1;j<spans.length;j++){let candidate=spans[j];if(candidate.level<=current.level){end=candidate.start-1;break}}current.end=end}return spans}function sliceContent(lines,span){let start2=span.contentStart-1,end=span.end;return lines.slice(start2,end)}function parseMetadataTable(lines,startLine){let metadata={},sawHeader=!1,sawDivider=!1;for(let i2=0;i2<lines.length;i2++){let line=lines[i2].trim();if(!line.startsWith("|")){if(sawHeader)break;continue}if(!sawHeader){sawHeader=!0;continue}if(!sawDivider){sawDivider=!0;continue}let cells=line.split("|").slice(1,-1).map((c)=>c.trim());if(cells.length<2)continue;let keyRaw=stripBold(cells[0]).toLowerCase(),value=stripBackticks(cells[1]),mapped=METADATA_KEY_MAP[keyRaw];if(mapped)metadata[mapped]=value}if(!sawHeader)throw new WishParseError({rule:"metadata-table-missing-field",line:startLine,message:"Metadata table not found at top of wish"});for(let field of REQUIRED_METADATA_FIELDS)if(!metadata[field])throw new WishParseError({rule:"metadata-table-missing-field",line:startLine,message:`Metadata table is missing required field: ${field}`});return metadata}function parseBullets(lines){let out=[];for(let raw of lines){let m=/^\s*[-*]\s+(.*)$/.exec(raw);if(m)out.push(m[1].trim())}return out}function parseChecklist(lines){let out=[];for(let raw of lines){let m=/^\s*[-*]\s+\[[ xX]\]\s+(.*)$/.exec(raw);if(m)out.push(m[1].trim())}return out}function parsePipeTable(lines){let rows=[],sawHeader=!1,sawDivider=!1;for(let raw of lines){let line=raw.trim();if(!line.startsWith("|")){if(sawHeader)break;continue}if(!sawHeader){sawHeader=!0;continue}if(!sawDivider){sawDivider=!0;continue}let cells=line.split("|").slice(1,-1).map((c)=>c.trim());rows.push(cells)}return rows}function parseDecisions(lines){return parsePipeTable(lines).filter((r)=>r.length>=3).map((cells)=>({number:cells[0],decision:cells[1],rationale:cells[2]}))}function parseRisks(lines){return parsePipeTable(lines).filter((r)=>r.length>=3).map((cells)=>({risk:cells[0],severity:cells[1],mitigation:cells[2]}))}function parseExecutionStrategy2(allLines,span,allSpans){let entries=[],waveSpans=allSpans.filter((s2)=>s2.level===3&&s2.start>span.start&&s2.start<=span.end&&/^wave\s+/i.exec(s2.title));for(let waveSpan of waveSpans){let waveName=(/^(wave\s+\d+)/i.exec(waveSpan.title)?.[1]??waveSpan.title).trim(),rows=parsePipeTable(sliceContent(allLines,waveSpan));for(let row of rows){if(row.length<3)continue;entries.push({wave:waveName,group:row[0],agent:row[1],description:row[2]})}}return entries}function parseDependsOnValue(raw){let trimmed=raw.trim().replace(/\.$/,"");if(!trimmed)return{value:[],malformed:!0};if(/^none$/i.test(trimmed))return{value:"none",malformed:!1};let parts=trimmed.split(/\s*,\s*/).filter(Boolean),refPattern=/^(Group\s+\d+|[\w-]+#\d+)$/i,malformed=parts.some((p)=>!refPattern.test(p));return{value:parts,malformed}}function extractLabeledField(lines,groupStartLine,labelRegex,stopRegex){let idx=lines.findIndex((l)=>labelRegex.test(l));if(idx<0)return{value:"",startLine:groupStartLine,endLine:groupStartLine,found:!1};let labelLine=lines[idx],inlineMatch=labelRegex.exec(labelLine),inline=inlineMatch?labelLine.slice(inlineMatch.index+inlineMatch[0].length).trim():"",collected=[];if(inline)collected.push(inline);let startLine=groupStartLine+idx;idx+=1;while(idx<lines.length){let line=lines[idx];if(stopRegex.test(line))break;collected.push(line),idx+=1}while(collected.length>0&&collected[collected.length-1].trim()==="")collected.pop();return{value:collected.join(`
|
|
2302
|
+
`).trim(),startLine,endLine:groupStartLine+idx-1,found:!0}}function parseExecutionGroup(allLines,headerLine,headerLineNumber,bodyLines,bodyStartLine,bodyEndLine){let headerMatch=/^###\s+Group\s+(\d+)\s*:\s*(.+?)\s*$/i.exec(headerLine);if(!headerMatch)throw new WishParseError({rule:"group-header-format",line:headerLineNumber,message:`Execution group header not in canonical "### Group N: Title" form: ${headerLine.trim()}`});let number=Number.parseInt(headerMatch[1],10),title=headerMatch[2].trim(),stopRegex=/^(\*\*(Goal|Deliverables|Acceptance Criteria|Validation|depends-on)\s*:\*\*|---\s*$)/i,goalField=extractLabeledField(bodyLines,bodyStartLine,/^\*\*Goal:\*\*/i,stopRegex),deliverablesField=extractLabeledField(bodyLines,bodyStartLine,/^\*\*Deliverables:\*\*/i,stopRegex),acceptanceField=extractLabeledField(bodyLines,bodyStartLine,/^\*\*Acceptance Criteria:\*\*/i,stopRegex),validationField=extractLabeledField(bodyLines,bodyStartLine,/^\*\*Validation:\*\*/i,stopRegex),dependsOnField=extractLabeledField(bodyLines,bodyStartLine,/^\*\*depends-on:\*\*/i,stopRegex),acceptanceItems=acceptanceField.found?parseChecklist(acceptanceField.value.split(`
|
|
2303
|
+
`)):[],validationBody="";if(validationField.found){let vLines=validationField.value.split(`
|
|
2304
|
+
`),inFence=!1,fenceTag=null,collected=[];for(let l of vLines){let fenceOpen=/^\s*```(\S*)\s*$/.exec(l);if(fenceOpen){if(!inFence){inFence=!0,fenceTag=fenceOpen[1]||"";continue}inFence=!1;break}if(inFence)collected.push(l)}validationBody=collected.length>0?collected.join(`
|
|
2305
|
+
`):validationField.value}let{value:dependsOnValue}=dependsOnField.found?parseDependsOnValue(dependsOnField.value):{value:[]};return{name:`Group ${number}: ${title}`,number,title,goal:goalField.value,deliverables:deliverablesField.value,acceptanceCriteria:acceptanceItems,validation:validationBody,dependsOn:dependsOnValue,startLine:headerLineNumber,endLine:bodyEndLine}}function parseExecutionGroups(allLines,executionGroupsSpan,allSpans){let groupSpans=allSpans.filter((s2)=>s2.level===3&&s2.start>executionGroupsSpan.start&&s2.start<=executionGroupsSpan.end),groups=[];for(let span of groupSpans){let headerLine=allLines[span.start-1];if(!/^###\s+Group\s+\d+\s*:/i.test(headerLine))continue;let bodyLines=sliceContent(allLines,span);groups.push(parseExecutionGroup(allLines,headerLine,span.start,bodyLines,span.contentStart,span.end))}return groups}function detectStrayGroupHeaders(lines){let inFence=!1;for(let i2=0;i2<lines.length;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(/^###\s+(group|grupo)\s+\d+/i.test(raw)&&!/^###\s+Group\s+\d+\s*:/i.test(raw))return{line:i2+1,text:raw.trim()};if(/^###\s+Group\s+\d+\s*:/i.test(raw))return{line:i2+1,text:raw.trim()}}return null}function stripHorizontalRules(text){return text.split(`
|
|
2306
|
+
`).filter((l)=>!/^\s*-{3,}\s*$/.test(l)).join(`
|
|
2307
|
+
`).trim()}function extractFencedBlock(content){let m=/```[^\n]*\n([\s\S]*?)\n```/m.exec(content);return m?m[1]:""}function parseWish(markdown){let lines=markdown.replace(/\r\n/g,`
|
|
2308
|
+
`).split(`
|
|
2309
|
+
`),spans=detectHeadings(lines),titleSpan=spans.find((s2)=>s2.level===1);if(!titleSpan||!/^Wish:\s*/i.test(titleSpan.title))throw new WishParseError({rule:"missing-title",line:titleSpan?.start??1,message:"Wish must start with a `# Wish: <title>` heading"});let title=titleSpan.title.replace(/^Wish:\s*/i,"").trim(),firstH2=spans.find((s2)=>s2.level===2),metaLines=lines.slice(titleSpan.start,firstH2?firstH2.start-1:lines.length),metadata=parseMetadataTable(metaLines,titleSpan.start+1),summarySpan=spans.find((s2)=>s2.level===2&&/^summary$/i.test(s2.title));if(!summarySpan)throw new WishParseError({rule:"missing-summary",line:firstH2?.start??titleSpan.start,message:"Wish is missing the `## Summary` section"});let summary=sliceContent(lines,summarySpan).join(`
|
|
2310
|
+
`).trim(),scopeSpan=spans.find((s2)=>s2.level===2&&/^scope$/i.test(s2.title)),scopeIn=[],scopeOut=[];if(scopeSpan){let scopeSubs=spans.filter((s2)=>s2.level===3&&s2.start>scopeSpan.start&&s2.start<=scopeSpan.end);for(let sub of scopeSubs){let content=sliceContent(lines,sub);if(/^in\b/i.test(sub.title))scopeIn.push(...parseBullets(content));else if(/^out\b/i.test(sub.title))scopeOut.push(...parseBullets(content))}}let decisionsSpan=spans.find((s2)=>s2.level===2&&/^decisions$/i.test(s2.title)),decisions=decisionsSpan?parseDecisions(sliceContent(lines,decisionsSpan)):[],successSpan=spans.find((s2)=>s2.level===2&&/^success criteria$/i.test(s2.title)),successCriteria=successSpan?parseChecklist(sliceContent(lines,successSpan)):[],strategySpan=spans.find((s2)=>s2.level===2&&/^execution strategy$/i.test(s2.title)),executionStrategy=strategySpan?parseExecutionStrategy2(lines,strategySpan,spans):[],execGroupsSpan=spans.find((s2)=>s2.level===2&&/^execution groups$/i.test(s2.title));if(!execGroupsSpan){let stray=detectStrayGroupHeaders(lines);throw new WishParseError({rule:"missing-execution-groups-header",line:stray?.line??firstH2?.start??titleSpan.start,message:stray?`Wish contains a "${stray.text}" header but the parent "## Execution Groups" header is missing`:"Wish is missing the `## Execution Groups` section"})}let executionGroups=parseExecutionGroups(lines,execGroupsSpan,spans);if(executionGroups.length===0)throw new WishParseError({rule:"missing-execution-group",line:execGroupsSpan.start,message:"Wish contains `## Execution Groups` but no `### Group N: \u2026` subsections"});let qaSpan=spans.find((s2)=>s2.level===2&&/^qa criteria$/i.test(s2.title)),qaCriteria=qaSpan?parseChecklist(sliceContent(lines,qaSpan)):[],risksSpan=spans.find((s2)=>s2.level===2&&/^assumptions\s*\/\s*risks$/i.test(s2.title)),assumptionsRisks=risksSpan?parseRisks(sliceContent(lines,risksSpan)):[],reviewSpan=spans.find((s2)=>s2.level===2&&/^review results$/i.test(s2.title)),reviewResults=reviewSpan?stripHorizontalRules(sliceContent(lines,reviewSpan).join(`
|
|
2311
|
+
`)):"",filesSpan=spans.find((s2)=>s2.level===2&&/^files to create(\/modify)?$/i.test(s2.title)),filesToCreate=filesSpan?extractFencedBlock(sliceContent(lines,filesSpan).join(`
|
|
2312
|
+
`)):"";return{title,metadata,summary,scope:{in:scopeIn,out:scopeOut},decisions,successCriteria,executionStrategy,executionGroups,qaCriteria,assumptionsRisks,reviewResults,filesToCreate}}function parseWishFile(slug,options={}){let root=options.repoRoot??process.cwd(),path3=join59(root,".genie","wishes",slug,"WISH.md");if(!existsSync47(path3))throw new WishParseError({rule:"missing-title",line:1,file:path3,message:`Wish file not found: ${path3}`});let markdown=readFileSync30(path3,"utf8");try{return parseWish(markdown)}catch(err){if(err instanceof WishParseError)throw new WishParseError({rule:err.rule,line:err.line,column:err.column,message:err.message,file:path3});throw err}}var WishParseError,METADATA_KEY_MAP,REQUIRED_METADATA_FIELDS;var init_wish_parser=__esm(()=>{WishParseError=class WishParseError extends Error{rule;line;column;file;constructor(opts){super(opts.message);this.name="WishParseError",this.rule=opts.rule,this.line=opts.line,this.column=opts.column??1,this.file=opts.file}};METADATA_KEY_MAP={status:"status",slug:"slug",date:"date",author:"author",appetite:"appetite",branch:"branch","repos touched":"reposTouched",design:"design"},REQUIRED_METADATA_FIELDS=["status","slug","date","author","appetite","branch"]});var WishMetadataSchema,DecisionRowSchema,WaveEntrySchema,RiskRowSchema,DependsOnSchema,ExecutionGroupSchema,WishDocumentSchema;var init_wish_schema=__esm(()=>{init_zod();WishMetadataSchema=exports_external.object({status:exports_external.string().min(1),slug:exports_external.string().min(1),date:exports_external.string().min(1),author:exports_external.string().min(1),appetite:exports_external.string().min(1),branch:exports_external.string().min(1),reposTouched:exports_external.string().optional(),design:exports_external.string().optional()}),DecisionRowSchema=exports_external.object({number:exports_external.string(),decision:exports_external.string(),rationale:exports_external.string()}),WaveEntrySchema=exports_external.object({wave:exports_external.string(),group:exports_external.string(),agent:exports_external.string(),description:exports_external.string()}),RiskRowSchema=exports_external.object({risk:exports_external.string(),severity:exports_external.string(),mitigation:exports_external.string()}),DependsOnSchema=exports_external.union([exports_external.literal("none"),exports_external.array(exports_external.string().min(1)).min(1)]),ExecutionGroupSchema=exports_external.object({name:exports_external.string().min(1),number:exports_external.number().int().positive(),title:exports_external.string().min(1),goal:exports_external.string().min(1),deliverables:exports_external.string().min(1),acceptanceCriteria:exports_external.array(exports_external.string().min(1)).min(1),validation:exports_external.string(),dependsOn:DependsOnSchema,startLine:exports_external.number().int().positive(),endLine:exports_external.number().int().positive()}),WishDocumentSchema=exports_external.object({title:exports_external.string().min(1),metadata:WishMetadataSchema,summary:exports_external.string().min(1),scope:exports_external.object({in:exports_external.array(exports_external.string()),out:exports_external.array(exports_external.string().min(1)).min(1,"OUT scope must contain at least one bullet")}),decisions:exports_external.array(DecisionRowSchema),successCriteria:exports_external.array(exports_external.string().min(1)),executionStrategy:exports_external.array(WaveEntrySchema),executionGroups:exports_external.array(ExecutionGroupSchema).min(1,"Wish must contain at least one execution group"),qaCriteria:exports_external.array(exports_external.string()),assumptionsRisks:exports_external.array(RiskRowSchema),reviewResults:exports_external.string(),filesToCreate:exports_external.string()}).superRefine((doc,ctx)=>{let validNumbers=new Set(doc.executionGroups.map((g)=>g.number));for(let group of doc.executionGroups){if(group.dependsOn==="none")continue;for(let ref of group.dependsOn){let m=/^Group\s+(\d+)$/i.exec(ref.trim());if(!m)continue;let n=Number.parseInt(m[1],10);if(!validNumbers.has(n))ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["executionGroups"],message:`Group ${group.number} depends-on references non-existent Group ${n}`})}}})});var exports_wish_lint={};__export(exports_wish_lint,{lintWish:()=>lintWish,lintMarkdown:()=>lintMarkdown,formatLintReport:()=>formatLintReport,applyFixes:()=>applyFixes});function buildSummary(violations){let fixable=0,unfixable=0;for(let v of violations)if(v.fixable)fixable++;else unfixable++;return{total:violations.length,fixable,unfixable}}function findExecGroupsRange(lines){let inFence=!1,start2=-1;for(let i2=0;i2<lines.length;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(/^##\s+Execution Groups\s*$/i.test(raw)){start2=i2;continue}if(start2>=0&&/^##\s+/.test(raw))return{start:start2,end:i2-1}}if(start2>=0)return{start:start2,end:lines.length-1};return null}function findFirstGroupHeaderLine(lines){let inFence=!1;for(let i2=0;i2<lines.length;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(/^###\s+(group|grupo)\s+\d+/i.test(raw))return i2}return-1}function rewriteStrayGroupHeader(raw){let m=STRAY_GROUP_HEADER.exec(raw);if(!m)return null;let number=m[2],rest=(m[4]??"").trim();return`### Group ${number}: ${rest||"<TODO title>"}`}function detectParseErrorViolation(err){let parseRule=err.rule,fixable=Boolean({"missing-execution-groups-header":!0,"group-header-format":!0,"metadata-table-missing-field":!0}[parseRule]);return{rule:parseRule,severity:"error",line:err.line,column:err.column??1,message:err.message,fixable,fix:null}}function scanStrayGroupHeaders(lines,execRange){let out=[],inFence=!1,startIdx=execRange?execRange.start+1:0,endIdx=execRange?execRange.end:lines.length-1;for(let i2=startIdx;i2<=endIdx;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(CANONICAL_GROUP_HEADER.test(raw))continue;if(!STRAY_GROUP_HEADER.exec(raw))continue;let rewritten=rewriteStrayGroupHeader(raw)??raw;out.push({rule:"group-header-format",severity:"error",line:i2+1,column:1,message:`Group header "${raw.trim()}" is not in canonical "### Group N: Title" form`,fixable:!0,fix:{kind:"rewrite",at:{line:i2+1},content:rewritten,range:{endLine:i2+1,endColumn:(raw.length||1)+1}}})}return out}function scanGroupFieldLabels(doc,lines){let out=[];for(let group of doc.executionGroups){let start2=Math.max(0,group.startLine),end=Math.min(lines.length,group.endLine),slice=lines.slice(start2,end);for(let{label,regex,rule}of REQUIRED_FIELD_LABELS){if(slice.findIndex((l)=>regex.test(l))>=0)continue;let insertAt=start2+1;out.push({rule,severity:"error",line:group.startLine,column:1,message:`Group ${group.number} (${group.title}) is missing the ${label} field label`,fixable:!0,fix:{kind:"insert",at:{line:insertAt},content:`
|
|
2313
|
+
${label} <TODO>
|
|
2314
|
+
`}})}}return out}function scanEmptyFieldContent(doc,lines){let out=[];for(let group of doc.executionGroups){let start2=Math.max(0,group.startLine),end=Math.min(lines.length,group.endLine),slice=lines.slice(start2,end),hasLabel=(regex)=>slice.some((l)=>regex.test(l)),checks=[{labelRegex:/^\*\*Goal\s*:\*\*/i,value:group.goal,rule:"missing-goal-field",name:"Goal"},{labelRegex:/^\*\*Deliverables\s*:\*\*/i,value:group.deliverables,rule:"missing-deliverables-field",name:"Deliverables"},{labelRegex:/^\*\*Acceptance Criteria\s*:\*\*/i,value:group.acceptanceCriteria.length>0?"x":"",rule:"missing-acceptance-field",name:"Acceptance Criteria"},{labelRegex:/^\*\*depends-on\s*:\*\*/i,value:group.dependsOn==="none"||Array.isArray(group.dependsOn)&&group.dependsOn.length>0?"x":"",rule:"missing-depends-on-field",name:"depends-on"}];for(let{labelRegex,value,rule,name}of checks){if(!hasLabel(labelRegex))continue;if(value.trim()!=="")continue;out.push({rule,severity:"error",line:group.startLine,column:1,message:`Group ${group.number} (${group.title}) has the ${name} label but no content`,fixable:!1,fix:null})}}return out}function findValidationFenceInfo(lines,group){let start2=Math.max(0,group.startLine),end=Math.min(lines.length,group.endLine),labelLine=-1;for(let i2=start2;i2<end;i2++)if(/^\*\*Validation\s*:\*\*/i.test(lines[i2])){labelLine=i2;break}if(labelLine<0)return null;let fenceLine=-1,fenceTag=null,fenceClose=null;for(let i2=labelLine+1;i2<end;i2++){let raw=lines[i2];if(/^\*\*(Goal|Deliverables|Acceptance Criteria|depends-on)\s*:\*\*/i.test(raw))break;let fenceOpen=/^\s*```(\S*)\s*$/.exec(raw);if(fenceOpen&&fenceLine<0){fenceLine=i2,fenceTag=fenceOpen[1]||"";continue}if(fenceLine>=0&&/^\s*```\s*$/.test(raw)){fenceClose=i2;break}}return{labelLine,fenceLine,fenceTag,fenceClose}}function scanValidation(doc,lines){let out=[];for(let group of doc.executionGroups){let info=findValidationFenceInfo(lines,group);if(!info)continue;if(info.fenceLine<0){let start2=info.labelLine+1,end=group.endLine;for(let j=start2;j<end;j++)if(/^\*\*(Goal|Deliverables|Acceptance Criteria|depends-on)\s*:\*\*/i.test(lines[j])){end=j;break}let contentLines=[];for(let j=start2;j<end;j++)contentLines.push(lines[j]);while(contentLines.length>0&&contentLines[contentLines.length-1].trim()==="")contentLines.pop();if(!contentLines.some((l)=>l.trim()!=="")){out.push({rule:"missing-validation-command",severity:"error",line:info.labelLine+1,column:1,message:"Validation block is empty \u2014 add a fenced `bash` block with the verification command",fixable:!1,fix:null});continue}out.push({rule:"validation-not-fenced-bash",severity:"error",line:info.labelLine+1,column:1,message:"Validation block is not wrapped in a ```bash fenced code block",fixable:!0,fix:{kind:"rewrite",at:{line:info.labelLine+2},content:["```bash",...contentLines,"```"].join(`
|
|
2315
|
+
`),range:{endLine:info.labelLine+1+contentLines.length,endColumn:1}}});continue}if(info.fenceTag!=="bash")out.push({rule:"validation-not-fenced-bash",severity:"error",line:info.fenceLine+1,column:1,message:`Validation fence has tag "${info.fenceTag??"<none>"}" \u2014 expected \`bash\``,fixable:!0,fix:{kind:"rewrite",at:{line:info.fenceLine+1},content:"```bash",range:{endLine:info.fenceLine+1,endColumn:(lines[info.fenceLine].length||1)+1}}});if(info.fenceClose!==null){let body=[];for(let j=info.fenceLine+1;j<info.fenceClose;j++)body.push(lines[j]);if(!body.some((l)=>l.trim()!==""))out.push({rule:"missing-validation-command",severity:"error",line:info.fenceLine+1,column:1,message:"Validation bash block is empty \u2014 add a command that verifies this group",fixable:!1,fix:null})}}return out}function scanScope(doc,lines){let out=[],scopeHeaderLine=-1,inFence=!1;for(let i2=0;i2<lines.length;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;if(/^##\s+Scope\s*$/i.test(raw)){scopeHeaderLine=i2;break}}if(scopeHeaderLine<0)return out.push({rule:"scope-section-missing",severity:"error",line:1,column:1,message:"Wish is missing the `## Scope` section",fixable:!1,fix:null}),out;let endIdx=(()=>{for(let i2=scopeHeaderLine+1;i2<lines.length;i2++)if(/^##\s+/.test(lines[i2]))return i2;return lines.length})(),hasIn=lines.slice(scopeHeaderLine+1,endIdx).some((l)=>/^###\s+IN\b/i.test(l)),hasOut=lines.slice(scopeHeaderLine+1,endIdx).some((l)=>/^###\s+OUT\b/i.test(l));if(!hasIn&&!hasOut)return out.push({rule:"scope-section-missing",severity:"error",line:scopeHeaderLine+1,column:1,message:"`## Scope` section has no `### IN` or `### OUT` subsections",fixable:!1,fix:null}),out;if(!hasOut)out.push({rule:"scope-section-missing",severity:"error",line:scopeHeaderLine+1,column:1,message:"`## Scope` is missing the `### OUT` subsection",fixable:!0,fix:{kind:"insert",at:{line:endIdx+1},content:`### OUT
|
|
2316
|
+
|
|
2317
|
+
- <TODO>
|
|
2318
|
+
|
|
2319
|
+
`}});if(!hasIn)out.push({rule:"scope-section-missing",severity:"error",line:scopeHeaderLine+1,column:1,message:"`## Scope` is missing the `### IN` subsection",fixable:!0,fix:{kind:"insert",at:{line:scopeHeaderLine+2},content:`
|
|
2320
|
+
### IN
|
|
2321
|
+
|
|
2322
|
+
- <TODO>
|
|
2323
|
+
`}});if(hasOut&&doc.scope.out.length===0){let outLine=-1;for(let i2=scopeHeaderLine+1;i2<endIdx;i2++)if(/^###\s+OUT\b/i.test(lines[i2])){outLine=i2;break}out.push({rule:"empty-out-scope",severity:"error",line:(outLine>=0?outLine:scopeHeaderLine)+1,column:1,message:"`### OUT` scope has no bullets \u2014 list at least one explicit exclusion",fixable:!1,fix:null})}return out}function scanDependsOn(doc,lines){let out=[],validNumbers=new Set(doc.executionGroups.map((g)=>g.number));for(let group of doc.executionGroups){let start2=Math.max(0,group.startLine),end=Math.min(lines.length,group.endLine),dependsLine=-1;for(let i2=start2;i2<end;i2++)if(/^\*\*depends-on\s*:\*\*/i.test(lines[i2])){dependsLine=i2;break}if(dependsLine<0)continue;let labelLine=lines[dependsLine],rawValue=labelLine.replace(/^\*\*depends-on\s*:\*\*/i,"").trim();if(!rawValue)continue;if(/^none$/i.test(rawValue.replace(/\.$/,"")))continue;let parts=rawValue.replace(/\.$/,"").split(/\s*,\s*/).map((p)=>p.trim().replace(/\s*\(.*$/,"").trim()).filter(Boolean),refPattern=/^(Group\s+\d+|[\w-]+#\d+)$/i,canonicalParts=[],anyMalformed=!1;for(let raw of parts){if(refPattern.test(raw)){canonicalParts.push(raw.replace(/^group\s+/i,"Group "));continue}let numbers=[...raw.matchAll(/(\d+)/g)].map((m)=>Number.parseInt(m[1],10));if(numbers.length>0){for(let n of numbers)canonicalParts.push(`Group ${n}`);anyMalformed=!0;continue}canonicalParts.push(raw),anyMalformed=!0}if(anyMalformed){let refs=canonicalParts.filter((p)=>/^Group\s+\d+$/i.test(p));if(refs.length>0&&refs.every((r)=>{let m=/^Group\s+(\d+)$/i.exec(r);if(!m)return!1;return validNumbers.has(Number.parseInt(m[1],10))})){let fixed=`**depends-on:** ${canonicalParts.join(", ")}`;out.push({rule:"depends-on-malformed",severity:"error",line:dependsLine+1,column:1,message:`depends-on value "${rawValue}" is not in canonical "Group N, Group M" form`,fixable:!0,fix:{kind:"rewrite",at:{line:dependsLine+1},content:fixed,range:{endLine:dependsLine+1,endColumn:(labelLine.length||1)+1}}})}else out.push({rule:"depends-on-malformed",severity:"error",line:dependsLine+1,column:1,message:`depends-on value "${rawValue}" cannot be parsed \u2014 expected "none" or "Group N[, Group M]"`,fixable:!1,fix:null})}for(let ref of canonicalParts){let m=/^Group\s+(\d+)$/i.exec(ref);if(!m)continue;let n=Number.parseInt(m[1],10);if(!validNumbers.has(n))out.push({rule:"depends-on-dangling",severity:"error",line:dependsLine+1,column:1,message:`Group ${group.number} depends-on references non-existent Group ${n}`,fixable:!1,fix:null})}}return out}function stripInlineCodeSpans(line){return line.replace(/`[^`]*`/g,(m)=>" ".repeat(m.length))}function scanTodoPlaceholders(lines){let out=[],inFence=!1;for(let i2=0;i2<lines.length;i2++){let raw=lines[i2];if(/^\s*```/.test(raw)){inFence=!inFence;continue}if(inFence)continue;let scanned=stripInlineCodeSpans(raw),match=/<TODO[^>]*>/.exec(scanned);if(match)out.push({rule:"todo-placeholder-remaining",severity:"error",line:i2+1,column:(match.index??0)+1,message:`Placeholder "${match[0]}" still present \u2014 replace with real content before dispatch`,fixable:!1,fix:null})}return out}function lintWish(docOrError,markdown,options={}){let lines=markdown.replace(/\r\n/g,`
|
|
2324
|
+
`).split(`
|
|
2325
|
+
`),violations=[];if(docOrError instanceof WishParseError){if(violations.push(detectParseErrorViolation(docOrError)),docOrError.rule==="missing-execution-groups-header"){let firstGroup=findFirstGroupHeaderLine(lines);if(firstGroup>=0){let pv=violations[0];pv.fix={kind:"insert",at:{line:firstGroup+1},content:`## Execution Groups
|
|
2326
|
+
|
|
2327
|
+
`}}violations.push(...scanStrayGroupHeaders(lines,null))}return finalize(violations,docOrError,options)}let doc=docOrError,execRange=findExecGroupsRange(lines);if(violations.push(...scanStrayGroupHeaders(lines,execRange)),violations.push(...scanGroupFieldLabels(doc,lines)),violations.push(...scanEmptyFieldContent(doc,lines)),violations.push(...scanValidation(doc,lines)),violations.push(...scanScope(doc,lines)),violations.push(...scanDependsOn(doc,lines)),!options.allowTodoPlaceholders)violations.push(...scanTodoPlaceholders(lines));let schemaResult=WishDocumentSchema.safeParse(doc);if(!schemaResult.success)for(let issue of schemaResult.error.issues){let path3=issue.path.join(".");if(path3.startsWith("scope.out")&&violations.some((v)=>v.rule==="empty-out-scope")||path3.startsWith("executionGroups")&&/Group \d+ depends-on references/.test(issue.message)||/min|minimum/i.test(issue.message)&&violations.some((v)=>v.rule.startsWith("missing-")||v.rule==="empty-out-scope"))continue}return finalize(violations,doc,options)}function finalize(violations,docOrError,_options){let seen=new Set,deduped=[];for(let v of violations){let key=`${v.rule}|${v.line}|${v.column}|${v.message}`;if(seen.has(key))continue;seen.add(key),deduped.push(v)}deduped.sort((a,b2)=>a.line-b2.line||a.column-b2.column||a.rule.localeCompare(b2.rule));let wish=docOrError instanceof WishParseError?"":docOrError.metadata.slug,file=docOrError instanceof WishParseError?docOrError.file??"":"";return{wish,file,violations:deduped,summary:buildSummary(deduped)}}function applyFixes(markdown,report){let lines=markdown.replace(/\r\n/g,`
|
|
2328
|
+
`).split(`
|
|
2329
|
+
`),fixes=report.violations.filter((v)=>v.fixable&&v.fix!==null).map((v)=>v.fix);fixes.sort((a,b2)=>{let la=a.kind==="insert"?a.at.line:a.at.line;return(b2.kind==="insert"?b2.at.line:b2.at.line)-la});for(let fix of fixes){if(fix.kind==="insert"){let idx=Math.max(0,Math.min(lines.length,fix.at.line-1)),insertLines=(fix.content??"").split(`
|
|
2330
|
+
`);if(insertLines.length>0&&insertLines[insertLines.length-1]==="")insertLines.pop();lines.splice(idx,0,...insertLines);continue}if(fix.kind==="rewrite"){let startIdx=Math.max(0,fix.at.line-1),endLine=fix.range?.endLine??fix.at.line,endIdx=Math.max(startIdx,endLine-1),newLines=(fix.content??"").split(`
|
|
2331
|
+
`);lines.splice(startIdx,endIdx-startIdx+1,...newLines);continue}if(fix.kind==="delete"){let startIdx=Math.max(0,fix.at.line-1),endLine=fix.range?.endLine??fix.at.line,endIdx=Math.max(startIdx,endLine-1);lines.splice(startIdx,endIdx-startIdx+1)}}return lines.join(`
|
|
2332
|
+
`)}function lintMarkdown(markdown,options={}){try{let doc=parseWish(markdown);return lintWish(doc,markdown,options)}catch(err){if(err instanceof WishParseError)return lintWish(err,markdown,options);throw err}}function formatLintReport(report,options={}){let color2=options.color??!1,path3=options.path??report.file??"<wish>",red=(s2)=>color2?`\x1B[31m${s2}\x1B[0m`:s2,yellow=(s2)=>color2?`\x1B[33m${s2}\x1B[0m`:s2,dim=(s2)=>color2?`\x1B[2m${s2}\x1B[0m`:s2,lines=[];if(report.violations.length===0)return lines.push(dim(`${path3}: no violations \u2014 wish is structurally clean`)),lines.join(`
|
|
2333
|
+
`);for(let v of report.violations){let sev=v.severity==="error"?red(v.severity):yellow(v.severity),fixTag=v.fixable?dim(" (fixable)"):"";lines.push(`${path3}:${v.line}:${v.column}: ${sev} [${v.rule}]${fixTag} \u2014 ${v.message}`)}return lines.push(""),lines.push(`${report.summary.total} violation(s): ${report.summary.fixable} fixable, ${report.summary.unfixable} unfixable`),lines.join(`
|
|
2334
|
+
`)}var REQUIRED_FIELD_LABELS,STRAY_GROUP_HEADER,CANONICAL_GROUP_HEADER;var init_wish_lint=__esm(()=>{init_wish_parser();init_wish_schema();REQUIRED_FIELD_LABELS=[{label:"**Goal:**",regex:/^\*\*Goal\s*:\*\*/i,rule:"missing-goal-field"},{label:"**Deliverables:**",regex:/^\*\*Deliverables\s*:\*\*/i,rule:"missing-deliverables-field"},{label:"**Acceptance Criteria:**",regex:/^\*\*Acceptance Criteria\s*:\*\*/i,rule:"missing-acceptance-field"},{label:"**Validation:**",regex:/^\*\*Validation\s*:\*\*/i,rule:"missing-validation-field"},{label:"**depends-on:**",regex:/^\*\*depends-on\s*:\*\*/i,rule:"missing-depends-on-field"}],STRAY_GROUP_HEADER=/^###\s+(group|grupo)\s+(\d+)\s*([-\u2014:])?\s*(.*)$/i,CANONICAL_GROUP_HEADER=/^###\s+Group\s+\d+\s*:/});var highlights_default="./highlights-ghv9g403.scm";var init_highlights=()=>{};var tree_sitter_javascript_default="./tree-sitter-javascript-nd0q4pe9.wasm";var init_tree_sitter_javascript=()=>{};var highlights_default2="./highlights-eq9cgrbb.scm";var init_highlights2=()=>{};var tree_sitter_typescript_default="./tree-sitter-typescript-zxjzwt75.wasm";var init_tree_sitter_typescript=()=>{};var highlights_default3="./highlights-r812a2qc.scm";var init_highlights3=()=>{};var tree_sitter_markdown_default="./tree-sitter-markdown-411r6y9b.wasm";var init_tree_sitter_markdown=()=>{};var injections_default="./injections-73j83es3.scm";var init_injections=()=>{};var highlights_default4="./highlights-x6tmsnaa.scm";var init_highlights4=()=>{};var tree_sitter_markdown_inline_default="./tree-sitter-markdown_inline-j5349f42.wasm";var init_tree_sitter_markdown_inline=()=>{};var highlights_default5="./highlights-hk7bwhj4.scm";var init_highlights5=()=>{};var tree_sitter_zig_default="./tree-sitter-zig-e78zbjpm.wasm";var init_tree_sitter_zig=()=>{};import{EventEmitter}from"events";import{Buffer as Buffer2}from"buffer";import{Buffer as Buffer3}from"buffer";import{EventEmitter as EventEmitter2}from"events";import{resolve as resolve12,dirname as dirname13}from"path";import{fileURLToPath as fileURLToPath2}from"url";import{resolve as resolve22,isAbsolute,parse as parse2}from"path";import{existsSync as existsSync49}from"fs";import{basename as basename11,join as join61}from"path";import os3 from"os";import path3 from"path";import{EventEmitter as EventEmitter3}from"events";import path22 from"path";import{readFile as readFile22,writeFile as writeFile22,mkdir as mkdir22}from"fs/promises";import*as path4 from"path";import{mkdir as mkdir10,readFile as readFile17,writeFile as writeFile10}from"fs/promises";import*as path32 from"path";import{readdir as readdir8}from"fs/promises";import{dlopen,toArrayBuffer as toArrayBuffer4,JSCallback,ptr as ptr4}from"bun:ffi";import{existsSync as existsSync210,writeFileSync as writeFileSync24}from"fs";import{EventEmitter as EventEmitter4}from"events";import{toArrayBuffer,ptr}from"bun:ffi";import{ptr as ptr2,toArrayBuffer as toArrayBuffer2}from"bun:ffi";import{ptr as ptr3,toArrayBuffer as toArrayBuffer3}from"bun:ffi";import{EventEmitter as EventEmitter5}from"events";import util3 from"util";import{EventEmitter as EventEmitter7}from"events";import{Console}from"console";import fs2 from"fs";import path5 from"path";import util22 from"util";import{Writable}from"stream";import{EventEmitter as EventEmitter6}from"events";import{EventEmitter as EventEmitter8}from"events";function __exportSetter2(name,newValue){this[name]=__returnValue2.bind(null,newValue)}function wrapAssembly(lib){function patch(prototype,name,fn){let original=prototype[name];prototype[name]=function(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return fn.call(this,original,...args)}}for(let fnName of["setPosition","setMargin","setFlexBasis","setWidth","setHeight","setMinWidth","setMinHeight","setMaxWidth","setMaxHeight","setPadding","setGap"]){let methods={[Unit.Point]:lib.Node.prototype[fnName],[Unit.Percent]:lib.Node.prototype[`${fnName}Percent`],[Unit.Auto]:lib.Node.prototype[`${fnName}Auto`]};patch(lib.Node.prototype,fnName,function(original){for(var _len2=arguments.length,args=Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++)args[_key2-1]=arguments[_key2];let value=args.pop(),unit,asNumber;if(value==="auto")unit=Unit.Auto,asNumber=void 0;else if(typeof value==="object")unit=value.unit,asNumber=value.valueOf();else if(unit=typeof value==="string"&&value.endsWith("%")?Unit.Percent:Unit.Point,asNumber=parseFloat(value),value!==void 0&&!Number.isNaN(value)&&Number.isNaN(asNumber))throw Error(`Invalid value ${value} for ${fnName}`);if(!methods[unit])throw Error(`Failed to execute "${fnName}": Unsupported unit '${value}'`);if(asNumber!==void 0)return methods[unit].call(this,...args,asNumber);else return methods[unit].call(this,...args)})}function wrapMeasureFunction(measureFunction){return lib.MeasureCallback.implement({measure:function(){let{width,height:height2}=measureFunction(...arguments);return{width:width??NaN,height:height2??NaN}}})}patch(lib.Node.prototype,"setMeasureFunc",function(original,measureFunc){if(measureFunc)return original.call(this,wrapMeasureFunction(measureFunc));else return this.unsetMeasureFunc()});function wrapDirtiedFunc(dirtiedFunction){return lib.DirtiedCallback.implement({dirtied:dirtiedFunction})}return patch(lib.Node.prototype,"setDirtiedFunc",function(original,dirtiedFunc){original.call(this,wrapDirtiedFunc(dirtiedFunc))}),patch(lib.Config.prototype,"free",function(){lib.Config.destroy(this)}),patch(lib.Node,"create",(_,config)=>{return config?lib.Node.createWithConfig(config):lib.Node.createDefault()}),patch(lib.Node.prototype,"free",function(){lib.Node.destroy(this)}),patch(lib.Node.prototype,"freeRecursive",function(){for(let t=0,T=this.getChildCount();t<T;++t)this.getChild(0).freeRecursive();this.free()}),patch(lib.Node.prototype,"calculateLayout",function(original){let width=arguments.length>1&&arguments[1]!==void 0?arguments[1]:NaN,height2=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,direction=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Direction.LTR;return original.call(this,width,height2,direction)}),{Config:lib.Config,Node:lib.Node,...YGEnums_default}}function isValidBorderStyle(value){return typeof value==="string"&&VALID_BORDER_STYLES.includes(value)}function parseBorderStyle(value,fallback="single"){if(isValidBorderStyle(value))return value;if(value!==void 0&&value!==null)console.warn(`Invalid borderStyle "${value}", falling back to "${fallback}". Valid values are: ${VALID_BORDER_STYLES.join(", ")}`);return fallback}function getBorderFromSides(sides){let result2=[];if(sides.top)result2.push("top");if(sides.right)result2.push("right");if(sides.bottom)result2.push("bottom");if(sides.left)result2.push("left");return result2.length>0?result2:!1}function getBorderSides(border){return border===!0?{top:!0,right:!0,bottom:!0,left:!0}:Array.isArray(border)?{top:border.includes("top"),right:border.includes("right"),bottom:border.includes("bottom"),left:border.includes("left")}:{top:!1,right:!1,bottom:!1,left:!1}}function borderCharsToArray(chars){let array=new Uint32Array(11);return array[0]=chars.topLeft.codePointAt(0),array[1]=chars.topRight.codePointAt(0),array[2]=chars.bottomLeft.codePointAt(0),array[3]=chars.bottomRight.codePointAt(0),array[4]=chars.horizontal.codePointAt(0),array[5]=chars.vertical.codePointAt(0),array[6]=chars.topT.codePointAt(0),array[7]=chars.bottomT.codePointAt(0),array[8]=chars.leftT.codePointAt(0),array[9]=chars.rightT.codePointAt(0),array[10]=chars.cross.codePointAt(0),array}class KeyEvent{name;ctrl;meta;shift;option;sequence;number;raw;eventType;source;code;super;hyper;capsLock;numLock;baseCode;repeated;_defaultPrevented=!1;_propagationStopped=!1;constructor(key){this.name=key.name,this.ctrl=key.ctrl,this.meta=key.meta,this.shift=key.shift,this.option=key.option,this.sequence=key.sequence,this.number=key.number,this.raw=key.raw,this.eventType=key.eventType,this.source=key.source,this.code=key.code,this.super=key.super,this.hyper=key.hyper,this.capsLock=key.capsLock,this.numLock=key.numLock,this.baseCode=key.baseCode,this.repeated=key.repeated}get defaultPrevented(){return this._defaultPrevented}get propagationStopped(){return this._propagationStopped}preventDefault(){this._defaultPrevented=!0}stopPropagation(){this._propagationStopped=!0}}class PasteEvent{type="paste";bytes;metadata;_defaultPrevented=!1;_propagationStopped=!1;constructor(bytes,metadata){this.bytes=bytes,this.metadata=metadata}get defaultPrevented(){return this._defaultPrevented}get propagationStopped(){return this._propagationStopped}preventDefault(){this._defaultPrevented=!0}stopPropagation(){this._propagationStopped=!0}}class RGBA{buffer;constructor(buffer2){this.buffer=buffer2}static fromArray(array){return new RGBA(array)}static fromValues(r,g,b2,a=1){return new RGBA(new Float32Array([r,g,b2,a]))}static fromInts(r,g,b2,a=255){return new RGBA(new Float32Array([r/255,g/255,b2/255,a/255]))}static fromHex(hex){return hexToRgb(hex)}toInts(){return[Math.round(this.r*255),Math.round(this.g*255),Math.round(this.b*255),Math.round(this.a*255)]}get r(){return this.buffer[0]}set r(value){this.buffer[0]=value}get g(){return this.buffer[1]}set g(value){this.buffer[1]=value}get b(){return this.buffer[2]}set b(value){this.buffer[2]=value}get a(){return this.buffer[3]}set a(value){this.buffer[3]=value}map(fn){return[fn(this.r),fn(this.g),fn(this.b),fn(this.a)]}toString(){return`rgba(${this.r.toFixed(2)}, ${this.g.toFixed(2)}, ${this.b.toFixed(2)}, ${this.a.toFixed(2)})`}equals(other){if(!other)return!1;return this.r===other.r&&this.g===other.g&&this.b===other.b&&this.a===other.a}}function hexToRgb(hex){if(hex=hex.replace(/^#/,""),hex.length===3)hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];else if(hex.length===4)hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]+hex[3]+hex[3];if(!/^[0-9A-Fa-f]{6}$/.test(hex)&&!/^[0-9A-Fa-f]{8}$/.test(hex))return console.warn(`Invalid hex color: ${hex}, defaulting to magenta`),RGBA.fromValues(1,0,1,1);let r=parseInt(hex.substring(0,2),16)/255,g=parseInt(hex.substring(2,4),16)/255,b2=parseInt(hex.substring(4,6),16)/255,a=hex.length===8?parseInt(hex.substring(6,8),16)/255:1;return RGBA.fromValues(r,g,b2,a)}function rgbToHex(rgb){return"#"+(rgb.a===1?[rgb.r,rgb.g,rgb.b]:[rgb.r,rgb.g,rgb.b,rgb.a]).map((x)=>{let hex=Math.floor(Math.max(0,Math.min(1,x)*255)).toString(16);return hex.length===1?"0"+hex:hex}).join("")}function hsvToRgb(h,s2,v){let r=0,g=0,b2=0,i2=Math.floor(h/60)%6,f=h/60-Math.floor(h/60),p=v*(1-s2),q=v*(1-f*s2),t=v*(1-(1-f)*s2);switch(i2){case 0:r=v,g=t,b2=p;break;case 1:r=q,g=v,b2=p;break;case 2:r=p,g=v,b2=t;break;case 3:r=p,g=q,b2=v;break;case 4:r=t,g=p,b2=v;break;case 5:r=v,g=p,b2=q;break}return RGBA.fromValues(r,g,b2,1)}function parseColor(color2){if(typeof color2==="string"){let lowerColor=color2.toLowerCase();if(lowerColor==="transparent")return RGBA.fromValues(0,0,0,0);if(CSS_COLOR_NAMES[lowerColor])return hexToRgb(CSS_COLOR_NAMES[lowerColor]);return hexToRgb(color2)}return color2}function parseColorTags(text){let segments=[],currentIndex=0,colorTagRegex=/<c(\d+)>(.*?)<\/c\d+>/g,lastIndex=0,match;while((match=colorTagRegex.exec(text))!==null){if(match.index>lastIndex){let plainText=text.slice(lastIndex,match.index);if(plainText)segments.push({text:plainText,colorIndex:0})}let colorIndex=parseInt(match[1])-1,taggedText=match[2];segments.push({text:taggedText,colorIndex:Math.max(0,colorIndex)}),lastIndex=match.index+match[0].length}if(lastIndex<text.length){let remainingText=text.slice(lastIndex);if(remainingText)segments.push({text:remainingText,colorIndex:0})}return segments}function getParsedFont(fontKey){if(!parsedFonts[fontKey]){let fontDef=fonts[fontKey],parsedChars={};for(let[char,lines]of Object.entries(fontDef.chars))parsedChars[char]=lines.map((line)=>parseColorTags(line));parsedFonts[fontKey]={...fontDef,colors:fontDef.colors||1,chars:parsedChars}}return parsedFonts[fontKey]}function measureText({text,font="tiny"}){let fontDef=getParsedFont(font);if(!fontDef)return console.warn(`Font '${font}' not found`),{width:0,height:0};let currentX=0;for(let i2=0;i2<text.length;i2++){let char=text[i2].toUpperCase(),charDef=fontDef.chars[char];if(!charDef){let spaceChar=fontDef.chars[" "];if(spaceChar&&spaceChar[0]){let spaceWidth=0;for(let segment of spaceChar[0])spaceWidth+=segment.text.length;currentX+=spaceWidth}else currentX+=1;continue}let charWidth=0;if(charDef[0])for(let segment of charDef[0])charWidth+=segment.text.length;if(currentX+=charWidth,i2<text.length-1)currentX+=fontDef.letterspace_size}return{width:currentX,height:fontDef.lines}}function getCharacterPositions(text,font="tiny"){let fontDef=getParsedFont(font);if(!fontDef)return[0];let positions=[0],currentX=0;for(let i2=0;i2<text.length;i2++){let char=text[i2].toUpperCase(),charDef=fontDef.chars[char],charWidth=0;if(!charDef){let spaceChar=fontDef.chars[" "];if(spaceChar&&spaceChar[0])for(let segment of spaceChar[0])charWidth+=segment.text.length;else charWidth=1}else if(charDef[0])for(let segment of charDef[0])charWidth+=segment.text.length;if(currentX+=charWidth,i2<text.length-1)currentX+=fontDef.letterspace_size;positions.push(currentX)}return positions}function coordinateToCharacterIndex(x,text,font="tiny"){let positions=getCharacterPositions(text,font);if(x<0)return 0;for(let i2=0;i2<positions.length-1;i2++){let currentPos=positions[i2],nextPos=positions[i2+1];if(x>=currentPos&&x<nextPos){let charMidpoint=currentPos+(nextPos-currentPos)/2;return x<charMidpoint?i2:i2+1}}if(positions.length>0&&x>=positions[positions.length-1])return text.length;return 0}function renderFontToFrameBuffer(buffer2,{text,x=0,y=0,color:color2=[RGBA.fromInts(255,255,255,255)],backgroundColor=RGBA.fromInts(0,0,0,255),font="tiny"}){let{width,height:height2}=buffer2,fontDef=getParsedFont(font);if(!fontDef)return console.warn(`Font '${font}' not found`),{width:0,height:0};let colors8=Array.isArray(color2)?color2:[color2];if(y<0||y+fontDef.lines>height2)return{width:0,height:fontDef.lines};let currentX=x,startX=x;for(let i2=0;i2<text.length;i2++){let char=text[i2].toUpperCase(),charDef=fontDef.chars[char];if(!charDef){let spaceChar=fontDef.chars[" "];if(spaceChar&&spaceChar[0]){let spaceWidth=0;for(let segment of spaceChar[0])spaceWidth+=segment.text.length;currentX+=spaceWidth}else currentX+=1;continue}let charWidth=0;if(charDef[0])for(let segment of charDef[0])charWidth+=segment.text.length;if(currentX>=width)break;if(currentX+charWidth<0){currentX+=charWidth+fontDef.letterspace_size;continue}for(let lineIdx=0;lineIdx<fontDef.lines&&lineIdx<charDef.length;lineIdx++){let segments=charDef[lineIdx],renderY=y+lineIdx;if(renderY>=0&&renderY<height2){let segmentX=currentX;for(let segment of segments){let segmentColor=colors8[segment.colorIndex]||colors8[0];for(let charIdx=0;charIdx<segment.text.length;charIdx++){let renderX=segmentX+charIdx;if(renderX>=0&&renderX<width){let fontChar=segment.text[charIdx];if(fontChar!==" ")buffer2.setCellWithAlphaBlending(renderX,renderY,fontChar,parseColor(segmentColor),parseColor(backgroundColor))}}segmentX+=segment.text.length}}}if(currentX+=charWidth,i2<text.length-1)currentX+=fontDef.letterspace_size}return{width:currentX-startX,height:fontDef.lines}}function getBaseAttributes(attr){return attr&ATTRIBUTE_BASE_MASK}function createTextAttributes({bold=!1,italic=!1,underline=!1,dim=!1,blink=!1,inverse=!1,hidden=!1,strikethrough=!1}={}){let attributes=TextAttributes.NONE;if(bold)attributes|=TextAttributes.BOLD;if(italic)attributes|=TextAttributes.ITALIC;if(underline)attributes|=TextAttributes.UNDERLINE;if(dim)attributes|=TextAttributes.DIM;if(blink)attributes|=TextAttributes.BLINK;if(inverse)attributes|=TextAttributes.INVERSE;if(hidden)attributes|=TextAttributes.HIDDEN;if(strikethrough)attributes|=TextAttributes.STRIKETHROUGH;return attributes}function attributesWithLink(baseAttributes,linkId){let base=baseAttributes&ATTRIBUTE_BASE_MASK2,linkBits=(linkId&LINK_ID_PAYLOAD_MASK)<<LINK_ID_SHIFT;return base|linkBits}function getLinkId(attributes){return attributes>>>LINK_ID_SHIFT&LINK_ID_PAYLOAD_MASK}function visualizeRenderableTree(renderable,maxDepth=10){function buildTreeLines(node,prefix="",parentPrefix="",isLastChild=!0,depth=0){if(depth>=maxDepth)return[`${prefix}${node.id} ... (max depth reached)`];let lines=[],children=node.getChildren();if(lines.push(`${prefix}${node.id}`),children.length>0){let lastChildIndex=children.length-1;children.forEach((child,index)=>{let childIsLast=index===lastChildIndex,connector=childIsLast?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",childPrefix=parentPrefix+(isLastChild?" ":"\u2502 "),childLines=buildTreeLines(child,childPrefix+connector,childPrefix,childIsLast,depth+1);lines.push(...childLines)})}return lines}let treeLines=buildTreeLines(renderable);console.log(`Renderable Tree:
|
|
2300
2335
|
`+treeLines.join(`
|
|
2301
2336
|
`))}function isStyledText(obj){return obj&&obj[BrandedStyledText]}function stringToStyledText(content){return new StyledText([{__isChunk:!0,text:content}])}function applyStyle(input,style){if(typeof input==="object"&&"__isChunk"in input){let existingChunk=input,fg=style.fg?parseColor(style.fg):existingChunk.fg,bg=style.bg?parseColor(style.bg):existingChunk.bg,newAttrs=createTextAttributes(style),mergedAttrs=existingChunk.attributes?existingChunk.attributes|newAttrs:newAttrs;return{__isChunk:!0,text:existingChunk.text,fg,bg,attributes:mergedAttrs,link:existingChunk.link}}else{let plainTextStr=String(input),fg=style.fg?parseColor(style.fg):void 0,bg=style.bg?parseColor(style.bg):void 0,attributes=createTextAttributes(style);return{__isChunk:!0,text:plainTextStr,fg,bg,attributes}}}function t(strings,...values2){let chunks=[];for(let i2=0;i2<strings.length;i2++){let raw=strings[i2];if(raw)chunks.push({__isChunk:!0,text:raw,attributes:0});let val=values2[i2];if(typeof val==="object"&&"__isChunk"in val)chunks.push(val);else if(val!==void 0){let plainTextStr=String(val);chunks.push({__isChunk:!0,text:plainTextStr,attributes:0})}}return new StyledText(chunks)}function hastToTextChunks(node,syntaxStyle,parentStyles=[]){let chunks=[];if(node.type==="text"){let stylesToMerge=parentStyles.length>0?parentStyles:["default"],mergedStyle=syntaxStyle.mergeStyles(...stylesToMerge);chunks.push({__isChunk:!0,text:node.value,fg:mergedStyle.fg,bg:mergedStyle.bg,attributes:mergedStyle.attributes})}else if(node.type==="element"){let currentStyles=[...parentStyles];if(node.properties?.className){let classes=node.properties.className.split(" ");for(let cls of classes)currentStyles.push(cls)}for(let child of node.children)chunks.push(...hastToTextChunks(child,syntaxStyle,currentStyles))}return chunks}function hastToStyledText(hast,syntaxStyle){let chunks=hastToTextChunks(hast,syntaxStyle);return new StyledText(chunks)}class SystemClock{now(){if(!globalThis.performance||typeof globalThis.performance.now!=="function")throw Error("SystemClock requires globalThis.performance.now()");return globalThis.performance.now()}setTimeout(fn,delayMs){return globalThis.setTimeout(fn,delayMs)}clearTimeout(handle){globalThis.clearTimeout(handle)}setInterval(fn,delayMs){return globalThis.setInterval(fn,delayMs)}clearInterval(handle){globalThis.clearInterval(handle)}}function fromKittyMods(mod){return{shift:!!(mod&1),alt:!!(mod&2),ctrl:!!(mod&4),super:!!(mod&8),hyper:!!(mod&16),meta:!!(mod&32),capsLock:!!(mod&64),numLock:!!(mod&128)}}function parseKittySpecialKey(sequence){let match=/^\x1b\[(\d+);(\d+):(\d+)([A-Z~])$/.exec(sequence);if(!match)return null;let keyNumOrOne=match[1],modifierStr=match[2],eventTypeStr=match[3],terminator=match[4],keyName;if(terminator==="~")keyName=tildeKeyMap[keyNumOrOne];else{if(keyNumOrOne!=="1")return null;keyName=functionalKeyMap[terminator]}if(!keyName)return null;let key={name:keyName,ctrl:!1,meta:!1,shift:!1,option:!1,number:!1,sequence,raw:sequence,eventType:"press",source:"kitty",super:!1,hyper:!1,capsLock:!1,numLock:!1};if(modifierStr){let modifierMask=parseInt(modifierStr,10);if(!isNaN(modifierMask)&&modifierMask>1){let mods=fromKittyMods(modifierMask-1);key.shift=mods.shift,key.ctrl=mods.ctrl,key.meta=mods.alt||mods.meta,key.option=mods.alt,key.super=mods.super,key.hyper=mods.hyper,key.capsLock=mods.capsLock,key.numLock=mods.numLock}}if(eventTypeStr==="1"||!eventTypeStr)key.eventType="press";else if(eventTypeStr==="2")key.eventType="press",key.repeated=!0;else if(eventTypeStr==="3")key.eventType="release";return key}function parseKittyKeyboard(sequence){let specialResult=parseKittySpecialKey(sequence);if(specialResult)return specialResult;let match=/^\x1b\[([^\x1b]+)u$/.exec(sequence);if(!match)return null;let fields=match[1].split(";");if(fields.length<1)return null;let key={name:"",ctrl:!1,meta:!1,shift:!1,option:!1,number:!1,sequence,raw:sequence,eventType:"press",source:"kitty",super:!1,hyper:!1,capsLock:!1,numLock:!1},text="",field1=fields[0]?.split(":")||[],codepointStr=field1[0];if(!codepointStr)return null;let codepoint=parseInt(codepointStr,10);if(isNaN(codepoint))return null;let shiftedCodepoint,baseCodepoint;if(field1[1]){let shifted=parseInt(field1[1],10);if(!isNaN(shifted)&&shifted>0&&shifted<=1114111)shiftedCodepoint=shifted}if(field1[2]){let base=parseInt(field1[2],10);if(!isNaN(base)&&base>0&&base<=1114111)baseCodepoint=base}let knownKey=kittyKeyMap[codepoint];if(knownKey)key.name=knownKey,key.code=`[${codepoint}u`;else if(codepoint===0)key.name="";else if(codepoint>0&&codepoint<=1114111){let char=String.fromCodePoint(codepoint);if(key.name=char,baseCodepoint)key.baseCode=baseCodepoint}else return null;if(fields[1]){let field2=fields[1].split(":"),modifierStr=field2[0],eventTypeStr=field2[1];if(modifierStr){let modifierMask=parseInt(modifierStr,10);if(!isNaN(modifierMask)&&modifierMask>1){let mods=fromKittyMods(modifierMask-1);key.shift=mods.shift,key.ctrl=mods.ctrl,key.meta=mods.alt||mods.meta,key.option=mods.alt,key.super=mods.super,key.hyper=mods.hyper,key.capsLock=mods.capsLock,key.numLock=mods.numLock}}if(eventTypeStr==="1"||!eventTypeStr)key.eventType="press";else if(eventTypeStr==="2")key.eventType="press",key.repeated=!0;else if(eventTypeStr==="3")key.eventType="release";else key.eventType="press"}if(fields[2]){let codepoints=fields[2].split(":");for(let cpStr of codepoints){let cp3=parseInt(cpStr,10);if(!isNaN(cp3)&&cp3>0&&cp3<=1114111)text+=String.fromCodePoint(cp3)}}if(text===""){if(key.name.length>0&&!kittyKeyMap[codepoint])if(key.shift&&shiftedCodepoint)text=String.fromCodePoint(shiftedCodepoint);else if(key.shift&&key.name.length===1)text=key.name.toLocaleUpperCase();else text=key.name}if(key.name===" "&&key.shift&&!key.ctrl&&!key.meta)text=" ";if(text){if(codepoint===0)key.name=text;key.sequence=text}if(codepoint===0&&text==="")return null;return key}class LinearScrollAccel{tick(_now){return 1}reset(){}}class MacOSScrollAccel{opts;lastTickTime=0;velocityHistory=[];historySize=3;streakTimeout=150;minTickInterval=6;constructor(opts={}){this.opts=opts}tick(now=Date.now()){let A=this.opts.A??0.8,tau=this.opts.tau??3,maxMultiplier=this.opts.maxMultiplier??6,dt=this.lastTickTime?now-this.lastTickTime:1/0;if(dt===1/0||dt>this.streakTimeout)return this.lastTickTime=now,this.velocityHistory=[],1;if(dt<this.minTickInterval)return 1;if(this.lastTickTime=now,this.velocityHistory.push(dt),this.velocityHistory.length>this.historySize)this.velocityHistory.shift();let x=100/(this.velocityHistory.reduce((a,b2)=>a+b2,0)/this.velocityHistory.length)/tau,multiplier=1+A*(Math.exp(x)-1);return Math.min(multiplier,maxMultiplier)}reset(){this.lastTickTime=0,this.velocityHistory=[]}}function parseAlign(value){if(value==null)return Align.Auto;switch(value.toLowerCase()){case"auto":return Align.Auto;case"flex-start":return Align.FlexStart;case"center":return Align.Center;case"flex-end":return Align.FlexEnd;case"stretch":return Align.Stretch;case"baseline":return Align.Baseline;case"space-between":return Align.SpaceBetween;case"space-around":return Align.SpaceAround;case"space-evenly":return Align.SpaceEvenly;default:return Align.Auto}}function parseAlignItems(value){if(value==null)return Align.Stretch;switch(value.toLowerCase()){case"auto":return Align.Auto;case"flex-start":return Align.FlexStart;case"center":return Align.Center;case"flex-end":return Align.FlexEnd;case"stretch":return Align.Stretch;case"baseline":return Align.Baseline;case"space-between":return Align.SpaceBetween;case"space-around":return Align.SpaceAround;case"space-evenly":return Align.SpaceEvenly;default:return Align.Stretch}}function parseBoxSizing(value){if(value==null)return BoxSizing.BorderBox;switch(value.toLowerCase()){case"border-box":return BoxSizing.BorderBox;case"content-box":return BoxSizing.ContentBox;default:return BoxSizing.BorderBox}}function parseDimension(value){if(value==null)return Dimension.Width;switch(value.toLowerCase()){case"width":return Dimension.Width;case"height":return Dimension.Height;default:return Dimension.Width}}function parseDirection(value){if(value==null)return Direction.LTR;switch(value.toLowerCase()){case"inherit":return Direction.Inherit;case"ltr":return Direction.LTR;case"rtl":return Direction.RTL;default:return Direction.LTR}}function parseDisplay(value){if(value==null)return Display.Flex;switch(value.toLowerCase()){case"flex":return Display.Flex;case"none":return Display.None;case"contents":return Display.Contents;default:return Display.Flex}}function parseEdge(value){if(value==null)return Edge.All;switch(value.toLowerCase()){case"left":return Edge.Left;case"top":return Edge.Top;case"right":return Edge.Right;case"bottom":return Edge.Bottom;case"start":return Edge.Start;case"end":return Edge.End;case"horizontal":return Edge.Horizontal;case"vertical":return Edge.Vertical;case"all":return Edge.All;default:return Edge.All}}function parseFlexDirection(value){if(value==null)return FlexDirection.Column;switch(value.toLowerCase()){case"column":return FlexDirection.Column;case"column-reverse":return FlexDirection.ColumnReverse;case"row":return FlexDirection.Row;case"row-reverse":return FlexDirection.RowReverse;default:return FlexDirection.Column}}function parseGutter(value){if(value==null)return Gutter.All;switch(value.toLowerCase()){case"column":return Gutter.Column;case"row":return Gutter.Row;case"all":return Gutter.All;default:return Gutter.All}}function parseJustify(value){if(value==null)return Justify.FlexStart;switch(value.toLowerCase()){case"flex-start":return Justify.FlexStart;case"center":return Justify.Center;case"flex-end":return Justify.FlexEnd;case"space-between":return Justify.SpaceBetween;case"space-around":return Justify.SpaceAround;case"space-evenly":return Justify.SpaceEvenly;default:return Justify.FlexStart}}function parseLogLevel(value){if(value==null)return LogLevel.Info;switch(value.toLowerCase()){case"error":return LogLevel.Error;case"warn":return LogLevel.Warn;case"info":return LogLevel.Info;case"debug":return LogLevel.Debug;case"verbose":return LogLevel.Verbose;case"fatal":return LogLevel.Fatal;default:return LogLevel.Info}}function parseMeasureMode(value){if(value==null)return MeasureMode.Undefined;switch(value.toLowerCase()){case"undefined":return MeasureMode.Undefined;case"exactly":return MeasureMode.Exactly;case"at-most":return MeasureMode.AtMost;default:return MeasureMode.Undefined}}function parseOverflow(value){if(value==null)return Overflow.Visible;switch(value.toLowerCase()){case"visible":return Overflow.Visible;case"hidden":return Overflow.Hidden;case"scroll":return Overflow.Scroll;default:return Overflow.Visible}}function parsePositionType(value){if(value==null)return PositionType.Relative;switch(value.toLowerCase()){case"static":return PositionType.Static;case"relative":return PositionType.Relative;case"absolute":return PositionType.Absolute;default:return PositionType.Static}}function parseUnit(value){if(value==null)return Unit.Point;switch(value.toLowerCase()){case"undefined":return Unit.Undefined;case"point":return Unit.Point;case"percent":return Unit.Percent;case"auto":return Unit.Auto;default:return Unit.Point}}function parseWrap(value){if(value==null)return Wrap.NoWrap;switch(value.toLowerCase()){case"no-wrap":return Wrap.NoWrap;case"wrap":return Wrap.Wrap;case"wrap-reverse":return Wrap.WrapReverse;default:return Wrap.NoWrap}}class SelectionAnchor{renderable;relativeX;relativeY;constructor(renderable,absoluteX,absoluteY){this.renderable=renderable,this.relativeX=absoluteX-this.renderable.x,this.relativeY=absoluteY-this.renderable.y}get x(){return this.renderable.x+this.relativeX}get y(){return this.renderable.y+this.relativeY}}class Selection{_anchor;_focus;_selectedRenderables=[];_touchedRenderables=[];_isActive=!0;_isDragging=!0;_isStart=!1;constructor(anchorRenderable,anchor,focus){this._anchor=new SelectionAnchor(anchorRenderable,anchor.x,anchor.y),this._focus={...focus}}get isStart(){return this._isStart}set isStart(value){this._isStart=value}get anchor(){return{x:this._anchor.x,y:this._anchor.y}}get focus(){return{...this._focus}}set focus(value){this._focus={...value}}get isActive(){return this._isActive}set isActive(value){this._isActive=value}get isDragging(){return this._isDragging}set isDragging(value){this._isDragging=value}get bounds(){let minX=Math.min(this._anchor.x,this._focus.x),maxX=Math.max(this._anchor.x,this._focus.x),minY=Math.min(this._anchor.y,this._focus.y),maxY=Math.max(this._anchor.y,this._focus.y),width=maxX-minX+1,height2=maxY-minY+1;return{x:minX,y:minY,width,height:height2}}updateSelectedRenderables(selectedRenderables){this._selectedRenderables=selectedRenderables}get selectedRenderables(){return this._selectedRenderables}updateTouchedRenderables(touchedRenderables){this._touchedRenderables=touchedRenderables}get touchedRenderables(){return this._touchedRenderables}getSelectedText(){return this._selectedRenderables.sort((a,b2)=>{let aY=a.y,bY=b2.y;if(aY!==bY)return aY-bY;return a.x-b2.x}).filter((renderable)=>!renderable.isDestroyed).map((renderable)=>renderable.getSelectedText()).filter((text)=>text).join(`
|
|
2302
2337
|
`)}}function convertGlobalToLocalSelection(globalSelection,localX,localY){if(!globalSelection?.isActive)return null;return{anchorX:globalSelection.anchor.x-localX,anchorY:globalSelection.anchor.y-localY,focusX:globalSelection.focus.x-localX,focusY:globalSelection.focus.y-localY,isActive:!0}}class ASCIIFontSelectionHelper{getText;getFont;localSelection=null;constructor(getText,getFont){this.getText=getText,this.getFont=getFont}hasSelection(){return this.localSelection!==null}getSelection(){return this.localSelection}shouldStartSelection(localX,localY,width,height2){if(localX<0||localX>=width||localY<0||localY>=height2)return!1;let text=this.getText(),font=this.getFont(),charIndex=coordinateToCharacterIndex(localX,text,font);return charIndex>=0&&charIndex<=text.length}onLocalSelectionChanged(localSelection,width,height2){let previousSelection=this.localSelection;if(!localSelection?.isActive)return this.localSelection=null,previousSelection!==null;let text=this.getText(),font=this.getFont(),selStart={x:localSelection.anchorX,y:localSelection.anchorY},selEnd={x:localSelection.focusX,y:localSelection.focusY};if(height2-1<selStart.y||0>selEnd.y)return this.localSelection=null,previousSelection!==null;let startCharIndex=0,endCharIndex=text.length;if(selStart.y>height2-1)return this.localSelection=null,previousSelection!==null;else if(selStart.y>=0&&selStart.y<=height2-1){if(selStart.x>0)startCharIndex=coordinateToCharacterIndex(selStart.x,text,font)}if(selEnd.y<0)return this.localSelection=null,previousSelection!==null;else if(selEnd.y>=0&&selEnd.y<=height2-1)if(selEnd.x>=0)endCharIndex=coordinateToCharacterIndex(selEnd.x,text,font);else endCharIndex=0;if(startCharIndex<endCharIndex&&startCharIndex>=0&&endCharIndex<=text.length)this.localSelection={start:startCharIndex,end:endCharIndex};else this.localSelection=null;return previousSelection?.start!==this.localSelection?.start||previousSelection?.end!==this.localSelection?.end}}function singleton(key,factory){let bag=globalThis[singletonCacheSymbol]??={};if(!(key in bag))bag[key]=factory();return bag[key]}function destroySingleton(key){let bag=globalThis[singletonCacheSymbol];if(bag&&key in bag)delete bag[key]}function hasSingleton(key){let bag=globalThis[singletonCacheSymbol];return bag&&key in bag}function registerEnvVar(config){let existing=envRegistry[config.name];if(existing){if(existing.description!==config.description||existing.type!==config.type||existing.default!==config.default)throw Error(`Environment variable "${config.name}" is already registered with different configuration. Existing: ${JSON.stringify(existing)}, New: ${JSON.stringify(config)}`);return}envRegistry[config.name]=config}function normalizeBoolean(value){let lowerValue=value.toLowerCase();return["true","1","on","yes"].includes(lowerValue)}function parseEnvValue(config){let envValue=process.env[config.name];if(envValue===void 0&&config.default!==void 0)return config.default;if(envValue===void 0)throw Error(`Required environment variable ${config.name} is not set. ${config.description}`);switch(config.type){case"boolean":return typeof envValue==="boolean"?envValue:normalizeBoolean(envValue);case"number":let numValue=Number(envValue);if(isNaN(numValue))throw Error(`Environment variable ${config.name} must be a valid number, got: ${envValue}`);return numValue;case"string":default:return envValue}}class EnvStore{parsedValues=new Map;get(key){if(this.parsedValues.has(key))return this.parsedValues.get(key);if(!(key in envRegistry))throw Error(`Environment variable ${key} is not registered.`);try{let value=parseEnvValue(envRegistry[key]);return this.parsedValues.set(key,value),value}catch(error2){throw Error(`Failed to parse env var ${key}: ${error2 instanceof Error?error2.message:String(error2)}`)}}has(key){return key in envRegistry}clearCache(){this.parsedValues.clear()}}function clearEnvCache(){envStore.clearCache()}function generateEnvMarkdown(){let configs=Object.values(envRegistry);if(configs.length===0)return`# Environment Variables
|
|
@@ -2324,8 +2359,8 @@ No environment variables registered.
|
|
|
2324
2359
|
`}else output+=`\x1B[32mDefault:\x1B[0m \x1B[31mRequired\x1B[0m
|
|
2325
2360
|
`;output+=`
|
|
2326
2361
|
`}return output}class ByteQueue{buf;start=0;end=0;constructor(capacity=INITIAL_PENDING_CAPACITY){this.buf=new Uint8Array(capacity)}get length(){return this.end-this.start}get capacity(){return this.buf.length}view(){return this.buf.subarray(this.start,this.end)}take(){let chunk=this.view();return this.start=0,this.end=0,chunk}append(chunk){if(chunk.length===0)return;this.ensureCapacity(this.length+chunk.length),this.buf.set(chunk,this.end),this.end+=chunk.length}consume(count){if(count<=0)return;if(count>=this.length){this.start=0,this.end=0;return}if(this.start+=count,this.start>=this.buf.length/2)this.buf.copyWithin(0,this.start,this.end),this.end-=this.start,this.start=0}clear(){this.start=0,this.end=0}reset(capacity=INITIAL_PENDING_CAPACITY){this.buf=new Uint8Array(capacity),this.start=0,this.end=0}ensureCapacity(requiredLength){let currentLength=this.length;if(requiredLength<=this.buf.length){if(this.buf.length-this.end>=requiredLength-currentLength)return;if(this.buf.copyWithin(0,this.start,this.end),this.end=currentLength,this.start=0,requiredLength<=this.buf.length)return}let nextCapacity=this.buf.length;while(nextCapacity<requiredLength)nextCapacity*=2;let next=new Uint8Array(nextCapacity);next.set(this.view(),0),this.buf=next,this.start=0,this.end=currentLength}}function normalizePositiveOption(value,fallback){if(typeof value!=="number"||!Number.isFinite(value)||value<=0)return fallback;return Math.floor(value)}function utf8SequenceLength(first){if(first<128)return 1;if(first>=194&&first<=223)return 2;if(first>=224&&first<=239)return 3;if(first>=240&&first<=244)return 4;return 0}function bytesEqual(left,right){if(left.length!==right.length)return!1;for(let index=0;index<left.length;index+=1)if(left[index]!==right[index])return!1;return!0}function isMouseSgrSequence(sequence){if(sequence.length<7)return!1;if(sequence[0]!==ESC||sequence[1]!==91||sequence[2]!==60)return!1;let final=sequence[sequence.length-1];if(final!==77&&final!==109)return!1;let part=0,hasDigit=!1;for(let index=3;index<sequence.length-1;index+=1){let byte=sequence[index];if(byte>=48&&byte<=57){hasDigit=!0;continue}if(byte===59&&hasDigit&&part<2){part+=1,hasDigit=!1;continue}return!1}return part===2&&hasDigit}function isAsciiDigit(byte){return byte>=48&&byte<=57}function parsePositiveDecimalPrefix(sequence,start2,endExclusive){if(start2>=endExclusive)return null;let value=0,sawDigit=!1;for(let index=start2;index<endExclusive;index+=1){let byte=sequence[index];if(!isAsciiDigit(byte))return null;sawDigit=!0,value=value*10+(byte-48)}return sawDigit?value:null}function canStillBeKittyU(state){return state.semicolons>=1}function canStillBeKittySpecial(state){return state.semicolons===1&&state.segments>1}function canStillBeExplicitWidthCpr(state){return state.firstParamValue===1&&state.semicolons===1}function canStillBePixelResolution(state){return state.firstParamValue===4&&state.semicolons===2}function canDeferParametricCsi(state,context){return context.kittyKeyboardEnabled&&(canStillBeKittyU(state)||canStillBeKittySpecial(state))||context.explicitWidthCprActive&&canStillBeExplicitWidthCpr(state)||context.pixelResolutionQueryActive&&canStillBePixelResolution(state)}function canCompleteDeferredParametricCsi(state,byte,context){if(context.kittyKeyboardEnabled){if(state.hasDigit&&byte===117)return!0;if(state.hasDigit&&state.semicolons===1&&state.segments>1&&(byte===126||byte>=65&&byte<=90))return!0}if(context.explicitWidthCprActive&&state.hasDigit&&state.firstParamValue===1&&state.semicolons===1&&byte===82)return!0;if(context.pixelResolutionQueryActive&&state.hasDigit&&state.firstParamValue===4&&state.semicolons===2&&byte===116)return!0;return!1}function canDeferPrivateReplyCsi(context){return context.privateCapabilityRepliesActive}function canCompleteDeferredPrivateReplyCsi(state,byte,context){if(!context.privateCapabilityRepliesActive)return!1;if(state.sawDollar)return state.hasDigit&&byte===121;if(byte===99)return state.hasDigit||state.semicolons>0;return state.hasDigit&&byte===117}function concatBytes(left,right){if(left.length===0)return right;if(right.length===0)return left;let combined=new Uint8Array(left.length+right.length);return combined.set(left,0),combined.set(right,left.length),combined}function indexOfBytes(haystack,needle){if(needle.length===0)return 0;let limit=haystack.length-needle.length;for(let offset=0;offset<=limit;offset+=1){let matched=!0;for(let index=0;index<needle.length;index+=1)if(haystack[offset+index]!==needle[index]){matched=!1;break}if(matched)return offset}return-1}function decodeLatin1(bytes){return Buffer3.from(bytes.buffer,bytes.byteOffset,bytes.byteLength).toString("latin1")}function decodeUtf8(bytes){return KEY_DECODER.decode(bytes)}function createPasteCollector(){return{tail:EMPTY_BYTES,parts:[],totalLength:0}}function joinPasteBytes(parts,totalLength){if(totalLength===0)return EMPTY_BYTES;if(parts.length===1)return parts[0];let bytes=new Uint8Array(totalLength),offset=0;for(let part of parts)bytes.set(part,offset),offset+=part.length;return bytes}class StdinParser{pending=new ByteQueue(INITIAL_PENDING_CAPACITY);events=[];timeoutMs;maxPendingBytes;armTimeouts;onTimeoutFlush;useKittyKeyboard;mouseParser=new MouseParser;clock;protocolContext;timeoutId=null;destroyed=!1;pendingSinceMs=null;forceFlush=!1;justFlushedEsc=!1;state={tag:"ground"};cursor=0;unitStart=0;paste=null;constructor(options={}){this.timeoutMs=normalizePositiveOption(options.timeoutMs,DEFAULT_TIMEOUT_MS),this.maxPendingBytes=normalizePositiveOption(options.maxPendingBytes,DEFAULT_MAX_PENDING_BYTES),this.armTimeouts=options.armTimeouts??!0,this.onTimeoutFlush=options.onTimeoutFlush??null,this.useKittyKeyboard=options.useKittyKeyboard??!0,this.clock=options.clock??SYSTEM_CLOCK,this.protocolContext={...DEFAULT_PROTOCOL_CONTEXT,kittyKeyboardEnabled:options.protocolContext?.kittyKeyboardEnabled??!1,privateCapabilityRepliesActive:options.protocolContext?.privateCapabilityRepliesActive??!1,pixelResolutionQueryActive:options.protocolContext?.pixelResolutionQueryActive??!1,explicitWidthCprActive:options.protocolContext?.explicitWidthCprActive??!1}}get bufferCapacity(){return this.pending.capacity}updateProtocolContext(patch){this.ensureAlive(),this.protocolContext={...this.protocolContext,...patch},this.reconcileDeferredStateWithProtocolContext(),this.reconcileTimeoutState()}push(data){if(this.ensureAlive(),data.length===0){this.emitKeyOrResponse("unknown","");return}let remainder=data;while(remainder.length>0){if(this.paste){remainder=this.consumePasteBytes(remainder);continue}let immediatePasteStartIndex=this.state.tag==="ground"&&this.pending.length===0?indexOfBytes(remainder,BRACKETED_PASTE_START):-1,appendEnd=immediatePasteStartIndex===-1?remainder.length:immediatePasteStartIndex+BRACKETED_PASTE_START.length;if(this.pending.append(remainder.subarray(0,appendEnd)),remainder=remainder.subarray(appendEnd),this.scanPending(),this.paste&&this.pending.length>0){remainder=this.consumePasteBytes(this.takePendingBytes());continue}if(!this.paste&&this.pending.length>this.maxPendingBytes){if(this.flushPendingOverflow(),this.scanPending(),this.paste&&this.pending.length>0)remainder=this.consumePasteBytes(this.takePendingBytes())}}this.reconcileTimeoutState()}read(){if(this.ensureAlive(),this.events.length===0&&this.forceFlush)this.scanPending(),this.reconcileTimeoutState();return this.events.shift()??null}drain(onEvent){this.ensureAlive();while(!0){if(this.destroyed)return;let event=this.read();if(!event)return;onEvent(event)}}flushTimeout(nowMsValue=this.clock.now()){if(this.ensureAlive(),this.paste||this.pendingSinceMs===null||this.pending.length===0)return;if(nowMsValue<this.pendingSinceMs||nowMsValue-this.pendingSinceMs<this.timeoutMs)return;this.forceFlush=!0}reset(){if(this.destroyed)return;this.clearTimeout(),this.resetState()}resetMouseState(){this.ensureAlive(),this.mouseParser.reset()}destroy(){if(this.destroyed)return;this.clearTimeout(),this.destroyed=!0,this.resetState()}ensureAlive(){if(this.destroyed)throw Error("StdinParser has been destroyed")}scanPending(){while(!this.paste){let bytes=this.pending.view();if(this.state.tag==="ground"&&this.cursor>=bytes.length){this.pending.clear(),this.cursor=0,this.unitStart=0,this.pendingSinceMs=null,this.forceFlush=!1;return}let byte=this.cursor<bytes.length?bytes[this.cursor]:-1;switch(this.state.tag){case"ground":{if(this.unitStart=this.cursor,this.justFlushedEsc){if(byte===91){this.justFlushedEsc=!1,this.cursor+=1,this.state={tag:"esc_recovery"};continue}this.justFlushedEsc=!1}if(byte===ESC){this.cursor+=1,this.state={tag:"esc"};continue}if(byte<128){this.emitKeyOrResponse("unknown",decodeUtf8(bytes.subarray(this.cursor,this.cursor+1))),this.consumePrefix(this.cursor+1);continue}let expected=utf8SequenceLength(byte);if(expected===0){if(!this.forceFlush&&this.cursor+1===bytes.length){this.markPending();return}this.emitLegacyHighByte(byte),this.consumePrefix(this.cursor+1);continue}this.cursor+=1,this.state={tag:"utf8",expected,seen:1};continue}case"utf8":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}this.emitLegacyHighByte(bytes[this.unitStart]),this.state={tag:"ground"},this.consumePrefix(this.unitStart+1);continue}if((byte&192)!==128){this.emitLegacyHighByte(bytes[this.unitStart]),this.state={tag:"ground"},this.consumePrefix(this.unitStart+1);continue}let nextSeen=this.state.seen+1;if(this.cursor+=1,nextSeen<this.state.expected){this.state={tag:"utf8",expected:this.state.expected,seen:nextSeen};continue}this.emitKeyOrResponse("unknown",decodeUtf8(bytes.subarray(this.unitStart,this.cursor))),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}case"esc":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}let flushedLoneEsc=this.cursor===this.unitStart+1&&bytes[this.unitStart]===ESC;this.emitKeyOrResponse("unknown",decodeUtf8(bytes.subarray(this.unitStart,this.cursor))),this.justFlushedEsc=flushedLoneEsc,this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}switch(byte){case 91:this.cursor+=1,this.state={tag:"csi"};continue;case 79:this.cursor+=1,this.state={tag:"ss3"};continue;case 93:this.cursor+=1,this.state={tag:"osc",sawEsc:!1};continue;case 80:this.cursor+=1,this.state={tag:"dcs",sawEsc:!1};continue;case 95:this.cursor+=1,this.state={tag:"apc",sawEsc:!1};continue;case ESC:this.cursor+=1;continue;default:this.cursor+=1,this.emitKeyOrResponse("unknown",decodeUtf8(bytes.subarray(this.unitStart,this.cursor))),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}}case"ss3":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(byte===ESC){this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}this.cursor+=1,this.emitKeyOrResponse("unknown",decodeUtf8(bytes.subarray(this.unitStart,this.cursor))),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}case"esc_recovery":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}this.emitKeyOrResponse("unknown",decodeUtf8(bytes.subarray(this.unitStart,this.cursor))),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(byte===60){this.cursor+=1,this.state={tag:"esc_less_mouse"};continue}if(byte===77){this.cursor+=1,this.state={tag:"esc_less_x10_mouse"};continue}this.emitKeyOrResponse("unknown",decodeUtf8(bytes.subarray(this.unitStart,this.unitStart+1))),this.state={tag:"ground"},this.consumePrefix(this.unitStart+1);continue}case"csi":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(byte===ESC){this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(byte===77&&this.cursor===this.unitStart+2){let end=this.cursor+4;if(bytes.length<end){if(!this.forceFlush){this.markPending();return}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,bytes.length)),this.state={tag:"ground"},this.consumePrefix(bytes.length);continue}this.emitMouse(bytes.subarray(this.unitStart,end),"x10"),this.state={tag:"ground"},this.consumePrefix(end);continue}if(byte===36){let candidateEnd=this.cursor+1,candidate=decodeUtf8(bytes.subarray(this.unitStart,candidateEnd));if(RXVT_DOLLAR_CSI_RE.test(candidate)){this.emitKeyOrResponse("csi",candidate),this.state={tag:"ground"},this.consumePrefix(candidateEnd);continue}if(!this.forceFlush&&candidateEnd>=bytes.length){this.markPending();return}}if(byte===60&&this.cursor===this.unitStart+2){this.cursor+=1,this.state={tag:"csi_sgr_mouse",part:0,hasDigit:!1};continue}if(byte===91&&this.cursor===this.unitStart+2){this.cursor+=1;continue}if(byte===63&&this.cursor===this.unitStart+2){this.cursor+=1,this.state={tag:"csi_private_reply",semicolons:0,hasDigit:!1,sawDollar:!1};continue}if(byte===59){let firstParamValue=parsePositiveDecimalPrefix(bytes,this.unitStart+2,this.cursor);if(firstParamValue!==null){this.cursor+=1,this.state={tag:"csi_parametric",semicolons:1,segments:1,hasDigit:!1,firstParamValue};continue}}if(byte>=64&&byte<=126){let end=this.cursor+1,rawBytes=bytes.subarray(this.unitStart,end);if(bytesEqual(rawBytes,BRACKETED_PASTE_START)){this.state={tag:"ground"},this.consumePrefix(end),this.paste=createPasteCollector();continue}if(isMouseSgrSequence(rawBytes)){this.emitMouse(rawBytes,"sgr"),this.state={tag:"ground"},this.consumePrefix(end);continue}this.emitKeyOrResponse("csi",decodeUtf8(rawBytes)),this.state={tag:"ground"},this.consumePrefix(end);continue}this.cursor+=1;continue}case"csi_sgr_mouse":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}this.state={tag:"csi_sgr_mouse_deferred",part:this.state.part,hasDigit:this.state.hasDigit},this.pendingSinceMs=null,this.forceFlush=!1;return}if(byte===ESC){this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(isAsciiDigit(byte)){this.cursor+=1,this.state={tag:"csi_sgr_mouse",part:this.state.part,hasDigit:!0};continue}if(byte===59&&this.state.hasDigit&&this.state.part<2){this.cursor+=1,this.state={tag:"csi_sgr_mouse",part:this.state.part+1,hasDigit:!1};continue}if(byte>=64&&byte<=126){let end=this.cursor+1,rawBytes=bytes.subarray(this.unitStart,end);if(isMouseSgrSequence(rawBytes))this.emitMouse(rawBytes,"sgr");else this.emitKeyOrResponse("csi",decodeUtf8(rawBytes));this.state={tag:"ground"},this.consumePrefix(end);continue}this.state={tag:"csi"};continue}case"csi_sgr_mouse_deferred":{if(this.cursor>=bytes.length){this.pendingSinceMs=null,this.forceFlush=!1;return}if(byte===ESC){this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(isAsciiDigit(byte)||byte===59||byte===77||byte===109){this.state={tag:"csi_sgr_mouse",part:this.state.part,hasDigit:this.state.hasDigit};continue}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}case"csi_parametric":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}if(canDeferParametricCsi(this.state,this.protocolContext)){this.state={tag:"csi_parametric_deferred",semicolons:this.state.semicolons,segments:this.state.segments,hasDigit:this.state.hasDigit,firstParamValue:this.state.firstParamValue},this.pendingSinceMs=null,this.forceFlush=!1;return}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(byte===ESC){this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(isAsciiDigit(byte)){this.cursor+=1,this.state={tag:"csi_parametric",semicolons:this.state.semicolons,segments:this.state.segments,hasDigit:!0,firstParamValue:this.state.firstParamValue};continue}if(byte===58&&this.state.hasDigit&&this.state.segments<3){this.cursor+=1,this.state={tag:"csi_parametric",semicolons:this.state.semicolons,segments:this.state.segments+1,hasDigit:!1,firstParamValue:this.state.firstParamValue};continue}if(byte===59&&this.state.semicolons<2){this.cursor+=1,this.state={tag:"csi_parametric",semicolons:this.state.semicolons+1,segments:1,hasDigit:!1,firstParamValue:this.state.firstParamValue};continue}if(byte>=64&&byte<=126){let end=this.cursor+1;this.emitKeyOrResponse("csi",decodeUtf8(bytes.subarray(this.unitStart,end))),this.state={tag:"ground"},this.consumePrefix(end);continue}this.state={tag:"csi"};continue}case"csi_parametric_deferred":{if(this.cursor>=bytes.length){this.pendingSinceMs=null,this.forceFlush=!1;return}if(byte===ESC){this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(isAsciiDigit(byte)||byte===58||byte===59){this.state={tag:"csi_parametric",semicolons:this.state.semicolons,segments:this.state.segments,hasDigit:this.state.hasDigit,firstParamValue:this.state.firstParamValue};continue}if(canCompleteDeferredParametricCsi(this.state,byte,this.protocolContext)){this.state={tag:"csi_parametric",semicolons:this.state.semicolons,segments:this.state.segments,hasDigit:this.state.hasDigit,firstParamValue:this.state.firstParamValue};continue}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}case"csi_private_reply":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}if(canDeferPrivateReplyCsi(this.protocolContext)){this.state={tag:"csi_private_reply_deferred",semicolons:this.state.semicolons,hasDigit:this.state.hasDigit,sawDollar:this.state.sawDollar},this.pendingSinceMs=null,this.forceFlush=!1;return}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(byte===ESC){this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(isAsciiDigit(byte)){this.cursor+=1,this.state={tag:"csi_private_reply",semicolons:this.state.semicolons,hasDigit:!0,sawDollar:this.state.sawDollar};continue}if(byte===59){this.cursor+=1,this.state={tag:"csi_private_reply",semicolons:this.state.semicolons+1,hasDigit:!1,sawDollar:!1};continue}if(byte===36&&this.state.hasDigit&&!this.state.sawDollar){this.cursor+=1,this.state={tag:"csi_private_reply",semicolons:this.state.semicolons,hasDigit:!0,sawDollar:!0};continue}if(byte>=64&&byte<=126){let end=this.cursor+1;this.emitKeyOrResponse("csi",decodeUtf8(bytes.subarray(this.unitStart,end))),this.state={tag:"ground"},this.consumePrefix(end);continue}this.state={tag:"csi"};continue}case"csi_private_reply_deferred":{if(this.cursor>=bytes.length){this.pendingSinceMs=null,this.forceFlush=!1;return}if(byte===ESC){this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(isAsciiDigit(byte)||byte===59||byte===36){this.state={tag:"csi_private_reply",semicolons:this.state.semicolons,hasDigit:this.state.hasDigit,sawDollar:this.state.sawDollar};continue}if(canCompleteDeferredPrivateReplyCsi(this.state,byte,this.protocolContext)){this.state={tag:"csi_private_reply",semicolons:this.state.semicolons,hasDigit:this.state.hasDigit,sawDollar:this.state.sawDollar};continue}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}case"osc":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(this.state.sawEsc){if(byte===92){let end=this.cursor+1;this.emitOpaqueResponse("osc",bytes.subarray(this.unitStart,end)),this.state={tag:"ground"},this.consumePrefix(end);continue}this.state={tag:"osc",sawEsc:!1};continue}if(byte===BEL){let end=this.cursor+1;this.emitOpaqueResponse("osc",bytes.subarray(this.unitStart,end)),this.state={tag:"ground"},this.consumePrefix(end);continue}if(byte===ESC){this.cursor+=1,this.state={tag:"osc",sawEsc:!0};continue}this.cursor+=1;continue}case"dcs":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(this.state.sawEsc){if(byte===92){let end=this.cursor+1;this.emitOpaqueResponse("dcs",bytes.subarray(this.unitStart,end)),this.state={tag:"ground"},this.consumePrefix(end);continue}this.state={tag:"dcs",sawEsc:!1};continue}if(byte===ESC){this.cursor+=1,this.state={tag:"dcs",sawEsc:!0};continue}this.cursor+=1;continue}case"apc":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(this.state.sawEsc){if(byte===92){let end=this.cursor+1;this.emitOpaqueResponse("apc",bytes.subarray(this.unitStart,end)),this.state={tag:"ground"},this.consumePrefix(end);continue}this.state={tag:"apc",sawEsc:!1};continue}if(byte===ESC){this.cursor+=1,this.state={tag:"apc",sawEsc:!0};continue}this.cursor+=1;continue}case"esc_less_mouse":{if(this.cursor>=bytes.length){if(!this.forceFlush){this.markPending();return}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}if(byte>=48&&byte<=57||byte===59){this.cursor+=1;continue}if(byte===77||byte===109){let end=this.cursor+1;this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,end)),this.state={tag:"ground"},this.consumePrefix(end);continue}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);continue}case"esc_less_x10_mouse":{let end=this.unitStart+5;if(bytes.length<end){if(!this.forceFlush){this.markPending();return}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,bytes.length)),this.state={tag:"ground"},this.consumePrefix(bytes.length);continue}this.emitOpaqueResponse("unknown",bytes.subarray(this.unitStart,end)),this.state={tag:"ground"},this.consumePrefix(end);continue}}}}emitKeyOrResponse(protocol,raw){let parsed=parseKeypress(raw,{useKittyKeyboard:this.useKittyKeyboard});if(parsed){this.events.push({type:"key",raw:parsed.raw,key:parsed});return}this.events.push({type:"response",protocol,sequence:raw})}emitMouse(rawBytes,encoding){let event=this.mouseParser.parseMouseEvent(rawBytes);if(!event){this.emitOpaqueResponse("unknown",rawBytes);return}this.events.push({type:"mouse",raw:decodeLatin1(rawBytes),encoding,event})}emitLegacyHighByte(byte){let parsed=parseKeypress(Buffer3.from([byte]),{useKittyKeyboard:this.useKittyKeyboard});if(parsed){this.events.push({type:"key",raw:parsed.raw,key:parsed});return}this.events.push({type:"response",protocol:"unknown",sequence:String.fromCharCode(byte)})}emitOpaqueResponse(protocol,rawBytes){this.events.push({type:"response",protocol,sequence:decodeLatin1(rawBytes)})}consumePrefix(endExclusive){this.pending.consume(endExclusive),this.cursor=0,this.unitStart=0,this.pendingSinceMs=null,this.forceFlush=!1}takePendingBytes(){let buffered=this.pending.take();return this.cursor=0,this.unitStart=0,this.pendingSinceMs=null,this.forceFlush=!1,buffered}flushPendingOverflow(){if(this.pending.length===0)return;this.emitOpaqueResponse("unknown",this.pending.view()),this.pending.clear(),this.cursor=0,this.unitStart=0,this.pendingSinceMs=null,this.forceFlush=!1,this.state={tag:"ground"}}markPending(){this.pendingSinceMs=this.clock.now()}consumePasteBytes(chunk){let paste=this.paste,combined=concatBytes(paste.tail,chunk),endIndex=indexOfBytes(combined,BRACKETED_PASTE_END);if(endIndex!==-1)return this.pushPasteBytes(combined.subarray(0,endIndex)),this.events.push({type:"paste",bytes:joinPasteBytes(paste.parts,paste.totalLength)}),this.paste=null,combined.subarray(endIndex+BRACKETED_PASTE_END.length);let keep=Math.min(BRACKETED_PASTE_END.length-1,combined.length),stableLength=combined.length-keep;if(stableLength>0)this.pushPasteBytes(combined.subarray(0,stableLength));return paste.tail=Uint8Array.from(combined.subarray(stableLength)),EMPTY_BYTES}pushPasteBytes(bytes){if(bytes.length===0)return;this.paste.parts.push(Uint8Array.from(bytes)),this.paste.totalLength+=bytes.length}reconcileDeferredStateWithProtocolContext(){switch(this.state.tag){case"csi_parametric_deferred":if(!canDeferParametricCsi(this.state,this.protocolContext))this.emitOpaqueResponse("unknown",this.pending.view().subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);return;case"csi_private_reply_deferred":if(!canDeferPrivateReplyCsi(this.protocolContext))this.emitOpaqueResponse("unknown",this.pending.view().subarray(this.unitStart,this.cursor)),this.state={tag:"ground"},this.consumePrefix(this.cursor);return}}reconcileTimeoutState(){if(!this.armTimeouts)return;if(this.paste||this.pendingSinceMs===null||this.pending.length===0){this.clearTimeout();return}this.clearTimeout(),this.timeoutId=this.clock.setTimeout(()=>{if(this.timeoutId=null,this.destroyed)return;try{this.flushTimeout(this.clock.now()),this.onTimeoutFlush?.()}catch(error2){console.error("stdin parser timeout flush failed",error2)}},this.timeoutMs)}clearTimeout(){if(!this.timeoutId)return;this.clock.clearTimeout(this.timeoutId),this.timeoutId=null}resetState(){this.pending.reset(INITIAL_PENDING_CAPACITY),this.events.length=0,this.pendingSinceMs=null,this.forceFlush=!1,this.justFlushedEsc=!1,this.state={tag:"ground"},this.cursor=0,this.unitStart=0,this.paste=null,this.mouseParser.reset()}}function getSpecificity(group){return group.split(".").length}function shouldSuppressInInjection(group,meta){if(meta?.isInjection)return!1;return group==="markup.raw.block"}function treeSitterToTextChunks(content,highlights,syntaxStyle,options){let chunks=[],defaultStyle=syntaxStyle.getStyle("default"),concealEnabled=options?.enabled??!0,injectionContainerRanges=[],boundaries=[];for(let i2=0;i2<highlights.length;i2++){let[start2,end,,meta]=highlights[i2];if(start2===end)continue;if(meta?.containsInjection)injectionContainerRanges.push({start:start2,end});boundaries.push({offset:start2,type:"start",highlightIndex:i2}),boundaries.push({offset:end,type:"end",highlightIndex:i2})}boundaries.sort((a,b2)=>{if(a.offset!==b2.offset)return a.offset-b2.offset;if(a.type==="end"&&b2.type==="start")return-1;if(a.type==="start"&&b2.type==="end")return 1;return 0});let activeHighlights=new Set,currentOffset=0;for(let i2=0;i2<boundaries.length;i2++){let boundary=boundaries[i2];if(currentOffset<boundary.offset&&activeHighlights.size>0){let segmentText=content.slice(currentOffset,boundary.offset),activeGroups=[];for(let idx of activeHighlights){let[,,group,meta]=highlights[idx];activeGroups.push({group,meta,index:idx})}let concealHighlight=concealEnabled?activeGroups.find((h)=>h.meta?.conceal!==void 0||h.group==="conceal"||h.group.startsWith("conceal.")):void 0;if(concealHighlight){let replacementText="";if(concealHighlight.meta?.conceal!==void 0)replacementText=concealHighlight.meta.conceal;else if(concealHighlight.group==="conceal.with.space")replacementText=" ";if(replacementText)chunks.push({__isChunk:!0,text:replacementText,fg:defaultStyle?.fg,bg:defaultStyle?.bg,attributes:defaultStyle?createTextAttributes({bold:defaultStyle.bold,italic:defaultStyle.italic,underline:defaultStyle.underline,dim:defaultStyle.dim}):0})}else{let insideInjectionContainer=injectionContainerRanges.some((range)=>currentOffset>=range.start&¤tOffset<range.end),sortedGroups=activeGroups.filter((h)=>{if(insideInjectionContainer&&shouldSuppressInInjection(h.group,h.meta))return!1;return!0}).sort((a,b2)=>{let aSpec=getSpecificity(a.group),bSpec=getSpecificity(b2.group);if(aSpec!==bSpec)return aSpec-bSpec;return a.index-b2.index}),mergedStyle={};for(let{group}of sortedGroups){let styleForGroup=syntaxStyle.getStyle(group);if(!styleForGroup&&group.includes(".")){let baseName=group.split(".")[0];styleForGroup=syntaxStyle.getStyle(baseName)}if(styleForGroup){if(styleForGroup.fg!==void 0)mergedStyle.fg=styleForGroup.fg;if(styleForGroup.bg!==void 0)mergedStyle.bg=styleForGroup.bg;if(styleForGroup.bold!==void 0)mergedStyle.bold=styleForGroup.bold;if(styleForGroup.italic!==void 0)mergedStyle.italic=styleForGroup.italic;if(styleForGroup.underline!==void 0)mergedStyle.underline=styleForGroup.underline;if(styleForGroup.dim!==void 0)mergedStyle.dim=styleForGroup.dim}else if(group.includes(".")){let baseName=group.split(".")[0];if(env.OTUI_TS_STYLE_WARN)console.warn(`Syntax style not found for group "${group}" or base scope "${baseName}", using default style`)}else if(env.OTUI_TS_STYLE_WARN)console.warn(`Syntax style not found for group "${group}", using default style`)}let finalStyle=Object.keys(mergedStyle).length>0?mergedStyle:defaultStyle;chunks.push({__isChunk:!0,text:segmentText,fg:finalStyle?.fg,bg:finalStyle?.bg,attributes:finalStyle?createTextAttributes({bold:finalStyle.bold,italic:finalStyle.italic,underline:finalStyle.underline,dim:finalStyle.dim}):0})}}else if(currentOffset<boundary.offset){let text=content.slice(currentOffset,boundary.offset);chunks.push({__isChunk:!0,text,fg:defaultStyle?.fg,bg:defaultStyle?.bg,attributes:defaultStyle?createTextAttributes({bold:defaultStyle.bold,italic:defaultStyle.italic,underline:defaultStyle.underline,dim:defaultStyle.dim}):0})}if(boundary.type==="start")activeHighlights.add(boundary.highlightIndex);else if(activeHighlights.delete(boundary.highlightIndex),concealEnabled){let[,,group,meta]=highlights[boundary.highlightIndex];if(meta?.concealLines!==void 0){if(boundary.offset<content.length&&content[boundary.offset]===`
|
|
2327
|
-
`){currentOffset=boundary.offset+1;continue}}if(meta?.conceal!==void 0){if(meta.conceal===" "){if(boundary.offset<content.length&&content[boundary.offset]===" "){currentOffset=boundary.offset+1;continue}}else if(meta.conceal===""&&group==="conceal"&&!meta.isInjection){if(boundary.offset<content.length&&content[boundary.offset]===" "){currentOffset=boundary.offset+1;continue}}}}currentOffset=boundary.offset}if(currentOffset<content.length){let text=content.slice(currentOffset);chunks.push({__isChunk:!0,text,fg:defaultStyle?.fg,bg:defaultStyle?.bg,attributes:defaultStyle?createTextAttributes({bold:defaultStyle.bold,italic:defaultStyle.italic,underline:defaultStyle.underline,dim:defaultStyle.dim}):0})}return chunks}async function treeSitterToStyledText(content,filetype,syntaxStyle,client,options){let result2=await client.highlightOnce(content,filetype);if(result2.highlights&&result2.highlights.length>0){let chunks=treeSitterToTextChunks(content,result2.highlights,syntaxStyle,options?.conceal);return new StyledText(chunks)}else{let defaultStyle=syntaxStyle.mergeStyles("default"),chunks=[{__isChunk:!0,text:content,fg:defaultStyle.fg,bg:defaultStyle.bg,attributes:defaultStyle.attributes}];return new StyledText(chunks)}}class DebounceController{scopeId;constructor(scopeId){if(this.scopeId=scopeId,!TIMERS_MAP.has(this.scopeId))TIMERS_MAP.set(this.scopeId,new Map)}debounce(id,ms,fn){let scopeMap=TIMERS_MAP.get(this.scopeId);return new Promise((resolve14,reject)=>{if(scopeMap.has(id))clearTimeout(scopeMap.get(id));let timerId=setTimeout(()=>{try{resolve14(fn())}catch(error2){reject(error2)}scopeMap.delete(id)},ms);scopeMap.set(id,timerId)})}clearDebounce(id){let scopeMap=TIMERS_MAP.get(this.scopeId);if(scopeMap&&scopeMap.has(id))clearTimeout(scopeMap.get(id)),scopeMap.delete(id)}clear(){let scopeMap=TIMERS_MAP.get(this.scopeId);if(scopeMap)scopeMap.forEach((timerId)=>clearTimeout(timerId)),scopeMap.clear()}}function createDebounce(scopeId){return new DebounceController(scopeId)}function clearDebounceScope(scopeId){let scopeMap=TIMERS_MAP.get(scopeId);if(scopeMap)scopeMap.forEach((timerId)=>clearTimeout(timerId)),scopeMap.clear()}class ProcessQueue{processor;queue=[];processing=!1;autoProcess=!0;constructor(processor,autoProcess=!0){this.processor=processor,this.autoProcess=autoProcess}enqueue(item){if(this.queue.push(item),!this.processing&&this.autoProcess)this.processQueue()}processQueue(){if(this.queue.length===0)return;this.processing=!0,queueMicrotask(async()=>{if(this.queue.length===0){this.processing=!1;return}let item=this.queue.shift();try{await this.processor(item)}catch(error2){console.error("Error processing queue item:",error2)}if(this.queue.length>0)this.processQueue();else this.processing=!1})}clear(){this.queue=[]}isProcessing(){return this.processing}size(){return this.queue.length}}function getParsers(){if(!_cachedParsers)_cachedParsers=[{filetype:"javascript",aliases:["javascriptreact"],queries:{highlights:[resolve12(
|
|
2328
|
-
`)}static async fetchHighlightQuery(source,cacheDir,filetype){let result2=await this.downloadOrLoad(source,cacheDir,"queries",".scm",!0,filetype);if(result2.error)return console.error(`Error fetching highlight query from ${source}:`,result2.error),"";if(result2.content)return new TextDecoder().decode(result2.content);return""}}function getDefaultOptions(){return{configPath:path4.resolve(__dirname2,"../parsers-config"),assetsDir:path4.resolve(__dirname2),outputPath:path4.resolve(__dirname2,"../default-parsers.ts")}}async function loadConfig2(configPath2){let ext=path4.extname(configPath2),resolvedConfigPath=configPath2;if(ext===""){let file=(await
|
|
2362
|
+
`){currentOffset=boundary.offset+1;continue}}if(meta?.conceal!==void 0){if(meta.conceal===" "){if(boundary.offset<content.length&&content[boundary.offset]===" "){currentOffset=boundary.offset+1;continue}}else if(meta.conceal===""&&group==="conceal"&&!meta.isInjection){if(boundary.offset<content.length&&content[boundary.offset]===" "){currentOffset=boundary.offset+1;continue}}}}currentOffset=boundary.offset}if(currentOffset<content.length){let text=content.slice(currentOffset);chunks.push({__isChunk:!0,text,fg:defaultStyle?.fg,bg:defaultStyle?.bg,attributes:defaultStyle?createTextAttributes({bold:defaultStyle.bold,italic:defaultStyle.italic,underline:defaultStyle.underline,dim:defaultStyle.dim}):0})}return chunks}async function treeSitterToStyledText(content,filetype,syntaxStyle,client,options){let result2=await client.highlightOnce(content,filetype);if(result2.highlights&&result2.highlights.length>0){let chunks=treeSitterToTextChunks(content,result2.highlights,syntaxStyle,options?.conceal);return new StyledText(chunks)}else{let defaultStyle=syntaxStyle.mergeStyles("default"),chunks=[{__isChunk:!0,text:content,fg:defaultStyle.fg,bg:defaultStyle.bg,attributes:defaultStyle.attributes}];return new StyledText(chunks)}}class DebounceController{scopeId;constructor(scopeId){if(this.scopeId=scopeId,!TIMERS_MAP.has(this.scopeId))TIMERS_MAP.set(this.scopeId,new Map)}debounce(id,ms,fn){let scopeMap=TIMERS_MAP.get(this.scopeId);return new Promise((resolve14,reject)=>{if(scopeMap.has(id))clearTimeout(scopeMap.get(id));let timerId=setTimeout(()=>{try{resolve14(fn())}catch(error2){reject(error2)}scopeMap.delete(id)},ms);scopeMap.set(id,timerId)})}clearDebounce(id){let scopeMap=TIMERS_MAP.get(this.scopeId);if(scopeMap&&scopeMap.has(id))clearTimeout(scopeMap.get(id)),scopeMap.delete(id)}clear(){let scopeMap=TIMERS_MAP.get(this.scopeId);if(scopeMap)scopeMap.forEach((timerId)=>clearTimeout(timerId)),scopeMap.clear()}}function createDebounce(scopeId){return new DebounceController(scopeId)}function clearDebounceScope(scopeId){let scopeMap=TIMERS_MAP.get(scopeId);if(scopeMap)scopeMap.forEach((timerId)=>clearTimeout(timerId)),scopeMap.clear()}class ProcessQueue{processor;queue=[];processing=!1;autoProcess=!0;constructor(processor,autoProcess=!0){this.processor=processor,this.autoProcess=autoProcess}enqueue(item){if(this.queue.push(item),!this.processing&&this.autoProcess)this.processQueue()}processQueue(){if(this.queue.length===0)return;this.processing=!0,queueMicrotask(async()=>{if(this.queue.length===0){this.processing=!1;return}let item=this.queue.shift();try{await this.processor(item)}catch(error2){console.error("Error processing queue item:",error2)}if(this.queue.length>0)this.processQueue();else this.processing=!1})}clear(){this.queue=[]}isProcessing(){return this.processing}size(){return this.queue.length}}function getParsers(){if(!_cachedParsers)_cachedParsers=[{filetype:"javascript",aliases:["javascriptreact"],queries:{highlights:[resolve12(dirname13(fileURLToPath2(import.meta.url)),highlights_default)]},wasm:resolve12(dirname13(fileURLToPath2(import.meta.url)),tree_sitter_javascript_default)},{filetype:"typescript",aliases:["typescriptreact"],queries:{highlights:[resolve12(dirname13(fileURLToPath2(import.meta.url)),highlights_default2)]},wasm:resolve12(dirname13(fileURLToPath2(import.meta.url)),tree_sitter_typescript_default)},{filetype:"markdown",queries:{highlights:[resolve12(dirname13(fileURLToPath2(import.meta.url)),highlights_default3)],injections:[resolve12(dirname13(fileURLToPath2(import.meta.url)),injections_default)]},wasm:resolve12(dirname13(fileURLToPath2(import.meta.url)),tree_sitter_markdown_default),injectionMapping:{nodeTypes:{inline:"markdown_inline",pipe_table_cell:"markdown_inline"},infoStringMap:{javascript:"javascript",js:"javascript",jsx:"javascriptreact",javascriptreact:"javascriptreact",typescript:"typescript",ts:"typescript",tsx:"typescriptreact",typescriptreact:"typescriptreact",markdown:"markdown",md:"markdown"}}},{filetype:"markdown_inline",queries:{highlights:[resolve12(dirname13(fileURLToPath2(import.meta.url)),highlights_default4)]},wasm:resolve12(dirname13(fileURLToPath2(import.meta.url)),tree_sitter_markdown_inline_default)},{filetype:"zig",queries:{highlights:[resolve12(dirname13(fileURLToPath2(import.meta.url)),highlights_default5)]},wasm:resolve12(dirname13(fileURLToPath2(import.meta.url)),tree_sitter_zig_default)}];return _cachedParsers}function isBunfsPath(path6){return path6.includes("$bunfs")||/^B:[\\/]~BUN/i.test(path6)}function getBunfsRootPath(){return process.platform==="win32"?"B:\\~BUN\\root":"/$bunfs/root"}function normalizeBunfsPath(fileName){return join61(getBunfsRootPath(),basename11(fileName))}function addDefaultParsers(parsers2){for(let parser of parsers2)DEFAULT_PARSERS=[...DEFAULT_PARSERS.filter((existingParser)=>existingParser.filetype!==parser.filetype),parser]}function isValidDirectoryName(name){if(!name||typeof name!=="string")return!1;if(name.trim().length===0)return!1;if(["CON","PRN","AUX","NUL","COM1","COM2","COM3","COM4","COM5","COM6","COM7","COM8","COM9","LPT1","LPT2","LPT3","LPT4","LPT5","LPT6","LPT7","LPT8","LPT9"].includes(name.toUpperCase()))return!1;if(/[<>:"|?*/\\\x00-\x1f]/.test(name))return!1;if(name.endsWith(".")||name.endsWith(" "))return!1;if(name==="."||name==="..")return!1;return!0}function getDataPaths(){return singleton("data-paths-opentui",()=>new DataPathsManager)}function normalizeFiletypeToken(value){return value.trim().replace(/^\./,"").toLowerCase()||void 0}function getBasename(value){let normalizedValue=value.trim().replaceAll("\\","/");if(!normalizedValue)return;return path22.posix.basename(normalizedValue).toLowerCase()||void 0}function extToFiletype(extension){let normalizedExtension=normalizeFiletypeToken(extension);if(!normalizedExtension)return;return extensionToFiletype.get(normalizedExtension)}function pathToFiletype(path33){if(typeof path33!=="string")return;let basename22=getBasename(path33);if(!basename22)return;let basenameFiletype=basenameToFiletype.get(basename22);if(basenameFiletype)return basenameFiletype;let lastDot=basename22.lastIndexOf(".");if(lastDot===-1||lastDot===basename22.length-1)return;let extension=basename22.substring(lastDot+1);return extToFiletype(extension)}function infoStringToFiletype(infoString){if(typeof infoString!=="string")return;let token=infoString.trim().split(/\s+/,1)[0],directBasenameMatch=basenameToFiletype.get(token.toLowerCase());if(directBasenameMatch)return directBasenameMatch;let normalizedToken=normalizeFiletypeToken(token);if(!normalizedToken)return;return basenameToFiletype.get(normalizedToken)??pathToFiletype(normalizedToken)??extToFiletype(normalizedToken)??normalizedToken}class DownloadUtils{static hashUrl(url){let hash=0;for(let i2=0;i2<url.length;i2++){let char=url.charCodeAt(i2);hash=(hash<<5)-hash+char,hash=hash&hash}return Math.abs(hash).toString(16)}static async downloadOrLoad(source,cacheDir,cacheSubdir,fileExtension,useHashForCache=!0,filetype){if(source.startsWith("http://")||source.startsWith("https://")){let cacheFileName;if(useHashForCache){let hash=this.hashUrl(source);cacheFileName=filetype?`${filetype}-${hash}${fileExtension}`:`${hash}${fileExtension}`}else cacheFileName=path32.basename(source);let cacheFile=path32.join(cacheDir,cacheSubdir,cacheFileName);await mkdir10(path32.dirname(cacheFile),{recursive:!0});try{let cachedContent=await readFile17(cacheFile);if(cachedContent.byteLength>0)return console.log(`Loaded from cache: ${cacheFile} (${source})`),{content:cachedContent,filePath:cacheFile}}catch(error2){}try{console.log(`Downloading from URL: ${source}`);let response=await fetch(source);if(!response.ok)return{error:`Failed to fetch from ${source}: ${response.statusText}`};let content=Buffer.from(await response.arrayBuffer());try{await writeFile10(cacheFile,Buffer.from(content)),console.log(`Cached: ${source}`)}catch(cacheError){console.warn(`Failed to cache: ${cacheError}`)}return{content,filePath:cacheFile}}catch(error2){return{error:`Error downloading from ${source}: ${error2}`}}}else try{return console.log(`Loading from local path: ${source}`),{content:await readFile17(source),filePath:source}}catch(error2){return{error:`Error loading from local path ${source}: ${error2}`}}}static async downloadToPath(source,targetPath){let isUrl2=source.startsWith("http://")||source.startsWith("https://");if(await mkdir10(path32.dirname(targetPath),{recursive:!0}),isUrl2)try{console.log(`Downloading from URL: ${source}`);let response=await fetch(source);if(!response.ok)return{error:`Failed to fetch from ${source}: ${response.statusText}`};let content=Buffer.from(await response.arrayBuffer());return await writeFile10(targetPath,Buffer.from(content)),console.log(`Downloaded: ${source} -> ${targetPath}`),{content,filePath:targetPath}}catch(error2){return{error:`Error downloading from ${source}: ${error2}`}}else try{console.log(`Copying from local path: ${source}`);let content=await readFile17(source);return await writeFile10(targetPath,Buffer.from(content)),{content,filePath:targetPath}}catch(error2){return{error:`Error copying from local path ${source}: ${error2}`}}}static async fetchHighlightQueries(sources,cacheDir,filetype){let queryPromises=sources.map((source)=>this.fetchHighlightQuery(source,cacheDir,filetype));return(await Promise.all(queryPromises)).filter((query2)=>query2.trim().length>0).join(`
|
|
2363
|
+
`)}static async fetchHighlightQuery(source,cacheDir,filetype){let result2=await this.downloadOrLoad(source,cacheDir,"queries",".scm",!0,filetype);if(result2.error)return console.error(`Error fetching highlight query from ${source}:`,result2.error),"";if(result2.content)return new TextDecoder().decode(result2.content);return""}}function getDefaultOptions(){return{configPath:path4.resolve(__dirname2,"../parsers-config"),assetsDir:path4.resolve(__dirname2),outputPath:path4.resolve(__dirname2,"../default-parsers.ts")}}async function loadConfig2(configPath2){let ext=path4.extname(configPath2),resolvedConfigPath=configPath2;if(ext===""){let file=(await readdir8(path4.dirname(configPath2))).find((file2)=>file2.startsWith(path4.basename(configPath2))&&(file2.endsWith(".json")||file2.endsWith(".ts")||file2.endsWith(".js")));if(!file)throw Error(`No config file found for ${configPath2}`);resolvedConfigPath=path4.join(path4.dirname(configPath2),file),ext=path4.extname(resolvedConfigPath)}if(ext===".json"){let configContent=await readFile22(resolvedConfigPath,"utf-8");return JSON.parse(configContent)}else if(ext===".ts"||ext===".js"){let{default:configContent}=await import(resolvedConfigPath);return configContent}throw Error(`Unsupported config file extension: ${ext}`)}async function downloadLanguage(filetype,languageUrl,assetsDir,outputPath){let languageDir=path4.join(assetsDir,filetype),languageFilename=path4.basename(languageUrl),languagePath=path4.join(languageDir,languageFilename),result2=await DownloadUtils.downloadToPath(languageUrl,languagePath);if(result2.error)throw Error(`Failed to download language for ${filetype}: ${result2.error}`);return"./"+path4.relative(path4.dirname(outputPath),languagePath)}async function downloadAndCombineQueries(filetype,queryUrls,assetsDir,outputPath,queryType,configPath2){let queriesDir=path4.join(assetsDir,filetype),queryPath=path4.join(queriesDir,`${queryType}.scm`),queryContents=[];for(let i2=0;i2<queryUrls.length;i2++){let queryUrl=queryUrls[i2];if(queryUrl.startsWith("./")){console.log(` Using local query ${i2+1}/${queryUrls.length}: ${queryUrl}`);try{let localPath=path4.resolve(path4.dirname(configPath2),queryUrl),content=await readFile22(localPath,"utf-8");if(content.trim())queryContents.push(content),console.log(` \u2713 Loaded ${content.split(`
|
|
2329
2364
|
`).length} lines from local file`)}catch(error2){console.warn(`Failed to read local query from ${queryUrl}: ${error2}`);continue}}else{console.log(` Downloading query ${i2+1}/${queryUrls.length}: ${queryUrl}`);try{let response=await fetch(queryUrl);if(!response.ok){console.warn(`Failed to download query from ${queryUrl}: ${response.statusText}`);continue}let content=await response.text();if(content.trim())queryContents.push(`; Query from: ${queryUrl}
|
|
2330
2365
|
${content}`),console.log(` \u2713 Downloaded ${content.split(`
|
|
2331
2366
|
`).length} lines`)}catch(error2){console.warn(`Failed to download query from ${queryUrl}: ${error2}`);continue}}}let combinedContent=queryContents.join(`
|
|
@@ -2370,12 +2405,12 @@ ${parserDefinitions},
|
|
|
2370
2405
|
`)j++;let chunk=text.substring(i2,j),chunkWidth=Bun.stringWidth(chunk);if(displayWidthSoFar+chunkWidth<offset)displayWidthSoFar+=chunkWidth,i2=j;else{for(let k=i2;k<j&&displayWidthSoFar<offset;k++){let charWidth=Bun.stringWidth(text[k]);displayWidthSoFar+=charWidth}break}}return offset-newlineCount}create(options){if(this.destroyed)throw Error("ExtmarksController is destroyed");let id=this.nextId++,typeId=options.typeId??0,extmark={id,start:options.start,end:options.end,virtual:options.virtual??!1,styleId:options.styleId,priority:options.priority,data:options.data,typeId};if(this.extmarks.set(id,extmark),!this.extmarksByTypeId.has(typeId))this.extmarksByTypeId.set(typeId,new Set);if(this.extmarksByTypeId.get(typeId).add(id),options.metadata!==void 0)this.metadata.set(id,options.metadata);return this.updateHighlights(),id}delete(id){if(this.destroyed)throw Error("ExtmarksController is destroyed");if(!this.extmarks.get(id))return!1;return this.deleteExtmarkById(id),this.updateHighlights(),!0}get(id){if(this.destroyed)return null;return this.extmarks.get(id)??null}getAll(){if(this.destroyed)return[];return Array.from(this.extmarks.values())}getVirtual(){if(this.destroyed)return[];return Array.from(this.extmarks.values()).filter((e)=>e.virtual)}getAtOffset(offset){if(this.destroyed)return[];return Array.from(this.extmarks.values()).filter((e)=>offset>=e.start&&offset<e.end)}getAllForTypeId(typeId){if(this.destroyed)return[];let ids=this.extmarksByTypeId.get(typeId);if(!ids)return[];return Array.from(ids).map((id)=>this.extmarks.get(id)).filter((e)=>e!==void 0)}clear(){if(this.destroyed)return;this.extmarks.clear(),this.extmarksByTypeId.clear(),this.metadata.clear(),this.updateHighlights()}saveSnapshot(){this.history.saveSnapshot(this.extmarks,this.nextId)}restoreSnapshot(snapshot){this.extmarks=new Map(Array.from(snapshot.extmarks.entries()).map(([id,extmark])=>[id,{...extmark}])),this.nextId=snapshot.nextId,this.updateHighlights()}wrapUndoRedo(){this.editBuffer.undo=()=>{if(this.destroyed)return this.originalUndo();if(!this.history.canUndo())return this.originalUndo();let currentSnapshot={extmarks:new Map(Array.from(this.extmarks.entries()).map(([id,extmark])=>[id,{...extmark}])),nextId:this.nextId};this.history.pushRedo(currentSnapshot);let snapshot=this.history.undo();return this.restoreSnapshot(snapshot),this.originalUndo()},this.editBuffer.redo=()=>{if(this.destroyed)return this.originalRedo();if(!this.history.canRedo())return this.originalRedo();let currentSnapshot={extmarks:new Map(Array.from(this.extmarks.entries()).map(([id,extmark])=>[id,{...extmark}])),nextId:this.nextId};this.history.pushUndo(currentSnapshot);let snapshot=this.history.redo();return this.restoreSnapshot(snapshot),this.originalRedo()}}registerType(typeName){if(this.destroyed)throw Error("ExtmarksController is destroyed");let existing=this.typeNameToId.get(typeName);if(existing!==void 0)return existing;let typeId=this.nextTypeId++;return this.typeNameToId.set(typeName,typeId),this.typeIdToName.set(typeId,typeName),typeId}getTypeId(typeName){if(this.destroyed)return null;return this.typeNameToId.get(typeName)??null}getTypeName(typeId){if(this.destroyed)return null;return this.typeIdToName.get(typeId)??null}getMetadataFor(extmarkId){if(this.destroyed)return;return this.metadata.get(extmarkId)}destroy(){if(this.destroyed)return;this.editBuffer.moveCursorLeft=this.originalMoveCursorLeft,this.editBuffer.moveCursorRight=this.originalMoveCursorRight,this.editBuffer.setCursorByOffset=this.originalSetCursorByOffset,this.editorView.moveUpVisual=this.originalMoveUpVisual,this.editorView.moveDownVisual=this.originalMoveDownVisual,this.editBuffer.deleteCharBackward=this.originalDeleteCharBackward,this.editBuffer.deleteChar=this.originalDeleteChar,this.editBuffer.insertText=this.originalInsertText,this.editBuffer.insertChar=this.originalInsertChar,this.editBuffer.deleteRange=this.originalDeleteRange,this.editBuffer.setText=this.originalSetText,this.editBuffer.replaceText=this.originalReplaceText,this.editBuffer.clear=this.originalClear,this.editBuffer.newLine=this.originalNewLine,this.editBuffer.deleteLine=this.originalDeleteLine,this.editorView.deleteSelectedText=this.originalEditorViewDeleteSelectedText,this.editBuffer.undo=this.originalUndo,this.editBuffer.redo=this.originalRedo,this.extmarks.clear(),this.extmarksByTypeId.clear(),this.metadata.clear(),this.typeNameToId.clear(),this.typeIdToName.clear(),this.history.clear(),this.destroyed=!0}}function createExtmarksController(editBuffer,editorView){return new ExtmarksController(editBuffer,editorView)}function scaleComponent(comp){let val=parseInt(comp,16),maxIn=(1<<4*comp.length)-1;return Math.round(val/maxIn*255).toString(16).padStart(2,"0")}function toHex(r,g,b2,hex6){if(hex6)return`#${hex6.toLowerCase()}`;if(r&&g&&b2)return`#${scaleComponent(r)}${scaleComponent(g)}${scaleComponent(b2)}`;return"#000000"}function wrapForTmux(osc){return`\x1BPtmux;${osc.replace(/\x1b/g,"\x1B\x1B")}\x1B\\`}class TerminalPalette{stdin;stdout;writeFn;activeQuerySessions=[];inLegacyTmux;oscSource;clock;constructor(stdin,stdout,writeFn,isLegacyTmux,oscSource,clock){this.stdin=stdin,this.stdout=stdout,this.writeFn=writeFn||((data)=>stdout.write(data)),this.inLegacyTmux=isLegacyTmux??!1,this.oscSource=oscSource,this.clock=clock??SYSTEM_CLOCK2}writeOsc(osc){let data=this.inLegacyTmux?wrapForTmux(osc):osc;return this.writeFn(data)}cleanup(){for(let cleanupSession of[...this.activeQuerySessions])cleanupSession();this.activeQuerySessions=[]}subscribeInput(handler){if(this.oscSource)return this.oscSource.subscribeOsc((sequence)=>{handler(sequence)});return this.stdin.on("data",handler),()=>{this.stdin.removeListener("data",handler)}}createQuerySession(){let timers=new Set,subscriptions=new Set,closed=!1,cleanup=()=>{if(closed)return;closed=!0;for(let timer2 of timers)this.clock.clearTimeout(timer2);timers.clear();for(let unsubscribe of subscriptions)unsubscribe();subscriptions.clear();let idx=this.activeQuerySessions.indexOf(cleanup);if(idx!==-1)this.activeQuerySessions.splice(idx,1)};return this.activeQuerySessions.push(cleanup),{setTimer:(fn,ms)=>{let timer2=this.clock.setTimeout(fn,ms);return timers.add(timer2),timer2},resetTimer:(existing,fn,ms)=>{if(existing)this.clock.clearTimeout(existing),timers.delete(existing);let timer2=this.clock.setTimeout(fn,ms);return timers.add(timer2),timer2},subscribeInput:(handler)=>{let unsubscribe=this.subscribeInput(handler);return subscriptions.add(unsubscribe),()=>{if(!subscriptions.has(unsubscribe))return;subscriptions.delete(unsubscribe),unsubscribe()}},cleanup}}async detectOSCSupport(timeoutMs=300){if(!this.stdout.isTTY||!this.stdin.isTTY)return!1;return new Promise((resolve42)=>{let session=this.createQuerySession(),buffer2="",settled=!1,finish=(supported)=>{if(settled)return;settled=!0,session.cleanup(),resolve42(supported)},onData=(chunk)=>{if(buffer2+=chunk.toString(),OSC4_RESPONSE.lastIndex=0,OSC4_RESPONSE.test(buffer2))finish(!0)};session.setTimer(()=>{finish(!1)},timeoutMs),session.subscribeInput(onData),this.writeOsc("\x1B]4;0;?\x07")})}async queryPalette(indices,timeoutMs=1200){let out=this.stdout,results=new Map;if(indices.forEach((i2)=>results.set(i2,null)),!out.isTTY||!this.stdin.isTTY)return results;return new Promise((resolve42)=>{let session=this.createQuerySession(),buffer2="",idleTimer=null,settled=!1,finish=()=>{if(settled)return;settled=!0,session.cleanup(),resolve42(results)},onData=(chunk)=>{buffer2+=chunk.toString();let m;OSC4_RESPONSE.lastIndex=0;while(m=OSC4_RESPONSE.exec(buffer2)){let idx=parseInt(m[1],10);if(results.has(idx))results.set(idx,toHex(m[2],m[3],m[4],m[5]))}if(buffer2.length>8192)buffer2=buffer2.slice(-4096);if([...results.values()].filter((v)=>v!==null).length===results.size){finish();return}idleTimer=session.resetTimer(idleTimer,finish,150)};session.setTimer(finish,timeoutMs),session.subscribeInput(onData),this.writeOsc(indices.map((i2)=>`\x1B]4;${i2};?\x07`).join(""))})}async querySpecialColors(timeoutMs=1200){let out=this.stdout,results={10:null,11:null,12:null,13:null,14:null,15:null,16:null,17:null,19:null};if(!out.isTTY||!this.stdin.isTTY)return results;return new Promise((resolve42)=>{let session=this.createQuerySession(),buffer2="",idleTimer=null,settled=!1,finish=()=>{if(settled)return;settled=!0,session.cleanup(),resolve42(results)},onData=(chunk)=>{buffer2+=chunk.toString();let updated=!1,m;OSC_SPECIAL_RESPONSE.lastIndex=0;while(m=OSC_SPECIAL_RESPONSE.exec(buffer2)){let idx=parseInt(m[1],10);if(idx in results)results[idx]=toHex(m[2],m[3],m[4],m[5]),updated=!0}if(buffer2.length>8192)buffer2=buffer2.slice(-4096);if(Object.values(results).filter((v)=>v!==null).length===Object.keys(results).length){finish();return}if(!updated)return;idleTimer=session.resetTimer(idleTimer,finish,150)};session.setTimer(finish,timeoutMs),session.subscribeInput(onData),this.writeOsc(["\x1B]10;?\x07","\x1B]11;?\x07","\x1B]12;?\x07","\x1B]13;?\x07","\x1B]14;?\x07","\x1B]15;?\x07","\x1B]16;?\x07","\x1B]17;?\x07","\x1B]19;?\x07"].join(""))})}async detect(options){let{timeout=5000,size=16}=options||{};if(!await this.detectOSCSupport())return{palette:Array(size).fill(null),defaultForeground:null,defaultBackground:null,cursorColor:null,mouseForeground:null,mouseBackground:null,tekForeground:null,tekBackground:null,highlightBackground:null,highlightForeground:null};let indicesToQuery=[...Array(size).keys()],[paletteResults,specialColors]=await Promise.all([this.queryPalette(indicesToQuery,timeout),this.querySpecialColors(timeout)]);return{palette:[...Array(size).keys()].map((i2)=>paletteResults.get(i2)??null),defaultForeground:specialColors[10],defaultBackground:specialColors[11],cursorColor:specialColors[12],mouseForeground:specialColors[13],mouseBackground:specialColors[14],tekForeground:specialColors[15],tekBackground:specialColors[16],highlightBackground:specialColors[17],highlightForeground:specialColors[19]}}}function createTerminalPalette(stdin,stdout,writeFn,isLegacyTmux,oscSource,clock){return new TerminalPalette(stdin,stdout,writeFn,isLegacyTmux,oscSource,clock)}function decodePasteBytes(bytes){return PASTE_TEXT_DECODER.decode(bytes)}function stripAnsiSequences(text){return Bun.stripANSI(text)}function detectLinks(chunks,context){let{content,highlights}=context,ranges=[];for(let i2=0;i2<highlights.length;i2++){let[start2,end,group]=highlights[i2];if(!URL_SCOPES.includes(group))continue;let url=content.slice(start2,end);ranges.push({start:start2,end,url});for(let j=i2-1;j>=0;j--){let[labelStart,labelEnd,prev]=highlights[j];if(prev==="markup.link.label"){ranges.push({start:labelStart,end:labelEnd,url});break}if(!prev.startsWith("markup.link"))break}}if(ranges.length===0)return chunks;let contentPos=0;for(let chunk of chunks){if(chunk.text.length<=1)continue;let idx=content.indexOf(chunk.text,contentPos);if(idx<0)continue;for(let range of ranges)if(idx<range.end&&idx+chunk.text.length>range.start){chunk.link={url:range.url};break}contentPos=idx+chunk.text.length}return chunks}function packDrawOptions(border2,shouldFill,titleAlignment){let packed=0;if(border2===!0)packed|=15;else if(Array.isArray(border2)){if(border2.includes("top"))packed|=8;if(border2.includes("right"))packed|=4;if(border2.includes("bottom"))packed|=2;if(border2.includes("left"))packed|=1}if(shouldFill)packed|=16;let alignment={left:0,center:1,right:2}[titleAlignment];return packed|=alignment<<5,packed}class OptimizedBuffer{static fbIdCounter=0;id;lib;bufferPtr;_width;_height;_widthMethod;respectAlpha=!1;_rawBuffers=null;_destroyed=!1;get ptr(){return this.bufferPtr}guard(){if(this._destroyed)throw Error(`Buffer ${this.id} is destroyed`)}get buffers(){if(this.guard(),this._rawBuffers===null){let size=this._width*this._height,charPtr=this.lib.bufferGetCharPtr(this.bufferPtr),fgPtr=this.lib.bufferGetFgPtr(this.bufferPtr),bgPtr=this.lib.bufferGetBgPtr(this.bufferPtr),attributesPtr=this.lib.bufferGetAttributesPtr(this.bufferPtr);this._rawBuffers={char:new Uint32Array(toArrayBuffer(charPtr,0,size*4)),fg:new Float32Array(toArrayBuffer(fgPtr,0,size*4*4)),bg:new Float32Array(toArrayBuffer(bgPtr,0,size*4*4)),attributes:new Uint32Array(toArrayBuffer(attributesPtr,0,size*4))}}return this._rawBuffers}constructor(lib,ptr22,width,height2,options){this.id=options.id||`fb_${OptimizedBuffer.fbIdCounter++}`,this.lib=lib,this.respectAlpha=options.respectAlpha||!1,this._width=width,this._height=height2,this._widthMethod=options.widthMethod||"unicode",this.bufferPtr=ptr22}static create(width,height2,widthMethod,options={}){let lib=resolveRenderLib(),respectAlpha=options.respectAlpha||!1,id=options.id&&options.id.trim()!==""?options.id:"unnamed buffer";return lib.createOptimizedBuffer(width,height2,widthMethod,respectAlpha,id)}get widthMethod(){return this._widthMethod}get width(){return this._width}get height(){return this._height}setRespectAlpha(respectAlpha){this.guard(),this.lib.bufferSetRespectAlpha(this.bufferPtr,respectAlpha),this.respectAlpha=respectAlpha}getNativeId(){return this.guard(),this.lib.bufferGetId(this.bufferPtr)}getRealCharBytes(addLineBreaks=!1){this.guard();let realSize=this.lib.bufferGetRealCharSize(this.bufferPtr),outputBuffer=new Uint8Array(realSize),bytesWritten=this.lib.bufferWriteResolvedChars(this.bufferPtr,outputBuffer,addLineBreaks);return outputBuffer.slice(0,bytesWritten)}getSpanLines(){this.guard();let{char,fg:fg2,bg:bg2,attributes}=this.buffers,lines=[],CHAR_FLAG_CONTINUATION=-1073741824,CHAR_FLAG_MASK=-1073741824,realTextBytes=this.getRealCharBytes(!0),realTextLines=new TextDecoder().decode(realTextBytes).split(`
|
|
2371
2406
|
`);for(let y=0;y<this._height;y++){let spans=[],currentSpan=null,lineChars=[...realTextLines[y]||""],charIdx=0;for(let x=0;x<this._width;x++){let i2=y*this._width+x,cp3=char[i2],cellFg=RGBA.fromValues(fg2[i2*4],fg2[i2*4+1],fg2[i2*4+2],fg2[i2*4+3]),cellBg=RGBA.fromValues(bg2[i2*4],bg2[i2*4+1],bg2[i2*4+2],bg2[i2*4+3]),cellAttrs=attributes[i2]&255,cellChar=(cp3&CHAR_FLAG_MASK)===CHAR_FLAG_CONTINUATION?"":lineChars[charIdx++]??" ";if(currentSpan&¤tSpan.fg.equals(cellFg)&¤tSpan.bg.equals(cellBg)&¤tSpan.attributes===cellAttrs)currentSpan.text+=cellChar,currentSpan.width+=1;else{if(currentSpan)spans.push(currentSpan);currentSpan={text:cellChar,fg:cellFg,bg:cellBg,attributes:cellAttrs,width:1}}}if(currentSpan)spans.push(currentSpan);lines.push({spans})}return lines}clear(bg2=RGBA.fromValues(0,0,0,1)){this.guard(),this.lib.bufferClear(this.bufferPtr,bg2)}setCell(x,y,char,fg2,bg2,attributes=0){this.guard(),this.lib.bufferSetCell(this.bufferPtr,x,y,char,fg2,bg2,attributes)}setCellWithAlphaBlending(x,y,char,fg2,bg2,attributes=0){this.guard(),this.lib.bufferSetCellWithAlphaBlending(this.bufferPtr,x,y,char,fg2,bg2,attributes)}drawText(text,x,y,fg2,bg2,attributes=0,selection2){if(this.guard(),!selection2){this.lib.bufferDrawText(this.bufferPtr,text,x,y,fg2,bg2,attributes);return}let{start:start2,end}=selection2,selectionBg,selectionFg;if(selection2.bgColor)selectionBg=selection2.bgColor,selectionFg=selection2.fgColor||fg2;else{let defaultBg=bg2||RGBA.fromValues(0,0,0,0);selectionFg=defaultBg.a>0?defaultBg:RGBA.fromValues(0,0,0,1),selectionBg=fg2}if(start2>0){let beforeText=text.slice(0,start2);this.lib.bufferDrawText(this.bufferPtr,beforeText,x,y,fg2,bg2,attributes)}if(end>start2){let selectedText=text.slice(start2,end);this.lib.bufferDrawText(this.bufferPtr,selectedText,x+start2,y,selectionFg,selectionBg,attributes)}if(end<text.length){let afterText=text.slice(end);this.lib.bufferDrawText(this.bufferPtr,afterText,x+end,y,fg2,bg2,attributes)}}fillRect(x,y,width,height2,bg2){this.lib.bufferFillRect(this.bufferPtr,x,y,width,height2,bg2)}colorMatrix(matrix,cellMask,strength=1,target=3){if(this.guard(),matrix.length!==16)throw RangeError(`colorMatrix matrix must have length 16, got ${matrix.length}`);let cellMaskCount=Math.floor(cellMask.length/3);this.lib.bufferColorMatrix(this.bufferPtr,ptr(matrix),ptr(cellMask),cellMaskCount,strength,target)}colorMatrixUniform(matrix,strength=1,target=3){if(this.guard(),matrix.length!==16)throw RangeError(`colorMatrixUniform matrix must have length 16, got ${matrix.length}`);if(strength===0)return;this.lib.bufferColorMatrixUniform(this.bufferPtr,ptr(matrix),strength,target)}drawFrameBuffer(destX,destY,frameBuffer,sourceX,sourceY,sourceWidth,sourceHeight){this.guard(),this.lib.drawFrameBuffer(this.bufferPtr,destX,destY,frameBuffer.ptr,sourceX,sourceY,sourceWidth,sourceHeight)}destroy(){if(this._destroyed)return;this._destroyed=!0,this.lib.destroyOptimizedBuffer(this.bufferPtr)}drawTextBuffer(textBufferView,x,y){this.guard(),this.lib.bufferDrawTextBufferView(this.bufferPtr,textBufferView.ptr,x,y)}drawEditorView(editorView,x,y){this.guard(),this.lib.bufferDrawEditorView(this.bufferPtr,editorView.ptr,x,y)}drawSuperSampleBuffer(x,y,pixelDataPtr,pixelDataLength,format,alignedBytesPerRow){this.guard(),this.lib.bufferDrawSuperSampleBuffer(this.bufferPtr,x,y,pixelDataPtr,pixelDataLength,format,alignedBytesPerRow)}drawPackedBuffer(dataPtr,dataLen,posX,posY,terminalWidthCells,terminalHeightCells){this.guard(),this.lib.bufferDrawPackedBuffer(this.bufferPtr,dataPtr,dataLen,posX,posY,terminalWidthCells,terminalHeightCells)}drawGrayscaleBuffer(posX,posY,intensities,srcWidth,srcHeight,fg2=null,bg2=null){this.guard(),this.lib.bufferDrawGrayscaleBuffer(this.bufferPtr,posX,posY,ptr(intensities),srcWidth,srcHeight,fg2,bg2)}drawGrayscaleBufferSupersampled(posX,posY,intensities,srcWidth,srcHeight,fg2=null,bg2=null){this.guard(),this.lib.bufferDrawGrayscaleBufferSupersampled(this.bufferPtr,posX,posY,ptr(intensities),srcWidth,srcHeight,fg2,bg2)}resize(width,height2){if(this.guard(),this._width===width&&this._height===height2)return;this._width=width,this._height=height2,this._rawBuffers=null,this.lib.bufferResize(this.bufferPtr,width,height2)}drawBox(options){this.guard();let style=parseBorderStyle(options.borderStyle,"single"),borderChars=options.customBorderChars??BorderCharArrays[style],packedOptions=packDrawOptions(options.border,options.shouldFill??!1,options.titleAlignment||"left");this.lib.bufferDrawBox(this.bufferPtr,options.x,options.y,options.width,options.height,borderChars,packedOptions,options.borderColor,options.backgroundColor,options.title??null)}pushScissorRect(x,y,width,height2){this.guard(),this.lib.bufferPushScissorRect(this.bufferPtr,x,y,width,height2)}popScissorRect(){this.guard(),this.lib.bufferPopScissorRect(this.bufferPtr)}clearScissorRects(){this.guard(),this.lib.bufferClearScissorRects(this.bufferPtr)}pushOpacity(opacity){this.guard(),this.lib.bufferPushOpacity(this.bufferPtr,Math.max(0,Math.min(1,opacity)))}popOpacity(){this.guard(),this.lib.bufferPopOpacity(this.bufferPtr)}getCurrentOpacity(){return this.guard(),this.lib.bufferGetCurrentOpacity(this.bufferPtr)}clearOpacity(){this.guard(),this.lib.bufferClearOpacity(this.bufferPtr)}encodeUnicode(text){return this.guard(),this.lib.encodeUnicode(text,this._widthMethod)}freeUnicode(encoded){this.guard(),this.lib.freeUnicode(encoded)}drawGrid(options){this.guard();let columnCount=Math.max(0,options.columnOffsets.length-1),rowCount=Math.max(0,options.rowOffsets.length-1);this.lib.bufferDrawGrid(this.bufferPtr,options.borderChars,options.borderFg,options.borderBg,options.columnOffsets,columnCount,options.rowOffsets,rowCount,{drawInner:options.drawInner,drawOuter:options.drawOuter})}drawChar(char,x,y,fg2,bg2,attributes=0){this.guard(),this.lib.bufferDrawChar(this.bufferPtr,char,x,y,fg2,bg2,attributes)}}function fatalError(...args){let message=args.join(" ");throw console.error("FATAL ERROR:",message),Error(message)}function isPrimitiveType(type2){return typeof type2==="string"&&primitiveKeys.includes(type2)}function isObjectPointerDef(type2){return typeof type2==="object"&&type2!==null&&type2.__type==="objectPointer"}function alignOffset(offset,align){return offset+(align-1)&~(align-1)}function enumTypeError(value){throw TypeError(`Invalid enum value: ${value}`)}function defineEnum(mapping,base="u32"){let reverse2=Object.fromEntries(Object.entries(mapping).map(([k,v])=>[v,k]));return{__type:"enum",type:base,to(value){return typeof value==="number"?value:mapping[value]??enumTypeError(String(value))},from(value){return reverse2[value]??enumTypeError(String(value))},enum:mapping}}function isEnum(type2){return typeof type2==="object"&&type2.__type==="enum"}function isStruct(type2){return typeof type2==="object"&&type2.__type==="struct"}function primitivePackers(type2){let pack,unpack;switch(type2){case"u8":pack=(view,off,val)=>view.setUint8(off,val),unpack=(view,off)=>view.getUint8(off);break;case"bool_u8":pack=(view,off,val)=>view.setUint8(off,val?1:0),unpack=(view,off)=>Boolean(view.getUint8(off));break;case"bool_u32":pack=(view,off,val)=>view.setUint32(off,val?1:0,!0),unpack=(view,off)=>Boolean(view.getUint32(off,!0));break;case"u16":pack=(view,off,val)=>view.setUint16(off,val,!0),unpack=(view,off)=>view.getUint16(off,!0);break;case"i16":pack=(view,off,val)=>view.setInt16(off,val,!0),unpack=(view,off)=>view.getInt16(off,!0);break;case"u32":pack=(view,off,val)=>view.setUint32(off,val,!0),unpack=(view,off)=>view.getUint32(off,!0);break;case"i32":pack=(view,off,val)=>view.setInt32(off,val,!0),unpack=(view,off)=>view.getInt32(off,!0);break;case"u64":pack=(view,off,val)=>view.setBigUint64(off,BigInt(val),!0),unpack=(view,off)=>view.getBigUint64(off,!0);break;case"f32":pack=(view,off,val)=>view.setFloat32(off,val,!0),unpack=(view,off)=>view.getFloat32(off,!0);break;case"f64":pack=(view,off,val)=>view.setFloat64(off,val,!0),unpack=(view,off)=>view.getFloat64(off,!0);break;case"pointer":pack=(view,off,val)=>{pointerSize===8?view.setBigUint64(off,val?BigInt(val):0n,!0):view.setUint32(off,val?Number(val):0,!0)},unpack=(view,off)=>{let bint=pointerSize===8?view.getBigUint64(off,!0):BigInt(view.getUint32(off,!0));return Number(bint)};break;default:fatalError(`Unsupported primitive type: ${type2}`)}return{pack,unpack}}function packObjectArray(val){let buffer2=new ArrayBuffer(val.length*pointerSize),bufferView=new DataView(buffer2);for(let i2=0;i2<val.length;i2++){let ptrValue=val[i2]?.ptr??null;pointerPacker(bufferView,i2*pointerSize,ptrValue)}return bufferView}function defineStruct(fields,structDefOptions){let offset=0,maxAlign=1,layout=[],lengthOfFields={},lengthOfRequested=[],arrayFieldsMetadata={};for(let[name,typeOrStruct,options={}]of fields){if(options.condition&&!options.condition())continue;let size=0,align=0,pack,unpack,needsLengthOf=!1,lengthOfDef=null;if(isPrimitiveType(typeOrStruct))size=typeSizes[typeOrStruct],align=typeAlignments[typeOrStruct],{pack,unpack}=primitivePackers(typeOrStruct);else if(typeof typeOrStruct==="string"&&typeOrStruct==="cstring")size=pointerSize,align=pointerSize,pack=(view,off,val)=>{let bufPtr=val?ptr2(encoder.encode(val+"\x00")):null;pointerPacker(view,off,bufPtr)},unpack=(view,off)=>{return pointerUnpacker(view,off)};else if(typeof typeOrStruct==="string"&&typeOrStruct==="char*")size=pointerSize,align=pointerSize,pack=(view,off,val)=>{let bufPtr=val?ptr2(encoder.encode(val)):null;pointerPacker(view,off,bufPtr)},unpack=(view,off)=>{return pointerUnpacker(view,off)},needsLengthOf=!0;else if(isEnum(typeOrStruct)){let base=typeOrStruct.type;size=typeSizes[base],align=typeAlignments[base];let{pack:packEnum}=primitivePackers(base);pack=(view,off,val)=>{let num=typeOrStruct.to(val);packEnum(view,off,num)},unpack=(view,off)=>{let raw=typeGetters[base](view,off);return typeOrStruct.from(raw)}}else if(isStruct(typeOrStruct))if(options.asPointer===!0)size=pointerSize,align=pointerSize,pack=(view,off,val,obj,options2)=>{if(!val){pointerPacker(view,off,null);return}let nestedBuf=typeOrStruct.pack(val,options2);pointerPacker(view,off,ptr2(nestedBuf))},unpack=(view,off)=>{throw Error("Not implemented yet")};else size=typeOrStruct.size,align=typeOrStruct.align,pack=(view,off,val,obj,options2)=>{let nestedBuf=typeOrStruct.pack(val,options2),nestedView=new Uint8Array(nestedBuf);new Uint8Array(view.buffer).set(nestedView,off)},unpack=(view,off)=>{let slice=view.buffer.slice(off,off+size);return typeOrStruct.unpack(slice)};else if(isObjectPointerDef(typeOrStruct))size=pointerSize,align=pointerSize,pack=(view,off,value)=>{let ptrValue=value?.ptr??null;if(ptrValue===void 0)console.warn(`Field '${name}' expected object with '.ptr' property, but got undefined pointer value from:`,value),pointerPacker(view,off,null);else pointerPacker(view,off,ptrValue)},unpack=(view,off)=>{return pointerUnpacker(view,off)};else if(Array.isArray(typeOrStruct)&&typeOrStruct.length===1&&typeOrStruct[0]!==void 0){let[def]=typeOrStruct;size=pointerSize,align=pointerSize;let arrayElementSize;if(isEnum(def))arrayElementSize=typeSizes[def.type],pack=(view,off,val,obj)=>{if(!val||val.length===0){pointerPacker(view,off,null);return}let buffer2=new ArrayBuffer(val.length*arrayElementSize),bufferView=new DataView(buffer2);for(let i2=0;i2<val.length;i2++){let num=def.to(val[i2]);bufferView.setUint32(i2*arrayElementSize,num,!0)}pointerPacker(view,off,ptr2(buffer2))},unpack=null,needsLengthOf=!0,lengthOfDef=def;else if(isStruct(def))arrayElementSize=def.size,pack=(view,off,val,obj,options2)=>{if(!val||val.length===0){pointerPacker(view,off,null);return}let buffer2=new ArrayBuffer(val.length*arrayElementSize),bufferView=new DataView(buffer2);for(let i2=0;i2<val.length;i2++)def.packInto(val[i2],bufferView,i2*arrayElementSize,options2);pointerPacker(view,off,ptr2(buffer2))},unpack=(view,off)=>{throw Error("Not implemented yet")};else if(isPrimitiveType(def)){arrayElementSize=typeSizes[def];let{pack:primitivePack}=primitivePackers(def);pack=(view,off,val)=>{if(!val||val.length===0){pointerPacker(view,off,null);return}let buffer2=new ArrayBuffer(val.length*arrayElementSize),bufferView=new DataView(buffer2);for(let i2=0;i2<val.length;i2++)primitivePack(bufferView,i2*arrayElementSize,val[i2]);pointerPacker(view,off,ptr2(buffer2))},unpack=null,needsLengthOf=!0,lengthOfDef=def}else if(isObjectPointerDef(def))arrayElementSize=pointerSize,pack=(view,off,val)=>{if(!val||val.length===0){pointerPacker(view,off,null);return}let packedView=packObjectArray(val);pointerPacker(view,off,ptr2(packedView.buffer))},unpack=()=>{throw Error("not implemented yet")};else throw Error(`Unsupported array element type for ${name}: ${JSON.stringify(def)}`);let lengthOfField=Object.values(lengthOfFields).find((f)=>f.lengthOf===name);if(lengthOfField&&isPrimitiveType(lengthOfField.type)){let{pack:lengthPack}=primitivePackers(lengthOfField.type);arrayFieldsMetadata[name]={elementSize:arrayElementSize,arrayOffset:offset,lengthOffset:lengthOfField.offset,lengthPack}}}else throw Error(`Unsupported field type for ${name}: ${JSON.stringify(typeOrStruct)}`);if(offset=alignOffset(offset,align),options.unpackTransform){let originalUnpack=unpack;unpack=(view,off)=>options.unpackTransform(originalUnpack(view,off))}if(options.packTransform){let originalPack=pack;pack=(view,off,val,obj,packOptions)=>originalPack(view,off,options.packTransform(val),obj,packOptions)}if(options.optional){let originalPack=pack;if(isStruct(typeOrStruct)&&!options.asPointer)pack=(view,off,val,obj,packOptions)=>{if(val||options.mapOptionalInline)originalPack(view,off,val,obj,packOptions)};else pack=(view,off,val,obj,packOptions)=>originalPack(view,off,val??0,obj,packOptions)}if(options.lengthOf){let originalPack=pack;pack=(view,off,val,obj,packOptions)=>{let targetValue=obj[options.lengthOf],length=0;if(targetValue)if(typeof targetValue==="string")length=Buffer.byteLength(targetValue);else length=targetValue.length;return originalPack(view,off,length,obj,packOptions)}}let validateFunctions;if(options.validate)validateFunctions=Array.isArray(options.validate)?options.validate:[options.validate];let layoutField={name,offset,size,align,validate:validateFunctions,optional:!!options.optional||!!options.lengthOf||options.default!==void 0,default:options.default,pack,unpack,type:typeOrStruct,lengthOf:options.lengthOf};if(layout.push(layoutField),options.lengthOf)lengthOfFields[options.lengthOf]=layoutField;if(needsLengthOf){let def=typeof typeOrStruct==="string"&&typeOrStruct==="char*"?"char*":lengthOfDef;if(!def)fatalError(`Internal error: needsLengthOf=true but def is null for ${name}`);lengthOfRequested.push({requester:layoutField,def})}offset+=size,maxAlign=Math.max(maxAlign,align)}for(let{requester,def}of lengthOfRequested){let lengthOfField=lengthOfFields[requester.name];if(!lengthOfField){if(def==="char*")continue;throw Error(`lengthOf field not found for array field ${requester.name}`)}if(def==="char*")requester.unpack=(view,off)=>{let ptrAddress=pointerUnpacker(view,off),length=lengthOfField.unpack(view,lengthOfField.offset);if(ptrAddress===0)return null;let byteLength=typeof length==="bigint"?Number(length):length;if(byteLength===0)return"";let buffer2=toArrayBuffer2(ptrAddress,0,byteLength);return decoder.decode(buffer2)};else if(isPrimitiveType(def)){let elemSize=typeSizes[def],{unpack:primitiveUnpack}=primitivePackers(def);requester.unpack=(view,off)=>{let result2=[],length=lengthOfField.unpack(view,lengthOfField.offset),ptrAddress=pointerUnpacker(view,off);if(ptrAddress===0n&&length>0)throw Error(`Array field ${requester.name} has null pointer but length ${length}.`);if(ptrAddress===0n||length===0)return[];let buffer2=toArrayBuffer2(ptrAddress,0,length*elemSize),bufferView=new DataView(buffer2);for(let i2=0;i2<length;i2++)result2.push(primitiveUnpack(bufferView,i2*elemSize));return result2}}else{let elemSize=def.type==="u32"?4:8;requester.unpack=(view,off)=>{let result2=[],length=lengthOfField.unpack(view,lengthOfField.offset),ptrAddress=pointerUnpacker(view,off);if(ptrAddress===0n&&length>0)throw Error(`Array field ${requester.name} has null pointer but length ${length}.`);if(ptrAddress===0n||length===0)return[];let buffer2=toArrayBuffer2(ptrAddress,0,length*elemSize),bufferView=new DataView(buffer2);for(let i2=0;i2<length;i2++)result2.push(def.from(bufferView.getUint32(i2*elemSize,!0)));return result2}}}let totalSize=alignOffset(offset,maxAlign),description=layout.map((f)=>({name:f.name,offset:f.offset,size:f.size,align:f.align,optional:f.optional,type:f.type,lengthOf:f.lengthOf})),layoutByName=new Map(description.map((f)=>[f.name,f])),arrayFields=new Map(Object.entries(arrayFieldsMetadata));return{__type:"struct",size:totalSize,align:maxAlign,hasMapValue:!!structDefOptions?.mapValue,layoutByName,arrayFields,pack(obj,options){let buf=new ArrayBuffer(totalSize),view=new DataView(buf),mappedObj=obj;if(structDefOptions?.mapValue)mappedObj=structDefOptions.mapValue(obj);for(let field of layout){let value=mappedObj[field.name]??field.default;if(!field.optional&&value===void 0)fatalError(`Packing non-optional field '${field.name}' but value is undefined (and no default provided)`);if(field.validate)for(let validateFn of field.validate)validateFn(value,field.name,{hints:options?.validationHints,input:mappedObj});field.pack(view,field.offset,value,mappedObj,options)}return view.buffer},packInto(obj,view,offset2,options){let mappedObj=obj;if(structDefOptions?.mapValue)mappedObj=structDefOptions.mapValue(obj);for(let field of layout){let value=mappedObj[field.name]??field.default;if(!field.optional&&value===void 0)console.warn(`packInto missing value for non-optional field '${field.name}' at offset ${offset2+field.offset}. Writing default or zero.`);if(field.validate)for(let validateFn of field.validate)validateFn(value,field.name,{hints:options?.validationHints,input:mappedObj});field.pack(view,offset2+field.offset,value,mappedObj,options)}},unpack(buf){if(buf.byteLength<totalSize)fatalError(`Buffer size (${buf.byteLength}) is smaller than struct size (${totalSize}) for unpacking.`);let view=new DataView(buf),result2=structDefOptions?.default?{...structDefOptions.default}:{};for(let field of layout){if(!field.unpack)continue;try{result2[field.name]=field.unpack(view,field.offset)}catch(e){throw console.error(`Error unpacking field '${field.name}' at offset ${field.offset}:`,e),e}}if(structDefOptions?.reduceValue)return structDefOptions.reduceValue(result2);return result2},packList(objects,options){if(objects.length===0)return new ArrayBuffer(0);let buffer2=new ArrayBuffer(totalSize*objects.length),view=new DataView(buffer2);for(let i2=0;i2<objects.length;i2++){let mappedObj=objects[i2];if(structDefOptions?.mapValue)mappedObj=structDefOptions.mapValue(objects[i2]);for(let field of layout){let value=mappedObj[field.name]??field.default;if(!field.optional&&value===void 0)fatalError(`Packing non-optional field '${field.name}' at index ${i2} but value is undefined (and no default provided)`);if(field.validate)for(let validateFn of field.validate)validateFn(value,field.name,{hints:options?.validationHints,input:mappedObj});field.pack(view,i2*totalSize+field.offset,value,mappedObj,options)}}return buffer2},unpackList(buf,count){if(count===0)return[];let expectedSize=totalSize*count;if(buf.byteLength<expectedSize)fatalError(`Buffer size (${buf.byteLength}) is smaller than expected size (${expectedSize}) for unpacking ${count} structs.`);let view=new DataView(buf),results=[];for(let i2=0;i2<count;i2++){let offset2=i2*totalSize,result2=structDefOptions?.default?{...structDefOptions.default}:{};for(let field of layout){if(!field.unpack)continue;try{result2[field.name]=field.unpack(view,offset2+field.offset)}catch(e){throw console.error(`Error unpacking field '${field.name}' at index ${i2}, offset ${offset2+field.offset}:`,e),e}}if(structDefOptions?.reduceValue)results.push(structDefOptions.reduceValue(result2));else results.push(result2)}return results},describe(){return description}}}function toPointer(value){if(typeof value==="bigint"){if(value>BigInt(Number.MAX_SAFE_INTEGER))throw Error("Pointer exceeds safe integer range");return Number(value)}return value}function toNumber(value){return typeof value==="bigint"?Number(value):value}function getOpenTUILib(libPath){let rawSymbols=dlopen(libPath||targetLibPath,{setLogCallback:{args:["ptr"],returns:"void"},setEventCallback:{args:["ptr"],returns:"void"},createRenderer:{args:["u32","u32","bool","bool"],returns:"ptr"},setTerminalEnvVar:{args:["ptr","ptr","usize","ptr","usize"],returns:"bool"},destroyRenderer:{args:["ptr"],returns:"void"},setUseThread:{args:["ptr","bool"],returns:"void"},setBackgroundColor:{args:["ptr","ptr"],returns:"void"},setRenderOffset:{args:["ptr","u32"],returns:"void"},updateStats:{args:["ptr","f64","u32","f64"],returns:"void"},updateMemoryStats:{args:["ptr","u32","u32","u32"],returns:"void"},render:{args:["ptr","bool"],returns:"void"},getNextBuffer:{args:["ptr"],returns:"ptr"},getCurrentBuffer:{args:["ptr"],returns:"ptr"},queryPixelResolution:{args:["ptr"],returns:"void"},createOptimizedBuffer:{args:["u32","u32","bool","u8","ptr","usize"],returns:"ptr"},destroyOptimizedBuffer:{args:["ptr"],returns:"void"},drawFrameBuffer:{args:["ptr","i32","i32","ptr","u32","u32","u32","u32"],returns:"void"},getBufferWidth:{args:["ptr"],returns:"u32"},getBufferHeight:{args:["ptr"],returns:"u32"},bufferClear:{args:["ptr","ptr"],returns:"void"},bufferGetCharPtr:{args:["ptr"],returns:"ptr"},bufferGetFgPtr:{args:["ptr"],returns:"ptr"},bufferGetBgPtr:{args:["ptr"],returns:"ptr"},bufferGetAttributesPtr:{args:["ptr"],returns:"ptr"},bufferGetRespectAlpha:{args:["ptr"],returns:"bool"},bufferSetRespectAlpha:{args:["ptr","bool"],returns:"void"},bufferGetId:{args:["ptr","ptr","usize"],returns:"usize"},bufferGetRealCharSize:{args:["ptr"],returns:"u32"},bufferWriteResolvedChars:{args:["ptr","ptr","usize","bool"],returns:"u32"},bufferDrawText:{args:["ptr","ptr","u32","u32","u32","ptr","ptr","u32"],returns:"void"},bufferSetCellWithAlphaBlending:{args:["ptr","u32","u32","u32","ptr","ptr","u32"],returns:"void"},bufferSetCell:{args:["ptr","u32","u32","u32","ptr","ptr","u32"],returns:"void"},bufferFillRect:{args:["ptr","u32","u32","u32","u32","ptr"],returns:"void"},bufferColorMatrix:{args:["ptr","ptr","ptr","usize","f32","u8"],returns:"void"},bufferColorMatrixUniform:{args:["ptr","ptr","f32","u8"],returns:"void"},bufferResize:{args:["ptr","u32","u32"],returns:"void"},linkAlloc:{args:["ptr","u32"],returns:"u32"},linkGetUrl:{args:["u32","ptr","u32"],returns:"u32"},attributesWithLink:{args:["u32","u32"],returns:"u32"},attributesGetLinkId:{args:["u32"],returns:"u32"},resizeRenderer:{args:["ptr","u32","u32"],returns:"void"},setCursorPosition:{args:["ptr","i32","i32","bool"],returns:"void"},setCursorColor:{args:["ptr","ptr"],returns:"void"},getCursorState:{args:["ptr","ptr"],returns:"void"},setCursorStyleOptions:{args:["ptr","ptr"],returns:"void"},setDebugOverlay:{args:["ptr","bool","u8"],returns:"void"},clearTerminal:{args:["ptr"],returns:"void"},setTerminalTitle:{args:["ptr","ptr","usize"],returns:"void"},copyToClipboardOSC52:{args:["ptr","u8","ptr","usize"],returns:"bool"},clearClipboardOSC52:{args:["ptr","u8"],returns:"bool"},bufferDrawSuperSampleBuffer:{args:["ptr","u32","u32","ptr","usize","u8","u32"],returns:"void"},bufferDrawPackedBuffer:{args:["ptr","ptr","usize","u32","u32","u32","u32"],returns:"void"},bufferDrawGrayscaleBuffer:{args:["ptr","i32","i32","ptr","u32","u32","ptr","ptr"],returns:"void"},bufferDrawGrayscaleBufferSupersampled:{args:["ptr","i32","i32","ptr","u32","u32","ptr","ptr"],returns:"void"},bufferDrawGrid:{args:["ptr","ptr","ptr","ptr","ptr","u32","ptr","u32","ptr"],returns:"void"},bufferDrawBox:{args:["ptr","i32","i32","u32","u32","ptr","u32","ptr","ptr","ptr","u32"],returns:"void"},bufferPushScissorRect:{args:["ptr","i32","i32","u32","u32"],returns:"void"},bufferPopScissorRect:{args:["ptr"],returns:"void"},bufferClearScissorRects:{args:["ptr"],returns:"void"},bufferPushOpacity:{args:["ptr","f32"],returns:"void"},bufferPopOpacity:{args:["ptr"],returns:"void"},bufferGetCurrentOpacity:{args:["ptr"],returns:"f32"},bufferClearOpacity:{args:["ptr"],returns:"void"},addToHitGrid:{args:["ptr","i32","i32","u32","u32","u32"],returns:"void"},clearCurrentHitGrid:{args:["ptr"],returns:"void"},hitGridPushScissorRect:{args:["ptr","i32","i32","u32","u32"],returns:"void"},hitGridPopScissorRect:{args:["ptr"],returns:"void"},hitGridClearScissorRects:{args:["ptr"],returns:"void"},addToCurrentHitGridClipped:{args:["ptr","i32","i32","u32","u32","u32"],returns:"void"},checkHit:{args:["ptr","u32","u32"],returns:"u32"},getHitGridDirty:{args:["ptr"],returns:"bool"},dumpHitGrid:{args:["ptr"],returns:"void"},dumpBuffers:{args:["ptr","i64"],returns:"void"},dumpStdoutBuffer:{args:["ptr","i64"],returns:"void"},restoreTerminalModes:{args:["ptr"],returns:"void"},enableMouse:{args:["ptr","bool"],returns:"void"},disableMouse:{args:["ptr"],returns:"void"},enableKittyKeyboard:{args:["ptr","u8"],returns:"void"},disableKittyKeyboard:{args:["ptr"],returns:"void"},setKittyKeyboardFlags:{args:["ptr","u8"],returns:"void"},getKittyKeyboardFlags:{args:["ptr"],returns:"u8"},setupTerminal:{args:["ptr","bool"],returns:"void"},suspendRenderer:{args:["ptr"],returns:"void"},resumeRenderer:{args:["ptr"],returns:"void"},writeOut:{args:["ptr","ptr","u64"],returns:"void"},createTextBuffer:{args:["u8"],returns:"ptr"},destroyTextBuffer:{args:["ptr"],returns:"void"},textBufferGetLength:{args:["ptr"],returns:"u32"},textBufferGetByteSize:{args:["ptr"],returns:"u32"},textBufferReset:{args:["ptr"],returns:"void"},textBufferClear:{args:["ptr"],returns:"void"},textBufferSetDefaultFg:{args:["ptr","ptr"],returns:"void"},textBufferSetDefaultBg:{args:["ptr","ptr"],returns:"void"},textBufferSetDefaultAttributes:{args:["ptr","ptr"],returns:"void"},textBufferResetDefaults:{args:["ptr"],returns:"void"},textBufferGetTabWidth:{args:["ptr"],returns:"u8"},textBufferSetTabWidth:{args:["ptr","u8"],returns:"void"},textBufferRegisterMemBuffer:{args:["ptr","ptr","usize","bool"],returns:"u16"},textBufferReplaceMemBuffer:{args:["ptr","u8","ptr","usize","bool"],returns:"bool"},textBufferClearMemRegistry:{args:["ptr"],returns:"void"},textBufferSetTextFromMem:{args:["ptr","u8"],returns:"void"},textBufferAppend:{args:["ptr","ptr","usize"],returns:"void"},textBufferAppendFromMemId:{args:["ptr","u8"],returns:"void"},textBufferLoadFile:{args:["ptr","ptr","usize"],returns:"bool"},textBufferSetStyledText:{args:["ptr","ptr","usize"],returns:"void"},textBufferGetLineCount:{args:["ptr"],returns:"u32"},textBufferGetPlainText:{args:["ptr","ptr","usize"],returns:"usize"},textBufferAddHighlightByCharRange:{args:["ptr","ptr"],returns:"void"},textBufferAddHighlight:{args:["ptr","u32","ptr"],returns:"void"},textBufferRemoveHighlightsByRef:{args:["ptr","u16"],returns:"void"},textBufferClearLineHighlights:{args:["ptr","u32"],returns:"void"},textBufferClearAllHighlights:{args:["ptr"],returns:"void"},textBufferSetSyntaxStyle:{args:["ptr","ptr"],returns:"void"},textBufferGetLineHighlightsPtr:{args:["ptr","u32","ptr"],returns:"ptr"},textBufferFreeLineHighlights:{args:["ptr","usize"],returns:"void"},textBufferGetHighlightCount:{args:["ptr"],returns:"u32"},textBufferGetTextRange:{args:["ptr","u32","u32","ptr","usize"],returns:"usize"},textBufferGetTextRangeByCoords:{args:["ptr","u32","u32","u32","u32","ptr","usize"],returns:"usize"},createTextBufferView:{args:["ptr"],returns:"ptr"},destroyTextBufferView:{args:["ptr"],returns:"void"},textBufferViewSetSelection:{args:["ptr","u32","u32","ptr","ptr"],returns:"void"},textBufferViewResetSelection:{args:["ptr"],returns:"void"},textBufferViewGetSelectionInfo:{args:["ptr"],returns:"u64"},textBufferViewSetLocalSelection:{args:["ptr","i32","i32","i32","i32","ptr","ptr"],returns:"bool"},textBufferViewUpdateSelection:{args:["ptr","u32","ptr","ptr"],returns:"void"},textBufferViewUpdateLocalSelection:{args:["ptr","i32","i32","i32","i32","ptr","ptr"],returns:"bool"},textBufferViewResetLocalSelection:{args:["ptr"],returns:"void"},textBufferViewSetWrapWidth:{args:["ptr","u32"],returns:"void"},textBufferViewSetWrapMode:{args:["ptr","u8"],returns:"void"},textBufferViewSetViewportSize:{args:["ptr","u32","u32"],returns:"void"},textBufferViewSetViewport:{args:["ptr","u32","u32","u32","u32"],returns:"void"},textBufferViewGetVirtualLineCount:{args:["ptr"],returns:"u32"},textBufferViewGetLineInfoDirect:{args:["ptr","ptr"],returns:"void"},textBufferViewGetLogicalLineInfoDirect:{args:["ptr","ptr"],returns:"void"},textBufferViewGetSelectedText:{args:["ptr","ptr","usize"],returns:"usize"},textBufferViewGetPlainText:{args:["ptr","ptr","usize"],returns:"usize"},textBufferViewSetTabIndicator:{args:["ptr","u32"],returns:"void"},textBufferViewSetTabIndicatorColor:{args:["ptr","ptr"],returns:"void"},textBufferViewSetTruncate:{args:["ptr","bool"],returns:"void"},textBufferViewMeasureForDimensions:{args:["ptr","u32","u32","ptr"],returns:"bool"},bufferDrawTextBufferView:{args:["ptr","ptr","i32","i32"],returns:"void"},bufferDrawEditorView:{args:["ptr","ptr","i32","i32"],returns:"void"},createEditorView:{args:["ptr","u32","u32"],returns:"ptr"},destroyEditorView:{args:["ptr"],returns:"void"},editorViewSetViewportSize:{args:["ptr","u32","u32"],returns:"void"},editorViewSetViewport:{args:["ptr","u32","u32","u32","u32","bool"],returns:"void"},editorViewGetViewport:{args:["ptr","ptr","ptr","ptr","ptr"],returns:"void"},editorViewSetScrollMargin:{args:["ptr","f32"],returns:"void"},editorViewSetWrapMode:{args:["ptr","u8"],returns:"void"},editorViewGetVirtualLineCount:{args:["ptr"],returns:"u32"},editorViewGetTotalVirtualLineCount:{args:["ptr"],returns:"u32"},editorViewGetTextBufferView:{args:["ptr"],returns:"ptr"},editorViewGetLineInfoDirect:{args:["ptr","ptr"],returns:"void"},editorViewGetLogicalLineInfoDirect:{args:["ptr","ptr"],returns:"void"},createEditBuffer:{args:["u8"],returns:"ptr"},destroyEditBuffer:{args:["ptr"],returns:"void"},editBufferSetText:{args:["ptr","ptr","usize"],returns:"void"},editBufferSetTextFromMem:{args:["ptr","u8"],returns:"void"},editBufferReplaceText:{args:["ptr","ptr","usize"],returns:"void"},editBufferReplaceTextFromMem:{args:["ptr","u8"],returns:"void"},editBufferGetText:{args:["ptr","ptr","usize"],returns:"usize"},editBufferInsertChar:{args:["ptr","ptr","usize"],returns:"void"},editBufferInsertText:{args:["ptr","ptr","usize"],returns:"void"},editBufferDeleteChar:{args:["ptr"],returns:"void"},editBufferDeleteCharBackward:{args:["ptr"],returns:"void"},editBufferDeleteRange:{args:["ptr","u32","u32","u32","u32"],returns:"void"},editBufferNewLine:{args:["ptr"],returns:"void"},editBufferDeleteLine:{args:["ptr"],returns:"void"},editBufferMoveCursorLeft:{args:["ptr"],returns:"void"},editBufferMoveCursorRight:{args:["ptr"],returns:"void"},editBufferMoveCursorUp:{args:["ptr"],returns:"void"},editBufferMoveCursorDown:{args:["ptr"],returns:"void"},editBufferGotoLine:{args:["ptr","u32"],returns:"void"},editBufferSetCursor:{args:["ptr","u32","u32"],returns:"void"},editBufferSetCursorToLineCol:{args:["ptr","u32","u32"],returns:"void"},editBufferSetCursorByOffset:{args:["ptr","u32"],returns:"void"},editBufferGetCursorPosition:{args:["ptr","ptr"],returns:"void"},editBufferGetId:{args:["ptr"],returns:"u16"},editBufferGetTextBuffer:{args:["ptr"],returns:"ptr"},editBufferDebugLogRope:{args:["ptr"],returns:"void"},editBufferUndo:{args:["ptr","ptr","usize"],returns:"usize"},editBufferRedo:{args:["ptr","ptr","usize"],returns:"usize"},editBufferCanUndo:{args:["ptr"],returns:"bool"},editBufferCanRedo:{args:["ptr"],returns:"bool"},editBufferClearHistory:{args:["ptr"],returns:"void"},editBufferClear:{args:["ptr"],returns:"void"},editBufferGetNextWordBoundary:{args:["ptr","ptr"],returns:"void"},editBufferGetPrevWordBoundary:{args:["ptr","ptr"],returns:"void"},editBufferGetEOL:{args:["ptr","ptr"],returns:"void"},editBufferOffsetToPosition:{args:["ptr","u32","ptr"],returns:"bool"},editBufferPositionToOffset:{args:["ptr","u32","u32"],returns:"u32"},editBufferGetLineStartOffset:{args:["ptr","u32"],returns:"u32"},editBufferGetTextRange:{args:["ptr","u32","u32","ptr","usize"],returns:"usize"},editBufferGetTextRangeByCoords:{args:["ptr","u32","u32","u32","u32","ptr","usize"],returns:"usize"},editorViewSetSelection:{args:["ptr","u32","u32","ptr","ptr"],returns:"void"},editorViewResetSelection:{args:["ptr"],returns:"void"},editorViewGetSelection:{args:["ptr"],returns:"u64"},editorViewSetLocalSelection:{args:["ptr","i32","i32","i32","i32","ptr","ptr","bool","bool"],returns:"bool"},editorViewUpdateSelection:{args:["ptr","u32","ptr","ptr"],returns:"void"},editorViewUpdateLocalSelection:{args:["ptr","i32","i32","i32","i32","ptr","ptr","bool","bool"],returns:"bool"},editorViewResetLocalSelection:{args:["ptr"],returns:"void"},editorViewGetSelectedTextBytes:{args:["ptr","ptr","usize"],returns:"usize"},editorViewGetCursor:{args:["ptr","ptr","ptr"],returns:"void"},editorViewGetText:{args:["ptr","ptr","usize"],returns:"usize"},editorViewGetVisualCursor:{args:["ptr","ptr"],returns:"void"},editorViewMoveUpVisual:{args:["ptr"],returns:"void"},editorViewMoveDownVisual:{args:["ptr"],returns:"void"},editorViewDeleteSelectedText:{args:["ptr"],returns:"void"},editorViewSetCursorByOffset:{args:["ptr","u32"],returns:"void"},editorViewGetNextWordBoundary:{args:["ptr","ptr"],returns:"void"},editorViewGetPrevWordBoundary:{args:["ptr","ptr"],returns:"void"},editorViewGetEOL:{args:["ptr","ptr"],returns:"void"},editorViewGetVisualSOL:{args:["ptr","ptr"],returns:"void"},editorViewGetVisualEOL:{args:["ptr","ptr"],returns:"void"},editorViewSetPlaceholderStyledText:{args:["ptr","ptr","usize"],returns:"void"},editorViewSetTabIndicator:{args:["ptr","u32"],returns:"void"},editorViewSetTabIndicatorColor:{args:["ptr","ptr"],returns:"void"},getArenaAllocatedBytes:{args:[],returns:"usize"},getBuildOptions:{args:["ptr"],returns:"void"},getAllocatorStats:{args:["ptr"],returns:"void"},createSyntaxStyle:{args:[],returns:"ptr"},destroySyntaxStyle:{args:["ptr"],returns:"void"},syntaxStyleRegister:{args:["ptr","ptr","usize","ptr","ptr","u8"],returns:"u32"},syntaxStyleResolveByName:{args:["ptr","ptr","usize"],returns:"u32"},syntaxStyleGetStyleCount:{args:["ptr"],returns:"usize"},getTerminalCapabilities:{args:["ptr","ptr"],returns:"void"},processCapabilityResponse:{args:["ptr","ptr","usize"],returns:"void"},encodeUnicode:{args:["ptr","usize","ptr","ptr","u8"],returns:"bool"},freeUnicode:{args:["ptr","usize"],returns:"void"},bufferDrawChar:{args:["ptr","u32","u32","u32","ptr","ptr","u32"],returns:"void"},createNativeSpanFeed:{args:["ptr"],returns:"ptr"},attachNativeSpanFeed:{args:["ptr"],returns:"i32"},destroyNativeSpanFeed:{args:["ptr"],returns:"void"},streamWrite:{args:["ptr","ptr","u64"],returns:"i32"},streamCommit:{args:["ptr"],returns:"i32"},streamDrainSpans:{args:["ptr","ptr","u32"],returns:"u32"},streamClose:{args:["ptr"],returns:"i32"},streamReserve:{args:["ptr","u32","ptr"],returns:"i32"},streamCommitReserved:{args:["ptr","u32"],returns:"i32"},streamSetOptions:{args:["ptr","ptr"],returns:"i32"},streamGetStats:{args:["ptr","ptr"],returns:"i32"},streamSetCallback:{args:["ptr","ptr"],returns:"void"}});if(env.OTUI_DEBUG_FFI||env.OTUI_TRACE_FFI)return{symbols:convertToDebugSymbols(rawSymbols.symbols)};return rawSymbols}function convertToDebugSymbols(symbols){if(!globalTraceSymbols)globalTraceSymbols={};if(env.OTUI_DEBUG_FFI&&!globalFFILogPath)globalFFILogPath=`ffi_otui_debug_${new Date().toISOString().replace(/[:.]/g,"-").replace(/T/,"_").split("Z")[0]}.log`;let debugSymbols={},hasTracing=!1;if(Object.entries(symbols).forEach(([key,value])=>{debugSymbols[key]=value}),env.OTUI_DEBUG_FFI&&globalFFILogPath){let logPath=globalFFILogPath,writeSync2=(msg)=>{writeFileSync24(logPath,msg+`
|
|
2372
2407
|
`,{flag:"a"})};Object.entries(symbols).forEach(([key,value])=>{if(typeof value==="function")debugSymbols[key]=(...args)=>{writeSync2(`${key}(${args.map((arg)=>String(arg)).join(", ")})`);let result2=value(...args);return writeSync2(`${key} returned: ${String(result2)}`),result2}})}if(env.OTUI_TRACE_FFI)hasTracing=!0,Object.entries(symbols).forEach(([key,value])=>{if(typeof value==="function"){if(!globalTraceSymbols[key])globalTraceSymbols[key]=[];let originalFunc=debugSymbols[key];debugSymbols[key]=(...args)=>{let start2=performance.now(),result2=originalFunc(...args),end=performance.now();return globalTraceSymbols[key].push(end-start2),result2}}});if((env.OTUI_DEBUG_FFI||env.OTUI_TRACE_FFI)&&!exitHandlerRegistered2)exitHandlerRegistered2=!0,process.on("exit",()=>{if(globalTraceSymbols){let allStats=[];for(let[key,timings]of Object.entries(globalTraceSymbols)){if(!Array.isArray(timings)||timings.length===0)continue;let sortedTimings=[...timings].sort((a,b2)=>a-b2),count=sortedTimings.length,total=sortedTimings.reduce((acc,t2)=>acc+t2,0),average=total/count,min=sortedTimings[0],max=sortedTimings[count-1],medianIndex=Math.floor(count/2),p90Index=Math.floor(count*0.9),p99Index=Math.floor(count*0.99),median=sortedTimings[medianIndex],p90=sortedTimings[Math.min(p90Index,count-1)],p99=sortedTimings[Math.min(p99Index,count-1)];allStats.push({name:key,count,total,average,min,max,median,p90,p99})}allStats.sort((a,b2)=>b2.total-a.total);let lines=[];if(lines.push(`
|
|
2373
|
-
--- OpenTUI FFI Call Performance ---`),lines.push("Sorted by total time spent (descending)"),lines.push("-------------------------------------------------------------------------------------------------------------------------"),allStats.length===0)lines.push("No trace data collected or all symbols had zero calls.");else{let nameWidth=Math.max(6,...allStats.map((s2)=>s2.name.length)),countWidth=Math.max(5,...allStats.map((s2)=>String(s2.count).length)),totalWidth=Math.max(10,...allStats.map((s2)=>s2.total.toFixed(2).length)),avgWidth=Math.max(8,...allStats.map((s2)=>s2.average.toFixed(2).length)),statWidthMin=Math.max(8,...allStats.map((s2)=>s2.min.toFixed(2).length)),statWidthMax=Math.max(8,...allStats.map((s2)=>s2.max.toFixed(2).length)),medianWidth=Math.max(8,...allStats.map((s2)=>s2.median.toFixed(2).length)),p90Width=Math.max(8,...allStats.map((s2)=>s2.p90.toFixed(2).length)),p99Width=Math.max(8,...allStats.map((s2)=>s2.p99.toFixed(2).length));lines.push(`${"Symbol".padEnd(nameWidth)} | ${"Calls".padStart(countWidth)} | ${"Total (ms)".padStart(totalWidth)} | ${"Avg (ms)".padStart(avgWidth)} | ${"Min (ms)".padStart(statWidthMin)} | ${"Max (ms)".padStart(statWidthMax)} | ${"Med (ms)".padStart(medianWidth)} | ${"P90 (ms)".padStart(p90Width)} | ${"P99 (ms)".padStart(p99Width)}`),lines.push(`${"-".repeat(nameWidth)}-+-${"-".repeat(countWidth)}-+-${"-".repeat(totalWidth)}-+-${"-".repeat(avgWidth)}-+-${"-".repeat(statWidthMin)}-+-${"-".repeat(statWidthMax)}-+-${"-".repeat(medianWidth)}-+-${"-".repeat(p90Width)}-+-${"-".repeat(p99Width)}`),allStats.forEach((
|
|
2408
|
+
--- OpenTUI FFI Call Performance ---`),lines.push("Sorted by total time spent (descending)"),lines.push("-------------------------------------------------------------------------------------------------------------------------"),allStats.length===0)lines.push("No trace data collected or all symbols had zero calls.");else{let nameWidth=Math.max(6,...allStats.map((s2)=>s2.name.length)),countWidth=Math.max(5,...allStats.map((s2)=>String(s2.count).length)),totalWidth=Math.max(10,...allStats.map((s2)=>s2.total.toFixed(2).length)),avgWidth=Math.max(8,...allStats.map((s2)=>s2.average.toFixed(2).length)),statWidthMin=Math.max(8,...allStats.map((s2)=>s2.min.toFixed(2).length)),statWidthMax=Math.max(8,...allStats.map((s2)=>s2.max.toFixed(2).length)),medianWidth=Math.max(8,...allStats.map((s2)=>s2.median.toFixed(2).length)),p90Width=Math.max(8,...allStats.map((s2)=>s2.p90.toFixed(2).length)),p99Width=Math.max(8,...allStats.map((s2)=>s2.p99.toFixed(2).length));lines.push(`${"Symbol".padEnd(nameWidth)} | ${"Calls".padStart(countWidth)} | ${"Total (ms)".padStart(totalWidth)} | ${"Avg (ms)".padStart(avgWidth)} | ${"Min (ms)".padStart(statWidthMin)} | ${"Max (ms)".padStart(statWidthMax)} | ${"Med (ms)".padStart(medianWidth)} | ${"P90 (ms)".padStart(p90Width)} | ${"P99 (ms)".padStart(p99Width)}`),lines.push(`${"-".repeat(nameWidth)}-+-${"-".repeat(countWidth)}-+-${"-".repeat(totalWidth)}-+-${"-".repeat(avgWidth)}-+-${"-".repeat(statWidthMin)}-+-${"-".repeat(statWidthMax)}-+-${"-".repeat(medianWidth)}-+-${"-".repeat(p90Width)}-+-${"-".repeat(p99Width)}`),allStats.forEach((stat7)=>{lines.push(`${stat7.name.padEnd(nameWidth)} | ${String(stat7.count).padStart(countWidth)} | ${stat7.total.toFixed(2).padStart(totalWidth)} | ${stat7.average.toFixed(2).padStart(avgWidth)} | ${stat7.min.toFixed(2).padStart(statWidthMin)} | ${stat7.max.toFixed(2).padStart(statWidthMax)} | ${stat7.median.toFixed(2).padStart(medianWidth)} | ${stat7.p90.toFixed(2).padStart(p90Width)} | ${stat7.p99.toFixed(2).padStart(p99Width)}`)})}lines.push("-------------------------------------------------------------------------------------------------------------------------");let output=lines.join(`
|
|
2374
2409
|
`);console.log(output);try{let traceFilePath=`ffi_otui_trace_${new Date().toISOString().replace(/[:.]/g,"-").replace(/T/,"_").split("Z")[0]}.log`;Bun.write(traceFilePath,output)}catch(e){console.error("Failed to write FFI trace file:",e)}}});return debugSymbols}class FFIRenderLib{opentui;encoder=new TextEncoder;decoder=new TextDecoder;logCallbackWrapper;eventCallbackWrapper;_nativeEvents=new EventEmitter4;_anyEventHandlers=[];nativeSpanFeedCallbackWrapper=null;nativeSpanFeedHandlers=new Map;constructor(libPath){this.opentui=getOpenTUILib(libPath),this.setupLogging(),this.setupEventBus()}setupLogging(){if(this.logCallbackWrapper)return;let logCallback=new JSCallback((level,msgPtr,msgLenBigInt)=>{try{let msgLen=typeof msgLenBigInt==="bigint"?Number(msgLenBigInt):msgLenBigInt;if(msgLen===0||!msgPtr)return;let msgBuffer=toArrayBuffer4(msgPtr,0,msgLen),msgBytes=new Uint8Array(msgBuffer),message=this.decoder.decode(msgBytes);switch(level){case 0:console.error(message);break;case 1:console.warn(message);break;case 2:console.info(message);break;case 3:console.debug(message);break;default:console.log(message)}}catch(error2){console.error("Error in Zig log callback:",error2)}},{args:["u8","ptr","usize"],returns:"void"});if(this.logCallbackWrapper=logCallback,!logCallback.ptr)throw Error("Failed to create log callback");this.setLogCallback(logCallback.ptr)}setLogCallback(callbackPtr){this.opentui.symbols.setLogCallback(callbackPtr)}setupEventBus(){if(this.eventCallbackWrapper)return;let eventCallback=new JSCallback((namePtr,nameLenBigInt,dataPtr,dataLenBigInt)=>{try{let nameLen=typeof nameLenBigInt==="bigint"?Number(nameLenBigInt):nameLenBigInt,dataLen=typeof dataLenBigInt==="bigint"?Number(dataLenBigInt):dataLenBigInt;if(nameLen===0||!namePtr)return;let nameBuffer=toArrayBuffer4(namePtr,0,nameLen),nameBytes=new Uint8Array(nameBuffer),eventName=this.decoder.decode(nameBytes),eventData;if(dataLen>0&&dataPtr)eventData=toArrayBuffer4(dataPtr,0,dataLen).slice();else eventData=new ArrayBuffer(0);queueMicrotask(()=>{this._nativeEvents.emit(eventName,eventData);for(let handler of this._anyEventHandlers)handler(eventName,eventData)})}catch(error2){console.error("Error in native event callback:",error2)}},{args:["ptr","usize","ptr","usize"],returns:"void"});if(this.eventCallbackWrapper=eventCallback,!eventCallback.ptr)throw Error("Failed to create event callback");this.setEventCallback(eventCallback.ptr)}ensureNativeSpanFeedCallback(){if(this.nativeSpanFeedCallbackWrapper)return this.nativeSpanFeedCallbackWrapper;let callback=new JSCallback((streamPtr,eventId,arg0,arg1)=>{let handler=this.nativeSpanFeedHandlers.get(toPointer(streamPtr));if(handler)handler(eventId,arg0,arg1)},{args:["ptr","u32","ptr","u64"],returns:"void"});if(this.nativeSpanFeedCallbackWrapper=callback,!callback.ptr)throw Error("Failed to create native span feed callback");return callback}setEventCallback(callbackPtr){this.opentui.symbols.setEventCallback(callbackPtr)}createRenderer(width,height2,options={}){let testing=options.testing??!1,remote=options.remote??!1;return this.opentui.symbols.createRenderer(width,height2,testing,remote)}setTerminalEnvVar(renderer,key,value){let keyBytes=this.encoder.encode(key),valueBytes=this.encoder.encode(value);return this.opentui.symbols.setTerminalEnvVar(renderer,keyBytes,keyBytes.length,valueBytes,valueBytes.length)}destroyRenderer(renderer){this.opentui.symbols.destroyRenderer(renderer)}setUseThread(renderer,useThread){this.opentui.symbols.setUseThread(renderer,useThread)}setBackgroundColor(renderer,color2){this.opentui.symbols.setBackgroundColor(renderer,color2.buffer)}setRenderOffset(renderer,offset){this.opentui.symbols.setRenderOffset(renderer,offset)}updateStats(renderer,time,fps,frameCallbackTime){this.opentui.symbols.updateStats(renderer,time,fps,frameCallbackTime)}updateMemoryStats(renderer,heapUsed,heapTotal,arrayBuffers){this.opentui.symbols.updateMemoryStats(renderer,heapUsed,heapTotal,arrayBuffers)}getNextBuffer(renderer){let bufferPtr=this.opentui.symbols.getNextBuffer(renderer);if(!bufferPtr)throw Error("Failed to get next buffer");let width=this.opentui.symbols.getBufferWidth(bufferPtr),height2=this.opentui.symbols.getBufferHeight(bufferPtr);return new OptimizedBuffer(this,bufferPtr,width,height2,{id:"next buffer",widthMethod:"unicode"})}getCurrentBuffer(renderer){let bufferPtr=this.opentui.symbols.getCurrentBuffer(renderer);if(!bufferPtr)throw Error("Failed to get current buffer");let width=this.opentui.symbols.getBufferWidth(bufferPtr),height2=this.opentui.symbols.getBufferHeight(bufferPtr);return new OptimizedBuffer(this,bufferPtr,width,height2,{id:"current buffer",widthMethod:"unicode"})}bufferGetCharPtr(buffer2){let ptr5=this.opentui.symbols.bufferGetCharPtr(buffer2);if(!ptr5)throw Error("Failed to get char pointer");return ptr5}bufferGetFgPtr(buffer2){let ptr5=this.opentui.symbols.bufferGetFgPtr(buffer2);if(!ptr5)throw Error("Failed to get fg pointer");return ptr5}bufferGetBgPtr(buffer2){let ptr5=this.opentui.symbols.bufferGetBgPtr(buffer2);if(!ptr5)throw Error("Failed to get bg pointer");return ptr5}bufferGetAttributesPtr(buffer2){let ptr5=this.opentui.symbols.bufferGetAttributesPtr(buffer2);if(!ptr5)throw Error("Failed to get attributes pointer");return ptr5}bufferGetRespectAlpha(buffer2){return this.opentui.symbols.bufferGetRespectAlpha(buffer2)}bufferSetRespectAlpha(buffer2,respectAlpha){this.opentui.symbols.bufferSetRespectAlpha(buffer2,respectAlpha)}bufferGetId(buffer2){let outBuffer=new Uint8Array(256),actualLen=this.opentui.symbols.bufferGetId(buffer2,outBuffer,256),len=typeof actualLen==="bigint"?Number(actualLen):actualLen;return this.decoder.decode(outBuffer.slice(0,len))}bufferGetRealCharSize(buffer2){return this.opentui.symbols.bufferGetRealCharSize(buffer2)}bufferWriteResolvedChars(buffer2,outputBuffer,addLineBreaks){let bytesWritten=this.opentui.symbols.bufferWriteResolvedChars(buffer2,outputBuffer,outputBuffer.length,addLineBreaks);return typeof bytesWritten==="bigint"?Number(bytesWritten):bytesWritten}getBufferWidth(buffer2){return this.opentui.symbols.getBufferWidth(buffer2)}getBufferHeight(buffer2){return this.opentui.symbols.getBufferHeight(buffer2)}bufferClear(buffer2,color2){this.opentui.symbols.bufferClear(buffer2,color2.buffer)}bufferDrawText(buffer2,text,x,y,color2,bgColor,attributes){let textBytes=this.encoder.encode(text),textLength=textBytes.byteLength,bg2=bgColor?bgColor.buffer:null,fg2=color2.buffer;this.opentui.symbols.bufferDrawText(buffer2,textBytes,textLength,x,y,fg2,bg2,attributes??0)}bufferSetCellWithAlphaBlending(buffer2,x,y,char,color2,bgColor,attributes){let charPtr=char.codePointAt(0)??" ".codePointAt(0),bg2=bgColor.buffer,fg2=color2.buffer;this.opentui.symbols.bufferSetCellWithAlphaBlending(buffer2,x,y,charPtr,fg2,bg2,attributes??0)}bufferSetCell(buffer2,x,y,char,color2,bgColor,attributes){let charPtr=char.codePointAt(0)??" ".codePointAt(0),bg2=bgColor.buffer,fg2=color2.buffer;this.opentui.symbols.bufferSetCell(buffer2,x,y,charPtr,fg2,bg2,attributes??0)}bufferFillRect(buffer2,x,y,width,height2,color2){let bg2=color2.buffer;this.opentui.symbols.bufferFillRect(buffer2,x,y,width,height2,bg2)}bufferColorMatrix(buffer2,matrixPtr,cellMaskPtr,cellMaskCount,strength,target){this.opentui.symbols.bufferColorMatrix(buffer2,matrixPtr,cellMaskPtr,cellMaskCount,strength,target)}bufferColorMatrixUniform(buffer2,matrixPtr,strength,target){this.opentui.symbols.bufferColorMatrixUniform(buffer2,matrixPtr,strength,target)}bufferDrawSuperSampleBuffer(buffer2,x,y,pixelDataPtr,pixelDataLength,format,alignedBytesPerRow){let formatId=format==="bgra8unorm"?0:1;this.opentui.symbols.bufferDrawSuperSampleBuffer(buffer2,x,y,pixelDataPtr,pixelDataLength,formatId,alignedBytesPerRow)}bufferDrawPackedBuffer(buffer2,dataPtr,dataLen,posX,posY,terminalWidthCells,terminalHeightCells){this.opentui.symbols.bufferDrawPackedBuffer(buffer2,dataPtr,dataLen,posX,posY,terminalWidthCells,terminalHeightCells)}bufferDrawGrayscaleBuffer(buffer2,posX,posY,intensitiesPtr,srcWidth,srcHeight,fg2,bg2){this.opentui.symbols.bufferDrawGrayscaleBuffer(buffer2,posX,posY,intensitiesPtr,srcWidth,srcHeight,fg2?.buffer??null,bg2?.buffer??null)}bufferDrawGrayscaleBufferSupersampled(buffer2,posX,posY,intensitiesPtr,srcWidth,srcHeight,fg2,bg2){this.opentui.symbols.bufferDrawGrayscaleBufferSupersampled(buffer2,posX,posY,intensitiesPtr,srcWidth,srcHeight,fg2?.buffer??null,bg2?.buffer??null)}bufferDrawGrid(buffer2,borderChars,borderFg,borderBg,columnOffsets,columnCount,rowOffsets,rowCount,options){let optionsBuffer=GridDrawOptionsStruct.pack({drawInner:options.drawInner,drawOuter:options.drawOuter});this.opentui.symbols.bufferDrawGrid(buffer2,borderChars,borderFg.buffer,borderBg.buffer,columnOffsets,columnCount,rowOffsets,rowCount,ptr4(optionsBuffer))}bufferDrawBox(buffer2,x,y,width,height2,borderChars,packedOptions,borderColor,backgroundColor,title){let titleBytes=title?this.encoder.encode(title):null,titleLen=title?titleBytes.length:0,titlePtr=title?titleBytes:null;this.opentui.symbols.bufferDrawBox(buffer2,x,y,width,height2,borderChars,packedOptions,borderColor.buffer,backgroundColor.buffer,titlePtr,titleLen)}bufferResize(buffer2,width,height2){this.opentui.symbols.bufferResize(buffer2,width,height2)}linkAlloc(url){let urlBytes=this.encoder.encode(url);return this.opentui.symbols.linkAlloc(urlBytes,urlBytes.length)}linkGetUrl(linkId,maxLen=512){let outBuffer=new Uint8Array(maxLen),actualLen=this.opentui.symbols.linkGetUrl(linkId,outBuffer,maxLen);return this.decoder.decode(outBuffer.slice(0,actualLen))}attributesWithLink(baseAttributes,linkId){return this.opentui.symbols.attributesWithLink(baseAttributes,linkId)}attributesGetLinkId(attributes){return this.opentui.symbols.attributesGetLinkId(attributes)}resizeRenderer(renderer,width,height2){this.opentui.symbols.resizeRenderer(renderer,width,height2)}setCursorPosition(renderer,x,y,visible){this.opentui.symbols.setCursorPosition(renderer,x,y,visible)}setCursorColor(renderer,color2){this.opentui.symbols.setCursorColor(renderer,color2.buffer)}getCursorState(renderer){let cursorBuffer=new ArrayBuffer(CursorStateStruct.size);this.opentui.symbols.getCursorState(renderer,ptr4(cursorBuffer));let struct=CursorStateStruct.unpack(cursorBuffer);return{x:struct.x,y:struct.y,visible:struct.visible,style:CURSOR_ID_TO_STYLE[struct.style]??"block",blinking:struct.blinking,color:RGBA.fromValues(struct.r,struct.g,struct.b,struct.a)}}setCursorStyleOptions(renderer,options){let style=options.style!=null?CURSOR_STYLE_TO_ID[options.style]:255,blinking=options.blinking!=null?options.blinking?1:0:255,cursor=options.cursor!=null?MOUSE_STYLE_TO_ID[options.cursor]:255,buffer2=CursorStyleOptionsStruct.pack({style,blinking,color:options.color,cursor});this.opentui.symbols.setCursorStyleOptions(renderer,ptr4(buffer2))}render(renderer,force){this.opentui.symbols.render(renderer,force)}createOptimizedBuffer(width,height2,widthMethod,respectAlpha=!1,id){if(Number.isNaN(width)||Number.isNaN(height2))console.error(Error(`Invalid dimensions for OptimizedBuffer: ${width}x${height2}`).stack);let widthMethodCode=widthMethod==="wcwidth"?0:1,idToUse=id||"unnamed buffer",idBytes=this.encoder.encode(idToUse),bufferPtr=this.opentui.symbols.createOptimizedBuffer(width,height2,respectAlpha,widthMethodCode,idBytes,idBytes.length);if(!bufferPtr)throw Error(`Failed to create optimized buffer: ${width}x${height2}`);return new OptimizedBuffer(this,bufferPtr,width,height2,{respectAlpha,id,widthMethod})}destroyOptimizedBuffer(bufferPtr){this.opentui.symbols.destroyOptimizedBuffer(bufferPtr)}drawFrameBuffer(targetBufferPtr,destX,destY,bufferPtr,sourceX,sourceY,sourceWidth,sourceHeight){let srcX=sourceX??0,srcY=sourceY??0,srcWidth=sourceWidth??0,srcHeight=sourceHeight??0;this.opentui.symbols.drawFrameBuffer(targetBufferPtr,destX,destY,bufferPtr,srcX,srcY,srcWidth,srcHeight)}setDebugOverlay(renderer,enabled,corner){this.opentui.symbols.setDebugOverlay(renderer,enabled,corner)}clearTerminal(renderer){this.opentui.symbols.clearTerminal(renderer)}setTerminalTitle(renderer,title){let titleBytes=this.encoder.encode(title);this.opentui.symbols.setTerminalTitle(renderer,titleBytes,titleBytes.length)}copyToClipboardOSC52(renderer,target,payload){return this.opentui.symbols.copyToClipboardOSC52(renderer,target,payload,payload.length)}clearClipboardOSC52(renderer,target){return this.opentui.symbols.clearClipboardOSC52(renderer,target)}addToHitGrid(renderer,x,y,width,height2,id){this.opentui.symbols.addToHitGrid(renderer,x,y,width,height2,id)}clearCurrentHitGrid(renderer){this.opentui.symbols.clearCurrentHitGrid(renderer)}hitGridPushScissorRect(renderer,x,y,width,height2){this.opentui.symbols.hitGridPushScissorRect(renderer,x,y,width,height2)}hitGridPopScissorRect(renderer){this.opentui.symbols.hitGridPopScissorRect(renderer)}hitGridClearScissorRects(renderer){this.opentui.symbols.hitGridClearScissorRects(renderer)}addToCurrentHitGridClipped(renderer,x,y,width,height2,id){this.opentui.symbols.addToCurrentHitGridClipped(renderer,x,y,width,height2,id)}checkHit(renderer,x,y){return this.opentui.symbols.checkHit(renderer,x,y)}getHitGridDirty(renderer){return this.opentui.symbols.getHitGridDirty(renderer)}dumpHitGrid(renderer){this.opentui.symbols.dumpHitGrid(renderer)}dumpBuffers(renderer,timestamp2){let ts3=timestamp2??Date.now();this.opentui.symbols.dumpBuffers(renderer,ts3)}dumpStdoutBuffer(renderer,timestamp2){let ts3=timestamp2??Date.now();this.opentui.symbols.dumpStdoutBuffer(renderer,ts3)}restoreTerminalModes(renderer){this.opentui.symbols.restoreTerminalModes(renderer)}enableMouse(renderer,enableMovement){this.opentui.symbols.enableMouse(renderer,enableMovement)}disableMouse(renderer){this.opentui.symbols.disableMouse(renderer)}enableKittyKeyboard(renderer,flags){this.opentui.symbols.enableKittyKeyboard(renderer,flags)}disableKittyKeyboard(renderer){this.opentui.symbols.disableKittyKeyboard(renderer)}setKittyKeyboardFlags(renderer,flags){this.opentui.symbols.setKittyKeyboardFlags(renderer,flags)}getKittyKeyboardFlags(renderer){return this.opentui.symbols.getKittyKeyboardFlags(renderer)}setupTerminal(renderer,useAlternateScreen){this.opentui.symbols.setupTerminal(renderer,useAlternateScreen)}suspendRenderer(renderer){this.opentui.symbols.suspendRenderer(renderer)}resumeRenderer(renderer){this.opentui.symbols.resumeRenderer(renderer)}queryPixelResolution(renderer){this.opentui.symbols.queryPixelResolution(renderer)}writeOut(renderer,data){let bytes=typeof data==="string"?new TextEncoder().encode(data):data;if(bytes.length===0)return;this.opentui.symbols.writeOut(renderer,ptr4(bytes),bytes.length)}createTextBuffer(widthMethod){let widthMethodCode=widthMethod==="wcwidth"?0:1,bufferPtr=this.opentui.symbols.createTextBuffer(widthMethodCode);if(!bufferPtr)throw Error("Failed to create TextBuffer");return new TextBuffer(this,bufferPtr)}destroyTextBuffer(buffer2){this.opentui.symbols.destroyTextBuffer(buffer2)}textBufferGetLength(buffer2){return this.opentui.symbols.textBufferGetLength(buffer2)}textBufferGetByteSize(buffer2){return this.opentui.symbols.textBufferGetByteSize(buffer2)}textBufferReset(buffer2){this.opentui.symbols.textBufferReset(buffer2)}textBufferClear(buffer2){this.opentui.symbols.textBufferClear(buffer2)}textBufferSetDefaultFg(buffer2,fg2){let fgPtr=fg2?fg2.buffer:null;this.opentui.symbols.textBufferSetDefaultFg(buffer2,fgPtr)}textBufferSetDefaultBg(buffer2,bg2){let bgPtr=bg2?bg2.buffer:null;this.opentui.symbols.textBufferSetDefaultBg(buffer2,bgPtr)}textBufferSetDefaultAttributes(buffer2,attributes){let attrValue=attributes===null?null:new Uint8Array([attributes]);this.opentui.symbols.textBufferSetDefaultAttributes(buffer2,attrValue)}textBufferResetDefaults(buffer2){this.opentui.symbols.textBufferResetDefaults(buffer2)}textBufferGetTabWidth(buffer2){return this.opentui.symbols.textBufferGetTabWidth(buffer2)}textBufferSetTabWidth(buffer2,width){this.opentui.symbols.textBufferSetTabWidth(buffer2,width)}textBufferRegisterMemBuffer(buffer2,bytes,owned=!1){let result2=this.opentui.symbols.textBufferRegisterMemBuffer(buffer2,bytes,bytes.length,owned);if(result2===65535)throw Error("Failed to register memory buffer");return result2}textBufferReplaceMemBuffer(buffer2,memId,bytes,owned=!1){return this.opentui.symbols.textBufferReplaceMemBuffer(buffer2,memId,bytes,bytes.length,owned)}textBufferClearMemRegistry(buffer2){this.opentui.symbols.textBufferClearMemRegistry(buffer2)}textBufferSetTextFromMem(buffer2,memId){this.opentui.symbols.textBufferSetTextFromMem(buffer2,memId)}textBufferAppend(buffer2,bytes){this.opentui.symbols.textBufferAppend(buffer2,bytes,bytes.length)}textBufferAppendFromMemId(buffer2,memId){this.opentui.symbols.textBufferAppendFromMemId(buffer2,memId)}textBufferLoadFile(buffer2,path52){let pathBytes=this.encoder.encode(path52);return this.opentui.symbols.textBufferLoadFile(buffer2,pathBytes,pathBytes.length)}textBufferSetStyledText(buffer2,chunks){if(chunks.length===0){this.textBufferClear(buffer2);return}let chunksBuffer=StyledChunkStruct.packList(chunks);this.opentui.symbols.textBufferSetStyledText(buffer2,ptr4(chunksBuffer),chunks.length)}textBufferGetLineCount(buffer2){return this.opentui.symbols.textBufferGetLineCount(buffer2)}textBufferGetPlainText(buffer2,outPtr,maxLen){let result2=this.opentui.symbols.textBufferGetPlainText(buffer2,outPtr,maxLen);return typeof result2==="bigint"?Number(result2):result2}getPlainTextBytes(buffer2,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.textBufferGetPlainText(buffer2,ptr4(outBuffer),maxLength);if(actualLen===0)return null;return outBuffer.slice(0,actualLen)}textBufferGetTextRange(buffer2,startOffset,endOffset,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.opentui.symbols.textBufferGetTextRange(buffer2,startOffset,endOffset,ptr4(outBuffer),maxLength),len=typeof actualLen==="bigint"?Number(actualLen):actualLen;if(len===0)return null;return outBuffer.slice(0,len)}textBufferGetTextRangeByCoords(buffer2,startRow,startCol,endRow,endCol,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.opentui.symbols.textBufferGetTextRangeByCoords(buffer2,startRow,startCol,endRow,endCol,ptr4(outBuffer),maxLength),len=typeof actualLen==="bigint"?Number(actualLen):actualLen;if(len===0)return null;return outBuffer.slice(0,len)}createTextBufferView(textBuffer){let viewPtr=this.opentui.symbols.createTextBufferView(textBuffer);if(!viewPtr)throw Error("Failed to create TextBufferView");return viewPtr}destroyTextBufferView(view){this.opentui.symbols.destroyTextBufferView(view)}textBufferViewSetSelection(view,start2,end,bgColor,fgColor){let bg2=bgColor?bgColor.buffer:null,fg2=fgColor?fgColor.buffer:null;this.opentui.symbols.textBufferViewSetSelection(view,start2,end,bg2,fg2)}textBufferViewResetSelection(view){this.opentui.symbols.textBufferViewResetSelection(view)}textBufferViewGetSelection(view){let packedInfo=this.textBufferViewGetSelectionInfo(view);if(packedInfo===0xffff_ffff_ffff_ffffn)return null;let start2=Number(packedInfo>>32n),end=Number(packedInfo&0xffff_ffffn);return{start:start2,end}}textBufferViewGetSelectionInfo(view){return this.opentui.symbols.textBufferViewGetSelectionInfo(view)}textBufferViewSetLocalSelection(view,anchorX,anchorY,focusX,focusY,bgColor,fgColor){let bg2=bgColor?bgColor.buffer:null,fg2=fgColor?fgColor.buffer:null;return this.opentui.symbols.textBufferViewSetLocalSelection(view,anchorX,anchorY,focusX,focusY,bg2,fg2)}textBufferViewUpdateSelection(view,end,bgColor,fgColor){let bg2=bgColor?bgColor.buffer:null,fg2=fgColor?fgColor.buffer:null;this.opentui.symbols.textBufferViewUpdateSelection(view,end,bg2,fg2)}textBufferViewUpdateLocalSelection(view,anchorX,anchorY,focusX,focusY,bgColor,fgColor){let bg2=bgColor?bgColor.buffer:null,fg2=fgColor?fgColor.buffer:null;return this.opentui.symbols.textBufferViewUpdateLocalSelection(view,anchorX,anchorY,focusX,focusY,bg2,fg2)}textBufferViewResetLocalSelection(view){this.opentui.symbols.textBufferViewResetLocalSelection(view)}textBufferViewSetWrapWidth(view,width){this.opentui.symbols.textBufferViewSetWrapWidth(view,width)}textBufferViewSetWrapMode(view,mode){let modeValue=mode==="none"?0:mode==="char"?1:2;this.opentui.symbols.textBufferViewSetWrapMode(view,modeValue)}textBufferViewSetViewportSize(view,width,height2){this.opentui.symbols.textBufferViewSetViewportSize(view,width,height2)}textBufferViewSetViewport(view,x,y,width,height2){this.opentui.symbols.textBufferViewSetViewport(view,x,y,width,height2)}textBufferViewGetLineInfo(view){let outBuffer=new ArrayBuffer(LineInfoStruct.size);this.textBufferViewGetLineInfoDirect(view,ptr4(outBuffer));let struct=LineInfoStruct.unpack(outBuffer),lineStartCols=struct.startCols,lineWidthCols=struct.widthCols,lineWidthColsMax=struct.widthColsMax;return{lineStartCols,lineWidthCols,lineWidthColsMax,lineSources:struct.sources,lineWraps:struct.wraps}}textBufferViewGetLogicalLineInfo(view){let outBuffer=new ArrayBuffer(LineInfoStruct.size);this.textBufferViewGetLogicalLineInfoDirect(view,ptr4(outBuffer));let struct=LineInfoStruct.unpack(outBuffer),lineStartCols=struct.startCols,lineWidthCols=struct.widthCols,lineWidthColsMax=struct.widthColsMax;return{lineStartCols,lineWidthCols,lineWidthColsMax,lineSources:struct.sources,lineWraps:struct.wraps}}textBufferViewGetVirtualLineCount(view){return this.opentui.symbols.textBufferViewGetVirtualLineCount(view)}textBufferViewGetLineInfoDirect(view,outPtr){this.opentui.symbols.textBufferViewGetLineInfoDirect(view,outPtr)}textBufferViewGetLogicalLineInfoDirect(view,outPtr){this.opentui.symbols.textBufferViewGetLogicalLineInfoDirect(view,outPtr)}textBufferViewGetSelectedText(view,outPtr,maxLen){let result2=this.opentui.symbols.textBufferViewGetSelectedText(view,outPtr,maxLen);return typeof result2==="bigint"?Number(result2):result2}textBufferViewGetPlainText(view,outPtr,maxLen){let result2=this.opentui.symbols.textBufferViewGetPlainText(view,outPtr,maxLen);return typeof result2==="bigint"?Number(result2):result2}textBufferViewGetSelectedTextBytes(view,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.textBufferViewGetSelectedText(view,ptr4(outBuffer),maxLength);if(actualLen===0)return null;return outBuffer.slice(0,actualLen)}textBufferViewGetPlainTextBytes(view,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.textBufferViewGetPlainText(view,ptr4(outBuffer),maxLength);if(actualLen===0)return null;return outBuffer.slice(0,actualLen)}textBufferViewSetTabIndicator(view,indicator){this.opentui.symbols.textBufferViewSetTabIndicator(view,indicator)}textBufferViewSetTabIndicatorColor(view,color2){this.opentui.symbols.textBufferViewSetTabIndicatorColor(view,color2.buffer)}textBufferViewSetTruncate(view,truncate5){this.opentui.symbols.textBufferViewSetTruncate(view,truncate5)}textBufferViewMeasureForDimensions(view,width,height2){let resultBuffer=new ArrayBuffer(MeasureResultStruct.size),resultPtr=ptr4(new Uint8Array(resultBuffer));if(!this.opentui.symbols.textBufferViewMeasureForDimensions(view,width,height2,resultPtr))return null;return MeasureResultStruct.unpack(resultBuffer)}textBufferAddHighlightByCharRange(buffer2,highlight){let packedHighlight=HighlightStruct.pack(highlight);this.opentui.symbols.textBufferAddHighlightByCharRange(buffer2,ptr4(packedHighlight))}textBufferAddHighlight(buffer2,lineIdx,highlight){let packedHighlight=HighlightStruct.pack(highlight);this.opentui.symbols.textBufferAddHighlight(buffer2,lineIdx,ptr4(packedHighlight))}textBufferRemoveHighlightsByRef(buffer2,hlRef){this.opentui.symbols.textBufferRemoveHighlightsByRef(buffer2,hlRef)}textBufferClearLineHighlights(buffer2,lineIdx){this.opentui.symbols.textBufferClearLineHighlights(buffer2,lineIdx)}textBufferClearAllHighlights(buffer2){this.opentui.symbols.textBufferClearAllHighlights(buffer2)}textBufferSetSyntaxStyle(buffer2,style){this.opentui.symbols.textBufferSetSyntaxStyle(buffer2,style)}textBufferGetLineHighlights(buffer2,lineIdx){let outCountBuf=new BigUint64Array(1),nativePtr=this.opentui.symbols.textBufferGetLineHighlightsPtr(buffer2,lineIdx,ptr4(outCountBuf));if(!nativePtr)return[];let count=Number(outCountBuf[0]),byteLen=count*HighlightStruct.size,raw=toArrayBuffer4(nativePtr,0,byteLen),results=HighlightStruct.unpackList(raw,count);return this.opentui.symbols.textBufferFreeLineHighlights(nativePtr,count),results}textBufferGetHighlightCount(buffer2){return this.opentui.symbols.textBufferGetHighlightCount(buffer2)}getArenaAllocatedBytes(){let result2=this.opentui.symbols.getArenaAllocatedBytes();return typeof result2==="bigint"?Number(result2):result2}getBuildOptions(){let optionsBuffer=new ArrayBuffer(BuildOptionsStruct.size);this.opentui.symbols.getBuildOptions(ptr4(optionsBuffer));let options=BuildOptionsStruct.unpack(optionsBuffer);return{gpaSafeStats:!!options.gpaSafeStats,gpaMemoryLimitTracking:!!options.gpaMemoryLimitTracking}}getAllocatorStats(){let statsBuffer=new ArrayBuffer(AllocatorStatsStruct.size);this.opentui.symbols.getAllocatorStats(ptr4(statsBuffer));let stats=AllocatorStatsStruct.unpack(statsBuffer);return{totalRequestedBytes:toNumber(stats.totalRequestedBytes),activeAllocations:toNumber(stats.activeAllocations),smallAllocations:toNumber(stats.smallAllocations),largeAllocations:toNumber(stats.largeAllocations),requestedBytesValid:!!stats.requestedBytesValid}}bufferDrawTextBufferView(buffer2,view,x,y){this.opentui.symbols.bufferDrawTextBufferView(buffer2,view,x,y)}bufferDrawEditorView(buffer2,view,x,y){this.opentui.symbols.bufferDrawEditorView(buffer2,view,x,y)}createEditorView(editBufferPtr,viewportWidth,viewportHeight){let viewPtr=this.opentui.symbols.createEditorView(editBufferPtr,viewportWidth,viewportHeight);if(!viewPtr)throw Error("Failed to create EditorView");return viewPtr}destroyEditorView(view){this.opentui.symbols.destroyEditorView(view)}editorViewSetViewportSize(view,width,height2){this.opentui.symbols.editorViewSetViewportSize(view,width,height2)}editorViewSetViewport(view,x,y,width,height2,moveCursor){this.opentui.symbols.editorViewSetViewport(view,x,y,width,height2,moveCursor)}editorViewGetViewport(view){let x=new Uint32Array(1),y=new Uint32Array(1),width=new Uint32Array(1),height2=new Uint32Array(1);return this.opentui.symbols.editorViewGetViewport(view,ptr4(x),ptr4(y),ptr4(width),ptr4(height2)),{offsetX:x[0],offsetY:y[0],width:width[0],height:height2[0]}}editorViewSetScrollMargin(view,margin){this.opentui.symbols.editorViewSetScrollMargin(view,margin)}editorViewSetWrapMode(view,mode){let modeValue=mode==="none"?0:mode==="char"?1:2;this.opentui.symbols.editorViewSetWrapMode(view,modeValue)}editorViewGetVirtualLineCount(view){return this.opentui.symbols.editorViewGetVirtualLineCount(view)}editorViewGetTotalVirtualLineCount(view){return this.opentui.symbols.editorViewGetTotalVirtualLineCount(view)}editorViewGetTextBufferView(view){let result2=this.opentui.symbols.editorViewGetTextBufferView(view);if(!result2)throw Error("Failed to get TextBufferView from EditorView");return result2}editorViewGetLineInfo(view){let outBuffer=new ArrayBuffer(LineInfoStruct.size);this.opentui.symbols.editorViewGetLineInfoDirect(view,ptr4(outBuffer));let struct=LineInfoStruct.unpack(outBuffer),lineStartCols=struct.startCols,lineWidthCols=struct.widthCols,lineWidthColsMax=struct.widthColsMax;return{lineStartCols,lineWidthCols,lineWidthColsMax,lineSources:struct.sources,lineWraps:struct.wraps}}editorViewGetLogicalLineInfo(view){let outBuffer=new ArrayBuffer(LineInfoStruct.size);this.opentui.symbols.editorViewGetLogicalLineInfoDirect(view,ptr4(outBuffer));let struct=LineInfoStruct.unpack(outBuffer),lineStartCols=struct.startCols,lineWidthCols=struct.widthCols,lineWidthColsMax=struct.widthColsMax;return{lineStartCols,lineWidthCols,lineWidthColsMax,lineSources:struct.sources,lineWraps:struct.wraps}}createEditBuffer(widthMethod){let widthMethodCode=widthMethod==="wcwidth"?0:1,bufferPtr=this.opentui.symbols.createEditBuffer(widthMethodCode);if(!bufferPtr)throw Error("Failed to create EditBuffer");return bufferPtr}destroyEditBuffer(buffer2){this.opentui.symbols.destroyEditBuffer(buffer2)}editBufferSetText(buffer2,textBytes){this.opentui.symbols.editBufferSetText(buffer2,textBytes,textBytes.length)}editBufferSetTextFromMem(buffer2,memId){this.opentui.symbols.editBufferSetTextFromMem(buffer2,memId)}editBufferReplaceText(buffer2,textBytes){this.opentui.symbols.editBufferReplaceText(buffer2,textBytes,textBytes.length)}editBufferReplaceTextFromMem(buffer2,memId){this.opentui.symbols.editBufferReplaceTextFromMem(buffer2,memId)}editBufferGetText(buffer2,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.opentui.symbols.editBufferGetText(buffer2,ptr4(outBuffer),maxLength),len=typeof actualLen==="bigint"?Number(actualLen):actualLen;if(len===0)return null;return outBuffer.slice(0,len)}editBufferInsertChar(buffer2,char){let charBytes=this.encoder.encode(char);this.opentui.symbols.editBufferInsertChar(buffer2,charBytes,charBytes.length)}editBufferInsertText(buffer2,text){let textBytes=this.encoder.encode(text);this.opentui.symbols.editBufferInsertText(buffer2,textBytes,textBytes.length)}editBufferDeleteChar(buffer2){this.opentui.symbols.editBufferDeleteChar(buffer2)}editBufferDeleteCharBackward(buffer2){this.opentui.symbols.editBufferDeleteCharBackward(buffer2)}editBufferDeleteRange(buffer2,startLine,startCol,endLine,endCol){this.opentui.symbols.editBufferDeleteRange(buffer2,startLine,startCol,endLine,endCol)}editBufferNewLine(buffer2){this.opentui.symbols.editBufferNewLine(buffer2)}editBufferDeleteLine(buffer2){this.opentui.symbols.editBufferDeleteLine(buffer2)}editBufferMoveCursorLeft(buffer2){this.opentui.symbols.editBufferMoveCursorLeft(buffer2)}editBufferMoveCursorRight(buffer2){this.opentui.symbols.editBufferMoveCursorRight(buffer2)}editBufferMoveCursorUp(buffer2){this.opentui.symbols.editBufferMoveCursorUp(buffer2)}editBufferMoveCursorDown(buffer2){this.opentui.symbols.editBufferMoveCursorDown(buffer2)}editBufferGotoLine(buffer2,line){this.opentui.symbols.editBufferGotoLine(buffer2,line)}editBufferSetCursor(buffer2,line,byteOffset){this.opentui.symbols.editBufferSetCursor(buffer2,line,byteOffset)}editBufferSetCursorToLineCol(buffer2,line,col){this.opentui.symbols.editBufferSetCursorToLineCol(buffer2,line,col)}editBufferSetCursorByOffset(buffer2,offset){this.opentui.symbols.editBufferSetCursorByOffset(buffer2,offset)}editBufferGetCursorPosition(buffer2){let cursorBuffer=new ArrayBuffer(LogicalCursorStruct.size);return this.opentui.symbols.editBufferGetCursorPosition(buffer2,ptr4(cursorBuffer)),LogicalCursorStruct.unpack(cursorBuffer)}editBufferGetId(buffer2){return this.opentui.symbols.editBufferGetId(buffer2)}editBufferGetTextBuffer(buffer2){let result2=this.opentui.symbols.editBufferGetTextBuffer(buffer2);if(!result2)throw Error("Failed to get TextBuffer from EditBuffer");return result2}editBufferDebugLogRope(buffer2){this.opentui.symbols.editBufferDebugLogRope(buffer2)}editBufferUndo(buffer2,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.opentui.symbols.editBufferUndo(buffer2,ptr4(outBuffer),maxLength),len=typeof actualLen==="bigint"?Number(actualLen):actualLen;if(len===0)return null;return outBuffer.slice(0,len)}editBufferRedo(buffer2,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.opentui.symbols.editBufferRedo(buffer2,ptr4(outBuffer),maxLength),len=typeof actualLen==="bigint"?Number(actualLen):actualLen;if(len===0)return null;return outBuffer.slice(0,len)}editBufferCanUndo(buffer2){return this.opentui.symbols.editBufferCanUndo(buffer2)}editBufferCanRedo(buffer2){return this.opentui.symbols.editBufferCanRedo(buffer2)}editBufferClearHistory(buffer2){this.opentui.symbols.editBufferClearHistory(buffer2)}editBufferClear(buffer2){this.opentui.symbols.editBufferClear(buffer2)}editBufferGetNextWordBoundary(buffer2){let cursorBuffer=new ArrayBuffer(LogicalCursorStruct.size);return this.opentui.symbols.editBufferGetNextWordBoundary(buffer2,ptr4(cursorBuffer)),LogicalCursorStruct.unpack(cursorBuffer)}editBufferGetPrevWordBoundary(buffer2){let cursorBuffer=new ArrayBuffer(LogicalCursorStruct.size);return this.opentui.symbols.editBufferGetPrevWordBoundary(buffer2,ptr4(cursorBuffer)),LogicalCursorStruct.unpack(cursorBuffer)}editBufferGetEOL(buffer2){let cursorBuffer=new ArrayBuffer(LogicalCursorStruct.size);return this.opentui.symbols.editBufferGetEOL(buffer2,ptr4(cursorBuffer)),LogicalCursorStruct.unpack(cursorBuffer)}editBufferOffsetToPosition(buffer2,offset){let cursorBuffer=new ArrayBuffer(LogicalCursorStruct.size);if(!this.opentui.symbols.editBufferOffsetToPosition(buffer2,offset,ptr4(cursorBuffer)))return null;return LogicalCursorStruct.unpack(cursorBuffer)}editBufferPositionToOffset(buffer2,row,col){return this.opentui.symbols.editBufferPositionToOffset(buffer2,row,col)}editBufferGetLineStartOffset(buffer2,row){return this.opentui.symbols.editBufferGetLineStartOffset(buffer2,row)}editBufferGetTextRange(buffer2,startOffset,endOffset,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.opentui.symbols.editBufferGetTextRange(buffer2,startOffset,endOffset,ptr4(outBuffer),maxLength),len=typeof actualLen==="bigint"?Number(actualLen):actualLen;if(len===0)return null;return outBuffer.slice(0,len)}editBufferGetTextRangeByCoords(buffer2,startRow,startCol,endRow,endCol,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.opentui.symbols.editBufferGetTextRangeByCoords(buffer2,startRow,startCol,endRow,endCol,ptr4(outBuffer),maxLength),len=typeof actualLen==="bigint"?Number(actualLen):actualLen;if(len===0)return null;return outBuffer.slice(0,len)}editorViewSetSelection(view,start2,end,bgColor,fgColor){let bg2=bgColor?bgColor.buffer:null,fg2=fgColor?fgColor.buffer:null;this.opentui.symbols.editorViewSetSelection(view,start2,end,bg2,fg2)}editorViewResetSelection(view){this.opentui.symbols.editorViewResetSelection(view)}editorViewGetSelection(view){let packedInfo=this.opentui.symbols.editorViewGetSelection(view);if(packedInfo===0xffff_ffff_ffff_ffffn)return null;let start2=Number(packedInfo>>32n),end=Number(packedInfo&0xffff_ffffn);return{start:start2,end}}editorViewSetLocalSelection(view,anchorX,anchorY,focusX,focusY,bgColor,fgColor,updateCursor,followCursor){let bg2=bgColor?bgColor.buffer:null,fg2=fgColor?fgColor.buffer:null;return this.opentui.symbols.editorViewSetLocalSelection(view,anchorX,anchorY,focusX,focusY,bg2,fg2,updateCursor,followCursor)}editorViewUpdateSelection(view,end,bgColor,fgColor){let bg2=bgColor?bgColor.buffer:null,fg2=fgColor?fgColor.buffer:null;this.opentui.symbols.editorViewUpdateSelection(view,end,bg2,fg2)}editorViewUpdateLocalSelection(view,anchorX,anchorY,focusX,focusY,bgColor,fgColor,updateCursor,followCursor){let bg2=bgColor?bgColor.buffer:null,fg2=fgColor?fgColor.buffer:null;return this.opentui.symbols.editorViewUpdateLocalSelection(view,anchorX,anchorY,focusX,focusY,bg2,fg2,updateCursor,followCursor)}editorViewResetLocalSelection(view){this.opentui.symbols.editorViewResetLocalSelection(view)}editorViewGetSelectedTextBytes(view,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.opentui.symbols.editorViewGetSelectedTextBytes(view,ptr4(outBuffer),maxLength),len=typeof actualLen==="bigint"?Number(actualLen):actualLen;if(len===0)return null;return outBuffer.slice(0,len)}editorViewGetCursor(view){let row=new Uint32Array(1),col=new Uint32Array(1);return this.opentui.symbols.editorViewGetCursor(view,ptr4(row),ptr4(col)),{row:row[0],col:col[0]}}editorViewGetText(view,maxLength){let outBuffer=new Uint8Array(maxLength),actualLen=this.opentui.symbols.editorViewGetText(view,ptr4(outBuffer),maxLength),len=typeof actualLen==="bigint"?Number(actualLen):actualLen;if(len===0)return null;return outBuffer.slice(0,len)}editorViewGetVisualCursor(view){let cursorBuffer=new ArrayBuffer(VisualCursorStruct.size);return this.opentui.symbols.editorViewGetVisualCursor(view,ptr4(cursorBuffer)),VisualCursorStruct.unpack(cursorBuffer)}editorViewMoveUpVisual(view){this.opentui.symbols.editorViewMoveUpVisual(view)}editorViewMoveDownVisual(view){this.opentui.symbols.editorViewMoveDownVisual(view)}editorViewDeleteSelectedText(view){this.opentui.symbols.editorViewDeleteSelectedText(view)}editorViewSetCursorByOffset(view,offset){this.opentui.symbols.editorViewSetCursorByOffset(view,offset)}editorViewGetNextWordBoundary(view){let cursorBuffer=new ArrayBuffer(VisualCursorStruct.size);return this.opentui.symbols.editorViewGetNextWordBoundary(view,ptr4(cursorBuffer)),VisualCursorStruct.unpack(cursorBuffer)}editorViewGetPrevWordBoundary(view){let cursorBuffer=new ArrayBuffer(VisualCursorStruct.size);return this.opentui.symbols.editorViewGetPrevWordBoundary(view,ptr4(cursorBuffer)),VisualCursorStruct.unpack(cursorBuffer)}editorViewGetEOL(view){let cursorBuffer=new ArrayBuffer(VisualCursorStruct.size);return this.opentui.symbols.editorViewGetEOL(view,ptr4(cursorBuffer)),VisualCursorStruct.unpack(cursorBuffer)}editorViewGetVisualSOL(view){let cursorBuffer=new ArrayBuffer(VisualCursorStruct.size);return this.opentui.symbols.editorViewGetVisualSOL(view,ptr4(cursorBuffer)),VisualCursorStruct.unpack(cursorBuffer)}editorViewGetVisualEOL(view){let cursorBuffer=new ArrayBuffer(VisualCursorStruct.size);return this.opentui.symbols.editorViewGetVisualEOL(view,ptr4(cursorBuffer)),VisualCursorStruct.unpack(cursorBuffer)}bufferPushScissorRect(buffer2,x,y,width,height2){this.opentui.symbols.bufferPushScissorRect(buffer2,x,y,width,height2)}bufferPopScissorRect(buffer2){this.opentui.symbols.bufferPopScissorRect(buffer2)}bufferClearScissorRects(buffer2){this.opentui.symbols.bufferClearScissorRects(buffer2)}bufferPushOpacity(buffer2,opacity){this.opentui.symbols.bufferPushOpacity(buffer2,opacity)}bufferPopOpacity(buffer2){this.opentui.symbols.bufferPopOpacity(buffer2)}bufferGetCurrentOpacity(buffer2){return this.opentui.symbols.bufferGetCurrentOpacity(buffer2)}bufferClearOpacity(buffer2){this.opentui.symbols.bufferClearOpacity(buffer2)}getTerminalCapabilities(renderer){let capsBuffer=new ArrayBuffer(TerminalCapabilitiesStruct.size);this.opentui.symbols.getTerminalCapabilities(renderer,ptr4(capsBuffer));let caps=TerminalCapabilitiesStruct.unpack(capsBuffer);return{kitty_keyboard:caps.kitty_keyboard,kitty_graphics:caps.kitty_graphics,rgb:caps.rgb,unicode:caps.unicode,sgr_pixels:caps.sgr_pixels,color_scheme_updates:caps.color_scheme_updates,explicit_width:caps.explicit_width,scaled_text:caps.scaled_text,sixel:caps.sixel,focus_tracking:caps.focus_tracking,sync:caps.sync,bracketed_paste:caps.bracketed_paste,hyperlinks:caps.hyperlinks,osc52:caps.osc52,explicit_cursor_positioning:caps.explicit_cursor_positioning,terminal:{name:caps.term_name??"",version:caps.term_version??"",from_xtversion:caps.term_from_xtversion}}}processCapabilityResponse(renderer,response){let responseBytes=this.encoder.encode(response);this.opentui.symbols.processCapabilityResponse(renderer,responseBytes,responseBytes.length)}encodeUnicode(text,widthMethod){let textBytes=this.encoder.encode(text),widthMethodCode=widthMethod==="wcwidth"?0:1,outPtrBuffer=new ArrayBuffer(8),outLenBuffer=new ArrayBuffer(8);if(!this.opentui.symbols.encodeUnicode(textBytes,textBytes.length,ptr4(outPtrBuffer),ptr4(outLenBuffer),widthMethodCode))return null;let outPtrView=new BigUint64Array(outPtrBuffer),outLenView=new BigUint64Array(outLenBuffer),resultPtr=Number(outPtrView[0]),resultLen=Number(outLenView[0]);if(resultLen===0)return{ptr:resultPtr,data:[]};let byteLen=resultLen*EncodedCharStruct.size,raw=toArrayBuffer4(resultPtr,0,byteLen),data=EncodedCharStruct.unpackList(raw,resultLen);return{ptr:resultPtr,data}}freeUnicode(encoded){this.opentui.symbols.freeUnicode(encoded.ptr,encoded.data.length)}bufferDrawChar(buffer2,char,x,y,fg2,bg2,attributes=0){this.opentui.symbols.bufferDrawChar(buffer2,char,x,y,fg2.buffer,bg2.buffer,attributes)}registerNativeSpanFeedStream(stream,handler){let callback=this.ensureNativeSpanFeedCallback();this.nativeSpanFeedHandlers.set(toPointer(stream),handler),this.opentui.symbols.streamSetCallback(stream,callback.ptr)}unregisterNativeSpanFeedStream(stream){this.opentui.symbols.streamSetCallback(stream,null),this.nativeSpanFeedHandlers.delete(toPointer(stream))}createNativeSpanFeed(options){let optionsBuffer=options==null?null:NativeSpanFeedOptionsStruct.pack(options),streamPtr=this.opentui.symbols.createNativeSpanFeed(optionsBuffer?ptr4(optionsBuffer):null);if(!streamPtr)throw Error("Failed to create stream");return toPointer(streamPtr)}attachNativeSpanFeed(stream){return this.opentui.symbols.attachNativeSpanFeed(stream)}destroyNativeSpanFeed(stream){this.opentui.symbols.destroyNativeSpanFeed(stream),this.nativeSpanFeedHandlers.delete(toPointer(stream))}streamWrite(stream,data){let bytes=typeof data==="string"?this.encoder.encode(data):data;return this.opentui.symbols.streamWrite(stream,ptr4(bytes),bytes.length)}streamCommit(stream){return this.opentui.symbols.streamCommit(stream)}streamDrainSpans(stream,outBuffer,maxSpans){let count=this.opentui.symbols.streamDrainSpans(stream,ptr4(outBuffer),maxSpans);return toNumber(count)}streamClose(stream){return this.opentui.symbols.streamClose(stream)}streamSetOptions(stream,options){let optionsBuffer=NativeSpanFeedOptionsStruct.pack(options);return this.opentui.symbols.streamSetOptions(stream,ptr4(optionsBuffer))}streamGetStats(stream){let statsBuffer=new ArrayBuffer(NativeSpanFeedStatsStruct.size);if(this.opentui.symbols.streamGetStats(stream,ptr4(statsBuffer))!==0)return null;let stats=NativeSpanFeedStatsStruct.unpack(statsBuffer);return{bytesWritten:typeof stats.bytesWritten==="bigint"?stats.bytesWritten:BigInt(stats.bytesWritten),spansCommitted:typeof stats.spansCommitted==="bigint"?stats.spansCommitted:BigInt(stats.spansCommitted),chunks:stats.chunks,pendingSpans:stats.pendingSpans}}streamReserve(stream,minLen){let reserveBuffer=new ArrayBuffer(ReserveInfoStruct.size),status=this.opentui.symbols.streamReserve(stream,minLen,ptr4(reserveBuffer));if(status!==0)return{status,info:null};return{status,info:ReserveInfoStruct.unpack(reserveBuffer)}}streamCommitReserved(stream,length){return this.opentui.symbols.streamCommitReserved(stream,length)}createSyntaxStyle(){let stylePtr=this.opentui.symbols.createSyntaxStyle();if(!stylePtr)throw Error("Failed to create SyntaxStyle");return stylePtr}destroySyntaxStyle(style){this.opentui.symbols.destroySyntaxStyle(style)}syntaxStyleRegister(style,name,fg2,bg2,attributes){let nameBytes=this.encoder.encode(name),fgPtr=fg2?fg2.buffer:null,bgPtr=bg2?bg2.buffer:null;return this.opentui.symbols.syntaxStyleRegister(style,nameBytes,nameBytes.length,fgPtr,bgPtr,attributes)}syntaxStyleResolveByName(style,name){let nameBytes=this.encoder.encode(name),id=this.opentui.symbols.syntaxStyleResolveByName(style,nameBytes,nameBytes.length);return id===0?null:id}syntaxStyleGetStyleCount(style){let result2=this.opentui.symbols.syntaxStyleGetStyleCount(style);return typeof result2==="bigint"?Number(result2):result2}editorViewSetPlaceholderStyledText(view,chunks){let nonEmptyChunks=chunks.filter((c)=>c.text.length>0);if(nonEmptyChunks.length===0){this.opentui.symbols.editorViewSetPlaceholderStyledText(view,null,0);return}let chunksBuffer=StyledChunkStruct.packList(nonEmptyChunks);this.opentui.symbols.editorViewSetPlaceholderStyledText(view,ptr4(chunksBuffer),nonEmptyChunks.length)}editorViewSetTabIndicator(view,indicator){this.opentui.symbols.editorViewSetTabIndicator(view,indicator)}editorViewSetTabIndicatorColor(view,color2){this.opentui.symbols.editorViewSetTabIndicatorColor(view,color2.buffer)}onNativeEvent(name,handler){this._nativeEvents.on(name,handler)}onceNativeEvent(name,handler){this._nativeEvents.once(name,handler)}offNativeEvent(name,handler){this._nativeEvents.off(name,handler)}onAnyNativeEvent(handler){this._anyEventHandlers.push(handler)}}function setRenderLibPath(libPath){if(opentuiLibPath!==libPath)opentuiLibPath=libPath,opentuiLib=void 0}function resolveRenderLib(){if(!opentuiLib)try{opentuiLib=new FFIRenderLib(opentuiLibPath)}catch(error2){throw Error(`Failed to initialize OpenTUI render library: ${error2 instanceof Error?error2.message:"Unknown error"}`)}return opentuiLib}class TextBuffer{lib;bufferPtr;_length=0;_byteSize=0;_lineInfo;_destroyed=!1;_syntaxStyle;_textBytes;_memId;_appendedChunks=[];constructor(lib,ptr5){this.lib=lib,this.bufferPtr=ptr5}static create(widthMethod){return resolveRenderLib().createTextBuffer(widthMethod)}guard(){if(this._destroyed)throw Error("TextBuffer is destroyed")}setText(text){if(this.guard(),this._textBytes=this.lib.encoder.encode(text),this._memId===void 0)this._memId=this.lib.textBufferRegisterMemBuffer(this.bufferPtr,this._textBytes,!1);else this.lib.textBufferReplaceMemBuffer(this.bufferPtr,this._memId,this._textBytes,!1);this.lib.textBufferSetTextFromMem(this.bufferPtr,this._memId),this._length=this.lib.textBufferGetLength(this.bufferPtr),this._byteSize=this.lib.textBufferGetByteSize(this.bufferPtr),this._lineInfo=void 0,this._appendedChunks=[]}append(text){this.guard();let textBytes=this.lib.encoder.encode(text);this._appendedChunks.push(textBytes),this.lib.textBufferAppend(this.bufferPtr,textBytes),this._length=this.lib.textBufferGetLength(this.bufferPtr),this._byteSize=this.lib.textBufferGetByteSize(this.bufferPtr),this._lineInfo=void 0}loadFile(path52){if(this.guard(),!this.lib.textBufferLoadFile(this.bufferPtr,path52))throw Error(`Failed to load file: ${path52}`);this._length=this.lib.textBufferGetLength(this.bufferPtr),this._byteSize=this.lib.textBufferGetByteSize(this.bufferPtr),this._lineInfo=void 0,this._textBytes=void 0}setStyledText(text){this.guard(),this.lib.textBufferSetStyledText(this.bufferPtr,text.chunks),this._length=this.lib.textBufferGetLength(this.bufferPtr),this._byteSize=this.lib.textBufferGetByteSize(this.bufferPtr),this._lineInfo=void 0}setDefaultFg(fg2){this.guard(),this.lib.textBufferSetDefaultFg(this.bufferPtr,fg2)}setDefaultBg(bg2){this.guard(),this.lib.textBufferSetDefaultBg(this.bufferPtr,bg2)}setDefaultAttributes(attributes){this.guard(),this.lib.textBufferSetDefaultAttributes(this.bufferPtr,attributes)}resetDefaults(){this.guard(),this.lib.textBufferResetDefaults(this.bufferPtr)}getLineCount(){return this.guard(),this.lib.textBufferGetLineCount(this.bufferPtr)}get length(){return this.guard(),this._length}get byteSize(){return this.guard(),this._byteSize}get ptr(){return this.guard(),this.bufferPtr}getPlainText(){if(this.guard(),this._byteSize===0)return"";let plainBytes=this.lib.getPlainTextBytes(this.bufferPtr,this._byteSize);if(!plainBytes)return"";return this.lib.decoder.decode(plainBytes)}getTextRange(startOffset,endOffset){if(this.guard(),startOffset>=endOffset)return"";if(this._byteSize===0)return"";let rangeBytes=this.lib.textBufferGetTextRange(this.bufferPtr,startOffset,endOffset,this._byteSize);if(!rangeBytes)return"";return this.lib.decoder.decode(rangeBytes)}addHighlightByCharRange(highlight){this.guard(),this.lib.textBufferAddHighlightByCharRange(this.bufferPtr,highlight)}addHighlight(lineIdx,highlight){this.guard(),this.lib.textBufferAddHighlight(this.bufferPtr,lineIdx,highlight)}removeHighlightsByRef(hlRef){this.guard(),this.lib.textBufferRemoveHighlightsByRef(this.bufferPtr,hlRef)}clearLineHighlights(lineIdx){this.guard(),this.lib.textBufferClearLineHighlights(this.bufferPtr,lineIdx)}clearAllHighlights(){this.guard(),this.lib.textBufferClearAllHighlights(this.bufferPtr)}getLineHighlights(lineIdx){return this.guard(),this.lib.textBufferGetLineHighlights(this.bufferPtr,lineIdx)}getHighlightCount(){return this.guard(),this.lib.textBufferGetHighlightCount(this.bufferPtr)}setSyntaxStyle(style){this.guard(),this._syntaxStyle=style??void 0,this.lib.textBufferSetSyntaxStyle(this.bufferPtr,style?.ptr??null)}getSyntaxStyle(){return this.guard(),this._syntaxStyle??null}setTabWidth(width){this.guard(),this.lib.textBufferSetTabWidth(this.bufferPtr,width)}getTabWidth(){return this.guard(),this.lib.textBufferGetTabWidth(this.bufferPtr)}clear(){this.guard(),this.lib.textBufferClear(this.bufferPtr),this._length=0,this._byteSize=0,this._lineInfo=void 0,this._textBytes=void 0,this._appendedChunks=[]}reset(){this.guard(),this.lib.textBufferReset(this.bufferPtr),this._length=0,this._byteSize=0,this._lineInfo=void 0,this._textBytes=void 0,this._memId=void 0,this._appendedChunks=[]}destroy(){if(this._destroyed)return;this._destroyed=!0,this.lib.destroyTextBuffer(this.bufferPtr)}}function validateOptions(id,options){if(typeof options.width==="number"){if(options.width<0)throw TypeError(`Invalid width for Renderable ${id}: ${options.width}`)}if(typeof options.height==="number"){if(options.height<0)throw TypeError(`Invalid height for Renderable ${id}: ${options.height}`)}}function isValidPercentage(value){if(typeof value==="string"&&value.endsWith("%")){let numPart=value.slice(0,-1),num=parseFloat(numPart);return!Number.isNaN(num)}return!1}function isMarginType(value){if(typeof value==="number"&&!Number.isNaN(value))return!0;if(value==="auto")return!0;return isValidPercentage(value)}function isPaddingType(value){if(typeof value==="number"&&!Number.isNaN(value))return!0;return isValidPercentage(value)}function isPositionType(value){if(typeof value==="number"&&!Number.isNaN(value))return!0;if(value==="auto")return!0;return isValidPercentage(value)}function isPositionTypeType(value){return value==="relative"||value==="absolute"}function isOverflowType(value){return value==="visible"||value==="hidden"||value==="scroll"}function isDimensionType(value){return isPositionType(value)}function isFlexBasisType(value){if(value===void 0||value==="auto")return!0;if(typeof value==="number"&&!Number.isNaN(value))return!0;return!1}function isSizeType(value){if(value===void 0)return!0;if(typeof value==="number"&&!Number.isNaN(value))return!0;return isValidPercentage(value)}function isRenderable(obj){return!!obj?.[BrandedRenderable]}function isRenderableConstructor(value){return typeof value==="function"&&value.prototype&&Renderable.prototype.isPrototypeOf(value.prototype)}function flattenChildren(children){let result2=[];for(let child of children)if(Array.isArray(child))result2.push(...flattenChildren(child));else if(child!==null&&child!==void 0&&child!==!1)result2.push(child);return result2}function h(type2,props,...children){if(typeof type2!=="function")throw TypeError("h() received an invalid vnode type");let vnode={[BrandedVNode]:!0,type:type2,props,children:flattenChildren(children),__pendingCalls:[]};if(isRenderableConstructor(type2))return new Proxy(vnode,{get(target,prop,receiver){if(prop in target)return Reflect.get(target,prop,receiver);if(typeof prop==="string"){let prototype=type2.prototype;if(prototype&&(typeof prototype[prop]==="function"||Object.getOwnPropertyDescriptor(prototype,prop)||Object.getOwnPropertyDescriptor(Object.getPrototypeOf(prototype),prop)))return(...args)=>{return target.__pendingCalls=target.__pendingCalls||[],target.__pendingCalls.push({method:prop,args}),target}}return Reflect.get(target,prop,receiver)},set(target,prop,value,receiver){if(typeof prop==="string"&&isRenderableConstructor(type2)){let prototype=type2.prototype,descriptor=Object.getOwnPropertyDescriptor(prototype,prop)||Object.getOwnPropertyDescriptor(Object.getPrototypeOf(prototype),prop);if(descriptor&&descriptor.set)return target.__pendingCalls=target.__pendingCalls||[],target.__pendingCalls.push({method:prop,args:[value],isProperty:!0}),!0}return Reflect.set(target,prop,value,receiver)}});return vnode}function isVNode(node){return node&&node[BrandedVNode]}function maybeMakeRenderable(ctx,node){if(isRenderable(node))return node;if(isVNode(node))return instantiate(ctx,node);return console.warn("maybeMakeRenderable received an invalid node",util3.inspect(node,{depth:2})),null}function wrapWithDelegates(instance,delegateMap){if(!delegateMap||Object.keys(delegateMap).length===0)return instance;let descendantCache=new Map,getDescendant=(id)=>{if(descendantCache.has(id)){let cached=descendantCache.get(id);if(cached!==void 0)return cached}let descendant=instance.findDescendantById(id);if(descendant)descendantCache.set(id,descendant);return descendant};return new Proxy(instance,{get(target,prop,receiver){if(typeof prop==="string"&&delegateMap[prop]){let host=getDescendant(delegateMap[prop]);if(host){let value=host[prop];if(typeof value==="function")return value.bind(host);return value}}return Reflect.get(target,prop,receiver)},set(target,prop,value,receiver){if(typeof prop==="string"&&delegateMap[prop]){let host=getDescendant(delegateMap[prop]);if(host)return Reflect.set(host,prop,value)}return Reflect.set(target,prop,value,receiver)}})}function instantiate(ctx,node){if(isRenderable(node))return node;if(!node||typeof node!=="object")throw TypeError("mount() received an invalid vnode");let vnode=node,{type:type2,props}=vnode,children=flattenChildren(vnode.children||[]),delegateMap=vnode.__delegateMap;if(isRenderableConstructor(type2)){let instance=new type2(ctx,props||{});for(let child of children)if(isRenderable(child))instance.add(child);else{let mounted=instantiate(ctx,child);instance.add(mounted)}let delegatedInstance=wrapWithDelegates(instance,delegateMap),pendingCalls=vnode.__pendingCalls;if(pendingCalls)for(let call of pendingCalls)if(call.isProperty)delegatedInstance[call.method]=call.args[0];else delegatedInstance[call.method].apply(delegatedInstance,call.args);return delegatedInstance}let resolved=type2(props||{},children),inst=instantiate(ctx,resolved);return wrapWithDelegates(inst,delegateMap)}function delegate(mapping,vnode){if(isRenderable(vnode))return wrapWithDelegates(vnode,mapping);if(!vnode||typeof vnode!=="object")return vnode;return vnode.__delegateMap={...vnode.__delegateMap||{},...mapping},vnode}function mergeKeyAliases(defaults,custom2){return{...defaults,...custom2}}function mergeKeyBindings(defaults,custom2){let map2=new Map;for(let binding of defaults){let key=getKeyBindingKey(binding);map2.set(key,binding)}for(let binding of custom2){let key=getKeyBindingKey(binding);map2.set(key,binding)}return Array.from(map2.values())}function getKeyBindingKey(binding){return`${binding.name}:${binding.ctrl?1:0}:${binding.shift?1:0}:${binding.meta?1:0}:${binding.super?1:0}`}function buildKeyBindingsMap(bindings,aliasMap){let map2=new Map,aliases=aliasMap||{};for(let binding of bindings){let key=getKeyBindingKey(binding);map2.set(key,binding.action)}for(let binding of bindings){let normalizedName=aliases[binding.name]||binding.name;if(normalizedName!==binding.name){let aliasedKey=getKeyBindingKey({...binding,name:normalizedName});map2.set(aliasedKey,binding.action)}}return map2}function keyBindingToString(binding){let parts=[];if(binding.ctrl)parts.push("ctrl");if(binding.shift)parts.push("shift");if(binding.meta)parts.push("meta");if(binding.super)parts.push("super");return parts.push(binding.name),parts.join("+")}function getCallerInfo(){let stackLines=Error().stack?.split(`
|
|
2375
2410
|
`).slice(5)||[];if(!stackLines.length)return null;let callerLine=stackLines[0].trim(),regex=/at\s+(?:([\w$.<>]+)\s+\()?((?:\/|[A-Za-z]:\\)[^:]+):(\d+):(\d+)\)?/,match=callerLine.match(regex);if(!match)return null;let functionName=match[1]||"<anonymous>",fullPath=match[2],fileName=fullPath.split(/[\\/]/).pop()||"<unknown>",lineNumber=parseInt(match[3],10)||0,columnNumber=parseInt(match[4],10)||0;return{functionName,fullPath,fileName,lineNumber,columnNumber}}function encodeOsc52Payload(text,encoder2=new TextEncoder){let base64=Buffer.from(text).toString("base64");return encoder2.encode(base64)}class Clipboard{lib;rendererPtr;constructor(lib,rendererPtr){this.lib=lib,this.rendererPtr=rendererPtr}copyToClipboardOSC52(text,target=0){if(!this.isOsc52Supported())return!1;let payload=encodeOsc52Payload(text,this.lib.encoder);return this.lib.copyToClipboardOSC52(this.rendererPtr,target,payload)}clearClipboardOSC52(target=0){if(!this.isOsc52Supported())return!1;return this.lib.clearClipboardOSC52(this.rendererPtr,target)}isOsc52Supported(){let caps=this.lib.getTerminalCapabilities(this.rendererPtr);return Boolean(caps?.osc52)}}function getObjectsInViewport(viewport,objects,direction="column",padding=10,minTriggerSize=16){if(viewport.width<=0||viewport.height<=0)return[];if(objects.length===0)return[];if(objects.length<minTriggerSize)return objects;let viewportTop=viewport.y-padding,viewportBottom=viewport.y+viewport.height+padding,viewportLeft=viewport.x-padding,viewportRight=viewport.x+viewport.width+padding,isRow=direction==="row",children=objects,totalChildren=children.length;if(totalChildren===0)return[];let vpStart=isRow?viewportLeft:viewportTop,vpEnd=isRow?viewportRight:viewportBottom,lo=0,hi=totalChildren-1,candidate=-1;while(lo<=hi){let mid=lo+hi>>1,c=children[mid],start2=isRow?c.x:c.y;if((isRow?c.x+c.width:c.y+c.height)<vpStart)lo=mid+1;else if(start2>vpEnd)hi=mid-1;else{candidate=mid;break}}let visibleChildren=[];if(candidate===-1)candidate=lo>0?lo-1:0;let maxLookBehind=50,left=candidate,gapCount=0;while(left-1>=0){let prev=children[left-1];if((isRow?prev.x+prev.width:prev.y+prev.height)<=vpStart){if(gapCount++,gapCount>=maxLookBehind)break}else gapCount=0;left--}let right=candidate+1;while(right<totalChildren){let next=children[right];if((isRow?next.x:next.y)>=vpEnd)break;right++}for(let i2=left;i2<right;i2++){let child=children[i2],start2=isRow?child.x:child.y;if((isRow?child.x+child.width:child.y+child.height)<=vpStart)continue;if(start2>=vpEnd)break;if(isRow){if(child.y+child.height<viewportTop)continue;if(child.y>viewportBottom)continue}else{if(child.x+child.width<viewportLeft)continue;if(child.x>viewportRight)continue}visibleChildren.push(child)}if(visibleChildren.length>1)visibleChildren.sort((a,b2)=>a.zIndex>b2.zIndex?1:a.zIndex<b2.zIndex?-1:0);return visibleChildren}function isCapabilityResponse(sequence){if(/\x1b\[\?\d+(?:;\d+)*\$y/.test(sequence))return!0;if(/\x1b\[1;(?!1R)\d+R/.test(sequence))return!0;if(/\x1bP>\|[\s\S]*?\x1b\\/.test(sequence))return!0;if(/\x1b_G[\s\S]*?\x1b\\/.test(sequence))return!0;if(/\x1b\[\?\d+(?:;\d+)?u/.test(sequence))return!0;if(/\x1b\[\?[0-9;]*c/.test(sequence))return!0;return!1}function isPixelResolutionResponse(sequence){return/\x1b\[4;\d+;\d+t/.test(sequence)}function parsePixelResolution(sequence){let match=sequence.match(/\x1b\[4;(\d+);(\d+)t/);if(match)return{width:parseInt(match[2]),height:parseInt(match[1])};return null}function buildKittyKeyboardFlags(config){if(!config)return 0;let flags=0;if(config.disambiguate!==!1)flags|=KITTY_FLAG_DISAMBIGUATE;if(config.alternateKeys!==!1)flags|=KITTY_FLAG_ALTERNATE_KEYS;if(config.events===!0)flags|=KITTY_FLAG_EVENT_TYPES;if(config.allKeysAsEscapes===!0)flags|=KITTY_FLAG_ALL_KEYS_AS_ESCAPES;if(config.reportText===!0)flags|=KITTY_FLAG_REPORT_TEXT;return flags}class MouseEvent{type;button;x;y;source;modifiers;scroll;target;isDragging;_propagationStopped=!1;_defaultPrevented=!1;get propagationStopped(){return this._propagationStopped}get defaultPrevented(){return this._defaultPrevented}constructor(target,attributes){this.target=target,this.type=attributes.type,this.button=attributes.button,this.x=attributes.x,this.y=attributes.y,this.modifiers=attributes.modifiers,this.scroll=attributes.scroll,this.source=attributes.source,this.isDragging=attributes.isDragging}stopPropagation(){this._propagationStopped=!0}preventDefault(){this._defaultPrevented=!0}}async function createCliRenderer(config={}){if(process.argv.includes("--delay-start"))await new Promise((resolve42)=>setTimeout(resolve42,5000));let stdin=config.stdin||process.stdin,stdout=config.stdout||process.stdout,width=stdout.columns||80,height2=stdout.rows||24,renderHeight=config.experimental_splitHeight&&config.experimental_splitHeight>0?config.experimental_splitHeight:height2,ziglib=resolveRenderLib(),rendererPtr=ziglib.createRenderer(width,renderHeight,{remote:config.remote??!1,testing:config.testing??!1});if(!rendererPtr)throw Error("Failed to create renderer");if(config.useThread===void 0)config.useThread=!0;if(process.platform==="linux")config.useThread=!1;ziglib.setUseThread(rendererPtr,config.useThread);let kittyConfig=config.useKittyKeyboard??{},kittyFlags=buildKittyKeyboardFlags(kittyConfig);ziglib.setKittyKeyboardFlags(rendererPtr,kittyFlags);let renderer=new CliRenderer(ziglib,rendererPtr,stdin,stdout,width,height2,config);if(!config.testing)await renderer.setupTerminal();return renderer}var __defProp2,__returnValue2=(v)=>v,__export2=(target,all)=>{for(var name in all)__defProp2(target,name,{get:all[name],enumerable:!0,configurable:!0,set:__exportSetter2.bind(all,name)})},exports_src2,loadYoga,yoga_wasm_base64_esm_default,Align,BoxSizing,Dimension,Direction,Display,Edge,Errata,ExperimentalFeature,FlexDirection,Gutter,Justify,LogLevel,MeasureMode,NodeType,Overflow,PositionType,Unit,Wrap,constants,YGEnums_default,Yoga,src_default2,VALID_BORDER_STYLES,BorderChars,BorderCharArrays,KeyHandler,InternalKeyHandler,CSS_COLOR_NAMES,block_default,shade_default,slick_default,tiny_default,huge_default,grid_default,pallet_default,fonts,parsedFonts,TextAttributes,ATTRIBUTE_BASE_BITS=8,ATTRIBUTE_BASE_MASK=255,DebugOverlayCorner,TargetChannel,ATTRIBUTE_BASE_MASK2=255,LINK_ID_SHIFT=8,LINK_ID_PAYLOAD_MASK=16777215,BrandedStyledText,StyledText,black=(input)=>applyStyle(input,{fg:"black"}),red=(input)=>applyStyle(input,{fg:"red"}),green=(input)=>applyStyle(input,{fg:"green"}),yellow=(input)=>applyStyle(input,{fg:"yellow"}),blue=(input)=>applyStyle(input,{fg:"blue"}),magenta=(input)=>applyStyle(input,{fg:"magenta"}),cyan=(input)=>applyStyle(input,{fg:"cyan"}),white=(input)=>applyStyle(input,{fg:"white"}),brightBlack=(input)=>applyStyle(input,{fg:"brightBlack"}),brightRed=(input)=>applyStyle(input,{fg:"brightRed"}),brightGreen=(input)=>applyStyle(input,{fg:"brightGreen"}),brightYellow=(input)=>applyStyle(input,{fg:"brightYellow"}),brightBlue=(input)=>applyStyle(input,{fg:"brightBlue"}),brightMagenta=(input)=>applyStyle(input,{fg:"brightMagenta"}),brightCyan=(input)=>applyStyle(input,{fg:"brightCyan"}),brightWhite=(input)=>applyStyle(input,{fg:"brightWhite"}),bgBlack=(input)=>applyStyle(input,{bg:"black"}),bgRed=(input)=>applyStyle(input,{bg:"red"}),bgGreen=(input)=>applyStyle(input,{bg:"green"}),bgYellow=(input)=>applyStyle(input,{bg:"yellow"}),bgBlue=(input)=>applyStyle(input,{bg:"blue"}),bgMagenta=(input)=>applyStyle(input,{bg:"magenta"}),bgCyan=(input)=>applyStyle(input,{bg:"cyan"}),bgWhite=(input)=>applyStyle(input,{bg:"white"}),bold=(input)=>applyStyle(input,{bold:!0}),italic=(input)=>applyStyle(input,{italic:!0}),underline=(input)=>applyStyle(input,{underline:!0}),strikethrough=(input)=>applyStyle(input,{strikethrough:!0}),dim=(input)=>applyStyle(input,{dim:!0}),reverse=(input)=>applyStyle(input,{reverse:!0}),blink=(input)=>applyStyle(input,{blink:!0}),fg=(color2)=>(input)=>applyStyle(input,{fg:color2}),bg=(color2)=>(input)=>applyStyle(input,{bg:color2}),link=(url)=>(input)=>{return{...typeof input==="object"&&"__isChunk"in input?input:{__isChunk:!0,text:String(input)},link:{url}}},kittyKeyMap,functionalKeyMap,tildeKeyMap,metaKeyCodeRe,fnKeyRe,keyName,nonAlphanumericKeys,isShiftKey=(code)=>{return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(code)},isCtrlKey=(code)=>{return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(code)},modifyOtherKeysRe,parseKeypress=(s2="",options={})=>{let parts;if(Buffer2.isBuffer(s2))if(s2[0]>127&&s2[1]===void 0)s2[0]-=128,s2="\x1B"+String(s2);else s2=String(s2);else if(s2!==void 0&&typeof s2!=="string")s2=String(s2);else if(!s2)s2="";if(/^\x1b\[<\d+;\d+;\d+[Mm]$/.test(s2))return null;if(/^\[<\d+;\d+;\d+[Mm]$/.test(s2))return null;if(/^\x1b\[<[\d;]*$/.test(s2))return null;if(/^\[<[\d;]*$/.test(s2))return null;if(s2.startsWith("\x1B[M")&&s2.length>=6)return null;if(/^\x1b\[\d+;\d+;\d+t$/.test(s2))return null;if(/^\x1b\[\d+;\d+R$/.test(s2))return null;if(/^\x1b\[\?[\d;]+c$/.test(s2))return null;if(/^\x1b\[\?[\d;]+\$y$/.test(s2))return null;if(s2==="\x1B[I"||s2==="\x1B[O")return null;if(/^\x1b\][\d;].*(\x1b\\|\x07)$/.test(s2))return null;if(s2==="\x1B[200~"||s2==="\x1B[201~")return null;let key={name:"",ctrl:!1,meta:!1,shift:!1,option:!1,number:!1,sequence:s2,raw:s2,eventType:"press",source:"raw"};if(key.sequence=key.sequence||s2||key.name,options.useKittyKeyboard){let kittyResult=parseKittyKeyboard(s2);if(kittyResult)return kittyResult}let modifyOtherKeysMatch=modifyOtherKeysRe.exec(s2);if(modifyOtherKeysMatch){let modifier=parseInt(modifyOtherKeysMatch[1],10)-1,charCode=parseInt(modifyOtherKeysMatch[2],10);if(key.ctrl=!!(modifier&4),key.meta=!!(modifier&2),key.shift=!!(modifier&1),key.option=!!(modifier&2),key.super=!!(modifier&8),key.hyper=!!(modifier&16),charCode===13)key.name="return";else if(charCode===27)key.name="escape";else if(charCode===9)key.name="tab";else if(charCode===32)key.name="space";else if(charCode===127||charCode===8)key.name="backspace";else{let char=String.fromCharCode(charCode);if(key.name=char,key.sequence=char,charCode>=48&&charCode<=57)key.number=!0}return key}if(s2==="\r"||s2==="\x1B\r")key.name="return",key.meta=s2.length===2;else if(s2===`
|
|
2376
2411
|
`||s2===`\x1B
|
|
2377
2412
|
`)key.name="linefeed",key.meta=s2.length===2;else if(s2==="\t")key.name="tab";else if(s2==="\b"||s2==="\x1B\b"||s2==="\x7F"||s2==="\x1B\x7F")key.name="backspace",key.meta=s2.charAt(0)==="\x1B";else if(s2==="\x1B"||s2==="\x1B\x1B")key.name="escape",key.meta=s2.length===2;else if(s2===" "||s2==="\x1B ")key.name="space",key.meta=s2.length===2;else if(s2==="\x00")key.name="space",key.ctrl=!0;else if(s2.length===1&&s2<="\x1A")key.name=String.fromCharCode(s2.charCodeAt(0)+97-1),key.ctrl=!0;else if(s2.length===1&&s2>="0"&&s2<="9")key.name=s2,key.number=!0;else if(s2.length===1&&s2>="a"&&s2<="z")key.name=s2;else if(s2.length===1&&s2>="A"&&s2<="Z")key.name=s2.toLowerCase(),key.shift=!0;else if(s2.length===1||s2.length===2&&s2.codePointAt(0)>65535)key.name=s2;else if(parts=metaKeyCodeRe.exec(s2)){key.meta=!0;let char=parts[1],isUpperCase=/^[A-Z]$/.test(char);if(char==="F")key.name="right";else if(char==="B")key.name="left";else if(isUpperCase)key.shift=!0,key.name=char;else key.name=char}else if(s2.length===2&&s2[0]==="\x1B"&&s2[1]<="\x1A")key.meta=!0,key.ctrl=!0,key.name=String.fromCharCode(s2.charCodeAt(1)+97-1);else if(parts=fnKeyRe.exec(s2)){let segs=[...s2];if(segs[0]==="\x1B"&&segs[1]==="\x1B")key.option=!0,key.meta=!0;let code=[parts[1],parts[2],parts[4],parts[6]].filter(Boolean).join(""),modifier=parseInt(parts[3]||parts[5]||"1",10)-1;key.ctrl=key.ctrl||!!(modifier&4),key.meta=key.meta||!!(modifier&2),key.shift=key.shift||!!(modifier&1),key.option=key.option||!!(modifier&2),key.super=!!(modifier&8),key.hyper=!!(modifier&16),key.code=code;let keyNameResult=keyName[code];if(keyNameResult)key.name=keyNameResult,key.shift=isShiftKey(code)||key.shift,key.ctrl=isCtrlKey(code)||key.ctrl;else key.name="",key.code=void 0}else if(s2==="\x1B[3~")key.name="delete",key.meta=!1,key.code="[3~";return key},MouseParser,singletonCacheSymbol,envRegistry,envStore,env,DEFAULT_TIMEOUT_MS=10,DEFAULT_MAX_PENDING_BYTES=65536,INITIAL_PENDING_CAPACITY=256,ESC=27,BEL=7,BRACKETED_PASTE_START,BRACKETED_PASTE_END,EMPTY_BYTES,KEY_DECODER,DEFAULT_PROTOCOL_CONTEXT,RXVT_DOLLAR_CSI_RE,SYSTEM_CLOCK,TIMERS_MAP,_cachedParsers,DEFAULT_PARSERS,isUrl=(path6)=>path6.startsWith("http://")||path6.startsWith("https://"),TreeSitterClient,DataPathsManager,extensionToFiletype,basenameToFiletype,__dirname2="/Users/runner/work/opentui/opentui/packages/core/src/lib/tree-sitter/assets",SYSTEM_CLOCK2,OSC4_RESPONSE,OSC_SPECIAL_RESPONSE,PASTE_TEXT_DECODER,URL_SCOPES,pointerSize,typeSizes,primitiveKeys,typeAlignments,typeGetters,pointerPacker,pointerUnpacker,encoder,decoder,rgbaPackTransform=(rgba)=>rgba?ptr3(rgba.buffer):null,rgbaUnpackTransform=(ptr42)=>ptr42?RGBA.fromArray(new Float32Array(toArrayBuffer3(ptr42))):void 0,StyledChunkStruct,HighlightStruct,LogicalCursorStruct,VisualCursorStruct,UnicodeMethodEnum,TerminalCapabilitiesStruct,EncodedCharStruct,LineInfoStruct,MeasureResultStruct,CursorStateStruct,CursorStyleOptionsStruct,GridDrawOptionsStruct,BuildOptionsStruct,AllocatorStatsStruct,GrowthPolicyEnum,NativeSpanFeedOptionsStruct,NativeSpanFeedStatsStruct,SpanInfoStruct,ReserveInfoStruct,module,targetLibPath,CURSOR_STYLE_TO_ID,CURSOR_ID_TO_STYLE,MOUSE_STYLE_TO_ID,globalTraceSymbols=null,globalFFILogPath=null,exitHandlerRegistered2=!1,LogLevel2,opentuiLibPath,opentuiLib,BrandedRenderable,LayoutEvents,RenderableEvents,BaseRenderable,yogaConfig,Renderable,RootRenderable,BrandedVNode,Capture,CapturedWritableStream,defaultKeyAliases,capture,TerminalConsoleCache,terminalConsoleCache,ConsolePosition,defaultConsoleKeybindings,DEFAULT_CONSOLE_OPTIONS,INDENT_WIDTH=2,TerminalConsole,ANSI2,DEFAULT_FORWARDED_ENV_KEYS,KITTY_FLAG_DISAMBIGUATE=1,KITTY_FLAG_EVENT_TYPES=2,KITTY_FLAG_ALTERNATE_KEYS=4,KITTY_FLAG_ALL_KEYS_AS_ESCAPES=8,KITTY_FLAG_REPORT_TEXT=16,DEFAULT_STDIN_PARSER_MAX_BUFFER_BYTES=67108864,MouseButton,rendererTracker,CliRenderEvents,RendererControlState,CliRenderer;var init_index_mdxq0qtt=__esm(async()=>{init_highlights();init_tree_sitter_javascript();init_highlights2();init_tree_sitter_typescript();init_highlights3();init_tree_sitter_markdown();init_injections();init_highlights4();init_tree_sitter_markdown_inline();init_highlights5();init_tree_sitter_zig();__defProp2=Object.defineProperty;exports_src2={};__export2(exports_src2,{default:()=>src_default2,Wrap:()=>Wrap,Unit:()=>Unit,PositionType:()=>PositionType,Overflow:()=>Overflow,NodeType:()=>NodeType,MeasureMode:()=>MeasureMode,LogLevel:()=>LogLevel,Justify:()=>Justify,Gutter:()=>Gutter,FlexDirection:()=>FlexDirection,ExperimentalFeature:()=>ExperimentalFeature,Errata:()=>Errata,Edge:()=>Edge,Display:()=>Display,Direction:()=>Direction,Dimension:()=>Dimension,BoxSizing:()=>BoxSizing,Align:()=>Align});loadYoga=(()=>{var _scriptDir=import.meta.url;return function(loadYoga2){loadYoga2=loadYoga2||{};var h;h||(h=typeof loadYoga2<"u"?loadYoga2:{});var aa,ca;h.ready=new Promise(function(a,b2){aa=a,ca=b2});var da=Object.assign({},h),q="";typeof document<"u"&&document.currentScript&&(q=document.currentScript.src),_scriptDir&&(q=_scriptDir),q.indexOf("blob:")!==0?q=q.substr(0,q.replace(/[?#].*/,"").lastIndexOf("/")+1):q="";var ea=h.print||console.log.bind(console),v=h.printErr||console.warn.bind(console);Object.assign(h,da),da=null;var w;h.wasmBinary&&(w=h.wasmBinary);var noExitRuntime=h.noExitRuntime||!0;typeof WebAssembly!="object"&&x("no native wasm support detected");var fa,ha=!1;function z(a,b2,c){c=b2+c;for(var d="";!(b2>=c);){var e=a[b2++];if(!e)break;if(e&128){var f=a[b2++]&63;if((e&224)==192)d+=String.fromCharCode((e&31)<<6|f);else{var g=a[b2++]&63;e=(e&240)==224?(e&15)<<12|f<<6|g:(e&7)<<18|f<<12|g<<6|a[b2++]&63,65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}var ia,ja,A,C,ka,D,E,la,ma;function na(){var a=fa.buffer;ia=a,h.HEAP8=ja=new Int8Array(a),h.HEAP16=C=new Int16Array(a),h.HEAP32=D=new Int32Array(a),h.HEAPU8=A=new Uint8Array(a),h.HEAPU16=ka=new Uint16Array(a),h.HEAPU32=E=new Uint32Array(a),h.HEAPF32=la=new Float32Array(a),h.HEAPF64=ma=new Float64Array(a)}var oa,pa=[],qa=[],ra=[];function sa(){var a=h.preRun.shift();pa.unshift(a)}var F=0,ta=null,G=null;function x(a){if(h.onAbort)h.onAbort(a);throw a="Aborted("+a+")",v(a),ha=!0,a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info."),ca(a),a}function ua(a){return a.startsWith("data:application/octet-stream;base64,")}var H="data:application/octet-stream;base64,AGFzbQEAAAABugM3YAF/AGACf38AYAF/AX9gA39/fwBgAn98AGACf38Bf2ADf39/AX9gBH9/f30BfWADf398AGAAAGAEf39/fwBgAX8BfGACf38BfGAFf39/f38Bf2AAAX9gA39/fwF9YAZ/f31/fX8AYAV/f39/fwBgAn9/AX1gBX9/f319AX1gAX8BfWADf35/AX5gB39/f39/f38AYAZ/f39/f38AYAR/f39/AX9gBn9/f319fQF9YAR/f31/AGADf399AX1gBn98f39/fwF/YAR/fHx/AGACf30AYAh/f39/f39/fwBgDX9/f39/f39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38BfGAEfHx/fwF9YA1/fX1/f399fX9/f39/AX9gB39/f319f38AYAJ+fwF/YAN/fX0BfWABfAF8YAN/fHwAYAR/f319AGAHf39/fX19fQF9YA1/fX99f31/fX19fX1/AX9gC39/f39/f399fX19AX9gCH9/f39/f319AGAEf39+fgBgB39/f39/f38Bf2ACfH8BfGAFf398fH8AYAN/f38BfGAEf39/fABgA39/fQBgBn9/fX99fwF/ArUBHgFhAWEAHwFhAWIAAwFhAWMACQFhAWQAFgFhAWUAEQFhAWYAIAFhAWcAAAFhAWgAIQFhAWkAAwFhAWoAAAFhAWsAFwFhAWwACgFhAW0ABQFhAW4AAwFhAW8AAQFhAXAAFwFhAXEABgFhAXIAAAFhAXMAIgFhAXQACgFhAXUADQFhAXYAFgFhAXcAAgFhAXgAAwFhAXkAGAFhAXoAAgFhAUEAAQFhAUIAEQFhAUMAAQFhAUQAAAOiAqACAgMSBwcACRkDAAoRBgYKEwAPDxMBBiMTCgcHGgMUASQFJRQHAwMKCgMmAQYYDxobFAAKBw8KBwMDAgkCAAAFGwACBwIHBgIDAQMIDAABKAkHBQURACkZASoAAAIrLAIALQcHBy4HLwkFCgMCMA0xAgMJAgACAQYKAQIBBQEACQIFAQEABQAODQ0GFQIBHBUGAgkCEAAAAAUyDzMMBQYINAUCAwUODg41AgMCAgIDBgICNgIBDAwMAQsLCwsLCx0CAAIAAAABABABBQICAQMCEgMMCwEBAQEBAQsLAQICAwICAgICAgIDAgIICAEICAgEBAQEBAQEBAQABAQABAQEBAAE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GiABQQA2AvADIAFCADcC6AMgAigC7AMiAyACKALoAyIERwRAIAMgBGsiBEEASA0FIAEgBBAeIgM2AuwDIAEgAzYC6AMgASADIARqNgLwAyACKALoAyIEIAIoAuwDIghHBEADQCADIAQoAgA2AgAgA0EEaiEDIARBBGoiBCAIRw0ACwsgASADNgLsAwsgASACKQL0AzcC9AMgASACKAKEBDYChAQgASACKQL8AzcC/AMgAUEANgLkAwsgBSABNgIAIAEgADYC5AMLIAZBAWohBiAFQQRqIgUgB0cNAAsLDwsQAgALUAACQAJAAkACQAJAIAIOBAQAAQIDCyAAIAEgAUEwahBDDwsgACABIAFBMGogAxBEDwsgACABIAFBMGoQQg8LECQACyAAIAEgAUEwaiADEEULcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QdwlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt5AgF/AX0jAEEQayIDJAAgA0EIaiAAIAFBAnRB7CVqKAIAIAIQU0MAAMB/IQQCQAJAAkAgAy0ADEEBaw4CAAECCyADKgIIIQQMAQsgAyoCCEMAAAAAlEMK1yM8lCEECyADQRBqJAAgBEMAAAAAl0MAAAAAIAQgBFsbC1QAAkACQAJAAkACQCACDgQEAAECAwsgACABIAFBwgBqEEMPCyAAIAEgAUHCAGogAxBEDwsgACABIAFBwgBqEEIPCxAkAAsgACABIAFBwgBqIAMQRQsvACAAIAJFQQF0IgIgASADEGAgACACIAEQS5IgACACIAEgAxB/IAAgAiABEFKSkgvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akH2AGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALzgECA38CfSMAQRBrIgMk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AWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAVCwUAEFgACzkAIABFBEBBAA8LAn8gAUGAf3FBgL8DRiABQf8ATXJFBEBB/DtBGTYCAEF/DAELIAAgAToAAEEBCwvEAgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAQALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQegAaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQOQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIANBEGokAAtdAQR/IAAoAgAhAgNAIAIsAAAiAxBXBEBBfyEEIAAgAkEBaiICNgIAIAFBzJmz5gBNBH9BfyADQTBrIgMgAUEKbCIEaiADIARB/////wdzShsFIAQLIQEMAQsLIAELrhQCEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRQCQAJAAkACQANAIAEhDSAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCANIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAH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IQEgAEIANwIEIAAgATYCACABIAA2AgQgAkEQaiQAIAALGwEBfyAABEAgACgCACIBBEAgARAjCyAAECMLC0kBAn9BBBAeIQFBIBAeIgBBADYCHCAAQoCAgICAgIDAPzcCFCAAQgA3AgwgAEEAOgAIIABBAzYCBCAAQQA2AgAgASAANgIAIAELIAAgAkEFR0EAIAIbRQRAQbgwIAMgBBBJDwsgAyAEEHALIgEBfiABIAKtIAOtQiCGhCAEIAARFQAiBUIgiKckASAFpwuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECsaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECsaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACCwQAQgALBABBAAuKBQIGfgJ/IAEgASgCAEEHakF4cSIBQRBqNgIAIAAhCSABKQMAIQMgASkDCCEGIwBBIGsiCCQAAkAgBkL///////////8AgyIEQoCAgICAgMCAPH0gBEKAgICAgIDA/8MAfVQEQCAGQgSGIANCPIiEIQQgA0L//////////w+DIgNCgYCAgICAgIAIWgRAIARCgYCAgICAgIDAAHwhAgwCCyAEQoCAgICAgICAQH0hAiADQoCAgICAgICACFINASACIARCAYN8IQIMAQsgA1AgBEKAgICAgIDA//8AVCAEQoCAgICAgMD//wBRG0UEQCAGQgSGIANCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiAEQv///////7//wwBWDQBCACECIARCMIinIgBBkfcASQ0AIAMhAiAGQv///////z+DQoCAgICAgMAAhCIFIQcCQCAAQYH3AGsiAUHAAHEEQCACIAFBQGqthiEHQgAhAgwBCyABRQ0AIAcgAa0iBIYgAkHAACABa62IhCEHIAIgBIYhAgsgCCACNwMQIAggBzcDGAJAQYH4ACAAayIAQcAAcQRAIAUgAEFAaq2IIQNCACEFDAELIABFDQAgBUHAACAAa62GIAMgAK0iAoiEIQMgBSACiCEFCyAIIAM3AwAgCCAF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ASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRCwALYQECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBAEEQEB4iACACKQMINwMIIAAgAikDADcDACACQRBqJAAgAAtjAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwBBEBAeIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiQAIAALNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEEAAs5AQF/IAEgACgCBCIEQQF1aiEBIAAoAgAhACABIAIgAyAEQQFxBH8gASgCACAAaigCAAUgAAsRCAALCQAgASAAEQIACwUAQcM7Cw8AIAEgACgCAGogAjYCAAsNACABIAAoAgBqKAIACxgBAX9BEBAeIgBCADcDCCAAQQA2AgAgAAsYAQF/QRAQHiIAQgA3AwAgAEIANwMIIAALDABBMBAeQQBBMBAqCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRHgALBQBBvjsLIQAgACABKAIAIAEgASwAC0EASBtBuzsgAigCABAQNgIACyoBAX9BDBAeIgFBADoABCABIAAoAgA2AgggAEEANgIAIAFB2Cc2AgAgAQsFAEG7OwsFAEG4OwshACAAIAEoAgAgASABLAALQQBIG0GkOyACKAIAEBA2AgAL2AEBBH8jAEEgayIDJAAgASgCACIEQfD///8HSQRAAkACQCAEQQtPBEAgBEEPckEBaiIFEB4hBiADIAVBgICAgHhyNgIQIAMgBjYCCCADIAQ2AgwgBCAGaiEFDAELIAMgBDoAEyADQQhqIgYgBGohBSAERQ0BCyAGIAFBBGogBBArGgsgBUEAOgAAIAMgAjYCACADQRhqIANBCGogAyAAEQMAIAMoAhgQHSADKAIYIgAQBiADKAIAEAYgAywAE0EASARAIAMoAggQIwsgA0EgaiQAIAAPCxACAAsqAQF/QQwQHiIBQQA6AAQgASAAKAIANgIIIABBADYCACABQeAmNgIA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AkEIaiAIIAYQHyACIAcgAC8AABAfQQEhAyACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSADC0UNAiACLQAMIAItAARHDQILIABBAmohAEEBIQMgBCEGQQEhBCAGRQ0ACyABLwB6IgBBB3FFBEAgBS0AekEHcUUNAgsgCCAAECAiCiAHIAUvAHoQICILWw0BIAogClsNACALIAtcDQELIAFBFGogBUEUakHoABArGiABQfwAaiAFQfwAahCgAQNAIAEtAAAiAEEEcQ0BIAEgAEEEcjoAACABKAIQIgAEQCABIAARAAALIAFBgICA/gc2ApwBIAEoAuQDIgENAAsLIAJBEGokAAvGAwEEfyMAQaAEayICJAAgACgCBCEBIABBADYCBCABBEAgASABKAIAKAIEEQAACyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALAkAgACgCACIAKALoAyAAKALsA0YEQCAAKALkAw0BIAAgAkEYaiAAKAL0AxBcIgEpAgA3AgAgACABKAIQNgIQIAAgASkCCDcCCCAAQRRqIAFBFGpB6AAQKxogACABKQKMATcCjAEgACABKQKEATcChAEgACABKQJ8NwJ8IAEoApQBIQQgAUEANgKUASAAKAKUASEDIAAgBDYClAEgAwRAIAMQWwsgAEGYAWogAUGYAWpB0AIQKxogACgC6AMiAwRAIAAgAzYC7AMgAxAjCyAAIAEoAugDNgLoAyAAIAEoAuwDNgLsAyAAIAEoAvADNgLwAyABQQA2AvADIAFCADcC6AMgACABKQL8AzcC/AMgACABKQL0AzcC9AMgACABKAKEBDYChAQgASgClAEhACABQQA2ApQBIAAEQCAAEFsLIAJBoARqJAAPCyACQfAcNgIQIABBBUHYJSACQRBqECwQJAALIAJB5hE2AgAgAEEFQdglIAIQLBAkAAsLAEEMEB4gABCiAQsLAEEMEB5BABCiAQsNACAAKAIALQAIQQFxCwoAIAAoAgAoAhQLGQAgAUH/AXEEQBACAAsgACgCACgCEEEBcQsYACAAKAIAIgAgAC0ACEH+AXEgAXI6AAgLJgAgASAAKAIAIgAoAhRHBEAgACABNgIUIAAgACgCDEEBajYCDAsLkgEBAn8jAEEQayICJAAgACgCACEAIAFDAAAAAGAEQCABIAAqAhhcBEAgACABOAIYIAAgACgCDEEBajYCDAsgAkEQaiQADwsgAkGIFDYCACMAQRBrIgMkACADIAI2AgwCQCAARQRAQbgwQdglIAIQSRoMAQsgAEEAQQVB2CUgAiAAKAIEEQ0AGgsgA0EQaiQAECQACz8AIAFB/wFxRQRAIAIgACgCACIAKAIQIgFBAXFHBEAgACABQX5xIAJyNgIQIAAgACgCDEEBajYCDAsPCxACAAsL4CYjAEGACAuBHk9ubHkgbGVhZiBub2RlcyB3aXRoIGN1c3RvbSBtZWFzdXJlIGZ1bmN0aW9ucyBzaG91bGQgbWFudWFsbHkgbWFyayB0aGVtc2VsdmVzIGFzIGRpcnR5AGlzRGlydHkAbWFya0RpcnR5AGRlc3Ryb3kAc2V0RGlzcGxheQBnZXREaXNwbGF5AHNldEZsZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABzZXRGbGV4R3JvdwBnZXRGbGV4R3JvdwBzZXRPdmVyZmxvdwBnZXRPdmVyZmxvdwBoYXNOZXdMYXlvdXQAY2FsY3VsYXRlTGF5b3V0AGdldENvbXB1dGVkTGF5b3V0AHVuc2lnbmVkIHNob3J0AGdldENoaWxkQ291bnQAdW5zaWduZWQgaW50AHNldEp1c3RpZnlDb250ZW50AGdldEp1c3RpZnlDb250ZW50AGF2YWlsYWJsZUhlaWdodCBpcyBpbmRlZmluaXRlIHNvIGhlaWdodFNpemluZ01vZGUgbXVzdCBiZSBTaXppbmdNb2RlOjpNYXhDb250ZW50AGF2YWlsYWJsZVdpZHRoIGlzIGluZGVmaW5pdGUgc28gd2lkdGhTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABzZXRBbGlnbkNvbnRlbnQAZ2V0QWxpZ25Db250ZW50AGdldFBhcmVudABpbXBsZW1lbnQAc2V0TWF4SGVpZ2h0UGVyY2VudABzZXRIZWlnaHRQZXJjZW50AHNldE1pbkhlaWdodFBlcmNlbnQAc2V0RmxleEJhc2lzUGVyY2VudABzZXRHYXBQZXJjZW50AHNldFBvc2l0aW9uUGVyY2VudABzZXRNYXJnaW5QZXJjZW50AHNldE1heFdpZHRoUGVyY2VudABzZXRXaWR0aFBlcmNlbnQAc2V0TWluV2lkdGhQZXJjZW50AHNldFBhZGRpbmdQZXJjZW50AGhhbmRsZS50eXBlKCkgPT0gU3R5bGVWYWx1ZUhhbmRsZTo6VHlwZTo6UG9pbnQgfHwgaGFuZGxlLnR5cGUoKSA9PSBTdHlsZVZhbHVlSGFuZGxlOjpUeXBlOjpQZXJjZW50AGNyZWF0ZURlZmF1bHQAdW5pdAByaWdodABoZWlnaHQAc2V0TWF4SGVpZ2h0AGdldE1heEhlaWdodABzZXRIZWlnaHQAZ2V0SGVpZ2h0AHNldE1pbkhlaWdodABnZXRNaW5IZWlnaHQAZ2V0Q29tcHV0ZWRIZWlnaHQAZ2V0Q29tcHV0ZWRSaWdodABsZWZ0AGdldENvbXB1dGVkTGVmdAByZXNldABfX2Rlc3RydWN0AGZsb2F0AHVpbnQ2NF90AHVzZVdlYkRlZmF1bHRzAHNldFVzZVdlYkRlZmF1bHRzAHNldEFsaWduSXRlbXMAZ2V0QWxpZ25JdGVtcwBzZXRGbGV4QmFzaXMAZ2V0RmxleEJhc2lzAENhbm5vdCBnZXQgbGF5b3V0IHByb3BlcnRpZXMgb2YgbXVsdGktZWRnZSBzaG9ydGhhbmRzAHNldFBvaW50U2NhbGVGYWN0b3IATWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBEaXJ0aWVkQ2FsbGJhY2tXcmFwcGVyAENhbm5vdCByZXNldCBhIG5vZGUgc3RpbGwgYXR0YWNoZWQgdG8gYSBvd25lcgBzZXRCb3JkZXIAZ2V0Qm9yZGVyAGdldENvbXB1dGVkQm9yZGVyAGdldE51bWJlcgBoYW5kbGUudHlwZSgpID09IFN0eWxlVmFsdWVIYW5kbGU6OlR5cGU6Ok51bWJlcgB1bnNpZ25lZCBjaGFyAHRvcABnZXRDb21wdXRlZFRvcABzZXRGbGV4V3JhcABnZXRGbGV4V3JhcABzZXRHYXAAZ2V0R2FwACVwAHNldEhlaWdodEF1dG8Ac2V0RmxleEJhc2lzQXV0bwBzZXRQb3NpdGlvbkF1dG8Ac2V0TWFyZ2luQXV0bwBzZXRXaWR0aEF1dG8AU2NhbGUgZmFjdG9yIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHplcm8Ac2V0QXNwZWN0UmF0aW8AZ2V0QXNwZWN0UmF0aW8Ac2V0UG9zaXRpb24AZ2V0UG9zaXRpb24Abm90aWZ5T25EZXN0cnVjdGlvbgBzZXRGbGV4RGlyZWN0aW9uAGdldEZsZXhEaXJlY3Rpb24Ac2V0RGlyZWN0aW9uAGdldERpcmVjdGlvbgBzZXRNYXJnaW4AZ2V0TWFyZ2luAGdldENvbXB1dGVkTWFyZ2luAG1hcmtMYXlvdXRTZWVuAG5hbgBib3R0b20AZ2V0Q29tcHV0ZWRCb3R0b20AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0RmxleFNocmluawBnZXRGbGV4U2hyaW5rAHNldEFsd2F5c0Zvcm1zQ29udGFpbmluZ0Jsb2NrAE1lYXN1cmVDYWxsYmFjawBEaXJ0aWVkQ2FsbGJhY2sAZ2V0TGVuZ3RoAHdpZHRoAHNldE1heFdpZHRoAGdldE1heFdpZHRoAHNldFdpZHRoAGdldFdpZHRoAHNldE1pbldpZHRoAGdldE1pbldpZHRoAGdldENvbXB1dGVkV2lkdGgAcHVzaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1NtYWxsVmFsdWVCdWZmZXIuaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1N0eWxlVmFsdWVQb29sLmgAdW5zaWduZWQgbG9uZwBzZXRCb3hTaXppbmcAZ2V0Qm94U2l6aW5nAHN0ZDo6d3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBzZXRQYWRkaW5nAGdldFBhZGRpbmcAZ2V0Q29tcHV0ZWRQYWRkaW5nAFRyaWVkIHRvIGNvbnN0cnVjdCBZR05vZGUgd2l0aCBudWxsIGNvbmZpZwBBdHRlbXB0aW5nIHRvIGNvbnN0cnVjdCBOb2RlIHdpdGggbnVsbCBjb25maWcAY3JlYXRlV2l0aENvbmZpZwBpbmYAc2V0QWxpZ25TZWxmAGdldEFsaWduU2VsZgBTaXplAHZhbHVlAFZhbHVlAGNyZWF0ZQBtZWFzdXJlAHNldFBvc2l0aW9uVHlwZQBnZXRQb3NpdGlvblR5cGUAaXNSZWZlcmVuY2VCYXNlbGluZQBzZXRJc1JlZmVyZW5jZUJhc2VsaW5lAGNvcHlTdHlsZQBkb3VibGUATm9kZQBleHRlbmQAaW5zZXJ0Q2hpbGQAZ2V0Q2hpbGQAcmVtb3ZlQ2hpbGQAdm9pZABzZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZABpc0V4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGRpcnRpZWQAQ2Fubm90IHJlc2V0IGEgbm9kZSB3aGljaCBzdGlsbCBoYXMgY2hpbGRyZW4gYXR0YWNoZWQAdW5zZXRNZWFzdXJlRnVuYwB1bnNldERpcnRpZWRGdW5jAHNldEVycmF0YQBnZXRFcnJhdGEATWVhc3VyZSBmdW5jdGlvbiByZXR1cm5lZCBhbiBpbnZhbGlkIGRpbWVuc2lvbiB0byBZb2dhOiBbd2lkdGg9JWYsIGhlaWdodD0lZl0ARXhwZWN0IGN1c3RvbSBiYXNlbGluZSBmdW5jdGlvbiB0byBub3QgcmV0dXJuIE5hTgBOQU4ASU5GAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVk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";if(!ua(H)){var va=H;H=h.locateFile?h.locateFile(va,q):q+va}function wa(){var a=H;try{if(a==H&&w)return new Uint8Array(w);if(ua(a))try{var b2=xa(a.slice(37)),c=new Uint8Array(b2.length);for(a=0;a<b2.length;++a)c[a]=b2.charCodeAt(a);var d=c}catch(f){throw Error("Converting base64 string to bytes failed.")}else d=void 0;var e=d;if(e)return e;throw"both async and sync fetching of the wasm failed"}catch(f){x(f)}}function ya(){return w||typeof fetch!="function"?Promise.resolve().then(function(){return wa()}):fetch(H,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+H+"'";return a.arrayBuffer()}).catch(function(){return wa()})}function za(a){for(;0<a.length;)a.shift()(h)}function Aa(a){if(a===void 0)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b2=a.charCodeAt(0);return 48<=b2&&57>=b2?"_"+a:a}function Ba(a,b2){return a=Aa(a),function(){return b2.apply(this,arguments)}}var J=[{},{value:void 0},{value:null},{value:!0},{value:!1}],Ca=[];function Da(a){var b2=Error,c=Ba(a,function(d){this.name=a,this.message=d,d=Error(d).stack,d!==void 0&&(this.stack=this.toString()+`
|
|
2378
|
-
`+d.replace(/^Error(:[^\n]*)?\n/,""))});return c.prototype=Object.create(b2.prototype),c.prototype.constructor=c,c.prototype.toString=function(){return this.message===void 0?this.name:this.name+": "+this.message},c}var K=void 0;function L(a){throw new K(a)}var M=(a)=>{return a||L("Cannot use deleted val. handle = "+a),J[a].value},Ea=(a)=>{switch(a){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var b2=Ca.length?Ca.pop():J.length;return J[b2]={ga:1,value:a},b2}},Fa=void 0,Ga=void 0;function N(a){for(var b2="";A[a];)b2+=Ga[A[a++]];return b2}var O=[];function Ha(){for(;O.length;){var a=O.pop();a.M.$=!1,a.delete()}}var P=void 0,Q={};function Ia(a,b2){for(b2===void 0&&L("ptr should not be undefined");a.R;)b2=a.ba(b2),a=a.R;return b2}var R={};function Ja(a){a=Ka(a);var b2=N(a);return S(a),b2}function La(a,b2){var c=R[a];return c===void 0&&L(b2+" has unknown type "+Ja(a)),c}function Ma(){}var Na=!1;function Oa(a){--a.count.value,a.count.value===0&&(a.T?a.U.W(a.T):a.P.N.W(a.O))}function Pa(a,b2,c){if(b2===c)return a;if(c.R===void 0)return null;return a=Pa(a,b2,c.R),a===null?null:c.na(a)}var Qa={};function Ra(a,b2){return b2=Ia(a,b2),Q[b2]}var Sa=void 0;function Ta(a){throw new Sa(a)}function Ua(a,b2){return b2.P&&b2.O||Ta("makeClassHandle requires ptr and ptrType"),!!b2.U!==!!b2.T&&Ta("Both smartPtrType and smartPtr must be specified"),b2.count={value:1},T(Object.create(a,{M:{value:b2}}))}function T(a){if(typeof FinalizationRegistry>"u")return T=(b2)=>b2,a;return Na=new FinalizationRegistry((b2)=>{Oa(b2.M)}),T=(b2)=>{var c=b2.M;return c.T&&Na.register(b2,{M:c},b2),b2},Ma=(b2)=>{Na.unregister(b2)},T(a)}var Va={};function Wa(a){for(;a.length;){var b2=a.pop();a.pop()(b2)}}function Xa(a){return this.fromWireType(D[a>>2])}var U={},Ya={};function V(a,b2,c){function d(k){k=c(k),k.length!==a.length&&Ta("Mismatched type converter count");for(var m=0;m<a.length;++m)W(a[m],k[m])}a.forEach(function(k){Ya[k]=b2});var e=Array(b2.length),f=[],g=0;b2.forEach((k,m)=>{R.hasOwnProperty(k)?e[m]=R[k]:(f.push(k),U.hasOwnProperty(k)||(U[k]=[]),U[k].push(()=>{e[m]=R[k],++g,g===f.length&&d(e)}))}),f.length===0&&d(e)}function Za(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw TypeError("Unknown type size: "+a)}}function W(a,b2,c={}){if(!("argPackAdvance"in b2))throw TypeError("registerType registeredInstance requires argPackAdvance");var d=b2.name;if(a||L('type "'+d+'" must have a positive integer typeid pointer'),R.hasOwnProperty(a)){if(c.ua)return;L("Cannot register type '"+d+"' twice")}R[a]=b2,delete Ya[a],U.hasOwnProperty(a)&&(b2=U[a],delete U[a],b2.forEach((e)=>e()))}function $a(a){L(a.M.P.N.name+" instance already deleted")}function X(){}function ab(a,b2,c){if(a[b2].S===void 0){var d=a[b2];a[b2]=function(){return a[b2].S.hasOwnProperty(arguments.length)||L("Function '"+c+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+a[b2].S+")!"),a[b2].S[arguments.length].apply(this,arguments)},a[b2].S=[],a[b2].S[d.Z]=d}}function bb(a,b2){h.hasOwnProperty(a)?(L("Cannot register public name '"+a+"' twice"),ab(h,a,a),h.hasOwnProperty(void 0)&&L("Cannot register multiple overloads of a function with the same number of arguments (undefined)!"),h[a].S[void 0]=b2):h[a]=b2}function cb(a,b2,c,d,e,f,g,k){this.name=a,this.constructor=b2,this.X=c,this.W=d,this.R=e,this.pa=f,this.ba=g,this.na=k,this.ja=[]}function db(a,b2,c){for(;b2!==c;)b2.ba||L("Expected null or instance of "+c.name+", got an instance of "+b2.name),a=b2.ba(a),b2=b2.R;return a}function eb(a,b2){if(b2===null)return this.ea&&L("null is not a valid "+this.name),0;return b2.M||L('Cannot pass "'+fb(b2)+'" as a '+this.name),b2.M.O||L("Cannot pass deleted object as a pointer of type "+this.name),db(b2.M.O,b2.M.P.N,this.N)}function gb(a,b2){if(b2===null){if(this.ea&&L("null is not a valid "+this.name),this.da){var c=this.fa();return a!==null&&a.push(this.W,c),c}return 0}if(b2.M||L('Cannot pass "'+fb(b2)+'" as a '+this.name),b2.M.O||L("Cannot pass deleted object as a pointer of type "+this.name),!this.ca&&b2.M.P.ca&&L("Cannot convert argument of type "+(b2.M.U?b2.M.U.name:b2.M.P.name)+" to parameter type "+this.name),c=db(b2.M.O,b2.M.P.N,this.N),this.da)switch(b2.M.T===void 0&&L("Passing raw pointer to smart pointer is illegal"),this.Ba){case 0:b2.M.U===this?c=b2.M.T:L("Cannot convert argument of type "+(b2.M.U?b2.M.U.name:b2.M.P.name)+" to parameter type "+this.name);break;case 1:c=b2.M.T;break;case 2:if(b2.M.U===this)c=b2.M.T;else{var d=b2.clone();c=this.xa(c,Ea(function(){d.delete()})),a!==null&&a.push(this.W,c)}break;default:L("Unsupporting sharing policy")}return c}function hb(a,b2){if(b2===null)return this.ea&&L("null is not a valid "+this.name),0;return b2.M||L('Cannot pass "'+fb(b2)+'" as a '+this.name),b2.M.O||L("Cannot pass deleted object as a pointer of type "+this.name),b2.M.P.ca&&L("Cannot convert argument of type "+b2.M.P.name+" to parameter type "+this.name),db(b2.M.O,b2.M.P.N,this.N)}function Y(a,b2,c,d){this.name=a,this.N=b2,this.ea=c,this.ca=d,this.da=!1,this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0,b2.R!==void 0?this.toWireType=gb:(this.toWireType=d?eb:hb,this.V=null)}function ib(a,b2){h.hasOwnProperty(a)||Ta("Replacing nonexistant public symbol"),h[a]=b2,h[a].Z=void 0}function jb(a,b2){var c=[];return function(){if(c.length=0,Object.assign(c,arguments),a.includes("j")){var d=h["dynCall_"+a];d=c&&c.length?d.apply(null,[b2].concat(c)):d.call(null,b2)}else d=oa.get(b2).apply(null,c);return d}}function Z(a,b2){a=N(a);var c=a.includes("j")?jb(a,b2):oa.get(b2);return typeof c!="function"&&L("unknown function pointer with signature "+a+": "+b2),c}var mb=void 0;function nb(a,b2){function c(f){e[f]||R[f]||(Ya[f]?Ya[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};throw b2.forEach(c),new mb(a+": "+d.map(Ja).join([", "]))}function ob(a,b2,c,d,e){var f=b2.length;2>f&&L("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=b2[1]!==null&&c!==null,k=!1;for(c=1;c<b2.length;++c)if(b2[c]!==null&&b2[c].V===void 0){k=!0;break}var m=b2[0].name!=="void",l=f-2,n=Array(l),p=[],r=[];return function(){if(arguments.length!==l&&L("function "+a+" called with "+arguments.length+" arguments, expected "+l+" args!"),r.length=0,p.length=g?2:1,p[0]=e,g){var u=b2[1].toWireType(r,this);p[1]=u}for(var t=0;t<l;++t)n[t]=b2[t+2].toWireType(r,arguments[t]),p.push(n[t]);if(t=d.apply(null,p),k)Wa(r);else for(var y=g?1:2;y<b2.length;y++){var B=y===1?u:n[y-2];b2[y].V!==null&&b2[y].V(B)}return u=m?b2[0].fromWireType(t):void 0,u}}function pb(a,b2){for(var c=[],d=0;d<a;d++)c.push(E[b2+4*d>>2]);return c}function qb(a){4<a&&--J[a].ga===0&&(J[a]=void 0,Ca.push(a))}function fb(a){if(a===null)return"null";var b2=typeof a;return b2==="object"||b2==="array"||b2==="function"?a.toString():""+a}function rb(a,b2){switch(b2){case 2:return function(c){return this.fromWireType(la[c>>2])};case 3:return function(c){return this.fromWireType(ma[c>>3])};default:throw TypeError("Unknown float type: "+a)}}function sb(a,b2,c){switch(b2){case 0:return c?function(d){return ja[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ka[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw TypeError("Unknown integer type: "+a)}}function tb(a,b2){for(var c="",d=0;!(d>=b2/2);++d){var e=C[a+2*d>>1];if(e==0)break;c+=String.fromCharCode(e)}return c}function ub(a,b2,c){if(c===void 0&&(c=2147483647),2>c)return 0;c-=2;var d=b2;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b2>>1]=a.charCodeAt(e),b2+=2;return C[b2>>1]=0,b2-d}function vb(a){return 2*a.length}function wb(a,b2){for(var c=0,d="";!(c>=b2/4);){var e=D[a+4*c>>2];if(e==0)break;++c,65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}function xb(a,b2,c){if(c===void 0&&(c=2147483647),4>c)return 0;var d=b2;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}if(D[b2>>2]=f,b2+=4,b2+4>c)break}return D[b2>>2]=0,b2-d}function yb(a){for(var b2=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c,b2+=4}return b2}var zb={};function Ab(a){var b2=zb[a];return b2===void 0?N(a):b2}var Bb=[];function Cb(a){var b2=Bb.length;return Bb.push(a),b2}function Db(a,b2){for(var c=Array(a),d=0;d<a;++d)c[d]=La(E[b2+4*d>>2],"parameter "+d);return c}var Eb=[],Fb=[null,[],[]];K=h.BindingError=Da("BindingError"),h.count_emval_handles=function(){for(var a=0,b2=5;b2<J.length;++b2)J[b2]!==void 0&&++a;return a},h.get_first_emval=function(){for(var a=5;a<J.length;++a)if(J[a]!==void 0)return J[a];return null},Fa=h.PureVirtualError=Da("PureVirtualError");for(var Gb=Array(256),Hb=0;256>Hb;++Hb)Gb[Hb]=String.fromCharCode(Hb);Ga=Gb,h.getInheritedInstanceCount=function(){return Object.keys(Q).length},h.getLiveInheritedInstances=function(){var a=[],b2;for(b2 in Q)Q.hasOwnProperty(b2)&&a.push(Q[b2]);return a},h.flushPendingDeletes=Ha,h.setDelayFunction=function(a){P=a,O.length&&P&&P(Ha)},Sa=h.InternalError=Da("InternalError"),X.prototype.isAliasOf=function(a){if(!(this instanceof X&&a instanceof X))return!1;var b2=this.M.P.N,c=this.M.O,d=a.M.P.N;for(a=a.M.O;b2.R;)c=b2.ba(c),b2=b2.R;for(;d.R;)a=d.ba(a),d=d.R;return b2===d&&c===a},X.prototype.clone=function(){if(this.M.O||$a(this),this.M.aa)return this.M.count.value+=1,this;var a=T,b2=Object,c=b2.create,d=Object.getPrototypeOf(this),e=this.M;return a=a(c.call(b2,d,{M:{value:{count:e.count,$:e.$,aa:e.aa,O:e.O,P:e.P,T:e.T,U:e.U}}})),a.M.count.value+=1,a.M.$=!1,a},X.prototype.delete=function(){this.M.O||$a(this),this.M.$&&!this.M.aa&&L("Object already scheduled for deletion"),Ma(this),Oa(this.M),this.M.aa||(this.M.T=void 0,this.M.O=void 0)},X.prototype.isDeleted=function(){return!this.M.O},X.prototype.deleteLater=function(){return this.M.O||$a(this),this.M.$&&!this.M.aa&&L("Object already scheduled for deletion"),O.push(this),O.length===1&&P&&P(Ha),this.M.$=!0,this},Y.prototype.qa=function(a){return this.ka&&(a=this.ka(a)),a},Y.prototype.ha=function(a){this.W&&this.W(a)},Y.prototype.argPackAdvance=8,Y.prototype.readValueFromPointer=Xa,Y.prototype.deleteObject=function(a){if(a!==null)a.delete()},Y.prototype.fromWireType=function(a){function b2(){return this.da?Ua(this.N.X,{P:this.wa,O:c,U:this,T:a}):Ua(this.N.X,{P:this,O:a})}var c=this.qa(a);if(!c)return this.ha(a),null;var d=Ra(this.N,c);if(d!==void 0){if(d.M.count.value===0)return d.M.O=c,d.M.T=a,d.clone();return d=d.clone(),this.ha(a),d}if(d=this.N.pa(c),d=Qa[d],!d)return b2.call(this);d=this.ca?d.la:d.pointerType;var e=Pa(c,this.N,d.N);return e===null?b2.call(this):this.da?Ua(d.N.X,{P:d,O:e,U:this,T:a}):Ua(d.N.X,{P:d,O:e})},mb=h.UnboundTypeError=Da("UnboundTypeError");var xa=typeof atob=="function"?atob:function(a){var b2="",c=0;a=a.replace(/[^A-Za-z0-9\+\/=]/g,"");do{var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++)),e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++)),f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++)),g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));d=d<<2|e>>4,e=(e&15)<<4|f>>2;var k=(f&3)<<6|g;b2+=String.fromCharCode(d),f!==64&&(b2+=String.fromCharCode(e)),g!==64&&(b2+=String.fromCharCode(k))}while(c<a.length);return b2},Jb={l:function(a,b2,c,d){x("Assertion failed: "+(a?z(A,a):"")+", at: "+[b2?b2?z(A,b2):"":"unknown filename",c,d?d?z(A,d):"":"unknown function"])},q:function(a,b2,c){a=N(a),b2=La(b2,"wrapper"),c=M(c);var d=[].slice,e=b2.N,f=e.X,g=e.R.X,k=e.R.constructor;a=Ba(a,function(){e.R.ja.forEach(function(l){if(this[l]===g[l])throw new Fa("Pure virtual function "+l+" must be implemented in JavaScript")}.bind(this)),Object.defineProperty(this,"__parent",{value:f}),this.__construct.apply(this,d.call(arguments))}),f.__construct=function(){this===f&&L("Pass correct 'this' to __construct");var l=k.implement.apply(void 0,[this].concat(d.call(arguments)));Ma(l);var n=l.M;l.notifyOnDestruction(),n.aa=!0,Object.defineProperties(this,{M:{value:n}}),T(this),l=n.O,l=Ia(e,l),Q.hasOwnProperty(l)?L("Tried to register registered instance: "+l):Q[l]=this},f.__destruct=function(){this===f&&L("Pass correct 'this' to __destruct"),Ma(this);var l=this.M.O;l=Ia(e,l),Q.hasOwnProperty(l)?delete Q[l]:L("Tried to unregister unregistered instance: "+l)},a.prototype=Object.create(f);for(var m in c)a.prototype[m]=c[m];return Ea(a)},j:function(a){var b2=Va[a];delete Va[a];var{fa:c,W:d,ia:e}=b2,f=e.map((g)=>g.ta).concat(e.map((g)=>g.za));V([a],f,(g)=>{var k={};return e.forEach((m,l)=>{var n=g[l],p=m.ra,r=m.sa,u=g[l+e.length],t=m.ya,y=m.Aa;k[m.oa]={read:(B)=>n.fromWireType(p(r,B)),write:(B,ba)=>{var I=[];t(y,B,u.toWireType(I,ba)),Wa(I)}}}),[{name:b2.name,fromWireType:function(m){var l={},n;for(n in k)l[n]=k[n].read(m);return d(m),l},toWireType:function(m,l){for(var n in k)if(!(n in l))throw TypeError('Missing field: "'+n+'"');var p=c();for(n in k)k[n].write(p,l[n]);return m!==null&&m.push(d,p),p},argPackAdvance:8,readValueFromPointer:Xa,V:d}]})},v:function(){},B:function(a,b2,c,d,e){var f=Za(c);b2=N(b2),W(a,{name:b2,fromWireType:function(g){return!!g},toWireType:function(g,k){return k?d:e},argPackAdvance:8,readValueFromPointer:function(g){if(c===1)var k=ja;else if(c===2)k=C;else if(c===4)k=D;else throw TypeError("Unknown boolean type size: "+b2);return this.fromWireType(k[g>>f])},V:null})},f:function(a,b2,c,d,e,f,g,k,m,l,n,p,r){n=N(n),f=Z(e,f),k&&(k=Z(g,k)),l&&(l=Z(m,l)),r=Z(p,r);var u=Aa(n);bb(u,function(){nb("Cannot construct "+n+" due to unbound types",[d])}),V([a,b2,c],d?[d]:[],function(t){if(t=t[0],d)var y=t.N,B=y.X;else B=X.prototype;t=Ba(u,function(){if(Object.getPrototypeOf(this)!==ba)throw new K("Use 'new' to construct "+n);if(I.Y===void 0)throw new K(n+" has no accessible constructor");var kb=I.Y[arguments.length];if(kb===void 0)throw new K("Tried to invoke ctor of "+n+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(I.Y).toString()+") parameters instead!");return kb.apply(this,arguments)});var ba=Object.create(B,{constructor:{value:t}});t.prototype=ba;var I=new cb(n,t,ba,r,y,f,k,l);y=new Y(n,I,!0,!1),B=new Y(n+"*",I,!1,!1);var lb=new Y(n+" const*",I,!1,!0);return Qa[a]={pointerType:B,la:lb},ib(u,t),[y,B,lb]})},d:function(a,b2,c,d,e,f,g){var k=pb(c,d);b2=N(b2),f=Z(e,f),V([],[a],function(m){function l(){nb("Cannot call "+n+" due to unbound types",k)}m=m[0];var n=m.name+"."+b2;b2.startsWith("@@")&&(b2=Symbol[b2.substring(2)]);var p=m.N.constructor;return p[b2]===void 0?(l.Z=c-1,p[b2]=l):(ab(p,b2,n),p[b2].S[c-1]=l),V([],k,function(r){return r=ob(n,[r[0],null].concat(r.slice(1)),null,f,g),p[b2].S===void 0?(r.Z=c-1,p[b2]=r):p[b2].S[c-1]=r,[]}),[]})},p:function(a,b2,c,d,e,f){0<b2||x();var g=pb(b2,c);e=Z(d,e),V([],[a],function(k){k=k[0];var m="constructor "+k.name;if(k.N.Y===void 0&&(k.N.Y=[]),k.N.Y[b2-1]!==void 0)throw new K("Cannot register multiple constructors with identical number of parameters ("+(b2-1)+") for class '"+k.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");return k.N.Y[b2-1]=()=>{nb("Cannot construct "+k.name+" due to unbound types",g)},V([],g,function(l){return l.splice(1,0,null),k.N.Y[b2-1]=ob(m,l,null,e,f),[]}),[]})},a:function(a,b2,c,d,e,f,g,k){var m=pb(c,d);b2=N(b2),f=Z(e,f),V([],[a],function(l){function n(){nb("Cannot call "+p+" due to unbound types",m)}l=l[0];var p=l.name+"."+b2;b2.startsWith("@@")&&(b2=Symbol[b2.substring(2)]),k&&l.N.ja.push(b2);var r=l.N.X,u=r[b2];return u===void 0||u.S===void 0&&u.className!==l.name&&u.Z===c-2?(n.Z=c-2,n.className=l.name,r[b2]=n):(ab(r,b2,p),r[b2].S[c-2]=n),V([],m,function(t){return t=ob(p,t,l,f,g),r[b2].S===void 0?(t.Z=c-2,r[b2]=t):r[b2].S[c-2]=t,[]}),[]})},A:function(a,b2){b2=N(b2),W(a,{name:b2,fromWireType:function(c){var d=M(c);return qb(c),d},toWireType:function(c,d){return Ea(d)},argPackAdvance:8,readValueFromPointer:Xa,V:null})},n:function(a,b2,c){c=Za(c),b2=N(b2),W(a,{name:b2,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:rb(b2,c),V:null})},e:function(a,b2,c,d,e){b2=N(b2),e===-1&&(e=4294967295),e=Za(c);var f=(k)=>k;if(d===0){var g=32-8*c;f=(k)=>k<<g>>>g}c=b2.includes("unsigned")?function(k,m){return m>>>0}:function(k,m){return m},W(a,{name:b2,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:sb(b2,e,d!==0),V:null})},b:function(a,b2,c){function d(f){f>>=2;var g=E;return new e(ia,g[f+1],g[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b2];c=N(c),W(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0})},o:function(a,b2){b2=N(b2);var c=b2==="std::string";W(a,{name:b2,fromWireType:function(d){var e=E[d>>2],f=d+4;if(c)for(var g=f,k=0;k<=e;++k){var m=f+k;if(k==e||A[m]==0){if(g=g?z(A,g,m-g):"",l===void 0)var l=g;else l+=String.fromCharCode(0),l+=g;g=m+1}}else{l=Array(e);for(k=0;k<e;++k)l[k]=String.fromCharCode(A[f+k]);l=l.join("")}return S(d),l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f,g=typeof e=="string";if(g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||L("Cannot pass non-string to std::string"),c&&g){var k=0;for(f=0;f<e.length;++f){var m=e.charCodeAt(f);127>=m?k++:2047>=m?k+=2:55296<=m&&57343>=m?(k+=4,++f):k+=3}f=k}else f=e.length;if(k=Ib(4+f+1),m=k+4,E[k>>2]=f,c&&g){if(g=m,m=f+1,f=A,0<m){m=g+m-1;for(var l=0;l<e.length;++l){var n=e.charCodeAt(l);if(55296<=n&&57343>=n){var p=e.charCodeAt(++l);n=65536+((n&1023)<<10)|p&1023}if(127>=n){if(g>=m)break;f[g++]=n}else{if(2047>=n){if(g+1>=m)break;f[g++]=192|n>>6}else{if(65535>=n){if(g+2>=m)break;f[g++]=224|n>>12}else{if(g+3>=m)break;f[g++]=240|n>>18,f[g++]=128|n>>12&63}f[g++]=128|n>>6&63}f[g++]=128|n&63}}f[g]=0}}else if(g)for(g=0;g<f;++g)l=e.charCodeAt(g),255<l&&(S(m),L("String has UTF-16 code units that do not fit in 8 bits")),A[m+g]=l;else for(g=0;g<f;++g)A[m+g]=e[g];return d!==null&&d.push(S,k),k},argPackAdvance:8,readValueFromPointer:Xa,V:function(d){S(d)}})},i:function(a,b2,c){if(c=N(c),b2===2)var d=tb,e=ub,f=vb,g=()=>ka,k=1;else b2===4&&(d=wb,e=xb,f=yb,g=()=>E,k=2);W(a,{name:c,fromWireType:function(m){for(var l=E[m>>2],n=g(),p,r=m+4,u=0;u<=l;++u){var t=m+4+u*b2;if(u==l||n[t>>k]==0)r=d(r,t-r),p===void 0?p=r:(p+=String.fromCharCode(0),p+=r),r=t+b2}return S(m),p},toWireType:function(m,l){typeof l!="string"&&L("Cannot pass non-string to C++ string type "+c);var n=f(l),p=Ib(4+n+b2);return E[p>>2]=n>>k,e(l,p+4,n+b2),m!==null&&m.push(S,p),p},argPackAdvance:8,readValueFromPointer:Xa,V:function(m){S(m)}})},k:function(a,b2,c,d,e,f){Va[a]={name:N(b2),fa:Z(c,d),W:Z(e,f),ia:[]}},h:function(a,b2,c,d,e,f,g,k,m,l){Va[a].ia.push({oa:N(b2),ta:c,ra:Z(d,e),sa:f,za:g,ya:Z(k,m),Aa:l})},C:function(a,b2){b2=N(b2),W(a,{va:!0,name:b2,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},s:function(a,b2,c,d,e){a=Bb[a],b2=M(b2),c=Ab(c);var f=[];return E[d>>2]=Ea(f),a(b2,c,f,e)},t:function(a,b2,c,d){a=Bb[a],b2=M(b2),c=Ab(c),a(b2,c,null,d)},g:qb,m:function(a,b2){var c=Db(a,b2),d=c[0];b2=d.name+"_$"+c.slice(1).map(function(g){return g.name}).join("_")+"$";var e=Eb[b2];if(e!==void 0)return e;var f=Array(a-1);return e=Cb((g,k,m,l)=>{for(var n=0,p=0;p<a-1;++p)f[p]=c[p+1].readValueFromPointer(l+n),n+=c[p+1].argPackAdvance;g=g[k].apply(g,f);for(p=0;p<a-1;++p)c[p+1].ma&&c[p+1].ma(f[p]);if(!d.va)return d.toWireType(m,g)}),Eb[b2]=e},D:function(a){4<a&&(J[a].ga+=1)},r:function(a){var b2=M(a);Wa(b2),qb(a)},c:function(){x("")},x:function(a,b2,c){A.copyWithin(a,b2,b2+c)},w:function(a){var b2=A.length;if(a>>>=0,2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b2*(1+0.2/c);d=Math.min(d,a+100663296);var e=Math;d=Math.max(a,d),e=e.min.call(e,2147483648,d+(65536-d%65536)%65536);a:{try{fa.grow(e-ia.byteLength+65535>>>16),na();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(a,b2,c,d){for(var e=0,f=0;f<c;f++){var g=E[b2>>2],k=E[b2+4>>2];b2+=8;for(var m=0;m<k;m++){var l=A[g+m],n=Fb[a];l===0||l===10?((a===1?ea:v)(z(n,0)),n.length=0):n.push(l)}e+=k}return E[d>>2]=e,0}};(function(){function a(e){h.asm=e.exports,fa=h.asm.E,na(),oa=h.asm.J,qa.unshift(h.asm.F),F--,h.monitorRunDependencies&&h.monitorRunDependencies(F),F==0&&(ta!==null&&(clearInterval(ta),ta=null),G&&(e=G,G=null,e()))}function b2(e){a(e.instance)}function c(e){return ya().then(function(f){return WebAssembly.instantiate(f,d)}).then(function(f){return f}).then(e,function(f){v("failed to asynchronously prepare wasm: "+f),x(f)})}var d={a:Jb};if(F++,h.monitorRunDependencies&&h.monitorRunDependencies(F),h.instantiateWasm)try{return h.instantiateWasm(d,a)}catch(e){v("Module.instantiateWasm callback failed with error: "+e),ca(e)}return function(){return w||typeof WebAssembly.instantiateStreaming!="function"||ua(H)||typeof fetch!="function"?c(b2):fetch(H,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b2,function(f){return v("wasm streaming compile failed: "+f),v("falling back to ArrayBuffer instantiation"),c(b2)})})}().catch(ca),{}})(),h.___wasm_call_ctors=function(){return(h.___wasm_call_ctors=h.asm.F).apply(null,arguments)};var Ka=h.___getTypeName=function(){return(Ka=h.___getTypeName=h.asm.G).apply(null,arguments)};h.__embind_initialize_bindings=function(){return(h.__embind_initialize_bindings=h.asm.H).apply(null,arguments)};var Ib=h._malloc=function(){return(Ib=h._malloc=h.asm.I).apply(null,arguments)},S=h._free=function(){return(S=h._free=h.asm.K).apply(null,arguments)};h.dynCall_jiji=function(){return(h.dynCall_jiji=h.asm.L).apply(null,arguments)};var Kb;G=function Lb(){Kb||Mb(),Kb||(G=Lb)};function Mb(){function a(){if(!Kb&&(Kb=!0,h.calledRun=!0,!ha)){if(za(qa),aa(h),h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for(typeof h.postRun=="function"&&(h.postRun=[h.postRun]);h.postRun.length;){var b2=h.postRun.shift();ra.unshift(b2)}za(ra)}}if(!(0<F)){if(h.preRun)for(typeof h.preRun=="function"&&(h.preRun=[h.preRun]);h.preRun.length;)sa();za(pa),0<F||(h.setStatus?(h.setStatus("Running..."),setTimeout(function(){setTimeout(function(){h.setStatus("")},1),a()},1)):a())}}if(h.preInit)for(typeof h.preInit=="function"&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();return Mb(),loadYoga2.ready}})(),yoga_wasm_base64_esm_default=loadYoga,Align=function(Align2){return Align2[Align2.Auto=0]="Auto",Align2[Align2.FlexStart=1]="FlexStart",Align2[Align2.Center=2]="Center",Align2[Align2.FlexEnd=3]="FlexEnd",Align2[Align2.Stretch=4]="Stretch",Align2[Align2.Baseline=5]="Baseline",Align2[Align2.SpaceBetween=6]="SpaceBetween",Align2[Align2.SpaceAround=7]="SpaceAround",Align2[Align2.SpaceEvenly=8]="SpaceEvenly",Align2}({}),BoxSizing=function(BoxSizing2){return BoxSizing2[BoxSizing2.BorderBox=0]="BorderBox",BoxSizing2[BoxSizing2.ContentBox=1]="ContentBox",BoxSizing2}({}),Dimension=function(Dimension2){return Dimension2[Dimension2.Width=0]="Width",Dimension2[Dimension2.Height=1]="Height",Dimension2}({}),Direction=function(Direction2){return Direction2[Direction2.Inherit=0]="Inherit",Direction2[Direction2.LTR=1]="LTR",Direction2[Direction2.RTL=2]="RTL",Direction2}({}),Display=function(Display2){return Display2[Display2.Flex=0]="Flex",Display2[Display2.None=1]="None",Display2[Display2.Contents=2]="Contents",Display2}({}),Edge=function(Edge2){return Edge2[Edge2.Left=0]="Left",Edge2[Edge2.Top=1]="Top",Edge2[Edge2.Right=2]="Right",Edge2[Edge2.Bottom=3]="Bottom",Edge2[Edge2.Start=4]="Start",Edge2[Edge2.End=5]="End",Edge2[Edge2.Horizontal=6]="Horizontal",Edge2[Edge2.Vertical=7]="Vertical",Edge2[Edge2.All=8]="All",Edge2}({}),Errata=function(Errata2){return Errata2[Errata2.None=0]="None",Errata2[Errata2.StretchFlexBasis=1]="StretchFlexBasis",Errata2[Errata2.AbsolutePositionWithoutInsetsExcludesPadding=2]="AbsolutePositionWithoutInsetsExcludesPadding",Errata2[Errata2.AbsolutePercentAgainstInnerSize=4]="AbsolutePercentAgainstInnerSize",Errata2[Errata2.All=2147483647]="All",Errata2[Errata2.Classic=2147483646]="Classic",Errata2}({}),ExperimentalFeature=function(ExperimentalFeature2){return ExperimentalFeature2[ExperimentalFeature2.WebFlexBasis=0]="WebFlexBasis",ExperimentalFeature2}({}),FlexDirection=function(FlexDirection2){return FlexDirection2[FlexDirection2.Column=0]="Column",FlexDirection2[FlexDirection2.ColumnReverse=1]="ColumnReverse",FlexDirection2[FlexDirection2.Row=2]="Row",FlexDirection2[FlexDirection2.RowReverse=3]="RowReverse",FlexDirection2}({}),Gutter=function(Gutter2){return Gutter2[Gutter2.Column=0]="Column",Gutter2[Gutter2.Row=1]="Row",Gutter2[Gutter2.All=2]="All",Gutter2}({}),Justify=function(Justify2){return Justify2[Justify2.FlexStart=0]="FlexStart",Justify2[Justify2.Center=1]="Center",Justify2[Justify2.FlexEnd=2]="FlexEnd",Justify2[Justify2.SpaceBetween=3]="SpaceBetween",Justify2[Justify2.SpaceAround=4]="SpaceAround",Justify2[Justify2.SpaceEvenly=5]="SpaceEvenly",Justify2}({}),LogLevel=function(LogLevel2){return LogLevel2[LogLevel2.Error=0]="Error",LogLevel2[LogLevel2.Warn=1]="Warn",LogLevel2[LogLevel2.Info=2]="Info",LogLevel2[LogLevel2.Debug=3]="Debug",LogLevel2[LogLevel2.Verbose=4]="Verbose",LogLevel2[LogLevel2.Fatal=5]="Fatal",LogLevel2}({}),MeasureMode=function(MeasureMode2){return MeasureMode2[MeasureMode2.Undefined=0]="Undefined",MeasureMode2[MeasureMode2.Exactly=1]="Exactly",MeasureMode2[MeasureMode2.AtMost=2]="AtMost",MeasureMode2}({}),NodeType=function(NodeType2){return NodeType2[NodeType2.Default=0]="Default",NodeType2[NodeType2.Text=1]="Text",NodeType2}({}),Overflow=function(Overflow2){return Overflow2[Overflow2.Visible=0]="Visible",Overflow2[Overflow2.Hidden=1]="Hidden",Overflow2[Overflow2.Scroll=2]="Scroll",Overflow2}({}),PositionType=function(PositionType2){return PositionType2[PositionType2.Static=0]="Static",PositionType2[PositionType2.Relative=1]="Relative",PositionType2[PositionType2.Absolute=2]="Absolute",PositionType2}({}),Unit=function(Unit2){return Unit2[Unit2.Undefined=0]="Undefined",Unit2[Unit2.Point=1]="Point",Unit2[Unit2.Percent=2]="Percent",Unit2[Unit2.Auto=3]="Auto",Unit2}({}),Wrap=function(Wrap2){return Wrap2[Wrap2.NoWrap=0]="NoWrap",Wrap2[Wrap2.Wrap=1]="Wrap",Wrap2[Wrap2.WrapReverse=2]="WrapReverse",Wrap2}({}),constants={ALIGN_AUTO:Align.Auto,ALIGN_FLEX_START:Align.FlexStart,ALIGN_CENTER:Align.Center,ALIGN_FLEX_END:Align.FlexEnd,ALIGN_STRETCH:Align.Stretch,ALIGN_BASELINE:Align.Baseline,ALIGN_SPACE_BETWEEN:Align.SpaceBetween,ALIGN_SPACE_AROUND:Align.SpaceAround,ALIGN_SPACE_EVENLY:Align.SpaceEvenly,BOX_SIZING_BORDER_BOX:BoxSizing.BorderBox,BOX_SIZING_CONTENT_BOX:BoxSizing.ContentBox,DIMENSION_WIDTH:Dimension.Width,DIMENSION_HEIGHT:Dimension.Height,DIRECTION_INHERIT:Direction.Inherit,DIRECTION_LTR:Direction.LTR,DIRECTION_RTL:Direction.RTL,DISPLAY_FLEX:Display.Flex,DISPLAY_NONE:Display.None,DISPLAY_CONTENTS:Display.Contents,EDGE_LEFT:Edge.Left,EDGE_TOP:Edge.Top,EDGE_RIGHT:Edge.Right,EDGE_BOTTOM:Edge.Bottom,EDGE_START:Edge.Start,EDGE_END:Edge.End,EDGE_HORIZONTAL:Edge.Horizontal,EDGE_VERTICAL:Edge.Vertical,EDGE_ALL:Edge.All,ERRATA_NONE:Errata.None,ERRATA_STRETCH_FLEX_BASIS:Errata.StretchFlexBasis,ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING:Errata.AbsolutePositionWithoutInsetsExcludesPadding,ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE:Errata.AbsolutePercentAgainstInnerSize,ERRATA_ALL:Errata.All,ERRATA_CLASSIC:Errata.Classic,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:ExperimentalFeature.WebFlexBasis,FLEX_DIRECTION_COLUMN:FlexDirection.Column,FLEX_DIRECTION_COLUMN_REVERSE:FlexDirection.ColumnReverse,FLEX_DIRECTION_ROW:FlexDirection.Row,FLEX_DIRECTION_ROW_REVERSE:FlexDirection.RowReverse,GUTTER_COLUMN:Gutter.Column,GUTTER_ROW:Gutter.Row,GUTTER_ALL:Gutter.All,JUSTIFY_FLEX_START:Justify.FlexStart,JUSTIFY_CENTER:Justify.Center,JUSTIFY_FLEX_END:Justify.FlexEnd,JUSTIFY_SPACE_BETWEEN:Justify.SpaceBetween,JUSTIFY_SPACE_AROUND:Justify.SpaceAround,JUSTIFY_SPACE_EVENLY:Justify.SpaceEvenly,LOG_LEVEL_ERROR:LogLevel.Error,LOG_LEVEL_WARN:LogLevel.Warn,LOG_LEVEL_INFO:LogLevel.Info,LOG_LEVEL_DEBUG:LogLevel.Debug,LOG_LEVEL_VERBOSE:LogLevel.Verbose,LOG_LEVEL_FATAL:LogLevel.Fatal,MEASURE_MODE_UNDEFINED:MeasureMode.Undefined,MEASURE_MODE_EXACTLY:MeasureMode.Exactly,MEASURE_MODE_AT_MOST:MeasureMode.AtMost,NODE_TYPE_DEFAULT:NodeType.Default,NODE_TYPE_TEXT:NodeType.Text,OVERFLOW_VISIBLE:Overflow.Visible,OVERFLOW_HIDDEN:Overflow.Hidden,OVERFLOW_SCROLL:Overflow.Scroll,POSITION_TYPE_STATIC:PositionType.Static,POSITION_TYPE_RELATIVE:PositionType.Relative,POSITION_TYPE_ABSOLUTE:PositionType.Absolute,UNIT_UNDEFINED:Unit.Undefined,UNIT_POINT:Unit.Point,UNIT_PERCENT:Unit.Percent,UNIT_AUTO:Unit.Auto,WRAP_NO_WRAP:Wrap.NoWrap,WRAP_WRAP:Wrap.Wrap,WRAP_WRAP_REVERSE:Wrap.WrapReverse},YGEnums_default=constants;Yoga=wrapAssembly(await yoga_wasm_base64_esm_default()),src_default2=Yoga,VALID_BORDER_STYLES=["single","double","rounded","heavy"];BorderChars={single:{topLeft:"\u250C",topRight:"\u2510",bottomLeft:"\u2514",bottomRight:"\u2518",horizontal:"\u2500",vertical:"\u2502",topT:"\u252C",bottomT:"\u2534",leftT:"\u251C",rightT:"\u2524",cross:"\u253C"},double:{topLeft:"\u2554",topRight:"\u2557",bottomLeft:"\u255A",bottomRight:"\u255D",horizontal:"\u2550",vertical:"\u2551",topT:"\u2566",bottomT:"\u2569",leftT:"\u2560",rightT:"\u2563",cross:"\u256C"},rounded:{topLeft:"\u256D",topRight:"\u256E",bottomLeft:"\u2570",bottomRight:"\u256F",horizontal:"\u2500",vertical:"\u2502",topT:"\u252C",bottomT:"\u2534",leftT:"\u251C",rightT:"\u2524",cross:"\u253C"},heavy:{topLeft:"\u250F",topRight:"\u2513",bottomLeft:"\u2517",bottomRight:"\u251B",horizontal:"\u2501",vertical:"\u2503",topT:"\u2533",bottomT:"\u253B",leftT:"\u2523",rightT:"\u252B",cross:"\u254B"}};BorderCharArrays={single:borderCharsToArray(BorderChars.single),double:borderCharsToArray(BorderChars.double),rounded:borderCharsToArray(BorderChars.rounded),heavy:borderCharsToArray(BorderChars.heavy)};KeyHandler=class KeyHandler extends EventEmitter{processParsedKey(parsedKey){try{switch(parsedKey.eventType){case"press":this.emit("keypress",new KeyEvent(parsedKey));break;case"release":this.emit("keyrelease",new KeyEvent(parsedKey));break;default:this.emit("keypress",new KeyEvent(parsedKey));break}}catch(error2){return console.error("[KeyHandler] Error processing parsed key:",error2),!0}return!0}processPaste(bytes,metadata){try{this.emit("paste",new PasteEvent(bytes,metadata))}catch(error2){console.error("[KeyHandler] Error processing paste:",error2)}}};InternalKeyHandler=class InternalKeyHandler extends KeyHandler{renderableHandlers=new Map;emit(event,...args){return this.emitWithPriority(event,...args)}emitWithPriority(event,...args){let hasGlobalListeners=!1,globalListeners=this.listeners(event);if(globalListeners.length>0){hasGlobalListeners=!0;for(let listener of globalListeners){try{listener(...args)}catch(error2){console.error(`[KeyHandler] Error in global ${event} handler:`,error2)}if(event==="keypress"||event==="keyrelease"||event==="paste"){if(args[0].propagationStopped)return hasGlobalListeners}}}let renderableSet=this.renderableHandlers.get(event),renderableHandlers=renderableSet&&renderableSet.size>0?[...renderableSet]:[],hasRenderableListeners=!1;if(renderableSet&&renderableSet.size>0){if(hasRenderableListeners=!0,event==="keypress"||event==="keyrelease"||event==="paste"){let keyEvent=args[0];if(keyEvent.defaultPrevented)return hasGlobalListeners||hasRenderableListeners;if(keyEvent.propagationStopped)return hasGlobalListeners||hasRenderableListeners}for(let handler of renderableHandlers){try{handler(...args)}catch(error2){console.error(`[KeyHandler] Error in renderable ${event} handler:`,error2)}if(event==="keypress"||event==="keyrelease"||event==="paste"){if(args[0].propagationStopped)return hasGlobalListeners||hasRenderableListeners}}}return hasGlobalListeners||hasRenderableListeners}onInternal(event,handler){if(!this.renderableHandlers.has(event))this.renderableHandlers.set(event,new Set);this.renderableHandlers.get(event).add(handler)}offInternal(event,handler){let handlers2=this.renderableHandlers.get(event);if(handlers2)handlers2.delete(handler)}};CSS_COLOR_NAMES={black:"#000000",white:"#FFFFFF",red:"#FF0000",green:"#008000",blue:"#0000FF",yellow:"#FFFF00",cyan:"#00FFFF",magenta:"#FF00FF",silver:"#C0C0C0",gray:"#808080",grey:"#808080",maroon:"#800000",olive:"#808000",lime:"#00FF00",aqua:"#00FFFF",teal:"#008080",navy:"#000080",fuchsia:"#FF00FF",purple:"#800080",orange:"#FFA500",brightblack:"#666666",brightred:"#FF6666",brightgreen:"#66FF66",brightblue:"#6666FF",brightyellow:"#FFFF66",brightcyan:"#66FFFF",brightmagenta:"#FF66FF",brightwhite:"#FFFFFF"};block_default={name:"block",version:"0.2.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:6,buffer:["","","","","",""],letterspace:[" "," "," "," "," "," "],letterspace_size:1,chars:{A:[" <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2> ","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],B:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],C:[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],D:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],E:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u255D </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],F:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c2>\u255A\u2550\u255D </c2>"],G:[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],H:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],I:["<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D</c2>"],J:["<c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588 \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u255D </c2>"],K:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],L:["<c1>\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],M:["<c1>\u2588\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551\u255A</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551 \u255A\u2550\u255D</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],N:["<c1>\u2588\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551 \u255A</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D</c2>"],O:[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],P:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c2>\u255A\u2550\u255D </c2>"],Q:[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2584\u2584 \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550</c2><c1>\u2580\u2580</c1><c2>\u2550\u255D </c2>"],R:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],S:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],T:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u255D</c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c2> \u255A\u2550\u255D </c2>"],U:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],V:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c2> \u255A\u2550\u2550\u2550\u255D </c2>"],W:["<c1>\u2588\u2588</c1><c2>\u2557 </c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588\u2588</c1><c2>\u2557</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u255D\u255A\u2550\u2550\u255D </c2>"],X:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A</c2><c1>\u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>"," <c1>\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u255D</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],Y:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c2> \u255A</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c2> \u255A\u2550\u255D </c2>"],Z:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550</c2><c1>\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1> \u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>"," <c1>\u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],"0":[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],"1":[" <c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>"," <c1>\u2588\u2588</c1><c2>\u2551</c2>"," <c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2> \u255A\u2550\u255D</c2>"],"2":["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>"," <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u255D </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],"3":["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>"," <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],"4":["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2> \u255A\u2550\u255D</c2>"],"5":["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],"6":[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],"7":["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1> \u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1> \u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c2> \u255A\u2550\u255D </c2>"],"8":[" <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u255D </c2>"],"9":[" <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2> \u255A\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>"," <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u255D </c2>"],"!":["<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2>"],"?":["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1> \u2584\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1> \u2580\u2580</c1><c2>\u2550\u2550\u255D </c2>","<c1> \u2588\u2588</c1><c2>\u2557 </c2>","<c2> \u255A\u2550\u255D </c2>"],".":[" "," "," "," ","<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2>"],"+":[" ","<c1> \u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2> \u255A</c2><c1>\u2588\u2588</c1><c2>\u2554\u2550\u255D</c2>","<c2> \u255A\u2550\u255D </c2>"," "],"-":[" "," ","<c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u255D</c2>"," "," "],_:[" "," "," "," ","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],"=":[" ","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D</c2>"," "],"@":[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u255D\u255A\u2550\u2550\u2550\u255D </c2>"],"#":[" <c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2554\u2550</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2554\u2550</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u255D \u255A\u2550\u255D </c2>"],$:["<c1>\u2584\u2584\u2588\u2588\u2588\u2584\u2584</c1><c2>\xB7</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550</c2><c1>\u2580\u2580\u2580</c1><c2>\u2550\u2550\u255D</c2>"],"%":["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1> \u2588\u2588</c1><c2>\u2554\u255D </c2>"," <c1>\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u255D</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],"&":["<c1> \u2588\u2588</c1><c2>\u2557 </c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550</c2><c1>\u2588\u2588</c1><c2>\u2554\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551 </c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],"(":[" <c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2551 ","<c1>\u2588\u2588</c1><c2>\u2551 ","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2> \u255A\u2550\u255D</c2>"],")":["<c1>\u2588\u2588</c1><c2>\u2557 </c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>"," <c1>\u2588\u2588</c1><c2>\u2551</c2>"," <c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2>\u255A\u2550\u255D </c2>"],"/":["<c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1> \u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1> \u2588\u2588</c1><c2>\u2554\u255D </c2>"," <c1>\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c2>\u255A\u2550\u255D </c2>"],":":[" ","<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2>"," "],";":[" "," ","<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2>","<c1>\u2584\u2588</c1><c2>\u2557</c2>","<c1>\u2580</c1><c2>\u2550\u255D</c2>"],",":[" "," "," "," ","<c1>\u2584\u2588</c1><c2>\u2557</c2>","<c1>\u2580</c1><c2>\u2550\u255D</c2>"],"'":["<c1>\u2588</c1><c2>\u2557</c2> ","<c2>\u255A\u255D</c2> "," "," "," "," "],'"':["<c1>\u2588</c1><c2>\u2557</c2><c1>\u2588</c1><c2>\u2557</c2> ","<c2>\u255A\u255D\u255A\u255D</c2> "," "," "," "," "]," ":[" "," "," "," "," "," "]}},shade_default={name:"shade",version:"0.2.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:8,buffer:["","","","","","","",""],letterspace:["<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>"],letterspace_size:1,chars:{A:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],B:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588\u2588\u2588</c1> ","<c1>\u2588 \u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],C:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],D:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],E:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],F:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>"," <c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],G:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588\u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2> <c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],H:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],I:["<c2>\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1>"," <c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c1>\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591</c2>"],J:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>"," <c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>"," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],K:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1> ","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],L:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],M:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],N:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588</c1><c2>\u2591</c2><c1>\u2588</c1>","<c1>\u2588 \u2588\u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2> <c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],O:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c1>\u2588\u2588</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],P:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588\u2588\u2588</c1> ","<c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>"," <c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],Q:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c1>\u2588\u2588\u2588</c1>","<c2>\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],R:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588\u2588\u2588</c1> ","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],S:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588\u2588</c1>","<c1>\u2588</c1> "," <c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2> <c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],T:["<c2>\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1>"," <c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591</c2>"],U:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c1>\u2588\u2588</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],V:["<c2>\u2591\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>"," <c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1> ","<c2>\u2591</c2> <c1>\u2588</c1> <c2>\u2591</c2>","<c2>\u2591\u2591 \u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591</c2>"],W:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],X:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c1>\u2588\u2588</c1> ","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],Y:["<c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1>"," <c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591</c2>"],Z:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588</c1> <c2>\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],"0":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u258C\u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2> <c1>\u2588</c1>"," <c1>\u2588\u2588</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"1":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588</c1><c2>\u2591\u2591</c2>"," <c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>"," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"2":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2590\u2588\u2588</c1><c2>\u2591</c2>"," <c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],"3":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588\u2588</c1>","<c2>\u2591\u2591</c2> <c1>\u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],"4":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u2588</c1>","<c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c2>\u2591\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],"5":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>"," <c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"6":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>"," <c1>\u2588\u2588</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"7":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u2588</c1> ","<c1>\u2588</c1> <c2>\u2591\u2591</c2>"," <c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"8":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>"," <c1>\u2588\u2588</c1> ","<c1>\u2588 \u2588</c1>"," <c1>\u2588\u2588</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"9":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>"," <c1>\u2588\u2588\u2588</c1>","<c2>\u2591</c2> <c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588</c1> ","<c2>\u2591\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"!":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591 \u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"?":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2590\u2588\u2588</c1><c2>\u2591</c2>"," <c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588</c1> ","<c2>\u2591\u2591 \u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],".":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"+":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588\u2588</c1>","<c2>\u2591</c2> <c1>\u2588</c1> ","<c2>\u2591\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"-":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],_:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," "],"=":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"@":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u258C\u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1> "," <c1>\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],"#":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u258C\u2590</c1> ","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u258C\u2590</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],$:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u258C</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1> "," <c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u258C\u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>"],"%":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1> "," <c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1> <c2>\u2591</c2> "," <c2>\u2591\u2591\u2591</c2>"],"&":["<c2>\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1> ","<c1>\u2588\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c2> </c2> ","<c2>\u2591\u2591\u2591\u2591\u2591</c2>"],"(":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588</c1> <c2>\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>"," <c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591</c2> <c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591 \u2591</c2>"],")":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591</c2> <c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591</c2> <c1>\u2588</c1>","<c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c2>\u2591 \u2591\u2591</c2>"],"/":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588</c1> ","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c1>\u2588</c1> <c2>\u2591\u2591</c2>"," <c2>\u2591\u2591\u2591</c2>"],":":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591 \u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591 \u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],";":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591 \u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>"],",":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>"],"'":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591 \u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],'"':["<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591 \u2591 \u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>"]," ":["<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>"]}},slick_default={name:"slick",version:"0.1.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:6,buffer:["","","","","",""],letterspace:["<c2>\u2571</c2>","<c2>\u2571</c2>","<c2>\u2571</c2>","<c2>\u2571</c2>","<c2>\u2571</c2>","<c2>\u2571</c2>"],letterspace_size:1,chars:{A:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2570\u256F</c1><c2>\u2571</c2><c1>\u2570\u256F</c1>"],B:["<c1>\u256D\u2501\u2501\u256E</c1><c2>\u2571</c2>","<c1>\u2503\u256D\u256E\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2570\u256F\u2570\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],C:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2570\u256F</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],D:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2570\u256E\u256D\u256E\u2503</c1>","<c2>\u2571</c2><c1>\u2503\u2503\u2503\u2503</c1>","<c2>\u2571</c2><c1>\u2503\u2503\u2503\u2503</c1>","<c1>\u256D\u256F\u2570\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],E:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],F:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2503</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2570\u256F</c1><c2>\u2571\u2571\u2571</c2>"],G:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2570\u256F</c1>","<c1>\u2503\u2503\u256D\u2501\u256E</c1>","<c1>\u2503\u2570\u253B\u2501\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],H:["<c1>\u256D\u256E</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2570\u256F</c1><c2>\u2571</c2><c1>\u2570\u256F</c1>"],I:["<c1>\u256D\u2501\u2501\u256E</c1>","<c1>\u2570\u252B\u2523\u256F</c1>","<c2>\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u256D\u252B\u2523\u256E</c1>","<c1>\u2570\u2501\u2501\u256F</c1>"],J:["<c2>\u2571\u2571</c2><c1>\u256D\u256E</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u256D\u256E\u2503\u2503</c1>","<c1>\u2503\u2570\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u256F</c1>"],K:["<c1>\u256D\u256E\u256D\u2501\u256E</c1>","<c1>\u2503\u2503\u2503\u256D\u256F</c1>","<c1>\u2503\u2570\u256F\u256F</c1><c2>\u2571</c2>","<c1>\u2503\u256D\u256E\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2503\u2503\u2570\u256E</c1>","<c1>\u2570\u256F\u2570\u2501\u256F</c1>"],L:["<c1>\u256D\u256E</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2503\u2503</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2503\u2503</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],M:["<c1>\u256D\u2501\u256E\u256D\u2501\u256E</c1>","<c1>\u2503\u2503\u2570\u256F\u2503\u2503</c1>","<c1>\u2503\u256D\u256E\u256D\u256E\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2570\u256F\u2570\u256F\u2570\u256F</c1>"],N:["<c1>\u256D\u2501\u256E</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2503\u2570\u256E\u2503\u2503</c1>","<c1>\u2503\u256D\u256E\u2570\u256F\u2503</c1>","<c1>\u2503\u2503\u2570\u256E\u2503\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503\u2503</c1>","<c1>\u2570\u256F</c1><c2>\u2571</c2><c1>\u2570\u2501\u256F</c1>"],O:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],P:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2503</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2570\u256F</c1><c2>\u2571\u2571\u2571</c2>"],Q:["<c1>\u256D\u2501\u2501\u2501\u256E</c1><c2>\u2571</c2>","<c1>\u2503\u256D\u2501\u256E\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2570\u2501\u256F\u2503\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u2501\u256F</c1>"],R:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2503\u256D\u256E\u256D\u256F</c1>","<c1>\u2503\u2503\u2503\u2570\u256E</c1>","<c1>\u2570\u256F\u2570\u2501\u256F</c1>"],S:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],T:["<c1>\u256D\u2501\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u256E\u256D\u256E\u2503</c1>","<c1>\u2570\u256F\u2503\u2503\u2570\u256F</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571\u2571</c2>"],U:["<c1>\u256D\u256E</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],V:["<c1>\u256D\u256E</c1><c2>\u2571\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2570\u256E\u256D\u256F\u2503</c1>","<c1>\u2570\u256E\u2503\u2503\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2503\u2570\u256F\u2503</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u2570\u256E\u256D\u256F</c1><c2>\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571\u2571</c2>"],W:["<c1>\u256D\u256E\u256D\u256E\u256D\u256E</c1>","<c1>\u2503\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2570\u256F\u2570\u256F\u2503</c1>","<c1>\u2570\u256E\u256D\u256E\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u256F\u2570\u256F</c1><c2>\u2571</c2>"],X:["<c1>\u256D\u2501\u256E\u256D\u2501\u256E</c1>","<c1>\u2570\u256E\u2570\u256F\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u256E\u256D\u256F</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u256D\u256F\u2570\u256E</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u256D\u256E\u2570\u256E</c1>","<c1>\u2570\u2501\u256F\u2570\u2501\u256F</c1>"],Y:["<c1>\u256D\u256E</c1><c2>\u2571\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2570\u256E\u256D\u256F\u2503</c1>","<c1>\u2570\u256E\u2570\u256F\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u256E\u256D\u256F</c1><c2>\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571\u2571</c2>"],Z:["<c1>\u256D\u2501\u2501\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256E\u2501\u2503</c1>","<c2>\u2571\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u2501\u2570\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u2501\u256F</c1>"],"0":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"1":["<c2>\u2571</c2><c1>\u256D\u256E</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u2503</c1><c2>\u2571</c2>","<c1>\u2570\u256E\u2503</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u2570\u256E</c1>","<c1>\u2570\u2501\u2501\u256F</c1>"],"2":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2570\u256F\u256D\u256F\u2503</c1>","<c1>\u256D\u2501\u256F\u256D\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"3":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2570\u256F\u256D\u256F\u2503</c1>","<c1>\u256D\u256E\u2570\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"4":["<c1>\u256D\u256E</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u256E\u2503</c1>","<c2>\u2571\u2571\u2571</c2><c1>\u2503\u2503</c1>","<c2>\u2571\u2571\u2571</c2><c1>\u2570\u256F</c1>"],"5":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256E\u2503</c1>","<c1>\u256D\u2501\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"6":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"7":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2570\u256F\u256D\u256F\u2503</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u256D\u256F</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571</c2>"],"8":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"9":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u256E\u2503</c1>","<c1>\u256D\u2501\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"!":["<c1>\u256D\u256E</c1>","<c1>\u2503\u2503</c1>","<c1>\u2503\u2503</c1>","<c1>\u2570\u256F</c1>","<c1>\u256D\u256E</c1>","<c1>\u2570\u256F</c1>"],"?":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2570\u256F\u256D\u256F\u2503</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u256D\u256F</c1>","<c2>\u2571\u2571</c2><c1>\u256D\u256E</c1><c2>\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571</c2>"],".":["<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c1>\u256D\u256E</c1>","<c1>\u2570\u256F</c1>"],"+":["<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571</c2><c1>\u256D\u256E</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u2570\u256E</c1>","<c1>\u2570\u256E\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571</c2>"],"-":["<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c1>\u256D\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256F</c1>","<c2>\u2571\u2571\u2571\u2571</c2>"],_:["<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c1>\u256D\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256F</c1>"],"=":["<c2>\u2571\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571\u2571</c2>","<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>","<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"@":["<c1>\u256D\u2501\u2501\u2501\u2501\u256E</c1><c2>\u2571</c2>","<c1>\u2503\u256D\u2501\u2501\u256E\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2503\u256D\u2501\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2503\u2570\u256F\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2570\u2501\u2501\u256F\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u2501\u2501\u256F</c1>"],"#":["<c2>\u2571</c2><c1>\u256D\u2501\u2501\u256E</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u256D\u256E\u2570\u256E</c1>","<c1>\u2570\u256E\u2503\u2503\u256D\u256F</c1>","<c1>\u256D\u256F\u2503\u2503\u2570\u256E</c1>","<c1>\u2570\u256E\u2570\u256F\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u2501\u2501\u256F</c1><c2>\u2571</c2>"],$:["<c2>\u2571\u2571</c2><c1>\u256D\u256E</c1><c2>\u2571</c2>","<c1>\u256D\u2501\u256F\u2570\u256E</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256E\u2503</c1>","<c1>\u2570\u256E\u256D\u2501\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571\u2571</c2>"],"%":["<c1>\u256D\u256E</c1><c2>\u2571\u2571</c2><c1>\u256D\u2501\u256E</c1>","<c1>\u2570\u256F</c1><c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1>","<c2>\u2571\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571\u2571</c2>","<c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2570\u2501\u256F</c1><c2>\u2571\u2571</c2><c1>\u2570\u256F</c1>"],"&":["<c2>\u2571</c2><c1>\u256D\u2501\u2501\u256E</c1>","<c2>\u2571</c2><c1>\u2503\u256D\u2501\u256F</c1>","<c1>\u256D\u256F\u2570\u256E</c1><c2>\u2571</c2>","<c1>\u2503\u256D\u256E\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2570\u256F\u2503\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"(":["<c2>\u2571\u2571</c2><c1>\u256D\u2501\u256E</c1>","<c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1>","<c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2>","<c1>\u2570\u256E\u2570\u256E</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u2570\u256E\u2570\u256E</c1>","<c2>\u2571\u2571</c2><c1>\u2570\u2501\u256F</c1>"],")":["<c1>\u256D\u2501\u256E</c1><c2>\u2571\u2571</c2>","<c1>\u2570\u256E\u2570\u256E</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u2570\u256E\u2570\u256E</c1>","<c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1>","<c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2>","<c1>\u2570\u2501\u256F</c1><c2>\u2571\u2571</c2>"],"/":["<c2>\u2571\u2571\u2571\u2571</c2><c1>\u256D\u2501\u256E</c1>","<c2>\u2571\u2571\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1>","<c2>\u2571\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571\u2571</c2>","<c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2570\u2501\u256F</c1><c2>\u2571\u2571\u2571\u2571</c2>"],":":["<c2>\u2571\u2571</c2>","<c1>\u256D\u256E</c1>","<c1>\u2570\u256F</c1>","<c1>\u256D\u256E</c1>","<c1>\u2570\u256F</c1>","<c2>\u2571\u2571</c2>"],";":["<c1>\u256D\u256E</c1>","<c1>\u2503\u2503</c1>","<c1>\u2570\u256F</c1>","<c1>\u256D\u256E</c1>","<c1>\u2570\u252B</c1>","<c2>\u2571</c2><c1>\u256F</c1>"],",":["<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c1>\u256D\u256E</c1>","<c1>\u2570\u252B</c1>","<c2>\u2571</c2><c1>\u256F</c1>"],"'":["<c1>\u256D\u256E</c1>","<c1>\u2570\u256F</c1>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>"],'"':["<c1>\u256D\u256E\u256D\u256E</c1>","<c1>\u2570\u256F\u2570\u256F</c1>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>"]," ":["<c2>\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571</c2>"]}},tiny_default={name:"tiny",version:"0.2.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:1,lines:2,buffer:["",""],letterspace:[" "," "],letterspace_size:1,chars:{A:["\u2584\u2580\u2588","\u2588\u2580\u2588"],B:["\u2588\u2584\u2584","\u2588\u2584\u2588"],C:["\u2588\u2580\u2580","\u2588\u2584\u2584"],D:["\u2588\u2580\u2584","\u2588\u2584\u2580"],E:["\u2588\u2580\u2580","\u2588\u2588\u2584"],F:["\u2588\u2580\u2580","\u2588\u2580 "],G:["\u2588\u2580\u2580","\u2588\u2584\u2588"],H:["\u2588 \u2588","\u2588\u2580\u2588"],I:["\u2588","\u2588"],J:[" \u2588","\u2588\u2584\u2588"],K:["\u2588\u2584\u2580","\u2588 \u2588"],L:["\u2588 ","\u2588\u2584\u2584"],M:["\u2588\u2580\u2584\u2580\u2588","\u2588 \u2580 \u2588"],N:["\u2588\u2584 \u2588","\u2588 \u2580\u2588"],O:["\u2588\u2580\u2588","\u2588\u2584\u2588"],P:["\u2588\u2580\u2588","\u2588\u2580\u2580"],Q:["\u2588\u2580\u2588","\u2580\u2580\u2588"],R:["\u2588\u2580\u2588","\u2588\u2580\u2584"],S:["\u2588\u2580\u2580","\u2584\u2584\u2588"],T:["\u2580\u2588\u2580"," \u2588 "],U:["\u2588 \u2588","\u2588\u2584\u2588"],V:["\u2588 \u2588","\u2580\u2584\u2580"],W:["\u2588 \u2588 \u2588","\u2580\u2584\u2580\u2584\u2580"],X:["\u2580\u2584\u2580","\u2588 \u2588"],Y:["\u2588\u2584\u2588"," \u2588 "],Z:["\u2580\u2588","\u2588\u2584"],"0":["\u259E\u2588\u259A","\u259A\u2588\u259E"],"1":["\u2584\u2588"," \u2588"],"2":["\u2580\u2588","\u2588\u2584"],"3":["\u2580\u2580\u2588","\u2584\u2588\u2588"],"4":["\u2588 \u2588","\u2580\u2580\u2588"],"5":["\u2588\u2580","\u2584\u2588"],"6":["\u2588\u2584\u2584","\u2588\u2584\u2588"],"7":["\u2580\u2580\u2588"," \u2588"],"8":["\u2588\u2588\u2588","\u2588\u2584\u2588"],"9":["\u2588\u2580\u2588","\u2580\u2580\u2588"],"!":["\u2588","\u2584"],"?":["\u2580\u2588"," \u2584"],".":[" ","\u2584"],"+":["\u2584\u2588\u2584"," \u2580 "],"-":["\u2584\u2584"," "],_:[" ","\u2584\u2584"],"=":["\u2580\u2580","\u2580\u2580"],"@":["\u259B\u2588\u259C","\u2599\u259F\u2583"],"#":["\u259F\u2584\u2599","\u259C\u2580\u259B"],$:["\u2596\u2588\u2597","\u2598\u2588\u259D"],"%":["\u2580 \u2584\u2580","\u2584\u2580 \u2584"],"&":["\u2584\u2584\u2588","\u2588\u2584\u2588"],"(":["\u2584\u2580","\u2580\u2584"],")":["\u2580\u2584","\u2584\u2580"],"/":[" \u2584\u2580","\u2584\u2580 "],":":["\u2580","\u2584"],";":[" ","\u2584\u2580"],",":[" ","\u2588"],"'":["\u2580"," "],'"':["\u259B \u259C"," "]," ":[" "," "]}},huge_default={name:"huge",version:"0.2.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:11,buffer:["","","","","","","","","","",""],letterspace:[" "," "," "," "," "," "," "," "," "," "," "],letterspace_size:1,chars:{A:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],B:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],C:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],D:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],E:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],F:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],G:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],H:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],I:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],J:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],K:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],L:[" <c1>\u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],M:[" <c1>\u2584\u2584 \u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2580 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],N:[" <c1>\u2584\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580\u2580</c1> "],O:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],P:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],Q:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],R:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],S:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],T:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],U:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],V:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],W:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2584 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580 \u2580\u2580</c1> "],X:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],Y:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],Z:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"0":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"1":[" <c1>\u2584\u2584\u2584\u2584</c1> "," <c1>\u2584\u2588</c1><c2>\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580 \u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"2":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"3":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"4":[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580</c1> "],"5":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"6":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"7":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],"8":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"9":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"!":[" <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "],"?":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> "," <c1>\u2584\u2588</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u2588\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580 \u2584\u2584\u2584\u2588</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2588</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u2588</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C\u2580\u2580\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580</c1> "," <c1>\u2584\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580</c1> "],".":[" "," "," "," "," "," "," "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "],"+":[" "," "," <c1>\u2584\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2584\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580</c1> "," "," "],"-":[" "," "," "," "," <c1>\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "," "," "," "," "],_:[" "," "," "," "," "," "," "," <c1>\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "," "],"=":[" "," "," <c1>\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "," "," <c1>\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "," "," "],"@":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2584\u2584\u2584\u2584 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2588</c1><c2>\u2591\u2591\u2591\u2591</c2><c1>\u2588 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2591</c2><c1>\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2588</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2584\u2584\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"#":[" <c1>\u2584 \u2584</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580 \u2580</c1> "],$:[" <c1>\u2584</c1> "," <c1>\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580</c1> "," <c1>\u2580</c1> "],"%":[" <c1>\u2584</c1> "," <c1>\u2584 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2584</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2580</c1> "," <c1>\u2580</c1> "],"&":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580\u2580 \u2580</c1> "],"(":[" <c1>\u2584\u2584\u2584\u2584\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u2588\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u2588\u2584\u2584\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "],")":[" <c1>\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2588</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2588</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "],"/":[" <c1>\u2584</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],":":[" "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "," "," "],";":[" "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u258C</c1> "," <c1>\u2580</c1> "," "],",":[" "," "," "," "," "," "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u258C</c1> "," <c1>\u2580</c1> "],"'":[" <c1>\u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2590</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2590</c1>"," <c1>\u2580</c1> "," "," "," "," "," "," "," "],'"':[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2590\u2590</c1><c2>\u2591</c2><c1>\u2590</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2590\u2590</c1><c2>\u2591</c2><c1>\u2590</c1>"," <c1>\u2580 \u2580</c1> "," "," "," "," "," "," "," "]," ":[" "," "," "," "," "," "," "," "," "," "," "]}},grid_default={name:"grid",version:"0.1.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:6,buffer:["","","","","",""],letterspace:["<c2>\u254B</c2>","<c2>\u254B</c2>","<c2>\u254B</c2>","<c2>\u254B</c2>","<c2>\u254B</c2>","<c2>\u254B</c2>"],letterspace_size:1,chars:{A:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],B:["<c1>\u250F\u2513</c1><c2>\u254B\u254B</c2>","<c1>\u2503\u2517\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],C:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u251B</c1>","<c1>\u2503\u2517\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],D:["<c2>\u254B\u254B</c2><c1>\u250F\u2513</c1>","<c1>\u250F\u2501\u251B\u2503</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],E:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u2503\u2501\u252B</c1>","<c1>\u2503\u2503\u2501\u252B</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],F:["<c2>\u254B</c2><c1>\u250F\u2501\u2513</c1>","<c1>\u250F\u251B\u2517\u2513</c1>","<c1>\u2517\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2503\u2503</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>"],G:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2513\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>"],H:["<c1>\u250F\u2513</c1><c2>\u254B\u254B</c2>","<c1>\u2503\u2517\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2503\u2503\u2503</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],I:["<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>","<c1>\u250F\u2513</c1>","<c1>\u2503\u2503</c1>","<c1>\u2517\u251B</c1>","<c2>\u254B\u254B</c2>"],J:["<c2>\u254B</c2><c1>\u250F\u2513</c1>","<c2>\u254B</c2><c1>\u2517\u251B</c1>","<c2>\u254B</c2><c1>\u250F\u2513</c1>","<c2>\u254B</c2><c1>\u2503\u2503</c1>","<c1>\u250F\u251B\u2503</c1>","<c1>\u2517\u2501\u251B</c1>"],K:["<c1>\u250F\u2513</c1><c2>\u254B\u254B</c2>","<c1>\u2503\u2503\u250F\u2513</c1>","<c1>\u2503\u2517\u251B\u251B</c1>","<c1>\u2503\u250F\u2513\u2513</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],L:["<c1>\u250F\u2513</c1><c2>\u254B</c2>","<c1>\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u2503\u2517\u2513</c1>","<c1>\u2517\u2501\u251B</c1>","<c2>\u254B\u254B\u254B</c2>"],M:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513\u250F\u2513</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2503\u2503\u2503\u2503</c1>","<c1>\u2517\u253B\u253B\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],N:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2513</c1><c2>\u254B</c2>","<c1>\u2503\u250F\u2513\u2513</c1>","<c1>\u2503\u2503\u2503\u2503</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],O:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],P:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2503\u250F\u2501\u251B</c1>","<c1>\u2517\u251B</c1><c2>\u254B\u254B</c2>"],Q:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2513\u2503</c1>","<c2>\u254B\u254B</c2><c1>\u2517\u251B</c1>"],R:["<c2>\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2513</c1>","<c1>\u2503\u250F\u251B</c1>","<c1>\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u2517\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B</c2>"],S:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u2501\u2501\u252B</c1>","<c1>\u2523\u2501\u2501\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],T:["<c2>\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u2517\u2513</c1>","<c1>\u2517\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2503\u2517\u2513</c1>","<c2>\u254B</c2><c1>\u2517\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],U:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513\u250F\u2513</c1>","<c1>\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],V:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513\u250F\u2513</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>"],W:["<c2>\u254B\u254B\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513\u250F\u2513\u250F\u2513</c1>","<c1>\u2503\u2517\u251B\u2517\u251B\u2503</c1>","<c1>\u2517\u2513\u250F\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2517\u251B\u2517\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B\u254B\u254B\u254B</c2>"],X:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513\u250F\u2513</c1>","<c1>\u2517\u254B\u254B\u251B</c1>","<c1>\u250F\u254B\u254B\u2513</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],Y:["<c2>\u254B\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513</c1><c2>\u254B</c2><c1>\u250F\u2513</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2513\u250F\u251B</c1>","<c1>\u2517\u2501\u2501\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B\u254B\u254B</c2>"],Z:["<c2>\u254B\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2523\u2501\u2501\u2503\u2503</c1>","<c1>\u2503\u2503\u2501\u2501\u252B</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B\u254B</c2>"],"0":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"1":["<c2>\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u2503</c1><c2>\u254B</c2>","<c1>\u2517\u2513\u2503</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u2517\u2513</c1>","<c1>\u2517\u2501\u2501\u251B</c1>"],"2":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2517\u251B\u250F\u251B\u2503</c1>","<c1>\u250F\u2501\u251B\u250F\u251B</c1>","<c1>\u2503\u2517\u2501\u253B\u2513</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"3":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2517\u251B\u250F\u251B\u2503</c1>","<c1>\u250F\u2513\u2517\u2513\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"4":["<c1>\u250F\u2513</c1><c2>\u254B</c2><c1>\u250F\u2513</c1>","<c1>\u2503\u2503</c1><c2>\u254B</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2513\u2503</c1>","<c2>\u254B\u254B\u254B</c2><c1>\u2503\u2503</c1>","<c2>\u254B\u254B\u254B</c2><c1>\u2517\u251B</c1>"],"5":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2501\u251B</c1>","<c1>\u2503\u2517\u2501\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u2513\u2503</c1>","<c1>\u250F\u2501\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"6":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2501\u251B</c1>","<c1>\u2503\u2517\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"7":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2517\u251B\u250F\u251B\u2503</c1>","<c2>\u254B\u254B</c2><c1>\u2503\u250F\u251B</c1>","<c2>\u254B\u254B</c2><c1>\u2503\u2503</c1><c2>\u254B</c2>","<c2>\u254B\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>"],"8":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"9":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2513\u2503</c1>","<c1>\u250F\u2501\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"!":["<c1>\u250F\u2513</c1>","<c1>\u2503\u2503</c1>","<c1>\u2503\u2503</c1>","<c1>\u2517\u251B</c1>","<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>"],"?":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2517\u251B\u250F\u251B\u2503</c1>","<c2>\u254B\u254B</c2><c1>\u2503\u250F\u251B</c1>","<c2>\u254B\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c2>\u254B\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>"],".":["<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>"],"+":["<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u2517\u2513</c1>","<c1>\u2517\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>"],"-":["<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>"],_:["<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u251B</c1>"],"=":["<c2>\u254B\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>","<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B\u254B</c2>"],"@":["<c1>\u250F\u2501\u2501\u2501\u2501\u2513</c1><c2>\u254B</c2>","<c1>\u2503\u250F\u2501\u2501\u2513\u2503</c1><c2>\u254B</c2>","<c1>\u2503\u2503\u250F\u2501\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u2503\u2503\u2517\u251B\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u2503\u2517\u2501\u2501\u251B\u2517\u2513</c1>","<c1>\u2517\u2501\u2501\u2501\u2501\u2501\u251B</c1>"],"#":["<c2>\u254B</c2><c1>\u250F\u2501\u2501\u2501\u2513</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u250F\u2501\u2513\u2517\u2513</c1>","<c1>\u2517\u2513\u2503\u2503\u2503\u250F\u251B</c1>","<c1>\u250F\u251B\u2503\u2503\u2503\u2517\u2513</c1>","<c1>\u2517\u2513\u2517\u2501\u251B\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2517\u2501\u2501\u2501\u251B</c1><c2>\u254B</c2>"],$:["<c2>\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u2517\u2513</c1>","<c1>\u2503\u2501\u2501\u252B</c1>","<c1>\u2523\u2501\u2501\u2503</c1>","<c1>\u2517\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>"],"%":["<c1>\u250F\u2513</c1><c2>\u254B\u254B</c2><c1>\u250F\u2501\u2513</c1>","<c1>\u2517\u251B</c1><c2>\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1>","<c2>\u254B\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B\u254B</c2>","<c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B</c2><c1>\u250F\u2513</c1>","<c1>\u2517\u2501\u251B</c1><c2>\u254B\u254B</c2><c1>\u2517\u251B</c1>"],"&":["<c2>\u254B\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c2>\u254B\u254B</c2><c1>\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u250F\u2501\u251B\u2517\u2513</c1>","<c1>\u2503\u250F\u2513\u250F\u251B</c1>","<c1>\u2503\u2517\u251B\u2503</c1><c2>\u254B</c2>","<c1>\u2517\u2501\u2501\u251B</c1><c2>\u254B</c2>"],"(":["<c2>\u254B\u254B</c2><c1>\u250F\u2501\u2513</c1>","<c2>\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1>","<c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B</c2>","<c1>\u2517\u2513\u2517\u2513</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u2517\u2513\u2517\u2513</c1>","<c2>\u254B\u254B</c2><c1>\u2517\u2501\u251B</c1>"],")":["<c1>\u250F\u2501\u2513</c1><c2>\u254B\u254B</c2>","<c1>\u2517\u2513\u2517\u2513</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u2517\u2513\u2517\u2513</c1>","<c2>\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1>","<c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B</c2>","<c1>\u2517\u2501\u251B</c1><c2>\u254B\u254B</c2>"],"/":["<c2>\u254B\u254B\u254B\u254B</c2><c1>\u250F\u2501\u2513</c1>","<c2>\u254B\u254B\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1>","<c2>\u254B\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B\u254B</c2>","<c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B\u254B\u254B</c2>","<c1>\u2517\u2501\u251B</c1><c2>\u254B\u254B\u254B\u254B</c2>"],":":["<c2>\u254B\u254B</c2>","<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>","<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>","<c2>\u254B\u254B</c2>"],";":["<c2>\u254B\u254B</c2>","<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>","<c2>\u254B\u254B</c2>","<c1>\u250F\u2513</c1>","<c1>\u2517\u252B</c1>"],",":["<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c1>\u250F\u2513</c1>","<c1>\u2517\u252B</c1>"],"'":["<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>"],'"':["<c1>\u250F\u2513\u250F\u2513</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>"]," ":["<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>"]}},pallet_default={name:"pallet",version:"0.1.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:6,buffer:["","","","","",""],letterspace:["<c2>\u2500</c2>","<c2>\u2500</c2>","<c2>\u2500</c2>","<c2>\u2500</c2>","<c2>\u2500</c2>","<c2>\u2500</c2>"],letterspace_size:1,chars:{A:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u255A\u255D</c1><c2>\u2500</c2><c1>\u255A\u255D</c1>"],B:["<c1>\u2554\u2550\u2550\u2557</c1><c2>\u2500</c2>","<c1>\u2551\u2554\u2557\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u255A\u255D\u255A\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],C:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u255A\u255D</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],D:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u255A\u2557\u2554\u2557\u2551</c1>","<c2>\u2500</c2><c1>\u2551\u2551\u2551\u2551</c1>","<c2>\u2500</c2><c1>\u2551\u2551\u2551\u2551</c1>","<c1>\u2554\u255D\u255A\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],E:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],F:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u2551</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u255A\u255D</c1><c2>\u2500\u2500\u2500</c2>"],G:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u255A\u255D</c1>","<c1>\u2551\u2551\u2554\u2550\u2557</c1>","<c1>\u2551\u255A\u2569\u2550\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],H:["<c1>\u2554\u2557</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u255A\u255D</c1><c2>\u2500</c2><c1>\u255A\u255D</c1>"],I:["<c1>\u2554\u2550\u2550\u2557</c1>","<c1>\u255A\u2563\u2560\u255D</c1>","<c2>\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2554\u2563\u2560\u2557</c1>","<c1>\u255A\u2550\u2550\u255D</c1>"],J:["<c2>\u2500\u2500</c2><c1>\u2554\u2557</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2554\u2557\u2551\u2551</c1>","<c1>\u2551\u255A\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u255D</c1>"],K:["<c1>\u2554\u2557\u2554\u2550\u2557</c1>","<c1>\u2551\u2551\u2551\u2554\u255D</c1>","<c1>\u2551\u255A\u255D\u255D</c1><c2>\u2500</c2>","<c1>\u2551\u2554\u2557\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u2551\u2551\u255A\u2557</c1>","<c1>\u255A\u255D\u255A\u2550\u255D</c1>"],L:["<c1>\u2554\u2557</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u2551\u2551</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u2551\u2551</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],M:["<c1>\u2554\u2550\u2557\u2554\u2550\u2557</c1>","<c1>\u2551\u2551\u255A\u255D\u2551\u2551</c1>","<c1>\u2551\u2554\u2557\u2554\u2557\u2551</c1>","<c1>\u2551\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u2551\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u255A\u255D\u255A\u255D\u255A\u255D</c1>"],N:["<c1>\u2554\u2550\u2557</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u2551\u255A\u2557\u2551\u2551</c1>","<c1>\u2551\u2554\u2557\u255A\u255D\u2551</c1>","<c1>\u2551\u2551\u255A\u2557\u2551\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551\u2551</c1>","<c1>\u255A\u255D</c1><c2>\u2500</c2><c1>\u255A\u2550\u255D</c1>"],O:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],P:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u2551</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u255A\u255D</c1><c2>\u2500\u2500\u2500</c2>"],Q:["<c1>\u2554\u2550\u2550\u2550\u2557</c1><c2>\u2500</c2>","<c1>\u2551\u2554\u2550\u2557\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u255A\u2550\u255D\u2560\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u2550\u255D</c1>"],R:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u2551\u2554\u2557\u2554\u255D</c1>","<c1>\u2551\u2551\u2551\u255A\u2557</c1>","<c1>\u255A\u255D\u255A\u2550\u255D</c1>"],S:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],T:["<c1>\u2554\u2550\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2557\u2554\u2557\u2551</c1>","<c1>\u255A\u255D\u2551\u2551\u255A\u255D</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500\u2500</c2>"],U:["<c1>\u2554\u2557</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],V:["<c1>\u2554\u2557</c1><c2>\u2500\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u255A\u2557\u2554\u255D\u2551</c1>","<c1>\u255A\u2557\u2551\u2551\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u2551\u255A\u255D\u2551</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u255A\u2557\u2554\u255D</c1><c2>\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500\u2500</c2>"],W:["<c1>\u2554\u2557\u2554\u2557\u2554\u2557</c1>","<c1>\u2551\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u2551\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u2551\u255A\u255D\u255A\u255D\u2551</c1>","<c1>\u255A\u2557\u2554\u2557\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u255A\u255D\u255A\u255D</c1><c2>\u2500</c2>"],X:["<c1>\u2554\u2550\u2557\u2554\u2550\u2557</c1>","<c1>\u255A\u2557\u255A\u255D\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u255A\u2557\u2554\u255D</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u2554\u255D\u255A\u2557</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u2554\u2557\u255A\u2557</c1>","<c1>\u255A\u2550\u255D\u255A\u2550\u255D</c1>"],Y:["<c1>\u2554\u2557</c1><c2>\u2500\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u255A\u2557\u2554\u255D\u2551</c1>","<c1>\u255A\u2557\u255A\u255D\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u255A\u2557\u2554\u255D</c1><c2>\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500\u2500</c2>"],Z:["<c1>\u2554\u2550\u2550\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2557\u2550\u2551</c1>","<c2>\u2500\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u2550\u255A\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u2550\u255D</c1>"],"0":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"1":["<c2>\u2500</c2><c1>\u2554\u2557</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u2551</c1><c2>\u2500</c2>","<c1>\u255A\u2557\u2551</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u255A\u2557</c1>","<c1>\u255A\u2550\u2550\u255D</c1>"],"2":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u255A\u255D\u2554\u255D\u2551</c1>","<c1>\u2554\u2550\u255D\u2554\u255D</c1>","<c1>\u2551\u2551\u255A\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"3":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u255A\u255D\u2554\u255D\u2551</c1>","<c1>\u2554\u2557\u255A\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"4":["<c1>\u2554\u2557</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2557\u2551</c1>","<c2>\u2500\u2500\u2500</c2><c1>\u2551\u2551</c1>","<c2>\u2500\u2500\u2500</c2><c1>\u255A\u255D</c1>"],"5":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2557\u2551</c1>","<c1>\u2554\u2550\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"6":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"7":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u255A\u255D\u2554\u255D\u2551</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2554\u255D</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500</c2>"],"8":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"9":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2557\u2551</c1>","<c1>\u2554\u2550\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"!":["<c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1>","<c1>\u2551\u2551</c1>","<c1>\u255A\u255D</c1>","<c1>\u2554\u2557</c1>","<c1>\u255A\u255D</c1>"],"?":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u255A\u255D\u2554\u255D\u2551</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2554\u255D</c1>","<c2>\u2500\u2500</c2><c1>\u2554\u2557</c1><c2>\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500</c2>"],".":["<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c1>\u2554\u2557</c1>","<c1>\u255A\u255D</c1>"],"+":["<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500</c2><c1>\u2554\u2557</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u255A\u2557</c1>","<c1>\u255A\u2557\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500</c2>"],"-":["<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c1>\u2554\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u255D</c1>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>"],_:["<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c1>\u2554\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u255D</c1>"],"=":["<c2>\u2500\u2500\u2500\u2500\u2500</c2>","<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>","<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>","<c2>\u2500\u2500\u2500\u2500\u2500</c2>"],"@":["<c1>\u2554\u2550\u2550\u2550\u2550\u2557</c1><c2>\u2500</c2>","<c1>\u2551\u2554\u2550\u2550\u2557\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u2551\u2554\u2550\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u2551\u255A\u255D\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u255A\u2550\u2550\u255D\u2560\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u2550\u2550\u255D</c1>"],"#":["<c2>\u2500</c2><c1>\u2554\u2569\u2569\u2569\u2557</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u2554\u2550\u2557\u255A\u2557</c1>","<c1>\u255A\u2557\u2560\u2550\u2563\u2554\u255D</c1>","<c1>\u2554\u255D\u2560\u2550\u2563\u255A\u2557</c1>","<c1>\u255A\u2557\u255A\u2550\u255D\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u255A\u2566\u2566\u2566\u255D</c1><c2>\u2500</c2>"],$:["<c1>\u2554\u255D\u2569\u255A\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2557\u2566\u2554\u255D</c1>"],"%":["<c1>\u2554\u2557</c1><c2>\u2500\u2500</c2><c1>\u2554\u2550\u2557</c1>","<c1>\u255A\u255D</c1><c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1>","<c2>\u2500\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500\u2500</c2>","<c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u255A\u2550\u255D</c1><c2>\u2500\u2500</c2><c1>\u255A\u255D</c1>"],"&":["<c2>\u2500\u2500</c2><c1>\u2554\u2557</c1><c2>\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2554\u2550\u255D\u255A\u2557</c1>","<c1>\u2551\u2554\u2557\u2554\u255D</c1>","<c1>\u2551\u255A\u255D\u2551</c1><c2>\u2500</c2>","<c1>\u255A\u2550\u2550\u255D</c1><c2>\u2500</c2>"],"(":["<c2>\u2500\u2500</c2><c1>\u2554\u2550\u2557</c1>","<c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1>","<c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2>","<c1>\u255A\u2557\u255A\u2557</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u255A\u2557\u255A\u2557</c1>","<c2>\u2500\u2500</c2><c1>\u255A\u2550\u255D</c1>"],")":["<c1>\u2554\u2550\u2557</c1><c2>\u2500\u2500</c2>","<c1>\u255A\u2557\u255A\u2557</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u255A\u2557\u255A\u2557</c1>","<c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1>","<c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2>","<c1>\u255A\u2550\u255D</c1><c2>\u2500\u2500</c2>"],"/":["<c2>\u2500\u2500\u2500\u2500</c2><c1>\u2554\u2550\u2557</c1>","<c2>\u2500\u2500\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1>","<c2>\u2500\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500\u2500</c2>","<c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u255A\u2550\u255D</c1><c2>\u2500\u2500\u2500\u2500</c2>"],":":["<c2>\u2500\u2500</c2>","<c1>\u2554\u2557</c1>","<c1>\u255A\u255D</c1>","<c1>\u2554\u2557</c1>","<c1>\u255A\u255D</c1>","<c2>\u2500\u2500</c2>"],";":["<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c1>\u2554\u2557</c1>","<c1>\u255A\u2563</c1>","<c2>\u2500</c2><c1>\u255D</c1>"],",":["<c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1>","<c1>\u255A\u255D</c1>","<c1>\u2554\u2557</c1>","<c1>\u255A\u2563</c1>","<c2>\u2500</c2><c1>\u255D</c1>"],"'":["<c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1>","<c1>\u255A\u255D</c1>","<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>"],'"':["<c1>\u2554\u2557\u2554\u2557</c1>","<c1>\u2551\u2551\u2551\u2551</c1>","<c1>\u255A\u255D\u255A\u255D</c1>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>"]," ":["<c2>\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500</c2>"]}},fonts={tiny:tiny_default,block:block_default,shade:shade_default,slick:slick_default,huge:huge_default,grid:grid_default,pallet:pallet_default},parsedFonts={};TextAttributes={NONE:0,BOLD:1,DIM:2,ITALIC:4,UNDERLINE:8,BLINK:16,INVERSE:32,HIDDEN:64,STRIKETHROUGH:128};((DebugOverlayCorner2)=>{DebugOverlayCorner2[DebugOverlayCorner2.topLeft=0]="topLeft",DebugOverlayCorner2[DebugOverlayCorner2.topRight=1]="topRight",DebugOverlayCorner2[DebugOverlayCorner2.bottomLeft=2]="bottomLeft",DebugOverlayCorner2[DebugOverlayCorner2.bottomRight=3]="bottomRight"})(DebugOverlayCorner||={});((TargetChannel2)=>{TargetChannel2[TargetChannel2.FG=1]="FG",TargetChannel2[TargetChannel2.BG=2]="BG",TargetChannel2[TargetChannel2.Both=3]="Both"})(TargetChannel||={});BrandedStyledText=Symbol.for("@opentui/core/StyledText");StyledText=class StyledText{[BrandedStyledText]=!0;chunks;constructor(chunks){this.chunks=chunks}};kittyKeyMap={27:"escape",9:"tab",13:"return",127:"backspace",57344:"escape",57345:"return",57346:"tab",57347:"backspace",57348:"insert",57349:"delete",57350:"left",57351:"right",57352:"up",57353:"down",57354:"pageup",57355:"pagedown",57356:"home",57357:"end",57358:"capslock",57359:"scrolllock",57360:"numlock",57361:"printscreen",57362:"pause",57363:"menu",57364:"f1",57365:"f2",57366:"f3",57367:"f4",57368:"f5",57369:"f6",57370:"f7",57371:"f8",57372:"f9",57373:"f10",57374:"f11",57375:"f12",57376:"f13",57377:"f14",57378:"f15",57379:"f16",57380:"f17",57381:"f18",57382:"f19",57383:"f20",57384:"f21",57385:"f22",57386:"f23",57387:"f24",57388:"f25",57389:"f26",57390:"f27",57391:"f28",57392:"f29",57393:"f30",57394:"f31",57395:"f32",57396:"f33",57397:"f34",57398:"f35",57399:"kp0",57400:"kp1",57401:"kp2",57402:"kp3",57403:"kp4",57404:"kp5",57405:"kp6",57406:"kp7",57407:"kp8",57408:"kp9",57409:"kpdecimal",57410:"kpdivide",57411:"kpmultiply",57412:"kpminus",57413:"kpplus",57414:"kpenter",57415:"kpequal",57416:"kpseparator",57417:"kpleft",57418:"kpright",57419:"kpup",57420:"kpdown",57421:"kppageup",57422:"kppagedown",57423:"kphome",57424:"kpend",57425:"kpinsert",57426:"kpdelete",57427:"clear",57428:"mediaplay",57429:"mediapause",57430:"mediaplaypause",57431:"mediareverse",57432:"mediastop",57433:"mediafastforward",57434:"mediarewind",57435:"medianext",57436:"mediaprev",57437:"mediarecord",57438:"volumedown",57439:"volumeup",57440:"mute",57441:"leftshift",57442:"leftctrl",57443:"leftalt",57444:"leftsuper",57445:"lefthyper",57446:"leftmeta",57447:"rightshift",57448:"rightctrl",57449:"rightalt",57450:"rightsuper",57451:"righthyper",57452:"rightmeta",57453:"iso_level3_shift",57454:"iso_level5_shift"};functionalKeyMap={A:"up",B:"down",C:"right",D:"left",H:"home",F:"end",E:"clear",P:"f1",Q:"f2",S:"f4"},tildeKeyMap={"1":"home","2":"insert","3":"delete","4":"end","5":"pageup","6":"pagedown","7":"home","8":"end","11":"f1","12":"f2","13":"f3","14":"f4","15":"f5","17":"f6","18":"f7","19":"f8","20":"f9","21":"f10","23":"f11","24":"f12","29":"menu","57427":"clear"};metaKeyCodeRe=/^(?:\x1b)([a-zA-Z0-9])$/,fnKeyRe=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,keyName={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[29~":"menu","[57427~":"clear","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home","[P":"f1","[Q":"f2","[S":"f4",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear",f:"right",b:"left",p:"up",n:"down","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"},nonAlphanumericKeys=[...Object.values(keyName),"backspace"],modifyOtherKeysRe=/^\x1b\[27;(\d+);(\d+)~$/;MouseParser=class MouseParser{mouseButtonsPressed=new Set;static SCROLL_DIRECTIONS={0:"up",1:"down",2:"left",3:"right"};reset(){this.mouseButtonsPressed.clear()}decodeInput(data){return(Buffer.isBuffer(data)?data:Buffer.from(data.buffer,data.byteOffset,data.byteLength)).toString("latin1")}parseMouseEvent(data){let str5=this.decodeInput(data);return this.parseMouseSequenceAt(str5,0)?.event??null}parseAllMouseEvents(data){let str5=this.decodeInput(data),events=[],offset=0;while(offset<str5.length){let parsed=this.parseMouseSequenceAt(str5,offset);if(!parsed)break;events.push(parsed.event),offset+=parsed.consumed}return events}parseMouseSequenceAt(str5,offset){if(!str5.startsWith("\x1B[",offset))return null;let introducer=str5[offset+2];if(introducer==="<")return this.parseSgrSequence(str5,offset);if(introducer==="M")return this.parseBasicSequence(str5,offset);return null}parseSgrSequence(str5,offset){let index=offset+3,values2=[0,0,0],part=0,hasDigit=!1;while(index<str5.length){let char=str5[index],charCode=str5.charCodeAt(index);if(charCode>=48&&charCode<=57){hasDigit=!0,values2[part]=values2[part]*10+(charCode-48),index++;continue}switch(char){case";":{if(!hasDigit||part>=2)return null;part++,hasDigit=!1,index++;break}case"M":case"m":{if(!hasDigit||part!==2)return null;return{event:this.decodeSgrEvent(values2[0],values2[1],values2[2],char),consumed:index-offset+1}}default:return null}}return null}parseBasicSequence(str5,offset){if(offset+6>str5.length)return null;let buttonByte=str5.charCodeAt(offset+3)-32,x=str5.charCodeAt(offset+4)-33,y=str5.charCodeAt(offset+5)-33;return{event:this.decodeBasicEvent(buttonByte,x,y),consumed:6}}decodeSgrEvent(rawButtonCode,wireX,wireY,pressRelease){let button=rawButtonCode&3,isScroll=(rawButtonCode&64)!==0,scrollDirection=!isScroll?void 0:MouseParser.SCROLL_DIRECTIONS[button],isMotion=(rawButtonCode&32)!==0,modifiers={shift:(rawButtonCode&4)!==0,alt:(rawButtonCode&8)!==0,ctrl:(rawButtonCode&16)!==0},type2,scrollInfo;if(isMotion){let isDragging=this.mouseButtonsPressed.size>0;if(button===3)type2="move";else if(isDragging)type2="drag";else type2="move"}else if(isScroll&&pressRelease==="M")type2="scroll",scrollInfo={direction:scrollDirection,delta:1};else if(type2=pressRelease==="M"?"down":"up",type2==="down"&&button!==3)this.mouseButtonsPressed.add(button);else if(type2==="up")this.mouseButtonsPressed.clear();return{type:type2,button:button===3?0:button,x:wireX-1,y:wireY-1,modifiers,scroll:scrollInfo}}decodeBasicEvent(buttonByte,x,y){let button=buttonByte&3,isScroll=(buttonByte&64)!==0,isMotion=(buttonByte&32)!==0,scrollDirection=!isScroll?void 0:MouseParser.SCROLL_DIRECTIONS[button],modifiers={shift:(buttonByte&4)!==0,alt:(buttonByte&8)!==0,ctrl:(buttonByte&16)!==0},type2,actualButton,scrollInfo;if(isMotion)type2="move",actualButton=button===3?-1:button;else if(isScroll)type2="scroll",actualButton=0,scrollInfo={direction:scrollDirection,delta:1};else type2=button===3?"up":"down",actualButton=button===3?0:button;return{type:type2,button:actualButton,x,y,modifiers,scroll:scrollInfo}}};singletonCacheSymbol=Symbol.for("@opentui/core/singleton");envRegistry=singleton("env-registry",()=>({}));envStore=singleton("env-store",()=>new EnvStore);env=new Proxy({},{get(target,prop){if(typeof prop!=="string")return;return envStore.get(prop)},has(target,prop){return envStore.has(prop)},ownKeys(){return Object.keys(envRegistry)},getOwnPropertyDescriptor(target,prop){if(envStore.has(prop))return{enumerable:!0,configurable:!0,get:()=>envStore.get(prop)};return}}),BRACKETED_PASTE_START=Buffer3.from("\x1B[200~"),BRACKETED_PASTE_END=Buffer3.from("\x1B[201~"),EMPTY_BYTES=new Uint8Array(0),KEY_DECODER=new TextDecoder,DEFAULT_PROTOCOL_CONTEXT={kittyKeyboardEnabled:!1,privateCapabilityRepliesActive:!1,pixelResolutionQueryActive:!1,explicitWidthCprActive:!1},RXVT_DOLLAR_CSI_RE=/^\x1b\[\d+\$$/,SYSTEM_CLOCK=new SystemClock;registerEnvVar({name:"OTUI_TS_STYLE_WARN",default:!1,description:"Enable warnings for missing syntax styles"});TIMERS_MAP=new Map;registerEnvVar({name:"OTUI_TREE_SITTER_WORKER_PATH",description:"Path to the TreeSitter worker",type:"string",default:""});DEFAULT_PARSERS=getParsers();TreeSitterClient=class TreeSitterClient extends EventEmitter2{initialized=!1;worker;buffers=new Map;initializePromise;initializeResolvers;messageCallbacks=new Map;messageIdCounter=0;editQueues=new Map;debouncer;options;constructor(options){super();this.options=options,this.debouncer=createDebounce("tree-sitter-client"),this.startWorker()}emitError(error2,bufferId){if(this.listenerCount("error")>0)this.emit("error",error2,bufferId)}emitWarning(warning,bufferId){if(this.listenerCount("warning")>0)this.emit("warning",warning,bufferId)}startWorker(){if(this.worker)return;let worker_path;if(env.OTUI_TREE_SITTER_WORKER_PATH)worker_path=env.OTUI_TREE_SITTER_WORKER_PATH;else if(typeof OTUI_TREE_SITTER_WORKER_PATH<"u")worker_path=OTUI_TREE_SITTER_WORKER_PATH;else if(this.options.workerPath)worker_path=this.options.workerPath;else if(worker_path=new URL("./parser.worker.js",import.meta.url).href,!existsSync47(resolve22(import.meta.dirname,"parser.worker.js")))worker_path=new URL("./parser.worker.ts",import.meta.url).href;this.worker=new Worker(worker_path),this.worker.onmessage=this.handleWorkerMessage.bind(this),this.worker.onerror=(error2)=>{if(console.error("TreeSitter worker error:",error2.message),this.initializeResolvers)clearTimeout(this.initializeResolvers.timeoutId),this.initializeResolvers.reject(Error(`Worker error: ${error2.message}`)),this.initializeResolvers=void 0;this.emitError(`Worker error: ${error2.message}`)}}stopWorker(){if(!this.worker)return;this.worker.terminate(),this.worker=void 0}handleReset(){return this.buffers.clear(),this.stopWorker(),this.startWorker(),this.initializePromise=void 0,this.initializeResolvers=void 0,this.initialize()}async initialize(){if(this.initializePromise)return this.initializePromise;return this.initializePromise=new Promise((resolve32,reject)=>{let timeoutMs=this.options.initTimeout??1e4,timeoutId=setTimeout(()=>{let error2=Error("Worker initialization timed out");console.error("TreeSitter client:",error2.message),this.initializeResolvers=void 0,reject(error2)},timeoutMs);this.initializeResolvers={resolve:resolve32,reject,timeoutId},this.worker?.postMessage({type:"INIT",dataPath:this.options.dataPath})}),await this.initializePromise,await this.registerDefaultParsers(),this.initializePromise}async registerDefaultParsers(){for(let parser of DEFAULT_PARSERS)this.addFiletypeParser(parser)}resolvePath(path6){if(isUrl(path6))return path6;if(isBunfsPath(path6))return normalizeBunfsPath(parse2(path6).base);if(!isAbsolute(path6))return resolve22(path6);return path6}addFiletypeParser(filetypeParser){let resolvedParser={...filetypeParser,aliases:filetypeParser.aliases?[...new Set(filetypeParser.aliases.filter((alias)=>alias!==filetypeParser.filetype))]:void 0,wasm:this.resolvePath(filetypeParser.wasm),queries:{highlights:filetypeParser.queries.highlights.map((path6)=>this.resolvePath(path6)),injections:filetypeParser.queries.injections?.map((path6)=>this.resolvePath(path6))}};this.worker?.postMessage({type:"ADD_FILETYPE_PARSER",filetypeParser:resolvedParser})}async getPerformance(){let messageId=`performance_${this.messageIdCounter++}`;return new Promise((resolve32)=>{this.messageCallbacks.set(messageId,resolve32),this.worker?.postMessage({type:"GET_PERFORMANCE",messageId})})}async highlightOnce(content,filetype){if(!this.initialized)try{await this.initialize()}catch(error2){return{error:"Could not highlight because of initialization error"}}let messageId=`oneshot_${this.messageIdCounter++}`;return new Promise((resolve32)=>{this.messageCallbacks.set(messageId,resolve32),this.worker?.postMessage({type:"ONESHOT_HIGHLIGHT",content,filetype,messageId})})}handleWorkerMessage(event){let{type:type2,bufferId,error:error2,highlights,warning,messageId,hasParser,performance:performance22,version}=event.data;if(type2==="HIGHLIGHT_RESPONSE"){let buffer2=this.buffers.get(bufferId);if(!buffer2||!buffer2.hasParser)return;if(buffer2.version!==version){this.resetBuffer(bufferId,buffer2.version,buffer2.content);return}this.emit("highlights:response",bufferId,version,highlights)}if(type2==="INIT_RESPONSE"){if(this.initializeResolvers){if(clearTimeout(this.initializeResolvers.timeoutId),error2)console.error("TreeSitter client initialization failed:",error2),this.initializeResolvers.reject(Error(error2));else this.initialized=!0,this.initializeResolvers.resolve();this.initializeResolvers=void 0;return}}if(type2==="PARSER_INIT_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback({hasParser,warning,error:error2});return}if(type2==="PRELOAD_PARSER_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback({hasParser});return}if(type2==="BUFFER_DISPOSED"){let callback=this.messageCallbacks.get(`dispose_${bufferId}`);if(callback)this.messageCallbacks.delete(`dispose_${bufferId}`),callback(!0);this.emit("buffer:disposed",bufferId);return}if(type2==="PERFORMANCE_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback(performance22);return}if(type2==="ONESHOT_HIGHLIGHT_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback({highlights,warning,error:error2});return}if(type2==="UPDATE_DATA_PATH_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback({error:error2});return}if(type2==="CLEAR_CACHE_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback({error:error2});return}if(warning){this.emitWarning(warning,bufferId);return}if(error2){this.emitError(error2,bufferId);return}if(type2==="WORKER_LOG"){let{logType,data}=event.data,message=data.join(" ");if(this.emit("worker:log",logType,message),logType==="log")console.log("TSWorker:",...data);else if(logType==="error")console.error("TSWorker:",...data);else if(logType==="warn")console.warn("TSWorker:",...data);return}}async preloadParser(filetype){let messageId=`has_parser_${this.messageIdCounter++}`;return(await new Promise((resolve32)=>{this.messageCallbacks.set(messageId,resolve32),this.worker?.postMessage({type:"PRELOAD_PARSER",filetype,messageId})})).hasParser}async createBuffer(id,content,filetype,version=1,autoInitialize=!0){if(!this.initialized){if(!autoInitialize)return this.emitError("Could not create buffer because client is not initialized"),!1;try{await this.initialize()}catch(error2){return this.emitError("Could not create buffer because of initialization error"),!1}}if(this.buffers.has(id))throw Error(`Buffer with id ${id} already exists`);this.buffers.set(id,{id,content,filetype,version,hasParser:!1});let messageId=`init_${this.messageIdCounter++}`,response=await new Promise((resolve32)=>{this.messageCallbacks.set(messageId,resolve32),this.worker?.postMessage({type:"INITIALIZE_PARSER",bufferId:id,version,content,filetype,messageId})});if(!response.hasParser){if(this.emit("buffer:initialized",id,!1),filetype!=="plaintext")this.emitWarning(response.warning||response.error||"Buffer has no parser",id);return!1}let bufferState={id,content,filetype,version,hasParser:!0};return this.buffers.set(id,bufferState),this.emit("buffer:initialized",id,!0),!0}async updateBuffer(id,edits,newContent,version){if(!this.initialized)return;let buffer2=this.buffers.get(id);if(!buffer2||!buffer2.hasParser)return;if(this.buffers.set(id,{...buffer2,content:newContent,version}),!this.editQueues.has(id))this.editQueues.set(id,new ProcessQueue((item)=>this.processEdit(id,item.edits,item.newContent,item.version,item.isReset)));this.editQueues.get(id).enqueue({edits,newContent,version})}async processEdit(bufferId,edits,newContent,version,isReset=!1){this.worker?.postMessage({type:isReset?"RESET_BUFFER":"HANDLE_EDITS",bufferId,version,content:newContent,edits})}async removeBuffer(bufferId){if(!this.initialized)return;if(this.buffers.delete(bufferId),this.editQueues.has(bufferId))this.editQueues.get(bufferId)?.clear(),this.editQueues.delete(bufferId);if(this.worker)await new Promise((resolve32)=>{let messageId=`dispose_${bufferId}`;this.messageCallbacks.set(messageId,resolve32);try{this.worker.postMessage({type:"DISPOSE_BUFFER",bufferId})}catch(error2){console.error("Error disposing buffer",error2),resolve32(!1)}setTimeout(()=>{if(this.messageCallbacks.has(messageId))this.messageCallbacks.delete(messageId),console.warn({bufferId},"Timed out waiting for buffer to be disposed"),resolve32(!1)},3000)});this.debouncer.clearDebounce(`reset-${bufferId}`)}async destroy(){if(this.initializeResolvers)clearTimeout(this.initializeResolvers.timeoutId),this.initializeResolvers.reject(Error("Client destroyed during initialization")),this.initializeResolvers=void 0;for(let[messageId,callback]of this.messageCallbacks.entries())if(typeof callback==="function")try{callback({error:"Client destroyed"})}catch(e){}this.messageCallbacks.clear(),clearDebounceScope("tree-sitter-client"),this.debouncer.clear(),this.editQueues.clear(),this.buffers.clear(),this.stopWorker(),this.initialized=!1,this.initializePromise=void 0}async resetBuffer(bufferId,version,content){if(!this.initialized)return;let buffer2=this.buffers.get(bufferId);if(!buffer2||!buffer2.hasParser){this.emitError("Cannot reset buffer with no parser",bufferId);return}this.buffers.set(bufferId,{...buffer2,content,version}),this.debouncer.debounce(`reset-${bufferId}`,10,()=>this.processEdit(bufferId,[],content,version,!0))}getBuffer(bufferId){return this.buffers.get(bufferId)}getAllBuffers(){return Array.from(this.buffers.values())}isInitialized(){return this.initialized}async setDataPath(dataPath){if(this.options.dataPath===dataPath)return;if(this.options.dataPath=dataPath,this.initialized&&this.worker){let messageId=`update_datapath_${this.messageIdCounter++}`;return new Promise((resolve32,reject)=>{this.messageCallbacks.set(messageId,(response)=>{if(response.error)reject(Error(response.error));else resolve32()}),this.worker.postMessage({type:"UPDATE_DATA_PATH",dataPath,messageId})})}}async clearCache(){if(!this.initialized||!this.worker)throw Error("Cannot clear cache: client is not initialized");let messageId=`clear_cache_${this.messageIdCounter++}`;return new Promise((resolve32,reject)=>{this.messageCallbacks.set(messageId,(response)=>{if(response.error)reject(Error(response.error));else resolve32()}),this.worker.postMessage({type:"CLEAR_CACHE",messageId})})}};registerEnvVar({name:"XDG_CONFIG_HOME",description:"Base directory for user-specific configuration files",type:"string",default:""});registerEnvVar({name:"XDG_DATA_HOME",description:"Base directory for user-specific data files",type:"string",default:""});DataPathsManager=class DataPathsManager extends EventEmitter3{_appName;_globalConfigPath;_globalConfigFile;_localConfigFile;_globalDataPath;constructor(){super();this._appName="opentui"}get appName(){return this._appName}set appName(value){if(!isValidDirectoryName(value))throw Error(`Invalid app name "${value}": must be a valid directory name`);if(this._appName!==value)this._appName=value,this._globalConfigPath=void 0,this._globalConfigFile=void 0,this._localConfigFile=void 0,this._globalDataPath=void 0,this.emit("paths:changed",this.toObject())}get globalConfigPath(){if(this._globalConfigPath===void 0){let homeDir=os3.homedir(),baseConfigDir=env.XDG_CONFIG_HOME||path3.join(homeDir,".config");this._globalConfigPath=path3.join(baseConfigDir,this._appName)}return this._globalConfigPath}get globalConfigFile(){if(this._globalConfigFile===void 0)this._globalConfigFile=path3.join(this.globalConfigPath,"init.ts");return this._globalConfigFile}get localConfigFile(){if(this._localConfigFile===void 0)this._localConfigFile=path3.join(process.cwd(),`.${this._appName}.ts`);return this._localConfigFile}get globalDataPath(){if(this._globalDataPath===void 0){let homeDir=os3.homedir(),baseDataDir=env.XDG_DATA_HOME||path3.join(homeDir,".local/share");this._globalDataPath=path3.join(baseDataDir,this._appName)}return this._globalDataPath}toObject(){return{globalConfigPath:this.globalConfigPath,globalConfigFile:this.globalConfigFile,localConfigFile:this.localConfigFile,globalDataPath:this.globalDataPath}}};extensionToFiletype=new Map([["astro","astro"],["bash","bash"],["c","c"],["cc","cpp"],["cjs","javascript"],["clj","clojure"],["cljs","clojure"],["cljc","clojure"],["cpp","cpp"],["cxx","cpp"],["cs","csharp"],["cts","typescript"],["ctsx","typescriptreact"],["dart","dart"],["diff","diff"],["edn","clojure"],["go","go"],["gemspec","ruby"],["groovy","groovy"],["h","c"],["handlebars","handlebars"],["hbs","handlebars"],["hpp","cpp"],["hxx","cpp"],["h++","cpp"],["hh","cpp"],["hrl","erlang"],["hs","haskell"],["htm","html"],["html","html"],["ini","ini"],["js","javascript"],["jsx","javascriptreact"],["jl","julia"],["json","json"],["ksh","bash"],["kt","kotlin"],["kts","kotlin"],["latex","latex"],["less","less"],["lua","lua"],["markdown","markdown"],["md","markdown"],["mdown","markdown"],["mkd","markdown"],["mjs","javascript"],["ml","ocaml"],["mli","ocaml"],["mts","typescript"],["mtsx","typescriptreact"],["patch","diff"],["php","php"],["pl","perl"],["pm","perl"],["ps1","powershell"],["psm1","powershell"],["py","python"],["pyi","python"],["r","r"],["rb","ruby"],["rake","ruby"],["rs","rust"],["ru","ruby"],["sass","sass"],["sc","scala"],["scala","scala"],["scss","scss"],["sh","bash"],["sql","sql"],["svelte","svelte"],["swift","swift"],["ts","typescript"],["tsx","typescriptreact"],["tex","latex"],["toml","toml"],["vue","vue"],["vim","vim"],["xml","xml"],["xsl","xsl"],["yaml","yaml"],["yml","yaml"],["zig","zig"],["zon","zig"],["zsh","bash"],["c++","cpp"],["erl","erlang"],["exs","elixir"],["ex","elixir"],["elm","elm"],["fsharp","fsharp"],["fs","fsharp"],["fsx","fsharp"],["fsscript","fsharp"],["fsi","fsharp"],["java","java"],["css","css"]]),basenameToFiletype=new Map([[".bash_aliases","bash"],[".bash_logout","bash"],[".bash_profile","bash"],[".bashrc","bash"],[".kshrc","bash"],[".profile","bash"],[".vimrc","vim"],[".zlogin","bash"],[".zlogout","bash"],[".zprofile","bash"],[".zshenv","bash"],[".zshrc","bash"],["appfile","ruby"],["berksfile","ruby"],["brewfile","ruby"],["cheffile","ruby"],["containerfile","dockerfile"],["dockerfile","dockerfile"],["fastfile","ruby"],["gemfile","ruby"],["gnumakefile","make"],["gvimrc","vim"],["guardfile","ruby"],["makefile","make"],["podfile","ruby"],["rakefile","ruby"],["thorfile","ruby"],["vagrantfile","ruby"]]);SYSTEM_CLOCK2=new SystemClock,OSC4_RESPONSE=/\x1b]4;(\d+);(?:(?:rgb:)([0-9a-fA-F]+)\/([0-9a-fA-F]+)\/([0-9a-fA-F]+)|#([0-9a-fA-F]{6}))(?:\x07|\x1b\\)/g,OSC_SPECIAL_RESPONSE=/\x1b](\d+);(?:(?:rgb:)([0-9a-fA-F]+)\/([0-9a-fA-F]+)\/([0-9a-fA-F]+)|#([0-9a-fA-F]{6}))(?:\x07|\x1b\\)/g;PASTE_TEXT_DECODER=new TextDecoder;URL_SCOPES=["markup.link.url","string.special.url"];pointerSize=process.arch==="x64"||process.arch==="arm64"?8:4,typeSizes={u8:1,bool_u8:1,bool_u32:4,u16:2,i16:2,u32:4,u64:8,f32:4,f64:8,pointer:pointerSize,i32:4},primitiveKeys=Object.keys(typeSizes);typeAlignments={...typeSizes},typeGetters={u8:(view,offset)=>view.getUint8(offset),bool_u8:(view,offset)=>Boolean(view.getUint8(offset)),bool_u32:(view,offset)=>Boolean(view.getUint32(offset,!0)),u16:(view,offset)=>view.getUint16(offset,!0),i16:(view,offset)=>view.getInt16(offset,!0),u32:(view,offset)=>view.getUint32(offset,!0),u64:(view,offset)=>view.getBigUint64(offset,!0),f32:(view,offset)=>view.getFloat32(offset,!0),f64:(view,offset)=>view.getFloat64(offset,!0),i32:(view,offset)=>view.getInt32(offset,!0),pointer:(view,offset)=>pointerSize===8?view.getBigUint64(offset,!0):BigInt(view.getUint32(offset,!0))};({pack:pointerPacker,unpack:pointerUnpacker}=primitivePackers("pointer"));encoder=new TextEncoder,decoder=new TextDecoder;StyledChunkStruct=defineStruct([["text","char*"],["text_len","u64",{lengthOf:"text"}],["fg","pointer",{optional:!0,packTransform:rgbaPackTransform,unpackTransform:rgbaUnpackTransform}],["bg","pointer",{optional:!0,packTransform:rgbaPackTransform,unpackTransform:rgbaUnpackTransform}],["attributes","u32",{default:0}],["link","char*",{default:""}],["link_len","u64",{lengthOf:"link"}]],{mapValue:(chunk)=>{if(!chunk.link||typeof chunk.link==="string")return chunk;return{...chunk,link:chunk.link.url}}}),HighlightStruct=defineStruct([["start","u32"],["end","u32"],["styleId","u32"],["priority","u8",{default:0}],["hlRef","u16",{default:0}]]),LogicalCursorStruct=defineStruct([["row","u32"],["col","u32"],["offset","u32"]]),VisualCursorStruct=defineStruct([["visualRow","u32"],["visualCol","u32"],["logicalRow","u32"],["logicalCol","u32"],["offset","u32"]]),UnicodeMethodEnum=defineEnum({wcwidth:0,unicode:1},"u8"),TerminalCapabilitiesStruct=defineStruct([["kitty_keyboard","bool_u8"],["kitty_graphics","bool_u8"],["rgb","bool_u8"],["unicode",UnicodeMethodEnum],["sgr_pixels","bool_u8"],["color_scheme_updates","bool_u8"],["explicit_width","bool_u8"],["scaled_text","bool_u8"],["sixel","bool_u8"],["focus_tracking","bool_u8"],["sync","bool_u8"],["bracketed_paste","bool_u8"],["hyperlinks","bool_u8"],["osc52","bool_u8"],["explicit_cursor_positioning","bool_u8"],["term_name","char*"],["term_name_len","u64",{lengthOf:"term_name"}],["term_version","char*"],["term_version_len","u64",{lengthOf:"term_version"}],["term_from_xtversion","bool_u8"]]),EncodedCharStruct=defineStruct([["width","u8"],["char","u32"]]),LineInfoStruct=defineStruct([["startCols",["u32"]],["startColsLen","u32",{lengthOf:"startCols"}],["widthCols",["u32"]],["widthColsLen","u32",{lengthOf:"widthCols"}],["sources",["u32"]],["sourcesLen","u32",{lengthOf:"sources"}],["wraps",["u32"]],["wrapsLen","u32",{lengthOf:"wraps"}],["widthColsMax","u32"]]),MeasureResultStruct=defineStruct([["lineCount","u32"],["widthColsMax","u32"]]),CursorStateStruct=defineStruct([["x","u32"],["y","u32"],["visible","bool_u8"],["style","u8"],["blinking","bool_u8"],["r","f32"],["g","f32"],["b","f32"],["a","f32"]]),CursorStyleOptionsStruct=defineStruct([["style","u8",{default:255}],["blinking","u8",{default:255}],["color","pointer",{optional:!0,packTransform:rgbaPackTransform,unpackTransform:rgbaUnpackTransform}],["cursor","u8",{default:255}]]),GridDrawOptionsStruct=defineStruct([["drawInner","bool_u8",{default:!0}],["drawOuter","bool_u8",{default:!0}]]),BuildOptionsStruct=defineStruct([["gpaSafeStats","bool_u8"],["gpaMemoryLimitTracking","bool_u8"]]),AllocatorStatsStruct=defineStruct([["totalRequestedBytes","u64"],["activeAllocations","u64"],["smallAllocations","u64"],["largeAllocations","u64"],["requestedBytesValid","bool_u8"]]),GrowthPolicyEnum=defineEnum({grow:0,block:1},"u8"),NativeSpanFeedOptionsStruct=defineStruct([["chunkSize","u32",{default:65536}],["initialChunks","u32",{default:2}],["maxBytes","u64",{default:0n}],["growthPolicy",GrowthPolicyEnum,{default:"grow"}],["autoCommitOnFull","bool_u8",{default:!0}],["spanQueueCapacity","u32",{default:0}]]),NativeSpanFeedStatsStruct=defineStruct([["bytesWritten","u64"],["spansCommitted","u64"],["chunks","u32"],["pendingSpans","u32"]]),SpanInfoStruct=defineStruct([["chunkPtr","pointer"],["offset","u32"],["len","u32"],["chunkIndex","u32"],["reserved","u32",{default:0}]],{reduceValue:(value)=>({chunkPtr:value.chunkPtr,offset:value.offset,len:value.len,chunkIndex:value.chunkIndex})}),ReserveInfoStruct=defineStruct([["ptr","pointer"],["len","u32"],["reserved","u32",{default:0}]],{reduceValue:(value)=>({ptr:value.ptr,len:value.len})}),module=await import(`@opentui/core-${process.platform}-${process.arch}/index.ts`),targetLibPath=module.default;if(isBunfsPath(targetLibPath))targetLibPath=targetLibPath.replace("../","");if(!existsSync210(targetLibPath))throw Error(`opentui is not supported on the current platform: ${process.platform}-${process.arch}`);registerEnvVar({name:"OTUI_DEBUG_FFI",description:"Enable debug logging for the FFI bindings.",type:"boolean",default:!1});registerEnvVar({name:"OTUI_TRACE_FFI",description:"Enable tracing for the FFI bindings.",type:"boolean",default:!1});registerEnvVar({name:"OPENTUI_FORCE_WCWIDTH",description:"Use wcwidth for character width calculations",type:"boolean",default:!1});registerEnvVar({name:"OPENTUI_FORCE_UNICODE",description:"Force Mode 2026 Unicode support in terminal capabilities",type:"boolean",default:!1});registerEnvVar({name:"OPENTUI_GRAPHICS",description:"Enable Kitty graphics protocol detection",type:"boolean",default:!0});registerEnvVar({name:"OPENTUI_FORCE_NOZWJ",description:"Use no_zwj width method (Unicode without ZWJ joining)",type:"boolean",default:!1});CURSOR_STYLE_TO_ID={block:0,line:1,underline:2,default:3},CURSOR_ID_TO_STYLE=["block","line","underline","default"],MOUSE_STYLE_TO_ID={default:0,pointer:1,text:2,crosshair:3,move:4,"not-allowed":5};((LogLevel3)=>{LogLevel3[LogLevel3.Error=0]="Error",LogLevel3[LogLevel3.Warn=1]="Warn",LogLevel3[LogLevel3.Info=2]="Info",LogLevel3[LogLevel3.Debug=3]="Debug"})(LogLevel2||={});try{opentuiLib=new FFIRenderLib(opentuiLibPath)}catch(error2){}BrandedRenderable=Symbol.for("@opentui/core/Renderable");((LayoutEvents2)=>{LayoutEvents2.LAYOUT_CHANGED="layout-changed",LayoutEvents2.ADDED="added",LayoutEvents2.REMOVED="removed",LayoutEvents2.RESIZED="resized"})(LayoutEvents||={});((RenderableEvents2)=>{RenderableEvents2.FOCUSED="focused",RenderableEvents2.BLURRED="blurred"})(RenderableEvents||={});BaseRenderable=class BaseRenderable extends EventEmitter5{[BrandedRenderable]=!0;static renderableNumber=1;_id;num;_dirty=!1;parent=null;_visible=!0;constructor(options){super();this.num=BaseRenderable.renderableNumber++,this._id=options.id??`renderable-${this.num}`}get id(){return this._id}set id(value){this._id=value}get isDirty(){return this._dirty}markClean(){this._dirty=!1}markDirty(){this._dirty=!0}destroy(){}destroyRecursively(){}get visible(){return this._visible}set visible(value){this._visible=value}};yogaConfig=src_default2.Config.create();yogaConfig.setUseWebDefaults(!1);yogaConfig.setPointScaleFactor(1);Renderable=class Renderable extends BaseRenderable{static renderablesByNumber=new Map;_isDestroyed=!1;_ctx;_translateX=0;_translateY=0;_x=0;_y=0;_width;_height;_widthValue=0;_heightValue=0;_zIndex;selectable=!1;buffered;frameBuffer=null;_focusable=!1;_focused=!1;keypressHandler=null;pasteHandler=null;_live=!1;_liveCount=0;_sizeChangeListener=void 0;_mouseListener=null;_mouseListeners={};_pasteListener=void 0;_keyListeners={};yogaNode;_positionType="relative";_overflow="visible";_position={};_opacity=1;_flexShrink=1;renderableMapById=new Map;_childrenInLayoutOrder=[];_childrenInZIndexOrder=[];needsZIndexSort=!1;parent=null;childrenPrimarySortDirty=!0;childrenSortedByPrimaryAxis=[];_shouldUpdateBefore=new Set;onLifecyclePass=null;renderBefore;renderAfter;constructor(ctx,options){super(options);if(this._ctx=ctx,Renderable.renderablesByNumber.set(this.num,this),validateOptions(this.id,options),this.renderBefore=options.renderBefore,this.renderAfter=options.renderAfter,this._width=options.width??"auto",this._height=options.height??"auto",typeof this._width==="number")this._widthValue=this._width;if(typeof this._height==="number")this._heightValue=this._height;if(this._zIndex=options.zIndex??0,this._visible=options.visible!==!1,this.buffered=options.buffered??!1,this._live=options.live??!1,this._liveCount=this._live&&this._visible?1:0,this._opacity=options.opacity!==void 0?Math.max(0,Math.min(1,options.opacity)):1,this.yogaNode=src_default2.Node.create(yogaConfig),this.yogaNode.setDisplay(this._visible?Display.Flex:Display.None),this.setupYogaProperties(options),this.applyEventOptions(options),this.buffered)this.createFrameBuffer()}get id(){return this._id}set id(value){if(this.parent)this.parent.renderableMapById.delete(this.id),this.parent.renderableMapById.set(value,this);super.id=value}get focusable(){return this._focusable}set focusable(value){this._focusable=value}get ctx(){return this._ctx}get visible(){return this._visible}get primaryAxis(){let dir=this.yogaNode.getFlexDirection();return dir===2||dir===3?"row":"column"}set visible(value){if(this._visible===value)return;let wasVisible=this._visible;if(this._visible=value,this.yogaNode.setDisplay(value?Display.Flex:Display.None),this._live){if(!wasVisible&&value)this.propagateLiveCount(1);else if(wasVisible&&!value)this.propagateLiveCount(-1)}if(this._focused)this.blur();this.requestRender()}get opacity(){return this._opacity}set opacity(value){let clamped=Math.max(0,Math.min(1,value));if(this._opacity!==clamped)this._opacity=clamped,this.requestRender()}hasSelection(){return!1}onSelectionChanged(selection2){return!1}getSelectedText(){return""}shouldStartSelection(x,y){return!1}focus(){if(this._isDestroyed||this._focused||!this._focusable)return;this._ctx.focusRenderable(this),this._focused=!0,this.requestRender(),this.keypressHandler=(key)=>{if(this._isDestroyed)return;if(this._keyListeners.down?.(key),this._isDestroyed)return;if(!key.defaultPrevented&&this.handleKeyPress)this.handleKeyPress(key)},this.pasteHandler=(event)=>{if(this._isDestroyed)return;if(this._pasteListener?.call(this,event),this._isDestroyed)return;if(!event.defaultPrevented&&this.handlePaste)this.handlePaste(event)},this.ctx._internalKeyInput.onInternal("keypress",this.keypressHandler),this.ctx._internalKeyInput.onInternal("paste",this.pasteHandler),this.emit("focused")}blur(){if(!this._focused||!this._focusable)return;if(this._focused=!1,this.requestRender(),this.keypressHandler)this.ctx._internalKeyInput.offInternal("keypress",this.keypressHandler),this.keypressHandler=null;if(this.pasteHandler)this.ctx._internalKeyInput.offInternal("paste",this.pasteHandler),this.pasteHandler=null;this.emit("blurred")}get focused(){return this._focused}get live(){return this._live}get liveCount(){return this._liveCount}set live(value){if(this._live===value)return;if(this._live=value,this._visible){let delta=value?1:-1;this.propagateLiveCount(delta)}}propagateLiveCount(delta){this._liveCount+=delta,this.parent?.propagateLiveCount(delta)}findDescendantById(id){for(let child of this._childrenInLayoutOrder){if(child.id===id)return child;if(isRenderable(child)){let found=child.findDescendantById(id);if(found)return found}}return}requestRender(){this.markDirty(),this._ctx.requestRender()}get translateX(){return this._translateX}set translateX(value){if(this._translateX===value)return;if(this._translateX=value,this.parent)this.parent.childrenPrimarySortDirty=!0;this.requestRender()}get translateY(){return this._translateY}set translateY(value){if(this._translateY===value)return;if(this._translateY=value,this.parent)this.parent.childrenPrimarySortDirty=!0;this.requestRender()}get x(){if(this.parent)return this.parent.x+this._x+this._translateX;return this._x+this._translateX}set x(value){this.left=value}get top(){return this._position.top}set top(value){if(isPositionType(value)||value===void 0)this.setPosition({top:value})}get right(){return this._position.right}set right(value){if(isPositionType(value)||value===void 0)this.setPosition({right:value})}get bottom(){return this._position.bottom}set bottom(value){if(isPositionType(value)||value===void 0)this.setPosition({bottom:value})}get left(){return this._position.left}set left(value){if(isPositionType(value)||value===void 0)this.setPosition({left:value})}get y(){if(this.parent)return this.parent.y+this._y+this._translateY;return this._y+this._translateY}set y(value){this.top=value}get width(){return this._widthValue}set width(value){if(isDimensionType(value)){if(this._width=value,this.yogaNode.setWidth(value),typeof value==="number"&&this._flexShrink===1)this._flexShrink=0,this.yogaNode.setFlexShrink(0);this.requestRender()}}get height(){return this._heightValue}set height(value){if(isDimensionType(value)){if(this._height=value,this.yogaNode.setHeight(value),typeof value==="number"&&this._flexShrink===1)this._flexShrink=0,this.yogaNode.setFlexShrink(0);this.requestRender()}}get zIndex(){return this._zIndex}set zIndex(value){if(this._zIndex!==value)this._zIndex=value,this.parent?.requestZIndexSort(),this.requestRender()}requestZIndexSort(){this.needsZIndexSort=!0}ensureZIndexSorted(){if(this.needsZIndexSort)this._childrenInZIndexOrder.sort((a,b2)=>a.zIndex>b2.zIndex?1:a.zIndex<b2.zIndex?-1:0),this.needsZIndexSort=!1}getChildrenSortedByPrimaryAxis(){if(!this.childrenPrimarySortDirty&&this.childrenSortedByPrimaryAxis.length===this._childrenInLayoutOrder.length)return this.childrenSortedByPrimaryAxis;let dir=this.yogaNode.getFlexDirection(),axis=dir===2||dir===3?"x":"y",sorted=[...this._childrenInLayoutOrder];return sorted.sort((a,b2)=>{let va=axis==="y"?a.y:a.x,vb=axis==="y"?b2.y:b2.x;return va-vb}),this.childrenSortedByPrimaryAxis=sorted,this.childrenPrimarySortDirty=!1,this.childrenSortedByPrimaryAxis}setupYogaProperties(options){let node=this.yogaNode;if(isFlexBasisType(options.flexBasis))node.setFlexBasis(options.flexBasis);if(isSizeType(options.minWidth))node.setMinWidth(options.minWidth);if(isSizeType(options.minHeight))node.setMinHeight(options.minHeight);if(options.flexGrow!==void 0)node.setFlexGrow(options.flexGrow);else node.setFlexGrow(0);if(options.flexShrink!==void 0)this._flexShrink=options.flexShrink,node.setFlexShrink(options.flexShrink);else{let hasExplicitWidth=typeof options.width==="number",hasExplicitHeight=typeof options.height==="number";this._flexShrink=hasExplicitWidth||hasExplicitHeight?0:1,node.setFlexShrink(this._flexShrink)}if(node.setFlexDirection(parseFlexDirection(options.flexDirection)),node.setFlexWrap(parseWrap(options.flexWrap)),node.setAlignItems(parseAlignItems(options.alignItems)),node.setJustifyContent(parseJustify(options.justifyContent)),node.setAlignSelf(parseAlign(options.alignSelf)),isDimensionType(options.width))this._width=options.width,this.yogaNode.setWidth(options.width);if(isDimensionType(options.height))this._height=options.height,this.yogaNode.setHeight(options.height);if(this._positionType=options.position==="absolute"?"absolute":"relative",this._positionType!=="relative")node.setPositionType(parsePositionType(this._positionType));if(this._overflow=options.overflow==="hidden"?"hidden":options.overflow==="scroll"?"scroll":"visible",this._overflow!=="visible")node.setOverflow(parseOverflow(this._overflow));if(options.top!==void 0||options.right!==void 0||options.bottom!==void 0||options.left!==void 0)this._position={top:options.top,right:options.right,bottom:options.bottom,left:options.left},this.updateYogaPosition(this._position);if(isSizeType(options.maxWidth))node.setMaxWidth(options.maxWidth);if(isSizeType(options.maxHeight))node.setMaxHeight(options.maxHeight);this.setupMarginAndPadding(options)}setupMarginAndPadding(options){let node=this.yogaNode;if(isMarginType(options.margin))node.setMargin(Edge.All,options.margin);if(isMarginType(options.marginX))node.setMargin(Edge.Horizontal,options.marginX);if(isMarginType(options.marginY))node.setMargin(Edge.Vertical,options.marginY);if(isMarginType(options.marginTop))node.setMargin(Edge.Top,options.marginTop);if(isMarginType(options.marginRight))node.setMargin(Edge.Right,options.marginRight);if(isMarginType(options.marginBottom))node.setMargin(Edge.Bottom,options.marginBottom);if(isMarginType(options.marginLeft))node.setMargin(Edge.Left,options.marginLeft);if(isPaddingType(options.padding))node.setPadding(Edge.All,options.padding);if(isPaddingType(options.paddingX))node.setPadding(Edge.Horizontal,options.paddingX);if(isPaddingType(options.paddingY))node.setPadding(Edge.Vertical,options.paddingY);if(isPaddingType(options.paddingTop))node.setPadding(Edge.Top,options.paddingTop);if(isPaddingType(options.paddingRight))node.setPadding(Edge.Right,options.paddingRight);if(isPaddingType(options.paddingBottom))node.setPadding(Edge.Bottom,options.paddingBottom);if(isPaddingType(options.paddingLeft))node.setPadding(Edge.Left,options.paddingLeft)}set position(positionType){if(!isPositionTypeType(positionType)||this._positionType===positionType)return;this._positionType=positionType,this.yogaNode.setPositionType(parsePositionType(positionType)),this.requestRender()}get overflow(){return this._overflow}set overflow(overflow){if(!isOverflowType(overflow)||this._overflow===overflow)return;this._overflow=overflow,this.yogaNode.setOverflow(parseOverflow(overflow)),this.requestRender()}setPosition(position){this._position={...this._position,...position},this.updateYogaPosition(position)}updateYogaPosition(position){let node=this.yogaNode,{top,right,bottom,left}=position;if(isPositionType(top))if(top==="auto")node.setPositionAuto(Edge.Top);else node.setPosition(Edge.Top,top);if(isPositionType(right))if(right==="auto")node.setPositionAuto(Edge.Right);else node.setPosition(Edge.Right,right);if(isPositionType(bottom))if(bottom==="auto")node.setPositionAuto(Edge.Bottom);else node.setPosition(Edge.Bottom,bottom);if(isPositionType(left))if(left==="auto")node.setPositionAuto(Edge.Left);else node.setPosition(Edge.Left,left);this.requestRender()}set flexGrow(grow){if(grow==null)this.yogaNode.setFlexGrow(0);else this.yogaNode.setFlexGrow(grow);this.requestRender()}set flexShrink(shrink){let value=shrink==null?1:shrink;this._flexShrink=value,this.yogaNode.setFlexShrink(value),this.requestRender()}set flexDirection(direction){this.yogaNode.setFlexDirection(parseFlexDirection(direction)),this.requestRender()}set flexWrap(wrap){this.yogaNode.setFlexWrap(parseWrap(wrap)),this.requestRender()}set alignItems(alignItems){this.yogaNode.setAlignItems(parseAlignItems(alignItems)),this.requestRender()}set justifyContent(justifyContent){this.yogaNode.setJustifyContent(parseJustify(justifyContent)),this.requestRender()}set alignSelf(alignSelf){this.yogaNode.setAlignSelf(parseAlign(alignSelf)),this.requestRender()}set flexBasis(basis){if(isFlexBasisType(basis))this.yogaNode.setFlexBasis(basis),this.requestRender()}set minWidth(minWidth){if(isSizeType(minWidth))this.yogaNode.setMinWidth(minWidth),this.requestRender()}set maxWidth(maxWidth){if(isSizeType(maxWidth))this.yogaNode.setMaxWidth(maxWidth),this.requestRender()}set minHeight(minHeight){if(isSizeType(minHeight))this.yogaNode.setMinHeight(minHeight),this.requestRender()}set maxHeight(maxHeight){if(isSizeType(maxHeight))this.yogaNode.setMaxHeight(maxHeight),this.requestRender()}set margin(margin){if(isMarginType(margin))this.yogaNode.setMargin(Edge.All,margin),this.requestRender()}set marginX(marginX){if(isMarginType(marginX))this.yogaNode.setMargin(Edge.Horizontal,marginX),this.requestRender()}set marginY(marginY){if(isMarginType(marginY))this.yogaNode.setMargin(Edge.Vertical,marginY),this.requestRender()}set marginTop(margin){if(isMarginType(margin))this.yogaNode.setMargin(Edge.Top,margin),this.requestRender()}set marginRight(margin){if(isMarginType(margin))this.yogaNode.setMargin(Edge.Right,margin),this.requestRender()}set marginBottom(margin){if(isMarginType(margin))this.yogaNode.setMargin(Edge.Bottom,margin),this.requestRender()}set marginLeft(margin){if(isMarginType(margin))this.yogaNode.setMargin(Edge.Left,margin),this.requestRender()}set padding(padding){if(isPaddingType(padding))this.yogaNode.setPadding(Edge.All,padding),this.requestRender()}set paddingX(paddingX){if(isPaddingType(paddingX))this.yogaNode.setPadding(Edge.Horizontal,paddingX),this.requestRender()}set paddingY(paddingY){if(isPaddingType(paddingY))this.yogaNode.setPadding(Edge.Vertical,paddingY),this.requestRender()}set paddingTop(padding){if(isPaddingType(padding))this.yogaNode.setPadding(Edge.Top,padding),this.requestRender()}set paddingRight(padding){if(isPaddingType(padding))this.yogaNode.setPadding(Edge.Right,padding),this.requestRender()}set paddingBottom(padding){if(isPaddingType(padding))this.yogaNode.setPadding(Edge.Bottom,padding),this.requestRender()}set paddingLeft(padding){if(isPaddingType(padding))this.yogaNode.setPadding(Edge.Left,padding),this.requestRender()}getLayoutNode(){return this.yogaNode}updateFromLayout(){let layout=this.yogaNode.getComputedLayout(),oldX=this._x,oldY=this._y,oldWidth=this._widthValue,oldHeight=this._heightValue;this._x=layout.left,this._y=layout.top;let newWidth=Math.max(layout.width,1),newHeight=Math.max(layout.height,1),sizeChanged=oldWidth!==newWidth||oldHeight!==newHeight;if(this._widthValue=newWidth,this._heightValue=newHeight,sizeChanged)this.onLayoutResize(newWidth,newHeight);if(oldX!==this._x||oldY!==this._y){if(this.parent)this.parent.childrenPrimarySortDirty=!0}}onLayoutResize(width,height2){if(this._visible)this.handleFrameBufferResize(width,height2),this.onResize(width,height2),this.requestRender()}handleFrameBufferResize(width,height2){if(!this.buffered)return;if(width<=0||height2<=0)return;if(this.frameBuffer)this.frameBuffer.resize(width,height2);else this.createFrameBuffer()}createFrameBuffer(){let w=this.width,h=this.height;if(w<=0||h<=0)return;try{let widthMethod=this._ctx.widthMethod;this.frameBuffer=OptimizedBuffer.create(w,h,widthMethod,{respectAlpha:!0,id:`framebuffer-${this.id}`})}catch(error2){console.error(`Failed to create frame buffer for ${this.id}:`,error2),this.frameBuffer=null}}onResize(width,height2){this.onSizeChange?.(),this.emit("resize")}replaceParent(obj){if(obj.parent)obj.parent.remove(obj.id);obj.parent=this}add(obj,index){if(!obj)return-1;let renderable=maybeMakeRenderable(this._ctx,obj);if(!renderable)return-1;if(renderable.isDestroyed)return console.warn(`Renderable with id ${renderable.id} was already destroyed, skipping add`),-1;let anchorRenderable=index!==void 0?this._childrenInLayoutOrder[index]:void 0;if(anchorRenderable)return this.insertBefore(renderable,anchorRenderable);if(renderable.parent===this)this.yogaNode.removeChild(renderable.getLayoutNode()),this._childrenInLayoutOrder.splice(this._childrenInLayoutOrder.indexOf(renderable),1);else{if(this.replaceParent(renderable),this.needsZIndexSort=!0,this.renderableMapById.set(renderable.id,renderable),this._childrenInZIndexOrder.push(renderable),typeof renderable.onLifecyclePass==="function")this._ctx.registerLifecyclePass(renderable);if(renderable._liveCount>0)this.propagateLiveCount(renderable._liveCount)}let childLayoutNode=renderable.getLayoutNode(),insertedIndex=this._childrenInLayoutOrder.length;return this._childrenInLayoutOrder.push(renderable),this.yogaNode.insertChild(childLayoutNode,insertedIndex),this.childrenPrimarySortDirty=!0,this._shouldUpdateBefore.add(renderable),this.requestRender(),insertedIndex}insertBefore(obj,anchor){if(!anchor)return this.add(obj);if(!obj)return-1;let renderable=maybeMakeRenderable(this._ctx,obj);if(!renderable)return-1;if(renderable.isDestroyed)return console.warn(`Renderable with id ${renderable.id} was already destroyed, skipping insertBefore`),-1;if(!isRenderable(anchor))throw Error("Anchor must be a Renderable");if(anchor.isDestroyed)return console.warn(`Anchor with id ${anchor.id} was already destroyed, skipping insertBefore`),-1;if(!this.renderableMapById.has(anchor.id))return console.warn(`Anchor with id ${anchor.id} does not exist within the parent ${this.id}, skipping insertBefore`),-1;if(renderable===anchor||renderable.id===anchor.id)return console.warn(`Anchor is the same as the node ${renderable.id} being inserted, skipping insertBefore`),-1;if(renderable.parent===this)this.yogaNode.removeChild(renderable.getLayoutNode()),this._childrenInLayoutOrder.splice(this._childrenInLayoutOrder.indexOf(renderable),1);else{if(this.replaceParent(renderable),this.needsZIndexSort=!0,this.renderableMapById.set(renderable.id,renderable),this._childrenInZIndexOrder.push(renderable),typeof renderable.onLifecyclePass==="function")this._ctx.registerLifecyclePass(renderable);if(renderable._liveCount>0)this.propagateLiveCount(renderable._liveCount)}this.childrenPrimarySortDirty=!0;let anchorIndex=this._childrenInLayoutOrder.indexOf(anchor),insertedIndex=Math.max(0,Math.min(anchorIndex,this._childrenInLayoutOrder.length));return this._childrenInLayoutOrder.splice(insertedIndex,0,renderable),this.yogaNode.insertChild(renderable.getLayoutNode(),insertedIndex),this._shouldUpdateBefore.add(renderable),this.requestRender(),insertedIndex}getRenderable(id){return this.renderableMapById.get(id)}remove(id){if(!id)return;if(this.renderableMapById.has(id)){let obj=this.renderableMapById.get(id);if(obj){if(obj._liveCount>0)this.propagateLiveCount(-obj._liveCount);let childLayoutNode=obj.getLayoutNode();this.yogaNode.removeChild(childLayoutNode),this.requestRender(),obj.onRemove(),obj.parent=null,this._ctx.unregisterLifecyclePass(obj),this.renderableMapById.delete(id);let index=this._childrenInLayoutOrder.findIndex((obj2)=>obj2.id===id);if(index!==-1)this._childrenInLayoutOrder.splice(index,1);let zIndexIndex=this._childrenInZIndexOrder.findIndex((obj2)=>obj2.id===id);if(zIndexIndex!==-1)this._childrenInZIndexOrder.splice(zIndexIndex,1);this.childrenPrimarySortDirty=!0}}}onRemove(){}getChildren(){return[...this._childrenInLayoutOrder]}getChildrenCount(){return this._childrenInLayoutOrder.length}updateLayout(deltaTime,renderList=[]){if(!this.visible)return;if(this.onUpdate(deltaTime),this._isDestroyed)return;if(this.updateFromLayout(),this._shouldUpdateBefore.size>0){for(let child of this._shouldUpdateBefore)if(!child.isDestroyed)child.updateFromLayout();this._shouldUpdateBefore.clear()}if(this._isDestroyed)return;let shouldPushOpacity=this._opacity<1;if(shouldPushOpacity)renderList.push({action:"pushOpacity",opacity:this._opacity});renderList.push({action:"render",renderable:this}),this.ensureZIndexSorted();let shouldPushScissor=this._overflow!=="visible"&&this.width>0&&this.height>0;if(shouldPushScissor){let scissorRect=this.getScissorRect();renderList.push({action:"pushScissorRect",x:scissorRect.x,y:scissorRect.y,width:scissorRect.width,height:scissorRect.height,screenX:this.x,screenY:this.y})}let visibleChildren=this._getVisibleChildren();for(let child of this._childrenInZIndexOrder){if(!visibleChildren.includes(child.num)){child.updateFromLayout();continue}child.updateLayout(deltaTime,renderList)}if(shouldPushScissor)renderList.push({action:"popScissorRect"});if(shouldPushOpacity)renderList.push({action:"popOpacity"})}render(buffer2,deltaTime){let renderBuffer=buffer2;if(this.buffered&&this.frameBuffer)renderBuffer=this.frameBuffer;if(this.renderBefore)this.renderBefore.call(this,renderBuffer,deltaTime);if(this.renderSelf(renderBuffer,deltaTime),this.renderAfter)this.renderAfter.call(this,renderBuffer,deltaTime);if(this.markClean(),this._ctx.addToHitGrid(this.x,this.y,this.width,this.height,this.num),this.buffered&&this.frameBuffer)buffer2.drawFrameBuffer(this.x,this.y,this.frameBuffer)}_getVisibleChildren(){return this._childrenInZIndexOrder.map((child)=>child.num)}onUpdate(deltaTime){}getScissorRect(){return{x:this.buffered?0:this.x,y:this.buffered?0:this.y,width:this.width,height:this.height}}renderSelf(buffer2,deltaTime){}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)return;if(this._isDestroyed=!0,this.parent)this.parent.remove(this.id);if(this.frameBuffer)this.frameBuffer.destroy(),this.frameBuffer=null;for(let child of this._childrenInLayoutOrder)this.remove(child.id);this._childrenInLayoutOrder=[],this.renderableMapById.clear(),Renderable.renderablesByNumber.delete(this.num),this.blur(),this.removeAllListeners(),this.destroySelf();try{this.yogaNode.free()}catch(e){}}destroyRecursively(){let children=[...this._childrenInLayoutOrder];for(let child of children)child.destroyRecursively();this.destroy()}destroySelf(){}processMouseEvent(event){if(this._mouseListener?.call(this,event),this._mouseListeners[event.type]?.call(this,event),this.onMouseEvent(event),this.parent&&!event.propagationStopped)this.parent.processMouseEvent(event)}onMouseEvent(event){}set onMouse(handler){if(handler)this._mouseListener=handler;else this._mouseListener=null}set onMouseDown(handler){if(handler)this._mouseListeners.down=handler;else delete this._mouseListeners.down}set onMouseUp(handler){if(handler)this._mouseListeners.up=handler;else delete this._mouseListeners.up}set onMouseMove(handler){if(handler)this._mouseListeners.move=handler;else delete this._mouseListeners.move}set onMouseDrag(handler){if(handler)this._mouseListeners.drag=handler;else delete this._mouseListeners.drag}set onMouseDragEnd(handler){if(handler)this._mouseListeners["drag-end"]=handler;else delete this._mouseListeners["drag-end"]}set onMouseDrop(handler){if(handler)this._mouseListeners.drop=handler;else delete this._mouseListeners.drop}set onMouseOver(handler){if(handler)this._mouseListeners.over=handler;else delete this._mouseListeners.over}set onMouseOut(handler){if(handler)this._mouseListeners.out=handler;else delete this._mouseListeners.out}set onMouseScroll(handler){if(handler)this._mouseListeners.scroll=handler;else delete this._mouseListeners.scroll}set onPaste(handler){this._pasteListener=handler}get onPaste(){return this._pasteListener}set onKeyDown(handler){if(handler)this._keyListeners.down=handler;else delete this._keyListeners.down}get onKeyDown(){return this._keyListeners.down}set onSizeChange(handler){this._sizeChangeListener=handler}get onSizeChange(){return this._sizeChangeListener}applyEventOptions(options){this.onMouse=options.onMouse,this.onMouseDown=options.onMouseDown,this.onMouseUp=options.onMouseUp,this.onMouseMove=options.onMouseMove,this.onMouseDrag=options.onMouseDrag,this.onMouseDragEnd=options.onMouseDragEnd,this.onMouseDrop=options.onMouseDrop,this.onMouseOver=options.onMouseOver,this.onMouseOut=options.onMouseOut,this.onMouseScroll=options.onMouseScroll,this.onPaste=options.onPaste,this.onKeyDown=options.onKeyDown,this.onSizeChange=options.onSizeChange}};RootRenderable=class RootRenderable extends Renderable{renderList=[];constructor(ctx){super(ctx,{id:"__root__",zIndex:0,visible:!0,width:ctx.width,height:ctx.height,enableLayout:!0});if(this.yogaNode)this.yogaNode.free();this.yogaNode=src_default2.Node.create(yogaConfig),this.yogaNode.setWidth(ctx.width),this.yogaNode.setHeight(ctx.height),this.yogaNode.setFlexDirection(FlexDirection.Column),this.calculateLayout()}render(buffer2,deltaTime){if(!this.visible)return;for(let renderable of this._ctx.getLifecyclePasses())renderable.onLifecyclePass?.call(renderable);if(this.yogaNode.isDirty())this.calculateLayout();this.renderList.length=0,this.updateLayout(deltaTime,this.renderList),this._ctx.clearHitGridScissorRects();for(let i2=1;i2<this.renderList.length;i2++){let command=this.renderList[i2];switch(command.action){case"render":if(!command.renderable.isDestroyed)command.renderable.render(buffer2,deltaTime);break;case"pushScissorRect":buffer2.pushScissorRect(command.x,command.y,command.width,command.height),this._ctx.pushHitGridScissorRect(command.screenX,command.screenY,command.width,command.height);break;case"popScissorRect":buffer2.popScissorRect(),this._ctx.popHitGridScissorRect();break;case"pushOpacity":buffer2.pushOpacity(command.opacity);break;case"popOpacity":buffer2.popOpacity();break}}}propagateLiveCount(delta){let oldCount=this._liveCount;if(this._liveCount+=delta,oldCount===0&&this._liveCount>0)this._ctx.requestLive();else if(oldCount>0&&this._liveCount===0)this._ctx.dropLive()}calculateLayout(){this.yogaNode.calculateLayout(this.width,this.height,Direction.LTR),this.emit("layout-changed")}resize(width,height2){this.width=width,this.height=height2,this.emit("resized",{width,height:height2})}};BrandedVNode=Symbol.for("@opentui/core/VNode");Capture=class Capture extends EventEmitter6{output=[];constructor(){super()}get size(){return this.output.length}write(stream,data){this.output.push({stream,output:data}),this.emit("write",stream,data)}claimOutput(){let output=this.output.map((o)=>o.output).join("");return this.clear(),output}clear(){this.output=[]}};CapturedWritableStream=class CapturedWritableStream extends Writable{stream;capture;isTTY=!0;columns=process.stdout.columns||80;rows=process.stdout.rows||24;constructor(stream,capture){super();this.stream=stream,this.capture=capture}_write(chunk,encoding,callback){let data=chunk.toString();this.capture.write(this.stream,data),callback()}getColorDepth(){return process.stdout.getColorDepth?.()||8}};defaultKeyAliases={enter:"return",esc:"escape"};capture=singleton("ConsoleCapture",()=>new Capture);registerEnvVar({name:"OTUI_USE_CONSOLE",description:"Whether to use the console. Will not capture console output if set to false.",type:"boolean",default:!0});registerEnvVar({name:"SHOW_CONSOLE",description:"Show the console at startup if set to true.",type:"boolean",default:!1});TerminalConsoleCache=class TerminalConsoleCache extends EventEmitter7{_cachedLogs=[];MAX_CACHE_SIZE=1000;_collectCallerInfo=!1;_cachingEnabled=!0;_originalConsole=null;get cachedLogs(){return this._cachedLogs}constructor(){super()}activate(){if(!this._originalConsole)this._originalConsole=global.console;this.setupConsoleCapture(),this.overrideConsoleMethods()}setupConsoleCapture(){if(!env.OTUI_USE_CONSOLE)return;let mockStdout=new CapturedWritableStream("stdout",capture),mockStderr=new CapturedWritableStream("stderr",capture);global.console=new Console({stdout:mockStdout,stderr:mockStderr,colorMode:!0,inspectOptions:{compact:!1,breakLength:80,depth:2}})}overrideConsoleMethods(){console.log=(...args)=>{this.appendToConsole("LOG",...args)},console.info=(...args)=>{this.appendToConsole("INFO",...args)},console.warn=(...args)=>{this.appendToConsole("WARN",...args)},console.error=(...args)=>{this.appendToConsole("ERROR",...args)},console.debug=(...args)=>{this.appendToConsole("DEBUG",...args)}}setCollectCallerInfo(enabled){this._collectCallerInfo=enabled}clearConsole(){this._cachedLogs=[]}setCachingEnabled(enabled){this._cachingEnabled=enabled}deactivate(){this.restoreOriginalConsole()}restoreOriginalConsole(){if(this._originalConsole)global.console=this._originalConsole;this.setupConsoleCapture()}addLogEntry(level,...args){let callerInfo=this._collectCallerInfo?getCallerInfo():null,logEntry=[new Date,level,args,callerInfo];if(this._cachingEnabled){if(this._cachedLogs.length>=this.MAX_CACHE_SIZE)this._cachedLogs.shift();this._cachedLogs.push(logEntry)}return logEntry}appendToConsole(level,...args){if(this._cachedLogs.length>=this.MAX_CACHE_SIZE)this._cachedLogs.shift();let entry=this.addLogEntry(level,...args);this.emit("entry",entry)}destroy(){this.deactivate()}};terminalConsoleCache=singleton("TerminalConsoleCache",()=>{let terminalConsoleCache2=new TerminalConsoleCache;return process.on("exit",()=>{terminalConsoleCache2.destroy()}),terminalConsoleCache2});((ConsolePosition2)=>{ConsolePosition2.TOP="top",ConsolePosition2.BOTTOM="bottom",ConsolePosition2.LEFT="left",ConsolePosition2.RIGHT="right"})(ConsolePosition||={});defaultConsoleKeybindings=[{name:"up",action:"scroll-up"},{name:"down",action:"scroll-down"},{name:"up",shift:!0,action:"scroll-to-top"},{name:"down",shift:!0,action:"scroll-to-bottom"},{name:"p",ctrl:!0,action:"position-previous"},{name:"o",ctrl:!0,action:"position-next"},{name:"+",action:"size-increase"},{name:"=",shift:!0,action:"size-increase"},{name:"-",action:"size-decrease"},{name:"s",ctrl:!0,action:"save-logs"},{name:"c",ctrl:!0,shift:!0,action:"copy-selection"}],DEFAULT_CONSOLE_OPTIONS={position:"bottom",sizePercent:30,zIndex:1/0,colorInfo:"#00FFFF",colorWarn:"#FFFF00",colorError:"#FF0000",colorDebug:"#808080",colorDefault:"#FFFFFF",backgroundColor:RGBA.fromValues(0.1,0.1,0.1,0.7),startInDebugMode:!1,title:"Console",titleBarColor:RGBA.fromValues(0.05,0.05,0.05,0.7),titleBarTextColor:"#FFFFFF",cursorColor:"#00A0FF",maxStoredLogs:2000,maxDisplayLines:3000,onCopySelection:void 0,keyBindings:void 0,keyAliasMap:void 0,selectionColor:RGBA.fromValues(0.3,0.5,0.8,0.5),copyButtonColor:"#00A0FF"};TerminalConsole=class TerminalConsole extends EventEmitter7{isVisible=!1;isFocused=!1;renderer;keyHandler;options;_debugModeEnabled=!1;frameBuffer=null;consoleX=0;consoleY=0;consoleWidth=0;consoleHeight=0;scrollTopIndex=0;isScrolledToBottom=!0;currentLineIndex=0;_displayLines=[];_allLogEntries=[];_needsFrameBufferUpdate=!1;_entryListener;_selectionStart=null;_selectionEnd=null;_isDragging=!1;_copyButtonBounds={x:0,y:0,width:0,height:0};_autoScrollInterval=null;clock;_keyBindingsMap;_keyAliasMap;_keyBindings;_mergedKeyBindings;_actionHandlers;markNeedsRerender(){this._needsFrameBufferUpdate=!0,this.renderer.requestRender()}getCopyButtonLabel(){let copyBindings=this._mergedKeyBindings.filter((b2)=>b2.action==="copy-selection"),copyBinding=copyBindings[copyBindings.length-1];if(copyBinding)return`[Copy (${keyBindingToString(copyBinding)})]`;return"[Copy]"}_rgbaInfo;_rgbaWarn;_rgbaError;_rgbaDebug;_rgbaDefault;backgroundColor;_rgbaTitleBar;_rgbaTitleBarText;_title;_rgbaCursor;_rgbaSelection;_rgbaCopyButton;_positions=["top","right","bottom","left"];constructor(renderer,options={}){super();if(this.renderer=renderer,this.clock=options.clock??new SystemClock,this.options={...DEFAULT_CONSOLE_OPTIONS,...options},this.keyHandler=this.handleKeyPress.bind(this),this._debugModeEnabled=this.options.startInDebugMode,terminalConsoleCache.setCollectCallerInfo(this._debugModeEnabled),this._rgbaInfo=parseColor(this.options.colorInfo),this._rgbaWarn=parseColor(this.options.colorWarn),this._rgbaError=parseColor(this.options.colorError),this._rgbaDebug=parseColor(this.options.colorDebug),this._rgbaDefault=parseColor(this.options.colorDefault),this.backgroundColor=parseColor(this.options.backgroundColor),this._rgbaTitleBar=parseColor(this.options.titleBarColor),this._rgbaTitleBarText=parseColor(this.options.titleBarTextColor||this.options.colorDefault),this._title=this.options.title,this._rgbaCursor=parseColor(this.options.cursorColor),this._rgbaSelection=parseColor(this.options.selectionColor),this._rgbaCopyButton=parseColor(this.options.copyButtonColor),this._keyAliasMap=mergeKeyAliases(defaultKeyAliases,options.keyAliasMap||{}),this._keyBindings=options.keyBindings||[],this._mergedKeyBindings=mergeKeyBindings(defaultConsoleKeybindings,this._keyBindings),this._keyBindingsMap=buildKeyBindingsMap(this._mergedKeyBindings,this._keyAliasMap),this._actionHandlers=this.buildActionHandlers(),this._updateConsoleDimensions(),this._scrollToBottom(!0),this._entryListener=(logEntry)=>{this._handleNewLog(logEntry)},terminalConsoleCache.on("entry",this._entryListener),env.SHOW_CONSOLE)this.show()}buildActionHandlers(){return new Map([["scroll-up",()=>this.scrollUp()],["scroll-down",()=>this.scrollDown()],["scroll-to-top",()=>this.scrollToTop()],["scroll-to-bottom",()=>this.scrollToBottomAction()],["position-previous",()=>this.positionPrevious()],["position-next",()=>this.positionNext()],["size-increase",()=>this.sizeIncrease()],["size-decrease",()=>this.sizeDecrease()],["save-logs",()=>this.saveLogsAction()],["copy-selection",()=>this.triggerCopyAction()]])}activate(){terminalConsoleCache.activate()}deactivate(){terminalConsoleCache.deactivate()}_handleNewLog(logEntry){if(!this.isVisible)return;if(this._allLogEntries.push(logEntry),this._allLogEntries.length>this.options.maxStoredLogs)this._allLogEntries.splice(0,this._allLogEntries.length-this.options.maxStoredLogs);let newDisplayLines=this._processLogEntry(logEntry);if(this._displayLines.push(...newDisplayLines),this._displayLines.length>this.options.maxDisplayLines){this._displayLines.splice(0,this._displayLines.length-this.options.maxDisplayLines);let linesRemoved=this._displayLines.length-this.options.maxDisplayLines;this.scrollTopIndex=Math.max(0,this.scrollTopIndex-linesRemoved)}if(this.isScrolledToBottom)this._scrollToBottom();this.markNeedsRerender()}_updateConsoleDimensions(termWidth,termHeight){let width=termWidth??this.renderer.width,height2=termHeight??this.renderer.height,sizePercent=this.options.sizePercent/100;switch(this.options.position){case"top":this.consoleX=0,this.consoleY=0,this.consoleWidth=width,this.consoleHeight=Math.max(1,Math.floor(height2*sizePercent));break;case"bottom":this.consoleHeight=Math.max(1,Math.floor(height2*sizePercent)),this.consoleWidth=width,this.consoleX=0,this.consoleY=height2-this.consoleHeight;break;case"left":this.consoleWidth=Math.max(1,Math.floor(width*sizePercent)),this.consoleHeight=height2,this.consoleX=0,this.consoleY=0;break;case"right":this.consoleWidth=Math.max(1,Math.floor(width*sizePercent)),this.consoleHeight=height2,this.consoleY=0,this.consoleX=width-this.consoleWidth;break}this.currentLineIndex=Math.max(0,Math.min(this.currentLineIndex,this.consoleHeight-1))}handleKeyPress(event){if(event.name==="escape"){this.blur();return}let bindingKey=getKeyBindingKey({name:event.name,ctrl:event.ctrl,shift:event.shift,meta:event.meta,super:event.super,action:"scroll-up"}),action=this._keyBindingsMap.get(bindingKey);if(action){let handler=this._actionHandlers.get(action);if(handler){handler();return}}}scrollUp(){let logAreaHeight=Math.max(1,this.consoleHeight-1);if(this.currentLineIndex>0)this.currentLineIndex--,this.markNeedsRerender();else if(this.scrollTopIndex>0)this.scrollTopIndex--,this.isScrolledToBottom=!1,this.markNeedsRerender();return!0}scrollDown(){let displayLineCount=this._displayLines.length,logAreaHeight=Math.max(1,this.consoleHeight-1),maxScrollTop=Math.max(0,displayLineCount-logAreaHeight);if(this.currentLineIndex<logAreaHeight-1&&this.scrollTopIndex+this.currentLineIndex<displayLineCount-1)this.currentLineIndex++,this.markNeedsRerender();else if(this.scrollTopIndex<maxScrollTop)this.scrollTopIndex++,this.isScrolledToBottom=this.scrollTopIndex===maxScrollTop,this.markNeedsRerender();return!0}scrollToTop(){if(this.scrollTopIndex>0||this.currentLineIndex>0)this.scrollTopIndex=0,this.currentLineIndex=0,this.isScrolledToBottom=this._displayLines.length<=Math.max(1,this.consoleHeight-1),this.markNeedsRerender();return!0}scrollToBottomAction(){let logAreaHeightForScroll=Math.max(1,this.consoleHeight-1),maxScrollPossible=Math.max(0,this._displayLines.length-logAreaHeightForScroll);if(this.scrollTopIndex<maxScrollPossible||!this.isScrolledToBottom)this._scrollToBottom(!0),this.markNeedsRerender();return!0}positionPrevious(){let prevIndex=(this._positions.indexOf(this.options.position)-1+this._positions.length)%this._positions.length;return this.options.position=this._positions[prevIndex],this.resize(this.renderer.width,this.renderer.height),!0}positionNext(){let nextIndex=(this._positions.indexOf(this.options.position)+1)%this._positions.length;return this.options.position=this._positions[nextIndex],this.resize(this.renderer.width,this.renderer.height),!0}sizeIncrease(){return this.options.sizePercent=Math.min(100,this.options.sizePercent+5),this.resize(this.renderer.width,this.renderer.height),!0}sizeDecrease(){return this.options.sizePercent=Math.max(10,this.options.sizePercent-5),this.resize(this.renderer.width,this.renderer.height),!0}saveLogsAction(){return this.saveLogsToFile(),!0}triggerCopyAction(){return this.triggerCopy(),!0}attachStdin(){if(this.isFocused)return;this.renderer.keyInput.on("keypress",this.keyHandler),this.isFocused=!0}detachStdin(){if(!this.isFocused)return;this.renderer.keyInput.off("keypress",this.keyHandler),this.isFocused=!1}formatTimestamp(date){return new Intl.DateTimeFormat("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(date)}formatArguments(args){return args.map((arg)=>{if(arg instanceof Error){let errorProps=arg;return`Error: ${errorProps.message}
|
|
2413
|
+
`+d.replace(/^Error(:[^\n]*)?\n/,""))});return c.prototype=Object.create(b2.prototype),c.prototype.constructor=c,c.prototype.toString=function(){return this.message===void 0?this.name:this.name+": "+this.message},c}var K=void 0;function L(a){throw new K(a)}var M=(a)=>{return a||L("Cannot use deleted val. handle = "+a),J[a].value},Ea=(a)=>{switch(a){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:var b2=Ca.length?Ca.pop():J.length;return J[b2]={ga:1,value:a},b2}},Fa=void 0,Ga=void 0;function N(a){for(var b2="";A[a];)b2+=Ga[A[a++]];return b2}var O=[];function Ha(){for(;O.length;){var a=O.pop();a.M.$=!1,a.delete()}}var P=void 0,Q={};function Ia(a,b2){for(b2===void 0&&L("ptr should not be undefined");a.R;)b2=a.ba(b2),a=a.R;return b2}var R={};function Ja(a){a=Ka(a);var b2=N(a);return S(a),b2}function La(a,b2){var c=R[a];return c===void 0&&L(b2+" has unknown type "+Ja(a)),c}function Ma(){}var Na=!1;function Oa(a){--a.count.value,a.count.value===0&&(a.T?a.U.W(a.T):a.P.N.W(a.O))}function Pa(a,b2,c){if(b2===c)return a;if(c.R===void 0)return null;return a=Pa(a,b2,c.R),a===null?null:c.na(a)}var Qa={};function Ra(a,b2){return b2=Ia(a,b2),Q[b2]}var Sa=void 0;function Ta(a){throw new Sa(a)}function Ua(a,b2){return b2.P&&b2.O||Ta("makeClassHandle requires ptr and ptrType"),!!b2.U!==!!b2.T&&Ta("Both smartPtrType and smartPtr must be specified"),b2.count={value:1},T(Object.create(a,{M:{value:b2}}))}function T(a){if(typeof FinalizationRegistry>"u")return T=(b2)=>b2,a;return Na=new FinalizationRegistry((b2)=>{Oa(b2.M)}),T=(b2)=>{var c=b2.M;return c.T&&Na.register(b2,{M:c},b2),b2},Ma=(b2)=>{Na.unregister(b2)},T(a)}var Va={};function Wa(a){for(;a.length;){var b2=a.pop();a.pop()(b2)}}function Xa(a){return this.fromWireType(D[a>>2])}var U={},Ya={};function V(a,b2,c){function d(k){k=c(k),k.length!==a.length&&Ta("Mismatched type converter count");for(var m=0;m<a.length;++m)W(a[m],k[m])}a.forEach(function(k){Ya[k]=b2});var e=Array(b2.length),f=[],g=0;b2.forEach((k,m)=>{R.hasOwnProperty(k)?e[m]=R[k]:(f.push(k),U.hasOwnProperty(k)||(U[k]=[]),U[k].push(()=>{e[m]=R[k],++g,g===f.length&&d(e)}))}),f.length===0&&d(e)}function Za(a){switch(a){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw TypeError("Unknown type size: "+a)}}function W(a,b2,c={}){if(!("argPackAdvance"in b2))throw TypeError("registerType registeredInstance requires argPackAdvance");var d=b2.name;if(a||L('type "'+d+'" must have a positive integer typeid pointer'),R.hasOwnProperty(a)){if(c.ua)return;L("Cannot register type '"+d+"' twice")}R[a]=b2,delete Ya[a],U.hasOwnProperty(a)&&(b2=U[a],delete U[a],b2.forEach((e)=>e()))}function $a(a){L(a.M.P.N.name+" instance already deleted")}function X(){}function ab(a,b2,c){if(a[b2].S===void 0){var d=a[b2];a[b2]=function(){return a[b2].S.hasOwnProperty(arguments.length)||L("Function '"+c+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+a[b2].S+")!"),a[b2].S[arguments.length].apply(this,arguments)},a[b2].S=[],a[b2].S[d.Z]=d}}function bb(a,b2){h.hasOwnProperty(a)?(L("Cannot register public name '"+a+"' twice"),ab(h,a,a),h.hasOwnProperty(void 0)&&L("Cannot register multiple overloads of a function with the same number of arguments (undefined)!"),h[a].S[void 0]=b2):h[a]=b2}function cb(a,b2,c,d,e,f,g,k){this.name=a,this.constructor=b2,this.X=c,this.W=d,this.R=e,this.pa=f,this.ba=g,this.na=k,this.ja=[]}function db(a,b2,c){for(;b2!==c;)b2.ba||L("Expected null or instance of "+c.name+", got an instance of "+b2.name),a=b2.ba(a),b2=b2.R;return a}function eb(a,b2){if(b2===null)return this.ea&&L("null is not a valid "+this.name),0;return b2.M||L('Cannot pass "'+fb(b2)+'" as a '+this.name),b2.M.O||L("Cannot pass deleted object as a pointer of type "+this.name),db(b2.M.O,b2.M.P.N,this.N)}function gb(a,b2){if(b2===null){if(this.ea&&L("null is not a valid "+this.name),this.da){var c=this.fa();return a!==null&&a.push(this.W,c),c}return 0}if(b2.M||L('Cannot pass "'+fb(b2)+'" as a '+this.name),b2.M.O||L("Cannot pass deleted object as a pointer of type "+this.name),!this.ca&&b2.M.P.ca&&L("Cannot convert argument of type "+(b2.M.U?b2.M.U.name:b2.M.P.name)+" to parameter type "+this.name),c=db(b2.M.O,b2.M.P.N,this.N),this.da)switch(b2.M.T===void 0&&L("Passing raw pointer to smart pointer is illegal"),this.Ba){case 0:b2.M.U===this?c=b2.M.T:L("Cannot convert argument of type "+(b2.M.U?b2.M.U.name:b2.M.P.name)+" to parameter type "+this.name);break;case 1:c=b2.M.T;break;case 2:if(b2.M.U===this)c=b2.M.T;else{var d=b2.clone();c=this.xa(c,Ea(function(){d.delete()})),a!==null&&a.push(this.W,c)}break;default:L("Unsupporting sharing policy")}return c}function hb(a,b2){if(b2===null)return this.ea&&L("null is not a valid "+this.name),0;return b2.M||L('Cannot pass "'+fb(b2)+'" as a '+this.name),b2.M.O||L("Cannot pass deleted object as a pointer of type "+this.name),b2.M.P.ca&&L("Cannot convert argument of type "+b2.M.P.name+" to parameter type "+this.name),db(b2.M.O,b2.M.P.N,this.N)}function Y(a,b2,c,d){this.name=a,this.N=b2,this.ea=c,this.ca=d,this.da=!1,this.W=this.xa=this.fa=this.ka=this.Ba=this.wa=void 0,b2.R!==void 0?this.toWireType=gb:(this.toWireType=d?eb:hb,this.V=null)}function ib(a,b2){h.hasOwnProperty(a)||Ta("Replacing nonexistant public symbol"),h[a]=b2,h[a].Z=void 0}function jb(a,b2){var c=[];return function(){if(c.length=0,Object.assign(c,arguments),a.includes("j")){var d=h["dynCall_"+a];d=c&&c.length?d.apply(null,[b2].concat(c)):d.call(null,b2)}else d=oa.get(b2).apply(null,c);return d}}function Z(a,b2){a=N(a);var c=a.includes("j")?jb(a,b2):oa.get(b2);return typeof c!="function"&&L("unknown function pointer with signature "+a+": "+b2),c}var mb=void 0;function nb(a,b2){function c(f){e[f]||R[f]||(Ya[f]?Ya[f].forEach(c):(d.push(f),e[f]=!0))}var d=[],e={};throw b2.forEach(c),new mb(a+": "+d.map(Ja).join([", "]))}function ob(a,b2,c,d,e){var f=b2.length;2>f&&L("argTypes array size mismatch! Must at least get return value and 'this' types!");var g=b2[1]!==null&&c!==null,k=!1;for(c=1;c<b2.length;++c)if(b2[c]!==null&&b2[c].V===void 0){k=!0;break}var m=b2[0].name!=="void",l=f-2,n=Array(l),p=[],r=[];return function(){if(arguments.length!==l&&L("function "+a+" called with "+arguments.length+" arguments, expected "+l+" args!"),r.length=0,p.length=g?2:1,p[0]=e,g){var u=b2[1].toWireType(r,this);p[1]=u}for(var t=0;t<l;++t)n[t]=b2[t+2].toWireType(r,arguments[t]),p.push(n[t]);if(t=d.apply(null,p),k)Wa(r);else for(var y=g?1:2;y<b2.length;y++){var B=y===1?u:n[y-2];b2[y].V!==null&&b2[y].V(B)}return u=m?b2[0].fromWireType(t):void 0,u}}function pb(a,b2){for(var c=[],d=0;d<a;d++)c.push(E[b2+4*d>>2]);return c}function qb(a){4<a&&--J[a].ga===0&&(J[a]=void 0,Ca.push(a))}function fb(a){if(a===null)return"null";var b2=typeof a;return b2==="object"||b2==="array"||b2==="function"?a.toString():""+a}function rb(a,b2){switch(b2){case 2:return function(c){return this.fromWireType(la[c>>2])};case 3:return function(c){return this.fromWireType(ma[c>>3])};default:throw TypeError("Unknown float type: "+a)}}function sb(a,b2,c){switch(b2){case 0:return c?function(d){return ja[d]}:function(d){return A[d]};case 1:return c?function(d){return C[d>>1]}:function(d){return ka[d>>1]};case 2:return c?function(d){return D[d>>2]}:function(d){return E[d>>2]};default:throw TypeError("Unknown integer type: "+a)}}function tb(a,b2){for(var c="",d=0;!(d>=b2/2);++d){var e=C[a+2*d>>1];if(e==0)break;c+=String.fromCharCode(e)}return c}function ub(a,b2,c){if(c===void 0&&(c=2147483647),2>c)return 0;c-=2;var d=b2;c=c<2*a.length?c/2:a.length;for(var e=0;e<c;++e)C[b2>>1]=a.charCodeAt(e),b2+=2;return C[b2>>1]=0,b2-d}function vb(a){return 2*a.length}function wb(a,b2){for(var c=0,d="";!(c>=b2/4);){var e=D[a+4*c>>2];if(e==0)break;++c,65536<=e?(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023)):d+=String.fromCharCode(e)}return d}function xb(a,b2,c){if(c===void 0&&(c=2147483647),4>c)return 0;var d=b2;c=d+c-4;for(var e=0;e<a.length;++e){var f=a.charCodeAt(e);if(55296<=f&&57343>=f){var g=a.charCodeAt(++e);f=65536+((f&1023)<<10)|g&1023}if(D[b2>>2]=f,b2+=4,b2+4>c)break}return D[b2>>2]=0,b2-d}function yb(a){for(var b2=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&++c,b2+=4}return b2}var zb={};function Ab(a){var b2=zb[a];return b2===void 0?N(a):b2}var Bb=[];function Cb(a){var b2=Bb.length;return Bb.push(a),b2}function Db(a,b2){for(var c=Array(a),d=0;d<a;++d)c[d]=La(E[b2+4*d>>2],"parameter "+d);return c}var Eb=[],Fb=[null,[],[]];K=h.BindingError=Da("BindingError"),h.count_emval_handles=function(){for(var a=0,b2=5;b2<J.length;++b2)J[b2]!==void 0&&++a;return a},h.get_first_emval=function(){for(var a=5;a<J.length;++a)if(J[a]!==void 0)return J[a];return null},Fa=h.PureVirtualError=Da("PureVirtualError");for(var Gb=Array(256),Hb=0;256>Hb;++Hb)Gb[Hb]=String.fromCharCode(Hb);Ga=Gb,h.getInheritedInstanceCount=function(){return Object.keys(Q).length},h.getLiveInheritedInstances=function(){var a=[],b2;for(b2 in Q)Q.hasOwnProperty(b2)&&a.push(Q[b2]);return a},h.flushPendingDeletes=Ha,h.setDelayFunction=function(a){P=a,O.length&&P&&P(Ha)},Sa=h.InternalError=Da("InternalError"),X.prototype.isAliasOf=function(a){if(!(this instanceof X&&a instanceof X))return!1;var b2=this.M.P.N,c=this.M.O,d=a.M.P.N;for(a=a.M.O;b2.R;)c=b2.ba(c),b2=b2.R;for(;d.R;)a=d.ba(a),d=d.R;return b2===d&&c===a},X.prototype.clone=function(){if(this.M.O||$a(this),this.M.aa)return this.M.count.value+=1,this;var a=T,b2=Object,c=b2.create,d=Object.getPrototypeOf(this),e=this.M;return a=a(c.call(b2,d,{M:{value:{count:e.count,$:e.$,aa:e.aa,O:e.O,P:e.P,T:e.T,U:e.U}}})),a.M.count.value+=1,a.M.$=!1,a},X.prototype.delete=function(){this.M.O||$a(this),this.M.$&&!this.M.aa&&L("Object already scheduled for deletion"),Ma(this),Oa(this.M),this.M.aa||(this.M.T=void 0,this.M.O=void 0)},X.prototype.isDeleted=function(){return!this.M.O},X.prototype.deleteLater=function(){return this.M.O||$a(this),this.M.$&&!this.M.aa&&L("Object already scheduled for deletion"),O.push(this),O.length===1&&P&&P(Ha),this.M.$=!0,this},Y.prototype.qa=function(a){return this.ka&&(a=this.ka(a)),a},Y.prototype.ha=function(a){this.W&&this.W(a)},Y.prototype.argPackAdvance=8,Y.prototype.readValueFromPointer=Xa,Y.prototype.deleteObject=function(a){if(a!==null)a.delete()},Y.prototype.fromWireType=function(a){function b2(){return this.da?Ua(this.N.X,{P:this.wa,O:c,U:this,T:a}):Ua(this.N.X,{P:this,O:a})}var c=this.qa(a);if(!c)return this.ha(a),null;var d=Ra(this.N,c);if(d!==void 0){if(d.M.count.value===0)return d.M.O=c,d.M.T=a,d.clone();return d=d.clone(),this.ha(a),d}if(d=this.N.pa(c),d=Qa[d],!d)return b2.call(this);d=this.ca?d.la:d.pointerType;var e=Pa(c,this.N,d.N);return e===null?b2.call(this):this.da?Ua(d.N.X,{P:d,O:e,U:this,T:a}):Ua(d.N.X,{P:d,O:e})},mb=h.UnboundTypeError=Da("UnboundTypeError");var xa=typeof atob=="function"?atob:function(a){var b2="",c=0;a=a.replace(/[^A-Za-z0-9\+\/=]/g,"");do{var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++)),e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++)),f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++)),g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));d=d<<2|e>>4,e=(e&15)<<4|f>>2;var k=(f&3)<<6|g;b2+=String.fromCharCode(d),f!==64&&(b2+=String.fromCharCode(e)),g!==64&&(b2+=String.fromCharCode(k))}while(c<a.length);return b2},Jb={l:function(a,b2,c,d){x("Assertion failed: "+(a?z(A,a):"")+", at: "+[b2?b2?z(A,b2):"":"unknown filename",c,d?d?z(A,d):"":"unknown function"])},q:function(a,b2,c){a=N(a),b2=La(b2,"wrapper"),c=M(c);var d=[].slice,e=b2.N,f=e.X,g=e.R.X,k=e.R.constructor;a=Ba(a,function(){e.R.ja.forEach(function(l){if(this[l]===g[l])throw new Fa("Pure virtual function "+l+" must be implemented in JavaScript")}.bind(this)),Object.defineProperty(this,"__parent",{value:f}),this.__construct.apply(this,d.call(arguments))}),f.__construct=function(){this===f&&L("Pass correct 'this' to __construct");var l=k.implement.apply(void 0,[this].concat(d.call(arguments)));Ma(l);var n=l.M;l.notifyOnDestruction(),n.aa=!0,Object.defineProperties(this,{M:{value:n}}),T(this),l=n.O,l=Ia(e,l),Q.hasOwnProperty(l)?L("Tried to register registered instance: "+l):Q[l]=this},f.__destruct=function(){this===f&&L("Pass correct 'this' to __destruct"),Ma(this);var l=this.M.O;l=Ia(e,l),Q.hasOwnProperty(l)?delete Q[l]:L("Tried to unregister unregistered instance: "+l)},a.prototype=Object.create(f);for(var m in c)a.prototype[m]=c[m];return Ea(a)},j:function(a){var b2=Va[a];delete Va[a];var{fa:c,W:d,ia:e}=b2,f=e.map((g)=>g.ta).concat(e.map((g)=>g.za));V([a],f,(g)=>{var k={};return e.forEach((m,l)=>{var n=g[l],p=m.ra,r=m.sa,u=g[l+e.length],t=m.ya,y=m.Aa;k[m.oa]={read:(B)=>n.fromWireType(p(r,B)),write:(B,ba)=>{var I=[];t(y,B,u.toWireType(I,ba)),Wa(I)}}}),[{name:b2.name,fromWireType:function(m){var l={},n;for(n in k)l[n]=k[n].read(m);return d(m),l},toWireType:function(m,l){for(var n in k)if(!(n in l))throw TypeError('Missing field: "'+n+'"');var p=c();for(n in k)k[n].write(p,l[n]);return m!==null&&m.push(d,p),p},argPackAdvance:8,readValueFromPointer:Xa,V:d}]})},v:function(){},B:function(a,b2,c,d,e){var f=Za(c);b2=N(b2),W(a,{name:b2,fromWireType:function(g){return!!g},toWireType:function(g,k){return k?d:e},argPackAdvance:8,readValueFromPointer:function(g){if(c===1)var k=ja;else if(c===2)k=C;else if(c===4)k=D;else throw TypeError("Unknown boolean type size: "+b2);return this.fromWireType(k[g>>f])},V:null})},f:function(a,b2,c,d,e,f,g,k,m,l,n,p,r){n=N(n),f=Z(e,f),k&&(k=Z(g,k)),l&&(l=Z(m,l)),r=Z(p,r);var u=Aa(n);bb(u,function(){nb("Cannot construct "+n+" due to unbound types",[d])}),V([a,b2,c],d?[d]:[],function(t){if(t=t[0],d)var y=t.N,B=y.X;else B=X.prototype;t=Ba(u,function(){if(Object.getPrototypeOf(this)!==ba)throw new K("Use 'new' to construct "+n);if(I.Y===void 0)throw new K(n+" has no accessible constructor");var kb=I.Y[arguments.length];if(kb===void 0)throw new K("Tried to invoke ctor of "+n+" with invalid number of parameters ("+arguments.length+") - expected ("+Object.keys(I.Y).toString()+") parameters instead!");return kb.apply(this,arguments)});var ba=Object.create(B,{constructor:{value:t}});t.prototype=ba;var I=new cb(n,t,ba,r,y,f,k,l);y=new Y(n,I,!0,!1),B=new Y(n+"*",I,!1,!1);var lb=new Y(n+" const*",I,!1,!0);return Qa[a]={pointerType:B,la:lb},ib(u,t),[y,B,lb]})},d:function(a,b2,c,d,e,f,g){var k=pb(c,d);b2=N(b2),f=Z(e,f),V([],[a],function(m){function l(){nb("Cannot call "+n+" due to unbound types",k)}m=m[0];var n=m.name+"."+b2;b2.startsWith("@@")&&(b2=Symbol[b2.substring(2)]);var p=m.N.constructor;return p[b2]===void 0?(l.Z=c-1,p[b2]=l):(ab(p,b2,n),p[b2].S[c-1]=l),V([],k,function(r){return r=ob(n,[r[0],null].concat(r.slice(1)),null,f,g),p[b2].S===void 0?(r.Z=c-1,p[b2]=r):p[b2].S[c-1]=r,[]}),[]})},p:function(a,b2,c,d,e,f){0<b2||x();var g=pb(b2,c);e=Z(d,e),V([],[a],function(k){k=k[0];var m="constructor "+k.name;if(k.N.Y===void 0&&(k.N.Y=[]),k.N.Y[b2-1]!==void 0)throw new K("Cannot register multiple constructors with identical number of parameters ("+(b2-1)+") for class '"+k.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");return k.N.Y[b2-1]=()=>{nb("Cannot construct "+k.name+" due to unbound types",g)},V([],g,function(l){return l.splice(1,0,null),k.N.Y[b2-1]=ob(m,l,null,e,f),[]}),[]})},a:function(a,b2,c,d,e,f,g,k){var m=pb(c,d);b2=N(b2),f=Z(e,f),V([],[a],function(l){function n(){nb("Cannot call "+p+" due to unbound types",m)}l=l[0];var p=l.name+"."+b2;b2.startsWith("@@")&&(b2=Symbol[b2.substring(2)]),k&&l.N.ja.push(b2);var r=l.N.X,u=r[b2];return u===void 0||u.S===void 0&&u.className!==l.name&&u.Z===c-2?(n.Z=c-2,n.className=l.name,r[b2]=n):(ab(r,b2,p),r[b2].S[c-2]=n),V([],m,function(t){return t=ob(p,t,l,f,g),r[b2].S===void 0?(t.Z=c-2,r[b2]=t):r[b2].S[c-2]=t,[]}),[]})},A:function(a,b2){b2=N(b2),W(a,{name:b2,fromWireType:function(c){var d=M(c);return qb(c),d},toWireType:function(c,d){return Ea(d)},argPackAdvance:8,readValueFromPointer:Xa,V:null})},n:function(a,b2,c){c=Za(c),b2=N(b2),W(a,{name:b2,fromWireType:function(d){return d},toWireType:function(d,e){return e},argPackAdvance:8,readValueFromPointer:rb(b2,c),V:null})},e:function(a,b2,c,d,e){b2=N(b2),e===-1&&(e=4294967295),e=Za(c);var f=(k)=>k;if(d===0){var g=32-8*c;f=(k)=>k<<g>>>g}c=b2.includes("unsigned")?function(k,m){return m>>>0}:function(k,m){return m},W(a,{name:b2,fromWireType:f,toWireType:c,argPackAdvance:8,readValueFromPointer:sb(b2,e,d!==0),V:null})},b:function(a,b2,c){function d(f){f>>=2;var g=E;return new e(ia,g[f+1],g[f])}var e=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b2];c=N(c),W(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ua:!0})},o:function(a,b2){b2=N(b2);var c=b2==="std::string";W(a,{name:b2,fromWireType:function(d){var e=E[d>>2],f=d+4;if(c)for(var g=f,k=0;k<=e;++k){var m=f+k;if(k==e||A[m]==0){if(g=g?z(A,g,m-g):"",l===void 0)var l=g;else l+=String.fromCharCode(0),l+=g;g=m+1}}else{l=Array(e);for(k=0;k<e;++k)l[k]=String.fromCharCode(A[f+k]);l=l.join("")}return S(d),l},toWireType:function(d,e){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var f,g=typeof e=="string";if(g||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int8Array||L("Cannot pass non-string to std::string"),c&&g){var k=0;for(f=0;f<e.length;++f){var m=e.charCodeAt(f);127>=m?k++:2047>=m?k+=2:55296<=m&&57343>=m?(k+=4,++f):k+=3}f=k}else f=e.length;if(k=Ib(4+f+1),m=k+4,E[k>>2]=f,c&&g){if(g=m,m=f+1,f=A,0<m){m=g+m-1;for(var l=0;l<e.length;++l){var n=e.charCodeAt(l);if(55296<=n&&57343>=n){var p=e.charCodeAt(++l);n=65536+((n&1023)<<10)|p&1023}if(127>=n){if(g>=m)break;f[g++]=n}else{if(2047>=n){if(g+1>=m)break;f[g++]=192|n>>6}else{if(65535>=n){if(g+2>=m)break;f[g++]=224|n>>12}else{if(g+3>=m)break;f[g++]=240|n>>18,f[g++]=128|n>>12&63}f[g++]=128|n>>6&63}f[g++]=128|n&63}}f[g]=0}}else if(g)for(g=0;g<f;++g)l=e.charCodeAt(g),255<l&&(S(m),L("String has UTF-16 code units that do not fit in 8 bits")),A[m+g]=l;else for(g=0;g<f;++g)A[m+g]=e[g];return d!==null&&d.push(S,k),k},argPackAdvance:8,readValueFromPointer:Xa,V:function(d){S(d)}})},i:function(a,b2,c){if(c=N(c),b2===2)var d=tb,e=ub,f=vb,g=()=>ka,k=1;else b2===4&&(d=wb,e=xb,f=yb,g=()=>E,k=2);W(a,{name:c,fromWireType:function(m){for(var l=E[m>>2],n=g(),p,r=m+4,u=0;u<=l;++u){var t=m+4+u*b2;if(u==l||n[t>>k]==0)r=d(r,t-r),p===void 0?p=r:(p+=String.fromCharCode(0),p+=r),r=t+b2}return S(m),p},toWireType:function(m,l){typeof l!="string"&&L("Cannot pass non-string to C++ string type "+c);var n=f(l),p=Ib(4+n+b2);return E[p>>2]=n>>k,e(l,p+4,n+b2),m!==null&&m.push(S,p),p},argPackAdvance:8,readValueFromPointer:Xa,V:function(m){S(m)}})},k:function(a,b2,c,d,e,f){Va[a]={name:N(b2),fa:Z(c,d),W:Z(e,f),ia:[]}},h:function(a,b2,c,d,e,f,g,k,m,l){Va[a].ia.push({oa:N(b2),ta:c,ra:Z(d,e),sa:f,za:g,ya:Z(k,m),Aa:l})},C:function(a,b2){b2=N(b2),W(a,{va:!0,name:b2,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},s:function(a,b2,c,d,e){a=Bb[a],b2=M(b2),c=Ab(c);var f=[];return E[d>>2]=Ea(f),a(b2,c,f,e)},t:function(a,b2,c,d){a=Bb[a],b2=M(b2),c=Ab(c),a(b2,c,null,d)},g:qb,m:function(a,b2){var c=Db(a,b2),d=c[0];b2=d.name+"_$"+c.slice(1).map(function(g){return g.name}).join("_")+"$";var e=Eb[b2];if(e!==void 0)return e;var f=Array(a-1);return e=Cb((g,k,m,l)=>{for(var n=0,p=0;p<a-1;++p)f[p]=c[p+1].readValueFromPointer(l+n),n+=c[p+1].argPackAdvance;g=g[k].apply(g,f);for(p=0;p<a-1;++p)c[p+1].ma&&c[p+1].ma(f[p]);if(!d.va)return d.toWireType(m,g)}),Eb[b2]=e},D:function(a){4<a&&(J[a].ga+=1)},r:function(a){var b2=M(a);Wa(b2),qb(a)},c:function(){x("")},x:function(a,b2,c){A.copyWithin(a,b2,b2+c)},w:function(a){var b2=A.length;if(a>>>=0,2147483648<a)return!1;for(var c=1;4>=c;c*=2){var d=b2*(1+0.2/c);d=Math.min(d,a+100663296);var e=Math;d=Math.max(a,d),e=e.min.call(e,2147483648,d+(65536-d%65536)%65536);a:{try{fa.grow(e-ia.byteLength+65535>>>16),na();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},z:function(){return 52},u:function(){return 70},y:function(a,b2,c,d){for(var e=0,f=0;f<c;f++){var g=E[b2>>2],k=E[b2+4>>2];b2+=8;for(var m=0;m<k;m++){var l=A[g+m],n=Fb[a];l===0||l===10?((a===1?ea:v)(z(n,0)),n.length=0):n.push(l)}e+=k}return E[d>>2]=e,0}};(function(){function a(e){h.asm=e.exports,fa=h.asm.E,na(),oa=h.asm.J,qa.unshift(h.asm.F),F--,h.monitorRunDependencies&&h.monitorRunDependencies(F),F==0&&(ta!==null&&(clearInterval(ta),ta=null),G&&(e=G,G=null,e()))}function b2(e){a(e.instance)}function c(e){return ya().then(function(f){return WebAssembly.instantiate(f,d)}).then(function(f){return f}).then(e,function(f){v("failed to asynchronously prepare wasm: "+f),x(f)})}var d={a:Jb};if(F++,h.monitorRunDependencies&&h.monitorRunDependencies(F),h.instantiateWasm)try{return h.instantiateWasm(d,a)}catch(e){v("Module.instantiateWasm callback failed with error: "+e),ca(e)}return function(){return w||typeof WebAssembly.instantiateStreaming!="function"||ua(H)||typeof fetch!="function"?c(b2):fetch(H,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b2,function(f){return v("wasm streaming compile failed: "+f),v("falling back to ArrayBuffer instantiation"),c(b2)})})}().catch(ca),{}})(),h.___wasm_call_ctors=function(){return(h.___wasm_call_ctors=h.asm.F).apply(null,arguments)};var Ka=h.___getTypeName=function(){return(Ka=h.___getTypeName=h.asm.G).apply(null,arguments)};h.__embind_initialize_bindings=function(){return(h.__embind_initialize_bindings=h.asm.H).apply(null,arguments)};var Ib=h._malloc=function(){return(Ib=h._malloc=h.asm.I).apply(null,arguments)},S=h._free=function(){return(S=h._free=h.asm.K).apply(null,arguments)};h.dynCall_jiji=function(){return(h.dynCall_jiji=h.asm.L).apply(null,arguments)};var Kb;G=function Lb(){Kb||Mb(),Kb||(G=Lb)};function Mb(){function a(){if(!Kb&&(Kb=!0,h.calledRun=!0,!ha)){if(za(qa),aa(h),h.onRuntimeInitialized)h.onRuntimeInitialized();if(h.postRun)for(typeof h.postRun=="function"&&(h.postRun=[h.postRun]);h.postRun.length;){var b2=h.postRun.shift();ra.unshift(b2)}za(ra)}}if(!(0<F)){if(h.preRun)for(typeof h.preRun=="function"&&(h.preRun=[h.preRun]);h.preRun.length;)sa();za(pa),0<F||(h.setStatus?(h.setStatus("Running..."),setTimeout(function(){setTimeout(function(){h.setStatus("")},1),a()},1)):a())}}if(h.preInit)for(typeof h.preInit=="function"&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();return Mb(),loadYoga2.ready}})(),yoga_wasm_base64_esm_default=loadYoga,Align=function(Align2){return Align2[Align2.Auto=0]="Auto",Align2[Align2.FlexStart=1]="FlexStart",Align2[Align2.Center=2]="Center",Align2[Align2.FlexEnd=3]="FlexEnd",Align2[Align2.Stretch=4]="Stretch",Align2[Align2.Baseline=5]="Baseline",Align2[Align2.SpaceBetween=6]="SpaceBetween",Align2[Align2.SpaceAround=7]="SpaceAround",Align2[Align2.SpaceEvenly=8]="SpaceEvenly",Align2}({}),BoxSizing=function(BoxSizing2){return BoxSizing2[BoxSizing2.BorderBox=0]="BorderBox",BoxSizing2[BoxSizing2.ContentBox=1]="ContentBox",BoxSizing2}({}),Dimension=function(Dimension2){return Dimension2[Dimension2.Width=0]="Width",Dimension2[Dimension2.Height=1]="Height",Dimension2}({}),Direction=function(Direction2){return Direction2[Direction2.Inherit=0]="Inherit",Direction2[Direction2.LTR=1]="LTR",Direction2[Direction2.RTL=2]="RTL",Direction2}({}),Display=function(Display2){return Display2[Display2.Flex=0]="Flex",Display2[Display2.None=1]="None",Display2[Display2.Contents=2]="Contents",Display2}({}),Edge=function(Edge2){return Edge2[Edge2.Left=0]="Left",Edge2[Edge2.Top=1]="Top",Edge2[Edge2.Right=2]="Right",Edge2[Edge2.Bottom=3]="Bottom",Edge2[Edge2.Start=4]="Start",Edge2[Edge2.End=5]="End",Edge2[Edge2.Horizontal=6]="Horizontal",Edge2[Edge2.Vertical=7]="Vertical",Edge2[Edge2.All=8]="All",Edge2}({}),Errata=function(Errata2){return Errata2[Errata2.None=0]="None",Errata2[Errata2.StretchFlexBasis=1]="StretchFlexBasis",Errata2[Errata2.AbsolutePositionWithoutInsetsExcludesPadding=2]="AbsolutePositionWithoutInsetsExcludesPadding",Errata2[Errata2.AbsolutePercentAgainstInnerSize=4]="AbsolutePercentAgainstInnerSize",Errata2[Errata2.All=2147483647]="All",Errata2[Errata2.Classic=2147483646]="Classic",Errata2}({}),ExperimentalFeature=function(ExperimentalFeature2){return ExperimentalFeature2[ExperimentalFeature2.WebFlexBasis=0]="WebFlexBasis",ExperimentalFeature2}({}),FlexDirection=function(FlexDirection2){return FlexDirection2[FlexDirection2.Column=0]="Column",FlexDirection2[FlexDirection2.ColumnReverse=1]="ColumnReverse",FlexDirection2[FlexDirection2.Row=2]="Row",FlexDirection2[FlexDirection2.RowReverse=3]="RowReverse",FlexDirection2}({}),Gutter=function(Gutter2){return Gutter2[Gutter2.Column=0]="Column",Gutter2[Gutter2.Row=1]="Row",Gutter2[Gutter2.All=2]="All",Gutter2}({}),Justify=function(Justify2){return Justify2[Justify2.FlexStart=0]="FlexStart",Justify2[Justify2.Center=1]="Center",Justify2[Justify2.FlexEnd=2]="FlexEnd",Justify2[Justify2.SpaceBetween=3]="SpaceBetween",Justify2[Justify2.SpaceAround=4]="SpaceAround",Justify2[Justify2.SpaceEvenly=5]="SpaceEvenly",Justify2}({}),LogLevel=function(LogLevel2){return LogLevel2[LogLevel2.Error=0]="Error",LogLevel2[LogLevel2.Warn=1]="Warn",LogLevel2[LogLevel2.Info=2]="Info",LogLevel2[LogLevel2.Debug=3]="Debug",LogLevel2[LogLevel2.Verbose=4]="Verbose",LogLevel2[LogLevel2.Fatal=5]="Fatal",LogLevel2}({}),MeasureMode=function(MeasureMode2){return MeasureMode2[MeasureMode2.Undefined=0]="Undefined",MeasureMode2[MeasureMode2.Exactly=1]="Exactly",MeasureMode2[MeasureMode2.AtMost=2]="AtMost",MeasureMode2}({}),NodeType=function(NodeType2){return NodeType2[NodeType2.Default=0]="Default",NodeType2[NodeType2.Text=1]="Text",NodeType2}({}),Overflow=function(Overflow2){return Overflow2[Overflow2.Visible=0]="Visible",Overflow2[Overflow2.Hidden=1]="Hidden",Overflow2[Overflow2.Scroll=2]="Scroll",Overflow2}({}),PositionType=function(PositionType2){return PositionType2[PositionType2.Static=0]="Static",PositionType2[PositionType2.Relative=1]="Relative",PositionType2[PositionType2.Absolute=2]="Absolute",PositionType2}({}),Unit=function(Unit2){return Unit2[Unit2.Undefined=0]="Undefined",Unit2[Unit2.Point=1]="Point",Unit2[Unit2.Percent=2]="Percent",Unit2[Unit2.Auto=3]="Auto",Unit2}({}),Wrap=function(Wrap2){return Wrap2[Wrap2.NoWrap=0]="NoWrap",Wrap2[Wrap2.Wrap=1]="Wrap",Wrap2[Wrap2.WrapReverse=2]="WrapReverse",Wrap2}({}),constants={ALIGN_AUTO:Align.Auto,ALIGN_FLEX_START:Align.FlexStart,ALIGN_CENTER:Align.Center,ALIGN_FLEX_END:Align.FlexEnd,ALIGN_STRETCH:Align.Stretch,ALIGN_BASELINE:Align.Baseline,ALIGN_SPACE_BETWEEN:Align.SpaceBetween,ALIGN_SPACE_AROUND:Align.SpaceAround,ALIGN_SPACE_EVENLY:Align.SpaceEvenly,BOX_SIZING_BORDER_BOX:BoxSizing.BorderBox,BOX_SIZING_CONTENT_BOX:BoxSizing.ContentBox,DIMENSION_WIDTH:Dimension.Width,DIMENSION_HEIGHT:Dimension.Height,DIRECTION_INHERIT:Direction.Inherit,DIRECTION_LTR:Direction.LTR,DIRECTION_RTL:Direction.RTL,DISPLAY_FLEX:Display.Flex,DISPLAY_NONE:Display.None,DISPLAY_CONTENTS:Display.Contents,EDGE_LEFT:Edge.Left,EDGE_TOP:Edge.Top,EDGE_RIGHT:Edge.Right,EDGE_BOTTOM:Edge.Bottom,EDGE_START:Edge.Start,EDGE_END:Edge.End,EDGE_HORIZONTAL:Edge.Horizontal,EDGE_VERTICAL:Edge.Vertical,EDGE_ALL:Edge.All,ERRATA_NONE:Errata.None,ERRATA_STRETCH_FLEX_BASIS:Errata.StretchFlexBasis,ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING:Errata.AbsolutePositionWithoutInsetsExcludesPadding,ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE:Errata.AbsolutePercentAgainstInnerSize,ERRATA_ALL:Errata.All,ERRATA_CLASSIC:Errata.Classic,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:ExperimentalFeature.WebFlexBasis,FLEX_DIRECTION_COLUMN:FlexDirection.Column,FLEX_DIRECTION_COLUMN_REVERSE:FlexDirection.ColumnReverse,FLEX_DIRECTION_ROW:FlexDirection.Row,FLEX_DIRECTION_ROW_REVERSE:FlexDirection.RowReverse,GUTTER_COLUMN:Gutter.Column,GUTTER_ROW:Gutter.Row,GUTTER_ALL:Gutter.All,JUSTIFY_FLEX_START:Justify.FlexStart,JUSTIFY_CENTER:Justify.Center,JUSTIFY_FLEX_END:Justify.FlexEnd,JUSTIFY_SPACE_BETWEEN:Justify.SpaceBetween,JUSTIFY_SPACE_AROUND:Justify.SpaceAround,JUSTIFY_SPACE_EVENLY:Justify.SpaceEvenly,LOG_LEVEL_ERROR:LogLevel.Error,LOG_LEVEL_WARN:LogLevel.Warn,LOG_LEVEL_INFO:LogLevel.Info,LOG_LEVEL_DEBUG:LogLevel.Debug,LOG_LEVEL_VERBOSE:LogLevel.Verbose,LOG_LEVEL_FATAL:LogLevel.Fatal,MEASURE_MODE_UNDEFINED:MeasureMode.Undefined,MEASURE_MODE_EXACTLY:MeasureMode.Exactly,MEASURE_MODE_AT_MOST:MeasureMode.AtMost,NODE_TYPE_DEFAULT:NodeType.Default,NODE_TYPE_TEXT:NodeType.Text,OVERFLOW_VISIBLE:Overflow.Visible,OVERFLOW_HIDDEN:Overflow.Hidden,OVERFLOW_SCROLL:Overflow.Scroll,POSITION_TYPE_STATIC:PositionType.Static,POSITION_TYPE_RELATIVE:PositionType.Relative,POSITION_TYPE_ABSOLUTE:PositionType.Absolute,UNIT_UNDEFINED:Unit.Undefined,UNIT_POINT:Unit.Point,UNIT_PERCENT:Unit.Percent,UNIT_AUTO:Unit.Auto,WRAP_NO_WRAP:Wrap.NoWrap,WRAP_WRAP:Wrap.Wrap,WRAP_WRAP_REVERSE:Wrap.WrapReverse},YGEnums_default=constants;Yoga=wrapAssembly(await yoga_wasm_base64_esm_default()),src_default2=Yoga,VALID_BORDER_STYLES=["single","double","rounded","heavy"];BorderChars={single:{topLeft:"\u250C",topRight:"\u2510",bottomLeft:"\u2514",bottomRight:"\u2518",horizontal:"\u2500",vertical:"\u2502",topT:"\u252C",bottomT:"\u2534",leftT:"\u251C",rightT:"\u2524",cross:"\u253C"},double:{topLeft:"\u2554",topRight:"\u2557",bottomLeft:"\u255A",bottomRight:"\u255D",horizontal:"\u2550",vertical:"\u2551",topT:"\u2566",bottomT:"\u2569",leftT:"\u2560",rightT:"\u2563",cross:"\u256C"},rounded:{topLeft:"\u256D",topRight:"\u256E",bottomLeft:"\u2570",bottomRight:"\u256F",horizontal:"\u2500",vertical:"\u2502",topT:"\u252C",bottomT:"\u2534",leftT:"\u251C",rightT:"\u2524",cross:"\u253C"},heavy:{topLeft:"\u250F",topRight:"\u2513",bottomLeft:"\u2517",bottomRight:"\u251B",horizontal:"\u2501",vertical:"\u2503",topT:"\u2533",bottomT:"\u253B",leftT:"\u2523",rightT:"\u252B",cross:"\u254B"}};BorderCharArrays={single:borderCharsToArray(BorderChars.single),double:borderCharsToArray(BorderChars.double),rounded:borderCharsToArray(BorderChars.rounded),heavy:borderCharsToArray(BorderChars.heavy)};KeyHandler=class KeyHandler extends EventEmitter{processParsedKey(parsedKey){try{switch(parsedKey.eventType){case"press":this.emit("keypress",new KeyEvent(parsedKey));break;case"release":this.emit("keyrelease",new KeyEvent(parsedKey));break;default:this.emit("keypress",new KeyEvent(parsedKey));break}}catch(error2){return console.error("[KeyHandler] Error processing parsed key:",error2),!0}return!0}processPaste(bytes,metadata){try{this.emit("paste",new PasteEvent(bytes,metadata))}catch(error2){console.error("[KeyHandler] Error processing paste:",error2)}}};InternalKeyHandler=class InternalKeyHandler extends KeyHandler{renderableHandlers=new Map;emit(event,...args){return this.emitWithPriority(event,...args)}emitWithPriority(event,...args){let hasGlobalListeners=!1,globalListeners=this.listeners(event);if(globalListeners.length>0){hasGlobalListeners=!0;for(let listener of globalListeners){try{listener(...args)}catch(error2){console.error(`[KeyHandler] Error in global ${event} handler:`,error2)}if(event==="keypress"||event==="keyrelease"||event==="paste"){if(args[0].propagationStopped)return hasGlobalListeners}}}let renderableSet=this.renderableHandlers.get(event),renderableHandlers=renderableSet&&renderableSet.size>0?[...renderableSet]:[],hasRenderableListeners=!1;if(renderableSet&&renderableSet.size>0){if(hasRenderableListeners=!0,event==="keypress"||event==="keyrelease"||event==="paste"){let keyEvent=args[0];if(keyEvent.defaultPrevented)return hasGlobalListeners||hasRenderableListeners;if(keyEvent.propagationStopped)return hasGlobalListeners||hasRenderableListeners}for(let handler of renderableHandlers){try{handler(...args)}catch(error2){console.error(`[KeyHandler] Error in renderable ${event} handler:`,error2)}if(event==="keypress"||event==="keyrelease"||event==="paste"){if(args[0].propagationStopped)return hasGlobalListeners||hasRenderableListeners}}}return hasGlobalListeners||hasRenderableListeners}onInternal(event,handler){if(!this.renderableHandlers.has(event))this.renderableHandlers.set(event,new Set);this.renderableHandlers.get(event).add(handler)}offInternal(event,handler){let handlers2=this.renderableHandlers.get(event);if(handlers2)handlers2.delete(handler)}};CSS_COLOR_NAMES={black:"#000000",white:"#FFFFFF",red:"#FF0000",green:"#008000",blue:"#0000FF",yellow:"#FFFF00",cyan:"#00FFFF",magenta:"#FF00FF",silver:"#C0C0C0",gray:"#808080",grey:"#808080",maroon:"#800000",olive:"#808000",lime:"#00FF00",aqua:"#00FFFF",teal:"#008080",navy:"#000080",fuchsia:"#FF00FF",purple:"#800080",orange:"#FFA500",brightblack:"#666666",brightred:"#FF6666",brightgreen:"#66FF66",brightblue:"#6666FF",brightyellow:"#FFFF66",brightcyan:"#66FFFF",brightmagenta:"#FF66FF",brightwhite:"#FFFFFF"};block_default={name:"block",version:"0.2.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:6,buffer:["","","","","",""],letterspace:[" "," "," "," "," "," "],letterspace_size:1,chars:{A:[" <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2> ","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],B:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],C:[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],D:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],E:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u255D </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],F:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c2>\u255A\u2550\u255D </c2>"],G:[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],H:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],I:["<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D</c2>"],J:["<c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588 \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u255D </c2>"],K:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],L:["<c1>\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],M:["<c1>\u2588\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551\u255A</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551 \u255A\u2550\u255D</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],N:["<c1>\u2588\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551 \u255A</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D</c2>"],O:[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],P:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2>","<c2>\u255A\u2550\u255D </c2>"],Q:[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2584\u2584 \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550</c2><c1>\u2580\u2580</c1><c2>\u2550\u255D </c2>"],R:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],S:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],T:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u255D</c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c2> \u255A\u2550\u255D </c2>"],U:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],V:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c2> \u255A\u2550\u2550\u2550\u255D </c2>"],W:["<c1>\u2588\u2588</c1><c2>\u2557 </c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551 </c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588\u2588</c1><c2>\u2557</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u255D\u255A\u2550\u2550\u255D </c2>"],X:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A</c2><c1>\u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>"," <c1>\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u255D</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],Y:["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c2> \u255A</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c2> \u255A\u2550\u255D </c2>"],Z:["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550</c2><c1>\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1> \u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>"," <c1>\u2588\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],"0":[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588</c1><c2>\u2554</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],"1":[" <c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>"," <c1>\u2588\u2588</c1><c2>\u2551</c2>"," <c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2> \u255A\u2550\u255D</c2>"],"2":["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>"," <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u255D </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],"3":["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>"," <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],"4":["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1> \u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1> \u2588\u2588</c1><c2>\u2551</c2>","<c2> \u255A\u2550\u255D</c2>"],"5":["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],"6":[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],"7":["<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1> \u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1> \u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c2> \u255A\u2550\u255D </c2>"],"8":[" <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u255D </c2>"],"9":[" <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2> \u255A\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>"," <c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u2550\u2550\u2550\u255D </c2>"],"!":["<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2>"],"?":["<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1> \u2584\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1> \u2580\u2580</c1><c2>\u2550\u2550\u255D </c2>","<c1> \u2588\u2588</c1><c2>\u2557 </c2>","<c2> \u255A\u2550\u255D </c2>"],".":[" "," "," "," ","<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2>"],"+":[" ","<c1> \u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2> \u255A</c2><c1>\u2588\u2588</c1><c2>\u2554\u2550\u255D</c2>","<c2> \u255A\u2550\u255D </c2>"," "],"-":[" "," ","<c1>\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u255D</c2>"," "," "],_:[" "," "," "," ","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D</c2>"],"=":[" ","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D</c2>"," "],"@":[" <c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588</c1><c2>\u2557</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A</c2><c1>\u2588</c1><c2>\u2551</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u255D\u255A\u2550\u2550\u2550\u255D </c2>"],"#":[" <c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557 </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2554\u2550</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2554\u2550</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2> \u255A\u2550\u255D \u255A\u2550\u255D </c2>"],$:["<c1>\u2584\u2584\u2588\u2588\u2588\u2584\u2584</c1><c2>\xB7</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550\u2550\u2550\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u2550\u2550\u2550</c2><c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551</c2>","<c2>\u255A\u2550</c2><c1>\u2580\u2580\u2580</c1><c2>\u2550\u2550\u255D</c2>"],"%":["<c1>\u2588\u2588</c1><c2>\u2557</c2><c1> \u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2><c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1> \u2588\u2588</c1><c2>\u2554\u255D </c2>"," <c1>\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u255D</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D \u255A\u2550\u255D</c2>"],"&":["<c1> \u2588\u2588</c1><c2>\u2557 </c2>","<c1> \u2588\u2588</c1><c2>\u2551 </c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u2550</c2><c1>\u2588\u2588</c1><c2>\u2554\u2550\u255D</c2>","<c1>\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2551 </c2>","<c2>\u255A\u2550\u2550\u2550\u2550\u2550\u255D </c2>"],"(":[" <c1>\u2588\u2588</c1><c2>\u2557</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2551 ","<c1>\u2588\u2588</c1><c2>\u2551 ","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2> \u255A\u2550\u255D</c2>"],")":["<c1>\u2588\u2588</c1><c2>\u2557 </c2>","<c2>\u255A</c2><c1>\u2588\u2588</c1><c2>\u2557</c2>"," <c1>\u2588\u2588</c1><c2>\u2551</c2>"," <c1>\u2588\u2588</c1><c2>\u2551</c2>","<c1>\u2588\u2588</c1><c2>\u2554\u255D</c2>","<c2>\u255A\u2550\u255D </c2>"],"/":["<c1> \u2588\u2588</c1><c2>\u2557</c2>","<c1> \u2588\u2588</c1><c2>\u2554\u255D</c2>","<c1> \u2588\u2588</c1><c2>\u2554\u255D </c2>"," <c1>\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c1>\u2588\u2588</c1><c2>\u2554\u255D </c2>","<c2>\u255A\u2550\u255D </c2>"],":":[" ","<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2>","<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2>"," "],";":[" "," ","<c1>\u2588\u2588</c1><c2>\u2557</c2>","<c2>\u255A\u2550\u255D</c2>","<c1>\u2584\u2588</c1><c2>\u2557</c2>","<c1>\u2580</c1><c2>\u2550\u255D</c2>"],",":[" "," "," "," ","<c1>\u2584\u2588</c1><c2>\u2557</c2>","<c1>\u2580</c1><c2>\u2550\u255D</c2>"],"'":["<c1>\u2588</c1><c2>\u2557</c2> ","<c2>\u255A\u255D</c2> "," "," "," "," "],'"':["<c1>\u2588</c1><c2>\u2557</c2><c1>\u2588</c1><c2>\u2557</c2> ","<c2>\u255A\u255D\u255A\u255D</c2> "," "," "," "," "]," ":[" "," "," "," "," "," "]}},shade_default={name:"shade",version:"0.2.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:8,buffer:["","","","","","","",""],letterspace:["<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>","<c2>\u2591</c2>"],letterspace_size:1,chars:{A:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],B:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588\u2588\u2588</c1> ","<c1>\u2588 \u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],C:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],D:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],E:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],F:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>"," <c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],G:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588\u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2> <c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],H:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],I:["<c2>\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1>"," <c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c1>\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591</c2>"],J:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>"," <c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>"," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],K:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1> ","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],L:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],M:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],N:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588</c1><c2>\u2591</c2><c1>\u2588</c1>","<c1>\u2588 \u2588\u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2> <c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],O:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c1>\u2588\u2588</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],P:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588\u2588\u2588</c1> ","<c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>"," <c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],Q:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c1>\u2588\u2588\u2588</c1>","<c2>\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],R:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588\u2588\u2588</c1> ","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],S:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588\u2588</c1>","<c1>\u2588</c1> "," <c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2> <c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],T:["<c2>\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1>"," <c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591</c2>"],U:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c1>\u2588\u2588</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],V:["<c2>\u2591\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>"," <c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1> ","<c2>\u2591</c2> <c1>\u2588</c1> <c2>\u2591</c2>","<c2>\u2591\u2591 \u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591</c2>"],W:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],X:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c1>\u2588\u2588</c1> ","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588</c1>"," <c2>\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],Y:["<c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1>"," <c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591</c2>"],Z:["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588</c1> <c2>\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],"0":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u258C\u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2> <c1>\u2588</c1>"," <c1>\u2588\u2588</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"1":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588</c1><c2>\u2591\u2591</c2>"," <c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>"," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"2":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2590\u2588\u2588</c1><c2>\u2591</c2>"," <c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],"3":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588\u2588</c1>","<c2>\u2591\u2591</c2> <c1>\u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],"4":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u2588</c1>","<c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c2>\u2591\u2591\u2591</c2> ","<c2>\u2591\u2591\u2591\u2591</c2>"],"5":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>"," <c1>\u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"6":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588\u2588</c1>","<c1>\u2588</c1> ","<c1>\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>"," <c1>\u2588\u2588</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"7":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u2588</c1>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u2588</c1> ","<c1>\u2588</c1> <c2>\u2591\u2591</c2>"," <c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"8":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>"," <c1>\u2588\u2588</c1> ","<c1>\u2588 \u2588</c1>"," <c1>\u2588\u2588</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"9":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>"," <c1>\u2588\u2588\u2588</c1>","<c2>\u2591</c2> <c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588</c1> ","<c2>\u2591\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"!":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591 \u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"?":["<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2590\u2588\u2588</c1><c2>\u2591</c2>"," <c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588</c1> ","<c2>\u2591\u2591 \u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],".":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"+":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588\u2588</c1>","<c2>\u2591</c2> <c1>\u2588</c1> ","<c2>\u2591\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"-":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],_:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," "],"=":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c1>\u2588\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],"@":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588</c1><c2>\u2591</c2>","<c1>\u2588 \u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u258C\u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1> "," <c1>\u2588\u2588\u2588</c1>"," ","<c2>\u2591\u2591\u2591\u2591</c2>"],"#":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2>","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u258C\u2590</c1> ","<c1>\u2588\u2588\u2588\u2588</c1>"," <c1>\u258C\u2590</c1> ","<c2>\u2591 \u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],$:["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u258C</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1> "," <c1>\u2588\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u258C\u2588</c1>","<c1>\u2588\u2588\u2588</c1> "," <c2>\u2591</c2>"],"%":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1> "," <c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1>","<c1>\u2588</c1> <c2>\u2591</c2> "," <c2>\u2591\u2591\u2591</c2>"],"&":["<c2>\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>","<c1>\u2588\u2588\u2588\u2588\u2588</c1>","<c1>\u2588 \u2588</c1> ","<c1>\u2588\u2588\u2588\u2588</c1><c2>\u2591</c2>","<c2> </c2> ","<c2>\u2591\u2591\u2591\u2591\u2591</c2>"],"(":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c1>\u2588</c1> <c2>\u2591\u2591</c2>","<c1>\u2588</c1><c2>\u2591\u2591\u2591</c2>"," <c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591</c2> <c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591 \u2591</c2>"],")":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591</c2> <c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591\u2591</c2> <c1>\u2588</c1>","<c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588</c1> ","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c2>\u2591 \u2591\u2591</c2>"],"/":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2><c1>\u2588</c1>","<c2>\u2591\u2591</c2><c1>\u2588</c1> ","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c1>\u2588</c1> <c2>\u2591\u2591</c2>"," <c2>\u2591\u2591\u2591</c2>"],":":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591 \u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591 \u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],";":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591 \u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>"],",":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591</c2><c1>\u2588</c1><c2>\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1> <c2>\u2591</c2>"],"'":["<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591 \u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591</c2>"],'"':["<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591\u2591</c2>","<c2>\u2591 \u2591 \u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2>"]," ":["<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>","<c2>\u2591\u2591\u2591</c2>"]}},slick_default={name:"slick",version:"0.1.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:6,buffer:["","","","","",""],letterspace:["<c2>\u2571</c2>","<c2>\u2571</c2>","<c2>\u2571</c2>","<c2>\u2571</c2>","<c2>\u2571</c2>","<c2>\u2571</c2>"],letterspace_size:1,chars:{A:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2570\u256F</c1><c2>\u2571</c2><c1>\u2570\u256F</c1>"],B:["<c1>\u256D\u2501\u2501\u256E</c1><c2>\u2571</c2>","<c1>\u2503\u256D\u256E\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2570\u256F\u2570\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],C:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2570\u256F</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],D:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2570\u256E\u256D\u256E\u2503</c1>","<c2>\u2571</c2><c1>\u2503\u2503\u2503\u2503</c1>","<c2>\u2571</c2><c1>\u2503\u2503\u2503\u2503</c1>","<c1>\u256D\u256F\u2570\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],E:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],F:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2503</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2570\u256F</c1><c2>\u2571\u2571\u2571</c2>"],G:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2570\u256F</c1>","<c1>\u2503\u2503\u256D\u2501\u256E</c1>","<c1>\u2503\u2570\u253B\u2501\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],H:["<c1>\u256D\u256E</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2570\u256F</c1><c2>\u2571</c2><c1>\u2570\u256F</c1>"],I:["<c1>\u256D\u2501\u2501\u256E</c1>","<c1>\u2570\u252B\u2523\u256F</c1>","<c2>\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u256D\u252B\u2523\u256E</c1>","<c1>\u2570\u2501\u2501\u256F</c1>"],J:["<c2>\u2571\u2571</c2><c1>\u256D\u256E</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u256D\u256E\u2503\u2503</c1>","<c1>\u2503\u2570\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u256F</c1>"],K:["<c1>\u256D\u256E\u256D\u2501\u256E</c1>","<c1>\u2503\u2503\u2503\u256D\u256F</c1>","<c1>\u2503\u2570\u256F\u256F</c1><c2>\u2571</c2>","<c1>\u2503\u256D\u256E\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2503\u2503\u2570\u256E</c1>","<c1>\u2570\u256F\u2570\u2501\u256F</c1>"],L:["<c1>\u256D\u256E</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2503\u2503</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2503\u2503</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],M:["<c1>\u256D\u2501\u256E\u256D\u2501\u256E</c1>","<c1>\u2503\u2503\u2570\u256F\u2503\u2503</c1>","<c1>\u2503\u256D\u256E\u256D\u256E\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2570\u256F\u2570\u256F\u2570\u256F</c1>"],N:["<c1>\u256D\u2501\u256E</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2503\u2570\u256E\u2503\u2503</c1>","<c1>\u2503\u256D\u256E\u2570\u256F\u2503</c1>","<c1>\u2503\u2503\u2570\u256E\u2503\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503\u2503</c1>","<c1>\u2570\u256F</c1><c2>\u2571</c2><c1>\u2570\u2501\u256F</c1>"],O:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],P:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2503</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2570\u256F</c1><c2>\u2571\u2571\u2571</c2>"],Q:["<c1>\u256D\u2501\u2501\u2501\u256E</c1><c2>\u2571</c2>","<c1>\u2503\u256D\u2501\u256E\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2570\u2501\u256F\u2503\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u2501\u256F</c1>"],R:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2503\u256D\u256E\u256D\u256F</c1>","<c1>\u2503\u2503\u2503\u2570\u256E</c1>","<c1>\u2570\u256F\u2570\u2501\u256F</c1>"],S:["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],T:["<c1>\u256D\u2501\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u256E\u256D\u256E\u2503</c1>","<c1>\u2570\u256F\u2503\u2503\u2570\u256F</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571\u2571</c2>"],U:["<c1>\u256D\u256E</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],V:["<c1>\u256D\u256E</c1><c2>\u2571\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2570\u256E\u256D\u256F\u2503</c1>","<c1>\u2570\u256E\u2503\u2503\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2503\u2570\u256F\u2503</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u2570\u256E\u256D\u256F</c1><c2>\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571\u2571</c2>"],W:["<c1>\u256D\u256E\u256D\u256E\u256D\u256E</c1>","<c1>\u2503\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2570\u256F\u2570\u256F\u2503</c1>","<c1>\u2570\u256E\u256D\u256E\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u256F\u2570\u256F</c1><c2>\u2571</c2>"],X:["<c1>\u256D\u2501\u256E\u256D\u2501\u256E</c1>","<c1>\u2570\u256E\u2570\u256F\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u256E\u256D\u256F</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u256D\u256F\u2570\u256E</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u256D\u256E\u2570\u256E</c1>","<c1>\u2570\u2501\u256F\u2570\u2501\u256F</c1>"],Y:["<c1>\u256D\u256E</c1><c2>\u2571\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2570\u256E\u256D\u256F\u2503</c1>","<c1>\u2570\u256E\u2570\u256F\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u256E\u256D\u256F</c1><c2>\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571\u2571</c2>"],Z:["<c1>\u256D\u2501\u2501\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256E\u2501\u2503</c1>","<c2>\u2571\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u2501\u2570\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u2501\u256F</c1>"],"0":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"1":["<c2>\u2571</c2><c1>\u256D\u256E</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u2503</c1><c2>\u2571</c2>","<c1>\u2570\u256E\u2503</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u2570\u256E</c1>","<c1>\u2570\u2501\u2501\u256F</c1>"],"2":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2570\u256F\u256D\u256F\u2503</c1>","<c1>\u256D\u2501\u256F\u256D\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"3":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2570\u256F\u256D\u256F\u2503</c1>","<c1>\u256D\u256E\u2570\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"4":["<c1>\u256D\u256E</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2503\u2503</c1><c2>\u2571</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u256E\u2503</c1>","<c2>\u2571\u2571\u2571</c2><c1>\u2503\u2503</c1>","<c2>\u2571\u2571\u2571</c2><c1>\u2570\u256F</c1>"],"5":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256E\u2503</c1>","<c1>\u256D\u2501\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"6":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u2501\u256F</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"7":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2570\u256F\u256D\u256F\u2503</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u256D\u256F</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u2503</c1><c2>\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571</c2>"],"8":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"9":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2503\u2570\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u256E\u2503</c1>","<c1>\u256D\u2501\u2501\u256F\u2503</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"!":["<c1>\u256D\u256E</c1>","<c1>\u2503\u2503</c1>","<c1>\u2503\u2503</c1>","<c1>\u2570\u256F</c1>","<c1>\u256D\u256E</c1>","<c1>\u2570\u256F</c1>"],"?":["<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2503\u256D\u2501\u256E\u2503</c1>","<c1>\u2570\u256F\u256D\u256F\u2503</c1>","<c2>\u2571\u2571</c2><c1>\u2503\u256D\u256F</c1>","<c2>\u2571\u2571</c2><c1>\u256D\u256E</c1><c2>\u2571</c2>","<c2>\u2571\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571</c2>"],".":["<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c1>\u256D\u256E</c1>","<c1>\u2570\u256F</c1>"],"+":["<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571</c2><c1>\u256D\u256E</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u2570\u256E</c1>","<c1>\u2570\u256E\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571</c2>"],"-":["<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c1>\u256D\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256F</c1>","<c2>\u2571\u2571\u2571\u2571</c2>"],_:["<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c1>\u256D\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256F</c1>"],"=":["<c2>\u2571\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571\u2571</c2>","<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>","<c1>\u256D\u2501\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"@":["<c1>\u256D\u2501\u2501\u2501\u2501\u256E</c1><c2>\u2571</c2>","<c1>\u2503\u256D\u2501\u2501\u256E\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2503\u256D\u2501\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2503\u2570\u256F\u2503\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2570\u2501\u2501\u256F\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u2501\u2501\u256F</c1>"],"#":["<c2>\u2571</c2><c1>\u256D\u2501\u2501\u256E</c1><c2>\u2571</c2>","<c1>\u256D\u256F\u256D\u256E\u2570\u256E</c1>","<c1>\u2570\u256E\u2503\u2503\u256D\u256F</c1>","<c1>\u256D\u256F\u2503\u2503\u2570\u256E</c1>","<c1>\u2570\u256E\u2570\u256F\u256D\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u2501\u2501\u256F</c1><c2>\u2571</c2>"],$:["<c2>\u2571\u2571</c2><c1>\u256D\u256E</c1><c2>\u2571</c2>","<c1>\u256D\u2501\u256F\u2570\u256E</c1>","<c1>\u2503\u2570\u2501\u2501\u256E</c1>","<c1>\u2570\u2501\u2501\u256E\u2503</c1>","<c1>\u2570\u256E\u256D\u2501\u256F</c1>","<c2>\u2571</c2><c1>\u2570\u256F</c1><c2>\u2571\u2571</c2>"],"%":["<c1>\u256D\u256E</c1><c2>\u2571\u2571</c2><c1>\u256D\u2501\u256E</c1>","<c1>\u2570\u256F</c1><c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1>","<c2>\u2571\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571\u2571</c2>","<c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2><c1>\u256D\u256E</c1>","<c1>\u2570\u2501\u256F</c1><c2>\u2571\u2571</c2><c1>\u2570\u256F</c1>"],"&":["<c2>\u2571</c2><c1>\u256D\u2501\u2501\u256E</c1>","<c2>\u2571</c2><c1>\u2503\u256D\u2501\u256F</c1>","<c1>\u256D\u256F\u2570\u256E</c1><c2>\u2571</c2>","<c1>\u2503\u256D\u256E\u2503</c1><c2>\u2571</c2>","<c1>\u2503\u2570\u256F\u2503\u256E</c1>","<c1>\u2570\u2501\u2501\u2501\u256F</c1>"],"(":["<c2>\u2571\u2571</c2><c1>\u256D\u2501\u256E</c1>","<c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1>","<c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2>","<c1>\u2570\u256E\u2570\u256E</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u2570\u256E\u2570\u256E</c1>","<c2>\u2571\u2571</c2><c1>\u2570\u2501\u256F</c1>"],")":["<c1>\u256D\u2501\u256E</c1><c2>\u2571\u2571</c2>","<c1>\u2570\u256E\u2570\u256E</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u2570\u256E\u2570\u256E</c1>","<c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1>","<c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2>","<c1>\u2570\u2501\u256F</c1><c2>\u2571\u2571</c2>"],"/":["<c2>\u2571\u2571\u2571\u2571</c2><c1>\u256D\u2501\u256E</c1>","<c2>\u2571\u2571\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1>","<c2>\u2571\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571</c2>","<c2>\u2571</c2><c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571\u2571</c2>","<c1>\u256D\u256F\u256D\u256F</c1><c2>\u2571\u2571\u2571</c2>","<c1>\u2570\u2501\u256F</c1><c2>\u2571\u2571\u2571\u2571</c2>"],":":["<c2>\u2571\u2571</c2>","<c1>\u256D\u256E</c1>","<c1>\u2570\u256F</c1>","<c1>\u256D\u256E</c1>","<c1>\u2570\u256F</c1>","<c2>\u2571\u2571</c2>"],";":["<c1>\u256D\u256E</c1>","<c1>\u2503\u2503</c1>","<c1>\u2570\u256F</c1>","<c1>\u256D\u256E</c1>","<c1>\u2570\u252B</c1>","<c2>\u2571</c2><c1>\u256F</c1>"],",":["<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c1>\u256D\u256E</c1>","<c1>\u2570\u252B</c1>","<c2>\u2571</c2><c1>\u256F</c1>"],"'":["<c1>\u256D\u256E</c1>","<c1>\u2570\u256F</c1>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>","<c2>\u2571\u2571</c2>"],'"':["<c1>\u256D\u256E\u256D\u256E</c1>","<c1>\u2570\u256F\u2570\u256F</c1>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571\u2571</c2>"]," ":["<c2>\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571</c2>","<c2>\u2571\u2571\u2571</c2>"]}},tiny_default={name:"tiny",version:"0.2.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:1,lines:2,buffer:["",""],letterspace:[" "," "],letterspace_size:1,chars:{A:["\u2584\u2580\u2588","\u2588\u2580\u2588"],B:["\u2588\u2584\u2584","\u2588\u2584\u2588"],C:["\u2588\u2580\u2580","\u2588\u2584\u2584"],D:["\u2588\u2580\u2584","\u2588\u2584\u2580"],E:["\u2588\u2580\u2580","\u2588\u2588\u2584"],F:["\u2588\u2580\u2580","\u2588\u2580 "],G:["\u2588\u2580\u2580","\u2588\u2584\u2588"],H:["\u2588 \u2588","\u2588\u2580\u2588"],I:["\u2588","\u2588"],J:[" \u2588","\u2588\u2584\u2588"],K:["\u2588\u2584\u2580","\u2588 \u2588"],L:["\u2588 ","\u2588\u2584\u2584"],M:["\u2588\u2580\u2584\u2580\u2588","\u2588 \u2580 \u2588"],N:["\u2588\u2584 \u2588","\u2588 \u2580\u2588"],O:["\u2588\u2580\u2588","\u2588\u2584\u2588"],P:["\u2588\u2580\u2588","\u2588\u2580\u2580"],Q:["\u2588\u2580\u2588","\u2580\u2580\u2588"],R:["\u2588\u2580\u2588","\u2588\u2580\u2584"],S:["\u2588\u2580\u2580","\u2584\u2584\u2588"],T:["\u2580\u2588\u2580"," \u2588 "],U:["\u2588 \u2588","\u2588\u2584\u2588"],V:["\u2588 \u2588","\u2580\u2584\u2580"],W:["\u2588 \u2588 \u2588","\u2580\u2584\u2580\u2584\u2580"],X:["\u2580\u2584\u2580","\u2588 \u2588"],Y:["\u2588\u2584\u2588"," \u2588 "],Z:["\u2580\u2588","\u2588\u2584"],"0":["\u259E\u2588\u259A","\u259A\u2588\u259E"],"1":["\u2584\u2588"," \u2588"],"2":["\u2580\u2588","\u2588\u2584"],"3":["\u2580\u2580\u2588","\u2584\u2588\u2588"],"4":["\u2588 \u2588","\u2580\u2580\u2588"],"5":["\u2588\u2580","\u2584\u2588"],"6":["\u2588\u2584\u2584","\u2588\u2584\u2588"],"7":["\u2580\u2580\u2588"," \u2588"],"8":["\u2588\u2588\u2588","\u2588\u2584\u2588"],"9":["\u2588\u2580\u2588","\u2580\u2580\u2588"],"!":["\u2588","\u2584"],"?":["\u2580\u2588"," \u2584"],".":[" ","\u2584"],"+":["\u2584\u2588\u2584"," \u2580 "],"-":["\u2584\u2584"," "],_:[" ","\u2584\u2584"],"=":["\u2580\u2580","\u2580\u2580"],"@":["\u259B\u2588\u259C","\u2599\u259F\u2583"],"#":["\u259F\u2584\u2599","\u259C\u2580\u259B"],$:["\u2596\u2588\u2597","\u2598\u2588\u259D"],"%":["\u2580 \u2584\u2580","\u2584\u2580 \u2584"],"&":["\u2584\u2584\u2588","\u2588\u2584\u2588"],"(":["\u2584\u2580","\u2580\u2584"],")":["\u2580\u2584","\u2584\u2580"],"/":[" \u2584\u2580","\u2584\u2580 "],":":["\u2580","\u2584"],";":[" ","\u2584\u2580"],",":[" ","\u2588"],"'":["\u2580"," "],'"':["\u259B \u259C"," "]," ":[" "," "]}},huge_default={name:"huge",version:"0.2.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:11,buffer:["","","","","","","","","","",""],letterspace:[" "," "," "," "," "," "," "," "," "," "," "],letterspace_size:1,chars:{A:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],B:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],C:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],D:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],E:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],F:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],G:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],H:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],I:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],J:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],K:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],L:[" <c1>\u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],M:[" <c1>\u2584\u2584 \u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2580 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],N:[" <c1>\u2584\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580\u2580</c1> "],O:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],P:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],Q:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],R:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],S:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],T:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],U:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],V:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],W:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2584 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580 \u2580\u2580</c1> "],X:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580 \u2580</c1> "],Y:[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],Z:[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"0":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"1":[" <c1>\u2584\u2584\u2584\u2584</c1> "," <c1>\u2584\u2588</c1><c2>\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580 \u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"2":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"3":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"4":[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2580</c1> "],"5":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"6":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"7":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],"8":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"9":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"!":[" <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "],"?":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> "," <c1>\u2584\u2588</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u2588\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580 \u2584\u2584\u2584\u2588</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2588</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u2588</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C\u2580\u2580\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580</c1> "," <c1>\u2584\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580</c1> "],".":[" "," "," "," "," "," "," "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "],"+":[" "," "," <c1>\u2584\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2584\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2588</c1><c2>\u2591\u2591</c2><c1>\u2588\u2580\u2580</c1> "," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580</c1> "," "," "],"-":[" "," "," "," "," <c1>\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "," "," "," "," "],_:[" "," "," "," "," "," "," "," <c1>\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "," "],"=":[" "," "," <c1>\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "," "," <c1>\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "," "," "],"@":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2584\u2584\u2584\u2584 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2588</c1><c2>\u2591\u2591\u2591\u2591</c2><c1>\u2588 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u2588\u2588\u2588\u2588</c1><c2>\u2591</c2><c1>\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2588</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C\u2584\u2584\u2588\u2588\u2588\u2588\u2588\u2588\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2580</c1> "],"#":[" <c1>\u2584 \u2584</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580 \u2580</c1> "],$:[" <c1>\u2584</c1> "," <c1>\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580</c1> "," <c1>\u2580</c1> "],"%":[" <c1>\u2584</c1> "," <c1>\u2584 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580 \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2584</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2580</c1> "," <c1>\u2580</c1> "],"&":[" <c1>\u2584\u2584\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2580\u2580\u2580\u2580\u2588</c1><c2>\u2591</c2><c1>\u258C \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C \u2590</c1><c2>\u2591</c2><c1>\u2588</c1><c2>\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2588\u2584\u2584\u2584\u2584\u2588</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580\u2580 \u2580</c1> "],"(":[" <c1>\u2584\u2584\u2584\u2584\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u2588\u2580\u2580\u2580</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u2588\u2584\u2584\u2584</c1> "," <c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "],")":[" <c1>\u2584\u2584\u2584\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2588</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2584\u2584\u2584\u2588</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>","<c1>\u2590</c1><c2>\u2591\u2591\u2591\u2591\u2591</c2><c1>\u258C</c1> "," <c1>\u2580\u2580\u2580\u2580\u2580</c1> "],"/":[" <c1>\u2584</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1>"," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u258C</c1> "," <c1>\u2580</c1> "],":":[" "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "," "," "],";":[" "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u2580</c1> "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u258C</c1> "," <c1>\u2580</c1> "," "],",":[" "," "," "," "," "," "," "," <c1>\u2584\u2584</c1> ","<c1>\u2590</c1><c2>\u2591\u2591</c2><c1>\u258C</c1>"," <c1>\u2580\u258C</c1> "," <c1>\u2580</c1> "],"'":[" <c1>\u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2590</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2590</c1>"," <c1>\u2580</c1> "," "," "," "," "," "," "," "],'"':[" <c1>\u2584 \u2584</c1> ","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2590\u2590</c1><c2>\u2591</c2><c1>\u2590</c1>","<c1>\u2590</c1><c2>\u2591</c2><c1>\u2590\u2590</c1><c2>\u2591</c2><c1>\u2590</c1>"," <c1>\u2580 \u2580</c1> "," "," "," "," "," "," "," "]," ":[" "," "," "," "," "," "," "," "," "," "," "]}},grid_default={name:"grid",version:"0.1.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:6,buffer:["","","","","",""],letterspace:["<c2>\u254B</c2>","<c2>\u254B</c2>","<c2>\u254B</c2>","<c2>\u254B</c2>","<c2>\u254B</c2>","<c2>\u254B</c2>"],letterspace_size:1,chars:{A:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],B:["<c1>\u250F\u2513</c1><c2>\u254B\u254B</c2>","<c1>\u2503\u2517\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],C:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u251B</c1>","<c1>\u2503\u2517\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],D:["<c2>\u254B\u254B</c2><c1>\u250F\u2513</c1>","<c1>\u250F\u2501\u251B\u2503</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],E:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u2503\u2501\u252B</c1>","<c1>\u2503\u2503\u2501\u252B</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],F:["<c2>\u254B</c2><c1>\u250F\u2501\u2513</c1>","<c1>\u250F\u251B\u2517\u2513</c1>","<c1>\u2517\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2503\u2503</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>"],G:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2513\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>"],H:["<c1>\u250F\u2513</c1><c2>\u254B\u254B</c2>","<c1>\u2503\u2517\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2503\u2503\u2503</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],I:["<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>","<c1>\u250F\u2513</c1>","<c1>\u2503\u2503</c1>","<c1>\u2517\u251B</c1>","<c2>\u254B\u254B</c2>"],J:["<c2>\u254B</c2><c1>\u250F\u2513</c1>","<c2>\u254B</c2><c1>\u2517\u251B</c1>","<c2>\u254B</c2><c1>\u250F\u2513</c1>","<c2>\u254B</c2><c1>\u2503\u2503</c1>","<c1>\u250F\u251B\u2503</c1>","<c1>\u2517\u2501\u251B</c1>"],K:["<c1>\u250F\u2513</c1><c2>\u254B\u254B</c2>","<c1>\u2503\u2503\u250F\u2513</c1>","<c1>\u2503\u2517\u251B\u251B</c1>","<c1>\u2503\u250F\u2513\u2513</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],L:["<c1>\u250F\u2513</c1><c2>\u254B</c2>","<c1>\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u2503\u2517\u2513</c1>","<c1>\u2517\u2501\u251B</c1>","<c2>\u254B\u254B\u254B</c2>"],M:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513\u250F\u2513</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2503\u2503\u2503\u2503</c1>","<c1>\u2517\u253B\u253B\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],N:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2513</c1><c2>\u254B</c2>","<c1>\u2503\u250F\u2513\u2513</c1>","<c1>\u2503\u2503\u2503\u2503</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],O:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],P:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2503\u250F\u2501\u251B</c1>","<c1>\u2517\u251B</c1><c2>\u254B\u254B</c2>"],Q:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2513\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2513\u2503</c1>","<c2>\u254B\u254B</c2><c1>\u2517\u251B</c1>"],R:["<c2>\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2513</c1>","<c1>\u2503\u250F\u251B</c1>","<c1>\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u2517\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B</c2>"],S:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2503\u2501\u2501\u252B</c1>","<c1>\u2523\u2501\u2501\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],T:["<c2>\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u2517\u2513</c1>","<c1>\u2517\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2503\u2517\u2513</c1>","<c2>\u254B</c2><c1>\u2517\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],U:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513\u250F\u2513</c1>","<c1>\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],V:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513\u250F\u2513</c1>","<c1>\u2503\u2517\u251B\u2503</c1>","<c1>\u2517\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>"],W:["<c2>\u254B\u254B\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513\u250F\u2513\u250F\u2513</c1>","<c1>\u2503\u2517\u251B\u2517\u251B\u2503</c1>","<c1>\u2517\u2513\u250F\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2517\u251B\u2517\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B\u254B\u254B\u254B</c2>"],X:["<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513\u250F\u2513</c1>","<c1>\u2517\u254B\u254B\u251B</c1>","<c1>\u250F\u254B\u254B\u2513</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>"],Y:["<c2>\u254B\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2513</c1><c2>\u254B</c2><c1>\u250F\u2513</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2513\u250F\u251B</c1>","<c1>\u2517\u2501\u2501\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B\u254B\u254B</c2>"],Z:["<c2>\u254B\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2523\u2501\u2501\u2503\u2503</c1>","<c1>\u2503\u2503\u2501\u2501\u252B</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B\u254B</c2>"],"0":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2503\u2503\u2503\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"1":["<c2>\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u2503</c1><c2>\u254B</c2>","<c1>\u2517\u2513\u2503</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u2517\u2513</c1>","<c1>\u2517\u2501\u2501\u251B</c1>"],"2":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2517\u251B\u250F\u251B\u2503</c1>","<c1>\u250F\u2501\u251B\u250F\u251B</c1>","<c1>\u2503\u2517\u2501\u253B\u2513</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"3":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2517\u251B\u250F\u251B\u2503</c1>","<c1>\u250F\u2513\u2517\u2513\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"4":["<c1>\u250F\u2513</c1><c2>\u254B</c2><c1>\u250F\u2513</c1>","<c1>\u2503\u2503</c1><c2>\u254B</c2><c1>\u2503\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2513\u2503</c1>","<c2>\u254B\u254B\u254B</c2><c1>\u2503\u2503</c1>","<c2>\u254B\u254B\u254B</c2><c1>\u2517\u251B</c1>"],"5":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2501\u251B</c1>","<c1>\u2503\u2517\u2501\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u2513\u2503</c1>","<c1>\u250F\u2501\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"6":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2501\u251B</c1>","<c1>\u2503\u2517\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"7":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2517\u251B\u250F\u251B\u2503</c1>","<c2>\u254B\u254B</c2><c1>\u2503\u250F\u251B</c1>","<c2>\u254B\u254B</c2><c1>\u2503\u2503</c1><c2>\u254B</c2>","<c2>\u254B\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>"],"8":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"9":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2503\u2517\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2513\u2503</c1>","<c1>\u250F\u2501\u2501\u251B\u2503</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>"],"!":["<c1>\u250F\u2513</c1>","<c1>\u2503\u2503</c1>","<c1>\u2503\u2503</c1>","<c1>\u2517\u251B</c1>","<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>"],"?":["<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2503\u250F\u2501\u2513\u2503</c1>","<c1>\u2517\u251B\u250F\u251B\u2503</c1>","<c2>\u254B\u254B</c2><c1>\u2503\u250F\u251B</c1>","<c2>\u254B\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c2>\u254B\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>"],".":["<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>"],"+":["<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u2517\u2513</c1>","<c1>\u2517\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>"],"-":["<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>"],_:["<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u251B</c1>"],"=":["<c2>\u254B\u254B\u254B\u254B\u254B</c2>","<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>","<c1>\u250F\u2501\u2501\u2501\u2513</c1>","<c1>\u2517\u2501\u2501\u2501\u251B</c1>","<c2>\u254B\u254B\u254B\u254B\u254B</c2>"],"@":["<c1>\u250F\u2501\u2501\u2501\u2501\u2513</c1><c2>\u254B</c2>","<c1>\u2503\u250F\u2501\u2501\u2513\u2503</c1><c2>\u254B</c2>","<c1>\u2503\u2503\u250F\u2501\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u2503\u2503\u2517\u251B\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u2503\u2517\u2501\u2501\u251B\u2517\u2513</c1>","<c1>\u2517\u2501\u2501\u2501\u2501\u2501\u251B</c1>"],"#":["<c2>\u254B</c2><c1>\u250F\u2501\u2501\u2501\u2513</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u250F\u2501\u2513\u2517\u2513</c1>","<c1>\u2517\u2513\u2503\u2503\u2503\u250F\u251B</c1>","<c1>\u250F\u251B\u2503\u2503\u2503\u2517\u2513</c1>","<c1>\u2517\u2513\u2517\u2501\u251B\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2517\u2501\u2501\u2501\u251B</c1><c2>\u254B</c2>"],$:["<c2>\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c1>\u250F\u251B\u2517\u2513</c1>","<c1>\u2503\u2501\u2501\u252B</c1>","<c1>\u2523\u2501\u2501\u2503</c1>","<c1>\u2517\u2513\u250F\u251B</c1>","<c2>\u254B</c2><c1>\u2517\u251B</c1><c2>\u254B</c2>"],"%":["<c1>\u250F\u2513</c1><c2>\u254B\u254B</c2><c1>\u250F\u2501\u2513</c1>","<c1>\u2517\u251B</c1><c2>\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1>","<c2>\u254B\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B\u254B</c2>","<c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B</c2><c1>\u250F\u2513</c1>","<c1>\u2517\u2501\u251B</c1><c2>\u254B\u254B</c2><c1>\u2517\u251B</c1>"],"&":["<c2>\u254B\u254B</c2><c1>\u250F\u2513</c1><c2>\u254B</c2>","<c2>\u254B\u254B</c2><c1>\u2503\u2503</c1><c2>\u254B</c2>","<c1>\u250F\u2501\u251B\u2517\u2513</c1>","<c1>\u2503\u250F\u2513\u250F\u251B</c1>","<c1>\u2503\u2517\u251B\u2503</c1><c2>\u254B</c2>","<c1>\u2517\u2501\u2501\u251B</c1><c2>\u254B</c2>"],"(":["<c2>\u254B\u254B</c2><c1>\u250F\u2501\u2513</c1>","<c2>\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1>","<c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B</c2>","<c1>\u2517\u2513\u2517\u2513</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u2517\u2513\u2517\u2513</c1>","<c2>\u254B\u254B</c2><c1>\u2517\u2501\u251B</c1>"],")":["<c1>\u250F\u2501\u2513</c1><c2>\u254B\u254B</c2>","<c1>\u2517\u2513\u2517\u2513</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u2517\u2513\u2517\u2513</c1>","<c2>\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1>","<c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B</c2>","<c1>\u2517\u2501\u251B</c1><c2>\u254B\u254B</c2>"],"/":["<c2>\u254B\u254B\u254B\u254B</c2><c1>\u250F\u2501\u2513</c1>","<c2>\u254B\u254B\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1>","<c2>\u254B\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B</c2>","<c2>\u254B</c2><c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B\u254B</c2>","<c1>\u250F\u251B\u250F\u251B</c1><c2>\u254B\u254B\u254B</c2>","<c1>\u2517\u2501\u251B</c1><c2>\u254B\u254B\u254B\u254B</c2>"],":":["<c2>\u254B\u254B</c2>","<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>","<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>","<c2>\u254B\u254B</c2>"],";":["<c2>\u254B\u254B</c2>","<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>","<c2>\u254B\u254B</c2>","<c1>\u250F\u2513</c1>","<c1>\u2517\u252B</c1>"],",":["<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c1>\u250F\u2513</c1>","<c1>\u2517\u252B</c1>"],"'":["<c1>\u250F\u2513</c1>","<c1>\u2517\u251B</c1>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>"],'"':["<c1>\u250F\u2513\u250F\u2513</c1>","<c1>\u2517\u251B\u2517\u251B</c1>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>","<c2>\u254B\u254B\u254B\u254B</c2>"]," ":["<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>","<c2>\u254B\u254B</c2>"]}},pallet_default={name:"pallet",version:"0.1.0",homepage:"https://github.com/dominikwilkowski/cfonts",colors:2,lines:6,buffer:["","","","","",""],letterspace:["<c2>\u2500</c2>","<c2>\u2500</c2>","<c2>\u2500</c2>","<c2>\u2500</c2>","<c2>\u2500</c2>","<c2>\u2500</c2>"],letterspace_size:1,chars:{A:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u255A\u255D</c1><c2>\u2500</c2><c1>\u255A\u255D</c1>"],B:["<c1>\u2554\u2550\u2550\u2557</c1><c2>\u2500</c2>","<c1>\u2551\u2554\u2557\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u255A\u255D\u255A\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],C:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u255A\u255D</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],D:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u255A\u2557\u2554\u2557\u2551</c1>","<c2>\u2500</c2><c1>\u2551\u2551\u2551\u2551</c1>","<c2>\u2500</c2><c1>\u2551\u2551\u2551\u2551</c1>","<c1>\u2554\u255D\u255A\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],E:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],F:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u2551</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u255A\u255D</c1><c2>\u2500\u2500\u2500</c2>"],G:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u255A\u255D</c1>","<c1>\u2551\u2551\u2554\u2550\u2557</c1>","<c1>\u2551\u255A\u2569\u2550\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],H:["<c1>\u2554\u2557</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u255A\u255D</c1><c2>\u2500</c2><c1>\u255A\u255D</c1>"],I:["<c1>\u2554\u2550\u2550\u2557</c1>","<c1>\u255A\u2563\u2560\u255D</c1>","<c2>\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2554\u2563\u2560\u2557</c1>","<c1>\u255A\u2550\u2550\u255D</c1>"],J:["<c2>\u2500\u2500</c2><c1>\u2554\u2557</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2554\u2557\u2551\u2551</c1>","<c1>\u2551\u255A\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u255D</c1>"],K:["<c1>\u2554\u2557\u2554\u2550\u2557</c1>","<c1>\u2551\u2551\u2551\u2554\u255D</c1>","<c1>\u2551\u255A\u255D\u255D</c1><c2>\u2500</c2>","<c1>\u2551\u2554\u2557\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u2551\u2551\u255A\u2557</c1>","<c1>\u255A\u255D\u255A\u2550\u255D</c1>"],L:["<c1>\u2554\u2557</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u2551\u2551</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u2551\u2551</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],M:["<c1>\u2554\u2550\u2557\u2554\u2550\u2557</c1>","<c1>\u2551\u2551\u255A\u255D\u2551\u2551</c1>","<c1>\u2551\u2554\u2557\u2554\u2557\u2551</c1>","<c1>\u2551\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u2551\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u255A\u255D\u255A\u255D\u255A\u255D</c1>"],N:["<c1>\u2554\u2550\u2557</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u2551\u255A\u2557\u2551\u2551</c1>","<c1>\u2551\u2554\u2557\u255A\u255D\u2551</c1>","<c1>\u2551\u2551\u255A\u2557\u2551\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551\u2551</c1>","<c1>\u255A\u255D</c1><c2>\u2500</c2><c1>\u255A\u2550\u255D</c1>"],O:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],P:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u2551</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u255A\u255D</c1><c2>\u2500\u2500\u2500</c2>"],Q:["<c1>\u2554\u2550\u2550\u2550\u2557</c1><c2>\u2500</c2>","<c1>\u2551\u2554\u2550\u2557\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u255A\u2550\u255D\u2560\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u2550\u255D</c1>"],R:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u2551\u2554\u2557\u2554\u255D</c1>","<c1>\u2551\u2551\u2551\u255A\u2557</c1>","<c1>\u255A\u255D\u255A\u2550\u255D</c1>"],S:["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],T:["<c1>\u2554\u2550\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2557\u2554\u2557\u2551</c1>","<c1>\u255A\u255D\u2551\u2551\u255A\u255D</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500\u2500</c2>"],U:["<c1>\u2554\u2557</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],V:["<c1>\u2554\u2557</c1><c2>\u2500\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u255A\u2557\u2554\u255D\u2551</c1>","<c1>\u255A\u2557\u2551\u2551\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u2551\u255A\u255D\u2551</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u255A\u2557\u2554\u255D</c1><c2>\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500\u2500</c2>"],W:["<c1>\u2554\u2557\u2554\u2557\u2554\u2557</c1>","<c1>\u2551\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u2551\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u2551\u255A\u255D\u255A\u255D\u2551</c1>","<c1>\u255A\u2557\u2554\u2557\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u255A\u255D\u255A\u255D</c1><c2>\u2500</c2>"],X:["<c1>\u2554\u2550\u2557\u2554\u2550\u2557</c1>","<c1>\u255A\u2557\u255A\u255D\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u255A\u2557\u2554\u255D</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u2554\u255D\u255A\u2557</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u2554\u2557\u255A\u2557</c1>","<c1>\u255A\u2550\u255D\u255A\u2550\u255D</c1>"],Y:["<c1>\u2554\u2557</c1><c2>\u2500\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u255A\u2557\u2554\u255D\u2551</c1>","<c1>\u255A\u2557\u255A\u255D\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u255A\u2557\u2554\u255D</c1><c2>\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500\u2500</c2>"],Z:["<c1>\u2554\u2550\u2550\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2557\u2550\u2551</c1>","<c2>\u2500\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u2550\u255A\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u2550\u255D</c1>"],"0":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u2551\u2551\u2551\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"1":["<c2>\u2500</c2><c1>\u2554\u2557</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u2551</c1><c2>\u2500</c2>","<c1>\u255A\u2557\u2551</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u255A\u2557</c1>","<c1>\u255A\u2550\u2550\u255D</c1>"],"2":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u255A\u255D\u2554\u255D\u2551</c1>","<c1>\u2554\u2550\u255D\u2554\u255D</c1>","<c1>\u2551\u2551\u255A\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"3":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u255A\u255D\u2554\u255D\u2551</c1>","<c1>\u2554\u2557\u255A\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"4":["<c1>\u2554\u2557</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1><c2>\u2500</c2><c1>\u2551\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2557\u2551</c1>","<c2>\u2500\u2500\u2500</c2><c1>\u2551\u2551</c1>","<c2>\u2500\u2500\u2500</c2><c1>\u255A\u255D</c1>"],"5":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2557\u2551</c1>","<c1>\u2554\u2550\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"6":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2550\u255D</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"7":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u255A\u255D\u2554\u255D\u2551</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2554\u255D</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500</c2>"],"8":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"9":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2557\u2551</c1>","<c1>\u2554\u2550\u2550\u255D\u2551</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>"],"!":["<c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1>","<c1>\u2551\u2551</c1>","<c1>\u255A\u255D</c1>","<c1>\u2554\u2557</c1>","<c1>\u255A\u255D</c1>"],"?":["<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u255A\u255D\u2554\u255D\u2551</c1>","<c2>\u2500\u2500</c2><c1>\u2551\u2554\u255D</c1>","<c2>\u2500\u2500</c2><c1>\u2554\u2557</c1><c2>\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500</c2>"],".":["<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c1>\u2554\u2557</c1>","<c1>\u255A\u255D</c1>"],"+":["<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500</c2><c1>\u2554\u2557</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u255A\u2557</c1>","<c1>\u255A\u2557\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u255A\u255D</c1><c2>\u2500</c2>"],"-":["<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c1>\u2554\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u255D</c1>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>"],_:["<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c1>\u2554\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u255D</c1>"],"=":["<c2>\u2500\u2500\u2500\u2500\u2500</c2>","<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>","<c1>\u2554\u2550\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u255D</c1>","<c2>\u2500\u2500\u2500\u2500\u2500</c2>"],"@":["<c1>\u2554\u2550\u2550\u2550\u2550\u2557</c1><c2>\u2500</c2>","<c1>\u2551\u2554\u2550\u2550\u2557\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u2551\u2554\u2550\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u2551\u255A\u255D\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2551\u255A\u2550\u2550\u255D\u2560\u2557</c1>","<c1>\u255A\u2550\u2550\u2550\u2550\u2550\u255D</c1>"],"#":["<c2>\u2500</c2><c1>\u2554\u2569\u2569\u2569\u2557</c1><c2>\u2500</c2>","<c1>\u2554\u255D\u2554\u2550\u2557\u255A\u2557</c1>","<c1>\u255A\u2557\u2560\u2550\u2563\u2554\u255D</c1>","<c1>\u2554\u255D\u2560\u2550\u2563\u255A\u2557</c1>","<c1>\u255A\u2557\u255A\u2550\u255D\u2554\u255D</c1>","<c2>\u2500</c2><c1>\u255A\u2566\u2566\u2566\u255D</c1><c2>\u2500</c2>"],$:["<c1>\u2554\u255D\u2569\u255A\u2557</c1>","<c1>\u2551\u2554\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u2550\u2557</c1>","<c1>\u255A\u2550\u2550\u2557\u2551</c1>","<c1>\u2551\u255A\u2550\u255D\u2551</c1>","<c1>\u255A\u2557\u2566\u2554\u255D</c1>"],"%":["<c1>\u2554\u2557</c1><c2>\u2500\u2500</c2><c1>\u2554\u2550\u2557</c1>","<c1>\u255A\u255D</c1><c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1>","<c2>\u2500\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500\u2500</c2>","<c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2><c1>\u2554\u2557</c1>","<c1>\u255A\u2550\u255D</c1><c2>\u2500\u2500</c2><c1>\u255A\u255D</c1>"],"&":["<c2>\u2500\u2500</c2><c1>\u2554\u2557</c1><c2>\u2500</c2>","<c2>\u2500\u2500</c2><c1>\u2551\u2551</c1><c2>\u2500</c2>","<c1>\u2554\u2550\u255D\u255A\u2557</c1>","<c1>\u2551\u2554\u2557\u2554\u255D</c1>","<c1>\u2551\u255A\u255D\u2551</c1><c2>\u2500</c2>","<c1>\u255A\u2550\u2550\u255D</c1><c2>\u2500</c2>"],"(":["<c2>\u2500\u2500</c2><c1>\u2554\u2550\u2557</c1>","<c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1>","<c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2>","<c1>\u255A\u2557\u255A\u2557</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u255A\u2557\u255A\u2557</c1>","<c2>\u2500\u2500</c2><c1>\u255A\u2550\u255D</c1>"],")":["<c1>\u2554\u2550\u2557</c1><c2>\u2500\u2500</c2>","<c1>\u255A\u2557\u255A\u2557</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u255A\u2557\u255A\u2557</c1>","<c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1>","<c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2>","<c1>\u255A\u2550\u255D</c1><c2>\u2500\u2500</c2>"],"/":["<c2>\u2500\u2500\u2500\u2500</c2><c1>\u2554\u2550\u2557</c1>","<c2>\u2500\u2500\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1>","<c2>\u2500\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500</c2>","<c2>\u2500</c2><c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500\u2500</c2>","<c1>\u2554\u255D\u2554\u255D</c1><c2>\u2500\u2500\u2500</c2>","<c1>\u255A\u2550\u255D</c1><c2>\u2500\u2500\u2500\u2500</c2>"],":":["<c2>\u2500\u2500</c2>","<c1>\u2554\u2557</c1>","<c1>\u255A\u255D</c1>","<c1>\u2554\u2557</c1>","<c1>\u255A\u255D</c1>","<c2>\u2500\u2500</c2>"],";":["<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c1>\u2554\u2557</c1>","<c1>\u255A\u2563</c1>","<c2>\u2500</c2><c1>\u255D</c1>"],",":["<c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1>","<c1>\u255A\u255D</c1>","<c1>\u2554\u2557</c1>","<c1>\u255A\u2563</c1>","<c2>\u2500</c2><c1>\u255D</c1>"],"'":["<c1>\u2554\u2557</c1>","<c1>\u2551\u2551</c1>","<c1>\u255A\u255D</c1>","<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>","<c2>\u2500\u2500</c2>"],'"':["<c1>\u2554\u2557\u2554\u2557</c1>","<c1>\u2551\u2551\u2551\u2551</c1>","<c1>\u255A\u255D\u255A\u255D</c1>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500\u2500</c2>"]," ":["<c2>\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500</c2>","<c2>\u2500\u2500\u2500</c2>"]}},fonts={tiny:tiny_default,block:block_default,shade:shade_default,slick:slick_default,huge:huge_default,grid:grid_default,pallet:pallet_default},parsedFonts={};TextAttributes={NONE:0,BOLD:1,DIM:2,ITALIC:4,UNDERLINE:8,BLINK:16,INVERSE:32,HIDDEN:64,STRIKETHROUGH:128};((DebugOverlayCorner2)=>{DebugOverlayCorner2[DebugOverlayCorner2.topLeft=0]="topLeft",DebugOverlayCorner2[DebugOverlayCorner2.topRight=1]="topRight",DebugOverlayCorner2[DebugOverlayCorner2.bottomLeft=2]="bottomLeft",DebugOverlayCorner2[DebugOverlayCorner2.bottomRight=3]="bottomRight"})(DebugOverlayCorner||={});((TargetChannel2)=>{TargetChannel2[TargetChannel2.FG=1]="FG",TargetChannel2[TargetChannel2.BG=2]="BG",TargetChannel2[TargetChannel2.Both=3]="Both"})(TargetChannel||={});BrandedStyledText=Symbol.for("@opentui/core/StyledText");StyledText=class StyledText{[BrandedStyledText]=!0;chunks;constructor(chunks){this.chunks=chunks}};kittyKeyMap={27:"escape",9:"tab",13:"return",127:"backspace",57344:"escape",57345:"return",57346:"tab",57347:"backspace",57348:"insert",57349:"delete",57350:"left",57351:"right",57352:"up",57353:"down",57354:"pageup",57355:"pagedown",57356:"home",57357:"end",57358:"capslock",57359:"scrolllock",57360:"numlock",57361:"printscreen",57362:"pause",57363:"menu",57364:"f1",57365:"f2",57366:"f3",57367:"f4",57368:"f5",57369:"f6",57370:"f7",57371:"f8",57372:"f9",57373:"f10",57374:"f11",57375:"f12",57376:"f13",57377:"f14",57378:"f15",57379:"f16",57380:"f17",57381:"f18",57382:"f19",57383:"f20",57384:"f21",57385:"f22",57386:"f23",57387:"f24",57388:"f25",57389:"f26",57390:"f27",57391:"f28",57392:"f29",57393:"f30",57394:"f31",57395:"f32",57396:"f33",57397:"f34",57398:"f35",57399:"kp0",57400:"kp1",57401:"kp2",57402:"kp3",57403:"kp4",57404:"kp5",57405:"kp6",57406:"kp7",57407:"kp8",57408:"kp9",57409:"kpdecimal",57410:"kpdivide",57411:"kpmultiply",57412:"kpminus",57413:"kpplus",57414:"kpenter",57415:"kpequal",57416:"kpseparator",57417:"kpleft",57418:"kpright",57419:"kpup",57420:"kpdown",57421:"kppageup",57422:"kppagedown",57423:"kphome",57424:"kpend",57425:"kpinsert",57426:"kpdelete",57427:"clear",57428:"mediaplay",57429:"mediapause",57430:"mediaplaypause",57431:"mediareverse",57432:"mediastop",57433:"mediafastforward",57434:"mediarewind",57435:"medianext",57436:"mediaprev",57437:"mediarecord",57438:"volumedown",57439:"volumeup",57440:"mute",57441:"leftshift",57442:"leftctrl",57443:"leftalt",57444:"leftsuper",57445:"lefthyper",57446:"leftmeta",57447:"rightshift",57448:"rightctrl",57449:"rightalt",57450:"rightsuper",57451:"righthyper",57452:"rightmeta",57453:"iso_level3_shift",57454:"iso_level5_shift"};functionalKeyMap={A:"up",B:"down",C:"right",D:"left",H:"home",F:"end",E:"clear",P:"f1",Q:"f2",S:"f4"},tildeKeyMap={"1":"home","2":"insert","3":"delete","4":"end","5":"pageup","6":"pagedown","7":"home","8":"end","11":"f1","12":"f2","13":"f3","14":"f4","15":"f5","17":"f6","18":"f7","19":"f8","20":"f9","21":"f10","23":"f11","24":"f12","29":"menu","57427":"clear"};metaKeyCodeRe=/^(?:\x1b)([a-zA-Z0-9])$/,fnKeyRe=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,keyName={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[29~":"menu","[57427~":"clear","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home","[P":"f1","[Q":"f2","[S":"f4",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear",f:"right",b:"left",p:"up",n:"down","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"},nonAlphanumericKeys=[...Object.values(keyName),"backspace"],modifyOtherKeysRe=/^\x1b\[27;(\d+);(\d+)~$/;MouseParser=class MouseParser{mouseButtonsPressed=new Set;static SCROLL_DIRECTIONS={0:"up",1:"down",2:"left",3:"right"};reset(){this.mouseButtonsPressed.clear()}decodeInput(data){return(Buffer.isBuffer(data)?data:Buffer.from(data.buffer,data.byteOffset,data.byteLength)).toString("latin1")}parseMouseEvent(data){let str5=this.decodeInput(data);return this.parseMouseSequenceAt(str5,0)?.event??null}parseAllMouseEvents(data){let str5=this.decodeInput(data),events=[],offset=0;while(offset<str5.length){let parsed=this.parseMouseSequenceAt(str5,offset);if(!parsed)break;events.push(parsed.event),offset+=parsed.consumed}return events}parseMouseSequenceAt(str5,offset){if(!str5.startsWith("\x1B[",offset))return null;let introducer=str5[offset+2];if(introducer==="<")return this.parseSgrSequence(str5,offset);if(introducer==="M")return this.parseBasicSequence(str5,offset);return null}parseSgrSequence(str5,offset){let index=offset+3,values2=[0,0,0],part=0,hasDigit=!1;while(index<str5.length){let char=str5[index],charCode=str5.charCodeAt(index);if(charCode>=48&&charCode<=57){hasDigit=!0,values2[part]=values2[part]*10+(charCode-48),index++;continue}switch(char){case";":{if(!hasDigit||part>=2)return null;part++,hasDigit=!1,index++;break}case"M":case"m":{if(!hasDigit||part!==2)return null;return{event:this.decodeSgrEvent(values2[0],values2[1],values2[2],char),consumed:index-offset+1}}default:return null}}return null}parseBasicSequence(str5,offset){if(offset+6>str5.length)return null;let buttonByte=str5.charCodeAt(offset+3)-32,x=str5.charCodeAt(offset+4)-33,y=str5.charCodeAt(offset+5)-33;return{event:this.decodeBasicEvent(buttonByte,x,y),consumed:6}}decodeSgrEvent(rawButtonCode,wireX,wireY,pressRelease){let button=rawButtonCode&3,isScroll=(rawButtonCode&64)!==0,scrollDirection=!isScroll?void 0:MouseParser.SCROLL_DIRECTIONS[button],isMotion=(rawButtonCode&32)!==0,modifiers={shift:(rawButtonCode&4)!==0,alt:(rawButtonCode&8)!==0,ctrl:(rawButtonCode&16)!==0},type2,scrollInfo;if(isMotion){let isDragging=this.mouseButtonsPressed.size>0;if(button===3)type2="move";else if(isDragging)type2="drag";else type2="move"}else if(isScroll&&pressRelease==="M")type2="scroll",scrollInfo={direction:scrollDirection,delta:1};else if(type2=pressRelease==="M"?"down":"up",type2==="down"&&button!==3)this.mouseButtonsPressed.add(button);else if(type2==="up")this.mouseButtonsPressed.clear();return{type:type2,button:button===3?0:button,x:wireX-1,y:wireY-1,modifiers,scroll:scrollInfo}}decodeBasicEvent(buttonByte,x,y){let button=buttonByte&3,isScroll=(buttonByte&64)!==0,isMotion=(buttonByte&32)!==0,scrollDirection=!isScroll?void 0:MouseParser.SCROLL_DIRECTIONS[button],modifiers={shift:(buttonByte&4)!==0,alt:(buttonByte&8)!==0,ctrl:(buttonByte&16)!==0},type2,actualButton,scrollInfo;if(isMotion)type2="move",actualButton=button===3?-1:button;else if(isScroll)type2="scroll",actualButton=0,scrollInfo={direction:scrollDirection,delta:1};else type2=button===3?"up":"down",actualButton=button===3?0:button;return{type:type2,button:actualButton,x,y,modifiers,scroll:scrollInfo}}};singletonCacheSymbol=Symbol.for("@opentui/core/singleton");envRegistry=singleton("env-registry",()=>({}));envStore=singleton("env-store",()=>new EnvStore);env=new Proxy({},{get(target,prop){if(typeof prop!=="string")return;return envStore.get(prop)},has(target,prop){return envStore.has(prop)},ownKeys(){return Object.keys(envRegistry)},getOwnPropertyDescriptor(target,prop){if(envStore.has(prop))return{enumerable:!0,configurable:!0,get:()=>envStore.get(prop)};return}}),BRACKETED_PASTE_START=Buffer3.from("\x1B[200~"),BRACKETED_PASTE_END=Buffer3.from("\x1B[201~"),EMPTY_BYTES=new Uint8Array(0),KEY_DECODER=new TextDecoder,DEFAULT_PROTOCOL_CONTEXT={kittyKeyboardEnabled:!1,privateCapabilityRepliesActive:!1,pixelResolutionQueryActive:!1,explicitWidthCprActive:!1},RXVT_DOLLAR_CSI_RE=/^\x1b\[\d+\$$/,SYSTEM_CLOCK=new SystemClock;registerEnvVar({name:"OTUI_TS_STYLE_WARN",default:!1,description:"Enable warnings for missing syntax styles"});TIMERS_MAP=new Map;registerEnvVar({name:"OTUI_TREE_SITTER_WORKER_PATH",description:"Path to the TreeSitter worker",type:"string",default:""});DEFAULT_PARSERS=getParsers();TreeSitterClient=class TreeSitterClient extends EventEmitter2{initialized=!1;worker;buffers=new Map;initializePromise;initializeResolvers;messageCallbacks=new Map;messageIdCounter=0;editQueues=new Map;debouncer;options;constructor(options){super();this.options=options,this.debouncer=createDebounce("tree-sitter-client"),this.startWorker()}emitError(error2,bufferId){if(this.listenerCount("error")>0)this.emit("error",error2,bufferId)}emitWarning(warning,bufferId){if(this.listenerCount("warning")>0)this.emit("warning",warning,bufferId)}startWorker(){if(this.worker)return;let worker_path;if(env.OTUI_TREE_SITTER_WORKER_PATH)worker_path=env.OTUI_TREE_SITTER_WORKER_PATH;else if(typeof OTUI_TREE_SITTER_WORKER_PATH<"u")worker_path=OTUI_TREE_SITTER_WORKER_PATH;else if(this.options.workerPath)worker_path=this.options.workerPath;else if(worker_path=new URL("./parser.worker.js",import.meta.url).href,!existsSync49(resolve22(import.meta.dirname,"parser.worker.js")))worker_path=new URL("./parser.worker.ts",import.meta.url).href;this.worker=new Worker(worker_path),this.worker.onmessage=this.handleWorkerMessage.bind(this),this.worker.onerror=(error2)=>{if(console.error("TreeSitter worker error:",error2.message),this.initializeResolvers)clearTimeout(this.initializeResolvers.timeoutId),this.initializeResolvers.reject(Error(`Worker error: ${error2.message}`)),this.initializeResolvers=void 0;this.emitError(`Worker error: ${error2.message}`)}}stopWorker(){if(!this.worker)return;this.worker.terminate(),this.worker=void 0}handleReset(){return this.buffers.clear(),this.stopWorker(),this.startWorker(),this.initializePromise=void 0,this.initializeResolvers=void 0,this.initialize()}async initialize(){if(this.initializePromise)return this.initializePromise;return this.initializePromise=new Promise((resolve32,reject)=>{let timeoutMs=this.options.initTimeout??1e4,timeoutId=setTimeout(()=>{let error2=Error("Worker initialization timed out");console.error("TreeSitter client:",error2.message),this.initializeResolvers=void 0,reject(error2)},timeoutMs);this.initializeResolvers={resolve:resolve32,reject,timeoutId},this.worker?.postMessage({type:"INIT",dataPath:this.options.dataPath})}),await this.initializePromise,await this.registerDefaultParsers(),this.initializePromise}async registerDefaultParsers(){for(let parser of DEFAULT_PARSERS)this.addFiletypeParser(parser)}resolvePath(path6){if(isUrl(path6))return path6;if(isBunfsPath(path6))return normalizeBunfsPath(parse2(path6).base);if(!isAbsolute(path6))return resolve22(path6);return path6}addFiletypeParser(filetypeParser){let resolvedParser={...filetypeParser,aliases:filetypeParser.aliases?[...new Set(filetypeParser.aliases.filter((alias)=>alias!==filetypeParser.filetype))]:void 0,wasm:this.resolvePath(filetypeParser.wasm),queries:{highlights:filetypeParser.queries.highlights.map((path6)=>this.resolvePath(path6)),injections:filetypeParser.queries.injections?.map((path6)=>this.resolvePath(path6))}};this.worker?.postMessage({type:"ADD_FILETYPE_PARSER",filetypeParser:resolvedParser})}async getPerformance(){let messageId=`performance_${this.messageIdCounter++}`;return new Promise((resolve32)=>{this.messageCallbacks.set(messageId,resolve32),this.worker?.postMessage({type:"GET_PERFORMANCE",messageId})})}async highlightOnce(content,filetype){if(!this.initialized)try{await this.initialize()}catch(error2){return{error:"Could not highlight because of initialization error"}}let messageId=`oneshot_${this.messageIdCounter++}`;return new Promise((resolve32)=>{this.messageCallbacks.set(messageId,resolve32),this.worker?.postMessage({type:"ONESHOT_HIGHLIGHT",content,filetype,messageId})})}handleWorkerMessage(event){let{type:type2,bufferId,error:error2,highlights,warning,messageId,hasParser,performance:performance22,version}=event.data;if(type2==="HIGHLIGHT_RESPONSE"){let buffer2=this.buffers.get(bufferId);if(!buffer2||!buffer2.hasParser)return;if(buffer2.version!==version){this.resetBuffer(bufferId,buffer2.version,buffer2.content);return}this.emit("highlights:response",bufferId,version,highlights)}if(type2==="INIT_RESPONSE"){if(this.initializeResolvers){if(clearTimeout(this.initializeResolvers.timeoutId),error2)console.error("TreeSitter client initialization failed:",error2),this.initializeResolvers.reject(Error(error2));else this.initialized=!0,this.initializeResolvers.resolve();this.initializeResolvers=void 0;return}}if(type2==="PARSER_INIT_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback({hasParser,warning,error:error2});return}if(type2==="PRELOAD_PARSER_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback({hasParser});return}if(type2==="BUFFER_DISPOSED"){let callback=this.messageCallbacks.get(`dispose_${bufferId}`);if(callback)this.messageCallbacks.delete(`dispose_${bufferId}`),callback(!0);this.emit("buffer:disposed",bufferId);return}if(type2==="PERFORMANCE_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback(performance22);return}if(type2==="ONESHOT_HIGHLIGHT_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback({highlights,warning,error:error2});return}if(type2==="UPDATE_DATA_PATH_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback({error:error2});return}if(type2==="CLEAR_CACHE_RESPONSE"){let callback=this.messageCallbacks.get(messageId);if(callback)this.messageCallbacks.delete(messageId),callback({error:error2});return}if(warning){this.emitWarning(warning,bufferId);return}if(error2){this.emitError(error2,bufferId);return}if(type2==="WORKER_LOG"){let{logType,data}=event.data,message=data.join(" ");if(this.emit("worker:log",logType,message),logType==="log")console.log("TSWorker:",...data);else if(logType==="error")console.error("TSWorker:",...data);else if(logType==="warn")console.warn("TSWorker:",...data);return}}async preloadParser(filetype){let messageId=`has_parser_${this.messageIdCounter++}`;return(await new Promise((resolve32)=>{this.messageCallbacks.set(messageId,resolve32),this.worker?.postMessage({type:"PRELOAD_PARSER",filetype,messageId})})).hasParser}async createBuffer(id,content,filetype,version=1,autoInitialize=!0){if(!this.initialized){if(!autoInitialize)return this.emitError("Could not create buffer because client is not initialized"),!1;try{await this.initialize()}catch(error2){return this.emitError("Could not create buffer because of initialization error"),!1}}if(this.buffers.has(id))throw Error(`Buffer with id ${id} already exists`);this.buffers.set(id,{id,content,filetype,version,hasParser:!1});let messageId=`init_${this.messageIdCounter++}`,response=await new Promise((resolve32)=>{this.messageCallbacks.set(messageId,resolve32),this.worker?.postMessage({type:"INITIALIZE_PARSER",bufferId:id,version,content,filetype,messageId})});if(!response.hasParser){if(this.emit("buffer:initialized",id,!1),filetype!=="plaintext")this.emitWarning(response.warning||response.error||"Buffer has no parser",id);return!1}let bufferState={id,content,filetype,version,hasParser:!0};return this.buffers.set(id,bufferState),this.emit("buffer:initialized",id,!0),!0}async updateBuffer(id,edits,newContent,version){if(!this.initialized)return;let buffer2=this.buffers.get(id);if(!buffer2||!buffer2.hasParser)return;if(this.buffers.set(id,{...buffer2,content:newContent,version}),!this.editQueues.has(id))this.editQueues.set(id,new ProcessQueue((item)=>this.processEdit(id,item.edits,item.newContent,item.version,item.isReset)));this.editQueues.get(id).enqueue({edits,newContent,version})}async processEdit(bufferId,edits,newContent,version,isReset=!1){this.worker?.postMessage({type:isReset?"RESET_BUFFER":"HANDLE_EDITS",bufferId,version,content:newContent,edits})}async removeBuffer(bufferId){if(!this.initialized)return;if(this.buffers.delete(bufferId),this.editQueues.has(bufferId))this.editQueues.get(bufferId)?.clear(),this.editQueues.delete(bufferId);if(this.worker)await new Promise((resolve32)=>{let messageId=`dispose_${bufferId}`;this.messageCallbacks.set(messageId,resolve32);try{this.worker.postMessage({type:"DISPOSE_BUFFER",bufferId})}catch(error2){console.error("Error disposing buffer",error2),resolve32(!1)}setTimeout(()=>{if(this.messageCallbacks.has(messageId))this.messageCallbacks.delete(messageId),console.warn({bufferId},"Timed out waiting for buffer to be disposed"),resolve32(!1)},3000)});this.debouncer.clearDebounce(`reset-${bufferId}`)}async destroy(){if(this.initializeResolvers)clearTimeout(this.initializeResolvers.timeoutId),this.initializeResolvers.reject(Error("Client destroyed during initialization")),this.initializeResolvers=void 0;for(let[messageId,callback]of this.messageCallbacks.entries())if(typeof callback==="function")try{callback({error:"Client destroyed"})}catch(e){}this.messageCallbacks.clear(),clearDebounceScope("tree-sitter-client"),this.debouncer.clear(),this.editQueues.clear(),this.buffers.clear(),this.stopWorker(),this.initialized=!1,this.initializePromise=void 0}async resetBuffer(bufferId,version,content){if(!this.initialized)return;let buffer2=this.buffers.get(bufferId);if(!buffer2||!buffer2.hasParser){this.emitError("Cannot reset buffer with no parser",bufferId);return}this.buffers.set(bufferId,{...buffer2,content,version}),this.debouncer.debounce(`reset-${bufferId}`,10,()=>this.processEdit(bufferId,[],content,version,!0))}getBuffer(bufferId){return this.buffers.get(bufferId)}getAllBuffers(){return Array.from(this.buffers.values())}isInitialized(){return this.initialized}async setDataPath(dataPath){if(this.options.dataPath===dataPath)return;if(this.options.dataPath=dataPath,this.initialized&&this.worker){let messageId=`update_datapath_${this.messageIdCounter++}`;return new Promise((resolve32,reject)=>{this.messageCallbacks.set(messageId,(response)=>{if(response.error)reject(Error(response.error));else resolve32()}),this.worker.postMessage({type:"UPDATE_DATA_PATH",dataPath,messageId})})}}async clearCache(){if(!this.initialized||!this.worker)throw Error("Cannot clear cache: client is not initialized");let messageId=`clear_cache_${this.messageIdCounter++}`;return new Promise((resolve32,reject)=>{this.messageCallbacks.set(messageId,(response)=>{if(response.error)reject(Error(response.error));else resolve32()}),this.worker.postMessage({type:"CLEAR_CACHE",messageId})})}};registerEnvVar({name:"XDG_CONFIG_HOME",description:"Base directory for user-specific configuration files",type:"string",default:""});registerEnvVar({name:"XDG_DATA_HOME",description:"Base directory for user-specific data files",type:"string",default:""});DataPathsManager=class DataPathsManager extends EventEmitter3{_appName;_globalConfigPath;_globalConfigFile;_localConfigFile;_globalDataPath;constructor(){super();this._appName="opentui"}get appName(){return this._appName}set appName(value){if(!isValidDirectoryName(value))throw Error(`Invalid app name "${value}": must be a valid directory name`);if(this._appName!==value)this._appName=value,this._globalConfigPath=void 0,this._globalConfigFile=void 0,this._localConfigFile=void 0,this._globalDataPath=void 0,this.emit("paths:changed",this.toObject())}get globalConfigPath(){if(this._globalConfigPath===void 0){let homeDir=os3.homedir(),baseConfigDir=env.XDG_CONFIG_HOME||path3.join(homeDir,".config");this._globalConfigPath=path3.join(baseConfigDir,this._appName)}return this._globalConfigPath}get globalConfigFile(){if(this._globalConfigFile===void 0)this._globalConfigFile=path3.join(this.globalConfigPath,"init.ts");return this._globalConfigFile}get localConfigFile(){if(this._localConfigFile===void 0)this._localConfigFile=path3.join(process.cwd(),`.${this._appName}.ts`);return this._localConfigFile}get globalDataPath(){if(this._globalDataPath===void 0){let homeDir=os3.homedir(),baseDataDir=env.XDG_DATA_HOME||path3.join(homeDir,".local/share");this._globalDataPath=path3.join(baseDataDir,this._appName)}return this._globalDataPath}toObject(){return{globalConfigPath:this.globalConfigPath,globalConfigFile:this.globalConfigFile,localConfigFile:this.localConfigFile,globalDataPath:this.globalDataPath}}};extensionToFiletype=new Map([["astro","astro"],["bash","bash"],["c","c"],["cc","cpp"],["cjs","javascript"],["clj","clojure"],["cljs","clojure"],["cljc","clojure"],["cpp","cpp"],["cxx","cpp"],["cs","csharp"],["cts","typescript"],["ctsx","typescriptreact"],["dart","dart"],["diff","diff"],["edn","clojure"],["go","go"],["gemspec","ruby"],["groovy","groovy"],["h","c"],["handlebars","handlebars"],["hbs","handlebars"],["hpp","cpp"],["hxx","cpp"],["h++","cpp"],["hh","cpp"],["hrl","erlang"],["hs","haskell"],["htm","html"],["html","html"],["ini","ini"],["js","javascript"],["jsx","javascriptreact"],["jl","julia"],["json","json"],["ksh","bash"],["kt","kotlin"],["kts","kotlin"],["latex","latex"],["less","less"],["lua","lua"],["markdown","markdown"],["md","markdown"],["mdown","markdown"],["mkd","markdown"],["mjs","javascript"],["ml","ocaml"],["mli","ocaml"],["mts","typescript"],["mtsx","typescriptreact"],["patch","diff"],["php","php"],["pl","perl"],["pm","perl"],["ps1","powershell"],["psm1","powershell"],["py","python"],["pyi","python"],["r","r"],["rb","ruby"],["rake","ruby"],["rs","rust"],["ru","ruby"],["sass","sass"],["sc","scala"],["scala","scala"],["scss","scss"],["sh","bash"],["sql","sql"],["svelte","svelte"],["swift","swift"],["ts","typescript"],["tsx","typescriptreact"],["tex","latex"],["toml","toml"],["vue","vue"],["vim","vim"],["xml","xml"],["xsl","xsl"],["yaml","yaml"],["yml","yaml"],["zig","zig"],["zon","zig"],["zsh","bash"],["c++","cpp"],["erl","erlang"],["exs","elixir"],["ex","elixir"],["elm","elm"],["fsharp","fsharp"],["fs","fsharp"],["fsx","fsharp"],["fsscript","fsharp"],["fsi","fsharp"],["java","java"],["css","css"]]),basenameToFiletype=new Map([[".bash_aliases","bash"],[".bash_logout","bash"],[".bash_profile","bash"],[".bashrc","bash"],[".kshrc","bash"],[".profile","bash"],[".vimrc","vim"],[".zlogin","bash"],[".zlogout","bash"],[".zprofile","bash"],[".zshenv","bash"],[".zshrc","bash"],["appfile","ruby"],["berksfile","ruby"],["brewfile","ruby"],["cheffile","ruby"],["containerfile","dockerfile"],["dockerfile","dockerfile"],["fastfile","ruby"],["gemfile","ruby"],["gnumakefile","make"],["gvimrc","vim"],["guardfile","ruby"],["makefile","make"],["podfile","ruby"],["rakefile","ruby"],["thorfile","ruby"],["vagrantfile","ruby"]]);SYSTEM_CLOCK2=new SystemClock,OSC4_RESPONSE=/\x1b]4;(\d+);(?:(?:rgb:)([0-9a-fA-F]+)\/([0-9a-fA-F]+)\/([0-9a-fA-F]+)|#([0-9a-fA-F]{6}))(?:\x07|\x1b\\)/g,OSC_SPECIAL_RESPONSE=/\x1b](\d+);(?:(?:rgb:)([0-9a-fA-F]+)\/([0-9a-fA-F]+)\/([0-9a-fA-F]+)|#([0-9a-fA-F]{6}))(?:\x07|\x1b\\)/g;PASTE_TEXT_DECODER=new TextDecoder;URL_SCOPES=["markup.link.url","string.special.url"];pointerSize=process.arch==="x64"||process.arch==="arm64"?8:4,typeSizes={u8:1,bool_u8:1,bool_u32:4,u16:2,i16:2,u32:4,u64:8,f32:4,f64:8,pointer:pointerSize,i32:4},primitiveKeys=Object.keys(typeSizes);typeAlignments={...typeSizes},typeGetters={u8:(view,offset)=>view.getUint8(offset),bool_u8:(view,offset)=>Boolean(view.getUint8(offset)),bool_u32:(view,offset)=>Boolean(view.getUint32(offset,!0)),u16:(view,offset)=>view.getUint16(offset,!0),i16:(view,offset)=>view.getInt16(offset,!0),u32:(view,offset)=>view.getUint32(offset,!0),u64:(view,offset)=>view.getBigUint64(offset,!0),f32:(view,offset)=>view.getFloat32(offset,!0),f64:(view,offset)=>view.getFloat64(offset,!0),i32:(view,offset)=>view.getInt32(offset,!0),pointer:(view,offset)=>pointerSize===8?view.getBigUint64(offset,!0):BigInt(view.getUint32(offset,!0))};({pack:pointerPacker,unpack:pointerUnpacker}=primitivePackers("pointer"));encoder=new TextEncoder,decoder=new TextDecoder;StyledChunkStruct=defineStruct([["text","char*"],["text_len","u64",{lengthOf:"text"}],["fg","pointer",{optional:!0,packTransform:rgbaPackTransform,unpackTransform:rgbaUnpackTransform}],["bg","pointer",{optional:!0,packTransform:rgbaPackTransform,unpackTransform:rgbaUnpackTransform}],["attributes","u32",{default:0}],["link","char*",{default:""}],["link_len","u64",{lengthOf:"link"}]],{mapValue:(chunk)=>{if(!chunk.link||typeof chunk.link==="string")return chunk;return{...chunk,link:chunk.link.url}}}),HighlightStruct=defineStruct([["start","u32"],["end","u32"],["styleId","u32"],["priority","u8",{default:0}],["hlRef","u16",{default:0}]]),LogicalCursorStruct=defineStruct([["row","u32"],["col","u32"],["offset","u32"]]),VisualCursorStruct=defineStruct([["visualRow","u32"],["visualCol","u32"],["logicalRow","u32"],["logicalCol","u32"],["offset","u32"]]),UnicodeMethodEnum=defineEnum({wcwidth:0,unicode:1},"u8"),TerminalCapabilitiesStruct=defineStruct([["kitty_keyboard","bool_u8"],["kitty_graphics","bool_u8"],["rgb","bool_u8"],["unicode",UnicodeMethodEnum],["sgr_pixels","bool_u8"],["color_scheme_updates","bool_u8"],["explicit_width","bool_u8"],["scaled_text","bool_u8"],["sixel","bool_u8"],["focus_tracking","bool_u8"],["sync","bool_u8"],["bracketed_paste","bool_u8"],["hyperlinks","bool_u8"],["osc52","bool_u8"],["explicit_cursor_positioning","bool_u8"],["term_name","char*"],["term_name_len","u64",{lengthOf:"term_name"}],["term_version","char*"],["term_version_len","u64",{lengthOf:"term_version"}],["term_from_xtversion","bool_u8"]]),EncodedCharStruct=defineStruct([["width","u8"],["char","u32"]]),LineInfoStruct=defineStruct([["startCols",["u32"]],["startColsLen","u32",{lengthOf:"startCols"}],["widthCols",["u32"]],["widthColsLen","u32",{lengthOf:"widthCols"}],["sources",["u32"]],["sourcesLen","u32",{lengthOf:"sources"}],["wraps",["u32"]],["wrapsLen","u32",{lengthOf:"wraps"}],["widthColsMax","u32"]]),MeasureResultStruct=defineStruct([["lineCount","u32"],["widthColsMax","u32"]]),CursorStateStruct=defineStruct([["x","u32"],["y","u32"],["visible","bool_u8"],["style","u8"],["blinking","bool_u8"],["r","f32"],["g","f32"],["b","f32"],["a","f32"]]),CursorStyleOptionsStruct=defineStruct([["style","u8",{default:255}],["blinking","u8",{default:255}],["color","pointer",{optional:!0,packTransform:rgbaPackTransform,unpackTransform:rgbaUnpackTransform}],["cursor","u8",{default:255}]]),GridDrawOptionsStruct=defineStruct([["drawInner","bool_u8",{default:!0}],["drawOuter","bool_u8",{default:!0}]]),BuildOptionsStruct=defineStruct([["gpaSafeStats","bool_u8"],["gpaMemoryLimitTracking","bool_u8"]]),AllocatorStatsStruct=defineStruct([["totalRequestedBytes","u64"],["activeAllocations","u64"],["smallAllocations","u64"],["largeAllocations","u64"],["requestedBytesValid","bool_u8"]]),GrowthPolicyEnum=defineEnum({grow:0,block:1},"u8"),NativeSpanFeedOptionsStruct=defineStruct([["chunkSize","u32",{default:65536}],["initialChunks","u32",{default:2}],["maxBytes","u64",{default:0n}],["growthPolicy",GrowthPolicyEnum,{default:"grow"}],["autoCommitOnFull","bool_u8",{default:!0}],["spanQueueCapacity","u32",{default:0}]]),NativeSpanFeedStatsStruct=defineStruct([["bytesWritten","u64"],["spansCommitted","u64"],["chunks","u32"],["pendingSpans","u32"]]),SpanInfoStruct=defineStruct([["chunkPtr","pointer"],["offset","u32"],["len","u32"],["chunkIndex","u32"],["reserved","u32",{default:0}]],{reduceValue:(value)=>({chunkPtr:value.chunkPtr,offset:value.offset,len:value.len,chunkIndex:value.chunkIndex})}),ReserveInfoStruct=defineStruct([["ptr","pointer"],["len","u32"],["reserved","u32",{default:0}]],{reduceValue:(value)=>({ptr:value.ptr,len:value.len})}),module=await import(`@opentui/core-${process.platform}-${process.arch}/index.ts`),targetLibPath=module.default;if(isBunfsPath(targetLibPath))targetLibPath=targetLibPath.replace("../","");if(!existsSync210(targetLibPath))throw Error(`opentui is not supported on the current platform: ${process.platform}-${process.arch}`);registerEnvVar({name:"OTUI_DEBUG_FFI",description:"Enable debug logging for the FFI bindings.",type:"boolean",default:!1});registerEnvVar({name:"OTUI_TRACE_FFI",description:"Enable tracing for the FFI bindings.",type:"boolean",default:!1});registerEnvVar({name:"OPENTUI_FORCE_WCWIDTH",description:"Use wcwidth for character width calculations",type:"boolean",default:!1});registerEnvVar({name:"OPENTUI_FORCE_UNICODE",description:"Force Mode 2026 Unicode support in terminal capabilities",type:"boolean",default:!1});registerEnvVar({name:"OPENTUI_GRAPHICS",description:"Enable Kitty graphics protocol detection",type:"boolean",default:!0});registerEnvVar({name:"OPENTUI_FORCE_NOZWJ",description:"Use no_zwj width method (Unicode without ZWJ joining)",type:"boolean",default:!1});CURSOR_STYLE_TO_ID={block:0,line:1,underline:2,default:3},CURSOR_ID_TO_STYLE=["block","line","underline","default"],MOUSE_STYLE_TO_ID={default:0,pointer:1,text:2,crosshair:3,move:4,"not-allowed":5};((LogLevel3)=>{LogLevel3[LogLevel3.Error=0]="Error",LogLevel3[LogLevel3.Warn=1]="Warn",LogLevel3[LogLevel3.Info=2]="Info",LogLevel3[LogLevel3.Debug=3]="Debug"})(LogLevel2||={});try{opentuiLib=new FFIRenderLib(opentuiLibPath)}catch(error2){}BrandedRenderable=Symbol.for("@opentui/core/Renderable");((LayoutEvents2)=>{LayoutEvents2.LAYOUT_CHANGED="layout-changed",LayoutEvents2.ADDED="added",LayoutEvents2.REMOVED="removed",LayoutEvents2.RESIZED="resized"})(LayoutEvents||={});((RenderableEvents2)=>{RenderableEvents2.FOCUSED="focused",RenderableEvents2.BLURRED="blurred"})(RenderableEvents||={});BaseRenderable=class BaseRenderable extends EventEmitter5{[BrandedRenderable]=!0;static renderableNumber=1;_id;num;_dirty=!1;parent=null;_visible=!0;constructor(options){super();this.num=BaseRenderable.renderableNumber++,this._id=options.id??`renderable-${this.num}`}get id(){return this._id}set id(value){this._id=value}get isDirty(){return this._dirty}markClean(){this._dirty=!1}markDirty(){this._dirty=!0}destroy(){}destroyRecursively(){}get visible(){return this._visible}set visible(value){this._visible=value}};yogaConfig=src_default2.Config.create();yogaConfig.setUseWebDefaults(!1);yogaConfig.setPointScaleFactor(1);Renderable=class Renderable extends BaseRenderable{static renderablesByNumber=new Map;_isDestroyed=!1;_ctx;_translateX=0;_translateY=0;_x=0;_y=0;_width;_height;_widthValue=0;_heightValue=0;_zIndex;selectable=!1;buffered;frameBuffer=null;_focusable=!1;_focused=!1;keypressHandler=null;pasteHandler=null;_live=!1;_liveCount=0;_sizeChangeListener=void 0;_mouseListener=null;_mouseListeners={};_pasteListener=void 0;_keyListeners={};yogaNode;_positionType="relative";_overflow="visible";_position={};_opacity=1;_flexShrink=1;renderableMapById=new Map;_childrenInLayoutOrder=[];_childrenInZIndexOrder=[];needsZIndexSort=!1;parent=null;childrenPrimarySortDirty=!0;childrenSortedByPrimaryAxis=[];_shouldUpdateBefore=new Set;onLifecyclePass=null;renderBefore;renderAfter;constructor(ctx,options){super(options);if(this._ctx=ctx,Renderable.renderablesByNumber.set(this.num,this),validateOptions(this.id,options),this.renderBefore=options.renderBefore,this.renderAfter=options.renderAfter,this._width=options.width??"auto",this._height=options.height??"auto",typeof this._width==="number")this._widthValue=this._width;if(typeof this._height==="number")this._heightValue=this._height;if(this._zIndex=options.zIndex??0,this._visible=options.visible!==!1,this.buffered=options.buffered??!1,this._live=options.live??!1,this._liveCount=this._live&&this._visible?1:0,this._opacity=options.opacity!==void 0?Math.max(0,Math.min(1,options.opacity)):1,this.yogaNode=src_default2.Node.create(yogaConfig),this.yogaNode.setDisplay(this._visible?Display.Flex:Display.None),this.setupYogaProperties(options),this.applyEventOptions(options),this.buffered)this.createFrameBuffer()}get id(){return this._id}set id(value){if(this.parent)this.parent.renderableMapById.delete(this.id),this.parent.renderableMapById.set(value,this);super.id=value}get focusable(){return this._focusable}set focusable(value){this._focusable=value}get ctx(){return this._ctx}get visible(){return this._visible}get primaryAxis(){let dir=this.yogaNode.getFlexDirection();return dir===2||dir===3?"row":"column"}set visible(value){if(this._visible===value)return;let wasVisible=this._visible;if(this._visible=value,this.yogaNode.setDisplay(value?Display.Flex:Display.None),this._live){if(!wasVisible&&value)this.propagateLiveCount(1);else if(wasVisible&&!value)this.propagateLiveCount(-1)}if(this._focused)this.blur();this.requestRender()}get opacity(){return this._opacity}set opacity(value){let clamped=Math.max(0,Math.min(1,value));if(this._opacity!==clamped)this._opacity=clamped,this.requestRender()}hasSelection(){return!1}onSelectionChanged(selection2){return!1}getSelectedText(){return""}shouldStartSelection(x,y){return!1}focus(){if(this._isDestroyed||this._focused||!this._focusable)return;this._ctx.focusRenderable(this),this._focused=!0,this.requestRender(),this.keypressHandler=(key)=>{if(this._isDestroyed)return;if(this._keyListeners.down?.(key),this._isDestroyed)return;if(!key.defaultPrevented&&this.handleKeyPress)this.handleKeyPress(key)},this.pasteHandler=(event)=>{if(this._isDestroyed)return;if(this._pasteListener?.call(this,event),this._isDestroyed)return;if(!event.defaultPrevented&&this.handlePaste)this.handlePaste(event)},this.ctx._internalKeyInput.onInternal("keypress",this.keypressHandler),this.ctx._internalKeyInput.onInternal("paste",this.pasteHandler),this.emit("focused")}blur(){if(!this._focused||!this._focusable)return;if(this._focused=!1,this.requestRender(),this.keypressHandler)this.ctx._internalKeyInput.offInternal("keypress",this.keypressHandler),this.keypressHandler=null;if(this.pasteHandler)this.ctx._internalKeyInput.offInternal("paste",this.pasteHandler),this.pasteHandler=null;this.emit("blurred")}get focused(){return this._focused}get live(){return this._live}get liveCount(){return this._liveCount}set live(value){if(this._live===value)return;if(this._live=value,this._visible){let delta=value?1:-1;this.propagateLiveCount(delta)}}propagateLiveCount(delta){this._liveCount+=delta,this.parent?.propagateLiveCount(delta)}findDescendantById(id){for(let child of this._childrenInLayoutOrder){if(child.id===id)return child;if(isRenderable(child)){let found=child.findDescendantById(id);if(found)return found}}return}requestRender(){this.markDirty(),this._ctx.requestRender()}get translateX(){return this._translateX}set translateX(value){if(this._translateX===value)return;if(this._translateX=value,this.parent)this.parent.childrenPrimarySortDirty=!0;this.requestRender()}get translateY(){return this._translateY}set translateY(value){if(this._translateY===value)return;if(this._translateY=value,this.parent)this.parent.childrenPrimarySortDirty=!0;this.requestRender()}get x(){if(this.parent)return this.parent.x+this._x+this._translateX;return this._x+this._translateX}set x(value){this.left=value}get top(){return this._position.top}set top(value){if(isPositionType(value)||value===void 0)this.setPosition({top:value})}get right(){return this._position.right}set right(value){if(isPositionType(value)||value===void 0)this.setPosition({right:value})}get bottom(){return this._position.bottom}set bottom(value){if(isPositionType(value)||value===void 0)this.setPosition({bottom:value})}get left(){return this._position.left}set left(value){if(isPositionType(value)||value===void 0)this.setPosition({left:value})}get y(){if(this.parent)return this.parent.y+this._y+this._translateY;return this._y+this._translateY}set y(value){this.top=value}get width(){return this._widthValue}set width(value){if(isDimensionType(value)){if(this._width=value,this.yogaNode.setWidth(value),typeof value==="number"&&this._flexShrink===1)this._flexShrink=0,this.yogaNode.setFlexShrink(0);this.requestRender()}}get height(){return this._heightValue}set height(value){if(isDimensionType(value)){if(this._height=value,this.yogaNode.setHeight(value),typeof value==="number"&&this._flexShrink===1)this._flexShrink=0,this.yogaNode.setFlexShrink(0);this.requestRender()}}get zIndex(){return this._zIndex}set zIndex(value){if(this._zIndex!==value)this._zIndex=value,this.parent?.requestZIndexSort(),this.requestRender()}requestZIndexSort(){this.needsZIndexSort=!0}ensureZIndexSorted(){if(this.needsZIndexSort)this._childrenInZIndexOrder.sort((a,b2)=>a.zIndex>b2.zIndex?1:a.zIndex<b2.zIndex?-1:0),this.needsZIndexSort=!1}getChildrenSortedByPrimaryAxis(){if(!this.childrenPrimarySortDirty&&this.childrenSortedByPrimaryAxis.length===this._childrenInLayoutOrder.length)return this.childrenSortedByPrimaryAxis;let dir=this.yogaNode.getFlexDirection(),axis=dir===2||dir===3?"x":"y",sorted=[...this._childrenInLayoutOrder];return sorted.sort((a,b2)=>{let va=axis==="y"?a.y:a.x,vb=axis==="y"?b2.y:b2.x;return va-vb}),this.childrenSortedByPrimaryAxis=sorted,this.childrenPrimarySortDirty=!1,this.childrenSortedByPrimaryAxis}setupYogaProperties(options){let node=this.yogaNode;if(isFlexBasisType(options.flexBasis))node.setFlexBasis(options.flexBasis);if(isSizeType(options.minWidth))node.setMinWidth(options.minWidth);if(isSizeType(options.minHeight))node.setMinHeight(options.minHeight);if(options.flexGrow!==void 0)node.setFlexGrow(options.flexGrow);else node.setFlexGrow(0);if(options.flexShrink!==void 0)this._flexShrink=options.flexShrink,node.setFlexShrink(options.flexShrink);else{let hasExplicitWidth=typeof options.width==="number",hasExplicitHeight=typeof options.height==="number";this._flexShrink=hasExplicitWidth||hasExplicitHeight?0:1,node.setFlexShrink(this._flexShrink)}if(node.setFlexDirection(parseFlexDirection(options.flexDirection)),node.setFlexWrap(parseWrap(options.flexWrap)),node.setAlignItems(parseAlignItems(options.alignItems)),node.setJustifyContent(parseJustify(options.justifyContent)),node.setAlignSelf(parseAlign(options.alignSelf)),isDimensionType(options.width))this._width=options.width,this.yogaNode.setWidth(options.width);if(isDimensionType(options.height))this._height=options.height,this.yogaNode.setHeight(options.height);if(this._positionType=options.position==="absolute"?"absolute":"relative",this._positionType!=="relative")node.setPositionType(parsePositionType(this._positionType));if(this._overflow=options.overflow==="hidden"?"hidden":options.overflow==="scroll"?"scroll":"visible",this._overflow!=="visible")node.setOverflow(parseOverflow(this._overflow));if(options.top!==void 0||options.right!==void 0||options.bottom!==void 0||options.left!==void 0)this._position={top:options.top,right:options.right,bottom:options.bottom,left:options.left},this.updateYogaPosition(this._position);if(isSizeType(options.maxWidth))node.setMaxWidth(options.maxWidth);if(isSizeType(options.maxHeight))node.setMaxHeight(options.maxHeight);this.setupMarginAndPadding(options)}setupMarginAndPadding(options){let node=this.yogaNode;if(isMarginType(options.margin))node.setMargin(Edge.All,options.margin);if(isMarginType(options.marginX))node.setMargin(Edge.Horizontal,options.marginX);if(isMarginType(options.marginY))node.setMargin(Edge.Vertical,options.marginY);if(isMarginType(options.marginTop))node.setMargin(Edge.Top,options.marginTop);if(isMarginType(options.marginRight))node.setMargin(Edge.Right,options.marginRight);if(isMarginType(options.marginBottom))node.setMargin(Edge.Bottom,options.marginBottom);if(isMarginType(options.marginLeft))node.setMargin(Edge.Left,options.marginLeft);if(isPaddingType(options.padding))node.setPadding(Edge.All,options.padding);if(isPaddingType(options.paddingX))node.setPadding(Edge.Horizontal,options.paddingX);if(isPaddingType(options.paddingY))node.setPadding(Edge.Vertical,options.paddingY);if(isPaddingType(options.paddingTop))node.setPadding(Edge.Top,options.paddingTop);if(isPaddingType(options.paddingRight))node.setPadding(Edge.Right,options.paddingRight);if(isPaddingType(options.paddingBottom))node.setPadding(Edge.Bottom,options.paddingBottom);if(isPaddingType(options.paddingLeft))node.setPadding(Edge.Left,options.paddingLeft)}set position(positionType){if(!isPositionTypeType(positionType)||this._positionType===positionType)return;this._positionType=positionType,this.yogaNode.setPositionType(parsePositionType(positionType)),this.requestRender()}get overflow(){return this._overflow}set overflow(overflow){if(!isOverflowType(overflow)||this._overflow===overflow)return;this._overflow=overflow,this.yogaNode.setOverflow(parseOverflow(overflow)),this.requestRender()}setPosition(position){this._position={...this._position,...position},this.updateYogaPosition(position)}updateYogaPosition(position){let node=this.yogaNode,{top,right,bottom,left}=position;if(isPositionType(top))if(top==="auto")node.setPositionAuto(Edge.Top);else node.setPosition(Edge.Top,top);if(isPositionType(right))if(right==="auto")node.setPositionAuto(Edge.Right);else node.setPosition(Edge.Right,right);if(isPositionType(bottom))if(bottom==="auto")node.setPositionAuto(Edge.Bottom);else node.setPosition(Edge.Bottom,bottom);if(isPositionType(left))if(left==="auto")node.setPositionAuto(Edge.Left);else node.setPosition(Edge.Left,left);this.requestRender()}set flexGrow(grow){if(grow==null)this.yogaNode.setFlexGrow(0);else this.yogaNode.setFlexGrow(grow);this.requestRender()}set flexShrink(shrink){let value=shrink==null?1:shrink;this._flexShrink=value,this.yogaNode.setFlexShrink(value),this.requestRender()}set flexDirection(direction){this.yogaNode.setFlexDirection(parseFlexDirection(direction)),this.requestRender()}set flexWrap(wrap){this.yogaNode.setFlexWrap(parseWrap(wrap)),this.requestRender()}set alignItems(alignItems){this.yogaNode.setAlignItems(parseAlignItems(alignItems)),this.requestRender()}set justifyContent(justifyContent){this.yogaNode.setJustifyContent(parseJustify(justifyContent)),this.requestRender()}set alignSelf(alignSelf){this.yogaNode.setAlignSelf(parseAlign(alignSelf)),this.requestRender()}set flexBasis(basis){if(isFlexBasisType(basis))this.yogaNode.setFlexBasis(basis),this.requestRender()}set minWidth(minWidth){if(isSizeType(minWidth))this.yogaNode.setMinWidth(minWidth),this.requestRender()}set maxWidth(maxWidth){if(isSizeType(maxWidth))this.yogaNode.setMaxWidth(maxWidth),this.requestRender()}set minHeight(minHeight){if(isSizeType(minHeight))this.yogaNode.setMinHeight(minHeight),this.requestRender()}set maxHeight(maxHeight){if(isSizeType(maxHeight))this.yogaNode.setMaxHeight(maxHeight),this.requestRender()}set margin(margin){if(isMarginType(margin))this.yogaNode.setMargin(Edge.All,margin),this.requestRender()}set marginX(marginX){if(isMarginType(marginX))this.yogaNode.setMargin(Edge.Horizontal,marginX),this.requestRender()}set marginY(marginY){if(isMarginType(marginY))this.yogaNode.setMargin(Edge.Vertical,marginY),this.requestRender()}set marginTop(margin){if(isMarginType(margin))this.yogaNode.setMargin(Edge.Top,margin),this.requestRender()}set marginRight(margin){if(isMarginType(margin))this.yogaNode.setMargin(Edge.Right,margin),this.requestRender()}set marginBottom(margin){if(isMarginType(margin))this.yogaNode.setMargin(Edge.Bottom,margin),this.requestRender()}set marginLeft(margin){if(isMarginType(margin))this.yogaNode.setMargin(Edge.Left,margin),this.requestRender()}set padding(padding){if(isPaddingType(padding))this.yogaNode.setPadding(Edge.All,padding),this.requestRender()}set paddingX(paddingX){if(isPaddingType(paddingX))this.yogaNode.setPadding(Edge.Horizontal,paddingX),this.requestRender()}set paddingY(paddingY){if(isPaddingType(paddingY))this.yogaNode.setPadding(Edge.Vertical,paddingY),this.requestRender()}set paddingTop(padding){if(isPaddingType(padding))this.yogaNode.setPadding(Edge.Top,padding),this.requestRender()}set paddingRight(padding){if(isPaddingType(padding))this.yogaNode.setPadding(Edge.Right,padding),this.requestRender()}set paddingBottom(padding){if(isPaddingType(padding))this.yogaNode.setPadding(Edge.Bottom,padding),this.requestRender()}set paddingLeft(padding){if(isPaddingType(padding))this.yogaNode.setPadding(Edge.Left,padding),this.requestRender()}getLayoutNode(){return this.yogaNode}updateFromLayout(){let layout=this.yogaNode.getComputedLayout(),oldX=this._x,oldY=this._y,oldWidth=this._widthValue,oldHeight=this._heightValue;this._x=layout.left,this._y=layout.top;let newWidth=Math.max(layout.width,1),newHeight=Math.max(layout.height,1),sizeChanged=oldWidth!==newWidth||oldHeight!==newHeight;if(this._widthValue=newWidth,this._heightValue=newHeight,sizeChanged)this.onLayoutResize(newWidth,newHeight);if(oldX!==this._x||oldY!==this._y){if(this.parent)this.parent.childrenPrimarySortDirty=!0}}onLayoutResize(width,height2){if(this._visible)this.handleFrameBufferResize(width,height2),this.onResize(width,height2),this.requestRender()}handleFrameBufferResize(width,height2){if(!this.buffered)return;if(width<=0||height2<=0)return;if(this.frameBuffer)this.frameBuffer.resize(width,height2);else this.createFrameBuffer()}createFrameBuffer(){let w=this.width,h=this.height;if(w<=0||h<=0)return;try{let widthMethod=this._ctx.widthMethod;this.frameBuffer=OptimizedBuffer.create(w,h,widthMethod,{respectAlpha:!0,id:`framebuffer-${this.id}`})}catch(error2){console.error(`Failed to create frame buffer for ${this.id}:`,error2),this.frameBuffer=null}}onResize(width,height2){this.onSizeChange?.(),this.emit("resize")}replaceParent(obj){if(obj.parent)obj.parent.remove(obj.id);obj.parent=this}add(obj,index){if(!obj)return-1;let renderable=maybeMakeRenderable(this._ctx,obj);if(!renderable)return-1;if(renderable.isDestroyed)return console.warn(`Renderable with id ${renderable.id} was already destroyed, skipping add`),-1;let anchorRenderable=index!==void 0?this._childrenInLayoutOrder[index]:void 0;if(anchorRenderable)return this.insertBefore(renderable,anchorRenderable);if(renderable.parent===this)this.yogaNode.removeChild(renderable.getLayoutNode()),this._childrenInLayoutOrder.splice(this._childrenInLayoutOrder.indexOf(renderable),1);else{if(this.replaceParent(renderable),this.needsZIndexSort=!0,this.renderableMapById.set(renderable.id,renderable),this._childrenInZIndexOrder.push(renderable),typeof renderable.onLifecyclePass==="function")this._ctx.registerLifecyclePass(renderable);if(renderable._liveCount>0)this.propagateLiveCount(renderable._liveCount)}let childLayoutNode=renderable.getLayoutNode(),insertedIndex=this._childrenInLayoutOrder.length;return this._childrenInLayoutOrder.push(renderable),this.yogaNode.insertChild(childLayoutNode,insertedIndex),this.childrenPrimarySortDirty=!0,this._shouldUpdateBefore.add(renderable),this.requestRender(),insertedIndex}insertBefore(obj,anchor){if(!anchor)return this.add(obj);if(!obj)return-1;let renderable=maybeMakeRenderable(this._ctx,obj);if(!renderable)return-1;if(renderable.isDestroyed)return console.warn(`Renderable with id ${renderable.id} was already destroyed, skipping insertBefore`),-1;if(!isRenderable(anchor))throw Error("Anchor must be a Renderable");if(anchor.isDestroyed)return console.warn(`Anchor with id ${anchor.id} was already destroyed, skipping insertBefore`),-1;if(!this.renderableMapById.has(anchor.id))return console.warn(`Anchor with id ${anchor.id} does not exist within the parent ${this.id}, skipping insertBefore`),-1;if(renderable===anchor||renderable.id===anchor.id)return console.warn(`Anchor is the same as the node ${renderable.id} being inserted, skipping insertBefore`),-1;if(renderable.parent===this)this.yogaNode.removeChild(renderable.getLayoutNode()),this._childrenInLayoutOrder.splice(this._childrenInLayoutOrder.indexOf(renderable),1);else{if(this.replaceParent(renderable),this.needsZIndexSort=!0,this.renderableMapById.set(renderable.id,renderable),this._childrenInZIndexOrder.push(renderable),typeof renderable.onLifecyclePass==="function")this._ctx.registerLifecyclePass(renderable);if(renderable._liveCount>0)this.propagateLiveCount(renderable._liveCount)}this.childrenPrimarySortDirty=!0;let anchorIndex=this._childrenInLayoutOrder.indexOf(anchor),insertedIndex=Math.max(0,Math.min(anchorIndex,this._childrenInLayoutOrder.length));return this._childrenInLayoutOrder.splice(insertedIndex,0,renderable),this.yogaNode.insertChild(renderable.getLayoutNode(),insertedIndex),this._shouldUpdateBefore.add(renderable),this.requestRender(),insertedIndex}getRenderable(id){return this.renderableMapById.get(id)}remove(id){if(!id)return;if(this.renderableMapById.has(id)){let obj=this.renderableMapById.get(id);if(obj){if(obj._liveCount>0)this.propagateLiveCount(-obj._liveCount);let childLayoutNode=obj.getLayoutNode();this.yogaNode.removeChild(childLayoutNode),this.requestRender(),obj.onRemove(),obj.parent=null,this._ctx.unregisterLifecyclePass(obj),this.renderableMapById.delete(id);let index=this._childrenInLayoutOrder.findIndex((obj2)=>obj2.id===id);if(index!==-1)this._childrenInLayoutOrder.splice(index,1);let zIndexIndex=this._childrenInZIndexOrder.findIndex((obj2)=>obj2.id===id);if(zIndexIndex!==-1)this._childrenInZIndexOrder.splice(zIndexIndex,1);this.childrenPrimarySortDirty=!0}}}onRemove(){}getChildren(){return[...this._childrenInLayoutOrder]}getChildrenCount(){return this._childrenInLayoutOrder.length}updateLayout(deltaTime,renderList=[]){if(!this.visible)return;if(this.onUpdate(deltaTime),this._isDestroyed)return;if(this.updateFromLayout(),this._shouldUpdateBefore.size>0){for(let child of this._shouldUpdateBefore)if(!child.isDestroyed)child.updateFromLayout();this._shouldUpdateBefore.clear()}if(this._isDestroyed)return;let shouldPushOpacity=this._opacity<1;if(shouldPushOpacity)renderList.push({action:"pushOpacity",opacity:this._opacity});renderList.push({action:"render",renderable:this}),this.ensureZIndexSorted();let shouldPushScissor=this._overflow!=="visible"&&this.width>0&&this.height>0;if(shouldPushScissor){let scissorRect=this.getScissorRect();renderList.push({action:"pushScissorRect",x:scissorRect.x,y:scissorRect.y,width:scissorRect.width,height:scissorRect.height,screenX:this.x,screenY:this.y})}let visibleChildren=this._getVisibleChildren();for(let child of this._childrenInZIndexOrder){if(!visibleChildren.includes(child.num)){child.updateFromLayout();continue}child.updateLayout(deltaTime,renderList)}if(shouldPushScissor)renderList.push({action:"popScissorRect"});if(shouldPushOpacity)renderList.push({action:"popOpacity"})}render(buffer2,deltaTime){let renderBuffer=buffer2;if(this.buffered&&this.frameBuffer)renderBuffer=this.frameBuffer;if(this.renderBefore)this.renderBefore.call(this,renderBuffer,deltaTime);if(this.renderSelf(renderBuffer,deltaTime),this.renderAfter)this.renderAfter.call(this,renderBuffer,deltaTime);if(this.markClean(),this._ctx.addToHitGrid(this.x,this.y,this.width,this.height,this.num),this.buffered&&this.frameBuffer)buffer2.drawFrameBuffer(this.x,this.y,this.frameBuffer)}_getVisibleChildren(){return this._childrenInZIndexOrder.map((child)=>child.num)}onUpdate(deltaTime){}getScissorRect(){return{x:this.buffered?0:this.x,y:this.buffered?0:this.y,width:this.width,height:this.height}}renderSelf(buffer2,deltaTime){}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)return;if(this._isDestroyed=!0,this.parent)this.parent.remove(this.id);if(this.frameBuffer)this.frameBuffer.destroy(),this.frameBuffer=null;for(let child of this._childrenInLayoutOrder)this.remove(child.id);this._childrenInLayoutOrder=[],this.renderableMapById.clear(),Renderable.renderablesByNumber.delete(this.num),this.blur(),this.removeAllListeners(),this.destroySelf();try{this.yogaNode.free()}catch(e){}}destroyRecursively(){let children=[...this._childrenInLayoutOrder];for(let child of children)child.destroyRecursively();this.destroy()}destroySelf(){}processMouseEvent(event){if(this._mouseListener?.call(this,event),this._mouseListeners[event.type]?.call(this,event),this.onMouseEvent(event),this.parent&&!event.propagationStopped)this.parent.processMouseEvent(event)}onMouseEvent(event){}set onMouse(handler){if(handler)this._mouseListener=handler;else this._mouseListener=null}set onMouseDown(handler){if(handler)this._mouseListeners.down=handler;else delete this._mouseListeners.down}set onMouseUp(handler){if(handler)this._mouseListeners.up=handler;else delete this._mouseListeners.up}set onMouseMove(handler){if(handler)this._mouseListeners.move=handler;else delete this._mouseListeners.move}set onMouseDrag(handler){if(handler)this._mouseListeners.drag=handler;else delete this._mouseListeners.drag}set onMouseDragEnd(handler){if(handler)this._mouseListeners["drag-end"]=handler;else delete this._mouseListeners["drag-end"]}set onMouseDrop(handler){if(handler)this._mouseListeners.drop=handler;else delete this._mouseListeners.drop}set onMouseOver(handler){if(handler)this._mouseListeners.over=handler;else delete this._mouseListeners.over}set onMouseOut(handler){if(handler)this._mouseListeners.out=handler;else delete this._mouseListeners.out}set onMouseScroll(handler){if(handler)this._mouseListeners.scroll=handler;else delete this._mouseListeners.scroll}set onPaste(handler){this._pasteListener=handler}get onPaste(){return this._pasteListener}set onKeyDown(handler){if(handler)this._keyListeners.down=handler;else delete this._keyListeners.down}get onKeyDown(){return this._keyListeners.down}set onSizeChange(handler){this._sizeChangeListener=handler}get onSizeChange(){return this._sizeChangeListener}applyEventOptions(options){this.onMouse=options.onMouse,this.onMouseDown=options.onMouseDown,this.onMouseUp=options.onMouseUp,this.onMouseMove=options.onMouseMove,this.onMouseDrag=options.onMouseDrag,this.onMouseDragEnd=options.onMouseDragEnd,this.onMouseDrop=options.onMouseDrop,this.onMouseOver=options.onMouseOver,this.onMouseOut=options.onMouseOut,this.onMouseScroll=options.onMouseScroll,this.onPaste=options.onPaste,this.onKeyDown=options.onKeyDown,this.onSizeChange=options.onSizeChange}};RootRenderable=class RootRenderable extends Renderable{renderList=[];constructor(ctx){super(ctx,{id:"__root__",zIndex:0,visible:!0,width:ctx.width,height:ctx.height,enableLayout:!0});if(this.yogaNode)this.yogaNode.free();this.yogaNode=src_default2.Node.create(yogaConfig),this.yogaNode.setWidth(ctx.width),this.yogaNode.setHeight(ctx.height),this.yogaNode.setFlexDirection(FlexDirection.Column),this.calculateLayout()}render(buffer2,deltaTime){if(!this.visible)return;for(let renderable of this._ctx.getLifecyclePasses())renderable.onLifecyclePass?.call(renderable);if(this.yogaNode.isDirty())this.calculateLayout();this.renderList.length=0,this.updateLayout(deltaTime,this.renderList),this._ctx.clearHitGridScissorRects();for(let i2=1;i2<this.renderList.length;i2++){let command=this.renderList[i2];switch(command.action){case"render":if(!command.renderable.isDestroyed)command.renderable.render(buffer2,deltaTime);break;case"pushScissorRect":buffer2.pushScissorRect(command.x,command.y,command.width,command.height),this._ctx.pushHitGridScissorRect(command.screenX,command.screenY,command.width,command.height);break;case"popScissorRect":buffer2.popScissorRect(),this._ctx.popHitGridScissorRect();break;case"pushOpacity":buffer2.pushOpacity(command.opacity);break;case"popOpacity":buffer2.popOpacity();break}}}propagateLiveCount(delta){let oldCount=this._liveCount;if(this._liveCount+=delta,oldCount===0&&this._liveCount>0)this._ctx.requestLive();else if(oldCount>0&&this._liveCount===0)this._ctx.dropLive()}calculateLayout(){this.yogaNode.calculateLayout(this.width,this.height,Direction.LTR),this.emit("layout-changed")}resize(width,height2){this.width=width,this.height=height2,this.emit("resized",{width,height:height2})}};BrandedVNode=Symbol.for("@opentui/core/VNode");Capture=class Capture extends EventEmitter6{output=[];constructor(){super()}get size(){return this.output.length}write(stream,data){this.output.push({stream,output:data}),this.emit("write",stream,data)}claimOutput(){let output=this.output.map((o)=>o.output).join("");return this.clear(),output}clear(){this.output=[]}};CapturedWritableStream=class CapturedWritableStream extends Writable{stream;capture;isTTY=!0;columns=process.stdout.columns||80;rows=process.stdout.rows||24;constructor(stream,capture){super();this.stream=stream,this.capture=capture}_write(chunk,encoding,callback){let data=chunk.toString();this.capture.write(this.stream,data),callback()}getColorDepth(){return process.stdout.getColorDepth?.()||8}};defaultKeyAliases={enter:"return",esc:"escape"};capture=singleton("ConsoleCapture",()=>new Capture);registerEnvVar({name:"OTUI_USE_CONSOLE",description:"Whether to use the console. Will not capture console output if set to false.",type:"boolean",default:!0});registerEnvVar({name:"SHOW_CONSOLE",description:"Show the console at startup if set to true.",type:"boolean",default:!1});TerminalConsoleCache=class TerminalConsoleCache extends EventEmitter7{_cachedLogs=[];MAX_CACHE_SIZE=1000;_collectCallerInfo=!1;_cachingEnabled=!0;_originalConsole=null;get cachedLogs(){return this._cachedLogs}constructor(){super()}activate(){if(!this._originalConsole)this._originalConsole=global.console;this.setupConsoleCapture(),this.overrideConsoleMethods()}setupConsoleCapture(){if(!env.OTUI_USE_CONSOLE)return;let mockStdout=new CapturedWritableStream("stdout",capture),mockStderr=new CapturedWritableStream("stderr",capture);global.console=new Console({stdout:mockStdout,stderr:mockStderr,colorMode:!0,inspectOptions:{compact:!1,breakLength:80,depth:2}})}overrideConsoleMethods(){console.log=(...args)=>{this.appendToConsole("LOG",...args)},console.info=(...args)=>{this.appendToConsole("INFO",...args)},console.warn=(...args)=>{this.appendToConsole("WARN",...args)},console.error=(...args)=>{this.appendToConsole("ERROR",...args)},console.debug=(...args)=>{this.appendToConsole("DEBUG",...args)}}setCollectCallerInfo(enabled){this._collectCallerInfo=enabled}clearConsole(){this._cachedLogs=[]}setCachingEnabled(enabled){this._cachingEnabled=enabled}deactivate(){this.restoreOriginalConsole()}restoreOriginalConsole(){if(this._originalConsole)global.console=this._originalConsole;this.setupConsoleCapture()}addLogEntry(level,...args){let callerInfo=this._collectCallerInfo?getCallerInfo():null,logEntry=[new Date,level,args,callerInfo];if(this._cachingEnabled){if(this._cachedLogs.length>=this.MAX_CACHE_SIZE)this._cachedLogs.shift();this._cachedLogs.push(logEntry)}return logEntry}appendToConsole(level,...args){if(this._cachedLogs.length>=this.MAX_CACHE_SIZE)this._cachedLogs.shift();let entry=this.addLogEntry(level,...args);this.emit("entry",entry)}destroy(){this.deactivate()}};terminalConsoleCache=singleton("TerminalConsoleCache",()=>{let terminalConsoleCache2=new TerminalConsoleCache;return process.on("exit",()=>{terminalConsoleCache2.destroy()}),terminalConsoleCache2});((ConsolePosition2)=>{ConsolePosition2.TOP="top",ConsolePosition2.BOTTOM="bottom",ConsolePosition2.LEFT="left",ConsolePosition2.RIGHT="right"})(ConsolePosition||={});defaultConsoleKeybindings=[{name:"up",action:"scroll-up"},{name:"down",action:"scroll-down"},{name:"up",shift:!0,action:"scroll-to-top"},{name:"down",shift:!0,action:"scroll-to-bottom"},{name:"p",ctrl:!0,action:"position-previous"},{name:"o",ctrl:!0,action:"position-next"},{name:"+",action:"size-increase"},{name:"=",shift:!0,action:"size-increase"},{name:"-",action:"size-decrease"},{name:"s",ctrl:!0,action:"save-logs"},{name:"c",ctrl:!0,shift:!0,action:"copy-selection"}],DEFAULT_CONSOLE_OPTIONS={position:"bottom",sizePercent:30,zIndex:1/0,colorInfo:"#00FFFF",colorWarn:"#FFFF00",colorError:"#FF0000",colorDebug:"#808080",colorDefault:"#FFFFFF",backgroundColor:RGBA.fromValues(0.1,0.1,0.1,0.7),startInDebugMode:!1,title:"Console",titleBarColor:RGBA.fromValues(0.05,0.05,0.05,0.7),titleBarTextColor:"#FFFFFF",cursorColor:"#00A0FF",maxStoredLogs:2000,maxDisplayLines:3000,onCopySelection:void 0,keyBindings:void 0,keyAliasMap:void 0,selectionColor:RGBA.fromValues(0.3,0.5,0.8,0.5),copyButtonColor:"#00A0FF"};TerminalConsole=class TerminalConsole extends EventEmitter7{isVisible=!1;isFocused=!1;renderer;keyHandler;options;_debugModeEnabled=!1;frameBuffer=null;consoleX=0;consoleY=0;consoleWidth=0;consoleHeight=0;scrollTopIndex=0;isScrolledToBottom=!0;currentLineIndex=0;_displayLines=[];_allLogEntries=[];_needsFrameBufferUpdate=!1;_entryListener;_selectionStart=null;_selectionEnd=null;_isDragging=!1;_copyButtonBounds={x:0,y:0,width:0,height:0};_autoScrollInterval=null;clock;_keyBindingsMap;_keyAliasMap;_keyBindings;_mergedKeyBindings;_actionHandlers;markNeedsRerender(){this._needsFrameBufferUpdate=!0,this.renderer.requestRender()}getCopyButtonLabel(){let copyBindings=this._mergedKeyBindings.filter((b2)=>b2.action==="copy-selection"),copyBinding=copyBindings[copyBindings.length-1];if(copyBinding)return`[Copy (${keyBindingToString(copyBinding)})]`;return"[Copy]"}_rgbaInfo;_rgbaWarn;_rgbaError;_rgbaDebug;_rgbaDefault;backgroundColor;_rgbaTitleBar;_rgbaTitleBarText;_title;_rgbaCursor;_rgbaSelection;_rgbaCopyButton;_positions=["top","right","bottom","left"];constructor(renderer,options={}){super();if(this.renderer=renderer,this.clock=options.clock??new SystemClock,this.options={...DEFAULT_CONSOLE_OPTIONS,...options},this.keyHandler=this.handleKeyPress.bind(this),this._debugModeEnabled=this.options.startInDebugMode,terminalConsoleCache.setCollectCallerInfo(this._debugModeEnabled),this._rgbaInfo=parseColor(this.options.colorInfo),this._rgbaWarn=parseColor(this.options.colorWarn),this._rgbaError=parseColor(this.options.colorError),this._rgbaDebug=parseColor(this.options.colorDebug),this._rgbaDefault=parseColor(this.options.colorDefault),this.backgroundColor=parseColor(this.options.backgroundColor),this._rgbaTitleBar=parseColor(this.options.titleBarColor),this._rgbaTitleBarText=parseColor(this.options.titleBarTextColor||this.options.colorDefault),this._title=this.options.title,this._rgbaCursor=parseColor(this.options.cursorColor),this._rgbaSelection=parseColor(this.options.selectionColor),this._rgbaCopyButton=parseColor(this.options.copyButtonColor),this._keyAliasMap=mergeKeyAliases(defaultKeyAliases,options.keyAliasMap||{}),this._keyBindings=options.keyBindings||[],this._mergedKeyBindings=mergeKeyBindings(defaultConsoleKeybindings,this._keyBindings),this._keyBindingsMap=buildKeyBindingsMap(this._mergedKeyBindings,this._keyAliasMap),this._actionHandlers=this.buildActionHandlers(),this._updateConsoleDimensions(),this._scrollToBottom(!0),this._entryListener=(logEntry)=>{this._handleNewLog(logEntry)},terminalConsoleCache.on("entry",this._entryListener),env.SHOW_CONSOLE)this.show()}buildActionHandlers(){return new Map([["scroll-up",()=>this.scrollUp()],["scroll-down",()=>this.scrollDown()],["scroll-to-top",()=>this.scrollToTop()],["scroll-to-bottom",()=>this.scrollToBottomAction()],["position-previous",()=>this.positionPrevious()],["position-next",()=>this.positionNext()],["size-increase",()=>this.sizeIncrease()],["size-decrease",()=>this.sizeDecrease()],["save-logs",()=>this.saveLogsAction()],["copy-selection",()=>this.triggerCopyAction()]])}activate(){terminalConsoleCache.activate()}deactivate(){terminalConsoleCache.deactivate()}_handleNewLog(logEntry){if(!this.isVisible)return;if(this._allLogEntries.push(logEntry),this._allLogEntries.length>this.options.maxStoredLogs)this._allLogEntries.splice(0,this._allLogEntries.length-this.options.maxStoredLogs);let newDisplayLines=this._processLogEntry(logEntry);if(this._displayLines.push(...newDisplayLines),this._displayLines.length>this.options.maxDisplayLines){this._displayLines.splice(0,this._displayLines.length-this.options.maxDisplayLines);let linesRemoved=this._displayLines.length-this.options.maxDisplayLines;this.scrollTopIndex=Math.max(0,this.scrollTopIndex-linesRemoved)}if(this.isScrolledToBottom)this._scrollToBottom();this.markNeedsRerender()}_updateConsoleDimensions(termWidth,termHeight){let width=termWidth??this.renderer.width,height2=termHeight??this.renderer.height,sizePercent=this.options.sizePercent/100;switch(this.options.position){case"top":this.consoleX=0,this.consoleY=0,this.consoleWidth=width,this.consoleHeight=Math.max(1,Math.floor(height2*sizePercent));break;case"bottom":this.consoleHeight=Math.max(1,Math.floor(height2*sizePercent)),this.consoleWidth=width,this.consoleX=0,this.consoleY=height2-this.consoleHeight;break;case"left":this.consoleWidth=Math.max(1,Math.floor(width*sizePercent)),this.consoleHeight=height2,this.consoleX=0,this.consoleY=0;break;case"right":this.consoleWidth=Math.max(1,Math.floor(width*sizePercent)),this.consoleHeight=height2,this.consoleY=0,this.consoleX=width-this.consoleWidth;break}this.currentLineIndex=Math.max(0,Math.min(this.currentLineIndex,this.consoleHeight-1))}handleKeyPress(event){if(event.name==="escape"){this.blur();return}let bindingKey=getKeyBindingKey({name:event.name,ctrl:event.ctrl,shift:event.shift,meta:event.meta,super:event.super,action:"scroll-up"}),action=this._keyBindingsMap.get(bindingKey);if(action){let handler=this._actionHandlers.get(action);if(handler){handler();return}}}scrollUp(){let logAreaHeight=Math.max(1,this.consoleHeight-1);if(this.currentLineIndex>0)this.currentLineIndex--,this.markNeedsRerender();else if(this.scrollTopIndex>0)this.scrollTopIndex--,this.isScrolledToBottom=!1,this.markNeedsRerender();return!0}scrollDown(){let displayLineCount=this._displayLines.length,logAreaHeight=Math.max(1,this.consoleHeight-1),maxScrollTop=Math.max(0,displayLineCount-logAreaHeight);if(this.currentLineIndex<logAreaHeight-1&&this.scrollTopIndex+this.currentLineIndex<displayLineCount-1)this.currentLineIndex++,this.markNeedsRerender();else if(this.scrollTopIndex<maxScrollTop)this.scrollTopIndex++,this.isScrolledToBottom=this.scrollTopIndex===maxScrollTop,this.markNeedsRerender();return!0}scrollToTop(){if(this.scrollTopIndex>0||this.currentLineIndex>0)this.scrollTopIndex=0,this.currentLineIndex=0,this.isScrolledToBottom=this._displayLines.length<=Math.max(1,this.consoleHeight-1),this.markNeedsRerender();return!0}scrollToBottomAction(){let logAreaHeightForScroll=Math.max(1,this.consoleHeight-1),maxScrollPossible=Math.max(0,this._displayLines.length-logAreaHeightForScroll);if(this.scrollTopIndex<maxScrollPossible||!this.isScrolledToBottom)this._scrollToBottom(!0),this.markNeedsRerender();return!0}positionPrevious(){let prevIndex=(this._positions.indexOf(this.options.position)-1+this._positions.length)%this._positions.length;return this.options.position=this._positions[prevIndex],this.resize(this.renderer.width,this.renderer.height),!0}positionNext(){let nextIndex=(this._positions.indexOf(this.options.position)+1)%this._positions.length;return this.options.position=this._positions[nextIndex],this.resize(this.renderer.width,this.renderer.height),!0}sizeIncrease(){return this.options.sizePercent=Math.min(100,this.options.sizePercent+5),this.resize(this.renderer.width,this.renderer.height),!0}sizeDecrease(){return this.options.sizePercent=Math.max(10,this.options.sizePercent-5),this.resize(this.renderer.width,this.renderer.height),!0}saveLogsAction(){return this.saveLogsToFile(),!0}triggerCopyAction(){return this.triggerCopy(),!0}attachStdin(){if(this.isFocused)return;this.renderer.keyInput.on("keypress",this.keyHandler),this.isFocused=!0}detachStdin(){if(!this.isFocused)return;this.renderer.keyInput.off("keypress",this.keyHandler),this.isFocused=!1}formatTimestamp(date){return new Intl.DateTimeFormat("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1}).format(date)}formatArguments(args){return args.map((arg)=>{if(arg instanceof Error){let errorProps=arg;return`Error: ${errorProps.message}
|
|
2379
2414
|
`+(errorProps.stack?`${errorProps.stack}
|
|
2380
2415
|
`:"")}if(typeof arg==="object"&&arg!==null)try{return util22.inspect(arg,{depth:2})}catch(e){return String(arg)}try{return util22.inspect(arg,{depth:2})}catch(e){return String(arg)}}).join(" ")}resize(width,height2){if(this._updateConsoleDimensions(width,height2),this.frameBuffer){this.frameBuffer.resize(this.consoleWidth,this.consoleHeight);let displayLineCount=this._displayLines.length,logAreaHeight=Math.max(1,this.consoleHeight-1),maxScrollTop=Math.max(0,displayLineCount-logAreaHeight);this.scrollTopIndex=Math.min(this.scrollTopIndex,maxScrollTop),this.isScrolledToBottom=this.scrollTopIndex===maxScrollTop;let visibleLineCount=Math.min(logAreaHeight,displayLineCount-this.scrollTopIndex);if(this.currentLineIndex=Math.max(0,Math.min(this.currentLineIndex,visibleLineCount-1)),this.isVisible)this.markNeedsRerender()}}clear(){terminalConsoleCache.clearConsole(),this._allLogEntries=[],this._displayLines=[],this.markNeedsRerender()}toggle(){if(this.isVisible)if(this.isFocused)this.hide();else this.focus();else this.show();if(!this.renderer.isRunning)this.renderer.requestRender()}focus(){this.attachStdin(),this._scrollToBottom(!0),this.markNeedsRerender()}blur(){this.detachStdin(),this.markNeedsRerender()}show(){if(!this.isVisible){if(this.isVisible=!0,this._processCachedLogs(),terminalConsoleCache.setCachingEnabled(!1),!this.frameBuffer)this.frameBuffer=OptimizedBuffer.create(this.consoleWidth,this.consoleHeight,this.renderer.widthMethod,{respectAlpha:this.backgroundColor.a<1,id:"console framebuffer"});let logCount=terminalConsoleCache.cachedLogs.length,visibleLogLines=Math.min(this.consoleHeight,logCount);this.currentLineIndex=Math.max(0,visibleLogLines-1),this.scrollTopIndex=0,this._scrollToBottom(!0),this.focus(),this.markNeedsRerender()}}hide(){if(this.isVisible)this.isVisible=!1,this.blur(),terminalConsoleCache.setCachingEnabled(!0)}destroy(){this.stopAutoScroll(),this.hide(),this.deactivate(),terminalConsoleCache.off("entry",this._entryListener)}getCachedLogs(){return terminalConsoleCache.cachedLogs.map((logEntry)=>logEntry[0].toISOString()+" "+logEntry.slice(1).join(" ")).join(`
|
|
2381
2416
|
`)}updateFrameBuffer(){if(!this.frameBuffer)return;this.frameBuffer.clear(this.backgroundColor);let displayLines=this._displayLines,displayLineCount=displayLines.length,logAreaHeight=Math.max(1,this.consoleHeight-1);this.frameBuffer.fillRect(0,0,this.consoleWidth,1,this._rgbaTitleBar);let dynamicTitle=`${this._title}${this.isFocused?" (Focused)":""}`,titleX=Math.max(0,Math.floor((this.consoleWidth-dynamicTitle.length)/2));this.frameBuffer.drawText(dynamicTitle,titleX,0,this._rgbaTitleBarText,this._rgbaTitleBar);let copyLabel=this.getCopyButtonLabel(),copyButtonX=this.consoleWidth-copyLabel.length-1;if(copyButtonX>=0){let copyButtonEnabled=this.hasSelection(),disabledColor=RGBA.fromInts(100,100,100,255),copyColor=copyButtonEnabled?this._rgbaCopyButton:disabledColor;this.frameBuffer.drawText(copyLabel,copyButtonX,0,copyColor,this._rgbaTitleBar),this._copyButtonBounds={x:copyButtonX,y:0,width:copyLabel.length,height:1}}else this._copyButtonBounds={x:-1,y:-1,width:0,height:0};let startIndex=this.scrollTopIndex,endIndex=Math.min(startIndex+logAreaHeight,displayLineCount),visibleDisplayLines=displayLines.slice(startIndex,endIndex),lineY=1;for(let i2=0;i2<visibleDisplayLines.length;i2++){if(lineY>=this.consoleHeight)break;let displayLine=visibleDisplayLines[i2],absoluteLineIndex=startIndex+i2,levelColor=this._rgbaDefault;switch(displayLine.level){case"INFO":levelColor=this._rgbaInfo;break;case"WARN":levelColor=this._rgbaWarn;break;case"ERROR":levelColor=this._rgbaError;break;case"DEBUG":levelColor=this._rgbaDebug;break}let linePrefix=displayLine.indent?" ".repeat(INDENT_WIDTH):"",textToDraw=displayLine.text,textAvailableWidth=this.consoleWidth-1-(displayLine.indent?INDENT_WIDTH:0);if(this.isFocused&&lineY-1===this.currentLineIndex)this.frameBuffer.drawText(">",0,lineY,this._rgbaCursor,this.backgroundColor);else this.frameBuffer.drawText(" ",0,lineY,this._rgbaDefault,this.backgroundColor);let fullText=`${linePrefix}${textToDraw.substring(0,textAvailableWidth)}`,selectionRange=this.getLineSelectionRange(absoluteLineIndex);if(selectionRange){let adjustedStart=Math.max(0,selectionRange.start),adjustedEnd=Math.min(fullText.length,selectionRange.end);if(adjustedStart>0)this.frameBuffer.drawText(fullText.substring(0,adjustedStart),1,lineY,levelColor);if(adjustedStart<adjustedEnd)this.frameBuffer.fillRect(1+adjustedStart,lineY,adjustedEnd-adjustedStart,1,this._rgbaSelection),this.frameBuffer.drawText(fullText.substring(adjustedStart,adjustedEnd),1+adjustedStart,lineY,levelColor,this._rgbaSelection);if(adjustedEnd<fullText.length)this.frameBuffer.drawText(fullText.substring(adjustedEnd),1+adjustedEnd,lineY,levelColor)}else this.frameBuffer.drawText(fullText,1,lineY,levelColor);lineY++}}renderToBuffer(buffer2){if(!this.isVisible||!this.frameBuffer)return;if(this._needsFrameBufferUpdate)this.updateFrameBuffer(),this._needsFrameBufferUpdate=!1;buffer2.drawFrameBuffer(this.consoleX,this.consoleY,this.frameBuffer)}setDebugMode(enabled){if(this._debugModeEnabled=enabled,terminalConsoleCache.setCollectCallerInfo(enabled),this.isVisible)this.markNeedsRerender()}toggleDebugMode(){this.setDebugMode(!this._debugModeEnabled)}set keyBindings(bindings){this._keyBindings=bindings,this._mergedKeyBindings=mergeKeyBindings(defaultConsoleKeybindings,bindings),this._keyBindingsMap=buildKeyBindingsMap(this._mergedKeyBindings,this._keyAliasMap),this.markNeedsRerender()}set keyAliasMap(aliases){this._keyAliasMap=mergeKeyAliases(defaultKeyAliases,aliases),this._mergedKeyBindings=mergeKeyBindings(defaultConsoleKeybindings,this._keyBindings),this._keyBindingsMap=buildKeyBindingsMap(this._mergedKeyBindings,this._keyAliasMap),this.markNeedsRerender()}set onCopySelection(callback){this.options.onCopySelection=callback}get onCopySelection(){return this.options.onCopySelection}_scrollToBottom(forceCursorToLastLine=!1){let displayLineCount=this._displayLines.length,logAreaHeight=Math.max(1,this.consoleHeight-1),maxScrollTop=Math.max(0,displayLineCount-logAreaHeight);this.scrollTopIndex=maxScrollTop,this.isScrolledToBottom=!0;let visibleLineCount=Math.min(logAreaHeight,displayLineCount-this.scrollTopIndex);if(forceCursorToLastLine||this.currentLineIndex>=visibleLineCount)this.currentLineIndex=Math.max(0,visibleLineCount-1)}_processLogEntry(logEntry){let[date,level,args,callerInfo]=logEntry,displayLines=[],timestamp2=this.formatTimestamp(date),callerSource=callerInfo?`${callerInfo.fileName}:${callerInfo.lineNumber}`:"unknown",prefix=`[${timestamp2}] [${level}]`+(this._debugModeEnabled?` [${callerSource}]`:"")+" ",initialLines=this.formatArguments(args).split(`
|
|
@@ -2761,14 +2796,14 @@ $ bun add react-devtools-core@7 -d
|
|
|
2761
2796
|
AND a.ended_at IS NULL
|
|
2762
2797
|
ORDER BY a.started_at DESC
|
|
2763
2798
|
`).map(mapAssignment)}function mapExecutor(row){let meta=row.metadata;return{id:String(row.id),agentId:String(row.agent_id),agentName:row.agent_name?String(row.agent_name):null,provider:String(row.provider),transport:String(row.transport),pid:row.pid!=null?Number(row.pid):null,tmuxSession:row.tmux_session?String(row.tmux_session):null,tmuxPaneId:row.tmux_pane_id?String(row.tmux_pane_id):null,state:String(row.state),metadata:typeof meta==="string"?JSON.parse(meta):meta??{},startedAt:row.started_at instanceof Date?row.started_at.toISOString():String(row.started_at),role:row.role?String(row.role):null,team:row.team?String(row.team):null}}function mapAssignment(row){return{id:String(row.id),executorId:String(row.executor_id),taskId:row.task_id?String(row.task_id):null,taskTitle:row.task_title?String(row.task_title):null,wishSlug:row.wish_slug?String(row.wish_slug):null,groupNumber:row.group_number!=null?Number(row.group_number):null,startedAt:row.started_at instanceof Date?row.started_at.toISOString():String(row.started_at)}}import{execSync as execSync16}from"child_process";function execQuiet(cmd){try{return execSync16(cmd,{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}catch{return""}}function parsePaneLine(parts){let[sessionName,winIdxStr,winName,winActive,winPanes,paneIdxStr,paneId,panePidStr,paneCmd,paneTitle,paneSize,sessAttached,sessWindows,sessCreated,paneDead]=parts;return{sessionName,winIdxStr,session:{name:sessionName,attached:sessAttached==="1",windowCount:Number.parseInt(sessWindows,10)||0,created:Number.parseInt(sessCreated,10)||0},window:{sessionName,index:Number.parseInt(winIdxStr,10)||0,name:winName,active:winActive==="1",paneCount:Number.parseInt(winPanes,10)||0},pane:{sessionName,windowIndex:Number.parseInt(winIdxStr,10)||0,paneIndex:Number.parseInt(paneIdxStr,10)||0,paneId,pid:Number.parseInt(panePidStr,10)||0,command:paneCmd,title:paneTitle,size:paneSize,isDead:paneDead==="1"}}}function getTmuxInventory(){let paneOutput=execQuiet(`${tmuxBin()} -L genie list-panes -a -F '#{session_name}|#{window_index}|#{window_name}|#{window_active}|#{window_panes}|#{pane_index}|#{pane_id}|#{pane_pid}|#{pane_current_command}|#{pane_title}|#{pane_width}x#{pane_height}|#{session_attached}|#{session_windows}|#{session_created}|#{pane_dead}'`);if(!paneOutput)return[];let sessionMap=new Map,windowMap=new Map;for(let line of paneOutput.split(`
|
|
2764
|
-
`)){if(!line)continue;let parts=line.split("|");if(parts.length<15)continue;let parsed=parsePaneLine(parts);if(!sessionMap.has(parsed.sessionName))sessionMap.set(parsed.sessionName,{...parsed.session,windows:[]});let winKey=`${parsed.sessionName}:${parsed.winIdxStr}`;if(!windowMap.has(winKey)){let win={...parsed.window,panes:[]};windowMap.set(winKey,win),sessionMap.get(parsed.sessionName)?.windows.push(win)}windowMap.get(winKey)?.panes.push(parsed.pane)}return Array.from(sessionMap.values()).sort((a,b3)=>a.name.localeCompare(b3.name))}function isPidAlive3(pid){try{return process.kill(pid,0),!0}catch{return!1}}function allClaudePanes(sessions2){return sessions2.flatMap((s2)=>s2.windows.flatMap((w2)=>w2.panes)).filter((p)=>p.command==="claude"||p.title.includes("claude"))}function detectGaps(executors,sessions2){let deadPidExecutors=executors.filter((e)=>e.pid!=null&&!isPidAlive3(e.pid)),executorPaneIds=new Set(executors.map((e)=>e.tmuxPaneId).filter(Boolean)),claudePanes=allClaudePanes(sessions2),orphanPanes=claudePanes.filter((p)=>!executorPaneIds.has(p.paneId)),linkedCount=executors.filter((e)=>e.tmuxPaneId&&!deadPidExecutors.some((d2)=>d2.id===e.id)).length,deadPaneCount=sessions2.flatMap((s2)=>s2.windows.flatMap((w2)=>w2.panes)).filter((p)=>p.isDead).length;return{deadPidExecutors,orphanPanes,linkedCount,totalExecutors:executors.length,totalClaudePanes:claudePanes.length,deadPaneCount}}async function collectDiagnostics(){let{loadExecutors:loadExecutors2,loadAssignments:loadAssignments2}=await Promise.resolve().then(() => exports_db2),sessions2=getTmuxInventory(),executors=await loadExecutors2(),executorIds=executors.map((e)=>e.id),assignments=await loadAssignments2(executorIds),gaps=detectGaps(executors,sessions2);if(gaps.deadPidExecutors.length>0){let{terminateExecutor:terminateExecutor2}=await Promise.resolve().then(() => (init_executor_registry(),exports_executor_registry)),{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db)),sql=await getConnection2();await Promise.allSettled(gaps.deadPidExecutors.map(async(exec3)=>{if(await terminateExecutor2(exec3.id),exec3.agentId)await sql`UPDATE agents SET current_executor_id = NULL WHERE current_executor_id = ${exec3.id}`}))}return{sessions:sessions2,executors,assignments,gaps,timestamp:Date.now()}}var init_diagnostics=__esm(()=>{init_ensure_tmux()});import{existsSync as existsSync48,readFileSync as readFileSync30,unlinkSync as unlinkSync11}from"fs";import{homedir as homedir32}from"os";import{join as join62}from"path";function getInitialAgentFilePath(){let genieHome5=process.env.GENIE_HOME??join62(homedir32(),".genie");return join62(genieHome5,"tui-initial-agent")}function consumeInitialAgentSignal(){let filePath=getInitialAgentFilePath();if(!existsSync48(filePath))return;try{let agent=readFileSync30(filePath,"utf-8").trim();return unlinkSync11(filePath),agent||void 0}catch{return}}var init_initial_agent=()=>{};function toSessionName(agentName){return agentName.replace(/\//g,"-")}function buildSessionTree(snapshot){let executorByPaneId=new Map;for(let exec3 of snapshot.executors)if(exec3.tmuxPaneId)executorByPaneId.set(exec3.tmuxPaneId,exec3);return snapshot.sessions.filter((s2)=>s2.name!=="genie-tui").map((session)=>sessionToNode(session,executorByPaneId))}function buildWorkspaceTree(input){let{agentNames,sessions:sessions2,executors}=input,sessionByName=new Map;for(let s2 of sessions2)if(s2.name!=="genie-tui")sessionByName.set(s2.name,s2);let executorByPaneId=new Map;for(let exec3 of executors)if(exec3.tmuxPaneId)executorByPaneId.set(exec3.tmuxPaneId,exec3);let executorsByAgent=new Map;for(let exec3 of executors){let name=exec3.agentName??exec3.metadata?.agentName;if(typeof name==="string"){let list2=executorsByAgent.get(name)??[];list2.push(exec3),executorsByAgent.set(name,list2)}}let{topLevel,subsByParent}=groupAgentNames(agentNames),nodes=topLevel.map((name)=>{let node=buildAgentNode(name,sessionByName.get(toSessionName(name)),executorsByAgent.get(name)??[],executorByPaneId);return appendSubAgentNodes(node,subsByParent.get(name),sessionByName,executorsByAgent,executorByPaneId),node}),claimedSessions=new Set(agentNames.map(toSessionName));for(let[name,session]of sessionByName)if(!claimedSessions.has(name))nodes.push(sessionToNode(session,executorByPaneId));return nodes}function resolvePreferredWindowIndex(session,agentName){let windows=[...session.windows].sort((a,b3)=>a.index-b3.index),hasClaudePane=(window2)=>window2.panes.some((pane)=>!pane.isDead&&(pane.command==="claude"||pane.title.includes("claude")));return(windows.find((window2)=>window2.active&&hasClaudePane(window2))??(agentName?windows.find((window2)=>window2.name===agentName):void 0)??windows.find((window2)=>hasClaudePane(window2))??windows.find((window2)=>window2.active&&window2.index!==0)??windows.find((window2)=>window2.index!==0))?.index}function hasLiveClaudeWindow(session){return session.windows.some((window2)=>window2.panes.some((pane)=>!pane.isDead&&(pane.command==="claude"||pane.title.includes("claude"))))}function groupAgentNames(names){let topLevel=[],subsByParent=new Map;for(let name of names){let slashIdx=name.indexOf("/");if(slashIdx===-1)topLevel.push(name);else{let parent=name.slice(0,slashIdx),subs=subsByParent.get(parent)??[];subs.push(name),subsByParent.set(parent,subs)}}return{topLevel,subsByParent}}function appendSubAgentNodes(parent,subs,sessionByName,executorsByAgent,executorByPaneId){if(!subs)return;for(let subName of subs){let subLabel=subName.slice(subName.indexOf("/")+1),subNode=buildAgentNode(subName,sessionByName.get(toSessionName(subName)),executorsByAgent.get(subName)??[],executorByPaneId);subNode.label=subLabel,subNode.depth=1,parent.children.push(subNode)}}function countClaudePanes(session){return session.windows.reduce((sum,w2)=>sum+w2.panes.filter((p)=>p.command==="claude"||p.title.includes("claude")).length,0)}function buildAgentNode(name,session,agentExecutors,executorByPaneId){let wsState=deriveWsAgentState(session,agentExecutors),attachWindowIndex=session?resolvePreferredWindowIndex(session,name):void 0,children=[];if(session)for(let win of session.windows){if(win.index===0)continue;children.push(windowToNode(session.name,win,executorByPaneId))}return{id:`agent:${name}`,type:"agent",label:name,depth:0,expanded:children.length>0,children,data:{sessionName:toSessionName(name),windowCount:session?session.windows.length:0,attachWindowIndex,provider:agentExecutors[0]?.provider??null},activePanes:session?countClaudePanes(session):0,agentState:agentExecutors.length>0?deriveExecutorState(agentExecutors):void 0,wsAgentState:wsState}}function deriveWsAgentState(session,agentExecutors){if(!session)return"stopped";if(hasLiveClaudeWindow(session))return"running";for(let exec3 of agentExecutors){if(exec3.state==="error"||exec3.state==="terminated")return"error";if(exec3.state==="spawning")return"spawning"}if(agentExecutors.length===0)return"stopped";return"running"}function deriveExecutorState(execs){for(let e of execs)if(e.state==="working")return"working";for(let e of execs)if(e.state==="permission")return"permission";for(let e of execs)if(e.state==="error"||e.state==="terminated")return"error";return"idle"}function sessionToNode(session,executorMap){let claudePanes=session.windows.reduce((sum,w2)=>sum+w2.panes.filter((p)=>p.command==="claude"||p.title.includes("claude")).length,0);return{id:`session:${session.name}`,type:"session",label:session.name,depth:0,expanded:!0,children:session.windows.map((w2)=>windowToNode(session.name,w2,executorMap)),data:{attached:session.attached,windowCount:session.windowCount},activePanes:claudePanes,agentState:void 0,wsAgentState:void 0}}function windowToNode(sessionName,window2,executorMap){let activePanes=window2.panes.filter((p)=>!p.isDead&&(p.command==="claude"||p.title.includes("claude"))).length;return{id:`window:${sessionName}:${window2.index}`,type:"window",label:window2.name,depth:1,expanded:!0,children:window2.panes.map((p)=>paneToNode(sessionName,window2.index,p,executorMap)),data:{active:window2.active,paneCount:window2.paneCount},activePanes,agentState:void 0,wsAgentState:void 0}}function paneToNode(sessionName,windowIndex,pane,executorMap){let executor=executorMap.get(pane.paneId),isClaude=pane.command==="claude"||pane.title.includes("claude");return{id:`pane:${pane.paneId}`,type:"pane",label:derivePaneLabel(pane,executor,isClaude),depth:2,expanded:!1,children:[],data:{command:pane.command,isDead:pane.isDead,pid:pane.pid,size:pane.size,paneId:pane.paneId,sessionName,windowIndex},activePanes:0,agentState:derivePaneState(pane,executor),wsAgentState:void 0}}function derivePaneLabel(pane,executor,isClaude){if(executor?.agentName&&executor?.team)return`${executor.team}/${executor.agentName}`;if(executor?.agentName)return executor.agentName;if(pane.title&&pane.title!==pane.command&&!isDefaultPaneTitle(pane.title))return pane.title;if(isClaude)return"claude";return pane.command}function isDefaultPaneTitle(title){let hostname=__require("os").hostname();return title===hostname||title.startsWith(`${hostname}.`)||title.startsWith("\u2733")}function derivePaneState(pane,executor){if(pane.isDead)return"error";if(!executor)return;let s2=executor.state;if(s2==="working")return"working";if(s2==="idle"||s2==="spawning")return"idle";if(s2==="permission")return"permission";if(s2==="error"||s2==="terminated")return"error";return}function getSessionTarget(node){if(node.type==="agent"){let sessionName=node.data.sessionName,attachWindowIndex=node.data.attachWindowIndex;if(typeof attachWindowIndex==="number")return{sessionName,windowIndex:attachWindowIndex};let firstWindowChild=node.children.find((child)=>child.type==="window");if(firstWindowChild){let parts=firstWindowChild.id.split(":");return{sessionName,windowIndex:Number(parts[2])}}return{sessionName}}if(node.type==="session")return{sessionName:node.label};if(node.type==="window"){let parts=node.id.split(":");return{sessionName:parts[1],windowIndex:Number(parts[2])}}if(node.type==="pane"){let data=node.data;return{sessionName:data.sessionName,windowIndex:data.windowIndex}}return null}var palette,icons;var init_theme2=__esm(()=>{palette={purple:"#a855f7",violet:"#7c3aed",cyan:"#22d3ee",emerald:"#34d399",bg:"#1a1028",bgLight:"#241838",bgLighter:"#2e2048",text:"#e2e8f0",textDim:"#94a3b8",textMuted:"#64748b",border:"#414868",borderActive:"#7c3aed",scrollTrack:"#414868",scrollThumb:"#7aa2f7",active:"#22d3ee",success:"#34d399",warning:"#fbbf24",error:"#f87171",idle:"#94a3b8"},icons={org:"\u25C6",project:"\u25B8",projectOpen:"\u25BE",board:"\u2261",boardOpen:"\u2261",column:"\u2502",task:"\u25CB",taskActive:"\u25CF",taskDone:"\u2713",agent:"\u25B6",collapsed:"\u25B8",expanded:"\u25BE"}});function flattenTree(nodes){let result2=[];function walk(node,depth){if(result2.push({node,depth,visible:!0}),node.expanded)for(let child of node.children)walk(child,depth+1)}for(let node of nodes)walk(node,0);return result2}function toggleNode(nodes,id){return nodes.map((node)=>{if(node.id===id)return{...node,expanded:!node.expanded};return{...node,children:toggleNode(node.children,id)}})}var import_jsx_dev_runtime2;var init_jsx_dev_runtime=__esm(()=>{import_jsx_dev_runtime2=__toESM(require_react_jsx_dev_runtime_development(),1)});function CliPreviewLine({intent,hint=DEFAULT_HINT}){let cli=null,errorMessage=null;try{cli=buildSpawnInvocation(intent).cli}catch(err){errorMessage=err instanceof Error?err.message:String(err)}if(errorMessage!==null)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:hint},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.cyan,children:"\u25B6 "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:cli},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:hint},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var DEFAULT_HINT="Enter to run \xB7 Esc to cancel";var init_CliPreviewLine=__esm(()=>{init_spawn_invocation();init_theme2();init_jsx_dev_runtime()});async function defaultLoadAgents(){let{spawn:spawn5}=await import("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],[command,args]=genieBin&&genieBin!=="genie"?[bunPath,[genieBin,"dir","ls","--json"]]:["genie",["dir","ls","--json"]],stdout=await new Promise((resolve14,reject)=>{let child=spawn5(command,args,{stdio:["ignore","pipe","ignore"]}),chunks=[];child.stdout.on("data",(c)=>chunks.push(c)),child.on("error",reject),child.on("close",()=>resolve14(Buffer.concat(chunks).toString("utf-8")))});return JSON.parse(stdout).map((e)=>typeof e?.name==="string"?{name:e.name}:null).filter((e)=>e!==null)}function buildIntent(agentName,target){let intent={kind:"spawn-agent",name:agentName,session:target.session};if(target.window!==void 0&&target.window.length>0)intent.window=target.window;else intent.newWindow=!0;return intent}function applyFilter2(agents,filter){if(filter.length===0)return agents;let needle=filter.toLowerCase();return agents.filter((a)=>a.name.toLowerCase().includes(needle))}function handleControlKey(key,deps){if(key.name==="escape")return deps.onCancel(),!0;if(key.name==="up"&&deps.filteredLength>0)return deps.setSelectedIndex((prev)=>prev<=0?deps.filteredLength-1:prev-1),!0;if(key.name==="down"&&deps.filteredLength>0)return deps.setSelectedIndex((prev)=>prev>=deps.filteredLength-1?0:prev+1),!0;if((key.name==="return"||key.name==="enter")&&deps.highlighted)return deps.onConfirm(buildIntent(deps.highlighted.name,deps.target)),!0;if(key.name==="backspace")return deps.setFilter((prev)=>prev.slice(0,-1)),!0;if(key.name==="up"||key.name==="down"||key.name==="return"||key.name==="enter")return!0;return!1}function appendCharIfPrintable(key,setFilter){let ch=key.sequence??key.name;if(typeof ch==="string"&&ch.length===1&&ch>=" "&&ch!=="\x7F")setFilter((prev)=>prev+ch)}function AgentPicker({target,onConfirm,onCancel,loadAgents=defaultLoadAgents}){let[agents,setAgents]=import_react14.useState(null),[loadError,setLoadError]=import_react14.useState(null),[filter,setFilter]=import_react14.useState(""),[selectedIndex,setSelectedIndex]=import_react14.useState(0);import_react14.useEffect(()=>{let active=!0;return loadAgents().then((list2)=>{if(!active)return;setAgents(list2)}).catch((err)=>{if(!active)return;setLoadError(err instanceof Error?err.message:String(err)),setAgents([])}),()=>{active=!1}},[loadAgents]);let filtered=import_react14.useMemo(()=>agents?applyFilter2(agents,filter):[],[agents,filter]);import_react14.useEffect(()=>{if(filtered.length===0){if(selectedIndex!==0)setSelectedIndex(0);return}if(selectedIndex>=filtered.length)setSelectedIndex(filtered.length-1)},[filtered.length,selectedIndex]);let highlighted=filtered[selectedIndex],previewIntent=highlighted?buildIntent(highlighted.name,target):null,handleKey=import_react14.useCallback((key)=>{if(handleControlKey(key,{onCancel,onConfirm,target,highlighted,filteredLength:filtered.length,setSelectedIndex,setFilter}))return;if(key.ctrl||key.meta)return;appendCharIfPrintable(key,setFilter)},[filtered.length,highlighted,onCancel,onConfirm,target]);useKeyboard(handleKey);let targetLabel=target.window?target.window:target.session,modeHint=target.window?"in window":"new window in session",statusText=agents===null?"Loading agents\u2026":loadError!==null?`Load failed: ${loadError}`:null;return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,width:80,flexDirection:"column",paddingX:1,paddingY:1,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"Spawn here"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` \u2014 ${modeHint} `},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:targetLabel},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Filter: "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:filter.length>0?filter:" "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:filter.length>0?"":"(type to narrow)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),statusText!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:loadError!==null?palette.error:palette.textDim,children:statusText},void 0,!1,void 0,this)},void 0,!1,void 0,this):filtered.length===0?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:filtered.map((agent,i2)=>import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.violet:palette.textDim,children:i2===selectedIndex?"\u25B8 ":" "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.text:palette.textDim,children:agent.name},void 0,!1,void 0,this)]},agent.name,!0,void 0,this))},void 0,!1,void 0,this),previewIntent!==null?import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent:previewIntent},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var import_react14;var init_AgentPicker=__esm(async()=>{init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react14=__toESM(require_react_development(),1)});function ContextMenu({items,onAction,onClose,positionY=0}){let[selectedIndex,setSelectedIndex]=import_react16.useState(0),[inputMode,setInputMode]=import_react16.useState(!1),inputRef=import_react16.useRef(""),selectOptions=items.map((item)=>({name:`${item.label}${item.shortcut?` ${item.shortcut}`:""}`,description:"",value:item.action}));useKeyboard(import_react16.useCallback((key)=>{if(inputMode)return;if(key.name==="escape"){onClose();return}for(let item of items)if(item.shortcut&&key.name===item.shortcut.toLowerCase()){if(item.needsInput)setInputMode(!0),inputRef.current="",setSelectedIndex(items.indexOf(item));else onAction(item.action);return}},[inputMode,items,onAction,onClose]));let handleSelect=import_react16.useCallback((_index,option)=>{let value=option?.value;if(!value)return;if(items.find((i2)=>i2.action===value)?.needsInput){setInputMode(!0),inputRef.current="";return}onAction(value)},[items,onAction]),handleInputChange=import_react16.useCallback((v2)=>{inputRef.current=v2},[]),handleInputSubmit=import_react16.useCallback(()=>{let item=items[selectedIndex],value=inputRef.current.trim();if(item&&value)onAction(item.action,value);setInputMode(!1),inputRef.current=""},[items,selectedIndex,onAction]);if(items.length===0)return onClose(),null;return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",onMouseDown:()=>onClose(),children:[positionY>0?import_jsx_dev_runtime2.jsxDEV("box",{height:positionY},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,width:32,height:inputMode?items.length+5:items.length+2,flexDirection:"column",onMouseDown:(e)=>e.stopPropagation?.(),children:[import_jsx_dev_runtime2.jsxDEV("select",{options:selectOptions,selectedIndex,onSelect:handleSelect,onChange:(index)=>setSelectedIndex(index),focused:!inputMode,height:items.length,showDescription:!1,selectedBackgroundColor:palette.violet,selectedTextColor:"#ffffff"},void 0,!1,void 0,this),inputMode?import_jsx_dev_runtime2.jsxDEV("box",{paddingX:1,height:3,flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[items[selectedIndex]?.label??"Input",":"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{onChange:handleInputChange,onSubmit:handleInputSubmit,placeholder:"Type and press Enter...",focused:!0,width:28,backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this)]},void 0,!0,void 0,this):null]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var import_react16;var init_ContextMenu=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react();import_react16=__toESM(require_react_development(),1)});function buildRows(sessions2){let rows=[];for(let session of sessions2){if(session.name===TUI_SESSION2)continue;rows.push({kind:"session",sessionName:session.name,label:`${session.name} (new window)`});for(let win of session.windows){let windowLabel=win.name?` ${win.name}`:"";rows.push({kind:"window",sessionName:session.name,windowIndex:win.index,label:` ${session.name}:${win.index}${windowLabel}`})}}return rows}function pickFromRow(row){if(row.kind==="session")return{kind:"session",sessionName:row.sessionName};return{kind:"window",sessionName:row.sessionName,windowIndex:row.windowIndex}}function picksEqual(a,b3){if(a.kind==="session"&&b3.kind==="session")return a.sessionName===b3.sessionName;if(a.kind==="window"&&b3.kind==="window")return a.sessionName===b3.sessionName&&a.windowIndex===b3.windowIndex;return!1}function pickExists(pick,sessions2){let session=sessions2.find((s2)=>s2.name===pick.sessionName);if(!session)return!1;if(pick.kind==="session")return!0;return session.windows.some((w2)=>w2.index===pick.windowIndex)}function pickToIntent(agentName,pick){if(!pick)return{kind:"spawn-agent",name:agentName};if(pick.kind==="session")return{kind:"spawn-agent",name:agentName,session:pick.sessionName,newWindow:!0};return{kind:"spawn-agent",name:agentName,window:`${pick.sessionName}:${pick.windowIndex}`}}function pickLabel(pick){if(pick.kind==="session")return pick.sessionName;return`${pick.sessionName}:${pick.windowIndex}`}function SpawnTargetPicker({agentName,sessions:sessions2,onConfirm,onCancel}){let rows=import_react18.useMemo(()=>buildRows(sessions2),[sessions2]),[pick,setPick]=import_react18.useState(()=>rows[0]?pickFromRow(rows[0]):null),[staleError,setStaleError]=import_react18.useState(null);if(pick===null&&rows[0])setPick(pickFromRow(rows[0]));let selectedIndex=import_react18.useMemo(()=>{if(!pick)return-1;return rows.findIndex((r)=>picksEqual(pick,r))},[pick,rows]),movePick=import_react18.useCallback((delta)=>{if(rows.length===0)return;let next=((selectedIndex<0?0:selectedIndex)+delta+rows.length)%rows.length;setPick(pickFromRow(rows[next])),setStaleError(null)},[rows,selectedIndex]),handleEnter=import_react18.useCallback(()=>{if(!pick)return;if(!pickExists(pick,sessions2)){setStaleError(`Target "${pickLabel(pick)}" no longer exists \u2014 pick another.`);return}onConfirm(pickToIntent(agentName,pick))},[pick,sessions2,agentName,onConfirm]);useKeyboard(import_react18.useCallback((key)=>{let n=key.name;if(n==="escape"){onCancel();return}if(n==="enter"||n==="return"){handleEnter();return}if(n==="up"||n==="k")movePick(-1);else if(n==="down"||n==="j")movePick(1)},[onCancel,handleEnter,movePick]));let intent=import_react18.useMemo(()=>pickToIntent(agentName,pick),[agentName,pick]);return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,paddingX:2,paddingY:1,flexDirection:"column",width:60,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:`Spawn "${agentName}" into\u2026`},void 0,!1,void 0,this)},void 0,!1,void 0,this),rows.length===0?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No tmux sessions available. Press Esc to cancel."},void 0,!1,void 0,this)},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:rows.map((row,i2)=>import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.cyan:palette.text,children:[i2===selectedIndex?"> ":" ",row.label]},void 0,!0,void 0,this)},`${row.kind}:${row.sessionName}:${row.kind==="window"?row.windowIndex:""}`,!1,void 0,this))},void 0,!1,void 0,this),staleError?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${staleError}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var import_react18,TUI_SESSION2="genie-tui";var init_SpawnTargetPicker=__esm(async()=>{init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react18=__toESM(require_react_development(),1)});var require_package=__commonJS((exports,module2)=>{module2.exports={name:"systeminformation",version:"5.31.5",description:"Advanced, lightweight system and OS information library",license:"MIT",author:"Sebastian Hildebrandt <hildebrandt@plus-innovations.com> (https://plus-innovations.com)",homepage:"https://systeminformation.io",main:"./lib/index.js",type:"commonjs",bin:{systeminformation:"lib/cli.js"},types:"./lib/index.d.ts",scripts:{test:"node ./test/test.js",testDeno:"deno run -A ./test/test.js"},files:["lib/"],keywords:["system information","sysinfo","monitor","monitoring","os","linux","osx","windows","freebsd","openbsd","netbsd","cpu","cpuload","physical cores","logical cores","processor","cores","threads","socket type","memory","file system","fsstats","diskio","block devices","netstats","network","network interfaces","network connections","network stats","iface","printer","processes","users","internet","battery","docker","docker stats","docker processes","graphics","graphic card","graphic controller","gpu","display","smart","disk layout","usb","audio","bluetooth","wifi","wifinetworks","virtual box","virtualbox","vm","backend","hardware","BIOS","chassis"],repository:{type:"git",url:"git+https://github.com/sebhildebrandt/systeminformation.git"},funding:{type:"Buy me a coffee",url:"https://www.buymeacoffee.com/systeminfo"},os:["darwin","linux","win32","freebsd","openbsd","netbsd","sunos","android"],engines:{node:">=8.0.0"}}});var require_util3=__commonJS((exports)=>{var os4=__require("os"),fs3=__require("fs"),path6=__require("path"),spawn5=__require("child_process").spawn,exec3=__require("child_process").exec,execSync17=__require("child_process").execSync,util4=__require("util"),_platform=process.platform,_linux=_platform==="linux"||_platform==="android",_darwin=_platform==="darwin",_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_cores=0,codepage="",_smartMonToolsInstalled=null,_rpi_cpuinfo=null,WINDIR=process.env.WINDIR||"C:\\Windows",_psChild,_psResult="",_psCmds=[],_psPersistent=!1,_powerShell="",_psToUTF8="$OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8 ; ",_psCmdStart="--###START###--",_psError="--ERROR--",_psCmdSeperator="--###ENDCMD###--",_psIdSeperator="--##ID##--",execOptsWin={windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})},execOptsLinux={maxBuffer:104857600,encoding:"UTF-8",stdio:["pipe","pipe","ignore"]};function toInt(value){let result2=parseInt(value,10);if(isNaN(result2))result2=0;return result2}function splitByNumber(str5){let numberStarted=!1,num="",cpart="";for(let c of str5)if(c>="0"&&c<="9"||numberStarted)numberStarted=!0,num+=c;else cpart+=c;return[cpart,num]}var stringObj=new String,stringReplace=new String().replace,stringToLower=new String().toLowerCase,stringToString=new String().toString,stringSubstr=new String().substr,stringSubstring=new String().substring,stringTrim=new String().trim,stringStartWith=new String().startsWith,mathMin=Math.min;function isFunction(functionToCheck){return functionToCheck&&{}.toString.call(functionToCheck)==="[object Function]"}function unique(obj){let uniques=[],stringify2={};for(let i2=0;i2<obj.length;i2++){let keys=Object.keys(obj[i2]);keys.sort((a,b3)=>{return a-b3});let str5="";for(let j2=0;j2<keys.length;j2++)str5+=JSON.stringify(keys[j2]),str5+=JSON.stringify(obj[i2][keys[j2]]);if(!{}.hasOwnProperty.call(stringify2,str5))uniques.push(obj[i2]),stringify2[str5]=!0}return uniques}function sortByKey(array,keys){return array.sort((a,b3)=>{let x2="",y2="";return keys.forEach((key)=>{x2=x2+a[key],y2=y2+b3[key]}),x2<y2?-1:x2>y2?1:0})}function cores(){if(_cores===0)_cores=os4.cpus().length;return _cores}function getValue(lines,property,separator,trimmed,lineMatch){separator=separator||":",property=property.toLowerCase(),trimmed=trimmed||!1,lineMatch=lineMatch||!1;let result2="";return lines.some((line)=>{let lineLower=line.toLowerCase().replace(/\t/g,"");if(trimmed)lineLower=lineLower.trim();if(lineLower.startsWith(property)&&(lineMatch?lineLower.match(property+separator)||lineLower.match(property+" "+separator):!0)){let parts=trimmed?line.trim().split(separator):line.split(separator);if(parts.length>=2)return parts.shift(),result2=parts.join(separator).trim(),!0}return!1}),result2}function decodeEscapeSequence(str5,base){return base=base||16,str5.replace(/\\x([0-9A-Fa-f]{2})/g,function(){return String.fromCharCode(parseInt(arguments[1],base))})}function detectSplit(str5){let seperator="",part=0;return str5.split("").forEach((element)=>{if(element>="0"&&element<="9"){if(part===1)part++}else{if(part===0)part++;if(part===1)seperator+=element}}),seperator}function parseTime(t2,pmDesignator){pmDesignator=pmDesignator||"",t2=t2.toUpperCase();let hour=0,min=0,splitter=detectSplit(t2),parts=t2.split(splitter);if(parts.length>=2){if(parts[2])parts[1]+=parts[2];let isPM=parts[1]&&parts[1].toLowerCase().indexOf("pm")>-1||parts[1].toLowerCase().indexOf("p.m.")>-1||parts[1].toLowerCase().indexOf("p. m.")>-1||parts[1].toLowerCase().indexOf("n")>-1||parts[1].toLowerCase().indexOf("ch")>-1||parts[1].toLowerCase().indexOf("\xF6s")>-1||pmDesignator&&parts[1].toLowerCase().indexOf(pmDesignator)>-1;return hour=parseInt(parts[0],10),min=parseInt(parts[1],10),hour=isPM&&hour<12?hour+12:hour,("0"+hour).substr(-2)+":"+("0"+min).substr(-2)}}function parseDateTime(dt,culture){let result2={date:"",time:""};culture=culture||{};let dateFormat=(culture.dateFormat||"").toLowerCase(),pmDesignator=culture.pmDesignator||"",parts=dt.split(" ");if(parts[0]){if(parts[0].indexOf("/")>=0){let dtparts=parts[0].split("/");if(dtparts.length===3)if(dtparts[0].length===4)result2.date=dtparts[0]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[2]).substr(-2);else if(dtparts[2].length===2)if(dateFormat.indexOf("/d/")>-1||dateFormat.indexOf("/dd/")>-1)result2.date="20"+dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2);else result2.date="20"+dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2);else if((dt.toLowerCase().indexOf("pm")>-1||dt.toLowerCase().indexOf("p.m.")>-1||dt.toLowerCase().indexOf("p. m.")>-1||dt.toLowerCase().indexOf("am")>-1||dt.toLowerCase().indexOf("a.m.")>-1||dt.toLowerCase().indexOf("a. m.")>-1||dateFormat.indexOf("/d/")>-1||dateFormat.indexOf("/dd/")>-1)&&dateFormat.indexOf("dd/")!==0)result2.date=dtparts[2]+"-"+("0"+dtparts[0]).substr(-2)+"-"+("0"+dtparts[1]).substr(-2);else result2.date=dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2)}if(parts[0].indexOf(".")>=0){let dtparts=parts[0].split(".");if(dtparts.length===3)if(dateFormat.indexOf(".d.")>-1||dateFormat.indexOf(".dd.")>-1)result2.date=dtparts[2]+"-"+("0"+dtparts[0]).substr(-2)+"-"+("0"+dtparts[1]).substr(-2);else result2.date=dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2)}if(parts[0].indexOf("-")>=0){let dtparts=parts[0].split("-");if(dtparts.length===3)result2.date=dtparts[0]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[2]).substr(-2)}}if(parts[1]){parts.shift();let time=parts.join(" ");result2.time=parseTime(time,pmDesignator)}return result2}function parseHead(head,rights){let space=rights>0,count=1,from=0,to=0,result2=[];for(let i2=0;i2<head.length;i2++)if(count<=rights){if(/\s/.test(head[i2])&&!space)to=i2-1,result2.push({from,to:to+1,cap:head.substring(from,to+1)}),from=to+2,count++;space=head[i2]===" "}else{if(!/\s/.test(head[i2])&&space){if(to=i2-1,from<to)result2.push({from,to,cap:head.substring(from,to)});from=to+1,count++}space=head[i2]===" "}to=5000,result2.push({from,to,cap:head.substring(from,to)});let len=result2.length;for(let i2=0;i2<len;i2++)if(result2[i2].cap.replace(/\s/g,"").length===0){if(i2+1<len)result2[i2].to=result2[i2+1].to,result2[i2].cap=result2[i2].cap+result2[i2+1].cap,result2.splice(i2+1,1),len=len-1}return result2}function findObjectByKey(array,key,value){for(let i2=0;i2<array.length;i2++)if(array[i2][key]===value)return i2;return-1}function getPowershell(){if(_powerShell="powershell.exe",_windows){let defaultPath=`${WINDIR}\\system32\\WindowsPowerShell\\v1.0\\powershell.exe`;if(fs3.existsSync(defaultPath))_powerShell=defaultPath}}function getVboxmanage(){return _windows?`"${process.env.VBOX_INSTALL_PATH||process.env.VBOX_MSI_INSTALL_PATH}\\VBoxManage.exe"`:"vboxmanage"}function powerShellProceedResults(data){let id="",parts,res="";if(data.indexOf(_psCmdStart)>=0){parts=data.split(_psCmdStart);let parts2=parts[1].split(_psIdSeperator);if(id=parts2[0],parts2.length>1)data=parts2.slice(1).join(_psIdSeperator)}if(data.indexOf(_psCmdSeperator)>=0)parts=data.split(_psCmdSeperator),res=parts[0];let remove=-1;for(let i2=0;i2<_psCmds.length;i2++)if(_psCmds[i2].id===id)remove=i2,_psCmds[i2].callback(res);if(remove>=0)_psCmds.splice(remove,1)}function powerShellStart(){if(!_psChild){if(_psChild=spawn5(_powerShell,["-NoProfile","-NoLogo","-InputFormat","Text","-NoExit","-Command","-"],{stdio:"pipe",windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})}),_psChild&&_psChild.pid)_psPersistent=!0,_psChild.stdout.on("data",(data)=>{if(_psResult=_psResult+data.toString("utf8"),data.indexOf(_psCmdSeperator)>=0)powerShellProceedResults(_psResult),_psResult=""}),_psChild.stderr.on("data",()=>{powerShellProceedResults(_psResult+_psError)}),_psChild.on("error",()=>{powerShellProceedResults(_psResult+_psError)}),_psChild.on("close",()=>{if(_psChild)_psChild.kill()})}}function powerShellRelease(){try{if(_psChild)_psChild.stdin.write("exit"+os4.EOL),_psChild.stdin.end()}catch{if(_psChild)_psChild.kill()}_psPersistent=!1,_psChild=null}function powerShell(cmd){if(_psPersistent){let id=Math.random().toString(36).substring(2,12);return new Promise((resolve14)=>{process.nextTick(()=>{function callback(data){resolve14(data)}_psCmds.push({id,cmd,callback,start:new Date});try{if(_psChild&&_psChild.pid)_psChild.stdin.write(_psToUTF8+"echo "+_psCmdStart+id+_psIdSeperator+"; "+os4.EOL+cmd+os4.EOL+"echo "+_psCmdSeperator+os4.EOL)}catch{resolve14("")}})})}else{let result2="";return new Promise((resolve14)=>{process.nextTick(()=>{try{let osVersion=os4.release().split(".").map(Number),spanOptions=osVersion[0]<10?["-NoProfile","-NoLogo","-InputFormat","Text","-NoExit","-ExecutionPolicy","Unrestricted","-Command","-"]:["-NoProfile","-NoLogo","-InputFormat","Text","-ExecutionPolicy","Unrestricted","-Command",_psToUTF8+cmd],child=spawn5(_powerShell,spanOptions,{stdio:"pipe",windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})});if(child&&!child.pid)child.on("error",()=>{resolve14(result2)});if(child&&child.pid){if(child.stdout.on("data",(data)=>{result2=result2+data.toString("utf8")}),child.stderr.on("data",()=>{child.kill(),resolve14(result2)}),child.on("close",()=>{child.kill(),resolve14(result2)}),child.on("error",()=>{child.kill(),resolve14(result2)}),osVersion[0]<10)try{child.stdin.write(_psToUTF8+cmd+os4.EOL),child.stdin.write("exit"+os4.EOL),child.stdin.end()}catch{child.kill(),resolve14(result2)}}else resolve14(result2)}catch{resolve14(result2)}})})}}function execSafe(cmd,args,options){let result2="";return options=options||{},new Promise((resolve14)=>{process.nextTick(()=>{try{let child=spawn5(cmd,args,options);if(child&&!child.pid)child.on("error",()=>{resolve14(result2)});if(child&&child.pid)child.stdout.on("data",(data)=>{result2+=data.toString()}),child.on("close",()=>{child.kill(),resolve14(result2)}),child.on("error",()=>{child.kill(),resolve14(result2)});else resolve14(result2)}catch{resolve14(result2)}})})}function getCodepage(){if(_windows){if(!codepage)try{let parts=execSync17("chcp",execOptsWin).toString().split(`\r
|
|
2799
|
+
`)){if(!line)continue;let parts=line.split("|");if(parts.length<15)continue;let parsed=parsePaneLine(parts);if(!sessionMap.has(parsed.sessionName))sessionMap.set(parsed.sessionName,{...parsed.session,windows:[]});let winKey=`${parsed.sessionName}:${parsed.winIdxStr}`;if(!windowMap.has(winKey)){let win={...parsed.window,panes:[]};windowMap.set(winKey,win),sessionMap.get(parsed.sessionName)?.windows.push(win)}windowMap.get(winKey)?.panes.push(parsed.pane)}return Array.from(sessionMap.values()).sort((a,b3)=>a.name.localeCompare(b3.name))}function isPidAlive3(pid){try{return process.kill(pid,0),!0}catch{return!1}}function allClaudePanes(sessions2){return sessions2.flatMap((s2)=>s2.windows.flatMap((w2)=>w2.panes)).filter((p)=>p.command==="claude"||p.title.includes("claude"))}function detectGaps(executors,sessions2){let deadPidExecutors=executors.filter((e)=>e.pid!=null&&!isPidAlive3(e.pid)),executorPaneIds=new Set(executors.map((e)=>e.tmuxPaneId).filter(Boolean)),claudePanes=allClaudePanes(sessions2),orphanPanes=claudePanes.filter((p)=>!executorPaneIds.has(p.paneId)),linkedCount=executors.filter((e)=>e.tmuxPaneId&&!deadPidExecutors.some((d2)=>d2.id===e.id)).length,deadPaneCount=sessions2.flatMap((s2)=>s2.windows.flatMap((w2)=>w2.panes)).filter((p)=>p.isDead).length;return{deadPidExecutors,orphanPanes,linkedCount,totalExecutors:executors.length,totalClaudePanes:claudePanes.length,deadPaneCount}}async function collectDiagnostics(){let{loadExecutors:loadExecutors2,loadAssignments:loadAssignments2}=await Promise.resolve().then(() => exports_db2),sessions2=getTmuxInventory(),executors=await loadExecutors2(),executorIds=executors.map((e)=>e.id),assignments=await loadAssignments2(executorIds),gaps=detectGaps(executors,sessions2);if(gaps.deadPidExecutors.length>0){let{terminateExecutor:terminateExecutor2}=await Promise.resolve().then(() => (init_executor_registry(),exports_executor_registry)),{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db)),sql=await getConnection2();await Promise.allSettled(gaps.deadPidExecutors.map(async(exec3)=>{if(await terminateExecutor2(exec3.id),exec3.agentId)await sql`UPDATE agents SET current_executor_id = NULL WHERE current_executor_id = ${exec3.id}`}))}return{sessions:sessions2,executors,assignments,gaps,timestamp:Date.now()}}var init_diagnostics=__esm(()=>{init_ensure_tmux()});import{existsSync as existsSync50,readFileSync as readFileSync31,unlinkSync as unlinkSync11}from"fs";import{homedir as homedir32}from"os";import{join as join64}from"path";function getInitialAgentFilePath(){let genieHome5=process.env.GENIE_HOME??join64(homedir32(),".genie");return join64(genieHome5,"tui-initial-agent")}function consumeInitialAgentSignal(){let filePath=getInitialAgentFilePath();if(!existsSync50(filePath))return;try{let agent=readFileSync31(filePath,"utf-8").trim();return unlinkSync11(filePath),agent||void 0}catch{return}}var init_initial_agent=()=>{};function toSessionName(agentName){return agentName.replace(/\//g,"-")}function buildSessionTree(snapshot){let executorByPaneId=new Map;for(let exec3 of snapshot.executors)if(exec3.tmuxPaneId)executorByPaneId.set(exec3.tmuxPaneId,exec3);return snapshot.sessions.filter((s2)=>s2.name!=="genie-tui").map((session)=>sessionToNode(session,executorByPaneId))}function buildWorkspaceTree(input){let{agentNames,sessions:sessions2,executors}=input,sessionByName=new Map;for(let s2 of sessions2)if(s2.name!=="genie-tui")sessionByName.set(s2.name,s2);let executorByPaneId=new Map;for(let exec3 of executors)if(exec3.tmuxPaneId)executorByPaneId.set(exec3.tmuxPaneId,exec3);let executorsByAgent=new Map;for(let exec3 of executors){let name=exec3.agentName??exec3.metadata?.agentName;if(typeof name==="string"){let list2=executorsByAgent.get(name)??[];list2.push(exec3),executorsByAgent.set(name,list2)}}let{topLevel,subsByParent}=groupAgentNames(agentNames),nodes=topLevel.map((name)=>{let node=buildAgentNode(name,sessionByName.get(toSessionName(name)),executorsByAgent.get(name)??[],executorByPaneId);return appendSubAgentNodes(node,subsByParent.get(name),sessionByName,executorsByAgent,executorByPaneId),node}),claimedSessions=new Set(agentNames.map(toSessionName));for(let[name,session]of sessionByName)if(!claimedSessions.has(name))nodes.push(sessionToNode(session,executorByPaneId));return nodes}function resolvePreferredWindowIndex(session,agentName){let windows=[...session.windows].sort((a,b3)=>a.index-b3.index),hasClaudePane=(window2)=>window2.panes.some((pane)=>!pane.isDead&&(pane.command==="claude"||pane.title.includes("claude")));return(windows.find((window2)=>window2.active&&hasClaudePane(window2))??(agentName?windows.find((window2)=>window2.name===agentName):void 0)??windows.find((window2)=>hasClaudePane(window2))??windows.find((window2)=>window2.active&&window2.index!==0)??windows.find((window2)=>window2.index!==0))?.index}function hasLiveClaudeWindow(session){return session.windows.some((window2)=>window2.panes.some((pane)=>!pane.isDead&&(pane.command==="claude"||pane.title.includes("claude"))))}function groupAgentNames(names){let topLevel=[],subsByParent=new Map;for(let name of names){let slashIdx=name.indexOf("/");if(slashIdx===-1)topLevel.push(name);else{let parent=name.slice(0,slashIdx),subs=subsByParent.get(parent)??[];subs.push(name),subsByParent.set(parent,subs)}}return{topLevel,subsByParent}}function appendSubAgentNodes(parent,subs,sessionByName,executorsByAgent,executorByPaneId){if(!subs)return;for(let subName of subs){let subLabel=subName.slice(subName.indexOf("/")+1),subNode=buildAgentNode(subName,sessionByName.get(toSessionName(subName)),executorsByAgent.get(subName)??[],executorByPaneId);subNode.label=subLabel,subNode.depth=1,parent.children.push(subNode)}}function countClaudePanes(session){return session.windows.reduce((sum,w2)=>sum+w2.panes.filter((p)=>p.command==="claude"||p.title.includes("claude")).length,0)}function buildAgentNode(name,session,agentExecutors,executorByPaneId){let wsState=deriveWsAgentState(session,agentExecutors),attachWindowIndex=session?resolvePreferredWindowIndex(session,name):void 0,children=[];if(session)for(let win of session.windows){if(win.index===0)continue;children.push(windowToNode(session.name,win,executorByPaneId))}return{id:`agent:${name}`,type:"agent",label:name,depth:0,expanded:children.length>0,children,data:{sessionName:toSessionName(name),windowCount:session?session.windows.length:0,attachWindowIndex,provider:agentExecutors[0]?.provider??null},activePanes:session?countClaudePanes(session):0,agentState:agentExecutors.length>0?deriveExecutorState(agentExecutors):void 0,wsAgentState:wsState}}function deriveWsAgentState(session,agentExecutors){if(!session)return"stopped";if(hasLiveClaudeWindow(session))return"running";for(let exec3 of agentExecutors){if(exec3.state==="error"||exec3.state==="terminated")return"error";if(exec3.state==="spawning")return"spawning"}if(agentExecutors.length===0)return"stopped";return"running"}function deriveExecutorState(execs){for(let e of execs)if(e.state==="working")return"working";for(let e of execs)if(e.state==="permission")return"permission";for(let e of execs)if(e.state==="error"||e.state==="terminated")return"error";return"idle"}function sessionToNode(session,executorMap){let claudePanes=session.windows.reduce((sum,w2)=>sum+w2.panes.filter((p)=>p.command==="claude"||p.title.includes("claude")).length,0);return{id:`session:${session.name}`,type:"session",label:session.name,depth:0,expanded:!0,children:session.windows.map((w2)=>windowToNode(session.name,w2,executorMap)),data:{attached:session.attached,windowCount:session.windowCount},activePanes:claudePanes,agentState:void 0,wsAgentState:void 0}}function windowToNode(sessionName,window2,executorMap){let activePanes=window2.panes.filter((p)=>!p.isDead&&(p.command==="claude"||p.title.includes("claude"))).length;return{id:`window:${sessionName}:${window2.index}`,type:"window",label:window2.name,depth:1,expanded:!0,children:window2.panes.map((p)=>paneToNode(sessionName,window2.index,p,executorMap)),data:{active:window2.active,paneCount:window2.paneCount},activePanes,agentState:void 0,wsAgentState:void 0}}function paneToNode(sessionName,windowIndex,pane,executorMap){let executor=executorMap.get(pane.paneId),isClaude=pane.command==="claude"||pane.title.includes("claude");return{id:`pane:${pane.paneId}`,type:"pane",label:derivePaneLabel(pane,executor,isClaude),depth:2,expanded:!1,children:[],data:{command:pane.command,isDead:pane.isDead,pid:pane.pid,size:pane.size,paneId:pane.paneId,sessionName,windowIndex},activePanes:0,agentState:derivePaneState(pane,executor),wsAgentState:void 0}}function derivePaneLabel(pane,executor,isClaude){if(executor?.agentName&&executor?.team)return`${executor.team}/${executor.agentName}`;if(executor?.agentName)return executor.agentName;if(pane.title&&pane.title!==pane.command&&!isDefaultPaneTitle(pane.title))return pane.title;if(isClaude)return"claude";return pane.command}function isDefaultPaneTitle(title){let hostname=__require("os").hostname();return title===hostname||title.startsWith(`${hostname}.`)||title.startsWith("\u2733")}function derivePaneState(pane,executor){if(pane.isDead)return"error";if(!executor)return;let s2=executor.state;if(s2==="working")return"working";if(s2==="idle"||s2==="spawning")return"idle";if(s2==="permission")return"permission";if(s2==="error"||s2==="terminated")return"error";return}function getSessionTarget(node){if(node.type==="agent"){let sessionName=node.data.sessionName,attachWindowIndex=node.data.attachWindowIndex;if(typeof attachWindowIndex==="number")return{sessionName,windowIndex:attachWindowIndex};let firstWindowChild=node.children.find((child)=>child.type==="window");if(firstWindowChild){let parts=firstWindowChild.id.split(":");return{sessionName,windowIndex:Number(parts[2])}}return{sessionName}}if(node.type==="session")return{sessionName:node.label};if(node.type==="window"){let parts=node.id.split(":");return{sessionName:parts[1],windowIndex:Number(parts[2])}}if(node.type==="pane"){let data=node.data;return{sessionName:data.sessionName,windowIndex:data.windowIndex}}return null}var palette,icons;var init_theme2=__esm(()=>{palette={purple:"#a855f7",violet:"#7c3aed",cyan:"#22d3ee",emerald:"#34d399",bg:"#1a1028",bgLight:"#241838",bgLighter:"#2e2048",text:"#e2e8f0",textDim:"#94a3b8",textMuted:"#64748b",border:"#414868",borderActive:"#7c3aed",scrollTrack:"#414868",scrollThumb:"#7aa2f7",active:"#22d3ee",success:"#34d399",warning:"#fbbf24",error:"#f87171",idle:"#94a3b8"},icons={org:"\u25C6",project:"\u25B8",projectOpen:"\u25BE",board:"\u2261",boardOpen:"\u2261",column:"\u2502",task:"\u25CB",taskActive:"\u25CF",taskDone:"\u2713",agent:"\u25B6",collapsed:"\u25B8",expanded:"\u25BE"}});function flattenTree(nodes){let result2=[];function walk(node,depth){if(result2.push({node,depth,visible:!0}),node.expanded)for(let child of node.children)walk(child,depth+1)}for(let node of nodes)walk(node,0);return result2}function toggleNode(nodes,id){return nodes.map((node)=>{if(node.id===id)return{...node,expanded:!node.expanded};return{...node,children:toggleNode(node.children,id)}})}var import_jsx_dev_runtime2;var init_jsx_dev_runtime=__esm(()=>{import_jsx_dev_runtime2=__toESM(require_react_jsx_dev_runtime_development(),1)});function CliPreviewLine({intent,hint=DEFAULT_HINT}){let cli=null,errorMessage=null;try{cli=buildSpawnInvocation(intent).cli}catch(err){errorMessage=err instanceof Error?err.message:String(err)}if(errorMessage!==null)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:hint},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.cyan,children:"\u25B6 "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:cli},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:hint},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var DEFAULT_HINT="Enter to run \xB7 Esc to cancel";var init_CliPreviewLine=__esm(()=>{init_spawn_invocation();init_theme2();init_jsx_dev_runtime()});async function defaultLoadAgents(){let{spawn:spawn5}=await import("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],[command,args]=genieBin&&genieBin!=="genie"?[bunPath,[genieBin,"dir","ls","--json"]]:["genie",["dir","ls","--json"]],stdout=await new Promise((resolve14,reject)=>{let child=spawn5(command,args,{stdio:["ignore","pipe","ignore"]}),chunks=[];child.stdout.on("data",(c)=>chunks.push(c)),child.on("error",reject),child.on("close",()=>resolve14(Buffer.concat(chunks).toString("utf-8")))});return JSON.parse(stdout).map((e)=>typeof e?.name==="string"?{name:e.name}:null).filter((e)=>e!==null)}function buildIntent(agentName,target){let intent={kind:"spawn-agent",name:agentName,session:target.session};if(target.window!==void 0&&target.window.length>0)intent.window=target.window;else intent.newWindow=!0;return intent}function applyFilter2(agents,filter){if(filter.length===0)return agents;let needle=filter.toLowerCase();return agents.filter((a)=>a.name.toLowerCase().includes(needle))}function handleControlKey(key,deps){if(key.name==="escape")return deps.onCancel(),!0;if(key.name==="up"&&deps.filteredLength>0)return deps.setSelectedIndex((prev)=>prev<=0?deps.filteredLength-1:prev-1),!0;if(key.name==="down"&&deps.filteredLength>0)return deps.setSelectedIndex((prev)=>prev>=deps.filteredLength-1?0:prev+1),!0;if((key.name==="return"||key.name==="enter")&&deps.highlighted)return deps.onConfirm(buildIntent(deps.highlighted.name,deps.target)),!0;if(key.name==="backspace")return deps.setFilter((prev)=>prev.slice(0,-1)),!0;if(key.name==="up"||key.name==="down"||key.name==="return"||key.name==="enter")return!0;return!1}function appendCharIfPrintable(key,setFilter){let ch=key.sequence??key.name;if(typeof ch==="string"&&ch.length===1&&ch>=" "&&ch!=="\x7F")setFilter((prev)=>prev+ch)}function AgentPicker({target,onConfirm,onCancel,loadAgents=defaultLoadAgents}){let[agents,setAgents]=import_react14.useState(null),[loadError,setLoadError]=import_react14.useState(null),[filter,setFilter]=import_react14.useState(""),[selectedIndex,setSelectedIndex]=import_react14.useState(0);import_react14.useEffect(()=>{let active=!0;return loadAgents().then((list2)=>{if(!active)return;setAgents(list2)}).catch((err)=>{if(!active)return;setLoadError(err instanceof Error?err.message:String(err)),setAgents([])}),()=>{active=!1}},[loadAgents]);let filtered=import_react14.useMemo(()=>agents?applyFilter2(agents,filter):[],[agents,filter]);import_react14.useEffect(()=>{if(filtered.length===0){if(selectedIndex!==0)setSelectedIndex(0);return}if(selectedIndex>=filtered.length)setSelectedIndex(filtered.length-1)},[filtered.length,selectedIndex]);let highlighted=filtered[selectedIndex],previewIntent=highlighted?buildIntent(highlighted.name,target):null,handleKey=import_react14.useCallback((key)=>{if(handleControlKey(key,{onCancel,onConfirm,target,highlighted,filteredLength:filtered.length,setSelectedIndex,setFilter}))return;if(key.ctrl||key.meta)return;appendCharIfPrintable(key,setFilter)},[filtered.length,highlighted,onCancel,onConfirm,target]);useKeyboard(handleKey);let targetLabel=target.window?target.window:target.session,modeHint=target.window?"in window":"new window in session",statusText=agents===null?"Loading agents\u2026":loadError!==null?`Load failed: ${loadError}`:null;return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,width:80,flexDirection:"column",paddingX:1,paddingY:1,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"Spawn here"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` \u2014 ${modeHint} `},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:targetLabel},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Filter: "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:filter.length>0?filter:" "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:filter.length>0?"":"(type to narrow)"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),statusText!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:loadError!==null?palette.error:palette.textDim,children:statusText},void 0,!1,void 0,this)},void 0,!1,void 0,this):filtered.length===0?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:filtered.map((agent,i2)=>import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.violet:palette.textDim,children:i2===selectedIndex?"\u25B8 ":" "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.text:palette.textDim,children:agent.name},void 0,!1,void 0,this)]},agent.name,!0,void 0,this))},void 0,!1,void 0,this),previewIntent!==null?import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent:previewIntent},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var import_react14;var init_AgentPicker=__esm(async()=>{init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react14=__toESM(require_react_development(),1)});function ContextMenu({items,onAction,onClose,positionY=0}){let[selectedIndex,setSelectedIndex]=import_react16.useState(0),[inputMode,setInputMode]=import_react16.useState(!1),inputRef=import_react16.useRef(""),selectOptions=items.map((item)=>({name:`${item.label}${item.shortcut?` ${item.shortcut}`:""}`,description:"",value:item.action}));useKeyboard(import_react16.useCallback((key)=>{if(inputMode)return;if(key.name==="escape"){onClose();return}for(let item of items)if(item.shortcut&&key.name===item.shortcut.toLowerCase()){if(item.needsInput)setInputMode(!0),inputRef.current="",setSelectedIndex(items.indexOf(item));else onAction(item.action);return}},[inputMode,items,onAction,onClose]));let handleSelect=import_react16.useCallback((_index,option)=>{let value=option?.value;if(!value)return;if(items.find((i2)=>i2.action===value)?.needsInput){setInputMode(!0),inputRef.current="";return}onAction(value)},[items,onAction]),handleInputChange=import_react16.useCallback((v2)=>{inputRef.current=v2},[]),handleInputSubmit=import_react16.useCallback(()=>{let item=items[selectedIndex],value=inputRef.current.trim();if(item&&value)onAction(item.action,value);setInputMode(!1),inputRef.current=""},[items,selectedIndex,onAction]);if(items.length===0)return onClose(),null;return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",onMouseDown:()=>onClose(),children:[positionY>0?import_jsx_dev_runtime2.jsxDEV("box",{height:positionY},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,width:32,height:inputMode?items.length+5:items.length+2,flexDirection:"column",onMouseDown:(e)=>e.stopPropagation?.(),children:[import_jsx_dev_runtime2.jsxDEV("select",{options:selectOptions,selectedIndex,onSelect:handleSelect,onChange:(index)=>setSelectedIndex(index),focused:!inputMode,height:items.length,showDescription:!1,selectedBackgroundColor:palette.violet,selectedTextColor:"#ffffff"},void 0,!1,void 0,this),inputMode?import_jsx_dev_runtime2.jsxDEV("box",{paddingX:1,height:3,flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[items[selectedIndex]?.label??"Input",":"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{onChange:handleInputChange,onSubmit:handleInputSubmit,placeholder:"Type and press Enter...",focused:!0,width:28,backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this)]},void 0,!0,void 0,this):null]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var import_react16;var init_ContextMenu=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react();import_react16=__toESM(require_react_development(),1)});function buildRows(sessions2){let rows=[];for(let session of sessions2){if(session.name===TUI_SESSION2)continue;rows.push({kind:"session",sessionName:session.name,label:`${session.name} (new window)`});for(let win of session.windows){let windowLabel=win.name?` ${win.name}`:"";rows.push({kind:"window",sessionName:session.name,windowIndex:win.index,label:` ${session.name}:${win.index}${windowLabel}`})}}return rows}function pickFromRow(row){if(row.kind==="session")return{kind:"session",sessionName:row.sessionName};return{kind:"window",sessionName:row.sessionName,windowIndex:row.windowIndex}}function picksEqual(a,b3){if(a.kind==="session"&&b3.kind==="session")return a.sessionName===b3.sessionName;if(a.kind==="window"&&b3.kind==="window")return a.sessionName===b3.sessionName&&a.windowIndex===b3.windowIndex;return!1}function pickExists(pick,sessions2){let session=sessions2.find((s2)=>s2.name===pick.sessionName);if(!session)return!1;if(pick.kind==="session")return!0;return session.windows.some((w2)=>w2.index===pick.windowIndex)}function pickToIntent(agentName,pick){if(!pick)return{kind:"spawn-agent",name:agentName};if(pick.kind==="session")return{kind:"spawn-agent",name:agentName,session:pick.sessionName,newWindow:!0};return{kind:"spawn-agent",name:agentName,window:`${pick.sessionName}:${pick.windowIndex}`}}function pickLabel(pick){if(pick.kind==="session")return pick.sessionName;return`${pick.sessionName}:${pick.windowIndex}`}function SpawnTargetPicker({agentName,sessions:sessions2,onConfirm,onCancel}){let rows=import_react18.useMemo(()=>buildRows(sessions2),[sessions2]),[pick,setPick]=import_react18.useState(()=>rows[0]?pickFromRow(rows[0]):null),[staleError,setStaleError]=import_react18.useState(null);if(pick===null&&rows[0])setPick(pickFromRow(rows[0]));let selectedIndex=import_react18.useMemo(()=>{if(!pick)return-1;return rows.findIndex((r)=>picksEqual(pick,r))},[pick,rows]),movePick=import_react18.useCallback((delta)=>{if(rows.length===0)return;let next=((selectedIndex<0?0:selectedIndex)+delta+rows.length)%rows.length;setPick(pickFromRow(rows[next])),setStaleError(null)},[rows,selectedIndex]),handleEnter=import_react18.useCallback(()=>{if(!pick)return;if(!pickExists(pick,sessions2)){setStaleError(`Target "${pickLabel(pick)}" no longer exists \u2014 pick another.`);return}onConfirm(pickToIntent(agentName,pick))},[pick,sessions2,agentName,onConfirm]);useKeyboard(import_react18.useCallback((key)=>{let n=key.name;if(n==="escape"){onCancel();return}if(n==="enter"||n==="return"){handleEnter();return}if(n==="up"||n==="k")movePick(-1);else if(n==="down"||n==="j")movePick(1)},[onCancel,handleEnter,movePick]));let intent=import_react18.useMemo(()=>pickToIntent(agentName,pick),[agentName,pick]);return import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderStyle:"rounded",borderColor:palette.violet,backgroundColor:palette.bgLight,paddingX:2,paddingY:1,flexDirection:"column",width:60,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:`Spawn "${agentName}" into\u2026`},void 0,!1,void 0,this)},void 0,!1,void 0,this),rows.length===0?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No tmux sessions available. Press Esc to cancel."},void 0,!1,void 0,this)},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:rows.map((row,i2)=>import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:i2===selectedIndex?palette.cyan:palette.text,children:[i2===selectedIndex?"> ":" ",row.label]},void 0,!0,void 0,this)},`${row.kind}:${row.sessionName}:${row.kind==="window"?row.windowIndex:""}`,!1,void 0,this))},void 0,!1,void 0,this),staleError?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${staleError}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var import_react18,TUI_SESSION2="genie-tui";var init_SpawnTargetPicker=__esm(async()=>{init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react18=__toESM(require_react_development(),1)});var require_package=__commonJS((exports,module2)=>{module2.exports={name:"systeminformation",version:"5.31.5",description:"Advanced, lightweight system and OS information library",license:"MIT",author:"Sebastian Hildebrandt <hildebrandt@plus-innovations.com> (https://plus-innovations.com)",homepage:"https://systeminformation.io",main:"./lib/index.js",type:"commonjs",bin:{systeminformation:"lib/cli.js"},types:"./lib/index.d.ts",scripts:{test:"node ./test/test.js",testDeno:"deno run -A ./test/test.js"},files:["lib/"],keywords:["system information","sysinfo","monitor","monitoring","os","linux","osx","windows","freebsd","openbsd","netbsd","cpu","cpuload","physical cores","logical cores","processor","cores","threads","socket type","memory","file system","fsstats","diskio","block devices","netstats","network","network interfaces","network connections","network stats","iface","printer","processes","users","internet","battery","docker","docker stats","docker processes","graphics","graphic card","graphic controller","gpu","display","smart","disk layout","usb","audio","bluetooth","wifi","wifinetworks","virtual box","virtualbox","vm","backend","hardware","BIOS","chassis"],repository:{type:"git",url:"git+https://github.com/sebhildebrandt/systeminformation.git"},funding:{type:"Buy me a coffee",url:"https://www.buymeacoffee.com/systeminfo"},os:["darwin","linux","win32","freebsd","openbsd","netbsd","sunos","android"],engines:{node:">=8.0.0"}}});var require_util3=__commonJS((exports)=>{var os4=__require("os"),fs3=__require("fs"),path6=__require("path"),spawn5=__require("child_process").spawn,exec3=__require("child_process").exec,execSync17=__require("child_process").execSync,util4=__require("util"),_platform=process.platform,_linux=_platform==="linux"||_platform==="android",_darwin=_platform==="darwin",_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_cores=0,codepage="",_smartMonToolsInstalled=null,_rpi_cpuinfo=null,WINDIR=process.env.WINDIR||"C:\\Windows",_psChild,_psResult="",_psCmds=[],_psPersistent=!1,_powerShell="",_psToUTF8="$OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8 ; ",_psCmdStart="--###START###--",_psError="--ERROR--",_psCmdSeperator="--###ENDCMD###--",_psIdSeperator="--##ID##--",execOptsWin={windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})},execOptsLinux={maxBuffer:104857600,encoding:"UTF-8",stdio:["pipe","pipe","ignore"]};function toInt(value){let result2=parseInt(value,10);if(isNaN(result2))result2=0;return result2}function splitByNumber(str5){let numberStarted=!1,num="",cpart="";for(let c of str5)if(c>="0"&&c<="9"||numberStarted)numberStarted=!0,num+=c;else cpart+=c;return[cpart,num]}var stringObj=new String,stringReplace=new String().replace,stringToLower=new String().toLowerCase,stringToString=new String().toString,stringSubstr=new String().substr,stringSubstring=new String().substring,stringTrim=new String().trim,stringStartWith=new String().startsWith,mathMin=Math.min;function isFunction(functionToCheck){return functionToCheck&&{}.toString.call(functionToCheck)==="[object Function]"}function unique(obj){let uniques=[],stringify2={};for(let i2=0;i2<obj.length;i2++){let keys=Object.keys(obj[i2]);keys.sort((a,b3)=>{return a-b3});let str5="";for(let j2=0;j2<keys.length;j2++)str5+=JSON.stringify(keys[j2]),str5+=JSON.stringify(obj[i2][keys[j2]]);if(!{}.hasOwnProperty.call(stringify2,str5))uniques.push(obj[i2]),stringify2[str5]=!0}return uniques}function sortByKey(array,keys){return array.sort((a,b3)=>{let x2="",y2="";return keys.forEach((key)=>{x2=x2+a[key],y2=y2+b3[key]}),x2<y2?-1:x2>y2?1:0})}function cores(){if(_cores===0)_cores=os4.cpus().length;return _cores}function getValue(lines,property,separator,trimmed,lineMatch){separator=separator||":",property=property.toLowerCase(),trimmed=trimmed||!1,lineMatch=lineMatch||!1;let result2="";return lines.some((line)=>{let lineLower=line.toLowerCase().replace(/\t/g,"");if(trimmed)lineLower=lineLower.trim();if(lineLower.startsWith(property)&&(lineMatch?lineLower.match(property+separator)||lineLower.match(property+" "+separator):!0)){let parts=trimmed?line.trim().split(separator):line.split(separator);if(parts.length>=2)return parts.shift(),result2=parts.join(separator).trim(),!0}return!1}),result2}function decodeEscapeSequence(str5,base){return base=base||16,str5.replace(/\\x([0-9A-Fa-f]{2})/g,function(){return String.fromCharCode(parseInt(arguments[1],base))})}function detectSplit(str5){let seperator="",part=0;return str5.split("").forEach((element)=>{if(element>="0"&&element<="9"){if(part===1)part++}else{if(part===0)part++;if(part===1)seperator+=element}}),seperator}function parseTime(t2,pmDesignator){pmDesignator=pmDesignator||"",t2=t2.toUpperCase();let hour=0,min=0,splitter=detectSplit(t2),parts=t2.split(splitter);if(parts.length>=2){if(parts[2])parts[1]+=parts[2];let isPM=parts[1]&&parts[1].toLowerCase().indexOf("pm")>-1||parts[1].toLowerCase().indexOf("p.m.")>-1||parts[1].toLowerCase().indexOf("p. m.")>-1||parts[1].toLowerCase().indexOf("n")>-1||parts[1].toLowerCase().indexOf("ch")>-1||parts[1].toLowerCase().indexOf("\xF6s")>-1||pmDesignator&&parts[1].toLowerCase().indexOf(pmDesignator)>-1;return hour=parseInt(parts[0],10),min=parseInt(parts[1],10),hour=isPM&&hour<12?hour+12:hour,("0"+hour).substr(-2)+":"+("0"+min).substr(-2)}}function parseDateTime(dt,culture){let result2={date:"",time:""};culture=culture||{};let dateFormat=(culture.dateFormat||"").toLowerCase(),pmDesignator=culture.pmDesignator||"",parts=dt.split(" ");if(parts[0]){if(parts[0].indexOf("/")>=0){let dtparts=parts[0].split("/");if(dtparts.length===3)if(dtparts[0].length===4)result2.date=dtparts[0]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[2]).substr(-2);else if(dtparts[2].length===2)if(dateFormat.indexOf("/d/")>-1||dateFormat.indexOf("/dd/")>-1)result2.date="20"+dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2);else result2.date="20"+dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2);else if((dt.toLowerCase().indexOf("pm")>-1||dt.toLowerCase().indexOf("p.m.")>-1||dt.toLowerCase().indexOf("p. m.")>-1||dt.toLowerCase().indexOf("am")>-1||dt.toLowerCase().indexOf("a.m.")>-1||dt.toLowerCase().indexOf("a. m.")>-1||dateFormat.indexOf("/d/")>-1||dateFormat.indexOf("/dd/")>-1)&&dateFormat.indexOf("dd/")!==0)result2.date=dtparts[2]+"-"+("0"+dtparts[0]).substr(-2)+"-"+("0"+dtparts[1]).substr(-2);else result2.date=dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2)}if(parts[0].indexOf(".")>=0){let dtparts=parts[0].split(".");if(dtparts.length===3)if(dateFormat.indexOf(".d.")>-1||dateFormat.indexOf(".dd.")>-1)result2.date=dtparts[2]+"-"+("0"+dtparts[0]).substr(-2)+"-"+("0"+dtparts[1]).substr(-2);else result2.date=dtparts[2]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[0]).substr(-2)}if(parts[0].indexOf("-")>=0){let dtparts=parts[0].split("-");if(dtparts.length===3)result2.date=dtparts[0]+"-"+("0"+dtparts[1]).substr(-2)+"-"+("0"+dtparts[2]).substr(-2)}}if(parts[1]){parts.shift();let time=parts.join(" ");result2.time=parseTime(time,pmDesignator)}return result2}function parseHead(head,rights){let space=rights>0,count=1,from=0,to=0,result2=[];for(let i2=0;i2<head.length;i2++)if(count<=rights){if(/\s/.test(head[i2])&&!space)to=i2-1,result2.push({from,to:to+1,cap:head.substring(from,to+1)}),from=to+2,count++;space=head[i2]===" "}else{if(!/\s/.test(head[i2])&&space){if(to=i2-1,from<to)result2.push({from,to,cap:head.substring(from,to)});from=to+1,count++}space=head[i2]===" "}to=5000,result2.push({from,to,cap:head.substring(from,to)});let len=result2.length;for(let i2=0;i2<len;i2++)if(result2[i2].cap.replace(/\s/g,"").length===0){if(i2+1<len)result2[i2].to=result2[i2+1].to,result2[i2].cap=result2[i2].cap+result2[i2+1].cap,result2.splice(i2+1,1),len=len-1}return result2}function findObjectByKey(array,key,value){for(let i2=0;i2<array.length;i2++)if(array[i2][key]===value)return i2;return-1}function getPowershell(){if(_powerShell="powershell.exe",_windows){let defaultPath=`${WINDIR}\\system32\\WindowsPowerShell\\v1.0\\powershell.exe`;if(fs3.existsSync(defaultPath))_powerShell=defaultPath}}function getVboxmanage(){return _windows?`"${process.env.VBOX_INSTALL_PATH||process.env.VBOX_MSI_INSTALL_PATH}\\VBoxManage.exe"`:"vboxmanage"}function powerShellProceedResults(data){let id="",parts,res="";if(data.indexOf(_psCmdStart)>=0){parts=data.split(_psCmdStart);let parts2=parts[1].split(_psIdSeperator);if(id=parts2[0],parts2.length>1)data=parts2.slice(1).join(_psIdSeperator)}if(data.indexOf(_psCmdSeperator)>=0)parts=data.split(_psCmdSeperator),res=parts[0];let remove=-1;for(let i2=0;i2<_psCmds.length;i2++)if(_psCmds[i2].id===id)remove=i2,_psCmds[i2].callback(res);if(remove>=0)_psCmds.splice(remove,1)}function powerShellStart(){if(!_psChild){if(_psChild=spawn5(_powerShell,["-NoProfile","-NoLogo","-InputFormat","Text","-NoExit","-Command","-"],{stdio:"pipe",windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})}),_psChild&&_psChild.pid)_psPersistent=!0,_psChild.stdout.on("data",(data)=>{if(_psResult=_psResult+data.toString("utf8"),data.indexOf(_psCmdSeperator)>=0)powerShellProceedResults(_psResult),_psResult=""}),_psChild.stderr.on("data",()=>{powerShellProceedResults(_psResult+_psError)}),_psChild.on("error",()=>{powerShellProceedResults(_psResult+_psError)}),_psChild.on("close",()=>{if(_psChild)_psChild.kill()})}}function powerShellRelease(){try{if(_psChild)_psChild.stdin.write("exit"+os4.EOL),_psChild.stdin.end()}catch{if(_psChild)_psChild.kill()}_psPersistent=!1,_psChild=null}function powerShell(cmd){if(_psPersistent){let id=Math.random().toString(36).substring(2,12);return new Promise((resolve14)=>{process.nextTick(()=>{function callback(data){resolve14(data)}_psCmds.push({id,cmd,callback,start:new Date});try{if(_psChild&&_psChild.pid)_psChild.stdin.write(_psToUTF8+"echo "+_psCmdStart+id+_psIdSeperator+"; "+os4.EOL+cmd+os4.EOL+"echo "+_psCmdSeperator+os4.EOL)}catch{resolve14("")}})})}else{let result2="";return new Promise((resolve14)=>{process.nextTick(()=>{try{let osVersion=os4.release().split(".").map(Number),spanOptions=osVersion[0]<10?["-NoProfile","-NoLogo","-InputFormat","Text","-NoExit","-ExecutionPolicy","Unrestricted","-Command","-"]:["-NoProfile","-NoLogo","-InputFormat","Text","-ExecutionPolicy","Unrestricted","-Command",_psToUTF8+cmd],child=spawn5(_powerShell,spanOptions,{stdio:"pipe",windowsHide:!0,maxBuffer:104857600,encoding:"UTF-8",env:Object.assign({},process.env,{LANG:"en_US.UTF-8"})});if(child&&!child.pid)child.on("error",()=>{resolve14(result2)});if(child&&child.pid){if(child.stdout.on("data",(data)=>{result2=result2+data.toString("utf8")}),child.stderr.on("data",()=>{child.kill(),resolve14(result2)}),child.on("close",()=>{child.kill(),resolve14(result2)}),child.on("error",()=>{child.kill(),resolve14(result2)}),osVersion[0]<10)try{child.stdin.write(_psToUTF8+cmd+os4.EOL),child.stdin.write("exit"+os4.EOL),child.stdin.end()}catch{child.kill(),resolve14(result2)}}else resolve14(result2)}catch{resolve14(result2)}})})}}function execSafe(cmd,args,options){let result2="";return options=options||{},new Promise((resolve14)=>{process.nextTick(()=>{try{let child=spawn5(cmd,args,options);if(child&&!child.pid)child.on("error",()=>{resolve14(result2)});if(child&&child.pid)child.stdout.on("data",(data)=>{result2+=data.toString()}),child.on("close",()=>{child.kill(),resolve14(result2)}),child.on("error",()=>{child.kill(),resolve14(result2)});else resolve14(result2)}catch{resolve14(result2)}})})}function getCodepage(){if(_windows){if(!codepage)try{let parts=execSync17("chcp",execOptsWin).toString().split(`\r
|
|
2765
2800
|
`)[0].split(":");codepage=parts.length>1?parts[1].replace(".","").trim():""}catch{codepage="437"}return codepage}if(_linux||_darwin||_freebsd||_openbsd||_netbsd){if(!codepage)try{let parts=execSync17("echo $LANG",execOptsLinux).toString().split(`\r
|
|
2766
2801
|
`)[0].split(".");if(codepage=parts.length>1?parts[1].trim():"",!codepage)codepage="UTF-8"}catch{codepage="UTF-8"}return codepage}}function smartMonToolsInstalled(){if(_smartMonToolsInstalled!==null)return _smartMonToolsInstalled;if(_smartMonToolsInstalled=!1,_windows)try{let pathArray=execSync17("WHERE smartctl 2>nul",execOptsWin).toString().split(`\r
|
|
2767
2802
|
`);if(pathArray&&pathArray.length)_smartMonToolsInstalled=pathArray[0].indexOf(":\\")>=0;else _smartMonToolsInstalled=!1}catch{_smartMonToolsInstalled=!1}if(_linux||_darwin||_freebsd||_openbsd||_netbsd)try{_smartMonToolsInstalled=execSync17("which smartctl 2>/dev/null",execOptsLinux).toString().split(`\r
|
|
2768
2803
|
`).length>0}catch{util4.noop()}return _smartMonToolsInstalled}function isRaspberry(cpuinfo){let PI_MODEL_NO=["BCM2708","BCM2709","BCM2710","BCM2711","BCM2712","BCM2835","BCM2836","BCM2837","BCM2837B0"];if(_rpi_cpuinfo!==null)cpuinfo=_rpi_cpuinfo;else if(cpuinfo===void 0)try{cpuinfo=fs3.readFileSync("/proc/cpuinfo",{encoding:"utf8"}).toString().split(`
|
|
2769
2804
|
`),_rpi_cpuinfo=cpuinfo}catch{return!1}let hardware=getValue(cpuinfo,"hardware"),model=getValue(cpuinfo,"model");return hardware&&PI_MODEL_NO.indexOf(hardware)>-1||model&&model.indexOf("Raspberry Pi")>-1}function isRaspbian(){let osrelease=[];try{osrelease=fs3.readFileSync("/etc/os-release",{encoding:"utf8"}).toString().split(`
|
|
2770
2805
|
`)}catch{return!1}let id=getValue(osrelease,"id","=");return id&&id.indexOf("raspbian")>-1}function execWin(cmd,opts,callback){if(!callback)callback=opts,opts=execOptsWin;let newCmd="chcp 65001 > nul && cmd /C "+cmd+" && chcp "+codepage+" > nul";exec3(newCmd,opts,(error2,stdout)=>{callback(error2,stdout)})}function darwinXcodeExists(){let cmdLineToolsExists=fs3.existsSync("/Library/Developer/CommandLineTools/usr/bin/"),xcodeAppExists=fs3.existsSync("/Applications/Xcode.app/Contents/Developer/Tools"),xcodeExists=fs3.existsSync("/Library/Developer/Xcode/");return cmdLineToolsExists||xcodeExists||xcodeAppExists}function nanoSeconds(){let time=process.hrtime();if(!Array.isArray(time)||time.length!==2)return 0;return+time[0]*1e9+ +time[1]}function countUniqueLines(lines,startingWith){startingWith=startingWith||"";let uniqueLines=[];return lines.forEach((line)=>{if(line.startsWith(startingWith)){if(uniqueLines.indexOf(line)===-1)uniqueLines.push(line)}}),uniqueLines.length}function countLines(lines,startingWith){startingWith=startingWith||"";let uniqueLines=[];return lines.forEach((line)=>{if(line.startsWith(startingWith))uniqueLines.push(line)}),uniqueLines.length}function sanitizeShellString(str5,strict){if(typeof strict>"u")strict=!1;let s2=str5||"",result2="",l=mathMin(s2.length,2000);for(let i2=0;i2<=l;i2++)if(!(s2[i2]===void 0||s2[i2]===">"||s2[i2]==="<"||s2[i2]==="*"||s2[i2]==="?"||s2[i2]==="["||s2[i2]==="]"||s2[i2]==="|"||s2[i2]==="\u02DA"||s2[i2]==="$"||s2[i2]===";"||s2[i2]==="&"||s2[i2]==="]"||s2[i2]==="#"||s2[i2]==="\\"||s2[i2]==="\t"||s2[i2]===`
|
|
2771
|
-
`||s2[i2]==="\r"||s2[i2]==="'"||s2[i2]==="`"||s2[i2]==='"'||s2[i2].length>1||strict&&s2[i2]==="("||strict&&s2[i2]===")"||strict&&s2[i2]==="@"||strict&&s2[i2]===" "||strict&&s2[i2]==="{"||strict&&s2[i2]===";"||strict&&s2[i2]==="}"))result2=result2+s2[i2];return result2}function isPrototypePolluted(){let notPolluted=!0,st="";try{st.__proto__.replace=stringReplace,st.__proto__.toLowerCase=stringToLower,st.__proto__.toString=stringToString,st.__proto__.substr=stringSubstr,st.__proto__.substring=stringSubstring,st.__proto__.trim=stringTrim,st.__proto__.startsWith=stringStartWith}catch(e){Object.setPrototypeOf(st,stringObj)}notPolluted=notPolluted||!1;let ms=Date.now();if(typeof ms==="number"&&ms>1600000000000){let l=ms%100+15;for(let i2=0;i2<l;i2++){let r=Math.random()*61.99999999+1,rs=parseInt(Math.floor(r).toString(),10),rs2=parseInt(r.toString().split(".")[0],10),q2=Math.random()*61.99999999+1,qs=parseInt(Math.floor(q2).toString(),10),qs2=parseInt(q2.toString().split(".")[0],10);notPolluted=notPolluted&&r!==q2,notPolluted=notPolluted&&rs===rs2&&qs===qs2,st+="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[rs-1]}notPolluted=notPolluted&&st.length===l;let p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+" "+st.substr(p,2000);try{stm.__proto__.replace=stringReplace}catch(e){Object.setPrototypeOf(stm,stringObj)}let sto=stm.replace(/ /g,"");notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"{"+st.substr(p,2000),sto=stm.replace(/{/g,""),notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"*"+st.substr(p,2000),sto=stm.replace(/\*/g,""),notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"$"+st.substr(p,2000),sto=stm.replace(/\$/g,""),notPolluted=notPolluted&&st===sto;let stl=st.toLowerCase();notPolluted=notPolluted&&stl.length===l&&stl[l-1]&&!stl[l];for(let i2=0;i2<l;i2++){let s1=st[i2];try{s1.__proto__.toLowerCase=stringToLower}catch{Object.setPrototypeOf(st,stringObj)}let s22=stl?stl[i2]:"",s1l=s1.toLowerCase();notPolluted=notPolluted&&s1l[0]===s22&&s1l[0]&&!s1l[1]}}return!notPolluted}function hex2bin(hex){return("00000000"+parseInt(hex,16).toString(2)).substr(-8)}function getFilesInPath(source){let{lstatSync:lstatSync2,readdirSync:readdirSync11}=fs3,
|
|
2806
|
+
`||s2[i2]==="\r"||s2[i2]==="'"||s2[i2]==="`"||s2[i2]==='"'||s2[i2].length>1||strict&&s2[i2]==="("||strict&&s2[i2]===")"||strict&&s2[i2]==="@"||strict&&s2[i2]===" "||strict&&s2[i2]==="{"||strict&&s2[i2]===";"||strict&&s2[i2]==="}"))result2=result2+s2[i2];return result2}function isPrototypePolluted(){let notPolluted=!0,st="";try{st.__proto__.replace=stringReplace,st.__proto__.toLowerCase=stringToLower,st.__proto__.toString=stringToString,st.__proto__.substr=stringSubstr,st.__proto__.substring=stringSubstring,st.__proto__.trim=stringTrim,st.__proto__.startsWith=stringStartWith}catch(e){Object.setPrototypeOf(st,stringObj)}notPolluted=notPolluted||!1;let ms=Date.now();if(typeof ms==="number"&&ms>1600000000000){let l=ms%100+15;for(let i2=0;i2<l;i2++){let r=Math.random()*61.99999999+1,rs=parseInt(Math.floor(r).toString(),10),rs2=parseInt(r.toString().split(".")[0],10),q2=Math.random()*61.99999999+1,qs=parseInt(Math.floor(q2).toString(),10),qs2=parseInt(q2.toString().split(".")[0],10);notPolluted=notPolluted&&r!==q2,notPolluted=notPolluted&&rs===rs2&&qs===qs2,st+="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[rs-1]}notPolluted=notPolluted&&st.length===l;let p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+" "+st.substr(p,2000);try{stm.__proto__.replace=stringReplace}catch(e){Object.setPrototypeOf(stm,stringObj)}let sto=stm.replace(/ /g,"");notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"{"+st.substr(p,2000),sto=stm.replace(/{/g,""),notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"*"+st.substr(p,2000),sto=stm.replace(/\*/g,""),notPolluted=notPolluted&&st===sto,p=Math.random()*l*0.9999999999,stm=st.substr(0,p)+"$"+st.substr(p,2000),sto=stm.replace(/\$/g,""),notPolluted=notPolluted&&st===sto;let stl=st.toLowerCase();notPolluted=notPolluted&&stl.length===l&&stl[l-1]&&!stl[l];for(let i2=0;i2<l;i2++){let s1=st[i2];try{s1.__proto__.toLowerCase=stringToLower}catch{Object.setPrototypeOf(st,stringObj)}let s22=stl?stl[i2]:"",s1l=s1.toLowerCase();notPolluted=notPolluted&&s1l[0]===s22&&s1l[0]&&!s1l[1]}}return!notPolluted}function hex2bin(hex){return("00000000"+parseInt(hex,16).toString(2)).substr(-8)}function getFilesInPath(source){let{lstatSync:lstatSync2,readdirSync:readdirSync11}=fs3,join65=path6.join;function isDirectory2(source2){return lstatSync2(source2).isDirectory()}function isFile2(source2){return lstatSync2(source2).isFile()}function getDirectories(source2){return readdirSync11(source2).map((name)=>{return join65(source2,name)}).filter(isDirectory2)}function getFiles(source2){return readdirSync11(source2).map((name)=>{return join65(source2,name)}).filter(isFile2)}function getFilesRecursively(source2){try{return getDirectories(source2).map((dir)=>{return getFilesRecursively(dir)}).reduce((a,b3)=>{return a.concat(b3)},[]).concat(getFiles(source2))}catch{return[]}}if(fs3.existsSync(source))return getFilesRecursively(source);else return[]}function decodePiCpuinfo(lines){if(_rpi_cpuinfo===null)_rpi_cpuinfo=lines;else if(lines===void 0)lines=_rpi_cpuinfo;let oldRevisionCodes={"0002":{type:"B",revision:"1.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0003":{type:"B",revision:"1.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0004":{type:"B",revision:"2.0",memory:256,manufacturer:"Sony UK",processor:"BCM2835"},"0005":{type:"B",revision:"2.0",memory:256,manufacturer:"Qisda",processor:"BCM2835"},"0006":{type:"B",revision:"2.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0007":{type:"A",revision:"2.0",memory:256,manufacturer:"Egoman",processor:"BCM2835"},"0008":{type:"A",revision:"2.0",memory:256,manufacturer:"Sony UK",processor:"BCM2835"},"0009":{type:"A",revision:"2.0",memory:256,manufacturer:"Qisda",processor:"BCM2835"},"000d":{type:"B",revision:"2.0",memory:512,manufacturer:"Egoman",processor:"BCM2835"},"000e":{type:"B",revision:"2.0",memory:512,manufacturer:"Sony UK",processor:"BCM2835"},"000f":{type:"B",revision:"2.0",memory:512,manufacturer:"Egoman",processor:"BCM2835"},"0010":{type:"B+",revision:"1.2",memory:512,manufacturer:"Sony UK",processor:"BCM2835"},"0011":{type:"CM1",revision:"1.0",memory:512,manufacturer:"Sony UK",processor:"BCM2835"},"0012":{type:"A+",revision:"1.1",memory:256,manufacturer:"Sony UK",processor:"BCM2835"},"0013":{type:"B+",revision:"1.2",memory:512,manufacturer:"Embest",processor:"BCM2835"},"0014":{type:"CM1",revision:"1.0",memory:512,manufacturer:"Embest",processor:"BCM2835"},"0015":{type:"A+",revision:"1.1",memory:256,manufacturer:"512MB\tEmbest",processor:"BCM2835"}},processorList=["BCM2835","BCM2836","BCM2837","BCM2711","BCM2712"],manufacturerList=["Sony UK","Egoman","Embest","Sony Japan","Embest","Stadium"],typeList={"00":"A","01":"B","02":"A+","03":"B+","04":"2B","05":"Alpha (early prototype)","06":"CM1","08":"3B","09":"Zero","0a":"CM3","0c":"Zero W","0d":"3B+","0e":"3A+","0f":"Internal use only",10:"CM3+",11:"4B",12:"Zero 2 W",13:"400",14:"CM4",15:"CM4S",16:"Internal use only",17:"5",18:"CM5",19:"500/500+","1a":"CM5 Lite"},revisionCode=getValue(lines,"revision",":",!0),model=getValue(lines,"model:",":",!0),serial=getValue(lines,"serial",":",!0),result2={};if({}.hasOwnProperty.call(oldRevisionCodes,revisionCode))result2={model,serial,revisionCode,memory:oldRevisionCodes[revisionCode].memory,manufacturer:oldRevisionCodes[revisionCode].manufacturer,processor:oldRevisionCodes[revisionCode].processor,type:oldRevisionCodes[revisionCode].type,revision:oldRevisionCodes[revisionCode].revision};else{let revision=("00000000"+getValue(lines,"revision",":",!0).toLowerCase()).substr(-8),memSizeCode=parseInt(hex2bin(revision.substr(2,1)).substr(5,3),2)||0,manufacturer=manufacturerList[parseInt(revision.substr(3,1),10)],processor=processorList[parseInt(revision.substr(4,1),10)],typeCode=revision.substr(5,2);result2={model,serial,revisionCode,memory:256*Math.pow(2,memSizeCode),manufacturer,processor,type:{}.hasOwnProperty.call(typeList,typeCode)?typeList[typeCode]:"",revision:"1."+revision.substr(7,1)}}return result2}function getRpiGpu(cpuinfo){if(_rpi_cpuinfo===null&&cpuinfo!==void 0)_rpi_cpuinfo=cpuinfo;else if(cpuinfo===void 0&&_rpi_cpuinfo!==null)cpuinfo=_rpi_cpuinfo;else try{cpuinfo=fs3.readFileSync("/proc/cpuinfo",{encoding:"utf8"}).toString().split(`
|
|
2772
2807
|
`),_rpi_cpuinfo=cpuinfo}catch{return!1}let rpi=decodePiCpuinfo(cpuinfo);if(rpi.type==="4B"||rpi.type==="CM4"||rpi.type==="CM4S"||rpi.type==="400")return"VideoCore VI";if(rpi.type==="5"||rpi.type==="500")return"VideoCore VII";return"VideoCore IV"}function promiseAll(promises){let resolvingPromises=promises.map((promise)=>new Promise((resolve14)=>{let payload=[,,];promise.then((result2)=>{payload[0]=result2}).catch((error2)=>{payload[1]=error2}).then(()=>{resolve14(payload)})})),errors3=[],results=[];return Promise.all(resolvingPromises).then((items)=>{return items.forEach((payload)=>{if(payload[1])errors3.push(payload[1]),results.push(null);else errors3.push(null),results.push(payload[0])}),{errors:errors3,results}})}function promisify3(nodeStyleFunction){return()=>{let args=Array.prototype.slice.call(arguments);return new Promise((resolve14,reject)=>{args.push((err,data)=>{if(err)reject(err);else resolve14(data)}),nodeStyleFunction.apply(null,args)})}}function promisifySave(nodeStyleFunction){return()=>{let args=Array.prototype.slice.call(arguments);return new Promise((resolve14)=>{args.push((err,data)=>{resolve14(data)}),nodeStyleFunction.apply(null,args)})}}function linuxVersion(){let result2="";if(_linux)try{result2=execSync17("uname -v",execOptsLinux).toString()}catch{result2=""}return result2}function plistParser(xmlStr){let tags=["array","dict","key","string","integer","date","real","data","boolean","arrayEmpty"],startStr="<plist version",pos=xmlStr.indexOf("<plist version"),len=xmlStr.length;while(xmlStr[pos]!==">"&&pos<len)pos++;let depth=0,inTagStart=!1,inTagContent=!1,inTagEnd=!1,metaData=[{tagStart:"",tagEnd:"",tagContent:"",key:"",data:null}],c="",cn=xmlStr[pos];while(pos<len){if(c=cn,pos+1<len)cn=xmlStr[pos+1];if(c==="<"){if(inTagContent=!1,cn==="/")inTagEnd=!0;else if(metaData[depth].tagStart){if(metaData[depth].tagContent="",!metaData[depth].data)metaData[depth].data=metaData[depth].tagStart==="array"?[]:{};depth++,metaData.push({tagStart:"",tagEnd:"",tagContent:"",key:null,data:null}),inTagStart=!0,inTagContent=!1}else if(!inTagStart)inTagStart=!0}else if(c===">"){if(metaData[depth].tagStart==="true/")inTagStart=!1,inTagEnd=!0,metaData[depth].tagStart="",metaData[depth].tagEnd="/boolean",metaData[depth].data=!0;if(metaData[depth].tagStart==="false/")inTagStart=!1,inTagEnd=!0,metaData[depth].tagStart="",metaData[depth].tagEnd="/boolean",metaData[depth].data=!1;if(metaData[depth].tagStart==="array/")inTagStart=!1,inTagEnd=!0,metaData[depth].tagStart="",metaData[depth].tagEnd="/arrayEmpty",metaData[depth].data=[];if(inTagContent)inTagContent=!1;if(inTagStart){if(inTagStart=!1,inTagContent=!0,metaData[depth].tagStart==="array")metaData[depth].data=[];if(metaData[depth].tagStart==="dict")metaData[depth].data={}}if(inTagEnd){if(inTagEnd=!1,metaData[depth].tagEnd&&tags.indexOf(metaData[depth].tagEnd.substr(1))>=0)if(metaData[depth].tagEnd==="/dict"||metaData[depth].tagEnd==="/array"){if(depth>1&&metaData[depth-2].tagStart==="array")metaData[depth-2].data.push(metaData[depth-1].data);if(depth>1&&metaData[depth-2].tagStart==="dict")metaData[depth-2].data[metaData[depth-1].key]=metaData[depth-1].data;depth--,metaData.pop(),metaData[depth].tagContent="",metaData[depth].tagStart="",metaData[depth].tagEnd=""}else{if(metaData[depth].tagEnd==="/key"&&metaData[depth].tagContent)metaData[depth].key=metaData[depth].tagContent;else{if(metaData[depth].tagEnd==="/real"&&metaData[depth].tagContent)metaData[depth].data=parseFloat(metaData[depth].tagContent)||0;if(metaData[depth].tagEnd==="/integer"&&metaData[depth].tagContent)metaData[depth].data=parseInt(metaData[depth].tagContent)||0;if(metaData[depth].tagEnd==="/string"&&metaData[depth].tagContent)metaData[depth].data=metaData[depth].tagContent||"";if(metaData[depth].tagEnd==="/boolean")metaData[depth].data=metaData[depth].tagContent||!1;if(metaData[depth].tagEnd==="/arrayEmpty")metaData[depth].data=metaData[depth].tagContent||[];if(depth>0&&metaData[depth-1].tagStart==="array")metaData[depth-1].data.push(metaData[depth].data);if(depth>0&&metaData[depth-1].tagStart==="dict")metaData[depth-1].data[metaData[depth].key]=metaData[depth].data}metaData[depth].tagContent="",metaData[depth].tagStart="",metaData[depth].tagEnd=""}metaData[depth].tagEnd="",inTagStart=!1,inTagContent=!1}}else{if(inTagStart)metaData[depth].tagStart+=c;if(inTagEnd)metaData[depth].tagEnd+=c;if(inTagContent)metaData[depth].tagContent+=c}pos++}return metaData[0].data}function strIsNumeric(str5){return typeof str5==="string"&&!isNaN(str5)&&!isNaN(parseFloat(str5))}function plistReader(output){let lines=output.split(`
|
|
2773
2808
|
`);for(let i2=0;i2<lines.length;i2++){if(lines[i2].indexOf(" = ")>=0){let lineParts=lines[i2].split(" = ");if(lineParts[0]=lineParts[0].trim(),!lineParts[0].startsWith('"'))lineParts[0]='"'+lineParts[0]+'"';if(lineParts[1]=lineParts[1].trim(),lineParts[1].indexOf('"')===-1&&lineParts[1].endsWith(";")){let valueString=lineParts[1].substring(0,lineParts[1].length-1);if(!strIsNumeric(valueString))lineParts[1]=`"${valueString}";`}if(lineParts[1].indexOf('"')>=0&&lineParts[1].endsWith(";")){let valueString=lineParts[1].substring(0,lineParts[1].length-1).replace(/"/g,"");if(strIsNumeric(valueString))lineParts[1]=`${valueString};`}lines[i2]=lineParts.join(" : ")}if(lines[i2]=lines[i2].replace(/\(/g,"[").replace(/\)/g,"]").replace(/;/g,",").trim(),lines[i2].startsWith("}")&&lines[i2-1]&&lines[i2-1].endsWith(","))lines[i2-1]=lines[i2-1].substring(0,lines[i2-1].length-1)}output=lines.join("");let obj={};try{obj=JSON.parse(output)}catch(e){noop4()}return obj}function semverCompare(v1,v2){let res=0,parts1=v1.split("."),parts2=v2.split(".");if(parts1[0]<parts2[0])res=1;else if(parts1[0]>parts2[0])res=-1;else if(parts1[0]===parts2[0]&&parts1.length>=2&&parts2.length>=2){if(parts1[1]<parts2[1])res=1;else if(parts1[1]>parts2[1])res=-1;else if(parts1[1]===parts2[1]){if(parts1.length>=3&&parts2.length>=3){if(parts1[2]<parts2[2])res=1;else if(parts1[2]>parts2[2])res=-1}else if(parts2.length>=3)res=1}}return res}function getAppleModel(key){let list2=[{key:"Mac17,7",name:"MacBook Pro",size:"16-inch",processor:"M5 Max",year:"2026",additional:""},{key:"Mac17,6",name:"MacBook Pro",size:"14-inch",processor:"M5 Max",year:"2026",additional:""},{key:"Mac17,5",name:"MacBook Pro",size:"16-inch",processor:"M5 Pro",year:"2026",additional:""},{key:"Mac17,4",name:"MacBook Pro",size:"14-inch",processor:"M5 Pro",year:"2026",additional:""},{key:"Mac17,1",name:"MacBook Neo",size:"14-inch",processor:"A18 Pro",year:"2026",additional:""},{key:"Mac17,3",name:"MacBook Pro",size:"16-inch",processor:"M5",year:"2025",additional:""},{key:"Mac17,2",name:"MacBook Pro",size:"14-inch",processor:"M5",year:"2025",additional:""},{key:"Mac16,13",name:"MacBook Air",size:"15-inch",processor:"M4",year:"2025",additional:""},{key:"Mac16,12",name:"MacBook Air",size:"13-inch",processor:"M4",year:"2025",additional:""},{key:"Mac15,13",name:"MacBook Air",size:"15-inch",processor:"M3",year:"2024",additional:""},{key:"Mac15,12",name:"MacBook Air",size:"13-inch",processor:"M3",year:"2024",additional:""},{key:"Mac14,15",name:"MacBook Air",size:"15-inch",processor:"M2",year:"2024",additional:""},{key:"Mac14,2",name:"MacBook Air",size:"13-inch",processor:"M2",year:"2022",additional:""},{key:"MacBookAir10,1",name:"MacBook Air",size:"13-inch",processor:"M1",year:"2020",additional:""},{key:"MacBookAir9,1",name:"MacBook Air",size:"13-inch",processor:"",year:"2020",additional:""},{key:"MacBookAir8,2",name:"MacBook Air",size:"13-inch",processor:"",year:"2019",additional:""},{key:"MacBookAir8,1",name:"MacBook Air",size:"13-inch",processor:"",year:"2018",additional:""},{key:"MacBookAir7,2",name:"MacBook Air",size:"13-inch",processor:"",year:"2017",additional:""},{key:"MacBookAir7,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Early 2015",additional:""},{key:"MacBookAir7,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Early 2015",additional:""},{key:"MacBookAir6,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Early 2014",additional:""},{key:"MacBookAir6,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Early 2014",additional:""},{key:"MacBookAir6,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Mid 2013",additional:""},{key:"MacBookAir6,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Mid 2013",additional:""},{key:"MacBookAir5,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Mid 2012",additional:""},{key:"MacBookAir5,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Mid 2012",additional:""},{key:"MacBookAir4,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Mid 2011",additional:""},{key:"MacBookAir4,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Mid 2011",additional:""},{key:"MacBookAir3,2",name:"MacBook Air",size:"13-inch",processor:"",year:"Late 2010",additional:""},{key:"MacBookAir3,1",name:"MacBook Air",size:"11-inch",processor:"",year:"Late 2010",additional:""},{key:"MacBookAir2,1",name:"MacBook Air",size:"13-inch",processor:"",year:"Mid 2009",additional:""},{key:"Mac16,1",name:"MacBook Pro",size:"14-inch",processor:"M4",year:"2024",additional:""},{key:"Mac16,6",name:"MacBook Pro",size:"14-inch",processor:"M4 Pro",year:"2024",additional:""},{key:"Mac16,8",name:"MacBook Pro",size:"14-inch",processor:"M4 Max",year:"2024",additional:""},{key:"Mac16,5",name:"MacBook Pro",size:"16-inch",processor:"M4 Pro",year:"2024",additional:""},{key:"Mac16,6",name:"MacBook Pro",size:"16-inch",processor:"M4 Max",year:"2024",additional:""},{key:"Mac15,3",name:"MacBook Pro",size:"14-inch",processor:"M3",year:"Nov 2023",additional:""},{key:"Mac15,6",name:"MacBook Pro",size:"14-inch",processor:"M3 Pro",year:"Nov 2023",additional:""},{key:"Mac15,8",name:"MacBook Pro",size:"14-inch",processor:"M3 Pro",year:"Nov 2023",additional:""},{key:"Mac15,10",name:"MacBook Pro",size:"14-inch",processor:"M3 Max",year:"Nov 2023",additional:""},{key:"Mac15,7",name:"MacBook Pro",size:"16-inch",processor:"M3 Pro",year:"Nov 2023",additional:""},{key:"Mac15,9",name:"MacBook Pro",size:"16-inch",processor:"M3 Pro",year:"Nov 2023",additional:""},{key:"Mac15,11",name:"MacBook Pro",size:"16-inch",processor:"M3 Max",year:"Nov 2023",additional:""},{key:"Mac14,5",name:"MacBook Pro",size:"14-inch",processor:"M2 Max",year:"2023",additional:""},{key:"Mac14,9",name:"MacBook Pro",size:"14-inch",processor:"M2 Max",year:"2023",additional:""},{key:"Mac14,6",name:"MacBook Pro",size:"16-inch",processor:"M2 Max",year:"2023",additional:""},{key:"Mac14,10",name:"MacBook Pro",size:"16-inch",processor:"M2 Max",year:"2023",additional:""},{key:"Mac14,7",name:"MacBook Pro",size:"13-inch",processor:"M2",year:"2022",additional:""},{key:"MacBookPro18,3",name:"MacBook Pro",size:"14-inch",processor:"M1 Pro",year:"2021",additional:""},{key:"MacBookPro18,4",name:"MacBook Pro",size:"14-inch",processor:"M1 Max",year:"2021",additional:""},{key:"MacBookPro18,1",name:"MacBook Pro",size:"16-inch",processor:"M1 Pro",year:"2021",additional:""},{key:"MacBookPro18,2",name:"MacBook Pro",size:"16-inch",processor:"M1 Max",year:"2021",additional:""},{key:"MacBookPro17,1",name:"MacBook Pro",size:"13-inch",processor:"M1",year:"2020",additional:""},{key:"MacBookPro16,3",name:"MacBook Pro",size:"13-inch",processor:"",year:"2020",additional:"Two Thunderbolt 3 ports"},{key:"MacBookPro16,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"2020",additional:"Four Thunderbolt 3 ports"},{key:"MacBookPro16,1",name:"MacBook Pro",size:"16-inch",processor:"",year:"2019",additional:""},{key:"MacBookPro16,4",name:"MacBook Pro",size:"16-inch",processor:"",year:"2019",additional:""},{key:"MacBookPro15,3",name:"MacBook Pro",size:"15-inch",processor:"",year:"2019",additional:""},{key:"MacBookPro15,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"2019",additional:""},{key:"MacBookPro15,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"2019",additional:""},{key:"MacBookPro15,4",name:"MacBook Pro",size:"13-inch",processor:"",year:"2019",additional:"Two Thunderbolt 3 ports"},{key:"MacBookPro15,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"2018",additional:""},{key:"MacBookPro15,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"2018",additional:"Four Thunderbolt 3 ports"},{key:"MacBookPro14,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"2017",additional:"Two Thunderbolt 3 ports"},{key:"MacBookPro14,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"2017",additional:"Four Thunderbolt 3 ports"},{key:"MacBookPro14,3",name:"MacBook Pro",size:"15-inch",processor:"",year:"2017",additional:""},{key:"MacBookPro13,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"2016",additional:"Two Thunderbolt 3 ports"},{key:"MacBookPro13,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"2016",additional:"Four Thunderbolt 3 ports"},{key:"MacBookPro13,3",name:"MacBook Pro",size:"15-inch",processor:"",year:"2016",additional:""},{key:"MacBookPro11,4",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2015",additional:""},{key:"MacBookPro11,5",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2015",additional:""},{key:"MacBookPro12,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"Early 2015",additional:""},{key:"MacBookPro11,2",name:"MacBook Pro",size:"15-inch",processor:"",year:"Late 2013",additional:""},{key:"MacBookPro11,3",name:"MacBook Pro",size:"15-inch",processor:"",year:"Late 2013",additional:""},{key:"MacBookPro11,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"Late 2013",additional:""},{key:"MacBookPro10,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2012",additional:""},{key:"MacBookPro10,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"Late 2012",additional:""},{key:"MacBookPro9,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2012",additional:""},{key:"MacBookPro9,2",name:"MacBook Pro",size:"13-inch",processor:"",year:"Mid 2012",additional:""},{key:"MacBookPro8,3",name:"MacBook Pro",size:"17-inch",processor:"",year:"Early 2011",additional:""},{key:"MacBookPro8,2",name:"MacBook Pro",size:"15-inch",processor:"",year:"Early 2011",additional:""},{key:"MacBookPro8,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"Early 2011",additional:""},{key:"MacBookPro6,1",name:"MacBook Pro",size:"17-inch",processor:"",year:"Mid 2010",additional:""},{key:"MacBookPro6,2",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2010",additional:""},{key:"MacBookPro7,1",name:"MacBook Pro",size:"13-inch",processor:"",year:"Mid 2010",additional:""},{key:"MacBookPro5,2",name:"MacBook Pro",size:"17-inch",processor:"",year:"Early 2009",additional:""},{key:"MacBookPro5,3",name:"MacBook Pro",size:"15-inch",processor:"",year:"Mid 2009",additional:""},{key:"MacBookPro5,5",name:"MacBook Pro",size:"13-inch",processor:"",year:"Mid 2009",additional:""},{key:"MacBookPro5,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"Late 2008",additional:""},{key:"MacBookPro4,1",name:"MacBook Pro",size:"15-inch",processor:"",year:"Early 2008",additional:""},{key:"MacBook10,1",name:"MacBook",size:"12-inch",processor:"",year:"2017",additional:""},{key:"MacBook9,1",name:"MacBook",size:"12-inch",processor:"",year:"Early 2016",additional:""},{key:"MacBook8,1",name:"MacBook",size:"12-inch",processor:"",year:"Early 2015",additional:""},{key:"MacBook7,1",name:"MacBook",size:"13-inch",processor:"",year:"Mid 2010",additional:""},{key:"MacBook6,1",name:"MacBook",size:"13-inch",processor:"",year:"Late 2009",additional:""},{key:"MacBook5,2",name:"MacBook",size:"13-inch",processor:"",year:"Early 2009",additional:""},{key:"Mac14,13",name:"Mac Studio",size:"",processor:"M2 Max",year:"2023",additional:""},{key:"Mac14,14",name:"Mac Studio",size:"",processor:"M2 Ultra",year:"2023",additional:""},{key:"Mac15,14",name:"Mac Studio",size:"",processor:"M3 Ultra",year:"2025",additional:""},{key:"Mac16,9",name:"Mac Studio",size:"",processor:"M4 Max",year:"2025",additional:""},{key:"Mac13,1",name:"Mac Studio",size:"",processor:"M1 Max",year:"2022",additional:""},{key:"Mac13,2",name:"Mac Studio",size:"",processor:"M1 Ultra",year:"2022",additional:""},{key:"Mac16,11",name:"Mac mini",size:"",processor:"M4 Pro",year:"2024",additional:""},{key:"Mac16,10",name:"Mac mini",size:"",processor:"M4",year:"2024",additional:""},{key:"Mac14,3",name:"Mac mini",size:"",processor:"M2",year:"2023",additional:""},{key:"Mac14,12",name:"Mac mini",size:"",processor:"M2 Pro",year:"2023",additional:""},{key:"Macmini9,1",name:"Mac mini",size:"",processor:"M1",year:"2020",additional:""},{key:"Macmini8,1",name:"Mac mini",size:"",processor:"",year:"Late 2018",additional:""},{key:"Macmini7,1",name:"Mac mini",size:"",processor:"",year:"Late 2014",additional:""},{key:"Macmini6,1",name:"Mac mini",size:"",processor:"",year:"Late 2012",additional:""},{key:"Macmini6,2",name:"Mac mini",size:"",processor:"",year:"Late 2012",additional:""},{key:"Macmini5,1",name:"Mac mini",size:"",processor:"",year:"Mid 2011",additional:""},{key:"Macmini5,2",name:"Mac mini",size:"",processor:"",year:"Mid 2011",additional:""},{key:"Macmini4,1",name:"Mac mini",size:"",processor:"",year:"Mid 2010",additional:""},{key:"Macmini3,1",name:"Mac mini",size:"",processor:"",year:"Early 2009",additional:""},{key:"Mac16,3",name:"iMac",size:"24-inch",processor:"M4",year:"2024",additional:"Four ports"},{key:"Mac16,2",name:"iMac",size:"24-inch",processor:"M4",year:"2024",additional:"Two ports"},{key:"Mac15,5",name:"iMac",size:"24-inch",processor:"M3",year:"2023",additional:"Four ports"},{key:"Mac15,4",name:"iMac",size:"24-inch",processor:"M3",year:"2023",additional:"Two ports"},{key:"iMac21,1",name:"iMac",size:"24-inch",processor:"M1",year:"2021",additional:""},{key:"iMac21,2",name:"iMac",size:"24-inch",processor:"M1",year:"2021",additional:""},{key:"iMac20,1",name:"iMac",size:"27-inch",processor:"",year:"2020",additional:"Retina 5K"},{key:"iMac20,2",name:"iMac",size:"27-inch",processor:"",year:"2020",additional:"Retina 5K"},{key:"iMac19,1",name:"iMac",size:"27-inch",processor:"",year:"2019",additional:"Retina 5K"},{key:"iMac19,2",name:"iMac",size:"21.5-inch",processor:"",year:"2019",additional:"Retina 4K"},{key:"iMacPro1,1",name:"iMac Pro",size:"",processor:"",year:"2017",additional:""},{key:"iMac18,3",name:"iMac",size:"27-inch",processor:"",year:"2017",additional:"Retina 5K"},{key:"iMac18,2",name:"iMac",size:"21.5-inch",processor:"",year:"2017",additional:"Retina 4K"},{key:"iMac18,1",name:"iMac",size:"21.5-inch",processor:"",year:"2017",additional:""},{key:"iMac17,1",name:"iMac",size:"27-inch",processor:"",year:"Late 2015",additional:"Retina 5K"},{key:"iMac16,2",name:"iMac",size:"21.5-inch",processor:"",year:"Late 2015",additional:"Retina 4K"},{key:"iMac16,1",name:"iMac",size:"21.5-inch",processor:"",year:"Late 2015",additional:""},{key:"iMac15,1",name:"iMac",size:"27-inch",processor:"",year:"Late 2014",additional:"Retina 5K"},{key:"iMac14,4",name:"iMac",size:"21.5-inch",processor:"",year:"Mid 2014",additional:""},{key:"iMac14,2",name:"iMac",size:"27-inch",processor:"",year:"Late 2013",additional:""},{key:"iMac14,1",name:"iMac",size:"21.5-inch",processor:"",year:"Late 2013",additional:""},{key:"iMac13,2",name:"iMac",size:"27-inch",processor:"",year:"Late 2012",additional:""},{key:"iMac13,1",name:"iMac",size:"21.5-inch",processor:"",year:"Late 2012",additional:""},{key:"iMac12,2",name:"iMac",size:"27-inch",processor:"",year:"Mid 2011",additional:""},{key:"iMac12,1",name:"iMac",size:"21.5-inch",processor:"",year:"Mid 2011",additional:""},{key:"iMac11,3",name:"iMac",size:"27-inch",processor:"",year:"Mid 2010",additional:""},{key:"iMac11,2",name:"iMac",size:"21.5-inch",processor:"",year:"Mid 2010",additional:""},{key:"iMac10,1",name:"iMac",size:"21.5-inch",processor:"",year:"Late 2009",additional:""},{key:"iMac9,1",name:"iMac",size:"20-inch",processor:"",year:"Early 2009",additional:""},{key:"Mac14,8",name:"Mac Pro",size:"",processor:"",year:"2023",additional:""},{key:"Mac14,8",name:"Mac Pro",size:"",processor:"",year:"2023",additional:"Rack"},{key:"MacPro7,1",name:"Mac Pro",size:"",processor:"",year:"2019",additional:""},{key:"MacPro7,1",name:"Mac Pro",size:"",processor:"",year:"2019",additional:"Rack"},{key:"MacPro6,1",name:"Mac Pro",size:"",processor:"",year:"Late 2013",additional:""},{key:"MacPro5,1",name:"Mac Pro",size:"",processor:"",year:"Mid 2012",additional:""},{key:"MacPro5,1",name:"Mac Pro Server",size:"",processor:"",year:"Mid 2012",additional:"Server"},{key:"MacPro5,1",name:"Mac Pro",size:"",processor:"",year:"Mid 2010",additional:""},{key:"MacPro5,1",name:"Mac Pro Server",size:"",processor:"",year:"Mid 2010",additional:"Server"},{key:"MacPro4,1",name:"Mac Pro",size:"",processor:"",year:"Early 2009",additional:""}].filter((model)=>model.key===key);if(list2.length===0)return{key,model:"Apple",version:"Unknown"};let features=[];if(list2[0].size)features.push(list2[0].size);if(list2[0].processor)features.push(list2[0].processor);if(list2[0].year)features.push(list2[0].year);if(list2[0].additional)features.push(list2[0].additional);return{key,model:list2[0].name,version:list2[0].name+" ("+features.join(", ")+")"}}function checkWebsite(url,timeout=5000){let http=url.startsWith("https:")||url.indexOf(":443/")>0||url.indexOf(":8443/")>0?__require("https"):__require("http"),t2=Date.now();return new Promise((resolve14)=>{let request=http.get(url,(res)=>{res.on("data",()=>{}),res.on("end",()=>{resolve14({url,statusCode:res.statusCode,message:res.statusMessage,time:Date.now()-t2})})}).on("error",(e)=>{resolve14({url,statusCode:404,message:e.message,time:Date.now()-t2})}).setTimeout(timeout,()=>{request.destroy(),resolve14({url,statusCode:408,message:"Request Timeout",time:Date.now()-t2})})})}function cleanString(str5){return str5.replace(/To Be Filled By O.E.M./g,"")}function noop4(){}exports.toInt=toInt;exports.splitByNumber=splitByNumber;exports.execOptsWin=execOptsWin;exports.execOptsLinux=execOptsLinux;exports.getCodepage=getCodepage;exports.execWin=execWin;exports.isFunction=isFunction;exports.unique=unique;exports.sortByKey=sortByKey;exports.cores=cores;exports.getValue=getValue;exports.decodeEscapeSequence=decodeEscapeSequence;exports.parseDateTime=parseDateTime;exports.parseHead=parseHead;exports.findObjectByKey=findObjectByKey;exports.darwinXcodeExists=darwinXcodeExists;exports.getVboxmanage=getVboxmanage;exports.powerShell=powerShell;exports.powerShellStart=powerShellStart;exports.powerShellRelease=powerShellRelease;exports.execSafe=execSafe;exports.nanoSeconds=nanoSeconds;exports.countUniqueLines=countUniqueLines;exports.countLines=countLines;exports.noop=noop4;exports.isRaspberry=isRaspberry;exports.isRaspbian=isRaspbian;exports.sanitizeShellString=sanitizeShellString;exports.isPrototypePolluted=isPrototypePolluted;exports.decodePiCpuinfo=decodePiCpuinfo;exports.getRpiGpu=getRpiGpu;exports.promiseAll=promiseAll;exports.promisify=promisify3;exports.promisifySave=promisifySave;exports.smartMonToolsInstalled=smartMonToolsInstalled;exports.linuxVersion=linuxVersion;exports.plistParser=plistParser;exports.plistReader=plistReader;exports.stringObj=stringObj;exports.stringReplace=stringReplace;exports.stringToLower=stringToLower;exports.stringToString=stringToString;exports.stringSubstr=stringSubstr;exports.stringSubstring=stringSubstring;exports.stringTrim=stringTrim;exports.stringStartWith=stringStartWith;exports.mathMin=mathMin;exports.WINDIR=WINDIR;exports.getFilesInPath=getFilesInPath;exports.semverCompare=semverCompare;exports.getAppleModel=getAppleModel;exports.checkWebsite=checkWebsite;exports.cleanString=cleanString;exports.getPowershell=getPowershell});var require_osinfo=__commonJS((exports)=>{var os4=__require("os"),fs3=__require("fs"),util4=require_util3(),exec3=__require("child_process").exec,execSync17=__require("child_process").execSync,_platform=process.platform,_linux=_platform==="linux"||_platform==="android",_darwin=_platform==="darwin",_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";function time(){let t2=new Date().toString().split(" "),timezoneName="";try{timezoneName=Intl.DateTimeFormat().resolvedOptions().timeZone}catch{timezoneName=t2.length>=7?t2.slice(6).join(" ").replace(/\(/g,"").replace(/\)/g,""):""}let result2={current:Date.now(),uptime:os4.uptime(),timezone:t2.length>=7?t2[5]:"",timezoneName};if(_darwin||_linux)try{let lines=execSync17("date +%Z && date +%z && ls -l /etc/localtime 2>/dev/null",util4.execOptsLinux).toString().split(os4.EOL);if(lines.length>3&&!lines[0])lines.shift();let timezone=lines[0]||"";if(timezone.startsWith("+")||timezone.startsWith("-"))timezone="GMT";return{current:Date.now(),uptime:os4.uptime(),timezone:lines[1]?timezone+lines[1]:timezone,timezoneName:lines[2]&&lines[2].indexOf("/zoneinfo/")>0?lines[2].split("/zoneinfo/")[1]||"":""}}catch{util4.noop()}return result2}exports.time=time;function getLogoFile(distro){distro=distro||"",distro=distro.toLowerCase();let result2=_platform;if(_windows)result2="windows";else if(distro.indexOf("mac os")!==-1||distro.indexOf("macos")!==-1)result2="apple";else if(distro.indexOf("arch")!==-1)result2="arch";else if(distro.indexOf("cachy")!==-1)result2="cachy";else if(distro.indexOf("centos")!==-1)result2="centos";else if(distro.indexOf("coreos")!==-1)result2="coreos";else if(distro.indexOf("debian")!==-1)result2="debian";else if(distro.indexOf("deepin")!==-1)result2="deepin";else if(distro.indexOf("elementary")!==-1)result2="elementary";else if(distro.indexOf("endeavour")!==-1)result2="endeavour";else if(distro.indexOf("fedora")!==-1)result2="fedora";else if(distro.indexOf("gentoo")!==-1)result2="gentoo";else if(distro.indexOf("mageia")!==-1)result2="mageia";else if(distro.indexOf("mandriva")!==-1)result2="mandriva";else if(distro.indexOf("manjaro")!==-1)result2="manjaro";else if(distro.indexOf("mint")!==-1)result2="mint";else if(distro.indexOf("mx")!==-1)result2="mx";else if(distro.indexOf("openbsd")!==-1)result2="openbsd";else if(distro.indexOf("freebsd")!==-1)result2="freebsd";else if(distro.indexOf("opensuse")!==-1)result2="opensuse";else if(distro.indexOf("pclinuxos")!==-1)result2="pclinuxos";else if(distro.indexOf("puppy")!==-1)result2="puppy";else if(distro.indexOf("popos")!==-1)result2="popos";else if(distro.indexOf("raspbian")!==-1)result2="raspbian";else if(distro.indexOf("reactos")!==-1)result2="reactos";else if(distro.indexOf("redhat")!==-1)result2="redhat";else if(distro.indexOf("slackware")!==-1)result2="slackware";else if(distro.indexOf("sugar")!==-1)result2="sugar";else if(distro.indexOf("steam")!==-1)result2="steam";else if(distro.indexOf("suse")!==-1)result2="suse";else if(distro.indexOf("mate")!==-1)result2="ubuntu-mate";else if(distro.indexOf("lubuntu")!==-1)result2="lubuntu";else if(distro.indexOf("xubuntu")!==-1)result2="xubuntu";else if(distro.indexOf("ubuntu")!==-1)result2="ubuntu";else if(distro.indexOf("solaris")!==-1)result2="solaris";else if(distro.indexOf("tails")!==-1)result2="tails";else if(distro.indexOf("feren")!==-1)result2="ferenos";else if(distro.indexOf("robolinux")!==-1)result2="robolinux";else if(_linux&&distro)result2=distro.toLowerCase().trim().replace(/\s+/g,"-");return result2}var WINDOWS_RELEASES=[[26200,"25H2"],[26100,"24H2"],[22631,"23H2"],[22621,"22H2"],[19045,"22H2"],[22000,"21H2"],[19044,"21H2"],[19043,"21H1"],[19042,"20H2"],[19041,"2004"],[18363,"1909"],[18362,"1903"],[17763,"1809"],[17134,"1803"]];function getWindowsRelease(build){for(let[minBuild,label]of WINDOWS_RELEASES)if(build>=minBuild)return label;return""}function getFQDN(){let fqdn=os4.hostname;if(_linux||_darwin)try{fqdn=execSync17("hostname -f 2>/dev/null",util4.execOptsLinux).toString().split(os4.EOL)[0]}catch{util4.noop()}if(_freebsd||_openbsd||_netbsd)try{fqdn=execSync17("hostname 2>/dev/null").toString().split(os4.EOL)[0]}catch{util4.noop()}if(_windows)try{fqdn=execSync17("echo %COMPUTERNAME%.%USERDNSDOMAIN%",util4.execOptsWin).toString().replace(".%USERDNSDOMAIN%","").split(os4.EOL)[0]}catch{util4.noop()}return fqdn}function osInfo(callback){return new Promise((resolve14)=>{process.nextTick(()=>{let result2={platform:_platform==="win32"?"Windows":_platform,distro:"unknown",release:"unknown",codename:"",kernel:os4.release(),arch:os4.arch(),hostname:os4.hostname(),fqdn:getFQDN(),codepage:"",logofile:"",serial:"",build:"",servicepack:"",uefi:!1};if(_linux)exec3("cat /etc/*-release; cat /usr/lib/os-release; cat /etc/openwrt_release",(error2,stdout)=>{let release={};stdout.toString().split(`
|
|
2774
2809
|
`).forEach((line)=>{if(line.indexOf("=")!==-1)release[line.split("=")[0].trim().toUpperCase()]=line.split("=")[1].trim()}),result2.distro=(release.DISTRIB_ID||release.NAME||"unknown").replace(/"/g,""),result2.logofile=getLogoFile(result2.distro);let releaseVersion=(release.VERSION||"").replace(/"/g,""),codename=(release.DISTRIB_CODENAME||release.VERSION_CODENAME||"").replace(/"/g,""),prettyName=(release.PRETTY_NAME||"").replace(/"/g,"");if(prettyName.indexOf(result2.distro+" ")===0)releaseVersion=prettyName.replace(result2.distro+" ","").trim();if(releaseVersion.indexOf("(")>=0)codename=releaseVersion.split("(")[1].replace(/[()]/g,"").trim(),releaseVersion=releaseVersion.split("(")[0].trim();result2.release=(releaseVersion||release.DISTRIB_RELEASE||release.VERSION_ID||"unknown").replace(/"/g,""),result2.codename=codename,result2.codepage=util4.getCodepage(),result2.build=(release.BUILD_ID||"").replace(/"/g,"").trim(),isUefiLinux().then((uefi)=>{result2.uefi=uefi,uuid().then((data)=>{if(result2.serial=data.os,callback)callback(result2);resolve14(result2)})})});if(_freebsd||_openbsd||_netbsd)exec3("sysctl kern.ostype kern.osrelease kern.osrevision kern.hostuuid machdep.bootmethod kern.geom.confxml",(error2,stdout)=>{let lines=stdout.toString().split(`
|
|
@@ -3146,7 +3181,7 @@ Bus `);for(let i2=1;i2<parts.length;i2++){let usb2=parseLinuxUsb(parts[i2]);resu
|
|
|
3146
3181
|
`);if(util4.getValue(lines,"class",":",!0).toLowerCase().indexOf("audio")>=0){let audio2=parseLinuxAudioPciMM(lines,audioPCI);result2.push(audio2)}})}if(callback)callback(result2);resolve14(result2)});if(_darwin)exec3("system_profiler SPAudioDataType -json",(error2,stdout)=>{if(!error2)try{let outObj=JSON.parse(stdout.toString());if(outObj.SPAudioDataType&&outObj.SPAudioDataType.length&&outObj.SPAudioDataType[0]&&outObj.SPAudioDataType[0]._items&&outObj.SPAudioDataType[0]._items.length)for(let i2=0;i2<outObj.SPAudioDataType[0]._items.length;i2++){let audio2=parseDarwinAudio(outObj.SPAudioDataType[0]._items[i2],i2);result2.push(audio2)}}catch{util4.noop()}if(callback)callback(result2);resolve14(result2)});if(_windows)util4.powerShell("Get-CimInstance Win32_SoundDevice | select DeviceID,StatusInfo,Name,Manufacturer | fl").then((stdout,error2)=>{if(!error2)stdout.toString().split(/\n\s*\n/).forEach((element)=>{let lines=element.split(`
|
|
3147
3182
|
`);if(util4.getValue(lines,"name",":"))result2.push(parseWindowsAudio(lines))});if(callback)callback(result2);resolve14(result2)});if(_sunos)resolve14(null)})})}exports.audio=audio});var require_bluetoothVendors=__commonJS((exports,module2)=>{module2.exports={0:"Ericsson Technology Licensing",1:"Nokia Mobile Phones",2:"Intel Corp.",3:"IBM Corp.",4:"Toshiba Corp.",5:"3Com",6:"Microsoft",7:"Lucent",8:"Motorola",9:"Infineon Technologies AG",10:"Cambridge Silicon Radio",11:"Silicon Wave",12:"Digianswer A/S",13:"Texas Instruments Inc.",14:"Ceva, Inc. (formerly Parthus Technologies, Inc.)",15:"Broadcom Corporation",16:"Mitel Semiconductor",17:"Widcomm, Inc",18:"Zeevo, Inc.",19:"Atmel Corporation",20:"Mitsubishi Electric Corporation",21:"RTX Telecom A/S",22:"KC Technology Inc.",23:"NewLogic",24:"Transilica, Inc.",25:"Rohde & Schwarz GmbH & Co. KG",26:"TTPCom Limited",27:"Signia Technologies, Inc.",28:"Conexant Systems Inc.",29:"Qualcomm",30:"Inventel",31:"AVM Berlin",32:"BandSpeed, Inc.",33:"Mansella Ltd",34:"NEC Corporation",35:"WavePlus Technology Co., Ltd.",36:"Alcatel",37:"NXP Semiconductors (formerly Philips Semiconductors)",38:"C Technologies",39:"Open Interface",40:"R F Micro Devices",41:"Hitachi Ltd",42:"Symbol Technologies, Inc.",43:"Tenovis",44:"Macronix International Co. Ltd.",45:"GCT Semiconductor",46:"Norwood Systems",47:"MewTel Technology Inc.",48:"ST Microelectronics",49:"Synopsis",50:"Red-M (Communications) Ltd",51:"Commil Ltd",52:"Computer Access Technology Corporation (CATC)",53:"Eclipse (HQ Espana) S.L.",54:"Renesas Electronics Corporation",55:"Mobilian Corporation",56:"Terax",57:"Integrated System Solution Corp.",58:"Matsushita Electric Industrial Co., Ltd.",59:"Gennum Corporation",60:"BlackBerry Limited (formerly Research In Motion)",61:"IPextreme, Inc.",62:"Systems and Chips, Inc.",63:"Bluetooth SIG, Inc.",64:"Seiko Epson Corporation",65:"Integrated Silicon Solution Taiwan, Inc.",66:"CONWISE Technology Corporation Ltd",67:"PARROT SA",68:"Socket Mobile",69:"Atheros Communications, Inc.",70:"MediaTek, Inc.",71:"Bluegiga",72:"Marvell Technology Group Ltd.",73:"3DSP Corporation",74:"Accel Semiconductor Ltd.",75:"Continental Automotive Systems",76:"Apple, Inc.",77:"Staccato Communications, Inc.",78:"Avago Technologies",79:"APT Licensing Ltd.",80:"SiRF Technology",81:"Tzero Technologies, Inc.",82:"J&M Corporation",83:"Free2move AB",84:"3DiJoy Corporation",85:"Plantronics, Inc.",86:"Sony Ericsson Mobile Communications",87:"Harman International Industries, Inc.",88:"Vizio, Inc.",89:"Nordic Semiconductor ASA",90:"EM Microelectronic-Marin SA",91:"Ralink Technology Corporation",92:"Belkin International, Inc.",93:"Realtek Semiconductor Corporation",94:"Stonestreet One, LLC",95:"Wicentric, Inc.",96:"RivieraWaves S.A.S",97:"RDA Microelectronics",98:"Gibson Guitars",99:"MiCommand Inc.",100:"Band XI International, LLC",101:"Hewlett-Packard Company",102:"9Solutions Oy",103:"GN Netcom A/S",104:"General Motors",105:"A&D Engineering, Inc.",106:"MindTree Ltd.",107:"Polar Electro OY",108:"Beautiful Enterprise Co., Ltd.",109:"BriarTek, Inc.",110:"Summit Data Communications, Inc.",111:"Sound ID",112:"Monster, LLC",113:"connectBlue AB",114:"ShangHai Super Smart Electronics Co. Ltd.",115:"Group Sense Ltd.",116:"Zomm, LLC",117:"Samsung Electronics Co. Ltd.",118:"Creative Technology Ltd.",119:"Laird Technologies",120:"Nike, Inc.",121:"lesswire AG",122:"MStar Semiconductor, Inc.",123:"Hanlynn Technologies",124:"A & R Cambridge",125:"Seers Technology Co. Ltd",126:"Sports Tracking Technologies Ltd.",127:"Autonet Mobile",128:"DeLorme Publishing Company, Inc.",129:"WuXi Vimicro",130:"Sennheiser Communications A/S",131:"TimeKeeping Systems, Inc.",132:"Ludus Helsinki Ltd.",133:"BlueRadios, Inc.",134:"equinox AG",135:"Garmin International, Inc.",136:"Ecotest",137:"GN ReSound A/S",138:"Jawbone",139:"Topcorn Positioning Systems, LLC",140:"Gimbal Inc. (formerly Qualcomm Labs, Inc. and Qualcomm Retail Solutions, Inc.)",141:"Zscan Software",142:"Quintic Corp.",143:"Stollman E+V GmbH",144:"Funai Electric Co., Ltd.",145:"Advanced PANMOBIL Systems GmbH & Co. KG",146:"ThinkOptics, Inc.",147:"Universal Electronics, Inc.",148:"Airoha Technology Corp.",149:"NEC Lighting, Ltd.",150:"ODM Technology, Inc.",151:"ConnecteDevice Ltd.",152:"zer01.tv GmbH",153:"i.Tech Dynamic Global Distribution Ltd.",154:"Alpwise",155:"Jiangsu Toppower Automotive Electronics Co., Ltd.",156:"Colorfy, Inc.",157:"Geoforce Inc.",158:"Bose Corporation",159:"Suunto Oy",160:"Kensington Computer Products Group",161:"SR-Medizinelektronik",162:"Vertu Corporation Limited",163:"Meta Watch Ltd.",164:"LINAK A/S",165:"OTL Dynamics LLC",166:"Panda Ocean Inc.",167:"Visteon Corporation",168:"ARP Devices Limited",169:"Magneti Marelli S.p.A",170:"CAEN RFID srl",171:"Ingenieur-Systemgruppe Zahn GmbH",172:"Green Throttle Games",173:"Peter Systemtechnik GmbH",174:"Omegawave Oy",175:"Cinetix",176:"Passif Semiconductor Corp",177:"Saris Cycling Group, Inc",178:"Bekey A/S",179:"Clarinox Technologies Pty. Ltd.",180:"BDE Technology Co., Ltd.",181:"Swirl Networks",182:"Meso international",183:"TreLab Ltd",184:"Qualcomm Innovation Center, Inc. (QuIC)",185:"Johnson Controls, Inc.",186:"Starkey Laboratories Inc.",187:"S-Power Electronics Limited",188:"Ace Sensor Inc",189:"Aplix Corporation",190:"AAMP of America",191:"Stalmart Technology Limited",192:"AMICCOM Electronics Corporation",193:"Shenzhen Excelsecu Data Technology Co.,Ltd",194:"Geneq Inc.",195:"adidas AG",196:"LG Electronics",197:"Onset Computer Corporation",198:"Selfly BV",199:"Quuppa Oy.",200:"GeLo Inc",201:"Evluma",202:"MC10",203:"Binauric SE",204:"Beats Electronics",205:"Microchip Technology Inc.",206:"Elgato Systems GmbH",207:"ARCHOS SA",208:"Dexcom, Inc.",209:"Polar Electro Europe B.V.",210:"Dialog Semiconductor B.V.",211:"Taixingbang\xA0Technology (HK) Co,. LTD.",212:"Kawantech",213:"Austco Communication Systems",214:"Timex Group USA, Inc.",215:"Qualcomm Technologies, Inc.",216:"Qualcomm Connected Experiences, Inc.",217:"Voyetra Turtle Beach",218:"txtr GmbH",219:"Biosentronics",220:"Procter & Gamble",221:"Hosiden Corporation",222:"Muzik LLC",223:"Misfit Wearables Corp",224:"Google",225:"Danlers Ltd",226:"Semilink Inc",227:"inMusic Brands, Inc",228:"L.S. Research Inc.",229:"Eden Software Consultants Ltd.",230:"Freshtemp",231:"KS Technologies",232:"ACTS Technologies",233:"Vtrack Systems",234:"Nielsen-Kellerman Company",235:"Server Technology, Inc.",236:"BioResearch Associates",237:"Jolly Logic, LLC",238:"Above Average Outcomes, Inc.",239:"Bitsplitters GmbH",240:"PayPal, Inc.",241:"Witron Technology Limited",242:"Aether Things\xA0Inc. (formerly Morse Project Inc.)",243:"Kent Displays Inc.",244:"Nautilus Inc.",245:"Smartifier Oy",246:"Elcometer Limited",247:"VSN Technologies Inc.",248:"AceUni Corp., Ltd.",249:"StickNFind",250:"Crystal Code AB",251:"KOUKAAM a.s.",252:"Delphi Corporation",253:"ValenceTech Limited",254:"Reserved",255:"Typo Products, LLC",256:"TomTom International BV",257:"Fugoo, Inc",258:"Keiser Corporation",259:"Bang & Olufsen A/S",260:"PLUS Locations Systems Pty Ltd",261:"Ubiquitous Computing Technology Corporation",262:"Innovative Yachtter Solutions",263:"William Demant Holding A/S",264:"Chicony Electronics Co., Ltd.",265:"Atus BV",266:"Codegate Ltd.",267:"ERi, Inc.",268:"Transducers Direct, LLC",269:"Fujitsu Ten Limited",270:"Audi AG",271:"HiSilicon Technologies Co., Ltd.",272:"Nippon Seiki Co., Ltd.",273:"Steelseries ApS",274:"vyzybl Inc.",275:"Openbrain Technologies, Co., Ltd.",276:"Xensr",277:"e.solutions",278:"1OAK Technologies",279:"Wimoto Technologies Inc",280:"Radius Networks, Inc.",281:"Wize Technology Co., Ltd.",282:"Qualcomm Labs, Inc.",283:"Aruba Networks",284:"Baidu",285:"Arendi AG",286:"Skoda Auto a.s.",287:"Volkswagon AG",288:"Porsche AG",289:"Sino Wealth Electronic Ltd.",290:"AirTurn, Inc.",291:"Kinsa, Inc.",292:"HID Global",293:"SEAT es",294:"Promethean Ltd.",295:"Salutica Allied Solutions",296:"GPSI Group Pty Ltd",297:"Nimble Devices Oy",298:"Changzhou Yongse Infotech Co., Ltd",299:"SportIQ",300:"TEMEC Instruments B.V.",301:"Sony Corporation",302:"ASSA ABLOY",303:"Clarion Co., Ltd.",304:"Warehouse Innovations",305:"Cypress Semiconductor Corporation",306:"MADS Inc",307:"Blue Maestro Limited",308:"Resolution Products, Inc.",309:"Airewear LLC",310:"Seed Labs, Inc. (formerly ETC sp. z.o.o.)",311:"Prestigio Plaza Ltd.",312:"NTEO Inc.",313:"Focus Systems Corporation",314:"Tencent Holdings Limited",315:"Allegion",316:"Murata Manufacuring Co., Ltd.",318:"Nod, Inc.",319:"B&B Manufacturing Company",320:"Alpine\xA0Electronics\xA0(China)\xA0Co.,\xA0Ltd",321:"FedEx Services",322:"Grape Systems Inc.",323:"Bkon Connect",324:"Lintech GmbH",325:"Novatel Wireless",326:"Ciright",327:"Mighty Cast, Inc.",328:"Ambimat Electronics",329:"Perytons Ltd.",330:"Tivoli Audio, LLC",331:"Master Lock",332:"Mesh-Net Ltd",333:"Huizhou Desay SV Automotive CO., LTD.",334:"Tangerine, Inc.",335:"B&W Group Ltd.",336:"Pioneer Corporation",337:"OnBeep",338:"Vernier Software & Technology",339:"ROL Ergo",340:"Pebble Technology",341:"NETATMO",342:"Accumulate AB",343:"Anhui Huami Information Technology Co., Ltd.",344:"Inmite s.r.o.",345:"ChefSteps, Inc.",346:"micas AG",347:"Biomedical Research Ltd.",348:"Pitius Tec S.L.",349:"Estimote, Inc.",350:"Unikey Technologies, Inc.",351:"Timer Cap Co.",352:"AwoX",353:"yikes",354:"MADSGlobal NZ Ltd.",355:"PCH International",356:"Qingdao Yeelink Information Technology Co., Ltd.",357:"Milwaukee Tool (formerly Milwaukee Electric Tools)",358:"MISHIK Pte Ltd",359:"Bayer HealthCare",360:"Spicebox LLC",361:"emberlight",362:"Cooper-Atkins Corporation",363:"Qblinks",364:"MYSPHERA",365:"LifeScan Inc",366:"Volantic AB",367:"Podo Labs, Inc",368:"Roche Diabetes Care AG",369:"Amazon Fulfillment Service",370:"Connovate Technology Private Limited",371:"Kocomojo, LLC",372:"Everykey LLC",373:"Dynamic Controls",374:"SentriLock",375:"I-SYST inc.",376:"CASIO COMPUTER CO., LTD.",377:"LAPIS Semiconductor Co., Ltd.",378:"Telemonitor, Inc.",379:"taskit GmbH",380:"Daimler AG",381:"BatAndCat",382:"BluDotz Ltd",383:"XTel ApS",384:"Gigaset Communications GmbH",385:"Gecko Health Innovations, Inc.",386:"HOP Ubiquitous",387:"To Be Assigned",388:"Nectar",389:"bel\u2019apps LLC",390:"CORE Lighting Ltd",391:"Seraphim Sense Ltd",392:"Unico RBC",393:"Physical Enterprises Inc.",394:"Able Trend Technology Limited",395:"Konica Minolta, Inc.",396:"Wilo SE",397:"Extron Design Services",398:"Fitbit, Inc.",399:"Fireflies Systems",400:"Intelletto Technologies Inc.",401:"FDK CORPORATION",402:"Cloudleaf, Inc",403:"Maveric Automation LLC",404:"Acoustic Stream Corporation",405:"Zuli",406:"Paxton Access Ltd",407:"WiSilica Inc",408:"Vengit Limited",409:"SALTO SYSTEMS S.L.",410:"TRON Forum (formerly T-Engine Forum)",411:"CUBETECH s.r.o.",412:"Cokiya Incorporated",413:"CVS Health",414:"Ceruus",415:"Strainstall Ltd",416:"Channel Enterprises (HK) Ltd.",417:"FIAMM",418:"GIGALANE.CO.,LTD",419:"EROAD",420:"Mine Safety Appliances",421:"Icon Health and Fitness",422:"Asandoo GmbH",423:"ENERGOUS CORPORATION",424:"Taobao",425:"Canon Inc.",426:"Geophysical Technology Inc.",427:"Facebook, Inc.",428:"Nipro Diagnostics, Inc.",429:"FlightSafety International",430:"Earlens Corporation",431:"Sunrise Micro Devices, Inc.",432:"Star Micronics Co., Ltd.",433:"Netizens Sp. z o.o.",434:"Nymi Inc.",435:"Nytec, Inc.",436:"Trineo Sp. z o.o.",437:"Nest Labs Inc.",438:"LM Technologies Ltd",439:"General Electric Company",440:"i+D3 S.L.",441:"HANA Micron",442:"Stages Cycling LLC",443:"Cochlear Bone Anchored Solutions AB",444:"SenionLab AB",445:"Syszone Co., Ltd",446:"Pulsate Mobile Ltd.",447:"Hong Kong HunterSun Electronic Limited",448:"pironex GmbH",449:"BRADATECH Corp.",450:"Transenergooil AG",451:"Bunch",452:"DME Microelectronics",453:"Bitcraze AB",454:"HASWARE Inc.",455:"Abiogenix Inc.",456:"Poly-Control ApS",457:"Avi-on",458:"Laerdal Medical AS",459:"Fetch My Pet",460:"Sam Labs Ltd.",461:"Chengdu Synwing Technology Ltd",462:"HOUWA SYSTEM DESIGN, k.k.",463:"BSH",464:"Primus Inter Pares Ltd",465:"August",466:"Gill Electronics",467:"Sky Wave Design",468:"Newlab S.r.l.",469:"ELAD srl",470:"G-wearables inc.",471:"Squadrone Systems Inc.",472:"Code Corporation",473:"Savant Systems LLC",474:"Logitech International SA",475:"Innblue Consulting",476:"iParking Ltd.",477:"Koninklijke Philips Electronics N.V.",478:"Minelab Electronics Pty Limited",479:"Bison Group Ltd.",480:"Widex A/S",481:"Jolla Ltd",482:"Lectronix, Inc.",483:"Caterpillar Inc",484:"Freedom Innovations",485:"Dynamic Devices Ltd",486:"Technology Solutions (UK) Ltd",487:"IPS Group Inc.",488:"STIR",489:"Sano, Inc",490:"Advanced Application Design, Inc.",491:"AutoMap LLC",492:"Spreadtrum Communications Shanghai Ltd",493:"CuteCircuit LTD",494:"Valeo Service",495:"Fullpower Technologies, Inc.",496:"KloudNation",497:"Zebra Technologies Corporation",498:"Itron, Inc.",499:"The University of Tokyo",500:"UTC Fire and Security",501:"Cool Webthings Limited",502:"DJO Global",503:"Gelliner Limited",504:"Anyka (Guangzhou) Microelectronics Technology Co, LTD",505:"Medtronic, Inc.",506:"Gozio, Inc.",507:"Form Lifting, LLC",508:"Wahoo Fitness, LLC",509:"Kontakt Micro-Location Sp. z o.o.",510:"Radio System Corporation",511:"Freescale Semiconductor, Inc.",512:"Verifone Systems PTe Ltd. Taiwan Branch",513:"AR Timing",514:"Rigado LLC",515:"Kemppi Oy",516:"Tapcentive Inc.",517:"Smartbotics Inc.",518:"Otter Products, LLC",519:"STEMP Inc.",520:"LumiGeek LLC",521:"InvisionHeart Inc.",522:"Macnica Inc. ",523:"Jaguar Land Rover Limited",524:"CoroWare Technologies, Inc",525:"Simplo Technology Co., LTD",526:"Omron Healthcare Co., LTD",527:"Comodule GMBH",528:"ikeGPS",529:"Telink Semiconductor Co. Ltd",530:"Interplan Co., Ltd",531:"Wyler AG",532:"IK Multimedia Production srl",533:"Lukoton Experience Oy",534:"MTI Ltd",535:"Tech4home, Lda",536:"Hiotech AB",537:"DOTT Limited",538:"Blue Speck Labs, LLC",539:"Cisco Systems, Inc",540:"Mobicomm Inc",541:"Edamic",542:"Goodnet, Ltd",543:"Luster Leaf Products Inc",544:"Manus Machina BV",545:"Mobiquity Networks Inc",546:"Praxis Dynamics",547:"Philip Morris Products S.A.",548:"Comarch SA",549:"Nestl Nespresso S.A.",550:"Merlinia A/S",551:"LifeBEAM Technologies",552:"Twocanoes Labs, LLC",553:"Muoverti Limited",554:"Stamer Musikanlagen GMBH",555:"Tesla Motors",556:"Pharynks Corporation",557:"Lupine",558:"Siemens AG",559:"Huami (Shanghai) Culture Communication CO., LTD",560:"Foster Electric Company, Ltd",561:"ETA SA",562:"x-Senso Solutions Kft",563:"Shenzhen SuLong Communication Ltd",564:"FengFan (BeiJing) Technology Co, Ltd",565:"Qrio Inc",566:"Pitpatpet Ltd",567:"MSHeli s.r.l.",568:"Trakm8 Ltd",569:"JIN CO, Ltd",570:"Alatech Tehnology",571:"Beijing CarePulse Electronic Technology Co, Ltd",572:"Awarepoint",573:"ViCentra B.V.",574:"Raven Industries",575:"WaveWare Technologies Inc.",576:"Argenox Technologies",577:"Bragi GmbH",578:"16Lab Inc",579:"Masimo Corp",580:"Iotera Inc",581:"Endress+Hauser",582:"ACKme Networks, Inc.",583:"FiftyThree Inc.",584:"Parker Hannifin Corp",585:"Transcranial Ltd",586:"Uwatec AG",587:"Orlan LLC",588:"Blue Clover Devices",589:"M-Way Solutions GmbH",590:"Microtronics Engineering GmbH",591:"Schneider Schreibgerte GmbH",592:"Sapphire Circuits LLC",593:"Lumo Bodytech Inc.",594:"UKC Technosolution",595:"Xicato Inc.",596:"Playbrush",597:"Dai Nippon Printing Co., Ltd.",598:"G24 Power Limited",599:"AdBabble Local Commerce Inc.",600:"Devialet SA",601:"ALTYOR",602:"University of Applied Sciences Valais/Haute Ecole Valaisanne",603:"Five Interactive, LLC dba Zendo",604:"NetEaseHangzhouNetwork co.Ltd.",605:"Lexmark International Inc.",606:"Fluke Corporation",607:"Yardarm Technologies",608:"SensaRx",609:"SECVRE GmbH",610:"Glacial Ridge Technologies",611:"Identiv, Inc.",612:"DDS, Inc.",613:"SMK Corporation",614:"Schawbel Technologies LLC",615:"XMI Systems SA",616:"Cerevo",617:"Torrox GmbH & Co KG",618:"Gemalto",619:"DEKA Research & Development Corp.",620:"Domster Tadeusz Szydlowski",621:"Technogym SPA",622:"FLEURBAEY BVBA",623:"Aptcode Solutions",624:"LSI ADL Technology",625:"Animas Corp",626:"Alps Electric Co., Ltd.",627:"OCEASOFT",628:"Motsai Research",629:"Geotab",630:"E.G.O. Elektro-Gertebau GmbH",631:"bewhere inc",632:"Johnson Outdoors Inc",633:"steute Schaltgerate GmbH & Co. KG",634:"Ekomini inc.",635:"DEFA AS",636:"Aseptika Ltd",637:"HUAWEI Technologies Co., Ltd. ( )",638:"HabitAware, LLC",639:"ruwido austria gmbh",640:"ITEC corporation",641:"StoneL",642:"Sonova AG",643:"Maven Machines, Inc.",644:"Synapse Electronics",645:"Standard Innovation Inc.",646:"RF Code, Inc.",647:"Wally Ventures S.L.",648:"Willowbank Electronics Ltd",649:"SK Telecom",650:"Jetro AS",651:"Code Gears LTD",652:"NANOLINK APS",653:"IF, LLC",654:"RF Digital Corp",655:"Church & Dwight Co., Inc",656:"Multibit Oy",657:"CliniCloud Inc",658:"SwiftSensors",659:"Blue Bite",660:"ELIAS GmbH",661:"Sivantos GmbH",662:"Petzl",663:"storm power ltd",664:"EISST Ltd",665:"Inexess Technology Simma KG",666:"Currant, Inc.",667:"C2 Development, Inc.",668:"Blue Sky Scientific, LLC",669:"ALOTTAZS LABS, LLC",670:"Kupson spol. s r.o.",671:"Areus Engineering GmbH",672:"Impossible Camera GmbH",673:"InventureTrack Systems",674:"LockedUp",675:"Itude",676:"Pacific Lock Company",677:"Tendyron Corporation ( )",678:"Robert Bosch GmbH",679:"Illuxtron international B.V.",680:"miSport Ltd.",681:"Chargelib",682:"Doppler Lab",683:"BBPOS Limited",684:"RTB Elektronik GmbH & Co. KG",685:"Rx Networks, Inc.",686:"WeatherFlow, Inc.",687:"Technicolor USA Inc.",688:"Bestechnic(Shanghai),Ltd",689:"Raden Inc",690:"JouZen Oy",691:"CLABER S.P.A.",692:"Hyginex, Inc.",693:"HANSHIN ELECTRIC RAILWAY CO.,LTD.",694:"Schneider Electric",695:"Oort Technologies LLC",696:"Chrono Therapeutics",697:"Rinnai Corporation",698:"Swissprime Technologies AG",699:"Koha.,Co.Ltd",700:"Genevac Ltd",701:"Chemtronics",702:"Seguro Technology Sp. z o.o.",703:"Redbird Flight Simulations",704:"Dash Robotics",705:"LINE Corporation",706:"Guillemot Corporation",707:"Techtronic Power Tools Technology Limited",708:"Wilson Sporting Goods",709:"Lenovo (Singapore) Pte Ltd. ( )",710:"Ayatan Sensors",711:"Electronics Tomorrow Limited",712:"VASCO Data Security International, Inc.",713:"PayRange Inc.",714:"ABOV Semiconductor",715:"AINA-Wireless Inc.",716:"Eijkelkamp Soil & Water",717:"BMA ergonomics b.v.",718:"Teva Branded Pharmaceutical Products R&D, Inc.",719:"Anima",720:"3M",721:"Empatica Srl",722:"Afero, Inc.",723:"Powercast Corporation",724:"Secuyou ApS",725:"OMRON Corporation",726:"Send Solutions",727:"NIPPON SYSTEMWARE CO.,LTD.",728:"Neosfar",729:"Fliegl Agrartechnik GmbH",730:"Gilvader",731:"Digi International Inc (R)",732:"DeWalch Technologies, Inc.",733:"Flint Rehabilitation Devices, LLC",734:"Samsung SDS Co., Ltd.",735:"Blur Product Development",736:"University of Michigan",737:"Victron Energy BV",738:"NTT docomo",739:"Carmanah Technologies Corp.",740:"Bytestorm Ltd.",741:"Espressif Incorporated ( () )",742:"Unwire",743:"Connected Yard, Inc.",744:"American Music Environments",745:"Sensogram Technologies, Inc.",746:"Fujitsu Limited",747:"Ardic Technology",748:"Delta Systems, Inc",749:"HTC Corporation",750:"Citizen Holdings Co., Ltd.",751:"SMART-INNOVATION.inc",752:"Blackrat Software",753:"The Idea Cave, LLC",754:"GoPro, Inc.",755:"AuthAir, Inc",756:"Vensi, Inc.",757:"Indagem Tech LLC",758:"Intemo Technologies",759:"DreamVisions co., Ltd.",760:"Runteq Oy Ltd",761:"IMAGINATION TECHNOLOGIES LTD",762:"CoSTAR TEchnologies",763:"Clarius Mobile Health Corp.",764:"Shanghai Frequen Microelectronics Co., Ltd.",765:"Uwanna, Inc.",766:"Lierda Science & Technology Group Co., Ltd.",767:"Silicon Laboratories",768:"World Moto Inc.",769:"Giatec Scientific Inc.",770:"Loop Devices, Inc",771:"IACA electronique",772:"Martians Inc",773:"Swipp ApS",774:"Life Laboratory Inc.",775:"FUJI INDUSTRIAL CO.,LTD.",776:"Surefire, LLC",777:"Dolby Labs",778:"Ellisys",779:"Magnitude Lighting Converters",780:"Hilti AG",781:"Devdata S.r.l.",782:"Deviceworx",783:"Shortcut Labs",784:"SGL Italia S.r.l.",785:"PEEQ DATA",786:"Ducere Technologies Pvt Ltd",787:"DiveNav, Inc.",788:"RIIG AI Sp. z o.o.",789:"Thermo Fisher Scientific",790:"AG Measurematics Pvt. Ltd.",791:"CHUO Electronics CO., LTD.",792:"Aspenta International",793:"Eugster Frismag AG",794:"Amber wireless GmbH",795:"HQ Inc",796:"Lab Sensor Solutions",797:"Enterlab ApS",798:"Eyefi, Inc.",799:"MetaSystem S.p.A.",800:"SONO ELECTRONICS. CO., LTD",801:"Jewelbots",802:"Compumedics Limited",803:"Rotor Bike Components",804:"Astro, Inc.",805:"Amotus Solutions",806:"Healthwear Technologies (Changzhou)Ltd",807:"Essex Electronics",808:"Grundfos A/S",809:"Eargo, Inc.",810:"Electronic Design Lab",811:"ESYLUX",812:"NIPPON SMT.CO.,Ltd",813:"BM innovations GmbH",814:"indoormap",815:"OttoQ Inc",816:"North Pole Engineering",817:"3flares Technologies Inc.",818:"Electrocompaniet A.S.",819:"Mul-T-Lock",820:"Corentium AS",821:"Enlighted Inc",822:"GISTIC",823:"AJP2 Holdings, LLC",824:"COBI GmbH",825:"Blue Sky Scientific, LLC",826:"Appception, Inc.",827:"Courtney Thorne Limited",828:"Virtuosys",829:"TPV Technology Limited",830:"Monitra SA",831:"Automation Components, Inc.",832:"Letsense s.r.l.",833:"Etesian Technologies LLC",834:"GERTEC BRASIL LTDA.",835:"Drekker Development Pty. Ltd.",836:"Whirl Inc",837:"Locus Positioning",838:"Acuity Brands Lighting, Inc",839:"Prevent Biometrics",840:"Arioneo",841:"VersaMe",842:"Vaddio",843:"Libratone A/S",844:"HM Electronics, Inc.",845:"TASER International, Inc.",846:"SafeTrust Inc.",847:"Heartland Payment Systems",848:"Bitstrata Systems Inc.",849:"Pieps GmbH",850:"iRiding(Xiamen)Technology Co.,Ltd.",851:"Alpha Audiotronics, Inc.",852:"TOPPAN FORMS CO.,LTD.",853:"Sigma Designs, Inc.",854:"Spectrum Brands, Inc.",855:"Polymap Wireless",856:"MagniWare Ltd.",857:"Novotec Medical GmbH",858:"Medicom Innovation Partner a/s",859:"Matrix Inc.",860:"Eaton Corporation",861:"KYS",862:"Naya Health, Inc.",863:"Acromag",864:"Insulet Corporation",865:"Wellinks Inc.",866:"ON Semiconductor",867:"FREELAP SA",868:"Favero Electronics Srl",869:"BioMech Sensor LLC",870:"BOLTT Sports technologies Private limited",871:"Saphe International",872:"Metormote AB",873:"littleBits",874:"SetPoint Medical",875:"BRControls Products BV",876:"Zipcar",877:"AirBolt Pty Ltd",878:"KeepTruckin Inc",879:"Motiv, Inc.",880:"Wazombi Labs O",881:"ORBCOMM",882:"Nixie Labs, Inc.",883:"AppNearMe Ltd",884:"Holman Industries",885:"Expain AS",886:"Electronic Temperature Instruments Ltd",887:"Plejd AB",888:"Propeller Health",889:"Shenzhen iMCO Electronic Technology Co.,Ltd",890:"Algoria",891:"Apption Labs Inc.",892:"Cronologics Corporation",893:"MICRODIA Ltd.",894:"lulabytes S.L.",895:"Nestec S.A.",896:"LLC MEGA - F service",897:"Sharp Corporation",898:"Precision Outcomes Ltd",899:"Kronos Incorporated",900:"OCOSMOS Co., Ltd.",901:"Embedded Electronic Solutions Ltd. dba e2Solutions",902:"Aterica Inc.",903:"BluStor PMC, Inc.",904:"Kapsch TrafficCom AB",905:"ActiveBlu Corporation",906:"Kohler Mira Limited",907:"Noke",908:"Appion Inc.",909:"Resmed Ltd",910:"Crownstone B.V.",911:"Xiaomi Inc.",912:"INFOTECH s.r.o.",913:"Thingsquare AB",914:"T&D",915:"LAVAZZA S.p.A.",916:"Netclearance Systems, Inc.",917:"SDATAWAY",918:"BLOKS GmbH",919:"LEGO System A/S",920:"Thetatronics Ltd",921:"Nikon Corporation",922:"NeST",923:"South Silicon Valley Microelectronics",924:"ALE International",925:"CareView Communications, Inc.",926:"SchoolBoard Limited",927:"Molex Corporation",928:"IVT Wireless Limited",929:"Alpine Labs LLC",930:"Candura Instruments",931:"SmartMovt Technology Co., Ltd",932:"Token Zero Ltd",933:"ACE CAD Enterprise Co., Ltd. (ACECAD)",934:"Medela, Inc",935:"AeroScout",936:"Esrille Inc.",937:"THINKERLY SRL",938:"Exon Sp. z o.o.",939:"Meizu Technology Co., Ltd.",940:"Smablo LTD",941:"XiQ",942:"Allswell Inc.",943:"Comm-N-Sense Corp DBA Verigo",944:"VIBRADORM GmbH",945:"Otodata Wireless Network Inc.",946:"Propagation Systems Limited",947:"Midwest Instruments & Controls",948:"Alpha Nodus, inc.",949:"petPOMM, Inc",950:"Mattel",951:"Airbly Inc.",952:"A-Safe Limited",953:"FREDERIQUE CONSTANT SA",954:"Maxscend Microelectronics Company Limited",955:"Abbott Diabetes Care",956:"ASB Bank Ltd",957:"amadas",958:"Applied Science, Inc.",959:"iLumi Solutions Inc.",960:"Arch Systems Inc.",961:"Ember Technologies, Inc.",962:"Snapchat Inc",963:"Casambi Technologies Oy",964:"Pico Technology Inc.",965:"St. Jude Medical, Inc.",966:"Intricon",967:"Structural Health Systems, Inc.",968:"Avvel International",969:"Gallagher Group",970:"In2things Automation Pvt. Ltd.",971:"SYSDEV Srl",972:"Vonkil Technologies Ltd",973:"Wynd Technologies, Inc.",974:"CONTRINEX S.A.",975:"MIRA, Inc.",976:"Watteam Ltd",977:"Density Inc.",978:"IOT Pot India Private Limited",979:"Sigma Connectivity AB",980:"PEG PEREGO SPA",981:"Wyzelink Systems Inc.",982:"Yota Devices LTD",983:"FINSECUR",984:"Zen-Me Labs Ltd",985:"3IWare Co., Ltd.",986:"EnOcean GmbH",987:"Instabeat, Inc",988:"Nima Labs",989:"Andreas Stihl AG & Co. KG",990:"Nathan Rhoades LLC",991:"Grob Technologies, LLC",992:"Actions (Zhuhai) Technology Co., Limited",993:"SPD Development Company Ltd",994:"Sensoan Oy",995:"Qualcomm Life Inc",996:"Chip-ing AG",997:"ffly4u",998:"IoT Instruments Oy",999:"TRUE Fitness Technology",1000:"Reiner Kartengeraete GmbH & Co. KG.",1001:"SHENZHEN LEMONJOY TECHNOLOGY CO., LTD.",1002:"Hello Inc.",1003:"Evollve Inc.",1004:"Jigowatts Inc.",1005:"BASIC MICRO.COM,INC.",1006:"CUBE TECHNOLOGIES",1007:"foolography GmbH",1008:"CLINK",1009:"Hestan Smart Cooking Inc.",1010:"WindowMaster A/S",1011:"Flowscape AB",1012:"PAL Technologies Ltd",1013:"WHERE, Inc.",1014:"Iton Technology Corp.",1015:"Owl Labs Inc.",1016:"Rockford Corp.",1017:"Becon Technologies Co.,Ltd.",1018:"Vyassoft Technologies Inc",1019:"Nox Medical",1020:"Kimberly-Clark",1021:"Trimble Navigation Ltd.",1022:"Littelfuse",1023:"Withings",1024:"i-developer IT Beratung UG",1026:"Sears Holdings Corporation",1027:"Gantner Electronic GmbH",1028:"Authomate Inc",1029:"Vertex International, Inc.",1030:"Airtago",1031:"Swiss Audio SA",1032:"ToGetHome Inc.",1033:"AXIS",1034:"Openmatics",1035:"Jana Care Inc.",1036:"Senix Corporation",1037:"NorthStar Battery Company, LLC",1038:"SKF (U.K.) Limited",1039:"CO-AX Technology, Inc.",1040:"Fender Musical Instruments",1041:"Luidia Inc",1042:"SEFAM",1043:"Wireless Cables Inc",1044:"Lightning Protection International Pty Ltd",1045:"Uber Technologies Inc",1046:"SODA GmbH",1047:"Fatigue Science",1048:"Alpine Electronics Inc.",1049:"Novalogy LTD",1050:"Friday Labs Limited",1051:"OrthoAccel Technologies",1052:"WaterGuru, Inc.",1053:"Benning Elektrotechnik und Elektronik GmbH & Co. KG",1054:"Dell Computer Corporation",1055:"Kopin Corporation",1056:"TecBakery GmbH",1057:"Backbone Labs, Inc.",1058:"DELSEY SA",1059:"Chargifi Limited",1060:"Trainesense Ltd.",1061:"Unify Software and Solutions GmbH & Co. KG",1062:"Husqvarna AB",1063:"Focus fleet and fuel management inc",1064:"SmallLoop, LLC",1065:"Prolon Inc.",1066:"BD Medical",1067:"iMicroMed Incorporated",1068:"Ticto N.V.",1069:"Meshtech AS",1070:"MemCachier Inc.",1071:"Danfoss A/S",1072:"SnapStyk Inc.",1073:"Amyway Corporation",1074:"Silk Labs, Inc.",1075:"Pillsy Inc.",1076:"Hatch Baby, Inc.",1077:"Blocks Wearables Ltd.",1078:"Drayson Technologies (Europe) Limited",1079:"eBest IOT Inc.",1080:"Helvar Ltd",1081:"Radiance Technologies",1082:"Nuheara Limited",1083:"Appside co., ltd.",1084:"DeLaval",1085:"Coiler Corporation",1086:"Thermomedics, Inc.",1087:"Tentacle Sync GmbH",1088:"Valencell, Inc.",1089:"iProtoXi Oy",1090:"SECOM CO., LTD.",1091:"Tucker International LLC",1092:"Metanate Limited",1093:"Kobian Canada Inc.",1094:"NETGEAR, Inc.",1095:"Fabtronics Australia Pty Ltd",1096:"Grand Centrix GmbH",1097:"1UP USA.com llc",1098:"SHIMANO INC.",1099:"Nain Inc.",1100:"LifeStyle Lock, LLC",1101:"VEGA Grieshaber KG",1102:"Xtrava Inc.",1103:"TTS Tooltechnic Systems AG & Co. KG",1104:"Teenage Engineering AB",1105:"Tunstall Nordic AB",1106:"Svep Design Center AB",1107:"GreenPeak Technologies BV",1108:"Sphinx Electronics GmbH & Co KG",1109:"Atomation",1110:"Nemik Consulting Inc",1111:"RF INNOVATION",1112:"Mini Solution Co., Ltd.",1113:"Lumenetix, Inc",1114:"2048450 Ontario Inc",1115:"SPACEEK LTD",1116:"Delta T Corporation",1117:"Boston Scientific Corporation",1118:"Nuviz, Inc.",1119:"Real Time Automation, Inc.",1120:"Kolibree",1121:"vhf elektronik GmbH",1122:"Bonsai Systems GmbH",1123:"Fathom Systems Inc.",1124:"Bellman & Symfon",1125:"International Forte Group LLC",1126:"CycleLabs Solutions inc.",1127:"Codenex Oy",1128:"Kynesim Ltd",1129:"Palago AB",1130:"INSIGMA INC.",1131:"PMD Solutions",1132:"Qingdao Realtime Technology Co., Ltd.",1133:"BEGA Gantenbrink-Leuchten KG",1134:"Pambor Ltd.",65535:"SPECIAL USE/DEFAULT"}});var require_bluetooth=__commonJS((exports)=>{var exec3=__require("child_process").exec,execSync17=__require("child_process").execSync,path6=__require("path"),util4=require_util3(),bluetoothVendors=require_bluetoothVendors(),fs3=__require("fs"),_platform=process.platform,_linux=_platform==="linux"||_platform==="android",_darwin=_platform==="darwin",_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";function parseBluetoothType(str5){let result2="";if(str5.indexOf("keyboard")>=0)result2="Keyboard";if(str5.indexOf("mouse")>=0)result2="Mouse";if(str5.indexOf("trackpad")>=0)result2="Trackpad";if(str5.indexOf("audio")>=0)result2="Audio";if(str5.indexOf("sound")>=0)result2="Audio";if(str5.indexOf("microph")>=0)result2="Microphone";if(str5.indexOf("speaker")>=0)result2="Speaker";if(str5.indexOf("headset")>=0)result2="Headset";if(str5.indexOf("phone")>=0)result2="Phone";if(str5.indexOf("macbook")>=0)result2="Computer";if(str5.indexOf("imac")>=0)result2="Computer";if(str5.indexOf("ipad")>=0)result2="Tablet";if(str5.indexOf("watch")>=0)result2="Watch";if(str5.indexOf("headphone")>=0)result2="Headset";return result2}function parseBluetoothManufacturer(str5){let result2=str5.split(" ")[0];if(str5=str5.toLowerCase(),str5.indexOf("apple")>=0)result2="Apple";if(str5.indexOf("ipad")>=0)result2="Apple";if(str5.indexOf("imac")>=0)result2="Apple";if(str5.indexOf("iphone")>=0)result2="Apple";if(str5.indexOf("magic mouse")>=0)result2="Apple";if(str5.indexOf("magic track")>=0)result2="Apple";if(str5.indexOf("macbook")>=0)result2="Apple";return result2}function parseBluetoothVendor(str5){let id=parseInt(str5);if(!isNaN(id))return bluetoothVendors[id]}function parseLinuxBluetoothInfo(lines,macAddr1,macAddr2){let result2={};return result2.device=null,result2.name=util4.getValue(lines,"name","="),result2.manufacturer=null,result2.macDevice=macAddr1,result2.macHost=macAddr2,result2.batteryPercent=null,result2.type=parseBluetoothType(result2.name.toLowerCase()),result2.connected=!1,result2}function parseDarwinBluetoothDevices(bluetoothObject,macAddr2){let result2={},typeStr=((bluetoothObject.device_minorClassOfDevice_string||bluetoothObject.device_majorClassOfDevice_string||bluetoothObject.device_minorType||"")+(bluetoothObject.device_name||"")).toLowerCase();return result2.device=bluetoothObject.device_services||"",result2.name=bluetoothObject.device_name||"",result2.manufacturer=bluetoothObject.device_manufacturer||parseBluetoothVendor(bluetoothObject.device_vendorID)||parseBluetoothManufacturer(bluetoothObject.device_name||"")||"",result2.macDevice=(bluetoothObject.device_addr||bluetoothObject.device_address||"").toLowerCase().replace(/-/g,":"),result2.macHost=macAddr2,result2.batteryPercent=bluetoothObject.device_batteryPercent||null,result2.type=parseBluetoothType(typeStr),result2.connected=bluetoothObject.device_isconnected==="attrib_Yes"||!1,result2}function parseWindowsBluetooth(lines){let result2={};return result2.device=null,result2.name=util4.getValue(lines,"name",":"),result2.manufacturer=util4.getValue(lines,"manufacturer",":"),result2.macDevice=null,result2.macHost=null,result2.batteryPercent=null,result2.type=parseBluetoothType(result2.name.toLowerCase()),result2.connected=null,result2}function bluetoothDevices(callback){return new Promise((resolve14)=>{process.nextTick(()=>{let result2=[];if(_linux){util4.getFilesInPath("/var/lib/bluetooth/").forEach((element)=>{let filename=path6.basename(element),pathParts=element.split("/"),macAddr1=pathParts.length>=6?pathParts[pathParts.length-2]:null,macAddr2=pathParts.length>=7?pathParts[pathParts.length-3]:null;if(filename==="info"){let infoFile=fs3.readFileSync(element,{encoding:"utf8"}).split(`
|
|
3148
3183
|
`);result2.push(parseLinuxBluetoothInfo(infoFile,macAddr1,macAddr2))}});try{let hdicon=execSync17("hcitool con",util4.execOptsLinux).toString().toLowerCase();for(let i2=0;i2<result2.length;i2++)if(result2[i2].macDevice&&result2[i2].macDevice.length>10&&hdicon.indexOf(result2[i2].macDevice.toLowerCase())>=0)result2[i2].connected=!0}catch{util4.noop()}if(callback)callback(result2);resolve14(result2)}if(_darwin)exec3("system_profiler SPBluetoothDataType -json",(error2,stdout)=>{if(!error2)try{let outObj=JSON.parse(stdout.toString());if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_title&&outObj.SPBluetoothDataType[0].device_title.length){let macAddr2=null;if(outObj.SPBluetoothDataType[0].local_device_title&&outObj.SPBluetoothDataType[0].local_device_title.general_address)macAddr2=outObj.SPBluetoothDataType[0].local_device_title.general_address.toLowerCase().replace(/-/g,":");outObj.SPBluetoothDataType[0].device_title.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0];let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_connected&&outObj.SPBluetoothDataType[0].device_connected.length){let macAddr2=outObj.SPBluetoothDataType[0].controller_properties&&outObj.SPBluetoothDataType[0].controller_properties.controller_address?outObj.SPBluetoothDataType[0].controller_properties.controller_address.toLowerCase().replace(/-/g,":"):null;outObj.SPBluetoothDataType[0].device_connected.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0],innerObject.device_isconnected="attrib_Yes";let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_not_connected&&outObj.SPBluetoothDataType[0].device_not_connected.length){let macAddr2=outObj.SPBluetoothDataType[0].controller_properties&&outObj.SPBluetoothDataType[0].controller_properties.controller_address?outObj.SPBluetoothDataType[0].controller_properties.controller_address.toLowerCase().replace(/-/g,":"):null;outObj.SPBluetoothDataType[0].device_not_connected.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0],innerObject.device_isconnected="attrib_No";let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}}catch{util4.noop()}if(callback)callback(result2);resolve14(result2)});if(_windows)util4.powerShell("Get-CimInstance Win32_PNPEntity | select PNPClass, Name, Manufacturer, Status, Service, ConfigManagerErrorCode, Present | fl").then((stdout,error2)=>{if(!error2)stdout.toString().split(/\n\s*\n/).forEach((part)=>{let lines=part.split(`
|
|
3149
|
-
`),service=util4.getValue(lines,"Service",":"),errorCode=util4.getValue(lines,"ConfigManagerErrorCode",":");if(util4.getValue(lines,"PNPClass",":").toLowerCase()==="bluetooth"&&errorCode==="0"&&service==="")result2.push(parseWindowsBluetooth(lines))});if(callback)callback(result2);resolve14(result2)});if(_freebsd||_netbsd||_openbsd||_sunos)resolve14(null)})})}exports.bluetoothDevices=bluetoothDevices});var require_lib5=__commonJS((exports)=>{var lib_version=require_package().version,util4=require_util3(),system=require_system(),osInfo=require_osinfo(),cpu=require_cpu(),memory=require_memory(),battery=require_battery(),graphics=require_graphics(),filesystem=require_filesystem(),network=require_network(),wifi=require_wifi(),processes=require_processes(),users=require_users(),internet=require_internet(),docker=require_docker(),vbox=require_virtualbox(),printer=require_printer(),usb=require_usb(),audio=require_audio(),bluetooth=require_bluetooth(),_platform=process.platform,_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";if(_windows)util4.getCodepage(),util4.getPowershell();function version(){return lib_version}function getStaticData(callback){return new Promise((resolve14)=>{process.nextTick(()=>{let data={};data.version=version(),Promise.all([system.system(),system.bios(),system.baseboard(),system.chassis(),osInfo.osInfo(),osInfo.uuid(),osInfo.versions(),cpu.cpu(),cpu.cpuFlags(),graphics.graphics(),network.networkInterfaces(),memory.memLayout(),filesystem.diskLayout(),audio.audio(),bluetooth.bluetoothDevices(),usb.usb(),printer.printer()]).then((res)=>{if(data.system=res[0],data.bios=res[1],data.baseboard=res[2],data.chassis=res[3],data.os=res[4],data.uuid=res[5],data.versions=res[6],data.cpu=res[7],data.cpu.flags=res[8],data.graphics=res[9],data.net=res[10],data.memLayout=res[11],data.diskLayout=res[12],data.audio=res[13],data.bluetooth=res[14],data.usb=res[15],data.printer=res[16],callback)callback(data);resolve14(data)})})})}function getDynamicData(srv,iface,callback){if(util4.isFunction(iface))callback=iface,iface="";if(util4.isFunction(srv))callback=srv,srv="";return new Promise((resolve14)=>{process.nextTick(()=>{iface=iface||network.getDefaultNetworkInterface(),srv=srv||"";let functionProcessed=(()=>{let totalFunctions=15;if(_windows)totalFunctions=13;if(_freebsd||_openbsd||_netbsd)totalFunctions=11;if(_sunos)totalFunctions=6;return function(){if(--totalFunctions===0){if(callback)callback(data);resolve14(data)}}})(),data={};if(data.time=osInfo.time(),data.node=process.versions.node,data.v8=process.versions.v8,cpu.cpuCurrentSpeed().then((res)=>{data.cpuCurrentSpeed=res,functionProcessed()}),users.users().then((res)=>{data.users=res,functionProcessed()}),processes.processes().then((res)=>{data.processes=res,functionProcessed()}),cpu.currentLoad().then((res)=>{data.currentLoad=res,functionProcessed()}),!_sunos)cpu.cpuTemperature().then((res)=>{data.temp=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)network.networkStats(iface).then((res)=>{data.networkStats=res,functionProcessed()});if(!_sunos)network.networkConnections().then((res)=>{data.networkConnections=res,functionProcessed()});if(memory.mem().then((res)=>{data.mem=res,functionProcessed()}),!_sunos)battery().then((res)=>{data.battery=res,functionProcessed()});if(!_sunos)processes.services(srv).then((res)=>{data.services=res,functionProcessed()});if(!_sunos)filesystem.fsSize().then((res)=>{data.fsSize=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.fsStats().then((res)=>{data.fsStats=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.disksIO().then((res)=>{data.disksIO=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)wifi.wifiNetworks().then((res)=>{data.wifiNetworks=res,functionProcessed()});internet.inetLatency().then((res)=>{data.inetLatency=res,functionProcessed()})})})}function getAllData(srv,iface,callback){return new Promise((resolve14)=>{process.nextTick(()=>{let data={};if(iface&&util4.isFunction(iface)&&!callback)callback=iface,iface="";if(srv&&util4.isFunction(srv)&&!iface&&!callback)callback=srv,srv="",iface="";getStaticData().then((res)=>{data=res,getDynamicData(srv,iface).then((res2)=>{for(let key in res2)if({}.hasOwnProperty.call(res2,key))data[key]=res2[key];if(callback)callback(data);resolve14(data)})})})})}function get3(valueObject,callback){return new Promise((resolve14)=>{process.nextTick(()=>{let allPromises=Object.keys(valueObject).filter((func)=>({}).hasOwnProperty.call(exports,func)).map((func)=>{let params=valueObject[func].substring(valueObject[func].lastIndexOf("(")+1,valueObject[func].lastIndexOf(")")),funcWithoutParams=func.indexOf(")")>=0?func.split(")")[1].trim():func;if(funcWithoutParams=func.indexOf("|")>=0?func.split("|")[0].trim():funcWithoutParams,params)return exports[funcWithoutParams](params);else return exports[funcWithoutParams]("")});Promise.all(allPromises).then((data)=>{let result2={},i2=0;for(let key in valueObject)if({}.hasOwnProperty.call(valueObject,key)&&{}.hasOwnProperty.call(exports,key)&&data.length>i2){if(valueObject[key]==="*"||valueObject[key]==="all")result2[key]=data[i2];else{let keys=valueObject[key],filter="",filterParts=[];if(keys.indexOf(")")>=0)keys=keys.split(")")[1].trim();if(keys.indexOf("|")>=0)filter=keys.split("|")[1].trim(),filterParts=filter.split(":"),keys=keys.split("|")[0].trim();if(keys=keys.replace(/,/g," ").replace(/ +/g," ").split(" "),data[i2])if(Array.isArray(data[i2])){let partialArray=[];data[i2].forEach((element)=>{let partialRes={};if(keys.length===1&&(keys[0]==="*"||keys[0]==="all"))partialRes=element;else keys.forEach((k2)=>{if({}.hasOwnProperty.call(element,k2))partialRes[k2]=element[k2]});if(filter&&filterParts.length===2){if({}.hasOwnProperty.call(partialRes,filterParts[0].trim())){let val=partialRes[filterParts[0].trim()];if(typeof val==="number"){if(val===parseFloat(filterParts[1].trim()))partialArray.push(partialRes)}else if(typeof val==="string"){if(val.toLowerCase()===filterParts[1].trim().toLowerCase())partialArray.push(partialRes)}}}else partialArray.push(partialRes)}),result2[key]=partialArray}else{let partialRes={};keys.forEach((k2)=>{if({}.hasOwnProperty.call(data[i2],k2))partialRes[k2]=data[i2][k2]}),result2[key]=partialRes}else result2[key]={}}i2++}if(callback)callback(result2);resolve14(result2)})})})}function observe(valueObject,interval,callback){let _data=null;return setInterval(()=>{get3(valueObject).then((data)=>{if(JSON.stringify(_data)!==JSON.stringify(data))_data=Object.assign({},data),callback(data)})},interval)}exports.version=version;exports.system=system.system;exports.bios=system.bios;exports.baseboard=system.baseboard;exports.chassis=system.chassis;exports.time=osInfo.time;exports.osInfo=osInfo.osInfo;exports.versions=osInfo.versions;exports.shell=osInfo.shell;exports.uuid=osInfo.uuid;exports.cpu=cpu.cpu;exports.cpuFlags=cpu.cpuFlags;exports.cpuCache=cpu.cpuCache;exports.cpuCurrentSpeed=cpu.cpuCurrentSpeed;exports.cpuTemperature=cpu.cpuTemperature;exports.currentLoad=cpu.currentLoad;exports.fullLoad=cpu.fullLoad;exports.mem=memory.mem;exports.memLayout=memory.memLayout;exports.battery=battery;exports.graphics=graphics.graphics;exports.fsSize=filesystem.fsSize;exports.fsOpenFiles=filesystem.fsOpenFiles;exports.blockDevices=filesystem.blockDevices;exports.fsStats=filesystem.fsStats;exports.disksIO=filesystem.disksIO;exports.diskLayout=filesystem.diskLayout;exports.networkInterfaceDefault=network.networkInterfaceDefault;exports.networkGatewayDefault=network.networkGatewayDefault;exports.networkInterfaces=network.networkInterfaces;exports.networkStats=network.networkStats;exports.networkConnections=network.networkConnections;exports.wifiNetworks=wifi.wifiNetworks;exports.wifiInterfaces=wifi.wifiInterfaces;exports.wifiConnections=wifi.wifiConnections;exports.services=processes.services;exports.processes=processes.processes;exports.processLoad=processes.processLoad;exports.users=users.users;exports.inetChecksite=internet.inetChecksite;exports.inetLatency=internet.inetLatency;exports.dockerInfo=docker.dockerInfo;exports.dockerImages=docker.dockerImages;exports.dockerContainers=docker.dockerContainers;exports.dockerContainerStats=docker.dockerContainerStats;exports.dockerContainerProcesses=docker.dockerContainerProcesses;exports.dockerVolumes=docker.dockerVolumes;exports.dockerAll=docker.dockerAll;exports.vboxInfo=vbox.vboxInfo;exports.printer=printer.printer;exports.usb=usb.usb;exports.audio=audio.audio;exports.bluetoothDevices=bluetooth.bluetoothDevices;exports.getStaticData=getStaticData;exports.getDynamicData=getDynamicData;exports.getAllData=getAllData;exports.get=get3;exports.observe=observe;exports.powerShellStart=util4.powerShellStart;exports.powerShellRelease=util4.powerShellRelease});import os4 from"os";function toGB(bytes){return Math.round(bytes/1073741824*10)/10}function bar(percent,width){let p=Math.max(0,Math.min(100,percent)),filled=Math.round(p/100*width);return`[${"=".repeat(filled)}${"-".repeat(width-filled)}]`}function pickColor(percent){if(percent>80)return palette.error;if(percent>50)return palette.warning;return palette.emerald}function SystemStats(){let[stats,setStats]=import_react19.useState(null),mountedRef=import_react19.useRef(!0);if(import_react19.useEffect(()=>{mountedRef.current=!0;async function refresh(){try{let[cpu2,mem]=await Promise.all([import_systeminformation.default.currentLoad(),import_systeminformation.default.mem()]);if(!mountedRef.current)return;let coreCount=os4.cpus().length,avg1=os4.loadavg()[0],sorted=cpu2.cpus.map((c,i2)=>({id:i2,load:Math.round(c.load)})).sort((a,b3)=>b3.load-a.load);setStats({cpu:{combined:Math.round(cpu2.currentLoad),hotCores:sorted.slice(0,3),coreCount},ram:{usedGB:toGB(mem.active),totalGB:toGB(mem.total),percent:mem.total>0?Math.round(mem.active/mem.total*100):0},swap:{usedGB:toGB(mem.swapused),totalGB:toGB(mem.swaptotal),percent:mem.swaptotal>0?Math.round(mem.swapused/mem.swaptotal*100):0},load:{percent:coreCount>0?Math.round(avg1/coreCount*100):0,busy:Math.round(avg1*10)/10,total:coreCount}})}catch{}}refresh();let timer2=setInterval(refresh,3000);return()=>{mountedRef.current=!1,clearInterval(timer2)}},[]),!stats)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);let{cpu,ram,swap,load:load3}=stats,hotStr=cpu.hotCores.map((c)=>`#${c.id} ${c.load}%`).join(" ");return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgLight,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"CPU "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(cpu.combined),children:`${String(cpu.combined).padStart(3)}% ${bar(cpu.combined,8)}`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` ${cpu.coreCount}c`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" hot "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.warning,children:hotStr},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"RAM "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(ram.percent),children:`${ram.usedGB}/${ram.totalGB}G ${bar(ram.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),swap.totalGB>0?import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"SWP "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(swap.percent),children:`${swap.usedGB}/${swap.totalGB}G ${bar(swap.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Load "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(load3.percent),children:`${load3.percent}%`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` (${load3.busy}/${load3.total} busy)`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var import_react19,import_systeminformation;var init_SystemStats=__esm(()=>{init_version();init_theme2();init_jsx_dev_runtime();import_react19=__toESM(require_react_development(),1),import_systeminformation=__toESM(require_lib5(),1)});function validateName(name){if(name.length===0)return null;try{return validateBranchName(name),null}catch(err){return err instanceof Error?err.message:String(err)}}function TeamCreate({availableAgents,workspaceRoot,onConfirm,onCancel}){let[step,setStep]=import_react21.useState("name"),[teamName,setTeamName]=import_react21.useState(""),[selected,setSelected]=import_react21.useState(()=>new Set),[memberCursor,setMemberCursor]=import_react21.useState(0),nameError=import_react21.useMemo(()=>validateName(teamName),[teamName]),nameValid=teamName.length>0&&nameError===null,intent=import_react21.useMemo(()=>({kind:"create-team",name:teamName.length>0?teamName:"TEAM_NAME",repo:workspaceRoot}),[teamName,workspaceRoot]),handleNameChange=import_react21.useCallback((value)=>{setTeamName(value)},[]),advanceFromName=import_react21.useCallback(()=>{if(!nameValid)return;setStep("members")},[nameValid]),toggleMember=import_react21.useCallback((name)=>{setSelected((prev)=>{let next=new Set(prev);if(next.has(name))next.delete(name);else next.add(name);return next})},[]),confirmMembers=import_react21.useCallback(()=>{onConfirm({teamName,members:Array.from(selected)})},[onConfirm,teamName,selected]);return useKeyboard((key)=>{if(step==="name"){handleNameStepKey(key,{onCancel,nameValid,advanceFromName});return}handleMembersStepKey(key,{availableAgents,memberCursor,setStep,setMemberCursor,toggleMember,confirmMembers})}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.violet,backgroundColor:"#111111",paddingX:3,paddingY:1,flexDirection:"column",width:64,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"New team"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:step==="name"?" \u2014 step 1 of 2":" \u2014 step 2 of 2"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),step==="name"?import_jsx_dev_runtime2.jsxDEV(NameStep,{value:teamName,onChange:handleNameChange,onSubmit:advanceFromName,errorMessage:nameError},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV(MembersStep,{agents:availableAgents,selected,cursor:memberCursor},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent,hint:step==="name"?"Enter: next \xB7 Esc: cancel":"Space: toggle \xB7 Enter: create \xB7 Esc: back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function NameStep({value,onChange,onSubmit,errorMessage}){return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Team name (git-branch-safe):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{value,onInput:onChange,onChange,onSubmit,focused:!0,placeholder:"feat/auth-bug",backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this),errorMessage!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function MembersStep({agents,selected,cursor}){if(agents.length===0)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Members can be hired later via `genie team hire`."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Select members (space to toggle):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:agents.map((name,idx)=>{let isSelected=selected.has(name),isCursor=idx===cursor,tick=isSelected?"[x]":"[ ]",prefix=isCursor?"\u25B6 ":" ";return import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:isCursor?palette.cyan:palette.textMuted,children:prefix},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:isSelected?palette.success:palette.textDim,children:tick},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:` ${name}`},void 0,!1,void 0,this)]},name,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function isEnter(key){return key.name==="enter"||key.name==="return"}function handleNameStepKey(key,opts){if(key.name==="escape"){opts.onCancel();return}if(isEnter(key)&&opts.nameValid)opts.advanceFromName()}function handleMembersStepKey(key,opts){if(key.name==="escape"){opts.setStep("name");return}if(opts.availableAgents.length===0){if(isEnter(key))opts.confirmMembers();return}if(key.name==="up"||key.name==="k"){opts.setMemberCursor((prev)=>prev<=0?opts.availableAgents.length-1:prev-1);return}if(key.name==="down"||key.name==="j"){opts.setMemberCursor((prev)=>prev>=opts.availableAgents.length-1?0:prev+1);return}if(key.name==="space"){let name=opts.availableAgents[opts.memberCursor];if(name)opts.toggleMember(name);return}if(isEnter(key))opts.confirmMembers()}var import_react21;var init_TeamCreate=__esm(async()=>{init_team_manager();init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react21=__toESM(require_react_development(),1)});function getNodeIcon(node){if(node.type==="agent")return getAgentIcon(node);switch(node.type){case"session":return node.data.attached?"\u25B6":"\u25B8";case"window":return node.data.active?"\u25A0":"\u25A1";case"pane":return getPaneIcon(node);default:return" "}}function getAgentIcon(node){switch(node.wsAgentState){case"running":return"\u25CF";case"stopped":return"\u25CB";case"error":return"\u2298";case"spawning":return"\u231B";default:return"\u25CB"}}function getPaneIcon(node){if(node.data.isDead)return"\u2718";if(node.agentState==="working")return"\u25CF";if(node.agentState==="idle")return"\u25CB";if(node.agentState==="permission")return"\u26A0";if(node.agentState==="error")return"\u2718";if(node.data.command==="claude")return"\u25C6";return"\u25CB"}function getNodeColor(node){if(node.type==="agent")return getAgentColor(node);switch(node.type){case"session":return node.data.attached?palette.emerald:palette.textDim;case"window":return node.data.active?palette.cyan:palette.text;case"pane":return getPaneColor(node);default:return palette.text}}function getAgentColor(node){switch(node.wsAgentState){case"running":return palette.emerald;case"stopped":return palette.textDim;case"error":return palette.error;case"spawning":return palette.warning;default:return palette.textDim}}function getPaneColor(node){if(node.data.isDead)return palette.error;if(node.agentState==="working")return palette.cyan;if(node.agentState==="permission")return palette.warning;if(node.agentState==="error")return palette.error;if(node.agentState==="idle")return palette.textDim;if(node.data.command==="claude")return palette.cyan;return palette.textDim}function getNodeSuffix(node){if(node.type==="agent"){if(node.wsAgentState==="spawning"&&node.activePanes===0)return" [stuck \u2014 press R to retry]";let wc=node.data.windowCount;if(wc>1)return` (${wc} windows)`;if(wc===1)return" (1 window)";return""}if(node.type==="session"||node.type==="pane"){let count=node.activePanes;if(count>0)return` ${icons.agent}${count}`}return""}function getStateColor(state){switch(state){case"working":return palette.cyan;case"idle":return palette.textDim;case"permission":return palette.warning;case"error":return palette.error;default:return palette.textMuted}}var import_react22,TreeNodeRow;var init_TreeNode=__esm(()=>{init_theme2();init_jsx_dev_runtime();import_react22=__toESM(require_react_development(),1),TreeNodeRow=import_react22.memo(function({node,selected,onSelect,onToggle,onContextMenu}){let indent=" ".repeat(node.depth),hasChildren=node.children.length>0,expandIcon=hasChildren?node.expanded?icons.expanded:icons.collapsed:" ",icon=getNodeIcon(node),color2=getNodeColor(node),suffix=getNodeSuffix(node);return import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",backgroundColor:selected?palette.violet:void 0,onMouseDown:(event)=>{if(event.button===2&&onContextMenu){onSelect(node.id),onContextMenu(node.id);return}if(onSelect(node.id),hasChildren)onToggle(node.id)},children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[indent,expandIcon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:color2,children:[icon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:selected?"#ffffff":palette.text,children:node.label},void 0,!1,void 0,this),suffix?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:suffix},void 0,!1,void 0,this):null,node.agentState?import_jsx_dev_runtime2.jsxDEV("span",{fg:getStateColor(node.agentState),children:[" ",node.agentState]},void 0,!0,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:` [${node.type}]`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)})});function Nav({onTmuxSessionSelect,onNewAgentWindow,workspaceRoot,initialAgent,keyboardDisabled=!1}){let[diagnostics,setDiagnostics]=import_react24.useState(null),[sessionTree,setSessionTree]=import_react24.useState([]),[selectedIndex,setSelectedIndex]=import_react24.useState(0),[requestedInitialAgent,setRequestedInitialAgent]=import_react24.useState(initialAgent),[contextMenuNodeId,setContextMenuNodeId]=import_react24.useState(null),[spawnIntoAgent,setSpawnIntoAgent]=import_react24.useState(null),[spawnPickerTarget,setSpawnPickerTarget]=import_react24.useState(null),lastTarget=import_react24.useRef(null),selectedNodeId=import_react24.useRef(null);import_react24.useEffect(()=>{let active=!0;async function refresh(){try{let snap=await collectDiagnostics();if(!active)return;setDiagnostics(snap);let signaledAgent=consumeInitialAgentSignal();if(signaledAgent)setRequestedInitialAgent(signaledAgent)}catch(err){console.error("TUI: diagnostics failed:",err)}}refresh();let timer2=setInterval(refresh,2000);return()=>{active=!1,clearInterval(timer2)}},[]),import_react24.useEffect(()=>{if(!diagnostics)return;let newTree;if(workspaceRoot){let agentNames=scanAgents(workspaceRoot);newTree=buildWorkspaceTree({agentNames,sessions:diagnostics.sessions,executors:diagnostics.executors})}else newTree=buildSessionTree(diagnostics);setSessionTree((prev)=>mergeExpandedState(prev,newTree))},[diagnostics,workspaceRoot]);let flatNodes=import_react24.useMemo(()=>flattenTree(sessionTree),[sessionTree]);import_react24.useEffect(()=>{let node=flatNodes[selectedIndex]?.node;if(node)selectedNodeId.current=node.id},[selectedIndex,flatNodes]),import_react24.useLayoutEffect(()=>{if(flatNodes.length===0)return;if(selectedIndex>=flatNodes.length){setSelectedIndex(flatNodes.length-1);return}if(!selectedNodeId.current)return;let currentAtIndex=flatNodes[selectedIndex]?.node;if(currentAtIndex&¤tAtIndex.id===selectedNodeId.current)return;let restored=flatNodes.findIndex((n)=>n.node.id===selectedNodeId.current);if(restored>=0)setSelectedIndex(restored)},[flatNodes]),import_react24.useEffect(()=>{if(!requestedInitialAgent||flatNodes.length===0)return;let idx=flatNodes.findIndex((n)=>n.node.id===`agent:${requestedInitialAgent}`);if(idx>=0){setSelectedIndex(idx);let node=flatNodes[idx].node;if(node.type==="agent"&&node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);setRequestedInitialAgent(void 0)}},[requestedInitialAgent,flatNodes,onTmuxSessionSelect]),import_react24.useEffect(()=>{let current=flatNodes[selectedIndex]?.node;if(!current)return;let target=getSessionTarget(current);if(!target)return;if(current.type==="agent"&¤t.wsAgentState!=="running")return;let key=`${target.sessionName}:${target.windowIndex??""}`;if(key===lastTarget.current)return;lastTarget.current=key,onTmuxSessionSelect(target.sessionName,target.windowIndex)},[selectedIndex,flatNodes,onTmuxSessionSelect]);let handleSelect=import_react24.useCallback((id)=>{let idx=flatNodes.findIndex((n)=>n.node.id===id);if(idx>=0)setSelectedIndex(idx)},[flatNodes]),handleToggle=import_react24.useCallback((id)=>{setSessionTree((prev)=>toggleNode(prev,id))},[]),handleVerticalNav=import_react24.useCallback((keyName2)=>{let rowCount=flatNodes.length;if(rowCount===0)return;if(keyName2==="up"||keyName2==="k")setSelectedIndex((prev)=>prev===0?rowCount-1:prev-1);else if(keyName2==="down"||keyName2==="j")setSelectedIndex((prev)=>prev>=rowCount-1?0:prev+1)},[flatNodes.length]),handleExpandCollapse=import_react24.useCallback((keyName2)=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if((keyName2==="right"||keyName2==="l")&&node.children.length>0&&!node.expanded)handleToggle(node.id);else if((keyName2==="left"||keyName2==="h")&&node.expanded)handleToggle(node.id)},[flatNodes,selectedIndex,handleToggle]),handleEnter=import_react24.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if(node.type==="agent"){handleEnterAgent(node,onTmuxSessionSelect);return}if(node.children.length>0)handleToggle(node.id);let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)},[flatNodes,selectedIndex,handleToggle,onTmuxSessionSelect]),handleRetry=import_react24.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node||node.type!=="agent")return;if(node.wsAgentState!=="spawning"&&node.wsAgentState!=="error")return;(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(agentNameFromNode(node),onTmuxSessionSelect)})()},[flatNodes,selectedIndex,onTmuxSessionSelect]),handleContextMenu=import_react24.useCallback((nodeId)=>{let flat=flatNodes.find((n)=>n.node.id===nodeId);if(flat&&buildMenuItems(flat.node).length>0)setContextMenuNodeId(nodeId)},[flatNodes]),handleContextMenuAction=import_react24.useCallback((action,payload)=>{let node=flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node;if(!node)return;if(setContextMenuNodeId(null),action==="spawn-here"){let target=resolveSpawnHereTarget(node);if(target)setSpawnPickerTarget(target);return}dispatchContextMenuAction(action,node,payload,{sessionTree,onTmuxSessionSelect,onNewAgentWindow,openSpawnInto:setSpawnIntoAgent})},[flatNodes,contextMenuNodeId,sessionTree,onTmuxSessionSelect,onNewAgentWindow]),handleSpawnIntoConfirm=import_react24.useCallback((intent)=>{executeSpawnIntent(intent),setSpawnIntoAgent(null)},[]),handleSpawnIntoCancel=import_react24.useCallback(()=>{setSpawnIntoAgent(null)},[]),handleSpawnPickerConfirm=import_react24.useCallback((intent)=>{setSpawnPickerTarget(null),executeSpawnIntent(intent)},[]),handleSpawnPickerCancel=import_react24.useCallback(()=>{setSpawnPickerTarget(null)},[]),_menuDisabled=keyboardDisabled||contextMenuNodeId!==null,{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}=useTeamCreateControls({workspaceRoot,diagnostics,onTmuxSessionSelect});useKeyboard((key)=>{if(keyboardDisabled)return;if(spawnIntoAgent!==null||spawnPickerTarget!==null)return;if(tryOpenTeamCreate(key,{workspaceRoot,showTeamCreate,contextMenuNodeId,handleOpenTeamCreate}))return;if(showTeamCreate)return;handleKeyboardInput(key,{contextMenuNodeId,flatNodes,selectedIndex,setContextMenuNodeId,handleVerticalNav,handleExpandCollapse,handleEnter,handleRetry,onNewAgentWindow})});let agentCount=workspaceRoot?sessionTree.filter((n)=>n.type==="agent").length:diagnostics?.sessions.length??0,runningCount=workspaceRoot?sessionTree.filter((n)=>n.wsAgentState==="running").length:diagnostics?.sessions.reduce((sum,s2)=>sum+s2.windows.reduce((ws,w2)=>ws+w2.panes.length,0),0)??0,headerLabel=workspaceRoot?"Agents":"Sessions";return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",width:"100%",height:"100%",backgroundColor:palette.bg,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:headerLabel},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[" ",workspaceRoot?`${runningCount}/${agentCount}`:`${agentCount}s ${runningCount}p`]},void 0,!0,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("scrollbox",{focused:!0,height:"100%",style:{scrollbarOptions:{showArrows:!1,trackOptions:{foregroundColor:palette.scrollThumb,backgroundColor:palette.scrollTrack}}},children:flatNodes.map((flat,i2)=>import_jsx_dev_runtime2.jsxDEV(TreeNodeRow,{node:flat.node,selected:i2===selectedIndex,onSelect:handleSelect,onToggle:handleToggle,onContextMenu:handleContextMenu},flat.node.id,!1,void 0,this))},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexGrow:1,justifyContent:"center",alignItems:"center",children:import_jsx_dev_runtime2.jsxDEV("text",{fg:palette.textDim,children:"Collecting..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),contextMenuNodeId?import_jsx_dev_runtime2.jsxDEV(ContextMenu,{items:buildMenuItems(flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node??{}),onAction:handleContextMenuAction,onClose:()=>setContextMenuNodeId(null),positionY:flatNodes.findIndex((n)=>n.node.id===contextMenuNodeId)+1},void 0,!1,void 0,this):null,spawnIntoAgent!==null?import_jsx_dev_runtime2.jsxDEV(SpawnTargetPicker,{agentName:spawnIntoAgent,sessions:diagnostics?.sessions??[],onConfirm:handleSpawnIntoConfirm,onCancel:handleSpawnIntoCancel},void 0,!1,void 0,this):null,spawnPickerTarget!==null?import_jsx_dev_runtime2.jsxDEV(AgentPicker,{target:spawnPickerTarget,onConfirm:handleSpawnPickerConfirm,onCancel:handleSpawnPickerCancel},void 0,!1,void 0,this):null,showTeamCreate?import_jsx_dev_runtime2.jsxDEV(TeamCreate,{availableAgents:workspaceRoot?scanAgents(workspaceRoot):[],workspaceRoot,onConfirm:handleTeamCreateConfirm,onCancel:handleTeamCreateCancel},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(SystemStats,{},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:buildFooterHint(workspaceRoot)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function useTeamCreateControls(opts){let{workspaceRoot,diagnostics,onTmuxSessionSelect}=opts,[showTeamCreate,setShowTeamCreate]=import_react24.useState(!1),pendingTeamNameRef=import_react24.useRef(null),handleOpenTeamCreate=import_react24.useCallback(()=>{if(!workspaceRoot)return;setShowTeamCreate(!0)},[workspaceRoot]),handleTeamCreateConfirm=import_react24.useCallback((result2)=>{setShowTeamCreate(!1),runTeamCreation(result2,workspaceRoot),pendingTeamNameRef.current=result2.teamName},[workspaceRoot]),handleTeamCreateCancel=import_react24.useCallback(()=>{setShowTeamCreate(!1)},[]);return import_react24.useEffect(()=>{let pending=pendingTeamNameRef.current;if(!pending||!diagnostics)return;let session=diagnostics.sessions.find((s2)=>s2.name===pending);if(!session)return;pendingTeamNameRef.current=null,onTmuxSessionSelect(session.name,resolvePreferredWindowIndex(session,pending))},[diagnostics,onTmuxSessionSelect]),{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}}function handleEnterAgent(node,onTmuxSessionSelect){if(node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);else if(node.wsAgentState==="running"){let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)}}function dispatchContextMenuAction(action,node,payload,deps){let name=node.label;if(action==="spawn-into"&&node.type==="agent"&&deps.openSpawnInto){deps.openSpawnInto(agentNameFromNode(node));return}if(handleAttachAction(action,node,deps.onTmuxSessionSelect))return;if(handleRetryAction(action,name,deps.onTmuxSessionSelect))return;if(handleGenieAction(action,name,payload))return;let tmuxServer=process.env.GENIE_TMUX_SERVER||"genie";if(handleRenameAction(action,node,tmuxServer,payload))return;if(handleAgentWindowActions(action,node,name,tmuxServer,deps.onNewAgentWindow))return;if(handleSessionNodeActions(action,node,tmuxServer,payload))return;if(handleWindowNodeActions(action,node,deps.sessionTree,tmuxServer,payload))return;handlePaneNodeActions(action,node,deps.sessionTree,tmuxServer,deps.onNewAgentWindow)}function handleAttachAction(action,node,onTmuxSessionSelect){if(action!=="attach")return!1;let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex);return!0}function handleRetryAction(action,name,onTmuxSessionSelect){if(action!=="retry")return!1;return(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(name,onTmuxSessionSelect)})(),!0}function handleGenieAction(action,name,payload){if(action==="send"&&payload)return executeGenie(["agent","send",payload,"--to",name]),!0;if(action==="answer-text"&&payload)return executeGenie(["agent","answer",name,`text:${payload}`]),!0;let genieArgs={spawn:["spawn",name],"spawn-plan":["spawn",name,"--plan-mode"],stop:["agent","stop",name],kill:["agent","kill",name],log:["agent","log",name],show:["agent","show",name],read:["read",name],"answer-yes":["agent","answer",name,"yes"],"answer-no":["agent","answer",name,"no"]}[action];if(genieArgs)return executeGenie(genieArgs),!0;return!1}function handleRenameAction(action,node,tmuxServer,payload){if(action==="rename-session"&&payload){let sess=node.type==="agent"?node.data.sessionName||node.label:node.id.split(":").slice(1).join(":");return executeTmux3(["-L",tmuxServer,"rename-session","-t",sess,payload]),!0}if(action==="rename-window"&&payload){let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;return executeTmux3(["-L",tmuxServer,"rename-window","-t",windowTarget,payload]),!0}if(action==="rename-pane"&&payload&&node.type==="pane"){let paneId=node.data.paneId;return executeTmux3(["-L",tmuxServer,"select-pane","-t",`${paneId}`,"-T",payload]),!0}return!1}function handleAgentWindowActions(action,node,name,tmuxServer,onNewAgentWindow){if(action==="agent-new-window"&&node.type==="agent"){if(onNewAgentWindow)onNewAgentWindow(agentNameFromNode(node));return!0}if(action==="new-empty-window"&&node.type==="agent"){let sessionName=node.data.sessionName||name;return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sessionName]),!0}return!1}function handleSessionNodeActions(action,node,tmuxServer,payload){if(node.type!=="session")return!1;let sess=node.id.split(":").slice(1).join(":");if(action==="kill-session")return executeTmux3(["-L",tmuxServer,"kill-session","-t",sess]),!0;if(action==="new-window")return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sess]),!0;if(action==="clone-session")return executeTmux3(["-L",tmuxServer,"new-session","-d","-s",`${sess}-clone`,"-t",sess]),!0;if(action==="spawn-in-session"&&payload)return executeGenie(["spawn",payload,"--session",sess]),!0;return!1}function handleWindowNodeActions(action,node,sessionTree,tmuxServer,payload){if(node.type!=="window")return!1;let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;if(action==="kill-window")return executeTmux3(["-L",tmuxServer,"kill-window","-t",windowTarget]),!0;if(action==="window-new-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent){let agentFullName=agentNameFromNode(parentAgent),suffix=Date.now()%1e4,role=`${agentFullName}-${suffix}`;executeGenie(["spawn",agentFullName,"--role",role,"--window",windowTarget])}return!0}if(action==="split-pane")return executeTmux3(["-L",tmuxServer,"split-window","-t",windowTarget]),!0;if(action==="spawn-in-window"&&payload)return executeGenie(["spawn",payload,"--session",idParts[1]]),!0;return!1}function handlePaneNodeActions(action,node,sessionTree,tmuxServer,onNewAgentWindow){if(node.type!=="pane")return!1;let paneId=node.data.paneId;if(action==="clone-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent&&onNewAgentWindow)onNewAgentWindow(agentNameFromNode(parentAgent));return!0}if(action==="kill-pane")return executeTmux3(["-L",tmuxServer,"kill-pane","-t",`${paneId}`]),!0;if(action==="split-h")return executeTmux3(["-L",tmuxServer,"split-window","-h","-t",`${paneId}`]),!0;if(action==="split-v")return executeTmux3(["-L",tmuxServer,"split-window","-v","-t",`${paneId}`]),!0;return!1}function buildFooterHint(workspaceRoot){return`\u2191\u2193:nav \u2190\u2192:expand Enter:${workspaceRoot?"spawn/attach":"attach"} ^T:new${workspaceRoot?" ^N:team":""} R:retry .:menu`}function tryOpenTeamCreate(key,opts){if(!key.ctrl||key.name!=="n")return!1;if(!opts.workspaceRoot||opts.showTeamCreate||opts.contextMenuNodeId)return!1;return opts.handleOpenTeamCreate(),!0}function tryOpenContextMenu(flatNodes,selectedIndex,setContextMenuNodeId){let node=flatNodes[selectedIndex]?.node;if(node&&buildMenuItems(node).length>0)return setContextMenuNodeId(node.id),!0;return!1}function dispatchNavKey(key,handlers2,agentAction){let n=key.name;if(n==="up"||n==="k"||n==="down"||n==="j")handlers2.handleVerticalNav(n);else if(n==="right"||n==="l"||n==="left"||n==="h")handlers2.handleExpandCollapse(n);else if(n==="enter"||n==="return")handlers2.handleEnter();else if(n==="r")handlers2.handleRetry();else if(key.ctrl&&n==="t")agentAction()}function handleKeyboardInput(key,opts){if(key.name==="."&&!opts.contextMenuNodeId){if(tryOpenContextMenu(opts.flatNodes,opts.selectedIndex,opts.setContextMenuNodeId))return}if(opts.contextMenuNodeId)return;dispatchNavKey(key,opts,()=>{let node=opts.flatNodes[opts.selectedIndex]?.node;if(node?.type==="agent"&&node.wsAgentState==="running"&&opts.onNewAgentWindow)opts.onNewAgentWindow(agentNameFromNode(node))})}function agentNameFromNode(node){return node.id.replace(/^agent:/,"")}function spawnAgent(name,onTmuxSessionSelect){try{let{spawn:spawn5}=__require("child_process"),{join:join63,resolve:resolve14}=__require("path"),{existsSync:existsSync49,mkdirSync:mkdirSync22,openSync:openSync2}=__require("fs"),{homedir:homedir33}=__require("os"),bunPath=process.execPath||"bun",genieBin=process.argv[1],wsRoot=process.env.GENIE_TUI_WORKSPACE,sessionName=name.replace(/\//g,"-"),cwd;if(wsRoot){let parentName=name.includes("/")?name.slice(0,name.indexOf("/")):name,agentDir=resolve14(join63(wsRoot,"agents",parentName));if(existsSync49(agentDir))cwd=agentDir}let{GENIE_TUI_PANE:_a,GENIE_TUI_RIGHT:_b,GENIE_TUI_WORKSPACE:_c,GENIE_IS_DAEMON:_d,...cleanEnv}=process.env,logDir=join63(homedir33(),".genie","logs","tui-spawn");try{mkdirSync22(logDir,{recursive:!0})}catch{}let logPath=join63(logDir,`${sessionName}-${Date.now()}.log`),logFd;try{logFd=openSync2(logPath,"a")}catch{logFd=void 0}let spawnOpts=logFd!==void 0?{detached:!0,stdio:["ignore",logFd,logFd],cwd,env:cleanEnv}:{detached:!0,stdio:"ignore",cwd,env:cleanEnv},child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,"spawn",name,"--session",sessionName,"--new-window"],spawnOpts):spawn5("genie",["spawn",name,"--session",sessionName,"--new-window"],spawnOpts);if(child.on("exit",(code)=>{if(code&&code!==0)console.error(`TUI: spawn "${name}" exited ${code}. See ${logPath}`)}),child.on("error",(err)=>{console.error(`TUI: spawn "${name}" error: ${err.message}. See ${logPath}`)}),child.unref(),onTmuxSessionSelect)attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect)}catch(err){console.error(`TUI: spawn failed for ${name}:`,err instanceof Error?err.message:err)}}function attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt=0){(async()=>{try{let session=(await collectDiagnostics()).sessions.find((candidate)=>candidate.name===sessionName);if(session){let windowIndex=resolvePreferredWindowIndex(session,sessionName);if(windowIndex!==void 0){onTmuxSessionSelect(sessionName,windowIndex);return}}}catch{}if(attempt>=40){onTmuxSessionSelect(sessionName);return}setTimeout(()=>{attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt+1)},250)})()}function executeTmux3(args){try{let{spawn:spawn5}=__require("child_process");spawn5("tmux",args,{detached:!0,stdio:"ignore"}).unref()}catch{}}function executeGenie(args){try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1];(genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{detached:!0,stdio:"ignore"}):spawn5("genie",args,{detached:!0,stdio:"ignore"})).unref()}catch{}}function executeGenieAwaited(args){return new Promise((resolve14,reject)=>{try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{stdio:"ignore"}):spawn5("genie",args,{stdio:"ignore"});child.on("exit",(code)=>resolve14(code)),child.on("error",reject)}catch(err){reject(err instanceof Error?err:Error(String(err)))}})}function resolveSpawnHereTarget(node){if(node.type==="session"){let sess=node.id.split(":").slice(1).join(":");if(sess.length===0)return null;return{session:sess}}if(node.type==="window"){let idParts=node.id.split(":");if(idParts.length<3)return null;return{session:idParts[1],window:`${idParts[1]}:${idParts[2]}`}}return null}function executeSpawnIntent(intent){try{let{argv}=buildSpawnInvocation(intent);executeGenie(argv)}catch(err){console.error("TUI: spawn-intent execution failed:",err instanceof Error?err.message:err)}}async function runTeamCreation(result2,workspaceRoot){let argv;try{({argv}=buildSpawnInvocation({kind:"create-team",name:result2.teamName,repo:workspaceRoot}))}catch(err){console.error("TUI: team create intent build failed:",err instanceof Error?err.message:err);return}let createExit=null;try{createExit=await executeGenieAwaited(argv)}catch(err){console.error("TUI: team create spawn failed:",err instanceof Error?err.message:err);return}if(createExit!==0){console.error(`TUI: team create exited ${createExit} \u2014 skipping member hires for "${result2.teamName}"`);return}for(let member of result2.members)try{let code=await executeGenieAwaited(["team","hire",member,"--team",result2.teamName]);if(code!==0)console.error(`TUI: team hire "${member}" exited ${code} \u2014 continuing with remaining members`)}catch(err){console.error(`TUI: team hire "${member}" failed:`,err instanceof Error?err.message:err)}}function findParentAgent(tree,targetId){for(let node of tree){if(node.type==="agent"&&containsNode(node,targetId))return node;let found=findParentAgent(node.children,targetId);if(found)return found}return null}function containsNode(node,targetId){if(node.id===targetId)return!0;return node.children.some((c)=>containsNode(c,targetId))}function mergeExpandedState(oldTree,newTree){if(oldTree.length===0)return newTree;let oldState=new Map;function collect(nodes){for(let n of nodes)oldState.set(n.id,{expanded:n.expanded,childCount:n.children.length}),collect(n.children)}collect(oldTree);function apply(nodes){return nodes.map((n)=>({...n,expanded:(()=>{let previous=oldState.get(n.id);if(!previous)return n.expanded;if(previous.childCount===0&&n.children.length>0)return n.expanded;return previous.expanded})(),children:apply(n.children)}))}return apply(newTree)}var import_react24;var init_Nav=__esm(async()=>{init_spawn_invocation();init_workspace();init_diagnostics();init_initial_agent();init_theme2();init_SystemStats();init_TreeNode();init_jsx_dev_runtime();await __promiseAll([init_react(),init_AgentPicker(),init_ContextMenu(),init_SpawnTargetPicker(),init_TeamCreate()]);import_react24=__toESM(require_react_development(),1)});function QuitDialog({onConfirm,onCancel}){return useKeyboard((key)=>{if(key.name==="enter"||key.name==="return"||key.name==="y")onConfirm();else if(key.name==="escape"||key.name==="n")onCancel()}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.violet,backgroundColor:"#111111",paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"Quit genie?"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:"Enter"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to quit "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" | "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:" Esc"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Hint: Ctrl+D to detach (keep running)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var init_QuitDialog=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react()});import{execSync as execSync17}from"child_process";import{readFileSync as readFileSync31}from"fs";function App({rightPane,workspaceRoot,initialAgent}){let[showQuit,setShowQuit]=import_react27.useState(!1);useKeyboard((key)=>{if(key.ctrl&&key.name==="q")if(showQuit)handleQuit();else setShowQuit(!0)});let handleQuit=import_react27.useCallback(()=>{try{let genieHome5=process.env.GENIE_HOME??`${process.env.HOME}/.genie`,pid=readFileSync31(`${genieHome5}/serve.pid`,"utf-8").trim();process.kill(Number.parseInt(pid,10),"SIGTERM")}catch{}try{execSync17("tmux -L genie-tui kill-server",{stdio:"ignore"})}catch{}},[]),handleTmuxSessionSelect=import_react27.useCallback((sessionName,windowIndex)=>{if(!rightPane)return;attachProjectWindow(rightPane,sessionName,windowIndex)},[rightPane]);return import_jsx_dev_runtime2.jsxDEV("box",{width:"100%",height:"100%",children:[import_jsx_dev_runtime2.jsxDEV(Nav,{onTmuxSessionSelect:handleTmuxSessionSelect,onNewAgentWindow:newAgentWindow,workspaceRoot,initialAgent,keyboardDisabled:showQuit},void 0,!1,void 0,this),showQuit?import_jsx_dev_runtime2.jsxDEV(QuitDialog,{onConfirm:handleQuit,onCancel:()=>setShowQuit(!1)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var import_react27;var init_app=__esm(async()=>{init_tmux2();init_jsx_dev_runtime();await __promiseAll([init_react(),init_Nav(),init_QuitDialog()]);import_react27=__toESM(require_react_development(),1)});var exports_render={};__export(exports_render,{renderNav:()=>renderNav});async function renderNav(){let rightPane=process.env.GENIE_TUI_RIGHT||void 0,workspaceRoot=process.env.GENIE_TUI_WORKSPACE||void 0,initialAgent=process.env.GENIE_TUI_AGENT||void 0,renderer=await createCliRenderer({exitOnCtrlC:!1,useMouse:!0});createRoot(renderer).render(import_jsx_dev_runtime2.jsxDEV(App,{rightPane,workspaceRoot,initialAgent},void 0,!1,void 0,this)),await new Promise((resolve14)=>{renderer.once("destroy",resolve14)})}var init_render=__esm(async()=>{init_jsx_dev_runtime();await __promiseAll([init_core(),init_react(),init_app()])});var exports_tui={};__export(exports_tui,{launchTui:()=>launchTui});async function launchTui(){let{renderNav:renderNav2}=await init_render().then(() => exports_render);await renderNav2()}var exports_resolve_agent_cwd={};__export(exports_resolve_agent_cwd,{resolveAgentFromCwd:()=>resolveAgentFromCwd});import{existsSync as existsSync49}from"fs";import{basename as basename14,dirname as dirname15,join as join63,relative as relative7,sep as sep3}from"path";function isRelativeWithin(rel,original){return!rel.startsWith("..")&&rel!==original}function resolveFromCanonicalDir(cwd,agentsDir){let relToAgents=relative7(agentsDir,cwd);if(!isRelativeWithin(relToAgents,cwd))return null;let segments=relToAgents.split(sep3).filter(Boolean);if(segments.length===0)return null;let agentName=segments[0];if(!existsSync49(join63(agentsDir,agentName,"AGENTS.md")))return null;let source=segments.length===1?"exact":"parent";return{agent:agentName,source}}function resolveFromWalkUp(cwd,workspaceRoot){let wsRel=relative7(workspaceRoot,cwd);if(!isRelativeWithin(wsRel,cwd))return null;let current=cwd;while(current!==workspaceRoot&¤t!==dirname15(current)){if(existsSync49(join63(current,"AGENTS.md")))return{agent:basename14(current),source:"parent"};current=dirname15(current)}return null}function resolveAgentFromCwd(cwd,workspaceRoot){return resolveFromCanonicalDir(cwd,join63(workspaceRoot,"agents"))??resolveFromWalkUp(cwd,workspaceRoot)??{agent:"genie",source:"default"}}var init_resolve_agent_cwd=()=>{};var import__=__toESM(require_commander(),1),{program,createCommand,createArgument,createOption,CommanderError,InvalidArgumentError,InvalidOptionArgumentError,Command,Argument,Option,Help}=import__.default;init_claude_settings();init_ensure_tmux();init_genie_config2();init_system_detect();init_workspace();import{existsSync as existsSync6,readFileSync as readFileSync5,readdirSync as readdirSync2,statSync,unlinkSync as unlinkSync4}from"fs";import{homedir as homedir6}from"os";import{join as join6}from"path";var{$:$2}=globalThis.Bun;function printSectionHeader(title){console.log(),console.log(`\x1B[1m${title}:\x1B[0m`)}function printCheckResult(result2){let icon={pass:"\x1B[32m\u2713\x1B[0m",fail:"\x1B[31m\u2717\x1B[0m",warn:"\x1B[33m!\x1B[0m"}[result2.status],message=result2.message?` ${result2.message}`:"";if(console.log(` ${icon} ${result2.name}${message}`),result2.suggestion)console.log(` \x1B[2m${result2.suggestion}\x1B[0m`)}async function checkPrerequisites(){let results=[],tmuxCheck=await checkCommand("tmux");if(tmuxCheck.exists)results.push({name:"tmux",status:"pass",message:tmuxCheck.version||""});else results.push({name:"tmux",status:"fail",suggestion:"Install with: brew install tmux (or apt install tmux)"});let jqCheck=await checkCommand("jq");if(jqCheck.exists)results.push({name:"jq",status:"pass",message:jqCheck.version||""});else results.push({name:"jq",status:"fail",suggestion:"Install with: brew install jq (or apt install jq)"});let bunCheck=await checkCommand("bun");if(bunCheck.exists)results.push({name:"bun",status:"pass",message:bunCheck.version||""});else results.push({name:"bun",status:"fail",suggestion:"Install with: curl -fsSL https://bun.sh/install | bash"});let claudeCheck=await checkCommand("claude");if(claudeCheck.exists)results.push({name:"Claude Code",status:"pass",message:claudeCheck.version||""});else results.push({name:"Claude Code",status:"warn",suggestion:"Install with: npm install -g @anthropic-ai/claude-code"});return results}async function checkConfiguration(){let results=[];if(genieConfigExists())results.push({name:"Genie config exists",status:"pass",message:contractClaudePath(getGenieConfigPath())});else results.push({name:"Genie config exists",status:"warn",message:"not found",suggestion:"Run: genie setup"});if(isSetupComplete())results.push({name:"Setup complete",status:"pass"});else results.push({name:"Setup complete",status:"warn",message:"not completed",suggestion:"Run: genie setup"});let claudeSettingsPath=getClaudeSettingsPath();if(existsSync6(claudeSettingsPath))results.push({name:"Claude settings exists",status:"pass",message:contractClaudePath(claudeSettingsPath)});else results.push({name:"Claude settings exists",status:"warn",message:"not found",suggestion:"Claude Code creates this on first run"});return results}async function checkTmux(){let results=[];try{if((await $2`${tmuxBin()} -L genie list-sessions 2>/dev/null`.quiet()).exitCode===0)results.push({name:"Server running",status:"pass"});else return results.push({name:"Server running",status:"warn",message:"no sessions",suggestion:"Start with: tmux new-session -d -s genie"}),results}catch{return results.push({name:"Server running",status:"warn",message:"could not check"}),results}let sessionName=(await loadGenieConfig()).session.name;try{if((await $2`${tmuxBin()} -L genie has-session -t ${sessionName} 2>/dev/null`.quiet()).exitCode===0)results.push({name:`Session '${sessionName}' exists`,status:"pass"});else results.push({name:`Session '${sessionName}' exists`,status:"warn",suggestion:`Start with: tmux new-session -d -s ${sessionName}`})}catch{results.push({name:`Session '${sessionName}' exists`,status:"warn",message:"could not check"})}return results}async function checkWorkerProfiles(){let results=[];if(!genieConfigExists())return results.push({name:"Worker profiles",status:"warn",message:"no genie config",suggestion:"Run: genie setup"}),results;let config=await loadGenieConfig(),profiles=config.workerProfiles;if(!profiles||Object.keys(profiles).length===0)return results.push({name:"Worker profiles",status:"pass",message:"none configured (using defaults)"}),results;let totalProfiles=Object.keys(profiles).length;results.push({name:"Profiles configured",status:"pass",message:`${totalProfiles} profile${totalProfiles===1?"":"s"}`});for(let name of Object.keys(profiles))results.push({name:`Profile '${name}'`,status:"pass",message:"claude (direct)"});if(config.defaultWorkerProfile)if(profiles[config.defaultWorkerProfile])results.push({name:"Default profile",status:"pass",message:config.defaultWorkerProfile});else results.push({name:"Default profile",status:"warn",message:`'${config.defaultWorkerProfile}' not found`,suggestion:"Run: genie profiles default <profile>"});return results}async function checkBridge(){let results=[];try{let{getBridgeStatus:getBridgeStatus2,removeBridgePidfile:removeBridgePidfile2}=await Promise.resolve().then(() => (init_bridge_status(),exports_bridge_status)),res=await getBridgeStatus2(void 0,{});if(res.state==="stopped")return results.push({name:"Bridge",status:"warn",message:"stopped (no pidfile)",suggestion:"Start the bridge with: genie serve"}),results;if(res.state==="stale"){if(res.pidfile)removeBridgePidfile2();return results.push({name:"Bridge",status:"fail",message:`stale: ${res.detail}`,suggestion:"Restart the bridge with: genie serve restart"}),results}let{pong,pidfile}=res;if(!pong||!pidfile)return results.push({name:"Bridge",status:"warn",message:"running state missing pong/pidfile metadata"}),results;let uptimeSec=Math.round(pong.uptimeMs/1000);results.push({name:"Bridge running",status:"pass",message:`running (pid ${pong.pid}, uptime ${uptimeSec}s)`}),results.push({name:"NATS ping",status:"pass",message:`pong in ${res.latencyMs??0}ms (${pidfile.natsUrl})`}),results.push({name:"Subjects",status:"pass",message:pong.subjects.join(", ")})}catch(err){let detail=err instanceof Error?err.message:String(err);results.push({name:"Bridge module",status:"warn",message:`could not probe bridge: ${detail}`})}return results}function checkLegacyAgentFrontmatter(workspaceRoot){let results=[],root=workspaceRoot??findWorkspace()?.root;if(!root)return[];let agentsDir=join6(root,"agents");if(!existsSync6(agentsDir))return[];let entries;try{entries=readdirSync2(agentsDir)}catch{return[]}for(let name of entries){let agentDir=join6(agentsDir,name);try{if(!statSync(agentDir).isDirectory())continue}catch{continue}let yamlPath=join6(agentDir,"agent.yaml"),agentsMdPath=join6(agentDir,"AGENTS.md");if(!existsSync6(yamlPath)||!existsSync6(agentsMdPath))continue;let headContent;try{headContent=readFileSync5(agentsMdPath,"utf-8").slice(0,4)}catch{continue}if(!headContent.startsWith("---"))continue;results.push({name:`agents/${name}/AGENTS.md`,status:"warn",message:"legacy frontmatter detected (ignored by sync)",suggestion:`Move config into agents/${name}/agent.yaml \u2014 AGENTS.md is prompt-only post-migration.`})}if(results.length===0)results.push({name:"No legacy frontmatter in agents/*/AGENTS.md",status:"pass"});return results}function runCheckSection(label,results,counts){printSectionHeader(label);for(let result2 of results){if(printCheckResult(result2),result2.status==="fail")counts.errors=!0;if(result2.status==="warn")counts.warnings=!0}}async function doctorCommand(options){if(options?.fix){await doctorFix();return}console.log(),console.log("\x1B[1mGenie Doctor\x1B[0m"),console.log(`\x1B[2m${"\u2500".repeat(40)}\x1B[0m`);let counts={errors:!1,warnings:!1};if(runCheckSection("Prerequisites",await checkPrerequisites(),counts),runCheckSection("Configuration",await checkConfiguration(),counts),runCheckSection("Tmux",await checkTmux(),counts),runCheckSection("Worker Profiles",await checkWorkerProfiles(),counts),runCheckSection("Omni Bridge",await checkBridge(),counts),runCheckSection("Agent Config",checkLegacyAgentFrontmatter(),counts),console.log(),console.log(`\x1B[2m${"\u2500".repeat(40)}\x1B[0m`),counts.errors)console.log("\x1B[31mSome checks failed.\x1B[0m Run \x1B[36mgenie setup\x1B[0m to fix.");else if(counts.warnings)console.log("\x1B[33mSome warnings detected.\x1B[0m Everything should still work.");else console.log("\x1B[32mAll checks passed!\x1B[0m");if(console.log(),counts.errors)process.exit(1)}async function killStalePostgres(){console.log(" Killing stale postgres processes...");try{let{execSync:execSync2}=await import("child_process");execSync2('pkill -9 -f "postgres.*pgserve" 2>/dev/null || true',{stdio:"ignore",timeout:5000}),console.log(" \x1B[32m\u2713\x1B[0m Stale postgres processes killed")}catch{console.log(" \x1B[33m!\x1B[0m Could not kill stale postgres processes")}}async function cleanSharedMemory(){console.log(" Cleaning shared memory...");try{let{execSync:execSync2}=await import("child_process");execSync2("ipcs -m 2>/dev/null | awk '$6 == 0 {print $2}' | xargs -I{} ipcrm -m {} 2>/dev/null || true",{stdio:"ignore",timeout:5000}),console.log(" \x1B[32m\u2713\x1B[0m Shared memory cleaned")}catch{console.log(" \x1B[32m\u2713\x1B[0m No stale shared memory")}}async function stopExistingDaemon(pidFile){try{let{readFileSync:readFileSync6}=await import("fs"),pid=Number.parseInt(readFileSync6(pidFile,"utf-8").trim(),10);if(!Number.isNaN(pid)&&pid>0)try{process.kill(pid,"SIGTERM"),console.log(` \x1B[32m\u2713\x1B[0m Stopped existing daemon (PID ${pid})`),await new Promise((r)=>setTimeout(r,1000))}catch{}}catch{}}function removeStaleFiles(genieHome3,pidFile){let portFile=join6(genieHome3,"pgserve.port"),postmasterPid=join6(genieHome3,"data","pgserve","postmaster.pid");for(let file of[portFile,pidFile,postmasterPid])if(existsSync6(file))try{unlinkSync4(file),console.log(` \x1B[32m\u2713\x1B[0m Removed ${file}`)}catch{console.log(` \x1B[33m!\x1B[0m Could not remove ${file}`)}}async function restartDaemon(){console.log(" Restarting daemon...");try{let{spawn}=await import("child_process"),bunPath=process.execPath??"bun",genieBin=process.argv[1]??"genie";spawn(bunPath,[genieBin,"daemon","start"],{detached:!0,stdio:"ignore"}).unref(),await new Promise((resolve2)=>setTimeout(resolve2,2000)),console.log(" \x1B[32m\u2713\x1B[0m Daemon restart initiated")}catch{console.log(" \x1B[33m!\x1B[0m Could not restart daemon \u2014 run: genie daemon start")}}async function doctorFix(){console.log(`
|
|
3184
|
+
`),service=util4.getValue(lines,"Service",":"),errorCode=util4.getValue(lines,"ConfigManagerErrorCode",":");if(util4.getValue(lines,"PNPClass",":").toLowerCase()==="bluetooth"&&errorCode==="0"&&service==="")result2.push(parseWindowsBluetooth(lines))});if(callback)callback(result2);resolve14(result2)});if(_freebsd||_netbsd||_openbsd||_sunos)resolve14(null)})})}exports.bluetoothDevices=bluetoothDevices});var require_lib5=__commonJS((exports)=>{var lib_version=require_package().version,util4=require_util3(),system=require_system(),osInfo=require_osinfo(),cpu=require_cpu(),memory=require_memory(),battery=require_battery(),graphics=require_graphics(),filesystem=require_filesystem(),network=require_network(),wifi=require_wifi(),processes=require_processes(),users=require_users(),internet=require_internet(),docker=require_docker(),vbox=require_virtualbox(),printer=require_printer(),usb=require_usb(),audio=require_audio(),bluetooth=require_bluetooth(),_platform=process.platform,_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";if(_windows)util4.getCodepage(),util4.getPowershell();function version(){return lib_version}function getStaticData(callback){return new Promise((resolve14)=>{process.nextTick(()=>{let data={};data.version=version(),Promise.all([system.system(),system.bios(),system.baseboard(),system.chassis(),osInfo.osInfo(),osInfo.uuid(),osInfo.versions(),cpu.cpu(),cpu.cpuFlags(),graphics.graphics(),network.networkInterfaces(),memory.memLayout(),filesystem.diskLayout(),audio.audio(),bluetooth.bluetoothDevices(),usb.usb(),printer.printer()]).then((res)=>{if(data.system=res[0],data.bios=res[1],data.baseboard=res[2],data.chassis=res[3],data.os=res[4],data.uuid=res[5],data.versions=res[6],data.cpu=res[7],data.cpu.flags=res[8],data.graphics=res[9],data.net=res[10],data.memLayout=res[11],data.diskLayout=res[12],data.audio=res[13],data.bluetooth=res[14],data.usb=res[15],data.printer=res[16],callback)callback(data);resolve14(data)})})})}function getDynamicData(srv,iface,callback){if(util4.isFunction(iface))callback=iface,iface="";if(util4.isFunction(srv))callback=srv,srv="";return new Promise((resolve14)=>{process.nextTick(()=>{iface=iface||network.getDefaultNetworkInterface(),srv=srv||"";let functionProcessed=(()=>{let totalFunctions=15;if(_windows)totalFunctions=13;if(_freebsd||_openbsd||_netbsd)totalFunctions=11;if(_sunos)totalFunctions=6;return function(){if(--totalFunctions===0){if(callback)callback(data);resolve14(data)}}})(),data={};if(data.time=osInfo.time(),data.node=process.versions.node,data.v8=process.versions.v8,cpu.cpuCurrentSpeed().then((res)=>{data.cpuCurrentSpeed=res,functionProcessed()}),users.users().then((res)=>{data.users=res,functionProcessed()}),processes.processes().then((res)=>{data.processes=res,functionProcessed()}),cpu.currentLoad().then((res)=>{data.currentLoad=res,functionProcessed()}),!_sunos)cpu.cpuTemperature().then((res)=>{data.temp=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)network.networkStats(iface).then((res)=>{data.networkStats=res,functionProcessed()});if(!_sunos)network.networkConnections().then((res)=>{data.networkConnections=res,functionProcessed()});if(memory.mem().then((res)=>{data.mem=res,functionProcessed()}),!_sunos)battery().then((res)=>{data.battery=res,functionProcessed()});if(!_sunos)processes.services(srv).then((res)=>{data.services=res,functionProcessed()});if(!_sunos)filesystem.fsSize().then((res)=>{data.fsSize=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.fsStats().then((res)=>{data.fsStats=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.disksIO().then((res)=>{data.disksIO=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)wifi.wifiNetworks().then((res)=>{data.wifiNetworks=res,functionProcessed()});internet.inetLatency().then((res)=>{data.inetLatency=res,functionProcessed()})})})}function getAllData(srv,iface,callback){return new Promise((resolve14)=>{process.nextTick(()=>{let data={};if(iface&&util4.isFunction(iface)&&!callback)callback=iface,iface="";if(srv&&util4.isFunction(srv)&&!iface&&!callback)callback=srv,srv="",iface="";getStaticData().then((res)=>{data=res,getDynamicData(srv,iface).then((res2)=>{for(let key in res2)if({}.hasOwnProperty.call(res2,key))data[key]=res2[key];if(callback)callback(data);resolve14(data)})})})})}function get3(valueObject,callback){return new Promise((resolve14)=>{process.nextTick(()=>{let allPromises=Object.keys(valueObject).filter((func)=>({}).hasOwnProperty.call(exports,func)).map((func)=>{let params=valueObject[func].substring(valueObject[func].lastIndexOf("(")+1,valueObject[func].lastIndexOf(")")),funcWithoutParams=func.indexOf(")")>=0?func.split(")")[1].trim():func;if(funcWithoutParams=func.indexOf("|")>=0?func.split("|")[0].trim():funcWithoutParams,params)return exports[funcWithoutParams](params);else return exports[funcWithoutParams]("")});Promise.all(allPromises).then((data)=>{let result2={},i2=0;for(let key in valueObject)if({}.hasOwnProperty.call(valueObject,key)&&{}.hasOwnProperty.call(exports,key)&&data.length>i2){if(valueObject[key]==="*"||valueObject[key]==="all")result2[key]=data[i2];else{let keys=valueObject[key],filter="",filterParts=[];if(keys.indexOf(")")>=0)keys=keys.split(")")[1].trim();if(keys.indexOf("|")>=0)filter=keys.split("|")[1].trim(),filterParts=filter.split(":"),keys=keys.split("|")[0].trim();if(keys=keys.replace(/,/g," ").replace(/ +/g," ").split(" "),data[i2])if(Array.isArray(data[i2])){let partialArray=[];data[i2].forEach((element)=>{let partialRes={};if(keys.length===1&&(keys[0]==="*"||keys[0]==="all"))partialRes=element;else keys.forEach((k2)=>{if({}.hasOwnProperty.call(element,k2))partialRes[k2]=element[k2]});if(filter&&filterParts.length===2){if({}.hasOwnProperty.call(partialRes,filterParts[0].trim())){let val=partialRes[filterParts[0].trim()];if(typeof val==="number"){if(val===parseFloat(filterParts[1].trim()))partialArray.push(partialRes)}else if(typeof val==="string"){if(val.toLowerCase()===filterParts[1].trim().toLowerCase())partialArray.push(partialRes)}}}else partialArray.push(partialRes)}),result2[key]=partialArray}else{let partialRes={};keys.forEach((k2)=>{if({}.hasOwnProperty.call(data[i2],k2))partialRes[k2]=data[i2][k2]}),result2[key]=partialRes}else result2[key]={}}i2++}if(callback)callback(result2);resolve14(result2)})})})}function observe(valueObject,interval,callback){let _data=null;return setInterval(()=>{get3(valueObject).then((data)=>{if(JSON.stringify(_data)!==JSON.stringify(data))_data=Object.assign({},data),callback(data)})},interval)}exports.version=version;exports.system=system.system;exports.bios=system.bios;exports.baseboard=system.baseboard;exports.chassis=system.chassis;exports.time=osInfo.time;exports.osInfo=osInfo.osInfo;exports.versions=osInfo.versions;exports.shell=osInfo.shell;exports.uuid=osInfo.uuid;exports.cpu=cpu.cpu;exports.cpuFlags=cpu.cpuFlags;exports.cpuCache=cpu.cpuCache;exports.cpuCurrentSpeed=cpu.cpuCurrentSpeed;exports.cpuTemperature=cpu.cpuTemperature;exports.currentLoad=cpu.currentLoad;exports.fullLoad=cpu.fullLoad;exports.mem=memory.mem;exports.memLayout=memory.memLayout;exports.battery=battery;exports.graphics=graphics.graphics;exports.fsSize=filesystem.fsSize;exports.fsOpenFiles=filesystem.fsOpenFiles;exports.blockDevices=filesystem.blockDevices;exports.fsStats=filesystem.fsStats;exports.disksIO=filesystem.disksIO;exports.diskLayout=filesystem.diskLayout;exports.networkInterfaceDefault=network.networkInterfaceDefault;exports.networkGatewayDefault=network.networkGatewayDefault;exports.networkInterfaces=network.networkInterfaces;exports.networkStats=network.networkStats;exports.networkConnections=network.networkConnections;exports.wifiNetworks=wifi.wifiNetworks;exports.wifiInterfaces=wifi.wifiInterfaces;exports.wifiConnections=wifi.wifiConnections;exports.services=processes.services;exports.processes=processes.processes;exports.processLoad=processes.processLoad;exports.users=users.users;exports.inetChecksite=internet.inetChecksite;exports.inetLatency=internet.inetLatency;exports.dockerInfo=docker.dockerInfo;exports.dockerImages=docker.dockerImages;exports.dockerContainers=docker.dockerContainers;exports.dockerContainerStats=docker.dockerContainerStats;exports.dockerContainerProcesses=docker.dockerContainerProcesses;exports.dockerVolumes=docker.dockerVolumes;exports.dockerAll=docker.dockerAll;exports.vboxInfo=vbox.vboxInfo;exports.printer=printer.printer;exports.usb=usb.usb;exports.audio=audio.audio;exports.bluetoothDevices=bluetooth.bluetoothDevices;exports.getStaticData=getStaticData;exports.getDynamicData=getDynamicData;exports.getAllData=getAllData;exports.get=get3;exports.observe=observe;exports.powerShellStart=util4.powerShellStart;exports.powerShellRelease=util4.powerShellRelease});import os4 from"os";function toGB(bytes){return Math.round(bytes/1073741824*10)/10}function bar(percent,width){let p=Math.max(0,Math.min(100,percent)),filled=Math.round(p/100*width);return`[${"=".repeat(filled)}${"-".repeat(width-filled)}]`}function pickColor(percent){if(percent>80)return palette.error;if(percent>50)return palette.warning;return palette.emerald}function SystemStats(){let[stats,setStats]=import_react19.useState(null),mountedRef=import_react19.useRef(!0);if(import_react19.useEffect(()=>{mountedRef.current=!0;async function refresh(){try{let[cpu2,mem]=await Promise.all([import_systeminformation.default.currentLoad(),import_systeminformation.default.mem()]);if(!mountedRef.current)return;let coreCount=os4.cpus().length,avg1=os4.loadavg()[0],sorted=cpu2.cpus.map((c,i2)=>({id:i2,load:Math.round(c.load)})).sort((a,b3)=>b3.load-a.load);setStats({cpu:{combined:Math.round(cpu2.currentLoad),hotCores:sorted.slice(0,3),coreCount},ram:{usedGB:toGB(mem.active),totalGB:toGB(mem.total),percent:mem.total>0?Math.round(mem.active/mem.total*100):0},swap:{usedGB:toGB(mem.swapused),totalGB:toGB(mem.swaptotal),percent:mem.swaptotal>0?Math.round(mem.swapused/mem.swaptotal*100):0},load:{percent:coreCount>0?Math.round(avg1/coreCount*100):0,busy:Math.round(avg1*10)/10,total:coreCount}})}catch{}}refresh();let timer2=setInterval(refresh,3000);return()=>{mountedRef.current=!1,clearInterval(timer2)}},[]),!stats)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);let{cpu,ram,swap,load:load3}=stats,hotStr=cpu.hotCores.map((c)=>`#${c.id} ${c.load}%`).join(" ");return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgLight,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"CPU "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(cpu.combined),children:`${String(cpu.combined).padStart(3)}% ${bar(cpu.combined,8)}`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` ${cpu.coreCount}c`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" hot "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.warning,children:hotStr},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"RAM "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(ram.percent),children:`${ram.usedGB}/${ram.totalGB}G ${bar(ram.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),swap.totalGB>0?import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"SWP "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(swap.percent),children:`${swap.usedGB}/${swap.totalGB}G ${bar(swap.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Load "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(load3.percent),children:`${load3.percent}%`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` (${load3.busy}/${load3.total} busy)`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var import_react19,import_systeminformation;var init_SystemStats=__esm(()=>{init_version();init_theme2();init_jsx_dev_runtime();import_react19=__toESM(require_react_development(),1),import_systeminformation=__toESM(require_lib5(),1)});function validateName(name){if(name.length===0)return null;try{return validateBranchName(name),null}catch(err){return err instanceof Error?err.message:String(err)}}function TeamCreate({availableAgents,workspaceRoot,onConfirm,onCancel}){let[step,setStep]=import_react21.useState("name"),[teamName,setTeamName]=import_react21.useState(""),[selected,setSelected]=import_react21.useState(()=>new Set),[memberCursor,setMemberCursor]=import_react21.useState(0),nameError=import_react21.useMemo(()=>validateName(teamName),[teamName]),nameValid=teamName.length>0&&nameError===null,intent=import_react21.useMemo(()=>({kind:"create-team",name:teamName.length>0?teamName:"TEAM_NAME",repo:workspaceRoot}),[teamName,workspaceRoot]),handleNameChange=import_react21.useCallback((value)=>{setTeamName(value)},[]),advanceFromName=import_react21.useCallback(()=>{if(!nameValid)return;setStep("members")},[nameValid]),toggleMember=import_react21.useCallback((name)=>{setSelected((prev)=>{let next=new Set(prev);if(next.has(name))next.delete(name);else next.add(name);return next})},[]),confirmMembers=import_react21.useCallback(()=>{onConfirm({teamName,members:Array.from(selected)})},[onConfirm,teamName,selected]);return useKeyboard((key)=>{if(step==="name"){handleNameStepKey(key,{onCancel,nameValid,advanceFromName});return}handleMembersStepKey(key,{availableAgents,memberCursor,setStep,setMemberCursor,toggleMember,confirmMembers})}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.violet,backgroundColor:"#111111",paddingX:3,paddingY:1,flexDirection:"column",width:64,gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"New team"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:step==="name"?" \u2014 step 1 of 2":" \u2014 step 2 of 2"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),step==="name"?import_jsx_dev_runtime2.jsxDEV(NameStep,{value:teamName,onChange:handleNameChange,onSubmit:advanceFromName,errorMessage:nameError},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV(MembersStep,{agents:availableAgents,selected,cursor:memberCursor},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent,hint:step==="name"?"Enter: next \xB7 Esc: cancel":"Space: toggle \xB7 Enter: create \xB7 Esc: back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function NameStep({value,onChange,onSubmit,errorMessage}){return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Team name (git-branch-safe):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{value,onInput:onChange,onChange,onSubmit,focused:!0,placeholder:"feat/auth-bug",backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this),errorMessage!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function MembersStep({agents,selected,cursor}){if(agents.length===0)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Members can be hired later via `genie team hire`."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Select members (space to toggle):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:agents.map((name,idx)=>{let isSelected=selected.has(name),isCursor=idx===cursor,tick=isSelected?"[x]":"[ ]",prefix=isCursor?"\u25B6 ":" ";return import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:isCursor?palette.cyan:palette.textMuted,children:prefix},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:isSelected?palette.success:palette.textDim,children:tick},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:` ${name}`},void 0,!1,void 0,this)]},name,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function isEnter(key){return key.name==="enter"||key.name==="return"}function handleNameStepKey(key,opts){if(key.name==="escape"){opts.onCancel();return}if(isEnter(key)&&opts.nameValid)opts.advanceFromName()}function handleMembersStepKey(key,opts){if(key.name==="escape"){opts.setStep("name");return}if(opts.availableAgents.length===0){if(isEnter(key))opts.confirmMembers();return}if(key.name==="up"||key.name==="k"){opts.setMemberCursor((prev)=>prev<=0?opts.availableAgents.length-1:prev-1);return}if(key.name==="down"||key.name==="j"){opts.setMemberCursor((prev)=>prev>=opts.availableAgents.length-1?0:prev+1);return}if(key.name==="space"){let name=opts.availableAgents[opts.memberCursor];if(name)opts.toggleMember(name);return}if(isEnter(key))opts.confirmMembers()}var import_react21;var init_TeamCreate=__esm(async()=>{init_team_manager();init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react();import_react21=__toESM(require_react_development(),1)});function getNodeIcon(node){if(node.type==="agent")return getAgentIcon(node);switch(node.type){case"session":return node.data.attached?"\u25B6":"\u25B8";case"window":return node.data.active?"\u25A0":"\u25A1";case"pane":return getPaneIcon(node);default:return" "}}function getAgentIcon(node){switch(node.wsAgentState){case"running":return"\u25CF";case"stopped":return"\u25CB";case"error":return"\u2298";case"spawning":return"\u231B";default:return"\u25CB"}}function getPaneIcon(node){if(node.data.isDead)return"\u2718";if(node.agentState==="working")return"\u25CF";if(node.agentState==="idle")return"\u25CB";if(node.agentState==="permission")return"\u26A0";if(node.agentState==="error")return"\u2718";if(node.data.command==="claude")return"\u25C6";return"\u25CB"}function getNodeColor(node){if(node.type==="agent")return getAgentColor(node);switch(node.type){case"session":return node.data.attached?palette.emerald:palette.textDim;case"window":return node.data.active?palette.cyan:palette.text;case"pane":return getPaneColor(node);default:return palette.text}}function getAgentColor(node){switch(node.wsAgentState){case"running":return palette.emerald;case"stopped":return palette.textDim;case"error":return palette.error;case"spawning":return palette.warning;default:return palette.textDim}}function getPaneColor(node){if(node.data.isDead)return palette.error;if(node.agentState==="working")return palette.cyan;if(node.agentState==="permission")return palette.warning;if(node.agentState==="error")return palette.error;if(node.agentState==="idle")return palette.textDim;if(node.data.command==="claude")return palette.cyan;return palette.textDim}function getNodeSuffix(node){if(node.type==="agent"){if(node.wsAgentState==="spawning"&&node.activePanes===0)return" [stuck \u2014 press R to retry]";let wc=node.data.windowCount;if(wc>1)return` (${wc} windows)`;if(wc===1)return" (1 window)";return""}if(node.type==="session"||node.type==="pane"){let count=node.activePanes;if(count>0)return` ${icons.agent}${count}`}return""}function getStateColor(state){switch(state){case"working":return palette.cyan;case"idle":return palette.textDim;case"permission":return palette.warning;case"error":return palette.error;default:return palette.textMuted}}var import_react22,TreeNodeRow;var init_TreeNode=__esm(()=>{init_theme2();init_jsx_dev_runtime();import_react22=__toESM(require_react_development(),1),TreeNodeRow=import_react22.memo(function({node,selected,onSelect,onToggle,onContextMenu}){let indent=" ".repeat(node.depth),hasChildren=node.children.length>0,expandIcon=hasChildren?node.expanded?icons.expanded:icons.collapsed:" ",icon=getNodeIcon(node),color2=getNodeColor(node),suffix=getNodeSuffix(node);return import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",backgroundColor:selected?palette.violet:void 0,onMouseDown:(event)=>{if(event.button===2&&onContextMenu){onSelect(node.id),onContextMenu(node.id);return}if(onSelect(node.id),hasChildren)onToggle(node.id)},children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[indent,expandIcon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:color2,children:[icon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:selected?"#ffffff":palette.text,children:node.label},void 0,!1,void 0,this),suffix?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:suffix},void 0,!1,void 0,this):null,node.agentState?import_jsx_dev_runtime2.jsxDEV("span",{fg:getStateColor(node.agentState),children:[" ",node.agentState]},void 0,!0,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:` [${node.type}]`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)})});function Nav({onTmuxSessionSelect,onNewAgentWindow,workspaceRoot,initialAgent,keyboardDisabled=!1}){let[diagnostics,setDiagnostics]=import_react24.useState(null),[sessionTree,setSessionTree]=import_react24.useState([]),[selectedIndex,setSelectedIndex]=import_react24.useState(0),[requestedInitialAgent,setRequestedInitialAgent]=import_react24.useState(initialAgent),[contextMenuNodeId,setContextMenuNodeId]=import_react24.useState(null),[spawnIntoAgent,setSpawnIntoAgent]=import_react24.useState(null),[spawnPickerTarget,setSpawnPickerTarget]=import_react24.useState(null),lastTarget=import_react24.useRef(null),selectedNodeId=import_react24.useRef(null);import_react24.useEffect(()=>{let active=!0;async function refresh(){try{let snap=await collectDiagnostics();if(!active)return;setDiagnostics(snap);let signaledAgent=consumeInitialAgentSignal();if(signaledAgent)setRequestedInitialAgent(signaledAgent)}catch(err){console.error("TUI: diagnostics failed:",err)}}refresh();let timer2=setInterval(refresh,2000);return()=>{active=!1,clearInterval(timer2)}},[]),import_react24.useEffect(()=>{if(!diagnostics)return;let newTree;if(workspaceRoot){let agentNames=scanAgents(workspaceRoot);newTree=buildWorkspaceTree({agentNames,sessions:diagnostics.sessions,executors:diagnostics.executors})}else newTree=buildSessionTree(diagnostics);setSessionTree((prev)=>mergeExpandedState(prev,newTree))},[diagnostics,workspaceRoot]);let flatNodes=import_react24.useMemo(()=>flattenTree(sessionTree),[sessionTree]);import_react24.useEffect(()=>{let node=flatNodes[selectedIndex]?.node;if(node)selectedNodeId.current=node.id},[selectedIndex,flatNodes]),import_react24.useLayoutEffect(()=>{if(flatNodes.length===0)return;if(selectedIndex>=flatNodes.length){setSelectedIndex(flatNodes.length-1);return}if(!selectedNodeId.current)return;let currentAtIndex=flatNodes[selectedIndex]?.node;if(currentAtIndex&¤tAtIndex.id===selectedNodeId.current)return;let restored=flatNodes.findIndex((n)=>n.node.id===selectedNodeId.current);if(restored>=0)setSelectedIndex(restored)},[flatNodes]),import_react24.useEffect(()=>{if(!requestedInitialAgent||flatNodes.length===0)return;let idx=flatNodes.findIndex((n)=>n.node.id===`agent:${requestedInitialAgent}`);if(idx>=0){setSelectedIndex(idx);let node=flatNodes[idx].node;if(node.type==="agent"&&node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);setRequestedInitialAgent(void 0)}},[requestedInitialAgent,flatNodes,onTmuxSessionSelect]),import_react24.useEffect(()=>{let current=flatNodes[selectedIndex]?.node;if(!current)return;let target=getSessionTarget(current);if(!target)return;if(current.type==="agent"&¤t.wsAgentState!=="running")return;let key=`${target.sessionName}:${target.windowIndex??""}`;if(key===lastTarget.current)return;lastTarget.current=key,onTmuxSessionSelect(target.sessionName,target.windowIndex)},[selectedIndex,flatNodes,onTmuxSessionSelect]);let handleSelect=import_react24.useCallback((id)=>{let idx=flatNodes.findIndex((n)=>n.node.id===id);if(idx>=0)setSelectedIndex(idx)},[flatNodes]),handleToggle=import_react24.useCallback((id)=>{setSessionTree((prev)=>toggleNode(prev,id))},[]),handleVerticalNav=import_react24.useCallback((keyName2)=>{let rowCount=flatNodes.length;if(rowCount===0)return;if(keyName2==="up"||keyName2==="k")setSelectedIndex((prev)=>prev===0?rowCount-1:prev-1);else if(keyName2==="down"||keyName2==="j")setSelectedIndex((prev)=>prev>=rowCount-1?0:prev+1)},[flatNodes.length]),handleExpandCollapse=import_react24.useCallback((keyName2)=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if((keyName2==="right"||keyName2==="l")&&node.children.length>0&&!node.expanded)handleToggle(node.id);else if((keyName2==="left"||keyName2==="h")&&node.expanded)handleToggle(node.id)},[flatNodes,selectedIndex,handleToggle]),handleEnter=import_react24.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if(node.type==="agent"){handleEnterAgent(node,onTmuxSessionSelect);return}if(node.children.length>0)handleToggle(node.id);let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)},[flatNodes,selectedIndex,handleToggle,onTmuxSessionSelect]),handleRetry=import_react24.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node||node.type!=="agent")return;if(node.wsAgentState!=="spawning"&&node.wsAgentState!=="error")return;(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(agentNameFromNode(node),onTmuxSessionSelect)})()},[flatNodes,selectedIndex,onTmuxSessionSelect]),handleContextMenu=import_react24.useCallback((nodeId)=>{let flat=flatNodes.find((n)=>n.node.id===nodeId);if(flat&&buildMenuItems(flat.node).length>0)setContextMenuNodeId(nodeId)},[flatNodes]),handleContextMenuAction=import_react24.useCallback((action,payload)=>{let node=flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node;if(!node)return;if(setContextMenuNodeId(null),action==="spawn-here"){let target=resolveSpawnHereTarget(node);if(target)setSpawnPickerTarget(target);return}dispatchContextMenuAction(action,node,payload,{sessionTree,onTmuxSessionSelect,onNewAgentWindow,openSpawnInto:setSpawnIntoAgent})},[flatNodes,contextMenuNodeId,sessionTree,onTmuxSessionSelect,onNewAgentWindow]),handleSpawnIntoConfirm=import_react24.useCallback((intent)=>{executeSpawnIntent(intent),setSpawnIntoAgent(null)},[]),handleSpawnIntoCancel=import_react24.useCallback(()=>{setSpawnIntoAgent(null)},[]),handleSpawnPickerConfirm=import_react24.useCallback((intent)=>{setSpawnPickerTarget(null),executeSpawnIntent(intent)},[]),handleSpawnPickerCancel=import_react24.useCallback(()=>{setSpawnPickerTarget(null)},[]),_menuDisabled=keyboardDisabled||contextMenuNodeId!==null,{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}=useTeamCreateControls({workspaceRoot,diagnostics,onTmuxSessionSelect});useKeyboard((key)=>{if(keyboardDisabled)return;if(spawnIntoAgent!==null||spawnPickerTarget!==null)return;if(tryOpenTeamCreate(key,{workspaceRoot,showTeamCreate,contextMenuNodeId,handleOpenTeamCreate}))return;if(showTeamCreate)return;handleKeyboardInput(key,{contextMenuNodeId,flatNodes,selectedIndex,setContextMenuNodeId,handleVerticalNav,handleExpandCollapse,handleEnter,handleRetry,onNewAgentWindow})});let agentCount=workspaceRoot?sessionTree.filter((n)=>n.type==="agent").length:diagnostics?.sessions.length??0,runningCount=workspaceRoot?sessionTree.filter((n)=>n.wsAgentState==="running").length:diagnostics?.sessions.reduce((sum,s2)=>sum+s2.windows.reduce((ws,w2)=>ws+w2.panes.length,0),0)??0,headerLabel=workspaceRoot?"Agents":"Sessions";return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",width:"100%",height:"100%",backgroundColor:palette.bg,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:headerLabel},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[" ",workspaceRoot?`${runningCount}/${agentCount}`:`${agentCount}s ${runningCount}p`]},void 0,!0,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("scrollbox",{focused:!0,height:"100%",style:{scrollbarOptions:{showArrows:!1,trackOptions:{foregroundColor:palette.scrollThumb,backgroundColor:palette.scrollTrack}}},children:flatNodes.map((flat,i2)=>import_jsx_dev_runtime2.jsxDEV(TreeNodeRow,{node:flat.node,selected:i2===selectedIndex,onSelect:handleSelect,onToggle:handleToggle,onContextMenu:handleContextMenu},flat.node.id,!1,void 0,this))},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexGrow:1,justifyContent:"center",alignItems:"center",children:import_jsx_dev_runtime2.jsxDEV("text",{fg:palette.textDim,children:"Collecting..."},void 0,!1,void 0,this)},void 0,!1,void 0,this),contextMenuNodeId?import_jsx_dev_runtime2.jsxDEV(ContextMenu,{items:buildMenuItems(flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node??{}),onAction:handleContextMenuAction,onClose:()=>setContextMenuNodeId(null),positionY:flatNodes.findIndex((n)=>n.node.id===contextMenuNodeId)+1},void 0,!1,void 0,this):null,spawnIntoAgent!==null?import_jsx_dev_runtime2.jsxDEV(SpawnTargetPicker,{agentName:spawnIntoAgent,sessions:diagnostics?.sessions??[],onConfirm:handleSpawnIntoConfirm,onCancel:handleSpawnIntoCancel},void 0,!1,void 0,this):null,spawnPickerTarget!==null?import_jsx_dev_runtime2.jsxDEV(AgentPicker,{target:spawnPickerTarget,onConfirm:handleSpawnPickerConfirm,onCancel:handleSpawnPickerCancel},void 0,!1,void 0,this):null,showTeamCreate?import_jsx_dev_runtime2.jsxDEV(TeamCreate,{availableAgents:workspaceRoot?scanAgents(workspaceRoot):[],workspaceRoot,onConfirm:handleTeamCreateConfirm,onCancel:handleTeamCreateCancel},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(SystemStats,{},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgLight,children:import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:buildFooterHint(workspaceRoot)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function useTeamCreateControls(opts){let{workspaceRoot,diagnostics,onTmuxSessionSelect}=opts,[showTeamCreate,setShowTeamCreate]=import_react24.useState(!1),pendingTeamNameRef=import_react24.useRef(null),handleOpenTeamCreate=import_react24.useCallback(()=>{if(!workspaceRoot)return;setShowTeamCreate(!0)},[workspaceRoot]),handleTeamCreateConfirm=import_react24.useCallback((result2)=>{setShowTeamCreate(!1),runTeamCreation(result2,workspaceRoot),pendingTeamNameRef.current=result2.teamName},[workspaceRoot]),handleTeamCreateCancel=import_react24.useCallback(()=>{setShowTeamCreate(!1)},[]);return import_react24.useEffect(()=>{let pending=pendingTeamNameRef.current;if(!pending||!diagnostics)return;let session=diagnostics.sessions.find((s2)=>s2.name===pending);if(!session)return;pendingTeamNameRef.current=null,onTmuxSessionSelect(session.name,resolvePreferredWindowIndex(session,pending))},[diagnostics,onTmuxSessionSelect]),{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}}function handleEnterAgent(node,onTmuxSessionSelect){if(node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);else if(node.wsAgentState==="running"){let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)}}function dispatchContextMenuAction(action,node,payload,deps){let name=node.label;if(action==="spawn-into"&&node.type==="agent"&&deps.openSpawnInto){deps.openSpawnInto(agentNameFromNode(node));return}if(handleAttachAction(action,node,deps.onTmuxSessionSelect))return;if(handleRetryAction(action,name,deps.onTmuxSessionSelect))return;if(handleGenieAction(action,name,payload))return;let tmuxServer=process.env.GENIE_TMUX_SERVER||"genie";if(handleRenameAction(action,node,tmuxServer,payload))return;if(handleAgentWindowActions(action,node,name,tmuxServer,deps.onNewAgentWindow))return;if(handleSessionNodeActions(action,node,tmuxServer,payload))return;if(handleWindowNodeActions(action,node,deps.sessionTree,tmuxServer,payload))return;handlePaneNodeActions(action,node,deps.sessionTree,tmuxServer,deps.onNewAgentWindow)}function handleAttachAction(action,node,onTmuxSessionSelect){if(action!=="attach")return!1;let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex);return!0}function handleRetryAction(action,name,onTmuxSessionSelect){if(action!=="retry")return!1;return(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(name,onTmuxSessionSelect)})(),!0}function handleGenieAction(action,name,payload){if(action==="send"&&payload)return executeGenie(["agent","send",payload,"--to",name]),!0;if(action==="answer-text"&&payload)return executeGenie(["agent","answer",name,`text:${payload}`]),!0;let genieArgs={spawn:["spawn",name],"spawn-plan":["spawn",name,"--plan-mode"],stop:["agent","stop",name],kill:["agent","kill",name],log:["agent","log",name],show:["agent","show",name],read:["read",name],"answer-yes":["agent","answer",name,"yes"],"answer-no":["agent","answer",name,"no"]}[action];if(genieArgs)return executeGenie(genieArgs),!0;return!1}function handleRenameAction(action,node,tmuxServer,payload){if(action==="rename-session"&&payload){let sess=node.type==="agent"?node.data.sessionName||node.label:node.id.split(":").slice(1).join(":");return executeTmux3(["-L",tmuxServer,"rename-session","-t",sess,payload]),!0}if(action==="rename-window"&&payload){let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;return executeTmux3(["-L",tmuxServer,"rename-window","-t",windowTarget,payload]),!0}if(action==="rename-pane"&&payload&&node.type==="pane"){let paneId=node.data.paneId;return executeTmux3(["-L",tmuxServer,"select-pane","-t",`${paneId}`,"-T",payload]),!0}return!1}function handleAgentWindowActions(action,node,name,tmuxServer,onNewAgentWindow){if(action==="agent-new-window"&&node.type==="agent"){if(onNewAgentWindow)onNewAgentWindow(agentNameFromNode(node));return!0}if(action==="new-empty-window"&&node.type==="agent"){let sessionName=node.data.sessionName||name;return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sessionName]),!0}return!1}function handleSessionNodeActions(action,node,tmuxServer,payload){if(node.type!=="session")return!1;let sess=node.id.split(":").slice(1).join(":");if(action==="kill-session")return executeTmux3(["-L",tmuxServer,"kill-session","-t",sess]),!0;if(action==="new-window")return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sess]),!0;if(action==="clone-session")return executeTmux3(["-L",tmuxServer,"new-session","-d","-s",`${sess}-clone`,"-t",sess]),!0;if(action==="spawn-in-session"&&payload)return executeGenie(["spawn",payload,"--session",sess]),!0;return!1}function handleWindowNodeActions(action,node,sessionTree,tmuxServer,payload){if(node.type!=="window")return!1;let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;if(action==="kill-window")return executeTmux3(["-L",tmuxServer,"kill-window","-t",windowTarget]),!0;if(action==="window-new-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent){let agentFullName=agentNameFromNode(parentAgent),suffix=Date.now()%1e4,role=`${agentFullName}-${suffix}`;executeGenie(["spawn",agentFullName,"--role",role,"--window",windowTarget])}return!0}if(action==="split-pane")return executeTmux3(["-L",tmuxServer,"split-window","-t",windowTarget]),!0;if(action==="spawn-in-window"&&payload)return executeGenie(["spawn",payload,"--session",idParts[1]]),!0;return!1}function handlePaneNodeActions(action,node,sessionTree,tmuxServer,onNewAgentWindow){if(node.type!=="pane")return!1;let paneId=node.data.paneId;if(action==="clone-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent&&onNewAgentWindow)onNewAgentWindow(agentNameFromNode(parentAgent));return!0}if(action==="kill-pane")return executeTmux3(["-L",tmuxServer,"kill-pane","-t",`${paneId}`]),!0;if(action==="split-h")return executeTmux3(["-L",tmuxServer,"split-window","-h","-t",`${paneId}`]),!0;if(action==="split-v")return executeTmux3(["-L",tmuxServer,"split-window","-v","-t",`${paneId}`]),!0;return!1}function buildFooterHint(workspaceRoot){return`\u2191\u2193:nav \u2190\u2192:expand Enter:${workspaceRoot?"spawn/attach":"attach"} ^T:new${workspaceRoot?" ^N:team":""} R:retry .:menu`}function tryOpenTeamCreate(key,opts){if(!key.ctrl||key.name!=="n")return!1;if(!opts.workspaceRoot||opts.showTeamCreate||opts.contextMenuNodeId)return!1;return opts.handleOpenTeamCreate(),!0}function tryOpenContextMenu(flatNodes,selectedIndex,setContextMenuNodeId){let node=flatNodes[selectedIndex]?.node;if(node&&buildMenuItems(node).length>0)return setContextMenuNodeId(node.id),!0;return!1}function dispatchNavKey(key,handlers2,agentAction){let n=key.name;if(n==="up"||n==="k"||n==="down"||n==="j")handlers2.handleVerticalNav(n);else if(n==="right"||n==="l"||n==="left"||n==="h")handlers2.handleExpandCollapse(n);else if(n==="enter"||n==="return")handlers2.handleEnter();else if(n==="r")handlers2.handleRetry();else if(key.ctrl&&n==="t")agentAction()}function handleKeyboardInput(key,opts){if(key.name==="."&&!opts.contextMenuNodeId){if(tryOpenContextMenu(opts.flatNodes,opts.selectedIndex,opts.setContextMenuNodeId))return}if(opts.contextMenuNodeId)return;dispatchNavKey(key,opts,()=>{let node=opts.flatNodes[opts.selectedIndex]?.node;if(node?.type==="agent"&&node.wsAgentState==="running"&&opts.onNewAgentWindow)opts.onNewAgentWindow(agentNameFromNode(node))})}function agentNameFromNode(node){return node.id.replace(/^agent:/,"")}function spawnAgent(name,onTmuxSessionSelect){try{let{spawn:spawn5}=__require("child_process"),{join:join65,resolve:resolve14}=__require("path"),{existsSync:existsSync51,mkdirSync:mkdirSync22,openSync:openSync2}=__require("fs"),{homedir:homedir33}=__require("os"),bunPath=process.execPath||"bun",genieBin=process.argv[1],wsRoot=process.env.GENIE_TUI_WORKSPACE,sessionName=name.replace(/\//g,"-"),cwd;if(wsRoot){let parentName=name.includes("/")?name.slice(0,name.indexOf("/")):name,agentDir=resolve14(join65(wsRoot,"agents",parentName));if(existsSync51(agentDir))cwd=agentDir}let{GENIE_TUI_PANE:_a,GENIE_TUI_RIGHT:_b,GENIE_TUI_WORKSPACE:_c,GENIE_IS_DAEMON:_d,...cleanEnv}=process.env,logDir=join65(homedir33(),".genie","logs","tui-spawn");try{mkdirSync22(logDir,{recursive:!0})}catch{}let logPath=join65(logDir,`${sessionName}-${Date.now()}.log`),logFd;try{logFd=openSync2(logPath,"a")}catch{logFd=void 0}let spawnOpts=logFd!==void 0?{detached:!0,stdio:["ignore",logFd,logFd],cwd,env:cleanEnv}:{detached:!0,stdio:"ignore",cwd,env:cleanEnv},child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,"spawn",name,"--session",sessionName,"--new-window"],spawnOpts):spawn5("genie",["spawn",name,"--session",sessionName,"--new-window"],spawnOpts);if(child.on("exit",(code)=>{if(code&&code!==0)console.error(`TUI: spawn "${name}" exited ${code}. See ${logPath}`)}),child.on("error",(err)=>{console.error(`TUI: spawn "${name}" error: ${err.message}. See ${logPath}`)}),child.unref(),onTmuxSessionSelect)attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect)}catch(err){console.error(`TUI: spawn failed for ${name}:`,err instanceof Error?err.message:err)}}function attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt=0){(async()=>{try{let session=(await collectDiagnostics()).sessions.find((candidate)=>candidate.name===sessionName);if(session){let windowIndex=resolvePreferredWindowIndex(session,sessionName);if(windowIndex!==void 0){onTmuxSessionSelect(sessionName,windowIndex);return}}}catch{}if(attempt>=40){onTmuxSessionSelect(sessionName);return}setTimeout(()=>{attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt+1)},250)})()}function executeTmux3(args){try{let{spawn:spawn5}=__require("child_process");spawn5("tmux",args,{detached:!0,stdio:"ignore"}).unref()}catch{}}function executeGenie(args){try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1];(genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{detached:!0,stdio:"ignore"}):spawn5("genie",args,{detached:!0,stdio:"ignore"})).unref()}catch{}}function executeGenieAwaited(args){return new Promise((resolve14,reject)=>{try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{stdio:"ignore"}):spawn5("genie",args,{stdio:"ignore"});child.on("exit",(code)=>resolve14(code)),child.on("error",reject)}catch(err){reject(err instanceof Error?err:Error(String(err)))}})}function resolveSpawnHereTarget(node){if(node.type==="session"){let sess=node.id.split(":").slice(1).join(":");if(sess.length===0)return null;return{session:sess}}if(node.type==="window"){let idParts=node.id.split(":");if(idParts.length<3)return null;return{session:idParts[1],window:`${idParts[1]}:${idParts[2]}`}}return null}function executeSpawnIntent(intent){try{let{argv}=buildSpawnInvocation(intent);executeGenie(argv)}catch(err){console.error("TUI: spawn-intent execution failed:",err instanceof Error?err.message:err)}}async function runTeamCreation(result2,workspaceRoot){let argv;try{({argv}=buildSpawnInvocation({kind:"create-team",name:result2.teamName,repo:workspaceRoot}))}catch(err){console.error("TUI: team create intent build failed:",err instanceof Error?err.message:err);return}let createExit=null;try{createExit=await executeGenieAwaited(argv)}catch(err){console.error("TUI: team create spawn failed:",err instanceof Error?err.message:err);return}if(createExit!==0){console.error(`TUI: team create exited ${createExit} \u2014 skipping member hires for "${result2.teamName}"`);return}for(let member of result2.members)try{let code=await executeGenieAwaited(["team","hire",member,"--team",result2.teamName]);if(code!==0)console.error(`TUI: team hire "${member}" exited ${code} \u2014 continuing with remaining members`)}catch(err){console.error(`TUI: team hire "${member}" failed:`,err instanceof Error?err.message:err)}}function findParentAgent(tree,targetId){for(let node of tree){if(node.type==="agent"&&containsNode(node,targetId))return node;let found=findParentAgent(node.children,targetId);if(found)return found}return null}function containsNode(node,targetId){if(node.id===targetId)return!0;return node.children.some((c)=>containsNode(c,targetId))}function mergeExpandedState(oldTree,newTree){if(oldTree.length===0)return newTree;let oldState=new Map;function collect(nodes){for(let n of nodes)oldState.set(n.id,{expanded:n.expanded,childCount:n.children.length}),collect(n.children)}collect(oldTree);function apply(nodes){return nodes.map((n)=>({...n,expanded:(()=>{let previous=oldState.get(n.id);if(!previous)return n.expanded;if(previous.childCount===0&&n.children.length>0)return n.expanded;return previous.expanded})(),children:apply(n.children)}))}return apply(newTree)}var import_react24;var init_Nav=__esm(async()=>{init_spawn_invocation();init_workspace();init_diagnostics();init_initial_agent();init_theme2();init_SystemStats();init_TreeNode();init_jsx_dev_runtime();await __promiseAll([init_react(),init_AgentPicker(),init_ContextMenu(),init_SpawnTargetPicker(),init_TeamCreate()]);import_react24=__toESM(require_react_development(),1)});function QuitDialog({onConfirm,onCancel}){return useKeyboard((key)=>{if(key.name==="enter"||key.name==="return"||key.name==="y")onConfirm();else if(key.name==="escape"||key.name==="n")onCancel()}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:"#0a0a0a",children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.violet,backgroundColor:"#111111",paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.purple,children:"Quit genie?"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:"Enter"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to quit "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" | "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:" Esc"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Hint: Ctrl+D to detach (keep running)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var init_QuitDialog=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react()});import{execSync as execSync17}from"child_process";import{readFileSync as readFileSync32}from"fs";function App({rightPane,workspaceRoot,initialAgent}){let[showQuit,setShowQuit]=import_react27.useState(!1);useKeyboard((key)=>{if(key.ctrl&&key.name==="q")if(showQuit)handleQuit();else setShowQuit(!0)});let handleQuit=import_react27.useCallback(()=>{try{let genieHome5=process.env.GENIE_HOME??`${process.env.HOME}/.genie`,pid=readFileSync32(`${genieHome5}/serve.pid`,"utf-8").trim();process.kill(Number.parseInt(pid,10),"SIGTERM")}catch{}try{execSync17("tmux -L genie-tui kill-server",{stdio:"ignore"})}catch{}},[]),handleTmuxSessionSelect=import_react27.useCallback((sessionName,windowIndex)=>{if(!rightPane)return;attachProjectWindow(rightPane,sessionName,windowIndex)},[rightPane]);return import_jsx_dev_runtime2.jsxDEV("box",{width:"100%",height:"100%",children:[import_jsx_dev_runtime2.jsxDEV(Nav,{onTmuxSessionSelect:handleTmuxSessionSelect,onNewAgentWindow:newAgentWindow,workspaceRoot,initialAgent,keyboardDisabled:showQuit},void 0,!1,void 0,this),showQuit?import_jsx_dev_runtime2.jsxDEV(QuitDialog,{onConfirm:handleQuit,onCancel:()=>setShowQuit(!1)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var import_react27;var init_app=__esm(async()=>{init_tmux2();init_jsx_dev_runtime();await __promiseAll([init_react(),init_Nav(),init_QuitDialog()]);import_react27=__toESM(require_react_development(),1)});var exports_render={};__export(exports_render,{renderNav:()=>renderNav});async function renderNav(){let rightPane=process.env.GENIE_TUI_RIGHT||void 0,workspaceRoot=process.env.GENIE_TUI_WORKSPACE||void 0,initialAgent=process.env.GENIE_TUI_AGENT||void 0,renderer=await createCliRenderer({exitOnCtrlC:!1,useMouse:!0});createRoot(renderer).render(import_jsx_dev_runtime2.jsxDEV(App,{rightPane,workspaceRoot,initialAgent},void 0,!1,void 0,this)),await new Promise((resolve14)=>{renderer.once("destroy",resolve14)})}var init_render=__esm(async()=>{init_jsx_dev_runtime();await __promiseAll([init_core(),init_react(),init_app()])});var exports_tui={};__export(exports_tui,{launchTui:()=>launchTui});async function launchTui(){let{renderNav:renderNav2}=await init_render().then(() => exports_render);await renderNav2()}var exports_resolve_agent_cwd={};__export(exports_resolve_agent_cwd,{resolveAgentFromCwd:()=>resolveAgentFromCwd});import{existsSync as existsSync51}from"fs";import{basename as basename14,dirname as dirname16,join as join65,relative as relative7,sep as sep3}from"path";function isRelativeWithin(rel,original){return!rel.startsWith("..")&&rel!==original}function resolveFromCanonicalDir(cwd,agentsDir){let relToAgents=relative7(agentsDir,cwd);if(!isRelativeWithin(relToAgents,cwd))return null;let segments=relToAgents.split(sep3).filter(Boolean);if(segments.length===0)return null;let agentName=segments[0];if(!existsSync51(join65(agentsDir,agentName,"AGENTS.md")))return null;let source=segments.length===1?"exact":"parent";return{agent:agentName,source}}function resolveFromWalkUp(cwd,workspaceRoot){let wsRel=relative7(workspaceRoot,cwd);if(!isRelativeWithin(wsRel,cwd))return null;let current=cwd;while(current!==workspaceRoot&¤t!==dirname16(current)){if(existsSync51(join65(current,"AGENTS.md")))return{agent:basename14(current),source:"parent"};current=dirname16(current)}return null}function resolveAgentFromCwd(cwd,workspaceRoot){return resolveFromCanonicalDir(cwd,join65(workspaceRoot,"agents"))??resolveFromWalkUp(cwd,workspaceRoot)??{agent:"genie",source:"default"}}var init_resolve_agent_cwd=()=>{};var import__=__toESM(require_commander(),1),{program,createCommand,createArgument,createOption,CommanderError,InvalidArgumentError,InvalidOptionArgumentError,Command,Argument,Option,Help}=import__.default;init_claude_settings();init_ensure_tmux();init_genie_config2();init_system_detect();init_workspace();import{existsSync as existsSync6,readFileSync as readFileSync5,readdirSync as readdirSync2,statSync,unlinkSync as unlinkSync4}from"fs";import{homedir as homedir6}from"os";import{join as join6}from"path";var{$:$2}=globalThis.Bun;function printSectionHeader(title){console.log(),console.log(`\x1B[1m${title}:\x1B[0m`)}function printCheckResult(result2){let icon={pass:"\x1B[32m\u2713\x1B[0m",fail:"\x1B[31m\u2717\x1B[0m",warn:"\x1B[33m!\x1B[0m"}[result2.status],message=result2.message?` ${result2.message}`:"";if(console.log(` ${icon} ${result2.name}${message}`),result2.suggestion)console.log(` \x1B[2m${result2.suggestion}\x1B[0m`)}async function checkPrerequisites(){let results=[],tmuxCheck=await checkCommand("tmux");if(tmuxCheck.exists)results.push({name:"tmux",status:"pass",message:tmuxCheck.version||""});else results.push({name:"tmux",status:"fail",suggestion:"Install with: brew install tmux (or apt install tmux)"});let jqCheck=await checkCommand("jq");if(jqCheck.exists)results.push({name:"jq",status:"pass",message:jqCheck.version||""});else results.push({name:"jq",status:"fail",suggestion:"Install with: brew install jq (or apt install jq)"});let bunCheck=await checkCommand("bun");if(bunCheck.exists)results.push({name:"bun",status:"pass",message:bunCheck.version||""});else results.push({name:"bun",status:"fail",suggestion:"Install with: curl -fsSL https://bun.sh/install | bash"});let claudeCheck=await checkCommand("claude");if(claudeCheck.exists)results.push({name:"Claude Code",status:"pass",message:claudeCheck.version||""});else results.push({name:"Claude Code",status:"warn",suggestion:"Install with: npm install -g @anthropic-ai/claude-code"});return results}async function checkConfiguration(){let results=[];if(genieConfigExists())results.push({name:"Genie config exists",status:"pass",message:contractClaudePath(getGenieConfigPath())});else results.push({name:"Genie config exists",status:"warn",message:"not found",suggestion:"Run: genie setup"});if(isSetupComplete())results.push({name:"Setup complete",status:"pass"});else results.push({name:"Setup complete",status:"warn",message:"not completed",suggestion:"Run: genie setup"});let claudeSettingsPath=getClaudeSettingsPath();if(existsSync6(claudeSettingsPath))results.push({name:"Claude settings exists",status:"pass",message:contractClaudePath(claudeSettingsPath)});else results.push({name:"Claude settings exists",status:"warn",message:"not found",suggestion:"Claude Code creates this on first run"});return results}async function checkTmux(){let results=[];try{if((await $2`${tmuxBin()} -L genie list-sessions 2>/dev/null`.quiet()).exitCode===0)results.push({name:"Server running",status:"pass"});else return results.push({name:"Server running",status:"warn",message:"no sessions",suggestion:"Start with: tmux new-session -d -s genie"}),results}catch{return results.push({name:"Server running",status:"warn",message:"could not check"}),results}let sessionName=(await loadGenieConfig()).session.name;try{if((await $2`${tmuxBin()} -L genie has-session -t ${sessionName} 2>/dev/null`.quiet()).exitCode===0)results.push({name:`Session '${sessionName}' exists`,status:"pass"});else results.push({name:`Session '${sessionName}' exists`,status:"warn",suggestion:`Start with: tmux new-session -d -s ${sessionName}`})}catch{results.push({name:`Session '${sessionName}' exists`,status:"warn",message:"could not check"})}return results}async function checkWorkerProfiles(){let results=[];if(!genieConfigExists())return results.push({name:"Worker profiles",status:"warn",message:"no genie config",suggestion:"Run: genie setup"}),results;let config=await loadGenieConfig(),profiles=config.workerProfiles;if(!profiles||Object.keys(profiles).length===0)return results.push({name:"Worker profiles",status:"pass",message:"none configured (using defaults)"}),results;let totalProfiles=Object.keys(profiles).length;results.push({name:"Profiles configured",status:"pass",message:`${totalProfiles} profile${totalProfiles===1?"":"s"}`});for(let name of Object.keys(profiles))results.push({name:`Profile '${name}'`,status:"pass",message:"claude (direct)"});if(config.defaultWorkerProfile)if(profiles[config.defaultWorkerProfile])results.push({name:"Default profile",status:"pass",message:config.defaultWorkerProfile});else results.push({name:"Default profile",status:"warn",message:`'${config.defaultWorkerProfile}' not found`,suggestion:"Run: genie profiles default <profile>"});return results}async function checkBridge(){let results=[];try{let{getBridgeStatus:getBridgeStatus2,removeBridgePidfile:removeBridgePidfile2}=await Promise.resolve().then(() => (init_bridge_status(),exports_bridge_status)),res=await getBridgeStatus2(void 0,{});if(res.state==="stopped")return results.push({name:"Bridge",status:"warn",message:"stopped (no pidfile)",suggestion:"Start the bridge with: genie serve"}),results;if(res.state==="stale"){if(res.pidfile)removeBridgePidfile2();return results.push({name:"Bridge",status:"fail",message:`stale: ${res.detail}`,suggestion:"Restart the bridge with: genie serve restart"}),results}let{pong,pidfile}=res;if(!pong||!pidfile)return results.push({name:"Bridge",status:"warn",message:"running state missing pong/pidfile metadata"}),results;let uptimeSec=Math.round(pong.uptimeMs/1000);results.push({name:"Bridge running",status:"pass",message:`running (pid ${pong.pid}, uptime ${uptimeSec}s)`}),results.push({name:"NATS ping",status:"pass",message:`pong in ${res.latencyMs??0}ms (${pidfile.natsUrl})`}),results.push({name:"Subjects",status:"pass",message:pong.subjects.join(", ")})}catch(err){let detail=err instanceof Error?err.message:String(err);results.push({name:"Bridge module",status:"warn",message:`could not probe bridge: ${detail}`})}return results}function checkLegacyAgentFrontmatter(workspaceRoot){let results=[],root=workspaceRoot??findWorkspace()?.root;if(!root)return[];let agentsDir=join6(root,"agents");if(!existsSync6(agentsDir))return[];let entries;try{entries=readdirSync2(agentsDir)}catch{return[]}for(let name of entries){let agentDir=join6(agentsDir,name);try{if(!statSync(agentDir).isDirectory())continue}catch{continue}let yamlPath=join6(agentDir,"agent.yaml"),agentsMdPath=join6(agentDir,"AGENTS.md");if(!existsSync6(yamlPath)||!existsSync6(agentsMdPath))continue;let headContent;try{headContent=readFileSync5(agentsMdPath,"utf-8").slice(0,4)}catch{continue}if(!headContent.startsWith("---"))continue;results.push({name:`agents/${name}/AGENTS.md`,status:"warn",message:"legacy frontmatter detected (ignored by sync)",suggestion:`Move config into agents/${name}/agent.yaml \u2014 AGENTS.md is prompt-only post-migration.`})}if(results.length===0)results.push({name:"No legacy frontmatter in agents/*/AGENTS.md",status:"pass"});return results}function runCheckSection(label,results,counts){printSectionHeader(label);for(let result2 of results){if(printCheckResult(result2),result2.status==="fail")counts.errors=!0;if(result2.status==="warn")counts.warnings=!0}}async function doctorCommand(options){if(options?.fix){await doctorFix();return}console.log(),console.log("\x1B[1mGenie Doctor\x1B[0m"),console.log(`\x1B[2m${"\u2500".repeat(40)}\x1B[0m`);let counts={errors:!1,warnings:!1};if(runCheckSection("Prerequisites",await checkPrerequisites(),counts),runCheckSection("Configuration",await checkConfiguration(),counts),runCheckSection("Tmux",await checkTmux(),counts),runCheckSection("Worker Profiles",await checkWorkerProfiles(),counts),runCheckSection("Omni Bridge",await checkBridge(),counts),runCheckSection("Agent Config",checkLegacyAgentFrontmatter(),counts),console.log(),console.log(`\x1B[2m${"\u2500".repeat(40)}\x1B[0m`),counts.errors)console.log("\x1B[31mSome checks failed.\x1B[0m Run \x1B[36mgenie setup\x1B[0m to fix.");else if(counts.warnings)console.log("\x1B[33mSome warnings detected.\x1B[0m Everything should still work.");else console.log("\x1B[32mAll checks passed!\x1B[0m");if(console.log(),counts.errors)process.exit(1)}async function killStalePostgres(){console.log(" Killing stale postgres processes...");try{let{execSync:execSync2}=await import("child_process");execSync2('pkill -9 -f "postgres.*pgserve" 2>/dev/null || true',{stdio:"ignore",timeout:5000}),console.log(" \x1B[32m\u2713\x1B[0m Stale postgres processes killed")}catch{console.log(" \x1B[33m!\x1B[0m Could not kill stale postgres processes")}}async function cleanSharedMemory(){console.log(" Cleaning shared memory...");try{let{execSync:execSync2}=await import("child_process");execSync2("ipcs -m 2>/dev/null | awk '$6 == 0 {print $2}' | xargs -I{} ipcrm -m {} 2>/dev/null || true",{stdio:"ignore",timeout:5000}),console.log(" \x1B[32m\u2713\x1B[0m Shared memory cleaned")}catch{console.log(" \x1B[32m\u2713\x1B[0m No stale shared memory")}}async function stopExistingDaemon(pidFile){try{let{readFileSync:readFileSync6}=await import("fs"),pid=Number.parseInt(readFileSync6(pidFile,"utf-8").trim(),10);if(!Number.isNaN(pid)&&pid>0)try{process.kill(pid,"SIGTERM"),console.log(` \x1B[32m\u2713\x1B[0m Stopped existing daemon (PID ${pid})`),await new Promise((r)=>setTimeout(r,1000))}catch{}}catch{}}function removeStaleFiles(genieHome3,pidFile){let portFile=join6(genieHome3,"pgserve.port"),postmasterPid=join6(genieHome3,"data","pgserve","postmaster.pid");for(let file of[portFile,pidFile,postmasterPid])if(existsSync6(file))try{unlinkSync4(file),console.log(` \x1B[32m\u2713\x1B[0m Removed ${file}`)}catch{console.log(` \x1B[33m!\x1B[0m Could not remove ${file}`)}}async function restartDaemon(){console.log(" Restarting daemon...");try{let{spawn}=await import("child_process"),bunPath=process.execPath??"bun",genieBin=process.argv[1]??"genie";spawn(bunPath,[genieBin,"daemon","start"],{detached:!0,stdio:"ignore"}).unref(),await new Promise((resolve2)=>setTimeout(resolve2,2000)),console.log(" \x1B[32m\u2713\x1B[0m Daemon restart initiated")}catch{console.log(" \x1B[33m!\x1B[0m Could not restart daemon \u2014 run: genie daemon start")}}async function doctorFix(){console.log(`
|
|
3150
3185
|
\x1B[1mGenie Doctor \u2014 Auto Fix\x1B[0m`),console.log(`\x1B[2m${"\u2500".repeat(40)}\x1B[0m
|
|
3151
3186
|
`),await killStalePostgres(),await cleanSharedMemory();let genieHome3=process.env.GENIE_HOME??join6(homedir6(),".genie"),pidFile=join6(genieHome3,"scheduler.pid");await stopExistingDaemon(pidFile),removeStaleFiles(genieHome3,pidFile),await restartDaemon(),console.log(`
|
|
3152
3187
|
\x1B[2m${"\u2500".repeat(40)}\x1B[0m`),console.log(`\x1B[32mFix complete.\x1B[0m Run \x1B[36mgenie doctor\x1B[0m to verify.
|
|
@@ -3319,7 +3354,7 @@ Done. ${results.length} migration${results.length===1?"":"s"} applied.`),await s
|
|
|
3319
3354
|
WHERE created_at < now() - make_interval(secs => ${intervalSec})
|
|
3320
3355
|
`,count=Number(result2.count);console.log(`Deleted ${count} event${count===1?"":"s"} older than ${options.olderThan}.`)}await shutdown()}catch(err){let message=err instanceof Error?err.message:String(err);console.error(`Prune failed: ${message}`),process.exit(1)}}function registerDbCommands(program2){let db=program2.command("db").description("Database management (pgserve)");db.command("status").description("Show pgserve health, port, data dir, and table counts").action(dbStatusCommand),db.command("migrate").description("Run pending database migrations").action(dbMigrateCommand),db.command("query <sql>").description("Execute arbitrary SQL and print results").action(dbQueryCommand),db.command("url").description("Print postgres connection URL for direct access").option("--quiet","Print URL only, no trailing newline (for scripts)").action((options)=>{let url=`postgres://postgres:postgres@127.0.0.1:${getActivePort()}/genie`;if(options.quiet)process.stdout.write(url);else console.log(url)}),db.command("prune-events").description("Prune old runtime events beyond retention period").option("--older-than <duration>","Delete events older than (e.g., 30d, 7d)","14d").option("--dry-run","Show count without deleting").action(dbPruneEventsCommand),db.command("backup").description("Dump database to .genie/snapshot.sql.gz").action(dbBackupCommand),db.command("restore [file]").description("Restore database from snapshot (default: .genie/snapshot.sql.gz)").option("-y, --yes","Skip confirmation prompt").action(dbRestoreCommand)}init_protocol_router();import{execSync as execSync14}from"child_process";import{existsSync as existsSync41}from"fs";import{mkdir as mkdir6,readFile as readFile12,writeFile as writeFile6}from"fs/promises";import{tmpdir as tmpdir3}from"os";import{join as join50}from"path";init_tmux();import{existsSync as existsSync36}from"fs";import{join as join45}from"path";var REPOS_BASE="/home/genie/workspace/repos";function parseWishRef(ref){let trimmed=ref.trim();if(!trimmed)throw Error("Wish reference cannot be empty");let slashIndex=trimmed.indexOf("/");if(slashIndex===-1)return{slug:trimmed};let namespace=trimmed.slice(0,slashIndex),slug=trimmed.slice(slashIndex+1);if(!namespace)throw Error(`Invalid wish reference "${ref}": namespace is empty`);if(!slug)throw Error(`Invalid wish reference "${ref}": slug is empty`);if(slug.includes("/"))throw Error(`Invalid wish reference "${ref}": slug cannot contain "/"`);return{namespace,slug}}async function resolveWish(ref){let parsed=parseWishRef(ref);if(!parsed.namespace){let cwdWishPath=join45(process.cwd(),".genie","wishes",parsed.slug,"WISH.md");if(existsSync36(cwdWishPath)){let repo2=process.cwd(),session2=await resolveRepoSession(repo2);return{repo:repo2,wishPath:cwdWishPath,session:session2,slug:parsed.slug}}throw Error(`Wish "${parsed.slug}" not found in current directory. Use namespace/slug format (e.g., genie/${parsed.slug}) to specify the repo.`)}let repo=join45(REPOS_BASE,parsed.namespace);if(!existsSync36(repo))throw Error(`Repository "${parsed.namespace}" not found at ${repo}. Available repos are in ${REPOS_BASE}.`);let wishPath=join45(repo,".genie","wishes",parsed.slug,"WISH.md");if(!existsSync36(wishPath))throw Error(`Wish "${parsed.slug}" not found in repo "${parsed.namespace}". Expected: ${wishPath}`);let session=await resolveRepoSession(repo);return{repo,wishPath,session,slug:parsed.slug}}init_wish_state();init_agents();init_interactivity();init_term_format();init_wish_state();import{execSync as execSync12}from"child_process";import{existsSync as existsSync37}from"fs";import{readFile as readFile11}from"fs/promises";import{dirname as dirname9,join as join46}from"path";async function loadExecutorInfo(){let[registryMod,executorMod,assignmentMod]=await Promise.all([Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry)),Promise.resolve().then(() => (init_executor_registry(),exports_executor_registry)),Promise.resolve().then(() => (init_assignment_registry(),exports_assignment_registry))]);return{registry:registryMod,executorRegistry:executorMod,assignmentRegistry:assignmentMod}}function normalizeGitPath2(path3){if(process.platform!=="darwin")return path3;if(!path3.startsWith("/private/"))return path3;let logicalPath=path3.slice(8);return existsSync37(logicalPath)?logicalPath:path3}function resolveWishPath(slug,cwd){let base=cwd??process.cwd(),cwdPath=join46(base,".genie","wishes",slug,"WISH.md");if(existsSync37(cwdPath))return cwdPath;try{let commonDir=execSync12("git rev-parse --path-format=absolute --git-common-dir",{encoding:"utf-8",cwd:base,stdio:["pipe","pipe","pipe"]}).trim(),repoRoot=normalizeGitPath2(dirname9(commonDir));if(repoRoot!==base){let repoPath=join46(repoRoot,".genie","wishes",slug,"WISH.md");if(existsSync37(repoPath))return repoPath}}catch{}return null}function parseRef(ref){let hashIdx=ref.indexOf("#");if(hashIdx===-1)throw Error(`Invalid reference "${ref}". Expected format: <slug>#<group>`);let slug=ref.slice(0,hashIdx),group=ref.slice(hashIdx+1);if(!slug||!group)throw Error(`Invalid reference "${ref}". Both slug and group are required.`);return{slug,group}}var STATUS_ICONS={blocked:"\uD83D\uDD12",ready:"\uD83D\uDFE2",in_progress:"\uD83D\uDD04",done:"\u2705"};async function detectWaveCompletion(slug,groupName,cwd){let wishPath=resolveWishPath(slug,cwd);if(!wishPath)return null;let content=await readFile11(wishPath,"utf-8"),targetWave=parseExecutionStrategy(content).find((w)=>w.groups.some((g)=>g.group===groupName));if(!targetWave)return null;let state=await getState(slug,cwd);if(!state)return null;let waveGroupNames=targetWave.groups.map((g)=>g.group);if(!waveGroupNames.every((g)=>state.groups[g]?.status==="done"))return null;return{waveName:targetWave.name,waveGroups:waveGroupNames}}async function ensureWorkPushed(slug,group){try{if(execSync12("git status --porcelain",{encoding:"utf-8"}).trim())console.log(" Committing dirty working tree..."),execSync12("git add -A",{encoding:"utf-8"}),execSync12(`git commit -m "wip: ${slug}#${group}"`,{encoding:"utf-8"}),console.log(` Committed as "wip: ${slug}#${group}"`)}catch{}try{if(execSync12("git log @{u}..HEAD --oneline",{encoding:"utf-8"}).trim())console.log(" Pushing unpushed commits..."),execSync12("git push",{encoding:"utf-8",timeout:30000}),console.log(" Push complete.")}catch{try{let branch=execSync12("git rev-parse --abbrev-ref HEAD",{encoding:"utf-8"}).trim();if(branch&&branch!=="HEAD")execSync12(`git push -u origin ${branch}`,{encoding:"utf-8",timeout:30000}),console.log(" Push complete (set upstream).")}catch{console.log(" \u26A0\uFE0F Push failed \u2014 manual push may be needed.")}}}async function autoCleanupTeam(){let teamName=process.env.GENIE_TEAM;if(!teamName)return;try{let teamManager=await Promise.resolve().then(() => (init_team_manager(),exports_team_manager)),config=await teamManager.getTeam(teamName);if(!config)return;if(config.status==="done")return;console.log(` \uD83E\uDDF9 Auto-cleaning team "${teamName}"...`),await teamManager.setTeamStatus(teamName,"done"),await teamManager.killTeamMembers(teamName),console.log(` \u2705 Team "${teamName}" marked done, members killed.`)}catch{console.log(` \u26A0\uFE0F Auto-cleanup skipped \u2014 run \`genie team done ${teamName}\` manually.`)}}function autoKillPane(){let paneId=process.env.TMUX_PANE;if(paneId)setTimeout(()=>{try{let{genieTmuxCmd:genieTmuxCmd2}=(init_tmux_wrapper(),__toCommonJS(exports_tmux_wrapper));execSync12(genieTmuxCmd2(`kill-pane -t '${paneId}'`),{encoding:"utf-8"})}catch{process.exit(0)}},1000);else process.exit(0)}async function resolveNotificationTargets(){let teamName=process.env.GENIE_TEAM;if(!teamName)return{leader:"team-lead"};try{let teamManager=await Promise.resolve().then(() => (init_team_manager(),exports_team_manager)),leader=await teamManager.resolveLeaderName(teamName),config=await teamManager.getTeam(teamName);return{leader,spawner:config?.spawner}}catch{return{leader:teamName}}}async function notifyWaveCompletion(waveResult,wishComplete){console.log(` \uD83C\uDF0A ${waveResult.waveName} complete! All groups done: ${waveResult.waveGroups.join(", ")}`);try{let protocolRouter=await Promise.resolve().then(() => (init_protocol_router(),exports_protocol_router)),repoPath=process.cwd(),{leader,spawner}=await resolveNotificationTargets(),message=wishComplete?`WISH COMPLETE \u2014 all groups done: [${waveResult.waveGroups.join(", ")}]. Run \`genie team done\` to clean up.`:`${waveResult.waveName} complete. All groups done: [${waveResult.waveGroups.join(", ")}]. Run /review or advance to next wave.`,result2=await protocolRouter.sendMessage(repoPath,"cli",leader,message);if(result2&&typeof result2==="object"&&"delivered"in result2&&!result2.delivered)console.warn(` \u26A0\uFE0F Wave-complete notification to ${leader} may not have been delivered.`);else console.log(` Notified ${leader} of wave completion.`);if(spawner&&spawner!==leader&&spawner!=="cli")await protocolRouter.sendMessage(repoPath,"cli",spawner,message).catch(()=>{}),console.log(` Notified spawner (${spawner}) of wave completion.`)}catch{console.warn(" \u26A0\uFE0F Could not notify leader (messaging unavailable).")}}async function doneCommand(ref){try{let{slug,group}=parseRef(ref),result2=await completeGroup(slug,group);if(console.log(`\u2705 Group "${group}" marked as done in wish "${slug}"`),result2.completedAt)console.log(` Completed at: ${formatTimestamp(result2.completedAt)}`);let state=await getState(slug);if(state){let nowReady=Object.entries(state.groups).filter(([,g])=>g.status==="ready"&&g.dependsOn.includes(group)).map(([name])=>name);if(nowReady.length>0)console.log(` Unblocked: ${nowReady.join(", ")}`)}await ensureWorkPushed(slug,group);let wishComplete=await isWishComplete(slug),waveResult=await detectWaveCompletion(slug,group);if(waveResult)await notifyWaveCompletion(waveResult,wishComplete);if(wishComplete)console.log(" \uD83C\uDF89 Wish fully complete \u2014 all groups done."),await autoCleanupTeam();autoKillPane()}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`\u274C ${message}`),process.exit(1)}}async function autoInitWishState(slug){let wishPath=resolveWishPath(slug);if(!wishPath)console.error(`\u274C No state found for wish "${slug}" and no WISH.md found in cwd or repo root`),console.error(` Create it first: genie wish <agent> ${slug}`),process.exit(1);let content=await readFile11(wishPath,"utf-8"),groups=parseWishGroups(content);if(groups.length===0)console.error(`\u274C No execution groups found in ${wishPath}`),process.exit(1);let state=await createState(slug,groups);return console.log(`\uD83D\uDCDD Auto-initialized state for wish "${slug}" (${groups.length} groups)`),state}async function printWishExecutors(slug){try{let{registry:registry2,executorRegistry,assignmentRegistry}=await loadExecutorInfo(),agents=await registry2.listAgents({team:process.env.GENIE_TEAM}),executorInfoLines=[];for(let agent of agents){if(!agent.currentExecutorId)continue;let executor=await executorRegistry.getExecutor(agent.currentExecutorId);if(!executor||executor.state==="terminated"||executor.state==="done")continue;let assignment=await assignmentRegistry.getActiveAssignment(executor.id),taskLabel=assignment?.wishSlug===slug?`Group ${assignment.groupNumber??"?"}`:assignment?.wishSlug??"-",name=agent.customName??agent.role??agent.id.slice(0,12);executorInfoLines.push(` Agent: ${padRight(name,16)} | Executor: ${executor.id.slice(0,12)} (${executor.provider}) | State: ${padRight(executor.state,10)} | Task: ${taskLabel}`)}if(executorInfoLines.length>0){console.log(`
|
|
3321
3356
|
Active Executors:`),console.log("\u2500".repeat(60));for(let line of executorInfoLines)console.log(line)}}catch{}}async function statusCommand(slug){try{let state=await getState(slug)??await autoInitWishState(slug);console.log(`
|
|
3322
|
-
Wish: ${state.wish}`),console.log("\u2500".repeat(60));let entries=Object.entries(state.groups),maxNameLen=Math.max(...entries.map(([name])=>name.length),5);console.log(` ${padRight("GROUP",maxNameLen)} STATUS ASSIGNEE STARTED COMPLETED`),console.log(` ${"\u2500".repeat(maxNameLen+62)}`);for(let[name,group]of entries){let icon=STATUS_ICONS[group.status]??"\u2753",status=padRight(`${icon} ${group.status}`,13),assignee=padRight(group.assignee??"-",13),started=padRight(formatTimestamp(group.startedAt)||"-",14),completed=formatTimestamp(group.completedAt)||"-";console.log(` ${padRight(name,maxNameLen)} ${status} ${assignee} ${started} ${completed}`)}let total=entries.length,done=entries.filter(([,g])=>g.status==="done").length,inProgress=entries.filter(([,g])=>g.status==="in_progress").length,ready=entries.filter(([,g])=>g.status==="ready").length,blocked=entries.filter(([,g])=>g.status==="blocked").length;console.log(""),console.log(` Progress: ${done}/${total} done | ${inProgress} in progress | ${ready} ready | ${blocked} blocked`),await printWishExecutors(slug),console.log("")}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`\u274C ${message}`),process.exit(1)}}
|
|
3357
|
+
Wish: ${state.wish}`),console.log("\u2500".repeat(60));let entries=Object.entries(state.groups),maxNameLen=Math.max(...entries.map(([name])=>name.length),5);console.log(` ${padRight("GROUP",maxNameLen)} STATUS ASSIGNEE STARTED COMPLETED`),console.log(` ${"\u2500".repeat(maxNameLen+62)}`);for(let[name,group]of entries){let icon=STATUS_ICONS[group.status]??"\u2753",status=padRight(`${icon} ${group.status}`,13),assignee=padRight(group.assignee??"-",13),started=padRight(formatTimestamp(group.startedAt)||"-",14),completed=formatTimestamp(group.completedAt)||"-";console.log(` ${padRight(name,maxNameLen)} ${status} ${assignee} ${started} ${completed}`)}let total=entries.length,done=entries.filter(([,g])=>g.status==="done").length,inProgress=entries.filter(([,g])=>g.status==="in_progress").length,ready=entries.filter(([,g])=>g.status==="ready").length,blocked=entries.filter(([,g])=>g.status==="blocked").length;console.log(""),console.log(` Progress: ${done}/${total} done | ${inProgress} in progress | ${ready} ready | ${blocked} blocked`),await printWishExecutors(slug),console.log("")}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`\u274C ${message}`),process.exit(1)}}async function resetAction(ref,options){try{if(ref.includes("#")){let{slug,group}=parseRef(ref),result2=await resetGroup(slug,group);if(console.log(`\uD83D\uDD04 Group "${group}" reset to ready in wish "${slug}"`),result2.status==="ready")console.log(" Status: ready (assignee cleared)");return}await resetWishCommand(ref,options?.yes??!1)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`\u274C ${message}`),process.exit(1)}}function registerStateCommands(_program){}async function resetWishCommand(slug,confirmed){let wishPath=resolveWishPath(slug);if(!wishPath)throw Error(`No WISH.md found for "${slug}" \u2014 searched cwd and repo root`);let content=await readFile11(wishPath,"utf-8"),groups=parseWishGroups(content);if(groups.length===0)throw Error(`No execution groups found in ${wishPath}`);let existing=await getState(slug);if(existing){let groupCount=Object.keys(existing.groups).length,inProgress=Object.values(existing.groups).filter((g)=>g.status==="in_progress").length,summary=`Wipe all state for "${slug}" (${groupCount} groups, ${inProgress} in-progress)?`;if(!isInteractive()){if(!confirmed)console.error(`\u274C ${summary}`),console.error(" Refusing to wipe in non-interactive mode. Pass --yes to confirm."),process.exit(2)}else{let{confirm:confirm2}=await Promise.resolve().then(() => (init_esm14(),exports_esm));if(!await confirm2({message:summary,default:!1})){console.log("Aborted.");return}}}if(existing)console.log(`\uD83D\uDDD1\uFE0F Replacing existing state for wish "${slug}"`);else console.log(`\u2139\uFE0F No existing state for wish "${slug}" \u2014 creating fresh`);let state=await createState(slug,groups);console.log(`\uD83D\uDCDD Recreated state from ${wishPath} (${groups.length} groups)`),console.log(""),console.log(`Wish: ${state.wish}`),console.log("\u2500".repeat(60));for(let[name,group]of Object.entries(state.groups)){let icon=STATUS_ICONS[group.status]??"\u2753";console.log(` ${name} ${icon} ${group.status}`)}}async function writeContextFile(content){let dir=join50(tmpdir3(),"genie-dispatch");await mkdir6(dir,{recursive:!0});let ts3=Date.now().toString(36),rand=Math.random().toString(36).slice(2,8),filePath=join50(dir,`ctx-${ts3}-${rand}.md`);return await writeFile6(filePath,content),filePath}function extractGroup(content,groupName){let pattern=new RegExp(`^### Group ${escapeRegExp(groupName)}:`,"m"),match=content.match(pattern);if(!match||match.index===void 0)return null;let start2=match.index,nextBoundary=content.slice(start2).slice(1).search(/^### Group \d|^---$/m),end=nextBoundary!==-1?start2+1+nextBoundary:content.length;return content.slice(start2,end).trim()}function extractWishContext(content){let execGroupsIdx=content.indexOf("## Execution Groups");if(execGroupsIdx!==-1)return content.slice(0,execGroupsIdx).trim();return content.slice(0,2000).trim()}var SLUG_PATTERN=/^[a-zA-Z0-9._-]+$/;function validateSlug(slug){if(!SLUG_PATTERN.test(slug))console.error(`\u274C Invalid slug: "${slug}"`),console.error(" Slugs must match [a-zA-Z0-9._-]+ (no slashes, dots-dots, or special characters)"),process.exit(1)}function escapeRegExp(str5){return str5.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function buildContextPrompt(opts){let parts=[`# Dispatch Context (${opts.command})`,"",`**Source file:** \`${opts.filePath}\``,"(Read the full document at the path above for complete context)",""];if(opts.wishContext)parts.push("## Wish Context","",opts.wishContext,"");if(parts.push("## Assigned Section","",opts.sectionContent,""),opts.enrichedContext)parts.push(opts.enrichedContext);if(opts.skill)parts.push("## Initial Command","",`Run \`/${opts.skill}\` to begin.`,"");return parts.join(`
|
|
3323
3358
|
`)}function getGitDiff(){try{let diff=execSync14("git diff HEAD",{encoding:"utf-8",maxBuffer:1048576}),staged=execSync14("git diff --cached",{encoding:"utf-8",maxBuffer:1048576}),combined=[diff,staged].filter(Boolean).join(`
|
|
3324
3359
|
`);if(combined.length>50000)return`${combined.slice(0,50000)}
|
|
3325
3360
|
|
|
@@ -3329,14 +3364,14 @@ Wish: ${state.wish}`),console.log("\u2500".repeat(60));let entries=Object.entrie
|
|
|
3329
3364
|
|
|
3330
3365
|
When done:
|
|
3331
3366
|
1. Run: genie done ${slug}#${group}
|
|
3332
|
-
2. Run: genie send 'Group ${group} complete. <summary>' --to ${leaderTarget}`;await handleWorkerSpawn(agentName,{provider:"claude",role:effectiveRole,extraArgs:["--append-system-prompt-file",contextFile],initialPrompt:workPrompt});let repoPath=process.cwd(),result2=await sendMessage2(repoPath,"cli",effectiveRole,workPrompt);if(!result2.delivered)console.warn(`\u26A0 Backup delivery to ${effectiveRole} failed: ${result2.reason??"unknown"}`)}async function reviewCommand(agentName,ref){let{slug,group}=parseRef(ref);validateSlug(slug);let wishPath=join50(process.cwd(),".genie","wishes",slug,"WISH.md");if(!existsSync41(wishPath))console.error(`\u274C Wish not found: ${wishPath}`),process.exit(1);let content=await readFile12(wishPath,"utf-8"),groupSection=extractGroup(content,group);if(!groupSection)console.error(`\u274C Group "${group}" not found in ${wishPath}`),process.exit(1);let diff=getGitDiff(),wishContext=extractWishContext(content),reviewContent=[groupSection,"","## Git Diff (changes to review)","",diff?`\`\`\`diff
|
|
3367
|
+
2. Run: genie send 'Group ${group} complete. <summary>' --to ${leaderTarget}`;await handleWorkerSpawn(agentName,{provider:"claude",team:process.env.GENIE_TEAM,role:effectiveRole,extraArgs:["--append-system-prompt-file",contextFile],initialPrompt:workPrompt});let repoPath=process.cwd(),result2=await sendMessage2(repoPath,"cli",effectiveRole,workPrompt);if(!result2.delivered)console.warn(`\u26A0 Backup delivery to ${effectiveRole} failed: ${result2.reason??"unknown"}`)}async function reviewCommand(agentName,ref){let{slug,group}=parseRef(ref);validateSlug(slug);let wishPath=join50(process.cwd(),".genie","wishes",slug,"WISH.md");if(!existsSync41(wishPath))console.error(`\u274C Wish not found: ${wishPath}`),process.exit(1);let content=await readFile12(wishPath,"utf-8"),groupSection=extractGroup(content,group);if(!groupSection)console.error(`\u274C Group "${group}" not found in ${wishPath}`),process.exit(1);let diff=getGitDiff(),wishContext=extractWishContext(content),reviewContent=[groupSection,"","## Git Diff (changes to review)","",diff?`\`\`\`diff
|
|
3333
3368
|
${diff}
|
|
3334
3369
|
\`\`\``:"(no uncommitted changes found \u2014 review committed changes)"].join(`
|
|
3335
3370
|
`),enrichedReviewContext;try{let{enrichContext:enrichContext2}=await Promise.resolve().then(() => (init_context_enrichment(),exports_context_enrichment));enrichedReviewContext=enrichContext2({query:`review ${slug} ${group}: ${groupSection.slice(0,500)}`})||void 0}catch{}let context=buildContextPrompt({filePath:wishPath,sectionContent:reviewContent,wishContext,command:`review ${ref}`,skill:"review",enrichedContext:enrichedReviewContext}),contextFile=await writeContextFile(context);if(console.log(`\uD83D\uDD0D Dispatching review to ${agentName} for "${ref}"`),console.log(` Wish: ${wishPath}`),console.log(` Group: ${group}`),diff)console.log(` Diff: ${diff.split(`
|
|
3336
3371
|
`).length} lines`);let reviewLeaderTarget=await resolveLeaderTarget(),reviewPrompt=`Review "${ref}". Your context and diff are in the system prompt. Evaluate against acceptance criteria and return SHIP, FIX-FIRST, or BLOCKED with severity-tagged findings.
|
|
3337
3372
|
|
|
3338
3373
|
When done, report your verdict:
|
|
3339
|
-
Run: genie send '<SHIP|FIX-FIRST|BLOCKED> \u2014 <summary>' --to ${reviewLeaderTarget}`;await handleWorkerSpawn(agentName,{provider:"claude",extraArgs:["--append-system-prompt-file",contextFile],initialPrompt:reviewPrompt});let repoPath=process.cwd(),result2=await sendMessage2(repoPath,"cli",agentName,reviewPrompt);if(!result2.delivered)console.warn(`\u26A0 Backup delivery to ${agentName} failed: ${result2.reason??"unknown"}`)}function registerDispatchCommands(program2){program2.command("
|
|
3374
|
+
Run: genie send '<SHIP|FIX-FIRST|BLOCKED> \u2014 <summary>' --to ${reviewLeaderTarget}`;await handleWorkerSpawn(agentName,{provider:"claude",team:process.env.GENIE_TEAM,extraArgs:["--append-system-prompt-file",contextFile],initialPrompt:reviewPrompt});let repoPath=process.cwd(),result2=await sendMessage2(repoPath,"cli",agentName,reviewPrompt);if(!result2.delivered)console.warn(`\u26A0 Backup delivery to ${agentName} failed: ${result2.reason??"unknown"}`)}function registerDispatchCommands(program2){program2.command("work <ref> [agent]").description("Auto-orchestrate a wish, or dispatch work on a specific group").action(async(ref,agent)=>{try{let work=detectWorkMode(ref,agent);if(work.mode==="auto")await autoOrchestrateCommand(work.slug);else await workDispatchCommand(work.agent,work.ref)}catch(error2){console.error(`\u274C ${error2 instanceof Error?error2.message:error2}`),process.exit(1)}})}function registerDispatchGroupCommands(program2){let dispatch2=program2.command("dispatch").description("Framework skill dispatch primitives (brainstorm/wish/review)");dispatch2.command("brainstorm <agent> <slug>").description("Spawn agent with brainstorm DRAFT.md context").action(async(agent,slug)=>{await brainstormCommand(agent,slug)}),dispatch2.command("wish <agent> <slug>").description("Spawn agent with wish DESIGN.md context").action(async(agent,slug)=>{await wishCommand(agent,slug)}),dispatch2.command("review <agent> <ref>").description("Spawn agent with review scope for a wish group (format: <slug>#<group>)").action(async(agent,ref)=>{await reviewCommand(agent,ref)})}init_export_format();import{existsSync as existsSync42,mkdirSync as mkdirSync18,writeFileSync as writeFileSync20}from"fs";import{dirname as dirname10}from"path";async function getSql(){let{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db));return getConnection2()}async function getVersion(){let{VERSION:VERSION2}=await Promise.resolve().then(() => (init_version(),exports_version));return VERSION2}async function getActorName(){let{getActor:getActor2}=await Promise.resolve().then(() => (init_audit(),exports_audit));return getActor2()}async function detectTables(sql,tables){let{filterAvailableTables:filterAvailableTables2}=await Promise.resolve().then(() => exports_table_detect);return filterAvailableTables2(sql,tables)}function outputDocument(doc,options){let json2=options.pretty?JSON.stringify(doc,null,2):JSON.stringify(doc);if(options.output){let dir=dirname10(options.output);if(!existsSync42(dir))mkdirSync18(dir,{recursive:!0});writeFileSync20(options.output,`${json2}
|
|
3340
3375
|
`);let tables=Object.keys(doc.data),rows=Object.values(doc.data).reduce((sum,arr)=>sum+arr.length,0);if(console.log(`Exported ${tables.length} tables (${rows} rows) to ${options.output}`),doc.skippedTables.length>0)console.log(`Skipped tables (not found): ${doc.skippedTables.join(", ")}`)}else console.log(json2)}function autoOutputName(){let d=new Date;return`genie-backup-${`${d.getFullYear()}${String(d.getMonth()+1).padStart(2,"0")}${String(d.getDate()).padStart(2,"0")}`}.json`}async function exportGroup(sql,group,filter){let tables=GROUP_TABLES[group],{available,skipped}=await detectTables(sql,tables),data={};for(let table of available)if(filter)data[table]=[...await sql.unsafe(`SELECT * FROM ${table} WHERE ${filter.column} = $1`,[filter.value])];else data[table]=[...await sql.unsafe(`SELECT * FROM ${table}`)];return{data,skipped}}async function exportBoards(sql,name){let tables=GROUP_TABLES.boards,{available,skipped}=await detectTables(sql,tables),data={};for(let table of available)if(name&&table==="boards")data[table]=[...await sql`SELECT * FROM boards WHERE name = ${name}`];else if(table==="task_types")data[table]=[...await sql`SELECT * FROM task_types WHERE is_builtin = false`];else data[table]=[...await sql.unsafe(`SELECT * FROM ${table}`)];return{data,skipped}}var TASK_JOIN_ALIASES={task_tags:"tt",task_actors:"ta",task_dependencies:"td",task_stage_log:"tsl"};async function resolveProjectId2(sql,projectName){let projects=await sql`SELECT id FROM projects WHERE name = ${projectName}`;if(projects.length===0)throw Error(`Project not found: ${projectName}`);return projects[0].id}function stripEphemeralFields(rows){return rows.map((r)=>{let{checkout_run_id,execution_locked_at,session_id,pane_id,...rest}=r;return rest})}async function exportTaskTable(sql,table,projectId){let alias=TASK_JOIN_ALIASES[table];if(table==="tasks"){let rows=projectId?[...await sql.unsafe("SELECT * FROM tasks WHERE project_id = $1",[projectId])]:[...await sql`SELECT * FROM tasks`];return stripEphemeralFields(rows)}if(alias&&projectId)return[...await sql.unsafe(`SELECT ${alias}.* FROM ${table} ${alias} JOIN tasks t ON ${alias}.task_id = t.id WHERE t.project_id = $1`,[projectId])];return[...await sql.unsafe(`SELECT * FROM ${table}`)]}async function exportTasks(sql,projectName){let tables=GROUP_TABLES.tasks,{available,skipped}=await detectTables(sql,tables),data={},projectId=projectName?await resolveProjectId2(sql,projectName):null;for(let table of available)data[table]=await exportTaskTable(sql,table,projectId);return{data,skipped}}async function exportSchedules(sql,name){let{available,skipped}=await detectTables(sql,["schedules"]),data={};if(available.includes("schedules"))if(name)data.schedules=[...await sql`SELECT * FROM schedules WHERE name = ${name}`];else data.schedules=[...await sql`SELECT * FROM schedules`];return{data,skipped}}async function exportTags(sql){let{available,skipped}=await detectTables(sql,["tags"]),data={};if(available.includes("tags"))data.tags=[...await sql`SELECT * FROM tags WHERE name NOT LIKE 'test-%'`];return{data,skipped}}async function exportAll(sql){let allSkipped=[],allData={};for(let group of ALL_GROUPS){let result2;switch(group){case"boards":result2=await exportBoards(sql);break;case"tasks":result2=await exportTasks(sql);break;case"tags":result2=await exportTags(sql);break;case"schedules":result2=await exportSchedules(sql);break;default:result2=await exportGroup(sql,group);break}Object.assign(allData,result2.data),allSkipped.push(...result2.skipped)}return{data:allData,skipped:allSkipped}}async function runExport(groups,type2,exportFn,options){let sql=await getSql(),[version,actor]=await Promise.all([getVersion(),getActorName()]),doc=createExportDocument(type2,groups,version,actor),{data,skipped}=await exportFn(sql);doc.data=data,doc.skippedTables=skipped,outputDocument(doc,options)}function registerExportCommands(program2){let exp=program2.command("export").description("Export genie data as JSON").option("--output <file>","Write to file instead of stdout").option("-o <file>","Alias for --output").option("--pretty","Pretty-print JSON").action(async(options)=>{try{if(!options.output)options.output=autoOutputName();await runExport([...ALL_GROUPS],"full",(sql)=>exportAll(sql),options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),sharedOpts=(cmd)=>cmd.option("--output <file>","Write to file instead of stdout").option("--pretty","Pretty-print JSON");sharedOpts(exp.command("all").description("Full backup (all present tables)")).action(async(options)=>{try{if(!options.output)options.output=autoOutputName();await runExport([...ALL_GROUPS],"full",(sql)=>exportAll(sql),options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),sharedOpts(exp.command("boards [name]").description("Export boards, templates, and task types")).action(async(name,options)=>{try{await runExport(["boards"],"partial",(sql)=>exportBoards(sql,name),options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),sharedOpts(exp.command("tasks").description("Export tasks with deps, actors, and stage log").option("--project <name>","Filter by project name")).action(async(options)=>{try{await runExport(["tasks"],"partial",(sql)=>exportTasks(sql,options.project),options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),sharedOpts(exp.command("tags").description("Export tags")).action(async(options)=>{try{await runExport(["tags"],"partial",(sql)=>exportTags(sql),options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),sharedOpts(exp.command("projects").description("Export projects")).action(async(options)=>{try{await runExport(["projects"],"partial",(sql)=>exportGroup(sql,"projects"),options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),sharedOpts(exp.command("schedules [name]").description("Export schedules with run_spec")).action(async(name,options)=>{try{await runExport(["schedules"],"partial",(sql)=>exportSchedules(sql,name),options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),sharedOpts(exp.command("agents").description("Export agents, templates, and checkpoints")).action(async(options)=>{try{await runExport(["agents"],"partial",(sql)=>exportGroup(sql,"agents"),options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),sharedOpts(exp.command("comms").description("Export conversations, messages, mailbox")).action(async(options)=>{try{await runExport(["comms"],"partial",(sql)=>exportGroup(sql,"comms"),options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),sharedOpts(exp.command("config").description("Export OS config (graceful skip if missing)")).action(async(options)=>{try{await runExport(["config"],"partial",(sql)=>exportGroup(sql,"config"),options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}})}init_history();init_export_format();import{readFileSync as readFileSync26}from"fs";var IMPORT_LEVELS=[["schedules","sessions","projects","agent_templates","agent_checkpoints","tags","task_types","notification_preferences","os_config","golden_images","warm_pool","instances"],["triggers","boards","board_templates","agents","conversations"],["tasks","runs","messages","conversation_members","mailbox","team_chat"],["task_tags","task_actors","task_dependencies","task_stage_log","heartbeats","machine_snapshots"]],SELF_REFERENTIAL_COLUMNS={tasks:"parent_id",messages:"reply_to_id",conversations:"parent_message_id"};function getTableLevel(table){for(let i2=0;i2<IMPORT_LEVELS.length;i2++)if(IMPORT_LEVELS[i2].includes(table))return i2;return-1}function sortByImportOrder(tables){return[...tables].sort((a,b2)=>{let la=getTableLevel(a),lb=getTableLevel(b2);return(la===-1?999:la)-(lb===-1?999:lb)})}function getPrimaryKey(table){return{task_tags:["task_id","tag_id"],task_actors:["task_id","actor_type","actor_id","role"],task_dependencies:["task_id","depends_on_id"],conversation_members:["conversation_id","actor_type","actor_id"],notification_preferences:["actor_type","actor_id","channel"]}[table]??["id"]}var VALID_TABLES=new Set(Object.values(GROUP_TABLES).flat());function assertValidTable(name){if(!VALID_TABLES.has(name))throw Error(`Invalid table name: "${name}" is not in the schema whitelist`)}var VALID_COLUMN_RE=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function assertValidColumnName(name){if(!VALID_COLUMN_RE.test(name))throw Error(`Invalid column name: "${name.slice(0,60)}" contains disallowed characters. Column names must match /^[a-zA-Z_][a-zA-Z0-9_]*$/.`)}async function getSql2(){let{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db));return getConnection2()}async function getActorName2(){let{getActor:getActor2}=await Promise.resolve().then(() => (init_audit(),exports_audit));return getActor2()}async function detectTables2(sql,tables){let{filterAvailableTables:filterAvailableTables2}=await Promise.resolve().then(() => exports_table_detect);return filterAvailableTables2(sql,tables)}async function detectConflicts(sql,table,rows){if(rows.length===0)return[];assertValidTable(table);let pk=getPrimaryKey(table);if(pk.length===1){let key=pk[0],ids=rows.map((r)=>r[key]),existing=await sql.unsafe(`SELECT ${key} FROM ${table} WHERE ${key} = ANY($1)`,[ids]),existingSet=new Set(existing.map((r)=>String(r[key])));return rows.filter((r)=>existingSet.has(String(r[key])))}let conflicts=[];for(let row of rows){let conditions=pk.map((col,i2)=>`${col} = $${i2+1}`).join(" AND "),values2=pk.map((col)=>row[col]);if((await sql.unsafe(`SELECT 1 FROM ${table} WHERE ${conditions} LIMIT 1`,values2)).length>0)conflicts.push(row)}return conflicts}function prepareRow(row,table,selfRefUpdates){let selfRefCol=SELF_REFERENTIAL_COLUMNS[table],entries=Object.entries(row),columns=entries.map(([k])=>k),values2=entries.map(([,v])=>v);for(let col of columns)assertValidColumnName(col);if(selfRefCol&&row[selfRefCol]!=null){let idx=columns.indexOf(selfRefCol);if(idx!==-1){let originalSelfRef=values2[idx];values2[idx]=null;let pk=getPrimaryKey(table);selfRefUpdates.push({pk:pk.length===1?row[pk[0]]:pk.map((k)=>row[k]),value:originalSelfRef})}}return{columns,values:values2,quotedCols:columns.map((c)=>`"${c}"`).join(", "),placeholders:values2.map((_,i2)=>`$${i2+1}`).join(", ")}}async function insertOneRow(tx,table,row,prepared,mode){assertValidTable(table);let{quotedCols,placeholders,values:values2}=prepared,pk=getPrimaryKey(table);if(mode==="overwrite"){let pkCondition=pk.map((col,i2)=>`"${col}" = $${values2.length+i2+1}`).join(" AND "),pkValues=pk.map((col)=>row[col]);await tx.unsafe(`DELETE FROM ${table} WHERE ${pkCondition}`,pkValues),await tx.unsafe(`INSERT INTO ${table} (${quotedCols}) VALUES (${placeholders})`,values2)}else if(mode==="merge"){let onConflict=pk.map((c)=>`"${c}"`).join(", ");await tx.unsafe(`INSERT INTO ${table} (${quotedCols}) VALUES (${placeholders}) ON CONFLICT (${onConflict}) DO NOTHING`,values2)}else await tx.unsafe(`INSERT INTO ${table} (${quotedCols}) VALUES (${placeholders})`,values2)}async function updateSelfRefs(tx,table,updates){assertValidTable(table);let selfRefCol=SELF_REFERENTIAL_COLUMNS[table],pk=getPrimaryKey(table);if(pk.length!==1)return;for(let{pk:pkVal,value}of updates)await tx.unsafe(`UPDATE ${table} SET "${selfRefCol}" = $1 WHERE "${pk[0]}" = $2`,[value,pkVal])}async function insertRows(tx,table,rows,mode){if(rows.length===0)return 0;let selfRefUpdates=[];for(let row of rows){let prepared=prepareRow(row,table,selfRefUpdates);await insertOneRow(tx,table,row,prepared,mode)}if(selfRefUpdates.length>0)await updateSelfRefs(tx,table,selfRefUpdates);return rows.length}function parseExportFile(filePath){let raw=readFileSync26(filePath,"utf-8"),parsed;try{parsed=JSON.parse(raw)}catch{throw Error(`Invalid JSON in ${filePath}`)}let validation=validateExportDocument(parsed);if(!validation.valid)throw Error(`Invalid export document: ${validation.error}`);return validation.doc}async function filterTablesByGroup(allTables,groupFilter){if(!groupFilter||groupFilter.length===0)return allTables;let{GROUP_TABLES:GROUP_TABLES2}=await Promise.resolve().then(() => (init_export_format(),exports_export_format)),allowedTables=new Set;for(let group of groupFilter){let tables=GROUP_TABLES2[group];if(tables)for(let t of tables)allowedTables.add(t);else console.warn(`Warning: Unknown group "${group}", skipping`)}return allTables.filter((t)=>allowedTables.has(t))}async function checkConflicts(sql,tables,data){for(let table of tables){let rows=data[table];if(!rows||rows.length===0)continue;let conflicts=await detectConflicts(sql,table,rows);if(conflicts.length>0){let pk=getPrimaryKey(table),ids=conflicts.slice(0,5).map((r)=>pk.map((k)=>r[k]).join(",")).join("; ");throw Error(`Conflict in table "${table}": ${conflicts.length} existing row(s) (e.g., ${ids}). Use --merge or --overwrite to resolve.`)}}}async function runImport(filePath,mode,groupFilter){let doc=parseExportFile(filePath),tablesToImport=await filterTablesByGroup(Object.keys(doc.data),groupFilter);if(tablesToImport.length===0){console.log("No tables to import.");return}tablesToImport=sortByImportOrder(tablesToImport);let sql=await getSql2(),{available}=await detectTables2(sql,tablesToImport),skippedTables=tablesToImport.filter((t)=>!available.includes(t));if(tablesToImport=available,skippedTables.length>0)console.log(`Skipping tables not in database: ${skippedTables.join(", ")}`);if(mode==="fail")await checkConflicts(sql,tablesToImport,doc.data);let totalInserted=0,tableStats={};await sql.begin(async(tx)=>{for(let table of tablesToImport){let rows=doc.data[table];if(!rows||rows.length===0)continue;let count=await insertRows(tx,table,rows,mode);tableStats[table]=count,totalInserted+=count}});let actor=await getActorName2(),{recordAuditEvent:recordAuditEvent3}=await Promise.resolve().then(() => (init_audit(),exports_audit));await recordAuditEvent3("import",filePath,"import_complete",actor,{mode,tables:tableStats,totalRows:totalInserted,skippedTables,sourceVersion:doc.version,sourceDate:doc.exportedAt}),console.log(`Import complete: ${totalInserted} rows across ${Object.keys(tableStats).length} tables`);for(let[table,count]of Object.entries(tableStats))if(count>0)console.log(` ${table}: ${count} rows`);if(skippedTables.length>0)console.log(`Skipped (not in DB): ${skippedTables.join(", ")}`)}function registerImportCommands(program2){program2.command("import <file>").description("Import genie data from JSON export").option("--fail","Abort on any conflict (default)").option("--merge","Skip existing rows, import new ones").option("--overwrite","Replace existing rows with imported data").option("--groups <list>","Comma-separated groups to import (e.g., boards,tags)").action(async(file,options)=>{try{let mode="fail";if(options.overwrite)mode="overwrite";else if(options.merge)mode="merge";let groupFilter=options.groups?.split(",").map((g)=>g.trim());await runImport(file,mode,groupFilter)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}})}init_esm14();import{existsSync as existsSync46,mkdirSync as mkdirSync21,symlinkSync,writeFileSync as writeFileSync23}from"fs";import{basename as basename10,join as join55,relative as relative4,resolve as resolve9,sep as sep2}from"path";import{cpSync,existsSync as existsSync44,mkdirSync as mkdirSync19,renameSync as renameSync3,rmSync as rmSync4}from"fs";import{join as join52,relative as relative3}from"path";var import_ignore=__toESM(require_ignore(),1);import{existsSync as existsSync43,readFileSync as readFileSync27,readdirSync as readdirSync10,statSync as statSync4}from"fs";import{join as join51,relative as relative2}from"path";var GENIEIGNORE_DEFAULTS=`node_modules
|
|
3341
3376
|
.git
|
|
3342
3377
|
.genie/worktrees
|
|
@@ -3608,11 +3643,77 @@ ${mode}Closed ${result2.closed} task${result2.closed===1?"":"s"} from ${result2.
|
|
|
3608
3643
|
Name: ${t.name}`),console.log(`ID: ${t.id}`),console.log(`Builtin: ${t.isBuiltin}`),console.log(`Description: ${t.description??"(none)"}`),t.columns&&t.columns.length>0)console.log(`Columns: ${t.columns.map((c)=>c.name).join(", ")}`);console.log("")}),tmpl.command("delete <name>").description("Delete a template").action(async(name)=>{let{deleteTemplate:deleteTemplate2,getTemplate:getTemplate2}=await Promise.resolve().then(() => (init_template_service(),exports_template_service)),t=await getTemplate2(name);if(!t)console.error(`Template "${name}" not found.`),process.exit(1);let ok=await deleteTemplate2(t.id);console.log(ok?`Deleted template "${t.name}".`:"Delete failed.")})}init_term_format();var _taskService9;async function getTaskService9(){if(!_taskService9)_taskService9=await Promise.resolve().then(() => (init_task_service(),exports_task_service));return _taskService9}function printTypeTable(types4){console.log(` ${padRight("ID",20)} ${padRight("NAME",30)} ${padRight("STAGES",8)} BUILTIN`),console.log(` ${"\u2500".repeat(70)}`);for(let t of types4){let stageCount=Array.isArray(t.stages)?t.stages.length:0,builtin=t.isBuiltin?"yes":"no";console.log(` ${padRight(t.id,20)} ${padRight(t.name,30)} ${padRight(String(stageCount),8)} ${builtin}`)}console.log(`
|
|
3609
3644
|
${types4.length} type${types4.length===1?"":"s"}`)}function printTypePipeline(t){if(console.log(`
|
|
3610
3645
|
Type: ${t.name} (${t.id})`),t.description)console.log(`Description: ${t.description}`);if(t.icon)console.log(`Icon: ${t.icon}`);console.log(`Built-in: ${t.isBuiltin?"yes":"no"}`),console.log("\u2500".repeat(60)),console.log(`
|
|
3611
|
-
Stage Pipeline:`);let stages=t.stages;for(let i2=0;i2<stages.length;i2++){let s2=stages[i2],arrow=i2<stages.length-1?" \u2192":"",gate=s2.gate?` [gate: ${s2.gate}]`:"",action=s2.action?` (action: ${s2.action})`:"",auto=s2.auto_advance?" [auto]":"";console.log(` ${i2+1}. ${s2.label??s2.name}${gate}${action}${auto}${arrow}`)}console.log("")}async function handleTypeList(options){console.warn("Warning: `genie type` is deprecated. Use `genie board` instead.");let types4=await(await getTaskService9()).listTypes();if(options.json){console.log(JSON.stringify(types4,null,2));return}printTypeTable(types4)}async function handleTypeShow(id,options){console.warn("Warning: `genie type` is deprecated. Use `genie board` instead.");let t=await(await getTaskService9()).getType(id);if(!t)console.error(`Error: Type not found: ${id}`),process.exit(1);if(options.json){console.log(JSON.stringify(t,null,2));return}printTypePipeline(t)}async function handleTypeCreate(name,options){console.warn("Warning: `genie type` is deprecated. Use `genie board` instead.");let ts3=await getTaskService9(),stages;try{if(stages=JSON.parse(options.stages),!Array.isArray(stages))throw Error("Stages must be a JSON array")}catch(err){console.error(`Error: Invalid stages JSON. ${err instanceof Error?err.message:String(err)}`),process.exit(1)}for(let s2 of stages)if(typeof s2!=="object"||s2===null||!("name"in s2))console.error('Error: Each stage must have at least a "name" field.'),process.exit(1);let id=name.toLowerCase().replace(/\s+/g,"-"),t=await ts3.createType({id,name,description:options.description,icon:options.icon,stages});console.log(`Created type "${t.name}" (${t.id}) with ${stages.length} stages.`)}function registerTypeCommands(program2){let type2=program2.command("type").description("Task type management");type2.command("list").description("List all task types").option("--json","Output as JSON").action(async(options)=>{try{await handleTypeList(options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),type2.command("show <id>").description("Show task type detail with stage pipeline").option("--json","Output as JSON").action(async(id,options)=>{try{await handleTypeShow(id,options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),type2.command("create <name>").description("Create a custom task type").requiredOption("--stages <json>","Stages JSON array").option("--description <text>","Type description").option("--icon <icon>","Type icon").action(async(name,options)=>{try{await handleTypeCreate(name,options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}})}
|
|
3612
|
-
|
|
3646
|
+
Stage Pipeline:`);let stages=t.stages;for(let i2=0;i2<stages.length;i2++){let s2=stages[i2],arrow=i2<stages.length-1?" \u2192":"",gate=s2.gate?` [gate: ${s2.gate}]`:"",action=s2.action?` (action: ${s2.action})`:"",auto=s2.auto_advance?" [auto]":"";console.log(` ${i2+1}. ${s2.label??s2.name}${gate}${action}${auto}${arrow}`)}console.log("")}async function handleTypeList(options){console.warn("Warning: `genie type` is deprecated. Use `genie board` instead.");let types4=await(await getTaskService9()).listTypes();if(options.json){console.log(JSON.stringify(types4,null,2));return}printTypeTable(types4)}async function handleTypeShow(id,options){console.warn("Warning: `genie type` is deprecated. Use `genie board` instead.");let t=await(await getTaskService9()).getType(id);if(!t)console.error(`Error: Type not found: ${id}`),process.exit(1);if(options.json){console.log(JSON.stringify(t,null,2));return}printTypePipeline(t)}async function handleTypeCreate(name,options){console.warn("Warning: `genie type` is deprecated. Use `genie board` instead.");let ts3=await getTaskService9(),stages;try{if(stages=JSON.parse(options.stages),!Array.isArray(stages))throw Error("Stages must be a JSON array")}catch(err){console.error(`Error: Invalid stages JSON. ${err instanceof Error?err.message:String(err)}`),process.exit(1)}for(let s2 of stages)if(typeof s2!=="object"||s2===null||!("name"in s2))console.error('Error: Each stage must have at least a "name" field.'),process.exit(1);let id=name.toLowerCase().replace(/\s+/g,"-"),t=await ts3.createType({id,name,description:options.description,icon:options.icon,stages});console.log(`Created type "${t.name}" (${t.id}) with ${stages.length} stages.`)}function registerTypeCommands(program2){let type2=program2.command("type").description("Task type management");type2.command("list").description("List all task types").option("--json","Output as JSON").action(async(options)=>{try{await handleTypeList(options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),type2.command("show <id>").description("Show task type detail with stage pipeline").option("--json","Output as JSON").action(async(id,options)=>{try{await handleTypeShow(id,options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),type2.command("create <name>").description("Create a custom task type").requiredOption("--stages <json>","Stages JSON array").option("--description <text>","Type description").option("--icon <icon>","Type icon").action(async(name,options)=>{try{await handleTypeCreate(name,options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}})}init_wish_lint();init_wish_parser();import{existsSync as existsSync48}from"fs";import{mkdir as mkdir9,readFile as readFile16,readdir as readdir7,stat as stat6,writeFile as writeFile9}from"fs/promises";import{dirname as dirname12,join as join60}from"path";function resolveTemplatePath(cwd=process.cwd()){let dir=cwd;for(let i2=0;i2<10;i2++){let candidate=join60(dir,"templates","wish-template.md");if(existsSync48(candidate))return candidate;let parent=dirname12(dir);if(parent===dir)break;dir=parent}return null}var FALLBACK_TEMPLATE=`# Wish: <TODO: title>
|
|
3647
|
+
|
|
3648
|
+
| Field | Value |
|
|
3649
|
+
|-------|-------|
|
|
3650
|
+
| **Status** | DRAFT |
|
|
3651
|
+
| **Slug** | \`{{slug}}\` |
|
|
3652
|
+
| **Date** | {{date}} |
|
|
3653
|
+
| **Author** | <TODO> |
|
|
3654
|
+
| **Appetite** | <TODO> |
|
|
3655
|
+
| **Branch** | \`wish/{{slug}}\` |
|
|
3656
|
+
|
|
3657
|
+
## Summary
|
|
3658
|
+
|
|
3659
|
+
<TODO: 1\u20133 sentence summary>
|
|
3660
|
+
|
|
3661
|
+
## Scope
|
|
3662
|
+
|
|
3663
|
+
### IN
|
|
3664
|
+
|
|
3665
|
+
- <TODO>
|
|
3666
|
+
|
|
3667
|
+
### OUT
|
|
3668
|
+
|
|
3669
|
+
- <TODO>
|
|
3670
|
+
|
|
3671
|
+
## Decisions
|
|
3672
|
+
|
|
3673
|
+
| # | Decision | Rationale |
|
|
3674
|
+
|---|----------|-----------|
|
|
3675
|
+
| 1 | <TODO> | <TODO> |
|
|
3676
|
+
|
|
3677
|
+
## Success Criteria
|
|
3678
|
+
|
|
3679
|
+
- [ ] <TODO>
|
|
3680
|
+
|
|
3681
|
+
## Execution Strategy
|
|
3682
|
+
|
|
3683
|
+
| Group | Agent | Description |
|
|
3684
|
+
|-------|-------|-------------|
|
|
3685
|
+
| 1 | engineer | <TODO> |
|
|
3686
|
+
|
|
3687
|
+
---
|
|
3688
|
+
|
|
3689
|
+
## Execution Groups
|
|
3690
|
+
|
|
3691
|
+
### Group 1: <TODO title>
|
|
3692
|
+
**Goal:** <TODO>
|
|
3693
|
+
|
|
3694
|
+
**Deliverables:**
|
|
3695
|
+
1. <TODO>
|
|
3696
|
+
|
|
3697
|
+
**Acceptance Criteria:**
|
|
3698
|
+
- [ ] <TODO>
|
|
3699
|
+
|
|
3700
|
+
**Validation:**
|
|
3701
|
+
\`\`\`bash
|
|
3702
|
+
<TODO>
|
|
3703
|
+
\`\`\`
|
|
3704
|
+
|
|
3705
|
+
**depends-on:** none
|
|
3706
|
+
`;function renderTemplate(raw,slug,date){return raw.replace(/\{\{slug\}\}/g,slug).replace(/\{\{date\}\}/g,date)}function today(){let d=new Date,yyyy=d.getUTCFullYear(),mm=String(d.getUTCMonth()+1).padStart(2,"0"),dd=String(d.getUTCDate()).padStart(2,"0");return`${yyyy}-${mm}-${dd}`}async function wishNewCommand(slug,options){if(!/^[a-z0-9][a-z0-9-]*$/.test(slug))console.error(`\u274C Invalid slug "${slug}" \u2014 use lowercase letters, digits, and hyphens`),process.exit(1);let wishDir=join60(process.cwd(),".genie","wishes",slug),wishPath=join60(wishDir,"WISH.md");if(existsSync48(wishPath)&&!options.force)console.error(`\u274C Wish already exists: ${wishPath}`),console.error(" Pass --force to overwrite"),process.exit(1);let templatePath=resolveTemplatePath(),raw=templatePath?await readFile16(templatePath,"utf-8"):FALLBACK_TEMPLATE;if(!templatePath)console.warn("\u26A0\uFE0F templates/wish-template.md not found \u2014 using inline fallback skeleton");let rendered=renderTemplate(raw,slug,today());await mkdir9(wishDir,{recursive:!0}),await writeFile9(wishPath,rendered,"utf-8"),console.log(`\uD83D\uDCDD Created wish scaffold: ${wishPath}`),console.log(` Template: ${templatePath??"<inline fallback>"}`),console.log(` Next: edit the wish, then run \`genie wish lint ${slug}\` before dispatching`)}function renderDiff(before,after){let beforeLines=before.split(`
|
|
3707
|
+
`),afterLines=after.split(`
|
|
3708
|
+
`),len=Math.max(beforeLines.length,afterLines.length),out=[];for(let i2=0;i2<len;i2++){let b2=beforeLines[i2],a=afterLines[i2];if(b2===a)continue;if(b2!==void 0)out.push(`- ${b2}`);if(a!==void 0)out.push(`+ ${a}`)}return out.join(`
|
|
3709
|
+
`)}async function wishLintCommand(slug,options){let wishPath=join60(process.cwd(),".genie","wishes",slug,"WISH.md");if(!existsSync48(wishPath)){if(options.json)console.log(JSON.stringify({error:`Wish file not found: ${wishPath}`,rule:"missing-title",wish:slug,file:wishPath}));else console.error(`\u274C Wish file not found: ${wishPath}`);process.exit(1)}let markdown=await readFile16(wishPath,"utf-8"),lintOpts={allowTodoPlaceholders:options.allowTodoPlaceholders},docOrError;try{docOrError=parseWish(markdown)}catch(err){if(err instanceof WishParseError)docOrError=err;else throw err}let report=lintWish(docOrError,markdown,lintOpts);if(report={...report,wish:slug,file:wishPath},options.fix){let{applyFixes:applyFixes2}=await Promise.resolve().then(() => (init_wish_lint(),exports_wish_lint)),fixed=applyFixes2(markdown,report);if(fixed===markdown){if(options.json)console.log(JSON.stringify({...report,fixedViolations:0}));else console.log(formatLintReport(report,{color:process.stdout.isTTY??!1,path:wishPath})),console.log(`
|
|
3710
|
+
No fixable violations to apply.`);process.exit(report.summary.total>0?1:0)}if(options.dryRun){if(options.json)console.log(JSON.stringify({...report,dryRun:!0,diff:renderDiff(markdown,fixed)}));else console.log(formatLintReport(report,{color:process.stdout.isTTY??!1,path:wishPath})),console.log(`
|
|
3711
|
+
--- Dry-run diff (${wishPath}) ---`),console.log(renderDiff(markdown,fixed)),console.log(`
|
|
3712
|
+
File not modified (--dry-run).`);process.exit(report.summary.total>0?1:0)}await writeFile9(wishPath,fixed,"utf-8");let docOrError2;try{docOrError2=parseWish(fixed)}catch(err){if(err instanceof WishParseError)docOrError2=err;else throw err}let report2=lintWish(docOrError2,fixed,lintOpts);report2={...report2,wish:slug,file:wishPath};let fixedCount=report.summary.fixable;if(options.json)console.log(JSON.stringify({...report2,fixedViolations:fixedCount}));else console.log(`\u2705 Applied ${fixedCount} fix(es) to ${wishPath}`),console.log(""),console.log(formatLintReport(report2,{color:process.stdout.isTTY??!1,path:wishPath}));let remainingErrors=report2.violations.filter((v)=>v.severity==="error").length;process.exit(remainingErrors>0?1:0)}if(options.json)console.log(JSON.stringify(report));else console.log(formatLintReport(report,{color:process.stdout.isTTY??!1,path:wishPath}));let errors3=report.violations.filter((v)=>v.severity==="error").length;process.exit(errors3>0?1:0)}async function wishParseCommand(slug,options){try{let doc=parseWishFile(slug),json2=options.json?JSON.stringify(doc):JSON.stringify(doc,null,2);console.log(json2)}catch(error2){if(error2 instanceof WishParseError){let payload={error:error2.message,rule:error2.rule,line:error2.line,column:error2.column??null,file:error2.file??null};if(options.json)console.log(JSON.stringify(payload));else{if(console.error(`\u274C Parse failed (${payload.rule}): ${payload.error}`),payload.file)console.error(` File: ${payload.file}`);if(payload.line)console.error(` Line: ${payload.line}`)}process.exit(1)}let message=error2 instanceof Error?error2.message:String(error2);console.error(`\u274C ${message}`),process.exit(1)}}async function isWishFile(wishPath){try{return(await stat6(wishPath)).isFile()}catch{return!1}}function parseWishSummary(slug){try{let doc=parseWishFile(slug);return{status:doc.metadata.status??"-",groupCount:String(doc.executionGroups.length)}}catch(error2){return{status:error2 instanceof WishParseError?"malformed":"error",groupCount:"-"}}}async function loadStateCounts(slug){try{let state=await(await Promise.resolve().then(() => (init_wish_state(),exports_wish_state))).getState(slug);if(!state)return{ready:0,inProgress:0,done:0};let ready=0,inProgress=0,done=0;for(let g of Object.values(state.groups))if(g.status==="ready")ready++;else if(g.status==="in_progress")inProgress++;else if(g.status==="done")done++;return{ready,inProgress,done}}catch{return{ready:0,inProgress:0,done:0}}}async function wishListCommand(){let wishesRoot=join60(process.cwd(),".genie","wishes");if(!existsSync48(wishesRoot))console.error(`\u274C Wishes directory not found: ${wishesRoot}`),process.exit(1);let entries=await readdir7(wishesRoot),rows=[];for(let entry of entries.sort()){if(entry.startsWith("_")||entry.startsWith("."))continue;if(!await isWishFile(join60(wishesRoot,entry,"WISH.md")))continue;let{status,groupCount}=parseWishSummary(entry),{ready,inProgress,done}=await loadStateCounts(entry);rows.push({slug:entry,status,groupCount,ready,inProgress,done})}if(rows.length===0){console.log("No wishes found under .genie/wishes/");return}let slugW=Math.max(4,...rows.map((r)=>r.slug.length)),statusW=Math.max(6,...rows.map((r)=>r.status.length)),pad=(s2,n)=>s2+" ".repeat(Math.max(0,n-s2.length));console.log(` ${pad("SLUG",slugW)} ${pad("STATUS",statusW)} GROUPS READY IN-PROG DONE`),console.log(` ${"\u2500".repeat(slugW+statusW+32)}`);for(let r of rows)console.log(` ${pad(r.slug,slugW)} ${pad(r.status,statusW)} ${pad(r.groupCount,6)} ${pad(String(r.ready),5)} ${pad(String(r.inProgress),7)} ${r.done}`);console.log(""),console.log(` Total: ${rows.length} wishes`)}function registerWishCommands(program2){let wish=program2.command("wish").description("Wish lifecycle management");wish.command("new <slug>").description("Scaffold a new WISH.md from templates/wish-template.md").option("--force","Overwrite an existing wish directory").action(async(slug,options)=>{await wishNewCommand(slug,options)}),wish.command("lint <slug>").description("Structural health check (stub \u2014 full implementation in Group 3)").option("--json","Emit machine-readable JSON output").option("--fix","Auto-repair deterministic violations").option("--dry-run","With --fix: print diff without writing").option("--allow-todo-placeholders","Pass <TODO> placeholders without emitting todo-placeholder-remaining").action(async(slug,options)=>{await wishLintCommand(slug,options)}),wish.command("parse <slug>").description("Parse WISH.md and emit the WishDocument as JSON").option("--json","One-line JSON output (default: pretty-printed)").action(async(slug,options)=>{await wishParseCommand(slug,options)}),wish.command("status <slug>").description("Show wish state overview for all groups").action(async(slug)=>{await statusCommand(slug)}),wish.command("done <ref>").description("Mark a wish group as done (format: <slug>#<group>)").action(async(ref)=>{await doneCommand(ref)}),wish.command("reset <ref>").option("-y, --yes","Skip confirmation prompt (required in non-interactive mode)").description("Reset wish state. <slug>#<group> resets one in-progress group; bare <slug> wipes the wish and recreates from current WISH.md").action(async(ref,options)=>{await resetAction(ref,options)}),wish.command("list").description("Enumerate all wishes with status, group counts, and progress").action(async()=>{await wishListCommand()})}var _T_BOOT=Date.now();try{let{execSync:execSyncStartup}=__require("child_process");if(execSyncStartup("git config core.bare",{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()==="true")execSyncStartup("git config core.bare false",{stdio:["pipe","pipe","pipe"]})}catch{}function parseNumericFlag2(flagName){return(value)=>{let n=Number(value);if(Number.isNaN(n))throw Error(`${flagName} must be a number, got: ${value}`);return n}}if(process.env.GENIE_PROFILE_DB)console.error(`[profile] imports=${Date.now()-_T_BOOT}ms`);var program2=new Command;program2.name("genie").description("Genie CLI - AI-assisted development").version(VERSION);program2.option("--no-interactive","Disable interactive prompts (exit 2 instead of prompting)");program2.configureHelp({sortSubcommands:!0,showGlobalOptions:!0});program2.configureOutput({outputError:(str5,write)=>{let cmd=program2.commands.find((c)=>process.argv.slice(2,6).includes(c.name())),prefix=cmd?`genie ${cmd.name()}`:"genie";write(`\x1B[31mError (${prefix}): ${str5}\x1B[0m
|
|
3713
|
+
`)}});async function startNamedSession(name){let{buildTeamLeadCommand:buildTeamLeadCommand2,sessionExists:sessionExists2}=await Promise.resolve().then(() => (init_team_lead_command(),exports_team_lead_command)),{getAgentsFilePath:getAgentsFilePath2}=await Promise.resolve().then(() => (init_session(),exports_session)),systemPromptFile=getAgentsFilePath2(),hasPriorSession=sessionExists2(name),cmd=buildTeamLeadCommand2(name,{systemPromptFile:systemPromptFile??void 0,continueName:hasPriorSession?name:void 0});console.log(hasPriorSession?`Resuming session: ${name}`:`Starting new session: ${name}`);let{spawnSync:spawnSync6}=await import("child_process"),result2=spawnSync6("sh",["-c",cmd],{stdio:"inherit"});if(result2.status)process.exit(result2.status)}program2.command("setup").description("Configure genie settings").option("--quick","Accept all defaults").option("--shortcuts","Only configure keyboard shortcuts").option("--codex","Only configure Codex integration").option("--terminal","Only configure terminal defaults").option("--session","Only configure session settings").option("--reset","Reset configuration to defaults").option("--show","Show current configuration").action(async(options)=>{await setupCommand(options)});program2.command("doctor").description("Run diagnostic checks on genie installation").option("--fix","Auto-fix: kill zombie postgres, clean shared memory, restart daemon").action(doctorCommand);program2.command("update").description("Update Genie CLI to the latest version").option("--next","Switch to dev builds (npm @next tag)").option("--stable","Switch to stable releases (npm @latest tag)").action(updateCommand);program2.command("uninstall").description("Remove Genie CLI and clean up hooks").action(uninstallCommand);var shortcuts=program2.command("shortcuts").description("Manage tmux keyboard shortcuts");shortcuts.action(shortcutsShowCommand);shortcuts.command("show").description("Show available shortcuts and installation status").action(shortcutsShowCommand);shortcuts.command("install").description("Install shortcuts to config files (~/.tmux.conf, shell rc)").action(shortcutsInstallCommand);shortcuts.command("uninstall").description("Remove shortcuts from config files").action(shortcutsUninstallCommand);registerServeCommands(program2);registerAppCommand(program2);registerInitCommands(program2);registerTeamNamespace(program2);registerDirNamespace(program2);registerAgentCommands(program2);registerSendInboxCommands(program2);registerStateCommands(program2);registerDispatchCommands(program2);registerDispatchGroupCommands(program2);registerWishCommands(program2);registerHookNamespace(program2);registerDbCommands(program2);registerScheduleCommands(program2);registerDaemonCommands(program2);registerTaskCommands(program2);registerTypeCommands(program2);registerBoardCommands(program2);registerTagCommands(program2);registerReleaseCommands(program2);registerProjectCommands(program2);registerNotifyCommands(program2);registerEventsCommands(program2);registerSessionsCommands(program2);registerMetricsCommands(program2);registerExportCommands(program2);registerImportCommands(program2);registerTemplateCommands(program2);registerBrainCommands(program2);registerBriefCommands(program2);registerApprovalCommands(program2);installWorkspaceCheck(program2);var auditTimers=new Map;program2.hook("preAction",(_thisCommand,actionCommand)=>{let name=actionCommand.name();auditTimers.set(name,Date.now()),Promise.resolve().then(() => (init_db(),exports_db)).then(({isConnected:isConnected2})=>{if(!isConnected2())return;recordAuditEvent("command",name,"command_start",getActor(),{args:actionCommand.args}).catch(()=>{})}).catch(()=>{})});program2.hook("postAction",async(_thisCommand,actionCommand)=>{let name=actionCommand.name(),startMs=auditTimers.get(name),durationMs=startMs?Date.now()-startMs:void 0;auditTimers.delete(name);try{let{isConnected:isConnected2}=await Promise.resolve().then(() => (init_db(),exports_db));if(!isConnected2())return;await recordAuditEvent("command",name,"command_success",getActor(),{args:actionCommand.args,duration_ms:durationMs})}catch{}});program2.command("spawn <name>").description("Spawn a new agent by name (resolves from directory or built-ins)").option("--provider <provider>","Provider: claude or codex","claude").option("--team <team>","Team name").option("--model <model>","Model override (e.g., sonnet, opus)").option("--skill <skill>","Skill to load (optional)").option("--layout <layout>","Layout mode: mosaic (default) or vertical").option("--color <color>","Teammate pane border color").option("--plan-mode","Start teammate in plan mode").option("--permission-mode <mode>","Permission mode (e.g., acceptEdits)").option("--extra-args <args...>","Extra CLI args forwarded to provider").option("--cwd <path>","Working directory for the agent (overrides directory entry)").option("--session <session>","Tmux session name to spawn into").option("--role <role>","Override role name for registration (avoids duplicate guard)").option("--new-window","Create a new tmux window instead of splitting").option("--window <target>","Tmux window to split into (e.g., genie:3)").option("--no-auto-resume","Disable auto-resume on pane death").option("--stream","Stream SDK messages to stdout in real-time (claude-sdk provider)").option("--stream-format <format>","Streaming output format: text, json, ndjson (default: text)","text").option("--sdk-max-turns <n>","SDK: max conversation turns",parseNumericFlag2("--sdk-max-turns")).option("--sdk-max-budget <usd>","SDK: max budget in USD",parseNumericFlag2("--sdk-max-budget")).option("--sdk-stream","SDK: enable streaming output (shortcut for --stream)").option("--sdk-effort <level>","SDK: reasoning effort level (low, medium, high, max)").option("--sdk-resume <session-id>","SDK: resume a previous session by ID").option("--prompt <text>","Initial prompt to send as the first user message").addHelpText("after",`
|
|
3613
3714
|
Examples:
|
|
3614
3715
|
genie spawn engineer # Spawn built-in engineer role
|
|
3615
3716
|
genie spawn researcher --model sonnet # Spawn with model override
|
|
3616
3717
|
genie spawn my-agent --team my-feature # Spawn into a specific team
|
|
3617
|
-
genie spawn council--questioner --provider codex # Use Codex provider`).action(async(name,options)=>{try{await handleWorkerSpawn(name,options)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}});program2.command("kill <name>").description("Force kill an agent by name").action(async(name)=>{try{await handleWorkerKill(name)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}});program2.command("stop <name>").description("Stop an agent (preserves session for resume)").action(async(name)=>{try{await handleWorkerStop(name)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}});program2.command("resume [name]").description("Resume a suspended/failed agent with its Claude session").option("--all","Resume all eligible agents").action(async(name,options)=>{try{await handleWorkerResume(name,options)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}});program2.command("history <name>").description("Show compressed session history for an agent").option("--full","Show full conversation without compression").option("--since <n>","Show last N user/assistant exchanges",Number.parseInt).option("--last <n>","Show last N transcript entries",Number.parseInt).option("--type <role>","Filter by role (user, assistant, tool_call)").option("--after <timestamp>","Only entries after ISO timestamp").option("--json","Output as JSON").option("--ndjson","Output as newline-delimited JSON (pipeable to jq)").option("--raw","Output raw JSONL entries").option("--log-file <path>","Direct path to log file (for testing)").action(async(name,options)=>{await historyCommand(name,options)});program2.command("log [agent]").description("Unified observability feed \u2014 aggregates transcript, DMs, team chat").option("--team <name>","Show interleaved feed for all agents in a team").option("--type <kind>","Filter by event kind (transcript, message, tool_call, state, system)").option("--since <timestamp>","Only events after ISO timestamp").option("--last <n>","Show last N events",Number.parseInt).option("--ndjson","Output as newline-delimited JSON (pipeable to jq)").option("--json","Output as pretty JSON").option("-f, --follow","Follow mode \u2014 real-time streaming").action(async(agent,options)=>{await logCommand(agent,options)});var qaCmd=program2.command("qa").description("QA \u2014 self-testing system for genie CLI");qaCmd.command("run [target]",{isDefault:!0}).description("Run QA specs (all, a domain, or a single spec)").option("--timeout <seconds>","Max seconds per spec",(v2)=>Number(v2),3600).option("--parallel <n>","Max specs to run in parallel",(v2)=>Number(v2),5).option("--verbose","Show all collected events").option("--ndjson","Machine-readable NDJSON output").action(async(target,options)=>{await qaCommand(target,options)});qaCmd.command("status").description("Show QA dashboard with last results per spec").option("--json","Output as JSON").action(async(options)=>{await qaStatusCommand(options)});qaCmd.command("history").description("Show recent QA runs").action(async()=>{await qaHistoryCommand()});qaCmd.command("check <specFile>").description("Evaluate a QA spec against current team logs and publish qa-report").option("--team <name>","Team name (defaults to GENIE_TEAM)").option("--since <timestamp>","Only consider events after this ISO timestamp").option("--since-file <path>","Read the lower-bound timestamp from a file").action(async(specFile,options)=>{await qaCheckCommand(specFile,options)});program2.command("qa-report <json>").description("Publish QA result to the PG event log (called by QA team-lead)").action(async(json2)=>{let team=process.env.GENIE_TEAM;if(!team)console.error("Error: GENIE_TEAM not set. This command must be run by a QA team-lead agent."),process.exit(1);try{let data=JSON.parse(json2),{publishSubjectEvent:publishSubjectEvent2}=await Promise.resolve().then(() => (init_runtime_events(),exports_runtime_events));await publishSubjectEvent2(process.cwd(),`genie.qa.${team}.result`,{kind:"qa",agent:"qa",team,text:`QA result: ${String(data.result??"unknown")}`,data,source:"hook"}),console.log(`QA result published to PG event log as genie.qa.${team}.result`)}catch(err){console.error(`Failed to publish QA result: ${err}`),process.exit(1)}});program2.command("read <name>").description("Read terminal output from an agent pane").option("-n, --lines <number>","Number of lines to read").option("--from <line>","Start line").option("--to <line>","End line").option("--range <range>",'Line range (e.g., "10-20")').option("--search <text>","Search for text").option("--grep <pattern>","Grep for pattern").option("-f, --follow","Follow mode (like tail -f)").option("--all","Show all output").option("-r, --reverse","Reverse order").option("--json","Output as JSON").action(async(name,options)=>{await readSessionLogs2(name,options)});program2.command("answer <name> <choice>").description('Answer a question for an agent (use "text:..." for text input)').action(async(name,choice)=>{await answerQuestion(name,choice)});program2.command("ls").description("List registered agents with runtime status").option("--json","Output as JSON").option("--source <name>","Filter by executor metadata source (e.g. omni)").action(async(options)=>{try{await handleLsCommand(options)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}});var args=process.argv.slice(2),isTuiPane=process.env.GENIE_TUI_PANE==="left"&&args.length===0,tuiRightPane=process.env.GENIE_TUI_RIGHT;delete process.env.GENIE_TUI_PANE;delete process.env.GENIE_TUI_RIGHT;delete process.env.GENIE_IS_DAEMON;if(isTuiPane){if(tuiRightPane)process.env.GENIE_TUI_RIGHT=tuiRightPane;let{launchTui:launchTui2}=await Promise.resolve().then(() => exports_tui);await launchTui2(),process.exit(0)}if(args.length===0){if(process.env.TMUX?.includes("genie-tui")){let{findWorkspace:findWorkspace3}=await Promise.resolve().then(() => (init_workspace(),exports_workspace)),ws2=findWorkspace3();if(ws2){let{resolveAgentFromCwd:resolveAgentFromCwd3}=await Promise.resolve().then(() => (init_resolve_agent_cwd(),exports_resolve_agent_cwd)),resolved2=resolveAgentFromCwd3(process.cwd(),ws2.root);if(resolved2.source!=="default"){let{writeFileSync:writeFileSync25}=await import("fs"),{join:
|
|
3618
|
-
`),console.log(`Workspace initialized: ${cwd}`),ws=findWorkspace2(),!ws)console.error("Failed to initialize workspace."),process.exit(1)}let{resolveAgentFromCwd:resolveAgentFromCwd2}=await Promise.resolve().then(() => (init_resolve_agent_cwd(),exports_resolve_agent_cwd)),resolved=resolveAgentFromCwd2(process.cwd(),ws.root),initialAgent=resolved.agent,{isServeRunning:isServeRunning2,autoStartServe:autoStartServe2,isTuiSessionReady:isTuiSessionReady2,ensureTuiSession:ensureTuiSession2}=await Promise.resolve().then(() => (init_serve(),exports_serve));if(!isServeRunning2())console.log("Starting genie serve..."),await autoStartServe2();else if(!isTuiSessionReady2())ensureTuiSession2(ws.root);if(ws.root)process.env.GENIE_TUI_WORKSPACE=ws.root;if(initialAgent)process.env.GENIE_TUI_AGENT=initialAgent;if(resolved.source!=="default"){let{execSync:execSync18}=await import("child_process");try{execSync18(`tmux has-session -t ${initialAgent} 2>/dev/null`,{stdio:"pipe"})}catch{console.log(`Spawning ${initialAgent}...`);try{execSync18(`genie spawn ${initialAgent}`,{stdio:"inherit",timeout:15000})}catch{}}}if(initialAgent){let{writeFileSync:writeFileSync25}=await import("fs"),{join:
|
|
3718
|
+
genie spawn council--questioner --provider codex # Use Codex provider`).action(async(name,options)=>{try{await handleWorkerSpawn(name,options)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}});program2.command("kill <name>").description("Force kill an agent by name").action(async(name)=>{try{await handleWorkerKill(name)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}});program2.command("stop <name>").description("Stop an agent (preserves session for resume)").action(async(name)=>{try{await handleWorkerStop(name)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}});program2.command("resume [name]").description("Resume a suspended/failed agent with its Claude session").option("--all","Resume all eligible agents").action(async(name,options)=>{try{await handleWorkerResume(name,options)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}});program2.command("history <name>").description("Show compressed session history for an agent").option("--full","Show full conversation without compression").option("--since <n>","Show last N user/assistant exchanges",Number.parseInt).option("--last <n>","Show last N transcript entries",Number.parseInt).option("--type <role>","Filter by role (user, assistant, tool_call)").option("--after <timestamp>","Only entries after ISO timestamp").option("--json","Output as JSON").option("--ndjson","Output as newline-delimited JSON (pipeable to jq)").option("--raw","Output raw JSONL entries").option("--log-file <path>","Direct path to log file (for testing)").action(async(name,options)=>{await historyCommand(name,options)});program2.command("log [agent]").description("Unified observability feed \u2014 aggregates transcript, DMs, team chat").option("--team <name>","Show interleaved feed for all agents in a team").option("--type <kind>","Filter by event kind (transcript, message, tool_call, state, system)").option("--since <timestamp>","Only events after ISO timestamp").option("--last <n>","Show last N events",Number.parseInt).option("--ndjson","Output as newline-delimited JSON (pipeable to jq)").option("--json","Output as pretty JSON").option("-f, --follow","Follow mode \u2014 real-time streaming").action(async(agent,options)=>{await logCommand(agent,options)});var qaCmd=program2.command("qa").description("QA \u2014 self-testing system for genie CLI");qaCmd.command("run [target]",{isDefault:!0}).description("Run QA specs (all, a domain, or a single spec)").option("--timeout <seconds>","Max seconds per spec",(v2)=>Number(v2),3600).option("--parallel <n>","Max specs to run in parallel",(v2)=>Number(v2),5).option("--verbose","Show all collected events").option("--ndjson","Machine-readable NDJSON output").action(async(target,options)=>{await qaCommand(target,options)});qaCmd.command("status").description("Show QA dashboard with last results per spec").option("--json","Output as JSON").action(async(options)=>{await qaStatusCommand(options)});qaCmd.command("history").description("Show recent QA runs").action(async()=>{await qaHistoryCommand()});qaCmd.command("check <specFile>").description("Evaluate a QA spec against current team logs and publish qa-report").option("--team <name>","Team name (defaults to GENIE_TEAM)").option("--since <timestamp>","Only consider events after this ISO timestamp").option("--since-file <path>","Read the lower-bound timestamp from a file").action(async(specFile,options)=>{await qaCheckCommand(specFile,options)});program2.command("qa-report <json>").description("Publish QA result to the PG event log (called by QA team-lead)").action(async(json2)=>{let team=process.env.GENIE_TEAM;if(!team)console.error("Error: GENIE_TEAM not set. This command must be run by a QA team-lead agent."),process.exit(1);try{let data=JSON.parse(json2),{publishSubjectEvent:publishSubjectEvent2}=await Promise.resolve().then(() => (init_runtime_events(),exports_runtime_events));await publishSubjectEvent2(process.cwd(),`genie.qa.${team}.result`,{kind:"qa",agent:"qa",team,text:`QA result: ${String(data.result??"unknown")}`,data,source:"hook"}),console.log(`QA result published to PG event log as genie.qa.${team}.result`)}catch(err){console.error(`Failed to publish QA result: ${err}`),process.exit(1)}});program2.command("read <name>").description("Read terminal output from an agent pane").option("-n, --lines <number>","Number of lines to read").option("--from <line>","Start line").option("--to <line>","End line").option("--range <range>",'Line range (e.g., "10-20")').option("--search <text>","Search for text").option("--grep <pattern>","Grep for pattern").option("-f, --follow","Follow mode (like tail -f)").option("--all","Show all output").option("-r, --reverse","Reverse order").option("--json","Output as JSON").action(async(name,options)=>{await readSessionLogs2(name,options)});program2.command("answer <name> <choice>").description('Answer a question for an agent (use "text:..." for text input)').action(async(name,choice)=>{await answerQuestion(name,choice)});program2.command("ls").description("List registered agents with runtime status").option("--json","Output as JSON").option("--source <name>","Filter by executor metadata source (e.g. omni)").action(async(options)=>{try{await handleLsCommand(options)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}});var args=process.argv.slice(2),isTuiPane=process.env.GENIE_TUI_PANE==="left"&&args.length===0,tuiRightPane=process.env.GENIE_TUI_RIGHT;delete process.env.GENIE_TUI_PANE;delete process.env.GENIE_TUI_RIGHT;delete process.env.GENIE_IS_DAEMON;if(isTuiPane){if(tuiRightPane)process.env.GENIE_TUI_RIGHT=tuiRightPane;let{launchTui:launchTui2}=await Promise.resolve().then(() => exports_tui);await launchTui2(),process.exit(0)}if(args.length===0){if(process.env.TMUX?.includes("genie-tui")){let{findWorkspace:findWorkspace3}=await Promise.resolve().then(() => (init_workspace(),exports_workspace)),ws2=findWorkspace3();if(ws2){let{resolveAgentFromCwd:resolveAgentFromCwd3}=await Promise.resolve().then(() => (init_resolve_agent_cwd(),exports_resolve_agent_cwd)),resolved2=resolveAgentFromCwd3(process.cwd(),ws2.root);if(resolved2.source!=="default"){let{writeFileSync:writeFileSync25}=await import("fs"),{join:join66}=await import("path"),home=process.env.GENIE_HOME??join66((await import("os")).homedir(),".genie");try{writeFileSync25(join66(home,"tui-initial-agent"),resolved2.agent,"utf-8")}catch{}console.log(`Navigating to ${resolved2.agent}...`)}else console.log("Already inside the genie TUI. Use Ctrl-b d to detach, or run genie commands directly.")}else console.log("Already inside the genie TUI. Use Ctrl-b d to detach, or run genie commands directly.");process.exit(0)}if(process.env.TMUX)console.warn("Note: switching to genie TUI from within another tmux session.");let{findWorkspace:findWorkspace2}=await Promise.resolve().then(() => (init_workspace(),exports_workspace)),ws=findWorkspace2();if(!ws){let{isInteractive:isInteractive2}=await Promise.resolve().then(() => (init_interactivity(),exports_interactivity));if(!isInteractive2())console.error("No workspace found. Run `genie init` to set up."),process.exit(2);let{confirm:confirm2}=await Promise.resolve().then(() => (init_esm14(),exports_esm));if(!await confirm2({message:"No workspace found. Initialize? [Y/n]",default:!0}))console.error("No workspace found. Run `genie init` to set up."),process.exit(2);let{mkdirSync:mkdirSync22,writeFileSync:writeFileSync25}=await import("fs"),{basename:basename15,join:join66}=await import("path"),cwd=process.cwd(),genieDir=join66(cwd,".genie");mkdirSync22(genieDir,{recursive:!0});let config={name:basename15(cwd),agents:{defaults:{}},tmux:{socket:"genie"},sdk:{}};if(writeFileSync25(join66(genieDir,"workspace.json"),`${JSON.stringify(config,null,2)}
|
|
3719
|
+
`),console.log(`Workspace initialized: ${cwd}`),ws=findWorkspace2(),!ws)console.error("Failed to initialize workspace."),process.exit(1)}let{resolveAgentFromCwd:resolveAgentFromCwd2}=await Promise.resolve().then(() => (init_resolve_agent_cwd(),exports_resolve_agent_cwd)),resolved=resolveAgentFromCwd2(process.cwd(),ws.root),initialAgent=resolved.agent,{isServeRunning:isServeRunning2,autoStartServe:autoStartServe2,isTuiSessionReady:isTuiSessionReady2,ensureTuiSession:ensureTuiSession2}=await Promise.resolve().then(() => (init_serve(),exports_serve));if(!isServeRunning2())console.log("Starting genie serve..."),await autoStartServe2();else if(!isTuiSessionReady2())ensureTuiSession2(ws.root);if(ws.root)process.env.GENIE_TUI_WORKSPACE=ws.root;if(initialAgent)process.env.GENIE_TUI_AGENT=initialAgent;if(resolved.source!=="default"){let{execSync:execSync18}=await import("child_process");try{execSync18(`tmux has-session -t ${initialAgent} 2>/dev/null`,{stdio:"pipe"})}catch{console.log(`Spawning ${initialAgent}...`);try{execSync18(`genie spawn ${initialAgent}`,{stdio:"inherit",timeout:15000})}catch{}}}if(initialAgent){let{writeFileSync:writeFileSync25}=await import("fs"),{join:join66}=await import("path"),home=process.env.GENIE_HOME??join66((await import("os")).homedir(),".genie");try{writeFileSync25(join66(home,"tui-initial-agent"),initialAgent,"utf-8")}catch{}}let{attachTuiSession:attachTuiSession2}=await Promise.resolve().then(() => (init_tmux2(),exports_tmux2));attachTuiSession2(),process.exit(0)}if(args.every((a)=>a==="--reset")){let{sessionCommand:sessionCommand2}=await Promise.resolve().then(() => (init_session(),exports_session));await sessionCommand2({reset:!0}),process.exit(0)}var sessionIdx=args.indexOf("--session");if(sessionIdx!==-1&&sessionIdx+1<args.length){let sessionName=args[sessionIdx+1];if(!args.filter((_2,i2)=>i2!==sessionIdx&&i2!==sessionIdx+1).some((a)=>!a.startsWith("-")))try{await startNamedSession(sessionName),process.exit(0)}catch(err){console.error(`Error: ${err instanceof Error?err.message:err}`),process.exit(1)}else try{await program2.parseAsync(process.argv)}finally{await stopOtelReceiver().catch(()=>{}),await shutdown().catch(()=>{})}}else try{let _cmdStart=Date.now();if(await program2.parseAsync(process.argv),process.env.GENIE_PROFILE_DB)console.error(`[profile] parseAsync=${Date.now()-_cmdStart}ms`)}finally{let _shutStart=Date.now();if(await stopOtelReceiver().catch(()=>{}),await shutdown().catch(()=>{}),process.env.GENIE_PROFILE_DB)console.error(`[profile] shutdown=${Date.now()-_shutStart}ms`)}
|