@x-code-cli/core 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/loader.d.ts +6 -0
- package/dist/commands/loader.d.ts.map +1 -1
- package/dist/commands/loader.js +27 -11
- package/dist/commands/loader.js.map +1 -1
- package/dist/commands/types.d.ts +4 -4
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/permissions/index.d.ts +1 -1
- package/dist/permissions/index.d.ts.map +1 -1
- package/dist/permissions/index.js +10 -4
- package/dist/permissions/index.js.map +1 -1
- package/dist/permissions/session-store.d.ts +75 -16
- package/dist/permissions/session-store.d.ts.map +1 -1
- package/dist/permissions/session-store.js +292 -37
- package/dist/permissions/session-store.js.map +1 -1
- package/dist/plugins/marketplace.d.ts +5 -2
- package/dist/plugins/marketplace.d.ts.map +1 -1
- package/dist/plugins/marketplace.js +5 -2
- package/dist/plugins/marketplace.js.map +1 -1
- package/dist/tools/shell-utils.d.ts.map +1 -1
- package/dist/tools/shell-utils.js +157 -6
- package/dist/tools/shell-utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
/** Split compound shell commands by pipe/chain operators for permission checking */
|
|
2
2
|
export function splitShellCommands(cmd) {
|
|
3
|
-
// Split by |, &&, ;, || — but not inside quotes
|
|
3
|
+
// Split by |, &&, ;, || — but not inside quotes or curly braces.
|
|
4
|
+
//
|
|
5
|
+
// Brace tracking exists to keep PowerShell hash literals / script blocks
|
|
6
|
+
// intact: `Select-Object @{N='Directory';E={$_.Name}},Count` has a `;`
|
|
7
|
+
// inside the hash that's a *field separator*, not a statement boundary.
|
|
8
|
+
// Without depth tracking the splitter chops the literal in half and the
|
|
9
|
+
// tail (`E={$_.Name}},Count`) reads as a separate command, which trips
|
|
10
|
+
// the read-only check and forces an unnecessary prompt. POSIX `{ … ; }`
|
|
11
|
+
// brace groups are caught by the same rule — acceptable side effect,
|
|
12
|
+
// since the contents are still scanned end-to-end by isDestructive.
|
|
4
13
|
const parts = [];
|
|
5
14
|
let current = '';
|
|
6
15
|
let inSingleQuote = false;
|
|
7
16
|
let inDoubleQuote = false;
|
|
17
|
+
let braceDepth = 0;
|
|
8
18
|
for (let i = 0; i < cmd.length; i++) {
|
|
9
19
|
const ch = cmd[i];
|
|
10
20
|
const next = cmd[i + 1];
|
|
@@ -17,7 +27,18 @@ export function splitShellCommands(cmd) {
|
|
|
17
27
|
current += ch;
|
|
18
28
|
}
|
|
19
29
|
else if (!inSingleQuote && !inDoubleQuote) {
|
|
20
|
-
if (ch === '
|
|
30
|
+
if (ch === '{') {
|
|
31
|
+
braceDepth++;
|
|
32
|
+
current += ch;
|
|
33
|
+
}
|
|
34
|
+
else if (ch === '}' && braceDepth > 0) {
|
|
35
|
+
braceDepth--;
|
|
36
|
+
current += ch;
|
|
37
|
+
}
|
|
38
|
+
else if (braceDepth > 0) {
|
|
39
|
+
current += ch;
|
|
40
|
+
}
|
|
41
|
+
else if (ch === '|' && next === '|') {
|
|
21
42
|
parts.push(current);
|
|
22
43
|
current = '';
|
|
23
44
|
i++; // skip next |
|
|
@@ -49,6 +70,7 @@ export function splitShellCommands(cmd) {
|
|
|
49
70
|
}
|
|
50
71
|
/** Unix/PowerShell commands that are safe to auto-allow */
|
|
51
72
|
const READ_ONLY_COMMANDS = [
|
|
73
|
+
// POSIX shell read-only utilities
|
|
52
74
|
'cd',
|
|
53
75
|
'ls',
|
|
54
76
|
'dir',
|
|
@@ -68,17 +90,81 @@ const READ_ONLY_COMMANDS = [
|
|
|
68
90
|
'printenv',
|
|
69
91
|
'find',
|
|
70
92
|
'tree',
|
|
71
|
-
|
|
93
|
+
'sort',
|
|
94
|
+
'uniq',
|
|
95
|
+
'grep',
|
|
96
|
+
'cut',
|
|
97
|
+
'nl',
|
|
98
|
+
'basename',
|
|
99
|
+
'dirname',
|
|
100
|
+
'realpath',
|
|
101
|
+
// PowerShell read-only cmdlets — matched case-insensitively below.
|
|
102
|
+
// Curated against the codex/opencode safelists: everything that only
|
|
103
|
+
// reads or only reshapes the object pipeline is here. Anything that
|
|
104
|
+
// can write a file, start a process, or evaluate user-supplied code
|
|
105
|
+
// (`Invoke-Expression`, `Set-*`, `New-*`, `Remove-*`, `Start-Process`,
|
|
106
|
+
// `Set-Content`, `Out-File`, …) is deliberately excluded.
|
|
72
107
|
'Get-ChildItem',
|
|
73
108
|
'Get-Location',
|
|
109
|
+
'Set-Location',
|
|
110
|
+
'Push-Location',
|
|
111
|
+
'Pop-Location',
|
|
74
112
|
'Get-Content',
|
|
113
|
+
'Get-Item',
|
|
114
|
+
'Get-ItemProperty',
|
|
115
|
+
'Get-Date',
|
|
116
|
+
'Get-Process',
|
|
117
|
+
'Get-Service',
|
|
118
|
+
'Get-Command',
|
|
119
|
+
'Get-Help',
|
|
120
|
+
'Get-Member',
|
|
121
|
+
'Get-Variable',
|
|
122
|
+
'Get-Alias',
|
|
123
|
+
'Get-PSDrive',
|
|
124
|
+
'Get-Module',
|
|
125
|
+
'Get-History',
|
|
126
|
+
'Get-CimInstance',
|
|
75
127
|
'Select-String',
|
|
128
|
+
'Select-Object',
|
|
129
|
+
'Sort-Object',
|
|
130
|
+
'Group-Object',
|
|
131
|
+
'Where-Object',
|
|
132
|
+
'ForEach-Object',
|
|
133
|
+
'Measure-Object',
|
|
134
|
+
'Compare-Object',
|
|
135
|
+
'Tee-Object',
|
|
136
|
+
'Format-Table',
|
|
137
|
+
'Format-List',
|
|
138
|
+
'Format-Wide',
|
|
139
|
+
'Format-Custom',
|
|
140
|
+
'Out-String',
|
|
141
|
+
'Out-Default',
|
|
142
|
+
'Out-Host',
|
|
143
|
+
'Write-Output',
|
|
144
|
+
'Write-Host',
|
|
145
|
+
'Write-Verbose',
|
|
146
|
+
'Write-Debug',
|
|
147
|
+
'Write-Information',
|
|
148
|
+
'ConvertTo-Json',
|
|
149
|
+
'ConvertFrom-Json',
|
|
150
|
+
'ConvertTo-Csv',
|
|
151
|
+
'ConvertFrom-Csv',
|
|
152
|
+
'ConvertTo-Xml',
|
|
153
|
+
'ConvertFrom-Xml',
|
|
154
|
+
'ConvertTo-Html',
|
|
155
|
+
'Resolve-Path',
|
|
156
|
+
'Split-Path',
|
|
157
|
+
'Join-Path',
|
|
158
|
+
'Convert-Path',
|
|
76
159
|
'Test-Path',
|
|
77
160
|
];
|
|
78
161
|
/** Git sub-commands that are read-only */
|
|
79
162
|
const READ_ONLY_GIT_SUBCOMMANDS = ['status', 'log', 'diff', 'branch', 'show', 'remote', 'tag', 'stash list', 'reflog'];
|
|
80
|
-
// Pre-compiled regexes for performance
|
|
81
|
-
|
|
163
|
+
// Pre-compiled regexes for performance. `/i` flag makes the match
|
|
164
|
+
// case-insensitive so `Get-ChildItem` / `get-childitem` / `GET-CHILDITEM`
|
|
165
|
+
// all hit — PowerShell itself is case-insensitive, and `dir` / `DIR`
|
|
166
|
+
// should both be allowed on Windows cmd shells.
|
|
167
|
+
const READ_ONLY_REGEX = new RegExp(`^\\s*(${READ_ONLY_COMMANDS.join('|')}|git\\s+(${READ_ONLY_GIT_SUBCOMMANDS.join('|')}))\\b`, 'i');
|
|
82
168
|
const DESTRUCTIVE_PATTERNS = [
|
|
83
169
|
// ── Filesystem destruction ──
|
|
84
170
|
/\brm\s+(-[a-z]*f|-[a-z]*r|--force|--recursive)/,
|
|
@@ -132,9 +218,74 @@ const DESTRUCTIVE_PATTERNS = [
|
|
|
132
218
|
/\bfdisk\b/,
|
|
133
219
|
/\bparted\b/,
|
|
134
220
|
];
|
|
221
|
+
// Lower-cased Verb-Noun subset of READ_ONLY_COMMANDS, pre-built for O(1)
|
|
222
|
+
// lookup inside isReadOnlyControlFlow. Anything without a `-` is a POSIX
|
|
223
|
+
// command and irrelevant to the PowerShell-control-flow heuristic.
|
|
224
|
+
const READ_ONLY_CMDLET_SET = new Set(READ_ONLY_COMMANDS.filter((c) => c.includes('-')).map((c) => c.toLowerCase()));
|
|
225
|
+
// PowerShell control-flow keywords that wrap a `{ … }` body. When a
|
|
226
|
+
// segment starts with one of these, the existing READ_ONLY_REGEX (which
|
|
227
|
+
// only checks the leading token) gives the wrong answer — `if`,
|
|
228
|
+
// `foreach`, `try` etc. aren't commands themselves; the work happens
|
|
229
|
+
// inside the braces. The codex / gemini-cli equivalents crack open the
|
|
230
|
+
// braces via a real PowerShell AST parser; we don't have one, so we use
|
|
231
|
+
// a Verb-Noun cmdlet scan guarded by the exec-invocation patterns below.
|
|
232
|
+
const PS_CONTROL_FLOW_RE = /^\s*(?:if|elseif|else|for|foreach|while|switch|try|catch|finally|do)\b/i;
|
|
233
|
+
// Patterns that, when present anywhere in the control-flow segment,
|
|
234
|
+
// force the readonly heuristic off:
|
|
235
|
+
//
|
|
236
|
+
// `& "C:\bin\foo.exe" arg` — call operator + path/string/variable
|
|
237
|
+
// `& $cmd` — same, via variable
|
|
238
|
+
// `. .\script.ps1` — dot sourcing
|
|
239
|
+
// `. $script` — dot sourcing via variable
|
|
240
|
+
//
|
|
241
|
+
// Both invoke arbitrary code that the Verb-Noun cmdlet scan can't see.
|
|
242
|
+
// The dot-sourcing pattern requires whitespace AFTER the dot so
|
|
243
|
+
// `.Property` access and `Get-Content .\file` don't false-positive.
|
|
244
|
+
const PS_CALL_OP_RE = /&\s*["'$./\\]/;
|
|
245
|
+
const PS_DOT_SOURCING_RE = /(?:^|[\s;{(])\.\s+\S/;
|
|
246
|
+
// Verb-Noun token shape (find + strict-validate). FIND matches anything
|
|
247
|
+
// with a `-`, including paths like `x-code-cli`; STRICT enforces Verb
|
|
248
|
+
// (initial-cap) and Noun(s) (initial-cap), which paths fail.
|
|
249
|
+
const VERB_NOUN_FIND_RE = /\b[A-Za-z]+(?:-[A-Za-z0-9]+)+\b/g;
|
|
250
|
+
const VERB_NOUN_STRICT_RE = /^[A-Z][a-z]+(?:-[A-Z][A-Za-z0-9]*)+$/;
|
|
251
|
+
/**
|
|
252
|
+
* For a PowerShell control-flow segment, return true iff every cmdlet
|
|
253
|
+
* inside it is in the readonly set AND nothing in the segment looks
|
|
254
|
+
* like an arbitrary-code invocation (`&` call operator, dot-sourcing).
|
|
255
|
+
*
|
|
256
|
+
* `if (Test-Path X) { Get-Content X }` → true (Test-Path, Get-Content both readonly)
|
|
257
|
+
* `if (Test-Path X) { Set-Content X foo }` → false (Set-Content not readonly)
|
|
258
|
+
* `if (Test-Path X) { & "evil.exe" }` → false (call operator)
|
|
259
|
+
* `if (Test-Path X) { . .\\evil.ps1 }` → false (dot sourcing)
|
|
260
|
+
* `if ($x -gt 0) { }` → false (no cmdlets found — conservative)
|
|
261
|
+
*
|
|
262
|
+
* Returns false (defer to the caller's "ask" path) for any non-control-flow
|
|
263
|
+
* segment, so the existing leading-token readonly check stays authoritative.
|
|
264
|
+
*/
|
|
265
|
+
function isReadOnlyControlFlow(cmd) {
|
|
266
|
+
if (!PS_CONTROL_FLOW_RE.test(cmd))
|
|
267
|
+
return false;
|
|
268
|
+
if (PS_CALL_OP_RE.test(cmd))
|
|
269
|
+
return false;
|
|
270
|
+
if (PS_DOT_SOURCING_RE.test(cmd))
|
|
271
|
+
return false;
|
|
272
|
+
let found = 0;
|
|
273
|
+
for (const match of cmd.matchAll(VERB_NOUN_FIND_RE)) {
|
|
274
|
+
const name = match[0];
|
|
275
|
+
if (!VERB_NOUN_STRICT_RE.test(name))
|
|
276
|
+
continue;
|
|
277
|
+
found++;
|
|
278
|
+
if (!READ_ONLY_CMDLET_SET.has(name.toLowerCase()))
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
return found > 0;
|
|
282
|
+
}
|
|
135
283
|
/** Check if a sub-command is read-only (safe to auto-allow) */
|
|
136
284
|
export function isReadOnly(cmd) {
|
|
137
|
-
|
|
285
|
+
const c = cmd.trim();
|
|
286
|
+
if (READ_ONLY_REGEX.test(c))
|
|
287
|
+
return true;
|
|
288
|
+
return isReadOnlyControlFlow(c);
|
|
138
289
|
}
|
|
139
290
|
/** Check if a sub-command is destructive (should be denied) */
|
|
140
291
|
export function isDestructive(cmd) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-utils.js","sourceRoot":"","sources":["../../src/tools/shell-utils.ts"],"names":[],"mappings":"AAOA,oFAAoF;AACpF,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,
|
|
1
|
+
{"version":3,"file":"shell-utils.js","sourceRoot":"","sources":["../../src/tools/shell-utils.ts"],"names":[],"mappings":"AAOA,oFAAoF;AACpF,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,iEAAiE;IACjE,EAAE;IACF,yEAAyE;IACzE,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,uEAAuE;IACvE,wEAAwE;IACxE,qEAAqE;IACrE,oEAAoE;IACpE,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,aAAa,GAAG,KAAK,CAAA;IACzB,IAAI,aAAa,GAAG,KAAK,CAAA;IACzB,IAAI,UAAU,GAAG,CAAC,CAAA;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QACjB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAEvB,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACjC,aAAa,GAAG,CAAC,aAAa,CAAA;YAC9B,OAAO,IAAI,EAAE,CAAA;QACf,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,aAAa,GAAG,CAAC,aAAa,CAAA;YAC9B,OAAO,IAAI,EAAE,CAAA;QACf,CAAC;aAAM,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5C,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,UAAU,EAAE,CAAA;gBACZ,OAAO,IAAI,EAAE,CAAA;YACf,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACxC,UAAU,EAAE,CAAA;gBACZ,OAAO,IAAI,EAAE,CAAA;YACf,CAAC;iBAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,EAAE,CAAA;YACf,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACnB,OAAO,GAAG,EAAE,CAAA;gBACZ,CAAC,EAAE,CAAA,CAAC,cAAc;YACpB,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACnB,OAAO,GAAG,EAAE,CAAA;gBACZ,CAAC,EAAE,CAAA,CAAC,cAAc;YACpB,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACnB,OAAO,GAAG,EAAE,CAAA;YACd,CAAC;iBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACnB,OAAO,GAAG,EAAE,CAAA;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,EAAE,CAAA;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,EAAE,CAAA;QACf,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEvC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACnD,CAAC;AAED,2DAA2D;AAC3D,MAAM,kBAAkB,GAAG;IACzB,kCAAkC;IAClC,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,IAAI;IACJ,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,UAAU;IACV,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,IAAI;IACJ,UAAU;IACV,SAAS;IACT,UAAU;IACV,mEAAmE;IACnE,qEAAqE;IACrE,oEAAoE;IACpE,oEAAoE;IACpE,uEAAuE;IACvE,0DAA0D;IAC1D,eAAe;IACf,cAAc;IACd,cAAc;IACd,eAAe;IACf,cAAc;IACd,aAAa;IACb,UAAU;IACV,kBAAkB;IAClB,UAAU;IACV,aAAa;IACb,aAAa;IACb,aAAa;IACb,UAAU;IACV,YAAY;IACZ,cAAc;IACd,WAAW;IACX,aAAa;IACb,YAAY;IACZ,aAAa;IACb,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,aAAa;IACb,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,cAAc;IACd,aAAa;IACb,aAAa;IACb,eAAe;IACf,YAAY;IACZ,aAAa;IACb,UAAU;IACV,cAAc;IACd,YAAY;IACZ,eAAe;IACf,aAAa;IACb,mBAAmB;IACnB,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,iBAAiB;IACjB,eAAe;IACf,iBAAiB;IACjB,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,WAAW;IACX,cAAc;IACd,WAAW;CACZ,CAAA;AAED,0CAA0C;AAC1C,MAAM,yBAAyB,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;AAEtH,kEAAkE;AAClE,0EAA0E;AAC1E,qEAAqE;AACrE,gDAAgD;AAChD,MAAM,eAAe,GAAG,IAAI,MAAM,CAChC,SAAS,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAC3F,GAAG,CACJ,CAAA;AAED,MAAM,oBAAoB,GAAa;IACrC,+BAA+B;IAC/B,gDAAgD;IAChD,cAAc;IACd,UAAU;IACV,UAAU;IACV,YAAY;IACZ,wBAAwB;IACxB,eAAe;IACf,YAAY;IACZ,6BAA6B;IAC7B,2BAA2B;IAC3B,gBAAgB;IAChB,kBAAkB;IAElB,mCAAmC;IACnC,4BAA4B;IAC5B,qBAAqB;IACrB,0BAA0B;IAC1B,0BAA0B;IAC1B,4BAA4B;IAC5B,kBAAkB;IAClB,yBAAyB;IACzB,2BAA2B;IAC3B,wBAAwB;IAExB,kDAAkD;IAClD,0BAA0B;IAC1B,0BAA0B;IAC1B,uBAAuB;IACvB,uBAAuB;IAEvB,uBAAuB;IACvB,cAAc;IACd,YAAY;IACZ,iBAAiB;IACjB,mDAAmD;IACnD,aAAa;IACb,gBAAgB;IAChB,oBAAoB;IACpB,uBAAuB;IAEvB,6BAA6B;IAC7B,qCAAqC;IACrC,uBAAuB;IACvB,kCAAkC;IAElC,sCAAsC;IACtC,kDAAkD;IAClD,sBAAsB;IAEtB,8BAA8B;IAC9B,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;IAEpB,yBAAyB;IACzB,WAAW;IACX,YAAY;CACb,CAAA;AAED,yEAAyE;AACzE,yEAAyE;AACzE,mEAAmE;AACnE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;AAEnH,oEAAoE;AACpE,wEAAwE;AACxE,gEAAgE;AAChE,qEAAqE;AACrE,uEAAuE;AACvE,wEAAwE;AACxE,yEAAyE;AACzE,MAAM,kBAAkB,GAAG,yEAAyE,CAAA;AAEpG,oEAAoE;AACpE,oCAAoC;AACpC,EAAE;AACF,qEAAqE;AACrE,mDAAmD;AACnD,6CAA6C;AAC7C,0DAA0D;AAC1D,EAAE;AACF,uEAAuE;AACvE,gEAAgE;AAChE,oEAAoE;AACpE,MAAM,aAAa,GAAG,eAAe,CAAA;AACrC,MAAM,kBAAkB,GAAG,sBAAsB,CAAA;AAEjD,wEAAwE;AACxE,sEAAsE;AACtE,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,kCAAkC,CAAA;AAC5D,MAAM,mBAAmB,GAAG,sCAAsC,CAAA;AAElE;;;;;;;;;;;;;GAaG;AACH,SAAS,qBAAqB,CAAC,GAAW;IACxC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IAC/C,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IACzC,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IAE9C,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAQ;QAC7C,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO,KAAK,CAAA;IACjE,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,CAAA;AAClB,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IACpB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IACxC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAA;AACjC,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IACpB,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC"}
|