codex-workflow-v2 2.0.0-alpha.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/README.md +71 -0
- package/dist/src/artifacts.d.ts +4 -0
- package/dist/src/artifacts.js +106 -0
- package/dist/src/artifacts.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +356 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/contracts.d.ts +313 -0
- package/dist/src/contracts.js +3 -0
- package/dist/src/contracts.js.map +1 -0
- package/dist/src/diagnostics.d.ts +19 -0
- package/dist/src/diagnostics.js +25 -0
- package/dist/src/diagnostics.js.map +1 -0
- package/dist/src/domain/discovery.d.ts +8 -0
- package/dist/src/domain/discovery.js +25 -0
- package/dist/src/domain/discovery.js.map +1 -0
- package/dist/src/domain/validation.d.ts +3 -0
- package/dist/src/domain/validation.js +96 -0
- package/dist/src/domain/validation.js.map +1 -0
- package/dist/src/errors.d.ts +6 -0
- package/dist/src/errors.js +11 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/fs-utils.d.ts +4 -0
- package/dist/src/fs-utils.js +52 -0
- package/dist/src/fs-utils.js.map +1 -0
- package/dist/src/git.d.ts +19 -0
- package/dist/src/git.js +115 -0
- package/dist/src/git.js.map +1 -0
- package/dist/src/graph.d.ts +28 -0
- package/dist/src/graph.js +263 -0
- package/dist/src/graph.js.map +1 -0
- package/dist/src/index.d.ts +12 -0
- package/dist/src/index.js +13 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/memory.d.ts +9 -0
- package/dist/src/memory.js +242 -0
- package/dist/src/memory.js.map +1 -0
- package/dist/src/migration.d.ts +46 -0
- package/dist/src/migration.js +112 -0
- package/dist/src/migration.js.map +1 -0
- package/dist/src/repository.d.ts +12 -0
- package/dist/src/repository.js +69 -0
- package/dist/src/repository.js.map +1 -0
- package/dist/src/reviewer.d.ts +82 -0
- package/dist/src/reviewer.js +184 -0
- package/dist/src/reviewer.js.map +1 -0
- package/dist/src/state/lock.d.ts +13 -0
- package/dist/src/state/lock.js +100 -0
- package/dist/src/state/lock.js.map +1 -0
- package/dist/src/state/store.d.ts +45 -0
- package/dist/src/state/store.js +185 -0
- package/dist/src/state/store.js.map +1 -0
- package/dist/src/ulid.d.ts +2 -0
- package/dist/src/ulid.js +22 -0
- package/dist/src/ulid.js.map +1 -0
- package/dist/src/version.d.ts +2 -0
- package/dist/src/version.js +3 -0
- package/dist/src/version.js.map +1 -0
- package/dist/src/workflow.d.ts +93 -0
- package/dist/src/workflow.js +1276 -0
- package/dist/src/workflow.js.map +1 -0
- package/docs/decisions.md +38 -0
- package/docs/development-flow.md +69 -0
- package/docs/project-memory.md +38 -0
- package/docs/release.md +26 -0
- package/docs/validation-report.md +19 -0
- package/package.json +56 -0
- package/plugins/codex-workflow-gateway/.codex-plugin/plugin.json +25 -0
- package/plugins/codex-workflow-gateway/references/protocol.md +66 -0
- package/plugins/codex-workflow-gateway/scripts/install-or-update.sh +26 -0
- package/plugins/codex-workflow-gateway/skills/codex-workflow-gateway/SKILL.md +72 -0
- package/references/discovery.md +12 -0
- package/references/git-policy.md +7 -0
- package/references/state-machine.md +11 -0
- package/references/validation-and-review.md +13 -0
- package/roles/delivery-coordinator.md +10 -0
- package/roles/independent-reviewer.md +10 -0
- package/roles/scope-lead.md +11 -0
- package/roles/technical-planner.md +10 -0
- package/roles/worker.md +10 -0
- package/schemas/context-envelope.schema.json +58 -0
- package/schemas/discovery.schema.json +19 -0
- package/schemas/graph-binding.schema.json +30 -0
- package/schemas/milestone.schema.json +58 -0
- package/schemas/project-knowledge-map.schema.json +37 -0
- package/schemas/review-result.schema.json +30 -0
- package/schemas/task.schema.json +39 -0
- package/templates/brief.md +21 -0
- package/templates/plan.md +17 -0
- package/templates/result.md +13 -0
package/README.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Codex Workflow V2
|
|
2
|
+
|
|
3
|
+
Self-contained, requirements-first workflow for Codex. This directory can be moved into a
|
|
4
|
+
separate repository: runtime code, tests, templates, schemas, plugin source, and release
|
|
5
|
+
automation do not import anything from the parent V1 project.
|
|
6
|
+
|
|
7
|
+
## What V2 guarantees
|
|
8
|
+
|
|
9
|
+
- exact npm dependency with no `postinstall` mutation;
|
|
10
|
+
- no downstream `.codex`, `.tasks`, `.increments`, manifest, or overlay;
|
|
11
|
+
- repository files are the only durable project knowledge;
|
|
12
|
+
- derived workflow state lives under `$CODEX_HOME/workflow-state/v2`;
|
|
13
|
+
- Discovery precedes Task or Milestone identifiers and branches;
|
|
14
|
+
- Project Knowledge Map approval binds Plans to current canonical files;
|
|
15
|
+
- optional `codebase-memory-mcp` product and workflow graph bindings with explicit fallback;
|
|
16
|
+
- one writer lease and one atomic Git commit per completed Step;
|
|
17
|
+
- explicit execution authorization, independent review, and final acceptance;
|
|
18
|
+
- Milestones aggregate already merged Tasks on the base branch, without an integration branch;
|
|
19
|
+
- V1 transition is snapshot-only and never performs semantic import.
|
|
20
|
+
|
|
21
|
+
V2 is intentionally designed for one user on one machine. Remote coordination and
|
|
22
|
+
cross-machine synchronization are not part of its contract.
|
|
23
|
+
|
|
24
|
+
## Install and verify
|
|
25
|
+
|
|
26
|
+
Node.js 22 or newer is required. Consumers pin the exact package version:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install --save-dev --save-exact codex-workflow-v2@2.0.0-alpha.1
|
|
30
|
+
npx codex-workflow gateway handshake
|
|
31
|
+
npx codex-workflow doctor --repo .
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Maintainers run:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm install
|
|
38
|
+
npm run validate
|
|
39
|
+
npm run pack:check
|
|
40
|
+
npm run smoke:downstream
|
|
41
|
+
npm run plugin:check
|
|
42
|
+
npm run release:check
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Typical Task flow
|
|
46
|
+
|
|
47
|
+
The CLI emits JSON. Every update after creation requires the current state revision.
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
codex-workflow project-memory scan --repo .
|
|
51
|
+
codex-workflow project-memory approve --repo . --expected-revision 1 --file selections.json
|
|
52
|
+
codex-workflow discovery start --repo . --goal "..." --outcome "..." \
|
|
53
|
+
--scope "..." --acceptance "..."
|
|
54
|
+
codex-workflow discovery materialize --repo . --id DISC-... \
|
|
55
|
+
--expected-revision 1 --kind task --title "..."
|
|
56
|
+
codex-workflow task plan-set --repo . --id TASK-... \
|
|
57
|
+
--expected-revision 1 --file plan.json
|
|
58
|
+
codex-workflow task authorize --repo . --id TASK-... \
|
|
59
|
+
--expected-revision 2 --actor user
|
|
60
|
+
codex-workflow task start --repo . --id TASK-... \
|
|
61
|
+
--expected-revision 3 --workspace-owner local
|
|
62
|
+
codex-workflow task run --repo . --id TASK-... --step STEP-001 \
|
|
63
|
+
--expected-revision 4 --owner worker
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`task run` returns the writer token and Worker context. `task review-launch` starts the
|
|
67
|
+
strict read-only reviewer after submission. Use `next` after transitions.
|
|
68
|
+
|
|
69
|
+
See [development flow](docs/development-flow.md), [project memory](docs/project-memory.md),
|
|
70
|
+
[accepted decisions](docs/decisions.md), [validation report](docs/validation-report.md), and
|
|
71
|
+
[release policy](docs/release.md).
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DiscoveryState, TaskPlanInput, TaskState } from './contracts.js';
|
|
2
|
+
export declare function renderBrief(discovery: DiscoveryState, title: string): string;
|
|
3
|
+
export declare function renderPlan(task: TaskState, plan: TaskPlanInput): string;
|
|
4
|
+
export declare function renderResult(task: TaskState, summary: string, limitations: string[]): string;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
function list(values, fallback = 'None.') {
|
|
2
|
+
return values.length > 0 ? values.map((value) => `- ${value}`).join('\n') : fallback;
|
|
3
|
+
}
|
|
4
|
+
export function renderBrief(discovery, title) {
|
|
5
|
+
return [
|
|
6
|
+
`# ${title} Brief`,
|
|
7
|
+
'',
|
|
8
|
+
'## Goal',
|
|
9
|
+
'',
|
|
10
|
+
discovery.goal,
|
|
11
|
+
'',
|
|
12
|
+
'## Observable Outcome',
|
|
13
|
+
'',
|
|
14
|
+
discovery.outcome ?? '',
|
|
15
|
+
'',
|
|
16
|
+
'## Requirements',
|
|
17
|
+
'',
|
|
18
|
+
...discovery.acceptance.map((value, index) => `- REQ-${String(index + 1).padStart(3, '0')}: ${value}`),
|
|
19
|
+
'',
|
|
20
|
+
'## Scope',
|
|
21
|
+
'',
|
|
22
|
+
list(discovery.scope),
|
|
23
|
+
'',
|
|
24
|
+
'## Out of Scope',
|
|
25
|
+
'',
|
|
26
|
+
list(discovery.outOfScope),
|
|
27
|
+
'',
|
|
28
|
+
'## Constraints',
|
|
29
|
+
'',
|
|
30
|
+
list(discovery.constraints),
|
|
31
|
+
'',
|
|
32
|
+
'## Acceptance Scenarios',
|
|
33
|
+
'',
|
|
34
|
+
...discovery.acceptance.map((value, index) => `- AC-${String(index + 1).padStart(3, '0')}: ${value}`),
|
|
35
|
+
'',
|
|
36
|
+
'## Assumptions',
|
|
37
|
+
'',
|
|
38
|
+
list(discovery.assumptions),
|
|
39
|
+
'',
|
|
40
|
+
'## Non-Blocking Unknowns',
|
|
41
|
+
'',
|
|
42
|
+
list(discovery.unknowns.filter((value) => !discovery.blockingUnknowns.includes(value))),
|
|
43
|
+
'',
|
|
44
|
+
].join('\n');
|
|
45
|
+
}
|
|
46
|
+
export function renderPlan(task, plan) {
|
|
47
|
+
const lines = [
|
|
48
|
+
`# ${task.id} Plan`,
|
|
49
|
+
'',
|
|
50
|
+
'## Objective',
|
|
51
|
+
'',
|
|
52
|
+
plan.objective,
|
|
53
|
+
'',
|
|
54
|
+
'## Requirements',
|
|
55
|
+
'',
|
|
56
|
+
...plan.requirements.map((value) => `- ${value}`),
|
|
57
|
+
'',
|
|
58
|
+
'## Acceptance',
|
|
59
|
+
'',
|
|
60
|
+
...plan.acceptance.map((value) => `- ${value}`),
|
|
61
|
+
'',
|
|
62
|
+
'## Risks',
|
|
63
|
+
'',
|
|
64
|
+
list(plan.risks),
|
|
65
|
+
'',
|
|
66
|
+
'## Project Knowledge Impact',
|
|
67
|
+
'',
|
|
68
|
+
`- Impact: ${plan.knowledgeImpact}`,
|
|
69
|
+
`- Reason: ${plan.knowledgeImpactReason}`,
|
|
70
|
+
`- Knowledge map: revision ${plan.knowledgeMapRevision}, hash ${plan.knowledgeMapHash}`,
|
|
71
|
+
`- Graph use: ${plan.graphUse}`,
|
|
72
|
+
...plan.knowledgeTargets.map((target) => `- ${target.category}: ${target.path} — ${target.reason} (${target.requirementIds.join(', ')})`),
|
|
73
|
+
'',
|
|
74
|
+
'## Steps',
|
|
75
|
+
'',
|
|
76
|
+
];
|
|
77
|
+
for (const step of plan.steps) {
|
|
78
|
+
lines.push(`### ${step.id}: ${step.title}`, '', step.objective, '', `- Requirements: ${step.requirements.join(', ')}`, `- Dependencies: ${step.dependencies.join(', ') || 'none'}`, `- Expected outputs: ${step.expectedOutputs.join(', ')}`, `- Allowed writes: ${step.allowedWrites.join(', ')}`, `- Forbidden scope: ${step.forbiddenScope.join(', ') || 'none'}`, `- Checks: ${step.checks.join(' ; ') || 'UNVERIFIED'}`, '');
|
|
79
|
+
}
|
|
80
|
+
return lines.join('\n');
|
|
81
|
+
}
|
|
82
|
+
export function renderResult(task, summary, limitations) {
|
|
83
|
+
return [
|
|
84
|
+
`# ${task.id} Result`,
|
|
85
|
+
'',
|
|
86
|
+
'## Summary',
|
|
87
|
+
'',
|
|
88
|
+
summary,
|
|
89
|
+
'',
|
|
90
|
+
'## Completed Steps',
|
|
91
|
+
'',
|
|
92
|
+
...task.steps.filter((step) => step.status === 'completed').map((step) => `- ${step.id}: ${step.title}`),
|
|
93
|
+
'',
|
|
94
|
+
'## Commits',
|
|
95
|
+
'',
|
|
96
|
+
...task.steps
|
|
97
|
+
.filter((step) => step.evidence)
|
|
98
|
+
.map((step) => `- ${step.id}: ${step.evidence?.commitSha ?? 'missing'}`),
|
|
99
|
+
'',
|
|
100
|
+
'## Limitations',
|
|
101
|
+
'',
|
|
102
|
+
list(limitations),
|
|
103
|
+
'',
|
|
104
|
+
].join('\n');
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/artifacts.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli.js
ADDED
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import process from 'node:process';
|
|
5
|
+
import { integrationDiagnostics } from './diagnostics.js';
|
|
6
|
+
import { WorkflowError } from './errors.js';
|
|
7
|
+
import { prepareGraphView } from './graph.js';
|
|
8
|
+
import { migrateState } from './migration.js';
|
|
9
|
+
import { changedFiles, currentBranch, isClean } from './repository.js';
|
|
10
|
+
import { launchStrictReviewer } from './reviewer.js';
|
|
11
|
+
import { WorkflowService } from './workflow.js';
|
|
12
|
+
import { PACKAGE_NAME, PACKAGE_VERSION } from './version.js';
|
|
13
|
+
import { PROTOCOL_VERSION, STATE_SCHEMA_VERSION } from './contracts.js';
|
|
14
|
+
function parseArguments(argv) {
|
|
15
|
+
const positionals = [];
|
|
16
|
+
const options = new Map();
|
|
17
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
18
|
+
const argument = argv[index];
|
|
19
|
+
if (!argument)
|
|
20
|
+
continue;
|
|
21
|
+
if (!argument.startsWith('--')) {
|
|
22
|
+
positionals.push(argument);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const equals = argument.indexOf('=');
|
|
26
|
+
const name = argument.slice(2, equals === -1 ? undefined : equals);
|
|
27
|
+
const inlineValue = equals === -1 ? null : argument.slice(equals + 1);
|
|
28
|
+
const next = argv[index + 1];
|
|
29
|
+
const value = inlineValue ?? (next && !next.startsWith('--') ? next : 'true');
|
|
30
|
+
if (inlineValue === null && next && !next.startsWith('--'))
|
|
31
|
+
index += 1;
|
|
32
|
+
options.set(name, [...(options.get(name) ?? []), value]);
|
|
33
|
+
}
|
|
34
|
+
return { positionals, options };
|
|
35
|
+
}
|
|
36
|
+
function option(args, name) {
|
|
37
|
+
return args.options.get(name)?.at(-1);
|
|
38
|
+
}
|
|
39
|
+
function required(args, name) {
|
|
40
|
+
const value = option(args, name)?.trim();
|
|
41
|
+
if (!value)
|
|
42
|
+
throw new WorkflowError('INVALID_ARGUMENT', `Missing required option --${name}.`);
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
function repeated(args, name) {
|
|
46
|
+
return (args.options.get(name) ?? []).map((value) => value.trim()).filter(Boolean);
|
|
47
|
+
}
|
|
48
|
+
function revision(args) {
|
|
49
|
+
const value = Number(required(args, 'expected-revision'));
|
|
50
|
+
if (!Number.isInteger(value) || value < 1) {
|
|
51
|
+
throw new WorkflowError('INVALID_ARGUMENT', '--expected-revision must be a positive integer.');
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
function optionalRevision(args) {
|
|
56
|
+
const raw = option(args, 'expected-revision');
|
|
57
|
+
if (raw === undefined)
|
|
58
|
+
return null;
|
|
59
|
+
const value = Number(raw);
|
|
60
|
+
if (!Number.isInteger(value) || value < 1) {
|
|
61
|
+
throw new WorkflowError('INVALID_ARGUMENT', '--expected-revision must be a positive integer.');
|
|
62
|
+
}
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
function graphKind(args) {
|
|
66
|
+
const value = required(args, 'kind');
|
|
67
|
+
if (value !== 'product' && value !== 'workflow') {
|
|
68
|
+
throw new WorkflowError('INVALID_ARGUMENT', '--kind must be product or workflow.');
|
|
69
|
+
}
|
|
70
|
+
return value;
|
|
71
|
+
}
|
|
72
|
+
function graphMode(args) {
|
|
73
|
+
const value = option(args, 'mode') ?? 'moderate';
|
|
74
|
+
if (value !== 'moderate' && value !== 'full') {
|
|
75
|
+
throw new WorkflowError('INVALID_ARGUMENT', '--mode must be moderate or full.');
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
function jsonFile(args, optionName = 'file') {
|
|
80
|
+
const file = path.resolve(required(args, optionName));
|
|
81
|
+
try {
|
|
82
|
+
return JSON.parse(readFileSync(file, 'utf8'));
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
throw new WorkflowError('INVALID_ARGUMENT', `Cannot read JSON from ${file}.`, {
|
|
86
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function stdinJson() {
|
|
91
|
+
try {
|
|
92
|
+
return JSON.parse(readFileSync(0, 'utf8'));
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
throw new WorkflowError('INVALID_ARGUMENT', 'Cannot read JSON from stdin.', {
|
|
96
|
+
cause: error instanceof Error ? error.message : String(error),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function repository(args) {
|
|
101
|
+
return path.resolve(option(args, 'repo') ?? '.');
|
|
102
|
+
}
|
|
103
|
+
async function dispatch(args) {
|
|
104
|
+
const [noun, action] = args.positionals;
|
|
105
|
+
const repo = repository(args);
|
|
106
|
+
if (noun === 'gateway' && action === 'handshake') {
|
|
107
|
+
return {
|
|
108
|
+
packageName: PACKAGE_NAME,
|
|
109
|
+
packageVersion: PACKAGE_VERSION,
|
|
110
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
111
|
+
stateSchemaVersion: STATE_SCHEMA_VERSION,
|
|
112
|
+
capabilities: [
|
|
113
|
+
'project-memory-v1',
|
|
114
|
+
'graph-binding-v1',
|
|
115
|
+
'local-state-v1',
|
|
116
|
+
'milestone-lifecycle-v1',
|
|
117
|
+
'strict-reviewer-v1',
|
|
118
|
+
'legacy-snapshot-v1',
|
|
119
|
+
],
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const workflow = new WorkflowService();
|
|
123
|
+
if (noun === 'doctor') {
|
|
124
|
+
const context = workflow.context(repo);
|
|
125
|
+
const integration = integrationDiagnostics(context.identity.repositoryRoot);
|
|
126
|
+
const nodeSupported = Number(process.versions.node.split('.')[0]) >= 22;
|
|
127
|
+
return {
|
|
128
|
+
ok: nodeSupported && integration.localDependency.current,
|
|
129
|
+
node: process.versions.node,
|
|
130
|
+
requiredNode: '>=22',
|
|
131
|
+
repositoryRoot: context.identity.repositoryRoot,
|
|
132
|
+
projectId: context.identity.projectId,
|
|
133
|
+
stateRoot: context.store.root,
|
|
134
|
+
branch: currentBranch(context.identity.repositoryRoot),
|
|
135
|
+
clean: isClean(context.identity.repositoryRoot),
|
|
136
|
+
changedFiles: changedFiles(context.identity.repositoryRoot),
|
|
137
|
+
integration,
|
|
138
|
+
limitations: [
|
|
139
|
+
'CLI diagnostics cannot prove that Codex enforced a role, model, sandbox, or read-only reviewer.',
|
|
140
|
+
'MCP refresh execution is performed by the personal gateway; the core verifies returned binding evidence.',
|
|
141
|
+
],
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
if (noun === 'status')
|
|
145
|
+
return workflow.status(repo);
|
|
146
|
+
if (noun === 'next')
|
|
147
|
+
return workflow.next(repo);
|
|
148
|
+
if (noun === 'project-memory' && action === 'scan')
|
|
149
|
+
return workflow.scanKnowledgeMap(repo);
|
|
150
|
+
if (noun === 'project-memory' && action === 'show')
|
|
151
|
+
return workflow.showKnowledgeMap(repo);
|
|
152
|
+
if (noun === 'project-memory' && action === 'status')
|
|
153
|
+
return workflow.knowledgeMapStatus(repo);
|
|
154
|
+
if (noun === 'project-memory' && action === 'approve') {
|
|
155
|
+
const input = jsonFile(args);
|
|
156
|
+
if (!Array.isArray(input.selections)) {
|
|
157
|
+
throw new WorkflowError('INVALID_ARGUMENT', 'Knowledge approval file requires a selections array.');
|
|
158
|
+
}
|
|
159
|
+
return workflow.approveKnowledgeMap(repo, revision(args), input.selections, option(args, 'actor') ?? 'user');
|
|
160
|
+
}
|
|
161
|
+
if (noun === 'project-memory' && action === 'reconcile') {
|
|
162
|
+
return workflow.reconcileKnowledgeMap(repo, revision(args));
|
|
163
|
+
}
|
|
164
|
+
if (noun === 'state' && action === 'migrate') {
|
|
165
|
+
const dryRun = option(args, 'dry-run') === 'true';
|
|
166
|
+
const snapshot = option(args, 'snapshot') === 'true';
|
|
167
|
+
if (dryRun === snapshot) {
|
|
168
|
+
throw new WorkflowError('INVALID_ARGUMENT', 'state migrate requires exactly one of --dry-run or --snapshot.');
|
|
169
|
+
}
|
|
170
|
+
return migrateState(repo, workflow.store, dryRun, snapshot);
|
|
171
|
+
}
|
|
172
|
+
if (noun === 'graph' && action === 'prepare') {
|
|
173
|
+
return prepareGraphView(option(args, 'target') ? path.resolve(required(args, 'target')) : undefined);
|
|
174
|
+
}
|
|
175
|
+
if (noun === 'graph' && action === 'status') {
|
|
176
|
+
return workflow.graphStatus(repo, graphKind(args), graphMode(args));
|
|
177
|
+
}
|
|
178
|
+
if (noun === 'graph' && action === 'refresh-request') {
|
|
179
|
+
return workflow.graphRefreshRequest(repo, graphKind(args), graphMode(args));
|
|
180
|
+
}
|
|
181
|
+
if (noun === 'graph' && action === 'bind') {
|
|
182
|
+
const input = stdinJson();
|
|
183
|
+
return workflow.bindGraph(repo, optionalRevision(args), input.request, input.evidence);
|
|
184
|
+
}
|
|
185
|
+
if (noun === 'graph' && action === 'fallback') {
|
|
186
|
+
return workflow.recordGraphFallback(repo, graphKind(args), graphMode(args), optionalRevision(args), required(args, 'reason'));
|
|
187
|
+
}
|
|
188
|
+
if (noun === 'context') {
|
|
189
|
+
const role = required(args, 'role');
|
|
190
|
+
if (role === 'worker' || role === 'scope-lead') {
|
|
191
|
+
throw new WorkflowError('INVALID_ARGUMENT', role === 'worker'
|
|
192
|
+
? 'Worker context is issued by task run together with a writer lease.'
|
|
193
|
+
: 'Scope Lead works on Discovery before Task materialization.');
|
|
194
|
+
}
|
|
195
|
+
if (!['technical-planner', 'delivery-coordinator', 'independent-reviewer'].includes(role)) {
|
|
196
|
+
throw new WorkflowError('INVALID_ARGUMENT', 'Unknown context role.');
|
|
197
|
+
}
|
|
198
|
+
return workflow.taskContext(repo, required(args, 'task'), role);
|
|
199
|
+
}
|
|
200
|
+
if (noun === 'discovery' && action === 'start') {
|
|
201
|
+
const outcome = option(args, 'outcome')?.trim();
|
|
202
|
+
const input = {
|
|
203
|
+
goal: required(args, 'goal'),
|
|
204
|
+
...(outcome ? { outcome } : {}),
|
|
205
|
+
facts: repeated(args, 'fact'),
|
|
206
|
+
decisions: repeated(args, 'decision'),
|
|
207
|
+
assumptions: repeated(args, 'assumption'),
|
|
208
|
+
unknowns: repeated(args, 'unknown'),
|
|
209
|
+
blockingUnknowns: repeated(args, 'blocking-unknown'),
|
|
210
|
+
scope: repeated(args, 'scope'),
|
|
211
|
+
outOfScope: repeated(args, 'out-of-scope'),
|
|
212
|
+
constraints: repeated(args, 'constraint'),
|
|
213
|
+
acceptance: repeated(args, 'acceptance'),
|
|
214
|
+
};
|
|
215
|
+
return workflow.startDiscovery(repo, input);
|
|
216
|
+
}
|
|
217
|
+
if (noun === 'discovery' && action === 'update') {
|
|
218
|
+
const goal = option(args, 'goal')?.trim();
|
|
219
|
+
const outcome = option(args, 'outcome')?.trim();
|
|
220
|
+
const patch = {
|
|
221
|
+
...(goal ? { goal } : {}),
|
|
222
|
+
...(outcome ? { outcome } : {}),
|
|
223
|
+
facts: repeated(args, 'fact'),
|
|
224
|
+
decisions: repeated(args, 'decision'),
|
|
225
|
+
assumptions: repeated(args, 'assumption'),
|
|
226
|
+
unknowns: repeated(args, 'unknown'),
|
|
227
|
+
blockingUnknowns: repeated(args, 'blocking-unknown'),
|
|
228
|
+
resolveUnknowns: repeated(args, 'resolve-unknown'),
|
|
229
|
+
scope: repeated(args, 'scope'),
|
|
230
|
+
outOfScope: repeated(args, 'out-of-scope'),
|
|
231
|
+
constraints: repeated(args, 'constraint'),
|
|
232
|
+
acceptance: repeated(args, 'acceptance'),
|
|
233
|
+
};
|
|
234
|
+
return workflow.updateDiscovery(repo, required(args, 'id'), revision(args), patch);
|
|
235
|
+
}
|
|
236
|
+
if (noun === 'discovery' && action === 'show') {
|
|
237
|
+
const context = workflow.context(repo);
|
|
238
|
+
return context.store.readDiscovery(context.identity.projectId, required(args, 'id'));
|
|
239
|
+
}
|
|
240
|
+
if (noun === 'discovery' && action === 'materialize') {
|
|
241
|
+
const kind = option(args, 'kind') ?? 'task';
|
|
242
|
+
if (kind === 'task') {
|
|
243
|
+
return workflow.materializeTask(repo, required(args, 'id'), revision(args), required(args, 'title'), option(args, 'base') ?? 'main', option(args, 'milestone') ?? null);
|
|
244
|
+
}
|
|
245
|
+
if (kind === 'milestone') {
|
|
246
|
+
return workflow.materializeMilestone(repo, required(args, 'id'), revision(args), required(args, 'title'), option(args, 'base') ?? 'main');
|
|
247
|
+
}
|
|
248
|
+
throw new WorkflowError('INVALID_ARGUMENT', '--kind must be task or milestone.');
|
|
249
|
+
}
|
|
250
|
+
if (noun === 'task' && action === 'show') {
|
|
251
|
+
const context = workflow.context(repo);
|
|
252
|
+
return context.store.readTask(context.identity.projectId, required(args, 'id'));
|
|
253
|
+
}
|
|
254
|
+
if (noun === 'task' && action === 'plan-set') {
|
|
255
|
+
return workflow.setTaskPlan(repo, required(args, 'id'), revision(args), jsonFile(args));
|
|
256
|
+
}
|
|
257
|
+
if (noun === 'task' && action === 'authorize') {
|
|
258
|
+
return workflow.authorizeTask(repo, required(args, 'id'), revision(args), option(args, 'actor') ?? 'user', option(args, 'reason') ?? '');
|
|
259
|
+
}
|
|
260
|
+
if (noun === 'task' && action === 'start') {
|
|
261
|
+
const owner = required(args, 'workspace-owner');
|
|
262
|
+
if (owner !== 'local' && owner !== 'external') {
|
|
263
|
+
throw new WorkflowError('INVALID_ARGUMENT', '--workspace-owner must be local or external.');
|
|
264
|
+
}
|
|
265
|
+
return workflow.startTask(repo, required(args, 'id'), revision(args), owner);
|
|
266
|
+
}
|
|
267
|
+
if (noun === 'task' && action === 'run') {
|
|
268
|
+
return workflow.runStep(repo, required(args, 'id'), required(args, 'step'), revision(args), option(args, 'owner') ?? 'worker', option(args, 'writer-token') ?? null);
|
|
269
|
+
}
|
|
270
|
+
if (noun === 'task' && action === 'step-complete') {
|
|
271
|
+
return workflow.completeStep(repo, required(args, 'id'), required(args, 'step'), revision(args), required(args, 'writer-token'), repeated(args, 'note'));
|
|
272
|
+
}
|
|
273
|
+
if (noun === 'task' && action === 'submit') {
|
|
274
|
+
return workflow.submitTask(repo, required(args, 'id'), revision(args), required(args, 'writer-token'));
|
|
275
|
+
}
|
|
276
|
+
if (noun === 'task' && action === 'review-record') {
|
|
277
|
+
const review = jsonFile(args);
|
|
278
|
+
return workflow.recordReview(repo, required(args, 'id'), revision(args), review);
|
|
279
|
+
}
|
|
280
|
+
if (noun === 'task' && action === 'review-launch') {
|
|
281
|
+
const context = workflow.context(repo);
|
|
282
|
+
const id = required(args, 'id');
|
|
283
|
+
const expectedRevision = revision(args);
|
|
284
|
+
const task = context.store.readTask(context.identity.projectId, id);
|
|
285
|
+
if (task.revision !== expectedRevision) {
|
|
286
|
+
throw new WorkflowError('STATE_CONFLICT', `State revision conflict for ${id}`, {
|
|
287
|
+
expectedRevision,
|
|
288
|
+
actualRevision: task.revision,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
const envelope = workflow.taskContext(repo, id, 'independent-reviewer');
|
|
292
|
+
const launch = launchStrictReviewer(context.identity.repositoryRoot, task, context.store.taskRoot(task.projectId, task.id), envelope);
|
|
293
|
+
const saved = workflow.recordReview(repo, id, expectedRevision, launch.review);
|
|
294
|
+
return { launch, task: saved };
|
|
295
|
+
}
|
|
296
|
+
if (noun === 'task' && action === 'result-set') {
|
|
297
|
+
return workflow.setTaskResult(repo, required(args, 'id'), revision(args), required(args, 'summary'), repeated(args, 'limitation'));
|
|
298
|
+
}
|
|
299
|
+
if (noun === 'task' && action === 'accept') {
|
|
300
|
+
return workflow.acceptTask(repo, required(args, 'id'), revision(args), option(args, 'actor') ?? 'user');
|
|
301
|
+
}
|
|
302
|
+
if (noun === 'task' && action === 'sync-base') {
|
|
303
|
+
return workflow.syncTaskBase(repo, required(args, 'id'), revision(args));
|
|
304
|
+
}
|
|
305
|
+
if (noun === 'task' && action === 'merge') {
|
|
306
|
+
return workflow.mergeTask(repo, required(args, 'id'), revision(args), required(args, 'writer-token'));
|
|
307
|
+
}
|
|
308
|
+
if (noun === 'task' && action === 'merge-confirm') {
|
|
309
|
+
return workflow.confirmExternalMerge(repo, required(args, 'id'), revision(args), required(args, 'writer-token'));
|
|
310
|
+
}
|
|
311
|
+
if (noun === 'milestone' && action === 'show') {
|
|
312
|
+
const context = workflow.context(repo);
|
|
313
|
+
return context.store.readMilestone(context.identity.projectId, required(args, 'id'));
|
|
314
|
+
}
|
|
315
|
+
if (noun === 'milestone' && action === 'plan-set') {
|
|
316
|
+
return workflow.setMilestonePlan(repo, required(args, 'id'), revision(args), jsonFile(args));
|
|
317
|
+
}
|
|
318
|
+
if (noun === 'milestone' && action === 'authorize') {
|
|
319
|
+
return workflow.authorizeMilestone(repo, required(args, 'id'), revision(args), option(args, 'actor') ?? 'user', option(args, 'reason') ?? '');
|
|
320
|
+
}
|
|
321
|
+
if (noun === 'milestone' && action === 'validate') {
|
|
322
|
+
return workflow.validateMilestone(repo, required(args, 'id'), revision(args));
|
|
323
|
+
}
|
|
324
|
+
if (noun === 'milestone' && action === 'accept') {
|
|
325
|
+
return workflow.acceptMilestone(repo, required(args, 'id'), revision(args), option(args, 'actor') ?? 'user');
|
|
326
|
+
}
|
|
327
|
+
if (noun === 'milestone' && action === 'cancel') {
|
|
328
|
+
return workflow.cancelMilestone(repo, required(args, 'id'), revision(args), required(args, 'reason'));
|
|
329
|
+
}
|
|
330
|
+
if (noun === 'locks' && (action === 'inspect' || action === 'repair')) {
|
|
331
|
+
const context = workflow.context(repo);
|
|
332
|
+
const id = required(args, 'id');
|
|
333
|
+
return action === 'inspect' ? context.locks.inspect(id) : context.locks.repairStale(id);
|
|
334
|
+
}
|
|
335
|
+
throw new WorkflowError('INVALID_ARGUMENT', 'Unknown command.', {
|
|
336
|
+
command: args.positionals.join(' '),
|
|
337
|
+
hint: 'Use doctor, status, next, project-memory <action>, discovery <action>, task <action>, milestone <action>, or locks <action>.',
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
async function main() {
|
|
341
|
+
try {
|
|
342
|
+
const value = await dispatch(parseArguments(process.argv.slice(2)));
|
|
343
|
+
process.stdout.write(`${JSON.stringify({ ok: true, value }, null, 2)}\n`);
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
if (error instanceof WorkflowError) {
|
|
347
|
+
process.stderr.write(`${JSON.stringify({ ok: false, error: { code: error.code, message: error.message, details: error.details } }, null, 2)}\n`);
|
|
348
|
+
process.exitCode = 2;
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
process.stderr.write(`${JSON.stringify({ ok: false, error: { code: 'UNEXPECTED', message: error instanceof Error ? error.message : String(error) } }, null, 2)}\n`);
|
|
352
|
+
process.exitCode = 1;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
await main();
|
|
356
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AAYnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,eAAe,EAA4C,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAOxE,SAAS,cAAc,CAAC,IAAc;IACpC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC9E,IAAI,WAAW,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,MAAM,CAAC,IAAqB,EAAE,IAAY;IACjD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,QAAQ,CAAC,IAAqB,EAAE,IAAY;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,6BAA6B,IAAI,GAAG,CAAC,CAAC;IAC9F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,IAAqB,EAAE,IAAY;IACnD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,QAAQ,CAAC,IAAqB;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,iDAAiD,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAqB;IAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC9C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,iDAAiD,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,IAAqB;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QAChD,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,qCAAqC,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,IAAqB;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC;IACjD,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,kCAAkC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAI,IAAqB,EAAE,UAAU,GAAG,MAAM;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAM,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,yBAAyB,IAAI,GAAG,EAAE;YAC5E,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAM,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,8BAA8B,EAAE;YAC1E,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAqB;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAqB;IAC3C,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;IACxC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE9B,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QACjD,OAAO;YACL,WAAW,EAAE,YAAY;YACzB,cAAc,EAAE,eAAe;YAC/B,eAAe,EAAE,gBAAgB;YACjC,kBAAkB,EAAE,oBAAoB;YACxC,YAAY,EAAE;gBACZ,mBAAmB;gBACnB,kBAAkB;gBAClB,gBAAgB;gBAChB,wBAAwB;gBACxB,oBAAoB;gBACpB,oBAAoB;aACrB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IAEvC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC5E,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxE,OAAO;YACL,EAAE,EAAE,aAAa,IAAI,WAAW,CAAC,eAAe,CAAC,OAAO;YACxD,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;YAC3B,YAAY,EAAE,MAAM;YACpB,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,cAAc;YAC/C,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS;YACrC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;YAC7B,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YACtD,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC/C,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC3D,WAAW;YACX,WAAW,EAAE;gBACX,iGAAiG;gBACjG,0GAA0G;aAC3G;SACF,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,IAAI,KAAK,gBAAgB,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3F,IAAI,IAAI,KAAK,gBAAgB,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3F,IAAI,IAAI,KAAK,gBAAgB,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC/F,IAAI,IAAI,KAAK,gBAAgB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,QAAQ,CAAuC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,sDAAsD,CAAC,CAAC;QACtG,CAAC;QACD,OAAO,QAAQ,CAAC,mBAAmB,CACjC,IAAI,EACJ,QAAQ,CAAC,IAAI,CAAC,EACd,KAAK,CAAC,UAAU,EAChB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAChC,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,gBAAgB,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QACxD,OAAO,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,MAAM,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,MAAM,CAAC;QACrD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,gEAAgE,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7C,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,MAAM,KAAK,iBAAiB,EAAE,CAAC;QACrD,OAAO,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,SAAS,EAAoE,CAAC;QAC5F,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC9C,OAAO,QAAQ,CAAC,mBAAmB,CACjC,IAAI,EACJ,SAAS,CAAC,IAAI,CAAC,EACf,SAAS,CAAC,IAAI,CAAC,EACf,gBAAgB,CAAC,IAAI,CAAC,EACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CACzB,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/C,MAAM,IAAI,aAAa,CACrB,kBAAkB,EAClB,IAAI,KAAK,QAAQ;gBACf,CAAC,CAAC,oEAAoE;gBACtE,CAAC,CAAC,4DAA4D,CACjE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,sBAAsB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1F,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,QAAQ,CAAC,WAAW,CACzB,IAAI,EACJ,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EACtB,IAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;QAChD,MAAM,KAAK,GAAmB;YAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAC5B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAC7B,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;YACrC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;YACzC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;YACnC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;YACpD,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9B,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;YAC1C,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;YACzC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;SACzC,CAAC;QACF,OAAO,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;QAChD,MAAM,KAAK,GAAmB;YAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAC7B,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;YACrC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;YACzC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;YACnC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;YACpD,eAAe,EAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;YAClD,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9B,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;YAC1C,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;YACzC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;SACzC,CAAC;QACF,OAAO,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC;QAC5C,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,QAAQ,CAAC,eAAe,CAC7B,IAAI,EACJ,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EACpB,QAAQ,CAAC,IAAI,CAAC,EACd,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EACvB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,EAC9B,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,CAClC,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC,oBAAoB,CAClC,IAAI,EACJ,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EACpB,QAAQ,CAAC,IAAI,CAAC,EACd,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EACvB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAC/B,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,mCAAmC,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC7C,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAgB,IAAI,CAAC,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC9C,OAAO,QAAQ,CAAC,aAAa,CAC3B,IAAI,EACJ,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EACpB,QAAQ,CAAC,IAAI,CAAC,EACd,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,EAC/B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAC7B,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YAC9C,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,8CAA8C,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAuB,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC,OAAO,CACrB,IAAI,EACJ,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EACtB,QAAQ,CAAC,IAAI,CAAC,EACd,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,QAAQ,EACjC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,IAAI,CACrC,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC,YAAY,CAC1B,IAAI,EACJ,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EACtB,QAAQ,CAAC,IAAI,CAAC,EACd,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,EAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CACvB,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,QAAQ,CAAc,IAAI,CAAC,CAAC;QAC3C,OAAO,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YACvC,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,+BAA+B,EAAE,EAAE,EAAE;gBAC7E,gBAAgB;gBAChB,cAAc,EAAE,IAAI,CAAC,QAAQ;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,sBAAsB,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,oBAAoB,CACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,EAC/B,IAAI,EACJ,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,EAC/C,QAAQ,CACT,CAAC;QACF,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/E,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC/C,OAAO,QAAQ,CAAC,aAAa,CAC3B,IAAI,EACJ,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EACpB,QAAQ,CAAC,IAAI,CAAC,EACd,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EACzB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAC7B,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,CAAC;IAC1G,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC9C,OAAO,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QAC1C,OAAO,QAAQ,CAAC,SAAS,CACvB,IAAI,EACJ,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EACpB,QAAQ,CAAC,IAAI,CAAC,EACd,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAC/B,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC,oBAAoB,CAClC,IAAI,EACJ,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EACpB,QAAQ,CAAC,IAAI,CAAC,EACd,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,CAC/B,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAqB,IAAI,CAAC,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QACnD,OAAO,QAAQ,CAAC,kBAAkB,CAChC,IAAI,EACJ,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EACpB,QAAQ,CAAC,IAAI,CAAC,EACd,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,EAC/B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAC7B,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxG,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,kBAAkB,EAAE;QAC9D,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QACnC,IAAI,EAAE,8HAA8H;KACrI,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;YACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAC3H,CAAC;YACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAC9I,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}
|