@traqr/cli 0.1.5 → 0.1.6
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/bin/traqr.js
CHANGED
|
@@ -41,6 +41,9 @@ async function main() {
|
|
|
41
41
|
case 'status':
|
|
42
42
|
await import('../commands/status.js');
|
|
43
43
|
break;
|
|
44
|
+
case 'verify':
|
|
45
|
+
await import('../commands/verify.js');
|
|
46
|
+
break;
|
|
44
47
|
case '--help':
|
|
45
48
|
case '-h':
|
|
46
49
|
printUsage();
|
|
@@ -90,6 +93,7 @@ function printUsage() {
|
|
|
90
93
|
setup Create or update global profile (~/.traqr/config.json)
|
|
91
94
|
projects List and manage registered projects
|
|
92
95
|
render Render templates from .traqr/config.json
|
|
96
|
+
verify Post-setup health check (config, render, memory, VCS)
|
|
93
97
|
status Show config summary + health
|
|
94
98
|
|
|
95
99
|
Options:
|
package/dist/bin/traqr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traqr.js","sourceRoot":"","sources":["../../src/bin/traqr.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAE/B,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;YACnC,MAAK;QACP,KAAK,UAAU;YACb,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACvC,MAAK;QACP,KAAK,OAAO;YACV,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YACpC,MAAK;QACP,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YACrC,MAAK;QACP,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;YACnC,MAAK;QACP,KAAK,UAAU;YACb,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACvC,MAAK;QACP,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YACrC,MAAK;QACP,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,UAAU,EAAE,CAAA;YACZ,MAAK;QACP,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;gBACrD,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;gBAClC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC;;;;;;;CAOrB,CAAC,CAAA;oBACQ,MAAK;gBACP,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,sCAAsC,CAAC,CAAC;YAClD,UAAU,EAAE,CAAA;YACZ,MAAK;QACP,CAAC;QACD,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACpB,MAAK;QACP;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAA;YAC5C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACjB,UAAU,EAAE,CAAA;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"traqr.js","sourceRoot":"","sources":["../../src/bin/traqr.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAE/B,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;YACnC,MAAK;QACP,KAAK,UAAU;YACb,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACvC,MAAK;QACP,KAAK,OAAO;YACV,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YACpC,MAAK;QACP,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YACrC,MAAK;QACP,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;YACnC,MAAK;QACP,KAAK,UAAU;YACb,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACvC,MAAK;QACP,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YACrC,MAAK;QACP,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YACrC,MAAK;QACP,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,UAAU,EAAE,CAAA;YACZ,MAAK;QACP,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;gBACrD,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;gBAClC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC;;;;;;;CAOrB,CAAC,CAAA;oBACQ,MAAK;gBACP,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,sCAAsC,CAAC,CAAC;YAClD,UAAU,EAAE,CAAA;YACZ,MAAK;QACP,CAAC;QACD,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACpB,MAAK;QACP;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAA;YAC5C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACjB,UAAU,EAAE,CAAA;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwBb,CAAC,CAAA;AACF,CAAC;AAED,qCAAqC;AACrC,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE;IACvC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA;AAEF,KAAK,IAAI,EAAE,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* traqr verify — Post-setup health check
|
|
3
|
+
*
|
|
4
|
+
* Validates config, render output, memory setup, VCS, and team readiness.
|
|
5
|
+
* Designed to run after `traqr render` to confirm everything is wired up.
|
|
6
|
+
*
|
|
7
|
+
* Exit codes:
|
|
8
|
+
* 0 — all checks passed
|
|
9
|
+
* 1 — critical failures (missing config, broken render)
|
|
10
|
+
* 2 — warnings only (missing optional components)
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* traqr verify — Post-setup health check
|
|
3
|
+
*
|
|
4
|
+
* Validates config, render output, memory setup, VCS, and team readiness.
|
|
5
|
+
* Designed to run after `traqr render` to confirm everything is wired up.
|
|
6
|
+
*
|
|
7
|
+
* Exit codes:
|
|
8
|
+
* 0 — all checks passed
|
|
9
|
+
* 1 — critical failures (missing config, broken render)
|
|
10
|
+
* 2 — warnings only (missing optional components)
|
|
11
|
+
*/
|
|
12
|
+
import fs from 'fs/promises';
|
|
13
|
+
import path from 'path';
|
|
14
|
+
import { calculateAutomationScore } from '@traqr/core';
|
|
15
|
+
const results = [];
|
|
16
|
+
function check(category, label, status, message) {
|
|
17
|
+
results.push({ category, label, status, message });
|
|
18
|
+
}
|
|
19
|
+
async function fileExists(filePath) {
|
|
20
|
+
try {
|
|
21
|
+
await fs.access(filePath);
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async function checkConfig(cwd) {
|
|
29
|
+
const configPath = path.join(cwd, '.traqr', 'config.json');
|
|
30
|
+
if (!await fileExists(configPath)) {
|
|
31
|
+
check('config', 'config.json', 'fail', '.traqr/config.json not found — run npx traqr render');
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const raw = await fs.readFile(configPath, 'utf-8');
|
|
36
|
+
const config = JSON.parse(raw);
|
|
37
|
+
check('config', 'config.json', 'pass', `.traqr/config.json found (v${config.version})`);
|
|
38
|
+
// Check required fields
|
|
39
|
+
if (!config.project?.name) {
|
|
40
|
+
check('config', 'project.name', 'fail', 'Missing project.name in config');
|
|
41
|
+
}
|
|
42
|
+
if (config.tier === undefined) {
|
|
43
|
+
check('config', 'tier', 'fail', 'Missing tier in config');
|
|
44
|
+
}
|
|
45
|
+
// Determine golden path
|
|
46
|
+
const vcs = config.vcs?.provider || 'unknown';
|
|
47
|
+
const issueProvider = config.issues?.provider || 'none';
|
|
48
|
+
let goldenPath = 'custom';
|
|
49
|
+
if (vcs === 'github' && issueProvider === 'linear')
|
|
50
|
+
goldenPath = 'github-pro';
|
|
51
|
+
else if (vcs === 'gitlab' && issueProvider === 'gitlab')
|
|
52
|
+
goldenPath = 'gitlab-team';
|
|
53
|
+
else if (vcs === 'gitlab' && issueProvider === 'none')
|
|
54
|
+
goldenPath = 'gitlab-minimal';
|
|
55
|
+
check('config', 'golden-path', 'pass', `Golden Path: ${goldenPath} (tier ${config.tier})`);
|
|
56
|
+
return config;
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
check('config', 'parse', 'fail', `Invalid JSON in config.json: ${e.message}`);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function checkRender(cwd) {
|
|
64
|
+
// Check CLAUDE.md
|
|
65
|
+
const claudePath = path.join(cwd, 'CLAUDE.md');
|
|
66
|
+
if (await fileExists(claudePath)) {
|
|
67
|
+
const content = await fs.readFile(claudePath, 'utf-8');
|
|
68
|
+
const markerCount = (content.match(/<!-- traqr:start:/g) || []).length;
|
|
69
|
+
if (markerCount > 0) {
|
|
70
|
+
check('render', 'CLAUDE.md', 'pass', `CLAUDE.md exists — ${markerCount} Traqr sections`);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
check('render', 'CLAUDE.md', 'warn', 'CLAUDE.md exists but has no Traqr section markers — run npx traqr render');
|
|
74
|
+
}
|
|
75
|
+
// Check for unresolved template vars
|
|
76
|
+
const unresolvedVars = content.match(/\{\{[A-Z_]+\}\}/g);
|
|
77
|
+
if (unresolvedVars && unresolvedVars.length > 0) {
|
|
78
|
+
check('render', 'template-vars', 'warn', `${unresolvedVars.length} unresolved template variables: ${unresolvedVars.slice(0, 3).join(', ')}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
check('render', 'CLAUDE.md', 'fail', 'CLAUDE.md not found — run npx traqr render');
|
|
83
|
+
}
|
|
84
|
+
// Check ONBOARDING.md
|
|
85
|
+
const onboardingPath = path.join(cwd, '.traqr', 'ONBOARDING.md');
|
|
86
|
+
if (await fileExists(onboardingPath)) {
|
|
87
|
+
check('render', 'ONBOARDING.md', 'pass', 'ONBOARDING.md exists');
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
check('render', 'ONBOARDING.md', 'warn', '.traqr/ONBOARDING.md not found — run npx traqr render');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async function checkMemory(cwd, config) {
|
|
94
|
+
const memoryProvider = config.memory?.provider;
|
|
95
|
+
if (!memoryProvider || memoryProvider === 'none') {
|
|
96
|
+
check('memory', 'provider', 'pass', 'No memory configured (tier 0)');
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
check('memory', 'provider', 'pass', `Provider: ${memoryProvider}`);
|
|
100
|
+
// Check for MCP config
|
|
101
|
+
const mcpPaths = [
|
|
102
|
+
path.join(cwd, '.claude', 'mcp.json'),
|
|
103
|
+
path.join(process.env.HOME || '', '.claude', 'mcp.json'),
|
|
104
|
+
path.join(process.env.HOME || '', '.claude.json'),
|
|
105
|
+
];
|
|
106
|
+
let mcpFound = false;
|
|
107
|
+
for (const mcpPath of mcpPaths) {
|
|
108
|
+
if (await fileExists(mcpPath)) {
|
|
109
|
+
try {
|
|
110
|
+
const raw = await fs.readFile(mcpPath, 'utf-8');
|
|
111
|
+
const mcpConfig = JSON.parse(raw);
|
|
112
|
+
const servers = mcpConfig.mcpServers || mcpConfig;
|
|
113
|
+
if (servers['traqr-memory']) {
|
|
114
|
+
check('memory', 'mcp-config', 'pass', `MCP config: found in ${path.basename(mcpPath)}`);
|
|
115
|
+
mcpFound = true;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Invalid JSON, try next
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!mcpFound) {
|
|
125
|
+
check('memory', 'mcp-config', 'warn', 'No traqr-memory MCP config found — run npx traqr-memory-mcp --install');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async function checkVcs(cwd, config) {
|
|
129
|
+
const vcsProvider = config.vcs?.provider;
|
|
130
|
+
if (!vcsProvider) {
|
|
131
|
+
check('vcs', 'provider', 'warn', 'No VCS provider configured');
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
check('vcs', 'provider', 'pass', `Provider: ${vcsProvider}`);
|
|
135
|
+
// Check git remote
|
|
136
|
+
try {
|
|
137
|
+
const { execSync } = await import('child_process');
|
|
138
|
+
const remote = execSync('git config --get remote.origin.url', { cwd, encoding: 'utf-8' }).trim();
|
|
139
|
+
if (vcsProvider === 'github' && remote.includes('github.com')) {
|
|
140
|
+
check('vcs', 'remote', 'pass', `Remote: ${config.project?.ghOrgRepo || remote}`);
|
|
141
|
+
}
|
|
142
|
+
else if (vcsProvider === 'gitlab' && (remote.includes('gitlab') || config.vcs?.baseUrl)) {
|
|
143
|
+
check('vcs', 'remote', 'pass', `Remote: ${remote}`);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
check('vcs', 'remote', 'warn', `Remote ${remote} may not match provider ${vcsProvider}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
check('vcs', 'remote', 'warn', 'No git remote configured');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async function checkTeam(cwd, config) {
|
|
154
|
+
if (config.tier < 2) {
|
|
155
|
+
check('team', 'tier', 'pass', 'Solo tier — team features not required');
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const onboardingPath = path.join(cwd, '.traqr', 'ONBOARDING.md');
|
|
159
|
+
if (await fileExists(onboardingPath)) {
|
|
160
|
+
check('team', 'onboarding', 'pass', 'Onboarding guide: present');
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
check('team', 'onboarding', 'warn', 'No onboarding guide — run npx traqr render to generate');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async function run() {
|
|
167
|
+
const cwd = process.cwd();
|
|
168
|
+
console.log('TraqrOS Verify\n');
|
|
169
|
+
// 1. Config
|
|
170
|
+
const config = await checkConfig(cwd);
|
|
171
|
+
if (!config) {
|
|
172
|
+
printResults();
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
// 2. Render output
|
|
176
|
+
await checkRender(cwd);
|
|
177
|
+
// 3. Memory
|
|
178
|
+
await checkMemory(cwd, config);
|
|
179
|
+
// 4. VCS
|
|
180
|
+
await checkVcs(cwd, config);
|
|
181
|
+
// 5. Team
|
|
182
|
+
await checkTeam(cwd, config);
|
|
183
|
+
// 6. Score
|
|
184
|
+
const score = calculateAutomationScore(config);
|
|
185
|
+
check('score', 'automation', 'pass', `Automation: ${score}/100`);
|
|
186
|
+
printResults();
|
|
187
|
+
// Exit code
|
|
188
|
+
const hasFail = results.some(r => r.status === 'fail');
|
|
189
|
+
const hasWarn = results.some(r => r.status === 'warn');
|
|
190
|
+
if (hasFail)
|
|
191
|
+
process.exit(1);
|
|
192
|
+
if (hasWarn)
|
|
193
|
+
process.exit(2);
|
|
194
|
+
process.exit(0);
|
|
195
|
+
}
|
|
196
|
+
function printResults() {
|
|
197
|
+
for (const r of results) {
|
|
198
|
+
const icon = r.status === 'pass' ? '\x1b[32m✓\x1b[0m' : r.status === 'warn' ? '\x1b[33m!\x1b[0m' : '\x1b[31m✗\x1b[0m';
|
|
199
|
+
console.log(`${icon} [${r.category}] ${r.message}`);
|
|
200
|
+
}
|
|
201
|
+
const fails = results.filter(r => r.status === 'fail').length;
|
|
202
|
+
const warns = results.filter(r => r.status === 'warn').length;
|
|
203
|
+
const passes = results.filter(r => r.status === 'pass').length;
|
|
204
|
+
console.log('');
|
|
205
|
+
if (fails > 0) {
|
|
206
|
+
console.log(`\x1b[31m${fails} failed\x1b[0m, ${warns} warnings, ${passes} passed`);
|
|
207
|
+
}
|
|
208
|
+
else if (warns > 0) {
|
|
209
|
+
console.log(`\x1b[33m${warns} warnings\x1b[0m, ${passes} passed`);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
console.log(`\x1b[32mAll ${passes} checks passed.\x1b[0m`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
void run();
|
|
216
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAA;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAqB,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAUzE,MAAM,OAAO,GAAkB,EAAE,CAAA;AAEjC,SAAS,KAAK,CAAC,QAAgB,EAAE,KAAa,EAAE,MAAgC,EAAE,OAAe;IAC/F,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;AACpD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAA;IAC1D,IAAI,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,qDAAqD,CAAC,CAAA;QAC7F,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAA;QAE7C,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,8BAA8B,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;QAEvF,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;YAC1B,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,gCAAgC,CAAC,CAAA;QAC3E,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,CAAC,CAAA;QAC3D,CAAC;QAED,wBAAwB;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,IAAI,SAAS,CAAA;QAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAA;QACvD,IAAI,UAAU,GAAG,QAAQ,CAAA;QACzB,IAAI,GAAG,KAAK,QAAQ,IAAI,aAAa,KAAK,QAAQ;YAAE,UAAU,GAAG,YAAY,CAAA;aACxE,IAAI,GAAG,KAAK,QAAQ,IAAI,aAAa,KAAK,QAAQ;YAAE,UAAU,GAAG,aAAa,CAAA;aAC9E,IAAI,GAAG,KAAK,QAAQ,IAAI,aAAa,KAAK,MAAM;YAAE,UAAU,GAAG,gBAAgB,CAAA;QAEpF,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,UAAU,UAAU,MAAM,CAAC,IAAI,GAAG,CAAC,CAAA;QAE1F,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,gCAAiC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAA;QACxF,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,kBAAkB;IAClB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;IAC9C,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACtD,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAA;QACtE,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,sBAAsB,WAAW,iBAAiB,CAAC,CAAA;QAC1F,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,0EAA0E,CAAC,CAAA;QAClH,CAAC;QAED,qCAAqC;QACrC,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACxD,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,mCAAmC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC9I,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,4CAA4C,CAAC,CAAA;IACpF,CAAC;IAED,sBAAsB;IACtB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;IAChE,IAAI,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAA;IAClE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,uDAAuD,CAAC,CAAA;IACnG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,MAAmB;IACzD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAA;IAC9C,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QACjD,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,+BAA+B,CAAC,CAAA;QACpE,OAAM;IACR,CAAC;IAED,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,cAAc,EAAE,CAAC,CAAA;IAElE,uBAAuB;IACvB,MAAM,QAAQ,GAAG;QACf,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,cAAc,CAAC;KAClD,CAAA;IAED,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACjC,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,IAAI,SAAS,CAAA;gBACjD,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC5B,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,wBAAwB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;oBACvF,QAAQ,GAAG,IAAI,CAAA;oBACf,MAAK;gBACP,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,uEAAuE,CAAC,CAAA;IAChH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,MAAmB;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAA;IACxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,4BAA4B,CAAC,CAAA;QAC9D,OAAM;IACR,CAAC;IAED,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,WAAW,EAAE,CAAC,CAAA;IAE5D,mBAAmB;IACnB,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,oCAAoC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QAChG,IAAI,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9D,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,MAAM,CAAC,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,CAAC,CAAA;QAClF,CAAC;aAAM,IAAI,WAAW,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;YAC1F,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,MAAM,EAAE,CAAC,CAAA;QACrD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,MAAM,2BAA2B,WAAW,EAAE,CAAC,CAAA;QAC1F,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,0BAA0B,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,MAAmB;IACvD,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,wCAAwC,CAAC,CAAA;QACvE,OAAM;IACR,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAA;IAChE,IAAI,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,2BAA2B,CAAC,CAAA;IAClE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,wDAAwD,CAAC,CAAA;IAC/F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IAEzB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IAE/B,YAAY;IACZ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,YAAY,EAAE,CAAA;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,mBAAmB;IACnB,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;IAEtB,YAAY;IACZ,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAE9B,SAAS;IACT,MAAM,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAE3B,UAAU;IACV,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAE5B,WAAW;IACX,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAA;IAC9C,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,KAAK,MAAM,CAAC,CAAA;IAEhE,YAAY,EAAE,CAAA;IAEd,YAAY;IACZ,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;IACtD,IAAI,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5B,IAAI,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,SAAS,YAAY;IACnB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAA;QACrH,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAA;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAA;IAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAA;IAE9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,mBAAmB,KAAK,cAAc,MAAM,SAAS,CAAC,CAAA;IACpF,CAAC;SAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,qBAAqB,MAAM,SAAS,CAAC,CAAA;IACnE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,wBAAwB,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC;AAED,KAAK,GAAG,EAAE,CAAA"}
|