gooseworks 0.4.2 → 0.4.5-dev.15.facf60fb
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 +84 -22
- package/dist/agents/staging.d.ts +38 -0
- package/dist/agents/staging.d.ts.map +1 -0
- package/dist/agents/staging.js +309 -0
- package/dist/agents/staging.js.map +1 -0
- package/dist/auth/credentials.d.ts +1 -0
- package/dist/auth/credentials.d.ts.map +1 -1
- package/dist/auth/credentials.js +26 -8
- package/dist/auth/credentials.js.map +1 -1
- package/dist/auth/device-flow.d.ts +79 -0
- package/dist/auth/device-flow.d.ts.map +1 -0
- package/dist/auth/device-flow.js +411 -0
- package/dist/auth/device-flow.js.map +1 -0
- package/dist/auth/login-mode.d.ts +25 -0
- package/dist/auth/login-mode.d.ts.map +1 -0
- package/dist/auth/login-mode.js +87 -0
- package/dist/auth/login-mode.js.map +1 -0
- package/dist/auth/oauth-server.d.ts +2 -2
- package/dist/auth/oauth-server.d.ts.map +1 -1
- package/dist/auth/oauth-server.js +28 -5
- package/dist/auth/oauth-server.js.map +1 -1
- package/dist/auth/paste-login.d.ts +27 -0
- package/dist/auth/paste-login.d.ts.map +1 -0
- package/dist/auth/paste-login.js +203 -0
- package/dist/auth/paste-login.js.map +1 -0
- package/dist/commands/doctor.d.ts +29 -5
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +116 -63
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/fetch.d.ts +1 -0
- package/dist/commands/fetch.d.ts.map +1 -1
- package/dist/commands/fetch.js +64 -29
- package/dist/commands/fetch.js.map +1 -1
- package/dist/commands/formats.js +2 -2
- package/dist/commands/formats.js.map +1 -1
- package/dist/commands/graphics/publish-flow.js +1 -1
- package/dist/commands/graphics/publish-flow.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +126 -26
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/launch.d.ts +3 -0
- package/dist/commands/launch.d.ts.map +1 -0
- package/dist/commands/launch.js +35 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/login.d.ts +21 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +112 -30
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +7 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/skills.d.ts +50 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +160 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/styles.js +2 -2
- package/dist/commands/styles.js.map +1 -1
- package/dist/commands/tool.d.ts +17 -0
- package/dist/commands/tool.d.ts.map +1 -0
- package/dist/commands/tool.js +239 -0
- package/dist/commands/tool.js.map +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +37 -6
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/video-local.d.ts +9 -0
- package/dist/commands/video-local.d.ts.map +1 -0
- package/dist/commands/video-local.js +83 -0
- package/dist/commands/video-local.js.map +1 -0
- package/dist/commands/video-save.d.ts +3 -0
- package/dist/commands/video-save.d.ts.map +1 -0
- package/dist/commands/video-save.js +83 -0
- package/dist/commands/video-save.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -3
- package/dist/config.js.map +1 -1
- package/dist/environment.d.ts +9 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +105 -0
- package/dist/environment.js.map +1 -0
- package/dist/index.js +12 -38
- package/dist/index.js.map +1 -1
- package/dist/lib/graphics-cache.d.ts.map +1 -1
- package/dist/lib/graphics-cache.js +2 -2
- package/dist/lib/graphics-cache.js.map +1 -1
- package/dist/lib/mcp-client.d.ts +53 -0
- package/dist/lib/mcp-client.d.ts.map +1 -0
- package/dist/lib/mcp-client.js +196 -0
- package/dist/lib/mcp-client.js.map +1 -0
- package/dist/lib/video-local-captions.d.ts +83 -0
- package/dist/lib/video-local-captions.d.ts.map +1 -0
- package/dist/lib/video-local-captions.js +261 -0
- package/dist/lib/video-local-captions.js.map +1 -0
- package/dist/lib/video-local-runtime.d.ts +8 -0
- package/dist/lib/video-local-runtime.d.ts.map +1 -0
- package/dist/lib/video-local-runtime.js +201 -0
- package/dist/lib/video-local-runtime.js.map +1 -0
- package/dist/lib/video-save-mcp.d.ts +9 -0
- package/dist/lib/video-save-mcp.d.ts.map +1 -0
- package/dist/lib/video-save-mcp.js +162 -0
- package/dist/lib/video-save-mcp.js.map +1 -0
- package/dist/lib/video-save.d.ts +77 -0
- package/dist/lib/video-save.d.ts.map +1 -0
- package/dist/lib/video-save.js +440 -0
- package/dist/lib/video-save.js.map +1 -0
- package/dist/program.d.ts +2 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +56 -0
- package/dist/program.js.map +1 -0
- package/dist/skills/custom-video-skill.d.ts +3 -0
- package/dist/skills/custom-video-skill.d.ts.map +1 -0
- package/dist/skills/custom-video-skill.js +6 -0
- package/dist/skills/custom-video-skill.js.map +1 -0
- package/dist/skills/installer.d.ts +12 -6
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +82 -38
- package/dist/skills/installer.js.map +1 -1
- package/dist/skills/master-skill.d.ts +34 -28
- package/dist/skills/master-skill.d.ts.map +1 -1
- package/dist/skills/master-skill.js +2264 -858
- package/dist/skills/master-skill.js.map +1 -1
- package/dist/skills/package-freshness.d.ts +16 -0
- package/dist/skills/package-freshness.d.ts.map +1 -0
- package/dist/skills/package-freshness.js +36 -0
- package/dist/skills/package-freshness.js.map +1 -0
- package/dist/skills/releases.d.ts +12 -0
- package/dist/skills/releases.d.ts.map +1 -0
- package/dist/skills/releases.js +155 -0
- package/dist/skills/releases.js.map +1 -0
- package/dist/skills/routes.d.ts.map +1 -1
- package/dist/skills/routes.js +12 -6
- package/dist/skills/routes.js.map +1 -1
- package/dist/skills/staging-content.d.ts +3 -0
- package/dist/skills/staging-content.d.ts.map +1 -0
- package/dist/skills/staging-content.js +12 -0
- package/dist/skills/staging-content.js.map +1 -0
- package/dist/utils/browser-preflight.d.ts +29 -0
- package/dist/utils/browser-preflight.d.ts.map +1 -0
- package/dist/utils/browser-preflight.js +338 -0
- package/dist/utils/browser-preflight.js.map +1 -0
- package/dist/utils/http.d.ts +7 -1
- package/dist/utils/http.d.ts.map +1 -1
- package/dist/utils/http.js +5 -1
- package/dist/utils/http.js.map +1 -1
- package/package.json +11 -3
- package/skills/goose-ads/SKILL.md +509 -239
- package/skills/goose-product-photos/SKILL.md +161 -60
- package/skills/goose-video/SKILL.md +592 -259
- package/skills/goose-video-local/SKILL.md +1409 -236
- package/skills/gooseworks/SKILL.md +327 -34
- package/skills/make-custom-video/SKILL.md +735 -0
- package/skills/manifest.json +12 -0
- package/skills/routes.json +13 -6
- package/dist/skills/fetcher.d.ts +0 -18
- package/dist/skills/fetcher.d.ts.map +0 -1
- package/dist/skills/fetcher.js +0 -118
- package/dist/skills/fetcher.js.map +0 -1
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.digest = digest;
|
|
37
|
+
exports.writeCheckpoint = writeCheckpoint;
|
|
38
|
+
exports.loadCheckpoint = loadCheckpoint;
|
|
39
|
+
exports.prepareSave = prepareSave;
|
|
40
|
+
exports.resumeSave = resumeSave;
|
|
41
|
+
/** Finished-video recovery. No render-open, provider, or authentication operations. */
|
|
42
|
+
const crypto_1 = require("crypto");
|
|
43
|
+
const promises_1 = require("fs/promises");
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const video_save_mcp_1 = require("./video-save-mcp");
|
|
46
|
+
const HASH = /^[a-f0-9]{64}$/;
|
|
47
|
+
const ID = /^[A-Za-z0-9_-]{1,160}$/;
|
|
48
|
+
const MAX_BYTES = 200 * 1024 * 1024;
|
|
49
|
+
const CHECKS = ['source', 'brand', 'product', 'hook_and_scene_order', 'voice_and_script',
|
|
50
|
+
'captions', 'endcard_and_cta', 'duration_and_ratio', 'visual_artifacts'];
|
|
51
|
+
function fail(message) { throw new Error(message); }
|
|
52
|
+
function object(value) { return !!value && typeof value === 'object' && !Array.isArray(value); }
|
|
53
|
+
function keys(value, allowed) {
|
|
54
|
+
if (Object.keys(value).some(key => !allowed.includes(key)))
|
|
55
|
+
fail('Unexpected checkpoint or quality field');
|
|
56
|
+
}
|
|
57
|
+
function stable(value) {
|
|
58
|
+
if (Array.isArray(value))
|
|
59
|
+
return `[${value.map(stable).join(',')}]`;
|
|
60
|
+
if (object(value))
|
|
61
|
+
return `{${Object.keys(value).sort().map(k => `${JSON.stringify(k)}:${stable(value[k])}`).join(',')}}`;
|
|
62
|
+
return JSON.stringify(value);
|
|
63
|
+
}
|
|
64
|
+
function digest(value) { return (0, crypto_1.createHash)('sha256').update(stable(value)).digest('hex'); }
|
|
65
|
+
function sha(bytes) { return (0, crypto_1.createHash)('sha256').update(bytes).digest('hex'); }
|
|
66
|
+
function origin(value) {
|
|
67
|
+
if (typeof value !== 'string')
|
|
68
|
+
fail('Missing environment origin');
|
|
69
|
+
const url = new URL(value);
|
|
70
|
+
if (url.username || url.password || url.search || url.hash || url.pathname !== '/' ||
|
|
71
|
+
!['https:', 'http:'].includes(url.protocol))
|
|
72
|
+
fail('Invalid public environment origin');
|
|
73
|
+
if (url.protocol === 'http:' && !['127.0.0.1', 'localhost', '[::1]'].includes(url.hostname))
|
|
74
|
+
fail('Environment requires HTTPS');
|
|
75
|
+
return url.origin;
|
|
76
|
+
}
|
|
77
|
+
function identity(account) {
|
|
78
|
+
if (!object(account.environment) || !['production', 'staging', 'local'].includes(account.environment.name) ||
|
|
79
|
+
typeof account.user?.id !== 'string' || typeof account.organization?.id !== 'string' ||
|
|
80
|
+
!ID.test(account.user.id) || !ID.test(account.organization.id))
|
|
81
|
+
fail('Unknown account/environment; reconnect on the original connection');
|
|
82
|
+
return { environment: { name: account.environment.name, api_origin: origin(account.environment.api_origin) },
|
|
83
|
+
user_id: account.user.id, organization_id: account.organization.id };
|
|
84
|
+
}
|
|
85
|
+
function quality(report) {
|
|
86
|
+
if (!object(report))
|
|
87
|
+
fail('Missing quality report');
|
|
88
|
+
keys(report, ['version', 'summary', 'checks', 'detected_issues', 'repair_actions', 'checked_at']);
|
|
89
|
+
if (report.version !== 1 || typeof report.summary !== 'string' || !report.summary.trim() || report.summary.length > 2000 ||
|
|
90
|
+
!object(report.checks) || Object.keys(report.checks).length !== CHECKS.length)
|
|
91
|
+
fail('Invalid structured quality report');
|
|
92
|
+
for (const name of CHECKS) {
|
|
93
|
+
const check = report.checks[name];
|
|
94
|
+
if (!object(check))
|
|
95
|
+
fail(`Missing quality check: ${name}`);
|
|
96
|
+
keys(check, ['status', 'note']);
|
|
97
|
+
if (!['pass', 'not_applicable'].includes(check.status) ||
|
|
98
|
+
(check.note !== undefined && (typeof check.note !== 'string' || check.note.length > 1000)) ||
|
|
99
|
+
(check.status === 'not_applicable' && !check.note?.trim()))
|
|
100
|
+
fail(`Quality check has not passed: ${name}`);
|
|
101
|
+
}
|
|
102
|
+
for (const name of ['source', 'brand', 'hook_and_scene_order', 'endcard_and_cta', 'duration_and_ratio', 'visual_artifacts']) {
|
|
103
|
+
if (report.checks[name].status !== 'pass')
|
|
104
|
+
fail(`Always-required quality check has not passed: ${name}`);
|
|
105
|
+
}
|
|
106
|
+
for (const [key, limit] of [['detected_issues', 25], ['repair_actions', 10]]) {
|
|
107
|
+
if (report[key] !== undefined && (!Array.isArray(report[key]) || report[key].length > limit ||
|
|
108
|
+
report[key].some((v) => typeof v !== 'string' || v.length > 1000)))
|
|
109
|
+
fail('Invalid quality issue/action list');
|
|
110
|
+
}
|
|
111
|
+
if (report.checked_at !== undefined && (typeof report.checked_at !== 'string' ||
|
|
112
|
+
!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/.test(report.checked_at) ||
|
|
113
|
+
!Number.isFinite(Date.parse(report.checked_at))))
|
|
114
|
+
fail('Invalid quality timestamp');
|
|
115
|
+
if (JSON.stringify(report).length > 32 * 1024)
|
|
116
|
+
fail('Quality report is too large');
|
|
117
|
+
return { ...report, detected_issues: report.detected_issues ?? [], repair_actions: report.repair_actions ?? [] };
|
|
118
|
+
}
|
|
119
|
+
async function file(filePath) {
|
|
120
|
+
if (typeof filePath !== 'string' || !path.isAbsolute(filePath))
|
|
121
|
+
fail('Use absolute local file paths');
|
|
122
|
+
const info = await (0, promises_1.stat)(filePath);
|
|
123
|
+
if (!info.isFile() || info.size < 1 || info.size > MAX_BYTES)
|
|
124
|
+
fail('Missing/empty/oversized finished file or quality evidence');
|
|
125
|
+
const bytes = await (0, promises_1.readFile)(filePath);
|
|
126
|
+
return { path: filePath, sha256: sha(bytes), bytes: bytes.length };
|
|
127
|
+
}
|
|
128
|
+
function validFile(value, saved = false) {
|
|
129
|
+
if (!object(value))
|
|
130
|
+
fail('Invalid file binding');
|
|
131
|
+
keys(value, ['path', 'sha256', 'bytes', ...(saved ? ['upload_path', 'ingredient_key', 'kind', 'mime'] : [])]);
|
|
132
|
+
if (typeof value.path !== 'string' || !path.isAbsolute(value.path) || !HASH.test(value.sha256) ||
|
|
133
|
+
!Number.isInteger(value.bytes) || value.bytes < 1 || value.bytes > MAX_BYTES)
|
|
134
|
+
fail('Invalid file fingerprint');
|
|
135
|
+
}
|
|
136
|
+
function validate(checkpoint) {
|
|
137
|
+
if (!object(checkpoint))
|
|
138
|
+
fail('Malformed save checkpoint');
|
|
139
|
+
// Report notes are free text. Do not let a copied auth error turn the otherwise
|
|
140
|
+
// credential-free checkpoint into a token or reusable signed-URL store.
|
|
141
|
+
if (/\bBearer\s+\S+|\bcal_[A-Za-z0-9_-]{16,}\b|[?&](?:X-Amz-(?:Signature|Credential|Security-Token)|token|api_key)=/i.test(JSON.stringify(checkpoint))) {
|
|
142
|
+
fail('Remove authorization or signed-URL material from checkpoint inputs; no credentials may be saved');
|
|
143
|
+
}
|
|
144
|
+
keys(checkpoint, ['version', 'binding', 'binding_sha256', 'progress']);
|
|
145
|
+
const b = checkpoint.binding;
|
|
146
|
+
if (checkpoint.version !== 1 || !object(b) || !object(checkpoint.progress) || digest(b) !== checkpoint.binding_sha256)
|
|
147
|
+
fail('Malformed or changed save checkpoint');
|
|
148
|
+
keys(b, ['environment', 'user_id', 'organization_id', 'brand_id', 'project_id', 'project_organization_id', 'render_id', 'input_digest',
|
|
149
|
+
'final', 'poster', 'report', 'evidence', 'quality_report', 'review_digest', 'initial_final_render_id']);
|
|
150
|
+
identity({ environment: b.environment, user: { id: b.user_id }, organization: { id: b.organization_id } });
|
|
151
|
+
keys(b.environment, ['name', 'api_origin']);
|
|
152
|
+
if (![b.brand_id, b.project_id, b.project_organization_id, b.render_id].every(id => typeof id === 'string' && ID.test(id)) ||
|
|
153
|
+
!/^[a-f0-9]{8,128}$/.test(b.input_digest) || !HASH.test(b.review_digest) ||
|
|
154
|
+
!(b.initial_final_render_id === null || (typeof b.initial_final_render_id === 'string' && ID.test(b.initial_final_render_id))))
|
|
155
|
+
fail('Invalid render binding');
|
|
156
|
+
validFile(b.final, true);
|
|
157
|
+
validFile(b.poster, true);
|
|
158
|
+
validFile(b.report);
|
|
159
|
+
if (!Array.isArray(b.evidence) || b.evidence.length < 1 || b.evidence.length > 25)
|
|
160
|
+
fail('Missing quality evidence');
|
|
161
|
+
b.evidence.forEach((v) => validFile(v));
|
|
162
|
+
quality(b.quality_report);
|
|
163
|
+
for (const role of ['final', 'poster']) {
|
|
164
|
+
const f = b[role];
|
|
165
|
+
if (f.upload_path !== `working/final-${b.render_id}${role === 'final' ? '.mp4' : '-thumb.jpg'}` ||
|
|
166
|
+
f.ingredient_key !== (role === 'final' ? 'final' : 'final-thumb') ||
|
|
167
|
+
f.kind !== (role === 'final' ? 'render' : 'thumbnail') || f.mime !== (role === 'final' ? 'video/mp4' : 'image/jpeg'))
|
|
168
|
+
fail('Changed upload destination');
|
|
169
|
+
const receipt = checkpoint.progress[role];
|
|
170
|
+
if (receipt !== undefined) {
|
|
171
|
+
if (!object(receipt))
|
|
172
|
+
fail('Invalid stage receipt');
|
|
173
|
+
keys(receipt, ['media_id', 'stage']);
|
|
174
|
+
if (typeof receipt.media_id !== 'string' || !ID.test(receipt.media_id) || !['requested', 'put', 'confirmed'].includes(receipt.stage))
|
|
175
|
+
fail('Invalid stage receipt');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
keys(checkpoint.progress, ['final', 'poster', 'completion', 'selection']);
|
|
179
|
+
if (!['pending', 'unknown', 'complete'].includes(checkpoint.progress.completion) ||
|
|
180
|
+
!['pending', 'unknown', 'selected'].includes(checkpoint.progress.selection))
|
|
181
|
+
fail('Invalid saving stage');
|
|
182
|
+
}
|
|
183
|
+
/** Same-directory rename + fsync: a process interruption leaves either full old or full new JSON. */
|
|
184
|
+
async function writeCheckpoint(target, checkpoint) {
|
|
185
|
+
validate(checkpoint);
|
|
186
|
+
await (0, promises_1.mkdir)(path.dirname(target), { recursive: true, mode: 0o700 });
|
|
187
|
+
const temp = `${target}.${(0, crypto_1.randomUUID)()}.pending`;
|
|
188
|
+
const handle = await (0, promises_1.open)(temp, 'wx', 0o600);
|
|
189
|
+
try {
|
|
190
|
+
await handle.writeFile(JSON.stringify(checkpoint, null, 2) + '\n');
|
|
191
|
+
await handle.sync();
|
|
192
|
+
}
|
|
193
|
+
finally {
|
|
194
|
+
await handle.close();
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
await (0, promises_1.rename)(temp, target);
|
|
198
|
+
const directory = await (0, promises_1.open)(path.dirname(target), 'r');
|
|
199
|
+
try {
|
|
200
|
+
await directory.sync();
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
await directory.close();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
await (0, promises_1.unlink)(temp).catch(() => undefined);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
async function loadCheckpoint(target) {
|
|
211
|
+
const info = await (0, promises_1.stat)(target);
|
|
212
|
+
if (!info.isFile() || info.size > 1024 * 1024)
|
|
213
|
+
fail('Malformed save checkpoint');
|
|
214
|
+
const checkpoint = JSON.parse(await (0, promises_1.readFile)(target, 'utf8'));
|
|
215
|
+
validate(checkpoint);
|
|
216
|
+
return checkpoint;
|
|
217
|
+
}
|
|
218
|
+
function reviewDigest(p) { return digest({ script: p.script ?? null, script_drafts: p.script_drafts ?? null }); }
|
|
219
|
+
function inspectProject(state, ids) {
|
|
220
|
+
const project = state.project;
|
|
221
|
+
const render = Array.isArray(state.renders) && state.renders.find((r) => r.id === ids.render_id);
|
|
222
|
+
if (!object(project) || project.id !== ids.project_id || project.brand_id !== ids.brand_id ||
|
|
223
|
+
!object(render) || render.project_id !== ids.project_id)
|
|
224
|
+
fail('Project/render identity mismatch or missing render; no new render was opened');
|
|
225
|
+
if (state.order || state.creative_plan || project.custom_video_state?.mode === 'generate')
|
|
226
|
+
fail('This is not a client-side recipe render; use its existing order workflow');
|
|
227
|
+
if (!['queued', 'running', 'complete'].includes(render.status) || render.stop_requested_at ||
|
|
228
|
+
project.stop_requested_at || project.plan_status === 'stopped' || ['stopped', 'capped'].includes(project.status) ||
|
|
229
|
+
render.workflow_stage === 'blocked' || render.quality_status === 'blocked')
|
|
230
|
+
fail('Render is stopped, capped, failed or blocked; save-only recovery cannot reopen it');
|
|
231
|
+
return { project, render };
|
|
232
|
+
}
|
|
233
|
+
async function projectRead(transport, ids) {
|
|
234
|
+
return inspectProject(await transport.call('video_project_read', {
|
|
235
|
+
brand_id: ids.brand_id, project_id: ids.project_id, include: ['renders'],
|
|
236
|
+
}), ids);
|
|
237
|
+
}
|
|
238
|
+
async function prepareSave(target, manifest, transport) {
|
|
239
|
+
await (0, promises_1.mkdir)(path.dirname(target), { recursive: true, mode: 0o700 });
|
|
240
|
+
const lock = await (0, promises_1.open)(`${target}.lock`, 'wx', 0o600).catch(() => fail('Save checkpoint is locked by another process'));
|
|
241
|
+
try {
|
|
242
|
+
if (await (0, promises_1.stat)(target).catch(() => null))
|
|
243
|
+
fail('Checkpoint already exists; resume it instead of replacing finished-video evidence');
|
|
244
|
+
if (!manifest || ![manifest.brand_id, manifest.project_id, manifest.render_id].every(v => typeof v === 'string' && ID.test(v)) ||
|
|
245
|
+
!/^[a-f0-9]{8,128}$/.test(manifest.input_digest) || !object(manifest.qc) ||
|
|
246
|
+
!Array.isArray(manifest.qc.evidence_paths) || manifest.qc.evidence_paths.length < 1 || manifest.qc.evidence_paths.length > 25)
|
|
247
|
+
fail('Invalid finished-video manifest');
|
|
248
|
+
const owner = identity(await transport.call('account_whoami', {}));
|
|
249
|
+
const { project } = await projectRead(transport, manifest);
|
|
250
|
+
if (typeof project.organization_id !== 'string' || !ID.test(project.organization_id))
|
|
251
|
+
fail('Unknown project ownership');
|
|
252
|
+
const final = await file(manifest.final_path);
|
|
253
|
+
const poster = await file(manifest.poster_path);
|
|
254
|
+
if (final.sha256 !== manifest.qc.final_sha256 || poster.sha256 !== manifest.qc.poster_sha256)
|
|
255
|
+
fail('Finished bytes differ from the quality check; review these exact files first');
|
|
256
|
+
const report = await file(manifest.qc.report_path);
|
|
257
|
+
const qualityReport = quality(JSON.parse(await (0, promises_1.readFile)(report.path, 'utf8')));
|
|
258
|
+
const checkpoint = {
|
|
259
|
+
version: 1, binding: { ...owner, brand_id: manifest.brand_id, project_id: manifest.project_id, project_organization_id: project.organization_id,
|
|
260
|
+
render_id: manifest.render_id, input_digest: manifest.input_digest,
|
|
261
|
+
final: { ...final, upload_path: `working/final-${manifest.render_id}.mp4`, ingredient_key: 'final', kind: 'render', mime: 'video/mp4' },
|
|
262
|
+
poster: { ...poster, upload_path: `working/final-${manifest.render_id}-thumb.jpg`, ingredient_key: 'final-thumb', kind: 'thumbnail', mime: 'image/jpeg' },
|
|
263
|
+
report, evidence: await Promise.all(manifest.qc.evidence_paths.map(file)), quality_report: qualityReport,
|
|
264
|
+
review_digest: reviewDigest(project), initial_final_render_id: project.final_render_id ?? null,
|
|
265
|
+
}, binding_sha256: '', progress: { completion: 'pending', selection: 'pending' },
|
|
266
|
+
};
|
|
267
|
+
checkpoint.binding_sha256 = digest(checkpoint.binding);
|
|
268
|
+
await writeCheckpoint(target, checkpoint);
|
|
269
|
+
return checkpoint;
|
|
270
|
+
}
|
|
271
|
+
finally {
|
|
272
|
+
await lock.close();
|
|
273
|
+
await (0, promises_1.unlink)(`${target}.lock`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
function durableUrl(b, f) {
|
|
277
|
+
return `/api/ads/projects/${b.project_id}/render-file?path=${encodeURIComponent(f.upload_path)}`;
|
|
278
|
+
}
|
|
279
|
+
function sameUrl(actual, expected) {
|
|
280
|
+
if (typeof actual !== 'string' || !actual.startsWith('/'))
|
|
281
|
+
return false;
|
|
282
|
+
const a = new URL(actual, 'https://local.invalid');
|
|
283
|
+
const e = new URL(expected, 'https://local.invalid');
|
|
284
|
+
return a.origin === e.origin && !a.hash && a.pathname === e.pathname && a.searchParams.getAll('path').length === 1 && a.searchParams.get('path') === e.searchParams.get('path') &&
|
|
285
|
+
[...a.searchParams.keys()].every(k => k === 'path');
|
|
286
|
+
}
|
|
287
|
+
async function resumeSave(target, transport) {
|
|
288
|
+
// Exclusive local writer. A stale lock is reported, never silently stolen.
|
|
289
|
+
const lock = await (0, promises_1.open)(`${target}.lock`, 'wx', 0o600).catch(() => fail('Save checkpoint is locked; verify the prior process exited before removing its .lock file'));
|
|
290
|
+
try {
|
|
291
|
+
const checkpoint = await loadCheckpoint(target);
|
|
292
|
+
const b = checkpoint.binding;
|
|
293
|
+
const owner = identity(await transport.call('account_whoami', {}));
|
|
294
|
+
if (stable(owner) !== stable({ environment: b.environment, user_id: b.user_id, organization_id: b.organization_id }))
|
|
295
|
+
fail('Account/environment mismatch; reconnect to the original connection');
|
|
296
|
+
for (const expected of [b.final, b.poster, b.report, ...b.evidence]) {
|
|
297
|
+
const actual = await file(expected.path);
|
|
298
|
+
if (actual.sha256 !== expected.sha256 || actual.bytes !== expected.bytes)
|
|
299
|
+
fail('Finished file or quality evidence changed; saving stopped without generation');
|
|
300
|
+
}
|
|
301
|
+
if (digest(quality(JSON.parse(await (0, promises_1.readFile)(b.report.path, 'utf8')))) !== digest(b.quality_report))
|
|
302
|
+
fail('Quality report mismatch');
|
|
303
|
+
const read = async () => {
|
|
304
|
+
const state = await projectRead(transport, b);
|
|
305
|
+
if (state.project.organization_id !== b.project_organization_id)
|
|
306
|
+
fail('Project ownership changed');
|
|
307
|
+
if (reviewDigest(state.project) !== b.review_digest)
|
|
308
|
+
fail('The saved review set changed; diagnose before selecting this video');
|
|
309
|
+
const pin = state.project.final_render_id ?? null;
|
|
310
|
+
if (pin !== b.initial_final_render_id && pin !== b.render_id)
|
|
311
|
+
fail('Another version was selected; recovery will not overwrite that choice');
|
|
312
|
+
return state;
|
|
313
|
+
};
|
|
314
|
+
await read();
|
|
315
|
+
for (const role of ['final', 'poster']) {
|
|
316
|
+
const f = b[role];
|
|
317
|
+
const listed = await transport.call('media_list', { brand_id: b.brand_id, scope: 'video_project', scope_id: b.project_id,
|
|
318
|
+
ingredient_key: f.ingredient_key, input_digest: b.input_digest, limit: 100 });
|
|
319
|
+
if (!Array.isArray(listed.items) || listed.next_cursor)
|
|
320
|
+
fail('Uncertain media lookup; no upload was attempted');
|
|
321
|
+
let media = listed.items.find((m) => m.path === f.upload_path && m.input_digest === b.input_digest && m.ingredient_key === f.ingredient_key);
|
|
322
|
+
const receipt = checkpoint.progress[role];
|
|
323
|
+
if (receipt && (!media || media.id !== receipt.media_id))
|
|
324
|
+
fail('Saved media identity changed or disappeared; no upload was attempted');
|
|
325
|
+
if (media && (!ID.test(media.id) || !['pending', 'approved'].includes(media.status) || media.kind !== f.kind))
|
|
326
|
+
fail('Unexpected saved-media state');
|
|
327
|
+
if (media?.status === 'pending') {
|
|
328
|
+
// A PUT/confirm reply may have been lost. Inspect stored bytes first; a missing object
|
|
329
|
+
// is the only reason to request a fresh PUT. Never infer success from a local receipt.
|
|
330
|
+
const pendingId = media.id;
|
|
331
|
+
await read();
|
|
332
|
+
try {
|
|
333
|
+
const result = await transport.call('media_confirm', { brand_id: b.brand_id, media_id: pendingId });
|
|
334
|
+
if (result.media?.id !== pendingId || result.media?.status !== 'approved')
|
|
335
|
+
fail('Upload confirmation is incomplete');
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
if (!(error instanceof video_save_mcp_1.SaveToolError) || error.code !== 'not_found')
|
|
339
|
+
throw error;
|
|
340
|
+
const again = await transport.call('media_list', { brand_id: b.brand_id, scope: 'video_project', scope_id: b.project_id,
|
|
341
|
+
ingredient_key: f.ingredient_key, input_digest: b.input_digest, limit: 100 });
|
|
342
|
+
if (again.next_cursor || !again.items?.some((m) => m.id === pendingId && m.path === f.upload_path && m.status === 'pending'))
|
|
343
|
+
fail('Pending media disappeared; diagnose before refreshing its upload');
|
|
344
|
+
// The scoped pending row still exists and storage has no object. A fresh URL/row
|
|
345
|
+
// at the identical render path is safe; this does not generate a replacement.
|
|
346
|
+
media = undefined;
|
|
347
|
+
delete checkpoint.progress[role];
|
|
348
|
+
await writeCheckpoint(target, checkpoint);
|
|
349
|
+
}
|
|
350
|
+
if (media) {
|
|
351
|
+
const refreshed = await transport.call('media_list', { brand_id: b.brand_id, scope: 'video_project', scope_id: b.project_id,
|
|
352
|
+
ingredient_key: f.ingredient_key, input_digest: b.input_digest, limit: 100 });
|
|
353
|
+
if (refreshed.next_cursor)
|
|
354
|
+
fail('Uncertain confirmed-media lookup');
|
|
355
|
+
media = refreshed.items?.find((m) => m.id === pendingId);
|
|
356
|
+
if (!media)
|
|
357
|
+
fail('Confirmed media disappeared');
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
if (!media) {
|
|
361
|
+
const state = await read();
|
|
362
|
+
if (state.render.status === 'complete')
|
|
363
|
+
fail('Completed render has missing media; diagnose without replacing its files');
|
|
364
|
+
const result = await transport.call('media_upload', { brand_id: b.brand_id, scope: 'video_project', scope_id: b.project_id,
|
|
365
|
+
kind: f.kind, path: f.upload_path, ingredient_key: f.ingredient_key, input_digest: b.input_digest,
|
|
366
|
+
source: { type: 'file', filename: path.basename(f.upload_path), content_type: f.mime } });
|
|
367
|
+
if (typeof result.media?.id !== 'string' || !ID.test(result.media.id) || result.upload?.method !== 'PUT' ||
|
|
368
|
+
!sameUrl(result.upload.render_file_url, durableUrl(b, f)) || !object(result.upload.required_headers))
|
|
369
|
+
fail('Invalid upload receipt');
|
|
370
|
+
checkpoint.progress[role] = { media_id: result.media.id, stage: 'requested' };
|
|
371
|
+
await writeCheckpoint(target, checkpoint);
|
|
372
|
+
const bytes = await (0, promises_1.readFile)(f.path);
|
|
373
|
+
if (bytes.length !== f.bytes || sha(bytes) !== f.sha256)
|
|
374
|
+
fail('Finished file changed before upload');
|
|
375
|
+
await read();
|
|
376
|
+
await transport.put(result.upload.url, result.upload.required_headers, bytes);
|
|
377
|
+
checkpoint.progress[role].stage = 'put';
|
|
378
|
+
await writeCheckpoint(target, checkpoint);
|
|
379
|
+
await read();
|
|
380
|
+
const confirmed = await transport.call('media_confirm', { brand_id: b.brand_id, media_id: result.media.id });
|
|
381
|
+
if (confirmed.media?.id !== result.media.id || confirmed.media?.status !== 'approved')
|
|
382
|
+
fail('Upload confirmation is incomplete');
|
|
383
|
+
const refreshed = await transport.call('media_list', { brand_id: b.brand_id, scope: 'video_project', scope_id: b.project_id,
|
|
384
|
+
ingredient_key: f.ingredient_key, input_digest: b.input_digest, limit: 100 });
|
|
385
|
+
if (refreshed.next_cursor)
|
|
386
|
+
fail('Uncertain confirmed-media lookup');
|
|
387
|
+
media = refreshed.items?.find((m) => m.id === result.media.id);
|
|
388
|
+
}
|
|
389
|
+
if (!media || media.status !== 'approved' || media.path !== f.upload_path || media.kind !== f.kind ||
|
|
390
|
+
media.input_digest !== b.input_digest || media.ingredient_key !== f.ingredient_key ||
|
|
391
|
+
media.bytes !== f.bytes || sha(await transport.download(media.url, MAX_BYTES)) !== f.sha256)
|
|
392
|
+
fail('Stored bytes do not match the quality-checked final/poster');
|
|
393
|
+
checkpoint.progress[role] = { media_id: media.id, stage: 'confirmed' };
|
|
394
|
+
await writeCheckpoint(target, checkpoint);
|
|
395
|
+
}
|
|
396
|
+
let state = await read();
|
|
397
|
+
if (state.render.status !== 'complete') {
|
|
398
|
+
checkpoint.progress.completion = 'unknown';
|
|
399
|
+
await writeCheckpoint(target, checkpoint);
|
|
400
|
+
await transport.call('video_render_run', { brand_id: b.brand_id, project_id: b.project_id,
|
|
401
|
+
render: { render_id: b.render_id, status: 'complete', workflow_stage: 'ready', quality_status: 'passed',
|
|
402
|
+
quality_report: b.quality_report, output_url: durableUrl(b, b.final), thumbnail_url: durableUrl(b, b.poster) } });
|
|
403
|
+
state = await read();
|
|
404
|
+
}
|
|
405
|
+
if (state.render.status !== 'complete' || state.render.quality_status !== 'passed' ||
|
|
406
|
+
digest(quality(state.render.quality_report)) !== digest(b.quality_report) ||
|
|
407
|
+
!sameUrl(state.render.render_file_path ?? state.render.output_url, durableUrl(b, b.final)) ||
|
|
408
|
+
!sameUrl(state.render.thumbnail_file_path ?? state.render.thumbnail_url, durableUrl(b, b.poster)))
|
|
409
|
+
fail('Completed render does not match this checkpoint');
|
|
410
|
+
checkpoint.progress.completion = 'complete';
|
|
411
|
+
await writeCheckpoint(target, checkpoint);
|
|
412
|
+
if (state.project.final_render_id !== b.render_id) {
|
|
413
|
+
checkpoint.progress.selection = 'unknown';
|
|
414
|
+
await writeCheckpoint(target, checkpoint);
|
|
415
|
+
try {
|
|
416
|
+
await transport.call('video_project_upsert', { brand_id: b.brand_id, project_id: b.project_id,
|
|
417
|
+
patch: { final_render_id: b.render_id, final_selection_guard: {
|
|
418
|
+
expected_final_render_id: state.project.final_render_id ?? null, expected_review_digest: b.review_digest,
|
|
419
|
+
} } });
|
|
420
|
+
}
|
|
421
|
+
catch (error) {
|
|
422
|
+
if (error instanceof video_save_mcp_1.SaveToolError && error.code === 'final_selection_conflict') {
|
|
423
|
+
fail('Another version was selected or the saved review changed; recovery stopped without overwriting that choice. Read the current project before continuing.');
|
|
424
|
+
}
|
|
425
|
+
throw error;
|
|
426
|
+
}
|
|
427
|
+
state = await read();
|
|
428
|
+
}
|
|
429
|
+
if (state.project.final_render_id !== b.render_id)
|
|
430
|
+
fail('Final selection was not saved; reconnect and resume the same checkpoint');
|
|
431
|
+
checkpoint.progress.selection = 'selected';
|
|
432
|
+
await writeCheckpoint(target, checkpoint);
|
|
433
|
+
return checkpoint;
|
|
434
|
+
}
|
|
435
|
+
finally {
|
|
436
|
+
await lock.close();
|
|
437
|
+
await (0, promises_1.unlink)(`${target}.lock`);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=video-save.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-save.js","sourceRoot":"","sources":["../../src/lib/video-save.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDA,wBAAmH;AA+FnH,0CAYC;AACD,wCAMC;AAkBD,kCA4BC;AAWD,gCAqHC;AAnVD,uFAAuF;AACvF,mCAAgD;AAChD,0CAA0E;AAC1E,2CAA6B;AAC7B,qDAAiD;AAEjD,MAAM,IAAI,GAAG,gBAAgB,CAAC;AAC9B,MAAM,EAAE,GAAG,wBAAwB,CAAC;AACpC,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AACpC,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,kBAAkB;IACtF,UAAU,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;AA+B3E,SAAS,IAAI,CAAC,OAAe,IAAW,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACnE,SAAS,MAAM,CAAC,KAAc,IAAkB,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvH,SAAS,IAAI,CAAC,KAAU,EAAE,OAAiB;IACzC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,IAAI,CAAC,wCAAwC,CAAC,CAAC;AAC7G,CAAC;AACD,SAAS,MAAM,CAAC,KAAU;IACxB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACpE,IAAI,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC1H,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AACD,SAAgB,MAAM,CAAC,KAAc,IAAY,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnH,SAAS,GAAG,CAAC,KAAa,IAAY,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChG,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG;QAC9E,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC3F,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAChI,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC;AACD,SAAS,QAAQ,CAAC,OAAY;IAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;QACtG,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,YAAY,EAAE,EAAE,KAAK,QAAQ;QACpF,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAAE,IAAI,CAAC,mEAAmE,CAAC,CAAC;IAC9I,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;QAC1G,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;AACzE,CAAC;AACD,SAAS,OAAO,CAAC,MAAe;IAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;IAClG,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI;QACpH,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC7H,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YAClD,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;YAC1F,CAAC,KAAK,CAAC,MAAM,KAAK,gBAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;IAChH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAC5H,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;YAAE,IAAI,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAU,EAAE,CAAC;QACtF,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,KAAK;YACvF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;YAAE,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC7H,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;QACzE,CAAC,kDAAkD,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAC3E,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACxF,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI;QAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACnF,OAAO,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,EAAE,EAAE,CAAC;AACnH,CAAC;AACD,KAAK,UAAU,IAAI,CAAC,QAAgB;IAClC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACtG,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS;QAAE,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAChI,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AACrE,CAAC;AACD,SAAS,SAAS,CAAC,KAAU,EAAE,KAAK,GAAG,KAAK;IAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9G,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1F,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS;QAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACrH,CAAC;AACD,SAAS,QAAQ,CAAC,UAAmB;IACnC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3D,gFAAgF;IAChF,wEAAwE;IACxE,IAAI,iHAAiH,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvJ,IAAI,CAAC,iGAAiG,CAAC,CAAC;IAC1G,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;IACvE,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC;IAC7B,IAAI,UAAU,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,cAAc;QAAE,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpK,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,yBAAyB,EAAE,WAAW,EAAE,cAAc;QACpI,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAC1G,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC3G,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtH,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;QACxE,CAAC,CAAC,CAAC,CAAC,uBAAuB,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,uBAAuB,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACnK,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;QAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACpH,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAU,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,WAAW,KAAK,iBAAiB,CAAC,CAAC,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE;YAC3F,CAAC,CAAC,cAAc,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;YACjE,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;YAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC7J,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gBAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YACrC,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtK,CAAC;IACH,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5E,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAChH,CAAC;AAED,qGAAqG;AAC9F,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,UAA0B;IAC9E,QAAQ,CAAC,UAAU,CAAC,CAAC;IACrB,MAAM,IAAA,gBAAK,EAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,IAAA,mBAAU,GAAE,UAAU,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7C,IAAI,CAAC;QAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IAAC,CAAC;YACxF,CAAC;QAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,IAAA,iBAAM,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC;YAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;IACtE,CAAC;YAAS,CAAC;QAAC,MAAM,IAAA,iBAAM,EAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAAC,CAAC;AAC1D,CAAC;AACM,KAAK,UAAU,cAAc,CAAC,MAAc;IACjD,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI;QAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACjF,MAAM,UAAU,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACrB,OAAO,UAAU,CAAC;AACpB,CAAC;AACD,SAAS,YAAY,CAAC,CAAM,IAAY,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9H,SAAS,cAAc,CAAC,KAAU,EAAE,GAAgE;IAClG,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;IACtG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ;QACtF,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU;QAAE,IAAI,CAAC,8EAA8E,CAAC,CAAC;IAClJ,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,kBAAkB,EAAE,IAAI,KAAK,UAAU;QAAE,IAAI,CAAC,0EAA0E,CAAC,CAAC;IAC5K,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,iBAAiB;QACtF,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QAChH,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS;QAAE,IAAI,CAAC,mFAAmF,CAAC,CAAC;IAC1K,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AACD,KAAK,UAAU,WAAW,CAAC,SAAwB,EAAE,GAAgE;IACnH,OAAO,cAAc,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE;QAC/D,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC;KACzE,CAAC,EAAE,GAAG,CAAC,CAAC;AACX,CAAC;AACM,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,QAAsB,EAAE,SAAwB;IAChG,MAAM,IAAA,gBAAK,EAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,GAAG,MAAM,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;IACzH,IAAI,CAAC;QACH,IAAI,MAAM,IAAA,eAAI,EAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,mFAAmF,CAAC,CAAC;QACpI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1H,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE;YAAE,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC3K,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;YAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAAC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC/F,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC,aAAa;YAAE,IAAI,CAAC,8EAA8E,CAAC,CAAC;QACnL,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAmB;YACjC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,uBAAuB,EAAE,OAAO,CAAC,eAAe;gBAC7I,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY;gBAClE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,iBAAiB,QAAQ,CAAC,SAAS,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE;gBACvI,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,iBAAiB,QAAQ,CAAC,SAAS,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE;gBACzJ,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa;gBACxG,aAAa,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,uBAAuB,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI;aAC/F,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;SACjF,CAAC;QACF,UAAU,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC1C,OAAO,UAAU,CAAC;IACpB,CAAC;YAAS,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,MAAM,IAAA,iBAAM,EAAC,GAAG,MAAM,OAAO,CAAC,CAAC;IAAC,CAAC;AACnE,CAAC;AACD,SAAS,UAAU,CAAC,CAA4B,EAAE,CAAY;IAC5D,OAAO,qBAAqB,CAAC,CAAC,UAAU,qBAAqB,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;AACnG,CAAC;AACD,SAAS,OAAO,CAAC,MAAe,EAAE,QAAgB;IAChD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACxE,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IACzG,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;QAC7K,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;AACxD,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,SAAwB;IACvE,2EAA2E;IAC3E,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,GAAG,MAAM,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC,CAAC;IACtK,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QAAC,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC;QAC9E,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;YAAE,IAAI,CAAC,oEAAoE,CAAC,CAAC;QACjM,KAAK,MAAM,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;gBAAE,IAAI,CAAC,8EAA8E,CAAC,CAAC;QACjK,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,mBAAQ,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;YAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACrI,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,KAAK,CAAC,CAAC,uBAAuB;gBAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACnG,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,aAAa;gBAAE,IAAI,CAAC,oEAAoE,CAAC,CAAC;YAChI,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;YAClD,IAAI,GAAG,KAAK,CAAC,CAAC,uBAAuB,IAAI,GAAG,KAAK,CAAC,CAAC,SAAS;gBAAE,IAAI,CAAC,uEAAuE,CAAC,CAAC;YAC5I,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QACF,MAAM,IAAI,EAAE,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAU,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU;gBACtH,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAChF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,WAAW;gBAAE,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAChH,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC;YAClJ,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAC;gBAAE,IAAI,CAAC,sEAAsE,CAAC,CAAC;YACvI,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,8BAA8B,CAAC,CAAC;YACpJ,IAAI,KAAK,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,uFAAuF;gBACvF,uFAAuF;gBACvF,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,EAAE,CAAC;gBACb,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;oBACpG,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU;wBAAE,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBACvH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,CAAC,KAAK,YAAY,8BAAa,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;wBAAE,MAAM,KAAK,CAAC;oBACjF,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU;wBACrH,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;oBAChF,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;wBAAE,IAAI,CAAC,kEAAkE,CAAC,CAAC;oBAC5M,iFAAiF;oBACjF,8EAA8E;oBAC9E,KAAK,GAAG,SAAS,CAAC;oBAClB,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACjC,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAC5C,CAAC;gBACD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU;wBACzH,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;oBAChF,IAAI,SAAS,CAAC,WAAW;wBAAE,IAAI,CAAC,kCAAkC,CAAC,CAAC;oBACpE,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;oBAC9D,IAAI,CAAC,KAAK;wBAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU;oBAAE,IAAI,CAAC,0EAA0E,CAAC,CAAC;gBACzH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU;oBACxH,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY;oBACjG,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5F,IAAI,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK;oBACpG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;oBAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBACzI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;gBAC9E,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAC1C,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAQ,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM;oBAAE,IAAI,CAAC,qCAAqC,CAAC,CAAC;gBACrG,MAAM,IAAI,EAAE,CAAC;gBACb,MAAM,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;gBAC9E,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC,KAAK,GAAG,KAAK,CAAC;gBAAC,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBACpF,MAAM,IAAI,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7G,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU;oBAAE,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBACjI,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU;oBACzH,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBAChF,IAAI,SAAS,CAAC,WAAW;oBAAE,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBACpE,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;gBAC9F,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,CAAC,cAAc;gBAClF,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM;gBAAE,IAAI,CAAC,4DAA4D,CAAC,CAAC;YACpK,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAAC,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpH,CAAC;QACD,IAAI,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACvC,UAAU,CAAC,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC;YAAC,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACtF,MAAM,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU;gBACvF,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ;oBACrG,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACtH,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc,KAAK,QAAQ;YAC9E,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;YACzE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1F,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAAE,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC/J,UAAU,CAAC,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;QAAC,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACvF,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;YAClD,UAAU,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;YAAC,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACrF,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU;oBAC3F,KAAK,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,SAAS,EAAE,qBAAqB,EAAE;4BAC5D,wBAAwB,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC,aAAa;yBACzG,EAAE,EAAE,CAAC,CAAC;YACX,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,8BAAa,IAAI,KAAK,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;oBAChF,IAAI,CAAC,yJAAyJ,CAAC,CAAC;gBAClK,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,KAAK,CAAC,CAAC,SAAS;YAAE,IAAI,CAAC,yEAAyE,CAAC,CAAC;QACnI,UAAU,CAAC,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC;QAAC,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACtF,OAAO,UAAU,CAAC;IACpB,CAAC;YAAS,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,MAAM,IAAA,iBAAM,EAAC,GAAG,MAAM,OAAO,CAAC,CAAC;IAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAuBA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BvD"}
|
package/dist/program.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.run = run;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const install_1 = require("./commands/install");
|
|
6
|
+
const login_1 = require("./commands/login");
|
|
7
|
+
const logout_1 = require("./commands/logout");
|
|
8
|
+
const whoami_1 = require("./commands/whoami");
|
|
9
|
+
const update_1 = require("./commands/update");
|
|
10
|
+
const credits_1 = require("./commands/credits");
|
|
11
|
+
const search_1 = require("./commands/search");
|
|
12
|
+
const fetch_1 = require("./commands/fetch");
|
|
13
|
+
const env_1 = require("./commands/env");
|
|
14
|
+
const call_1 = require("./commands/call");
|
|
15
|
+
const tool_1 = require("./commands/tool");
|
|
16
|
+
const orthogonal_1 = require("./commands/orthogonal");
|
|
17
|
+
const styles_1 = require("./commands/styles");
|
|
18
|
+
const formats_1 = require("./commands/formats");
|
|
19
|
+
const doctor_1 = require("./commands/doctor");
|
|
20
|
+
const log_1 = require("./commands/log");
|
|
21
|
+
const video_local_1 = require("./commands/video-local");
|
|
22
|
+
const video_save_1 = require("./commands/video-save");
|
|
23
|
+
const version_1 = require("./version");
|
|
24
|
+
const skills_1 = require("./commands/skills");
|
|
25
|
+
const launch_1 = require("./commands/launch");
|
|
26
|
+
async function run(args) {
|
|
27
|
+
const program = new commander_1.Command();
|
|
28
|
+
program
|
|
29
|
+
.name('gooseworks')
|
|
30
|
+
.description('GooseWorks CLI — give your coding agent real data tools')
|
|
31
|
+
.version((0, version_1.getVersion)())
|
|
32
|
+
.option('--env <environment>', 'production (default) or staging; may appear before or after the command');
|
|
33
|
+
program.addCommand(install_1.installCommand);
|
|
34
|
+
program.addCommand(launch_1.launchCommand);
|
|
35
|
+
program.addCommand(login_1.loginCommand);
|
|
36
|
+
program.addCommand(logout_1.logoutCommand);
|
|
37
|
+
program.addCommand(whoami_1.whoamiCommand);
|
|
38
|
+
program.addCommand(update_1.updateCommand);
|
|
39
|
+
program.addCommand(skills_1.skillsCommand);
|
|
40
|
+
program.addCommand(credits_1.creditsCommand);
|
|
41
|
+
program.addCommand(search_1.searchCommand);
|
|
42
|
+
program.addCommand(fetch_1.fetchCommand);
|
|
43
|
+
program.addCommand(env_1.envCommand);
|
|
44
|
+
program.addCommand(call_1.callCommand);
|
|
45
|
+
program.addCommand(tool_1.toolCommand);
|
|
46
|
+
program.addCommand(orthogonal_1.orthogonalCommand);
|
|
47
|
+
program.addCommand(styles_1.stylesCommand);
|
|
48
|
+
program.addCommand(formats_1.formatsCommand);
|
|
49
|
+
program.addCommand(doctor_1.doctorCommand);
|
|
50
|
+
program.addCommand(log_1.logCommand);
|
|
51
|
+
// Hidden: serves only paused server video orders (see commands/video-local.ts).
|
|
52
|
+
program.addCommand(video_local_1.videoLocalCommand, { hidden: true });
|
|
53
|
+
program.addCommand(video_save_1.videoSaveCommand);
|
|
54
|
+
await program.parseAsync(args, { from: 'user' });
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":";;AAuBA,kBA+BC;AAtDD,yCAAoC;AACpC,gDAAoD;AACpD,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,8CAAkD;AAClD,4CAAgD;AAChD,wCAA4C;AAC5C,0CAA8C;AAC9C,0CAA8C;AAC9C,sDAA0D;AAC1D,8CAAkD;AAClD,gDAAoD;AACpD,8CAAkD;AAClD,wCAA4C;AAC5C,wDAA2D;AAC3D,sDAAyD;AACzD,uCAAuC;AACvC,8CAAkD;AAClD,8CAAkD;AAE3C,KAAK,UAAU,GAAG,CAAC,IAAc;IACxC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,yDAAyD,CAAC;SACtE,OAAO,CAAC,IAAA,oBAAU,GAAE,CAAC;SACrB,MAAM,CAAC,qBAAqB,EAAE,yEAAyE,CAAC,CAAC;IAE5G,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,gBAAU,CAAC,CAAC;IAC/B,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;IAChC,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;IAChC,OAAO,CAAC,UAAU,CAAC,8BAAiB,CAAC,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,gBAAU,CAAC,CAAC;IAC/B,gFAAgF;IAChF,OAAO,CAAC,UAAU,CAAC,+BAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,UAAU,CAAC,6BAAgB,CAAC,CAAC;IAErC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AACjD,CAAC"}
|