@42ws/cli 0.0.46 → 0.0.48
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
CHANGED
|
@@ -131,12 +131,15 @@ Print an AI-facing guide. `cli` (overall), `context` (site build conventions), `
|
|
|
131
131
|
|
|
132
132
|
### `42ws whoami`
|
|
133
133
|
|
|
134
|
-
Show the
|
|
134
|
+
Show the logged-in user, the target environment, and the plan features available on the account.
|
|
135
135
|
|
|
136
136
|
```
|
|
137
137
|
42ws whoami
|
|
138
|
+
42ws whoami --json
|
|
138
139
|
```
|
|
139
140
|
|
|
141
|
+
Output includes the API endpoint (so you can tell which environment you're on) and which features your plan enables (hosting / contact form / collection / custom domains). AI agents should check this before proposing features so they don't suggest something the plan can't use.
|
|
142
|
+
|
|
140
143
|
## Localization
|
|
141
144
|
|
|
142
145
|
The CLI auto-detects locale from `LANG` / `LC_ALL` env vars and falls back to the OS locale via `Intl`. Override explicitly with `--lang ja` or `--lang en`. Currently supports English and Japanese.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAkCA,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DxD"}
|
package/dist/commands/init.js
CHANGED
|
@@ -4,7 +4,8 @@ import { createInterface } from 'node:readline';
|
|
|
4
4
|
import { spawn } from 'node:child_process';
|
|
5
5
|
import { execSync } from 'node:child_process';
|
|
6
6
|
import { detectFramework } from '../lib/detect.js';
|
|
7
|
-
import { loadConfig } from '../lib/config.js';
|
|
7
|
+
import { loadConfig, deriveDomains } from '../lib/config.js';
|
|
8
|
+
import { apiRequest } from '../lib/api.js';
|
|
8
9
|
import { error, info, isJsonMode } from '../lib/output.js';
|
|
9
10
|
function slugify(name) {
|
|
10
11
|
return name
|
|
@@ -48,168 +49,96 @@ export async function init(args) {
|
|
|
48
49
|
}
|
|
49
50
|
// Interactive mode
|
|
50
51
|
if (!process.stdin.isTTY) {
|
|
51
|
-
error('NOT_A_TTY', '
|
|
52
|
+
error('NOT_A_TTY', '対話モードを起動できません。', '非対話で使うときは --json と --site=<名前> を指定してください。');
|
|
52
53
|
process.exit(1);
|
|
53
54
|
}
|
|
54
|
-
//
|
|
55
|
-
if (existsSync(configPath)) {
|
|
56
|
-
const overwrite = await prompt('42ws.json
|
|
55
|
+
// 42ws.json が既にある場合だけ確認(それ以外は質問せず賢く既定で進める)
|
|
56
|
+
if (existsSync(configPath) && !args.yes) {
|
|
57
|
+
const overwrite = await prompt('42ws.json が既にあります。上書きしますか? [y/N]: ');
|
|
57
58
|
if (overwrite.toLowerCase() !== 'y') {
|
|
58
|
-
|
|
59
|
+
info('中止しました。');
|
|
59
60
|
process.exit(0);
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
|
-
//
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const outputDir = outputAnswer.length > 0 ? outputAnswer : defaultOutput;
|
|
70
|
-
// 3. Build command
|
|
71
|
-
const defaultBuild = detection.build ?? 'npm run build';
|
|
72
|
-
const buildAnswer = await prompt(`Build command [${defaultBuild}] (empty for none): `);
|
|
73
|
-
let buildCmd;
|
|
74
|
-
if (buildAnswer === '') {
|
|
75
|
-
// keep default
|
|
76
|
-
buildCmd = defaultBuild;
|
|
77
|
-
}
|
|
78
|
-
else if (buildAnswer.toLowerCase() === 'none') {
|
|
79
|
-
buildCmd = undefined;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
buildCmd = buildAnswer;
|
|
83
|
-
}
|
|
84
|
-
// 4. SPA mode
|
|
85
|
-
const defaultSpa = detection.spa ?? false;
|
|
86
|
-
const spaPrompt = defaultSpa ? '[Y/n]' : '[y/N]';
|
|
87
|
-
const spaAnswer = await prompt(`SPA mode? ${spaPrompt}: `);
|
|
88
|
-
let spaMode;
|
|
89
|
-
if (spaAnswer === '') {
|
|
90
|
-
spaMode = defaultSpa;
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
spaMode = spaAnswer.toLowerCase() === 'y';
|
|
94
|
-
}
|
|
95
|
-
const config = {
|
|
96
|
-
site: siteName,
|
|
97
|
-
output: outputDir,
|
|
98
|
-
};
|
|
99
|
-
if (buildCmd)
|
|
100
|
-
config.build = buildCmd;
|
|
101
|
-
if (spaMode)
|
|
63
|
+
// サイト名(サブドメインになる)。dir 名を既定にし、空きを確認して通ったものを使う。
|
|
64
|
+
const siteName = await resolveAvailableSite(slugify(basename(cwd)), args.site);
|
|
65
|
+
// Output / Build / SPA は自動検出して 42ws.json に静かに書く(CLI では聞かない)。
|
|
66
|
+
const config = { site: siteName, output: detection.output ?? 'dist' };
|
|
67
|
+
if (detection.build)
|
|
68
|
+
config.build = detection.build;
|
|
69
|
+
if (detection.spa)
|
|
102
70
|
config.spa = true;
|
|
103
71
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', { encoding: 'utf-8' });
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
//
|
|
107
|
-
|
|
108
|
-
// 6. AI agent 用ガイド (CLAUDE.md / AGENTS.md) を配置
|
|
109
|
-
await setupAgentGuides(cwd, { hasBrief: briefCreated });
|
|
110
|
-
// 7. AI agent (claude / codex) を起動
|
|
72
|
+
const { sitesHost } = deriveDomains(loadConfig().apiUrl);
|
|
73
|
+
info(`42ws.json を作成しました(サイト名: ${siteName} → https://${siteName}.${sitesHost})`);
|
|
74
|
+
// AI agent 用ガイド (CLAUDE.md / AGENTS.md) を配置 → 起動。ヒアリングや設計は起動後に AI が行う。
|
|
75
|
+
await setupAgentGuides(cwd);
|
|
111
76
|
await launchAgent(cwd);
|
|
112
77
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
78
|
+
/**
|
|
79
|
+
* サイト名の空きを確認しながら確定する。
|
|
80
|
+
* - 既定(dir 名)が空いていればそのまま採用(質問しない)
|
|
81
|
+
* - 埋まっている/予約/不正なら理由を伝えて別名を入力してもらう(空きが見つかるまで)
|
|
82
|
+
* - 空き確認 API(公開・認証不要)に届かなければ、既定のまま進める(後続の create で再確認される)
|
|
83
|
+
*/
|
|
84
|
+
async function resolveAvailableSite(defaultSite, fromFlag) {
|
|
85
|
+
const cfg = loadConfig();
|
|
86
|
+
const check = async (name) => {
|
|
87
|
+
try {
|
|
88
|
+
return await apiRequest(cfg, 'GET', `/v1/sites/${encodeURIComponent(name)}/availability`);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return null; // オフライン等は確認スキップ
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const reasonText = {
|
|
95
|
+
taken: 'すでに使われています',
|
|
96
|
+
reserved: '予約済みで使えません',
|
|
97
|
+
invalid: '使えない名前です(半角英数とハイフン、4〜32文字)',
|
|
98
|
+
};
|
|
99
|
+
let candidate = (fromFlag || defaultSite).toLowerCase();
|
|
100
|
+
for (;;) {
|
|
101
|
+
const res = await check(candidate);
|
|
102
|
+
if (res === null) {
|
|
103
|
+
info(`サイト名の空き確認をスキップしました(オフライン?)。"${candidate}" で進めます。`);
|
|
104
|
+
return candidate;
|
|
105
|
+
}
|
|
106
|
+
if (res.available) {
|
|
107
|
+
info(`サイト名 "${candidate}" は利用可能です。`);
|
|
108
|
+
return candidate;
|
|
109
|
+
}
|
|
110
|
+
info(`サイト名 "${candidate}" は${reasonText[res.reason ?? ''] ?? '使えません'}。`);
|
|
111
|
+
const next = await prompt('別のサイト名を入力してください: ');
|
|
112
|
+
if (!next) {
|
|
113
|
+
info('空のためそのまま進めます(公開時に再確認されます)。');
|
|
114
|
+
return candidate;
|
|
115
|
+
}
|
|
116
|
+
candidate = next.toLowerCase();
|
|
120
117
|
}
|
|
121
|
-
const ans = await prompt('AI にプロジェクトのヒアリングをさせますか? (BRIEF.md の空テンプレを置き、起動後に AI が対話で埋めます) [y/N]: ');
|
|
122
|
-
if (ans.toLowerCase() !== 'y')
|
|
123
|
-
return false;
|
|
124
|
-
writeFileSync(briefPath, renderBriefTemplate());
|
|
125
|
-
info(`${BRIEF_FILE} (空テンプレ) を作成しました。AI 起動後、対話で埋めてもらってください。`);
|
|
126
|
-
return true;
|
|
127
118
|
}
|
|
128
|
-
function
|
|
129
|
-
return `#
|
|
130
|
-
|
|
131
|
-
このドキュメントは制作開始時のヒアリング結果と、制作中に決まったことを記録する場所です。
|
|
132
|
-
**初回起動時、AI はユーザーに対話形式でヒアリングしてこのファイルを埋めてください**。
|
|
133
|
-
固定の順序ではなく、ユーザーの返答に応じて深掘り・追加質問・脱線からの拾い上げを自然に行ってください。
|
|
134
|
-
|
|
135
|
-
ヒアリングの大原則:
|
|
136
|
-
- ユーザーは Web 制作の専門家とは限らない。「コレクション」のような **管理画面側の用語** で聞かない。
|
|
137
|
-
- ユーザーが言葉にするのは「やりたいこと」「見せたいもの」「運用イメージ」。
|
|
138
|
-
そこから AI が **42ws の機能に翻訳して** 下の「AI による機能マッピング」欄に記録する。
|
|
139
|
-
- 翻訳結果はユーザーに見せて方向性の確認だけ取れば OK (中身の説明はしない)。
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## ユーザーが言ったこと (生の言葉のまま)
|
|
144
|
-
|
|
145
|
-
### サイトの用途・伝えたいこと
|
|
146
|
-
(未記入)
|
|
147
|
-
|
|
148
|
-
### 想定する読み手
|
|
149
|
-
(未記入)
|
|
150
|
-
|
|
151
|
-
### 雰囲気・好き / 嫌い
|
|
152
|
-
(未記入。例: 「ミニマルが好き」「○○みたいなサイトが理想」)
|
|
153
|
-
|
|
154
|
-
### 参考素材・ブランド資産
|
|
155
|
-
(未記入。URL、ロゴ、カラー、既存サイト、写真など)
|
|
156
|
-
|
|
157
|
-
### 運用イメージ
|
|
158
|
-
(未記入。例: 「実績は時々追加したい」「お知らせは月1で出す」「問い合わせは欲しい」)
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## AI による機能マッピング (ユーザーには見せず AI が判断)
|
|
163
|
-
|
|
164
|
-
ユーザーの回答から 42ws の機能要否を AI が翻訳する。判定根拠も短く添える。
|
|
165
|
-
|
|
166
|
-
- **問い合わせフォーム**: 未判定
|
|
167
|
-
- 判定根拠:
|
|
168
|
-
- **コレクション (繰り返しコンテンツ管理)**: 未判定
|
|
169
|
-
- 候補となるコンテンツ (該当があれば): お知らせ / 実績 / ブログ / メンバー紹介 / 商品一覧 / イベント …
|
|
170
|
-
- 判定根拠:
|
|
171
|
-
- **その他特殊な要件**: 未判定
|
|
119
|
+
function buildAgentGuide() {
|
|
120
|
+
return `# 42ws Site Project
|
|
172
121
|
|
|
173
|
-
|
|
122
|
+
このプロジェクトは [42ws](https://42ws.com) で公開されます。
|
|
174
123
|
|
|
175
|
-
##
|
|
176
|
-
(未記入。例: top / about / works / news / contact)
|
|
124
|
+
## 起動したら最初に(ヒアリング)
|
|
177
125
|
|
|
178
|
-
|
|
126
|
+
いきなり作り始めない。まずユーザーに**雑談ベースで**確認する(管理画面用語=「コレクション」等は使わない):
|
|
179
127
|
|
|
180
|
-
|
|
128
|
+
1. **参考サイト・好きなデザインはあるか**(URL / 「○○みたいな感じ」)— 最重要。トーンの当たりが付く
|
|
129
|
+
2. **原稿・素材はあるか**(文章、ロゴ、写真、既存サイト)— あればそれを使う、無ければ仮で起こして確認
|
|
130
|
+
3. サイトの用途・伝えたいこと・想定読者・運用イメージ(更新するもの/問い合わせの要否)
|
|
181
131
|
|
|
182
|
-
|
|
183
|
-
- ユーザーが「適当に」「お任せで」と言ったら、AI が仮置きで埋めて「この方向で進めますか?」と確認する
|
|
184
|
-
- 機能マッピングは AI の責任。ユーザーには結果だけ「こういう機能があるとできそうですが、いかがですか?」と方向確認
|
|
185
|
-
- 制作中に決まったこと・変わったことは随時このファイルを更新 (大きな変更はユーザーに確認した上で書き換え)
|
|
186
|
-
- このファイルが「制作の根拠」になる。コード生成時にここを参照して判断ブレを防ぐ
|
|
187
|
-
`;
|
|
188
|
-
}
|
|
189
|
-
function buildAgentGuide(opts) {
|
|
190
|
-
const briefSection = opts.hasBrief
|
|
191
|
-
? `## プロジェクト概要 (まず BRIEF.md を読む)
|
|
132
|
+
聞いた内容と決めたことは \`design.md\` に記録する(判断のブレ止め)。「適当に」と言われたら仮置きで埋め、方向だけ確認する。
|
|
192
133
|
|
|
193
|
-
|
|
134
|
+
## 使える機能を先に確認
|
|
194
135
|
|
|
195
|
-
|
|
136
|
+
\`npx @42ws/cli@latest whoami --json\` で**ログイン状態と契約プランの機能**(hosting / contact=フォーム / collection / customDomains)を確認する。
|
|
137
|
+
**使えない機能は提案しない**(例: フォーム不可のプランなら問い合わせフォームを設計に入れない)。未ログインなら先にログインを促す。
|
|
196
138
|
|
|
197
|
-
|
|
198
|
-
- ユーザーは Web 制作の専門家とは限らない。「コレクション使いますか?」のような **管理画面側の用語** での聞き方は禁止 (コレクションは 42ws 管理画面の用語で、初見のユーザーには通じない)。
|
|
199
|
-
- ユーザーは「やりたいこと」「見せたいもの」「運用イメージ」を言葉にする。
|
|
200
|
-
そこから AI が 42ws の機能に **翻訳** して BRIEF.md の「AI による機能マッピング」欄に記録する。
|
|
201
|
-
- 翻訳結果は方向性の確認だけ取る (中身の説明はしない。"こういう機能があるとできそうですが、いかがですか?")。
|
|
202
|
-
- 雑談ベースで OK。1 問ずつ機械的に聞かない。返答から次の質問を組み立てる。
|
|
203
|
-
- ユーザーが「適当に」「お任せで」と言ったら、AI が仮置きで埋めて方向性の確認だけ取る。
|
|
204
|
-
- 制作中に要件が変わったら BRIEF.md の更新提案を出して、ユーザー確認の上で書き換える。
|
|
139
|
+
## 制作前に必ず読む(オンライン・常に最新)
|
|
205
140
|
|
|
206
|
-
|
|
207
|
-
: '';
|
|
208
|
-
return `# 42ws Site Project
|
|
209
|
-
|
|
210
|
-
このプロジェクトは [42ws](https://42ws.com) で公開されます。
|
|
211
|
-
|
|
212
|
-
${briefSection}## 制作前に必ず読む(オンライン・常に最新)
|
|
141
|
+
ガイドは 42ws がオンラインで配信します。ローカルに古い規約を抱えないため、**作業前に毎回取得**してください:
|
|
213
142
|
|
|
214
143
|
ガイドは 42ws がオンラインで配信します。ローカルに古い規約を抱えないため、**作業前に毎回取得**してください:
|
|
215
144
|
|
|
@@ -218,7 +147,7 @@ ${briefSection}## 制作前に必ず読む(オンライン・常に最新)
|
|
|
218
147
|
|
|
219
148
|
## 設計を起こす(design.md)
|
|
220
149
|
|
|
221
|
-
|
|
150
|
+
上のヒアリング内容をもとに、**\`prompts get build\` の「7. 設計を先に起こす」の項目に沿って \`design.md\` を作成**し、ユーザーに方向確認を取ってから実装に入ってください(design.md の構造はオンライン規約が単一の真実。ローカルに雛形は置きません)。
|
|
222
151
|
|
|
223
152
|
## 作る → プレビュー → 公開
|
|
224
153
|
|
|
@@ -247,10 +176,10 @@ function shouldSkipExisting(file, marker) {
|
|
|
247
176
|
return false;
|
|
248
177
|
}
|
|
249
178
|
}
|
|
250
|
-
async function setupAgentGuides(cwd
|
|
179
|
+
async function setupAgentGuides(cwd) {
|
|
251
180
|
// CLAUDE.md (Claude Code) と AGENTS.md (codex 等) を生成。
|
|
252
181
|
// 既にあれば内容を確認、追記許可を取る。
|
|
253
|
-
const guide = buildAgentGuide(
|
|
182
|
+
const guide = buildAgentGuide();
|
|
254
183
|
const marker = '42ws Site Project'; // ヘッダ重複検知用
|
|
255
184
|
for (const fname of ['CLAUDE.md', 'AGENTS.md']) {
|
|
256
185
|
const fpath = join(cwd, fname);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAiBA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAwC5C"}
|
package/dist/commands/whoami.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { loadConfig } from '../lib/config.js';
|
|
1
|
+
import { loadConfig, deriveDomains } from '../lib/config.js';
|
|
2
2
|
import { apiRequest, ApiError } from '../lib/api.js';
|
|
3
|
-
import { successMessage, error } from '../lib/output.js';
|
|
3
|
+
import { successMessage, error, isJsonMode } from '../lib/output.js';
|
|
4
4
|
export async function whoami() {
|
|
5
5
|
const config = loadConfig();
|
|
6
6
|
if (!config.token) {
|
|
@@ -25,6 +25,17 @@ export async function whoami() {
|
|
|
25
25
|
}
|
|
26
26
|
process.exit(1);
|
|
27
27
|
}
|
|
28
|
+
const { sitesHost } = deriveDomains(config.apiUrl);
|
|
29
|
+
if (isJsonMode()) {
|
|
30
|
+
successMessage(JSON.stringify({ ok: true, userId: me.userId, email: me.email, apiUrl: config.apiUrl, sitesHost, license: me.license ?? null }));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
28
33
|
successMessage(me.email ?? me.userId);
|
|
34
|
+
successMessage(`接続先: ${config.apiUrl}(公開ドメイン *.${sitesHost})`);
|
|
35
|
+
const lic = me.license;
|
|
36
|
+
if (lic) {
|
|
37
|
+
const on = (b) => (b ? '✓' : '×');
|
|
38
|
+
successMessage(`プラン機能: ホスティング ${on(lic.hosting)} / フォーム ${on(lic.contact)} / コレクション ${on(lic.collection)} / 独自ドメイン ${on(lic.customDomains)}`);
|
|
39
|
+
}
|
|
29
40
|
}
|
|
30
41
|
//# sourceMappingURL=whoami.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAerE,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,CACH,eAAe,EACf,wBAAwB,EACxB,wDAAwD,CACzD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,EAAc,CAAC;IACnB,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,UAAU,CAAa,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACzD,KAAK,CAAC,eAAe,EAAE,2BAA2B,EAAE,sCAAsC,CAAC,CAAC;YAC9F,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,eAAe,EAAE,wBAAwB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,iCAAiC,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QAChJ,OAAO;IACT,CAAC;IACD,cAAc,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IACtC,cAAc,CAAC,QAAQ,MAAM,CAAC,MAAM,aAAa,SAAS,GAAG,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;IACvB,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,EAAE,GAAG,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,cAAc,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAChJ,CAAC;AACH,CAAC"}
|