seamless-cli 0.10.2 → 0.11.0
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 +197 -29
- package/dist/commands/apps.js +147 -0
- package/dist/commands/apps.js.map +1 -0
- package/dist/commands/config.js +16 -15
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/help.js +65 -187
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/helpTopics.js +376 -0
- package/dist/commands/helpTopics.js.map +1 -0
- package/dist/commands/init.js +295 -76
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/instanceLogin.js +55 -0
- package/dist/commands/instanceLogin.js.map +1 -0
- package/dist/commands/login.js +42 -80
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +18 -8
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/org.js +5 -4
- package/dist/commands/org.js.map +1 -1
- package/dist/commands/profile.js +29 -2
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/sessions.js +9 -7
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/templates.js +58 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/commands/users.js +9 -7
- package/dist/commands/users.js.map +1 -1
- package/dist/commands/verify.js +5 -2
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/whoami.js +13 -5
- package/dist/commands/whoami.js.map +1 -1
- package/dist/core/args.js +11 -0
- package/dist/core/args.js.map +1 -1
- package/dist/core/authClient.js +29 -6
- package/dist/core/authClient.js.map +1 -1
- package/dist/core/cancel.js +32 -0
- package/dist/core/cancel.js.map +1 -0
- package/dist/core/config.js +45 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/confirmAction.js +26 -0
- package/dist/core/confirmAction.js.map +1 -0
- package/dist/core/images.js +3 -3
- package/dist/core/interactiveLogin.js +72 -0
- package/dist/core/interactiveLogin.js.map +1 -0
- package/dist/core/output.js +23 -9
- package/dist/core/output.js.map +1 -1
- package/dist/core/portal.js +112 -8
- package/dist/core/portal.js.map +1 -1
- package/dist/core/templates.js +10 -0
- package/dist/core/templates.js.map +1 -1
- package/dist/core/tty.js +25 -0
- package/dist/core/tty.js.map +1 -0
- package/dist/generators/auth/auth.js +8 -7
- package/dist/generators/auth/auth.js.map +1 -1
- package/dist/generators/docker/docker.js +27 -21
- package/dist/generators/docker/docker.js.map +1 -1
- package/dist/index.js +89 -21
- package/dist/index.js.map +1 -1
- package/dist/prompts/appSelect.js +16 -10
- package/dist/prompts/appSelect.js.map +1 -1
- package/dist/prompts/initMode.js +77 -0
- package/dist/prompts/initMode.js.map +1 -0
- package/dist/prompts/oauthSetup.js +4 -3
- package/dist/prompts/oauthSetup.js.map +1 -1
- package/dist/prompts/projectSetup.js +77 -50
- package/dist/prompts/projectSetup.js.map +1 -1
- package/dist/testSetup.js +9 -0
- package/dist/testSetup.js.map +1 -0
- package/package.json +1 -1
- package/verify/adapter-app/package.json +1 -1
- package/verify/docker-compose.verify.yml +4 -3
- package/verify/harness/api/ownerAdmin.spec.ts +24 -0
- package/verify/harness/lib/env.ts +3 -4
- package/verify/harness/lib/flows.ts +1 -36
- package/verify/harness/playwright.config.ts +8 -3
- package/dist/commands/bootstrapAdmin.js +0 -96
- package/dist/commands/bootstrapAdmin.js.map +0 -1
- package/dist/core/bootstrapSecret.js +0 -39
- package/dist/core/bootstrapSecret.js.map +0 -1
- package/verify/harness/api/adminBootstrap.spec.ts +0 -34
package/dist/commands/init.js
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import fs from "fs";
|
|
3
|
-
import { confirm
|
|
3
|
+
import { confirm } from "@clack/prompts";
|
|
4
4
|
import kleur from "kleur";
|
|
5
|
-
import { runProjectSetupPrompts, runManagedTemplatePrompts, } from "../prompts/projectSetup.js";
|
|
5
|
+
import { runProjectSetupPrompts, runManagedTemplatePrompts, ADMIN_MODES, AUTH_MODES, } from "../prompts/projectSetup.js";
|
|
6
6
|
import { generateAuthServer } from "../generators/auth/auth.js";
|
|
7
7
|
import { generateDockerCompose } from "../generators/docker/docker.js";
|
|
8
8
|
import { printManagedSuccessOutput, printSuccessOutput, } from "../core/output.js";
|
|
9
9
|
import { generateSeamlessConfig } from "../generators/config/config.js";
|
|
10
|
-
import { applyTemplateEnv, assertCliSupports, openTemplateSource, } from "../core/templates.js";
|
|
10
|
+
import { applyTemplateEnv, assertCliSupports, matchesTemplateFlag, openTemplateSource, templateFlags, } from "../core/templates.js";
|
|
11
11
|
import { runOAuthSetupPrompts } from "../prompts/oauthSetup.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
12
|
+
import { chooseExistingDirectoryAction, chooseScaffoldTarget, confirmLocalFallback, } from "../prompts/initMode.js";
|
|
13
|
+
import { CancelledError, orCancel } from "../core/cancel.js";
|
|
14
|
+
import { requireInteractive, warnOnUnusableWidth } from "../core/tty.js";
|
|
15
|
+
import { createPortalClient, ReauthRequiredError, } from "../core/authClient.js";
|
|
16
|
+
import { getPortalSession, normalizeInstanceUrl } from "../core/config.js";
|
|
14
17
|
import { parseEnv, writeEnv } from "../core/env.js";
|
|
15
18
|
import { generateSecret } from "../core/secrets.js";
|
|
16
|
-
import { listApplications, rotateServiceToken, } from "../core/portal.js";
|
|
19
|
+
import { buildScaffoldDatabaseUrl, getApplicationDatabase, listApplications, rotateServiceToken, } from "../core/portal.js";
|
|
17
20
|
import { selectApplication } from "../prompts/appSelect.js";
|
|
18
21
|
const AUTH_SERVER_URL = "http://localhost:5312";
|
|
19
22
|
const API_URL = "http://localhost:3000";
|
|
@@ -23,22 +26,87 @@ const API_URL = "http://localhost:3000";
|
|
|
23
26
|
const MANAGED_JWKS_KID = "dev-main";
|
|
24
27
|
export async function runCLI(projectName, aliases = [], opts = {}) {
|
|
25
28
|
const cwd = process.cwd();
|
|
29
|
+
// Managed connect now reads the portal session, so a profile no longer selects
|
|
30
|
+
// anything here. Warn rather than silently ignoring it.
|
|
31
|
+
// TODO(#125): drop the flag one minor version after release.
|
|
32
|
+
if (opts.profileFlag) {
|
|
33
|
+
console.log(kleur.yellow("init no longer takes --profile; managed connect uses your portal session. Run: seamless login"));
|
|
34
|
+
}
|
|
35
|
+
if (!opts.yes) {
|
|
36
|
+
warnOnUnusableWidth((message) => console.log(kleur.yellow(message)));
|
|
37
|
+
}
|
|
38
|
+
const openSource = lazyTemplateSource();
|
|
39
|
+
// Every flag is validated against the registry and the known values before a
|
|
40
|
+
// directory is created and before the overwrite confirmation runs, so a bad
|
|
41
|
+
// flag can never reach a destructive prompt on its way to an error. The
|
|
42
|
+
// registry is only fetched when a template flag needs resolving, which keeps
|
|
43
|
+
// the integrate-an-existing-project path from paying for one it never reads.
|
|
44
|
+
const answers = resolveAnswerFlags(opts);
|
|
45
|
+
if (aliases.length > 0 || opts.web || opts.api) {
|
|
46
|
+
const { registry } = await openSource();
|
|
47
|
+
Object.assign(answers, resolveTemplateSelection(aliases, opts, registry.templates));
|
|
48
|
+
}
|
|
26
49
|
let root = cwd;
|
|
50
|
+
// Only ever set to a directory mkdir just created, never one that already
|
|
51
|
+
// existed, so discarding it can never take a developer's own files with it.
|
|
52
|
+
let created = null;
|
|
27
53
|
if (projectName) {
|
|
28
54
|
root = path.join(cwd, projectName);
|
|
29
55
|
if (fs.existsSync(root)) {
|
|
30
56
|
throw new Error(`Directory already exists: ${projectName}`);
|
|
31
57
|
}
|
|
32
58
|
fs.mkdirSync(root);
|
|
59
|
+
created = root;
|
|
33
60
|
console.log(`Creating project in ${root}`);
|
|
34
61
|
}
|
|
35
|
-
//
|
|
36
|
-
//
|
|
37
|
-
//
|
|
62
|
+
// Ctrl-C inside a prompt comes back as a CancelledError and unwinds through
|
|
63
|
+
// the catch below, but during a download or a git clone it arrives as a real
|
|
64
|
+
// signal that would otherwise end the process with the husk still on disk.
|
|
65
|
+
const onInterrupt = () => {
|
|
66
|
+
discard(created);
|
|
67
|
+
process.exit(130);
|
|
68
|
+
};
|
|
69
|
+
if (created)
|
|
70
|
+
process.on("SIGINT", onInterrupt);
|
|
71
|
+
try {
|
|
72
|
+
await scaffold(root, projectName, answers, openSource, opts);
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
// Anything short of a completed scaffold leaves nothing behind, so a retry
|
|
76
|
+
// is not blocked by "Directory already exists" from a half-built attempt.
|
|
77
|
+
discard(created);
|
|
78
|
+
throw err;
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
if (created)
|
|
82
|
+
process.off("SIGINT", onInterrupt);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Opens the template source at most once per run. Validating flags up front and
|
|
86
|
+
// scaffolding both need the registry, and the remote source refetches it on
|
|
87
|
+
// every open.
|
|
88
|
+
function lazyTemplateSource() {
|
|
89
|
+
let pending = null;
|
|
90
|
+
return () => (pending ??= openTemplateSource());
|
|
91
|
+
}
|
|
92
|
+
function discard(dir) {
|
|
93
|
+
if (!dir)
|
|
94
|
+
return;
|
|
95
|
+
try {
|
|
96
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// The original failure is what the developer needs to see; a cleanup error
|
|
100
|
+
// on top of it would only bury the cause.
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function scaffold(root, projectName, preselect, openSource, opts) {
|
|
104
|
+
// --local forces the self-hosted stack without asking the control plane
|
|
105
|
+
// anything.
|
|
38
106
|
let client = null;
|
|
39
107
|
let fallbackReason = null;
|
|
40
108
|
if (!opts.local) {
|
|
41
|
-
const resolution = await resolveManagedClient(
|
|
109
|
+
const resolution = await resolveManagedClient();
|
|
42
110
|
client = resolution.client;
|
|
43
111
|
if (!client)
|
|
44
112
|
fallbackReason = resolution.reason;
|
|
@@ -50,29 +118,99 @@ export async function runCLI(projectName, aliases = [], opts = {}) {
|
|
|
50
118
|
? "Could not reach the Seamless control plane to connect a managed instance. Check your connection, or re-run with --local to scaffold a self-hosted stack."
|
|
51
119
|
: "--app was given but you are not logged in. Run `seamless login` to connect a managed instance, or drop --app to scaffold a local project.");
|
|
52
120
|
}
|
|
121
|
+
// Whether managed is even possible is settled before the first prompt, so a
|
|
122
|
+
// session with nothing to connect never costs a round of questions first.
|
|
123
|
+
const allApps = client ? await listApplications(client) : [];
|
|
124
|
+
const apps = connectable(allApps);
|
|
125
|
+
const canConnect = client !== null && apps.length > 0;
|
|
53
126
|
const isEmpty = fs.readdirSync(root).length === 0;
|
|
54
127
|
if (!isEmpty) {
|
|
55
|
-
|
|
56
|
-
|
|
128
|
+
// --app is explicit managed intent, so it skips the question and integrates.
|
|
129
|
+
const action = opts.appId
|
|
130
|
+
? "integrate"
|
|
131
|
+
: await resolveExistingDirectoryAction(canConnect, opts);
|
|
132
|
+
if (action === "integrate") {
|
|
133
|
+
await integrateExistingProject(root, client, apps, opts);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (canConnect) {
|
|
138
|
+
const target = opts.appId
|
|
139
|
+
? "managed"
|
|
140
|
+
: await resolveScaffoldTarget(apps.length, opts);
|
|
141
|
+
if (target === "managed") {
|
|
142
|
+
await scaffoldManaged(root, projectName, preselect, openSource, client, apps, opts);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
57
145
|
}
|
|
58
|
-
if (client) {
|
|
59
|
-
|
|
146
|
+
else if (client) {
|
|
147
|
+
console.log(kleur.yellow(noConnectableMessage(allApps.length > 0)));
|
|
60
148
|
}
|
|
61
|
-
else {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
149
|
+
else if (fallbackReason === "unreachable") {
|
|
150
|
+
// Falling back to local changes where the project's auth lives, so --yes
|
|
151
|
+
// does not get to make that call on its own; --local says it outright.
|
|
152
|
+
if (opts.yes) {
|
|
153
|
+
throw new Error("Could not reach the Seamless control plane, and --yes will not silently scaffold a local stack instead. Re-run with --local to scaffold self-hosted.");
|
|
66
154
|
}
|
|
67
|
-
|
|
155
|
+
requireInteractive("Could not reach the Seamless control plane. Scaffold a local stack instead?", "Pass --local to scaffold a self-hosted stack.");
|
|
156
|
+
await confirmLocalFallback();
|
|
157
|
+
}
|
|
158
|
+
else if (fallbackReason === "no-session") {
|
|
159
|
+
console.log(kleur.yellow("Not logged in; scaffolding a local project. Run `seamless login` first to connect a managed instance."));
|
|
160
|
+
}
|
|
161
|
+
await scaffoldLocal(root, projectName, preselect, openSource, opts);
|
|
162
|
+
}
|
|
163
|
+
// Writing starter files over a directory someone already has work in is the one
|
|
164
|
+
// destructive step in a scaffold, so --yes is deliberately not enough to reach
|
|
165
|
+
// it. --force is, and it says nothing about the integrate-or-scaffold question,
|
|
166
|
+
// which --app answers instead.
|
|
167
|
+
async function resolveExistingDirectoryAction(canConnect, opts) {
|
|
168
|
+
if (!opts.yes) {
|
|
169
|
+
requireInteractive("This directory is not empty. What would you like to do?", "Pass --yes --force to scaffold here anyway, or --app <id> to connect the existing project to a managed application.");
|
|
170
|
+
return chooseExistingDirectoryAction(canConnect);
|
|
171
|
+
}
|
|
172
|
+
if (!opts.force) {
|
|
173
|
+
throw new Error("This directory is not empty, and starter files overwrite anything with the same name. Re-run with --force to scaffold here anyway, or with --app <id> to connect the existing project to a managed application.");
|
|
174
|
+
}
|
|
175
|
+
console.log(kleur.yellow("Scaffolding into a directory that is not empty (--force)."));
|
|
176
|
+
return "scaffold";
|
|
177
|
+
}
|
|
178
|
+
// Managed or local decides where the project's auth lives for good, so --yes
|
|
179
|
+
// alone will not pick: --app <id> means managed and --local means self-hosted.
|
|
180
|
+
async function resolveScaffoldTarget(appCount, opts) {
|
|
181
|
+
if (!opts.yes) {
|
|
182
|
+
requireInteractive("How should this project get its auth?", "Pass --app <id> to connect a managed application, or --local to scaffold a self-hosted stack.");
|
|
183
|
+
return chooseScaffoldTarget(appCount);
|
|
184
|
+
}
|
|
185
|
+
throw new Error("You are logged in, so --yes will not guess between a managed application and a local stack. Pass --app <id> to connect one of your managed applications, or --local to scaffold a self-hosted stack.");
|
|
186
|
+
}
|
|
187
|
+
// The bundled database as a connection string with placeholder credentials, or
|
|
188
|
+
// an empty string when the control plane has not provisioned one yet. Never
|
|
189
|
+
// requests ?reveal=true, so no live credential reaches this machine.
|
|
190
|
+
async function resolveDatabaseUrl(client, app) {
|
|
191
|
+
const database = await getApplicationDatabase(client, app.id);
|
|
192
|
+
if (!database) {
|
|
193
|
+
console.log(kleur.yellow(`No managed database is available for "${app.name}" yet. Set DATABASE_URL in api/.env once it finishes provisioning.`));
|
|
194
|
+
return "";
|
|
68
195
|
}
|
|
196
|
+
return buildScaffoldDatabaseUrl(database);
|
|
197
|
+
}
|
|
198
|
+
// The old message told an account whose only application was still provisioning
|
|
199
|
+
// that it had none and should create one.
|
|
200
|
+
function noConnectableMessage(hasProvisioning) {
|
|
201
|
+
return hasProvisioning
|
|
202
|
+
? "Your managed applications are still provisioning, so there is nothing to connect to yet. Scaffolding a local project instead."
|
|
203
|
+
: "Your account has no managed applications yet (create one at https://dashboard.seamlessauth.com). Scaffolding a local project instead.";
|
|
69
204
|
}
|
|
70
|
-
// Resolves an authenticated control-plane client
|
|
71
|
-
// ("no-session") and an unreachable/errored control plane
|
|
72
|
-
// yield a null client so init can fall back to local (or,
|
|
73
|
-
|
|
205
|
+
// Resolves an authenticated control-plane client from the portal session. A
|
|
206
|
+
// missing session ("no-session") and an unreachable/errored control plane
|
|
207
|
+
// ("unreachable") both yield a null client so init can fall back to local (or,
|
|
208
|
+
// with --app, error). Instance profiles are deliberately not consulted: a session
|
|
209
|
+
// for an auth instance the developer administers says nothing about whether they
|
|
210
|
+
// have a managed account, and sending its token to the control plane would fail.
|
|
211
|
+
async function resolveManagedClient() {
|
|
74
212
|
try {
|
|
75
|
-
return { client: await
|
|
213
|
+
return { client: await createPortalClient(), reason: null };
|
|
76
214
|
}
|
|
77
215
|
catch (err) {
|
|
78
216
|
if (err instanceof ReauthRequiredError) {
|
|
@@ -81,17 +219,13 @@ async function resolveManagedClient(profileFlag) {
|
|
|
81
219
|
return { client: null, reason: "unreachable" };
|
|
82
220
|
}
|
|
83
221
|
}
|
|
84
|
-
async function scaffoldManaged(root, projectName,
|
|
85
|
-
const source = await
|
|
86
|
-
const
|
|
87
|
-
const answers = await runManagedTemplatePrompts(source.registry.templates, preselect);
|
|
222
|
+
async function scaffoldManaged(root, projectName, preselect, openSource, client, apps, opts) {
|
|
223
|
+
const source = await openSource();
|
|
224
|
+
const answers = await runManagedTemplatePrompts(source.registry.templates, preselect, opts.yes);
|
|
88
225
|
const selected = await resolveSelectedTemplates(source, answers.webTemplateId, answers.apiTemplateId, root);
|
|
89
226
|
// Resolve the target application before writing files, so a cancelled selection
|
|
90
227
|
// or an authorization failure leaves nothing behind.
|
|
91
|
-
const apps = await listApplications(client);
|
|
92
228
|
const app = await selectApplication(apps, opts.appId);
|
|
93
|
-
if (!app)
|
|
94
|
-
return;
|
|
95
229
|
// Copy templates before rotating the service token. Rotation invalidates the
|
|
96
230
|
// app's previous token (see rotateServiceToken), so it runs as late as possible;
|
|
97
231
|
// copyInto is the likeliest step to fail, so it happens first, before rotation.
|
|
@@ -99,9 +233,11 @@ async function scaffoldManaged(root, projectName, aliases, client, opts) {
|
|
|
99
233
|
console.log(`Adding ${entry.label} starter...`);
|
|
100
234
|
await source.copyInto(entry, dir);
|
|
101
235
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
236
|
+
// Read before rotating: a database that is not provisioned yet is a warning,
|
|
237
|
+
// not a failure, and finding that out after the token is rotated would mean
|
|
238
|
+
// reporting it against a half-wired project.
|
|
239
|
+
const databaseUrl = await resolveDatabaseUrl(client, app);
|
|
240
|
+
const serviceToken = await issueServiceToken(client, app, opts);
|
|
105
241
|
const authServerUrl = normalizeInstanceUrl(app.domain);
|
|
106
242
|
// Everything past rotation is guarded: if it throws, the freshly issued token is
|
|
107
243
|
// printed so a deployed app can be re-wired rather than left bricked (the control
|
|
@@ -115,6 +251,7 @@ async function scaffoldManaged(root, projectName, aliases, client, opts) {
|
|
|
115
251
|
// A managed instance hosts its own dashboard, so the app API does not proxy
|
|
116
252
|
// the console. Keeps the template's SERVE_ADMIN_CONSOLE gate off.
|
|
117
253
|
serveAdminConsole: "false",
|
|
254
|
+
databaseUrl,
|
|
118
255
|
};
|
|
119
256
|
for (const { manifest, dir } of selected) {
|
|
120
257
|
applyTemplateEnv(dir, manifest, ctx);
|
|
@@ -139,6 +276,7 @@ async function scaffoldManaged(root, projectName, aliases, client, opts) {
|
|
|
139
276
|
apiFramework: apiEntry.framework,
|
|
140
277
|
authServerUrl,
|
|
141
278
|
appName: app.name,
|
|
279
|
+
databaseUrl,
|
|
142
280
|
});
|
|
143
281
|
}
|
|
144
282
|
catch (err) {
|
|
@@ -147,17 +285,24 @@ async function scaffoldManaged(root, projectName, aliases, client, opts) {
|
|
|
147
285
|
throw err;
|
|
148
286
|
}
|
|
149
287
|
}
|
|
150
|
-
async function scaffoldLocal(root, projectName,
|
|
151
|
-
const source = await
|
|
152
|
-
const
|
|
153
|
-
const answers = await runProjectSetupPrompts(source.registry.templates, preselect);
|
|
288
|
+
async function scaffoldLocal(root, projectName, preselect, openSource, opts) {
|
|
289
|
+
const source = await openSource();
|
|
290
|
+
const answers = await runProjectSetupPrompts(source.registry.templates, preselect, getPortalSession()?.email, opts.yes);
|
|
154
291
|
const selected = await resolveSelectedTemplates(source, answers.webTemplateId, answers.apiTemplateId, root);
|
|
155
292
|
// Templates can opt into OAuth setup (manifest setup.oauth). Collect providers now,
|
|
156
293
|
// before scaffolding, so the auth server can be wired up with them below.
|
|
294
|
+
// Provider credentials are per-provider secrets with no flag form, so --yes
|
|
295
|
+
// scaffolds the starter with none configured rather than asking.
|
|
157
296
|
const webSelection = selected.find((s) => s.entry.kind === "web");
|
|
158
297
|
let oauthProviders = [];
|
|
159
298
|
if (webSelection?.manifest.setup?.oauth) {
|
|
160
|
-
|
|
299
|
+
if (opts.yes) {
|
|
300
|
+
console.log(kleur.yellow("Skipping OAuth provider setup (--yes). Add providers later with `seamless config oauth-providers add`."));
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
requireInteractive("Which OAuth providers would you like to configure?", "Pass --yes to scaffold with none configured, then add them with `seamless config oauth-providers add`.");
|
|
304
|
+
oauthProviders = await runOAuthSetupPrompts();
|
|
305
|
+
}
|
|
161
306
|
}
|
|
162
307
|
for (const { entry, dir } of selected) {
|
|
163
308
|
console.log(`Adding ${entry.label} starter...`);
|
|
@@ -165,13 +310,14 @@ async function scaffoldLocal(root, projectName, aliases) {
|
|
|
165
310
|
}
|
|
166
311
|
let sharedConfig = {};
|
|
167
312
|
if (answers.authMode === "local") {
|
|
168
|
-
sharedConfig = await generateAuthServer({ root }, "local", oauthProviders, answers.adminMode);
|
|
313
|
+
sharedConfig = await generateAuthServer({ root }, "local", oauthProviders, answers.adminMode, answers.ownerEmail);
|
|
169
314
|
}
|
|
170
315
|
if (answers.useDocker) {
|
|
171
316
|
const dockerShared = await generateDockerCompose(root, {
|
|
172
317
|
authMode: answers.authMode,
|
|
173
318
|
adminMode: answers.adminMode,
|
|
174
319
|
oauth: oauthProviders,
|
|
320
|
+
ownerEmail: answers.ownerEmail,
|
|
175
321
|
});
|
|
176
322
|
if (answers.authMode === "docker") {
|
|
177
323
|
sharedConfig = dockerShared;
|
|
@@ -183,6 +329,9 @@ async function scaffoldLocal(root, projectName, aliases) {
|
|
|
183
329
|
apiToken: sharedConfig.apiToken,
|
|
184
330
|
jwksKid: sharedConfig.kid,
|
|
185
331
|
serveAdminConsole: answers.adminMode === "api" ? "true" : "false",
|
|
332
|
+
// The local stack runs its own postgres from the compose file, which the
|
|
333
|
+
// starter reaches through its discrete DB_* values.
|
|
334
|
+
databaseUrl: "",
|
|
186
335
|
};
|
|
187
336
|
for (const { manifest, dir } of selected) {
|
|
188
337
|
applyTemplateEnv(dir, manifest, ctx);
|
|
@@ -204,6 +353,7 @@ async function scaffoldLocal(root, projectName, aliases) {
|
|
|
204
353
|
authMode: answers.authMode,
|
|
205
354
|
useDocker: answers.useDocker,
|
|
206
355
|
adminMode: answers.adminMode,
|
|
356
|
+
ownerEmail: answers.ownerEmail,
|
|
207
357
|
});
|
|
208
358
|
printOAuthNextSteps(oauthProviders);
|
|
209
359
|
}
|
|
@@ -211,22 +361,13 @@ async function scaffoldLocal(root, projectName, aliases) {
|
|
|
211
361
|
// scaffolded repo without re-generating source. Kept intentionally small, it
|
|
212
362
|
// updates api/.env when an api directory exists and otherwise prints the values
|
|
213
363
|
// to paste in by hand.
|
|
214
|
-
async function integrateExistingProject(root, client, opts) {
|
|
215
|
-
if (!client) {
|
|
216
|
-
console.log("Existing project detected.");
|
|
217
|
-
console.log("Log in first to connect it to a managed instance: " +
|
|
218
|
-
kleur.cyan("seamless login") +
|
|
219
|
-
".");
|
|
220
|
-
console.log(kleur.dim("Run init in an empty directory to scaffold a new local project."));
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
const apps = await listApplications(client);
|
|
364
|
+
async function integrateExistingProject(root, client, apps, opts) {
|
|
224
365
|
const app = await selectApplication(apps, opts.appId);
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
366
|
+
// Read before rotating: a database that is not provisioned yet is a warning,
|
|
367
|
+
// not a failure, and finding that out after the token is rotated would mean
|
|
368
|
+
// reporting it against a half-wired project.
|
|
369
|
+
const databaseUrl = await resolveDatabaseUrl(client, app);
|
|
370
|
+
const serviceToken = await issueServiceToken(client, app, opts);
|
|
230
371
|
const authServerUrl = normalizeInstanceUrl(app.domain);
|
|
231
372
|
const apiDir = path.join(root, "api");
|
|
232
373
|
if (!fs.existsSync(apiDir)) {
|
|
@@ -236,7 +377,7 @@ async function integrateExistingProject(root, client, opts) {
|
|
|
236
377
|
// The token is already rotated (old one invalidated); if the write fails, print
|
|
237
378
|
// it so the app can be re-wired by hand rather than left bricked.
|
|
238
379
|
try {
|
|
239
|
-
wireApiEnv(apiDir, authServerUrl, serviceToken);
|
|
380
|
+
wireApiEnv(apiDir, authServerUrl, serviceToken, databaseUrl);
|
|
240
381
|
}
|
|
241
382
|
catch (err) {
|
|
242
383
|
console.error(kleur.red("\nFailed to write api/.env after issuing a new service token. Set it by hand to recover:"));
|
|
@@ -249,7 +390,7 @@ async function integrateExistingProject(root, client, opts) {
|
|
|
249
390
|
}
|
|
250
391
|
// Merges the managed auth values into an existing api/.env, preserving any keys
|
|
251
392
|
// already there and keeping (or generating) a cookie signing key.
|
|
252
|
-
function wireApiEnv(apiDir, authServerUrl, serviceToken) {
|
|
393
|
+
function wireApiEnv(apiDir, authServerUrl, serviceToken, databaseUrl) {
|
|
253
394
|
const envPath = path.join(apiDir, ".env");
|
|
254
395
|
const values = fs.existsSync(envPath) ? parseEnv(envPath) : {};
|
|
255
396
|
values.AUTH_SERVER_URL = authServerUrl;
|
|
@@ -257,6 +398,11 @@ function wireApiEnv(apiDir, authServerUrl, serviceToken) {
|
|
|
257
398
|
values.JWKS_KID = values.JWKS_KID || MANAGED_JWKS_KID;
|
|
258
399
|
values.COOKIE_SIGNING_KEY =
|
|
259
400
|
values.COOKIE_SIGNING_KEY || generateSecret(32);
|
|
401
|
+
// Never overwritten: an existing project may already hold a working
|
|
402
|
+
// connection string, credentials and all, and this one carries placeholders.
|
|
403
|
+
if (databaseUrl && !values.DATABASE_URL) {
|
|
404
|
+
values.DATABASE_URL = databaseUrl;
|
|
405
|
+
}
|
|
260
406
|
fs.mkdirSync(apiDir, { recursive: true });
|
|
261
407
|
writeEnv(envPath, values);
|
|
262
408
|
}
|
|
@@ -270,21 +416,38 @@ function printManagedValues(authServerUrl, serviceToken) {
|
|
|
270
416
|
console.log(kleur.dim("server URL on your frontend, then sign in to verify.\n"));
|
|
271
417
|
}
|
|
272
418
|
// Issues the app's service token, confirming first when one already exists so a
|
|
273
|
-
// scaffold does not silently break an app that is already deployed.
|
|
274
|
-
//
|
|
275
|
-
async function issueServiceToken(client, app) {
|
|
419
|
+
// scaffold does not silently break an app that is already deployed. Declining
|
|
420
|
+
// cancels the whole command, so nothing is left half-wired.
|
|
421
|
+
async function issueServiceToken(client, app, opts) {
|
|
276
422
|
if (app.hasServiceToken) {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
423
|
+
// Rotation breaks whatever is running on the old token, so it is a
|
|
424
|
+
// destructive confirmation like the overwrite one: --yes does not answer it,
|
|
425
|
+
// --force does.
|
|
426
|
+
if (opts.yes) {
|
|
427
|
+
if (!opts.force) {
|
|
428
|
+
throw new Error(`"${app.name}" already has a service token, and issuing a new one invalidates it (breaking anything already deployed with it). Re-run with --force to rotate it anyway.`);
|
|
429
|
+
}
|
|
430
|
+
console.log(kleur.yellow(`Rotating the existing service token for "${app.name}" (--force).`));
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
requireInteractive(`"${app.name}" already has a service token. Issue a new one?`, "Pass --force to rotate it, which invalidates the existing token.");
|
|
434
|
+
const proceed = orCancel(await confirm({
|
|
435
|
+
message: `"${app.name}" already has a service token. Issuing a new one invalidates the existing token. Continue?`,
|
|
436
|
+
initialValue: false,
|
|
437
|
+
}));
|
|
438
|
+
if (!proceed) {
|
|
439
|
+
throw new CancelledError("Cancelled. No token was issued.");
|
|
440
|
+
}
|
|
284
441
|
}
|
|
285
442
|
}
|
|
286
443
|
return rotateServiceToken(client, app.id);
|
|
287
444
|
}
|
|
445
|
+
// listApplications reports applications that have not finished provisioning too,
|
|
446
|
+
// because `seamless apps list` has to show them. Managed connect needs an auth
|
|
447
|
+
// server to point at, so it keeps considering only the ones that have one.
|
|
448
|
+
function connectable(apps) {
|
|
449
|
+
return apps.filter((app) => !!app.domain);
|
|
450
|
+
}
|
|
288
451
|
// Resolves the chosen templates (reading their manifests and asserting CLI
|
|
289
452
|
// support) before any files are written, so every prompt finishes first.
|
|
290
453
|
async function resolveSelectedTemplates(source, webTemplateId, apiTemplateId, root) {
|
|
@@ -327,19 +490,75 @@ function printOAuthNextSteps(providers) {
|
|
|
327
490
|
}
|
|
328
491
|
console.log(" Register this redirect URI with each provider: http://localhost:5173/oauth/callback");
|
|
329
492
|
}
|
|
330
|
-
//
|
|
331
|
-
//
|
|
332
|
-
//
|
|
333
|
-
function
|
|
493
|
+
// The non-template answers a flag can supply. Validated here so an unusable
|
|
494
|
+
// value is reported before anything is created, and so the prompts only ever
|
|
495
|
+
// see a value they would have accepted themselves.
|
|
496
|
+
function resolveAnswerFlags(opts) {
|
|
497
|
+
const answers = {};
|
|
498
|
+
if (opts.email !== undefined) {
|
|
499
|
+
if (!opts.email.includes("@")) {
|
|
500
|
+
throw new Error(`--email must be an email address, got "${opts.email}".`);
|
|
501
|
+
}
|
|
502
|
+
answers.ownerEmail = opts.email;
|
|
503
|
+
}
|
|
504
|
+
if (opts.auth !== undefined) {
|
|
505
|
+
answers.authMode = oneOf(opts.auth, AUTH_MODES, "--auth");
|
|
506
|
+
}
|
|
507
|
+
if (opts.admin !== undefined) {
|
|
508
|
+
answers.adminMode = oneOf(opts.admin, ADMIN_MODES, "--admin");
|
|
509
|
+
}
|
|
510
|
+
return answers;
|
|
511
|
+
}
|
|
512
|
+
function oneOf(value, allowed, flag) {
|
|
513
|
+
if (!allowed.includes(value)) {
|
|
514
|
+
throw new Error(`Unknown value "${value}" for ${flag}. Expected one of: ${allowed.join(", ")}.`);
|
|
515
|
+
}
|
|
516
|
+
return value;
|
|
517
|
+
}
|
|
518
|
+
// Combines the template flags: the bare `--<id>` / `--<alias>` form, which infers
|
|
519
|
+
// the layer from the registry, and the explicit `--web=` / `--api=` form, which
|
|
520
|
+
// names it. Both accept either spelling, and disagreeing about a layer is an
|
|
521
|
+
// error rather than a silent last-one-wins.
|
|
522
|
+
function resolveTemplateSelection(aliases, opts, templates) {
|
|
523
|
+
const preselect = resolveTemplateAliases(aliases, templates);
|
|
524
|
+
for (const [flag, kind] of [
|
|
525
|
+
["web", "web"],
|
|
526
|
+
["api", "api"],
|
|
527
|
+
]) {
|
|
528
|
+
const value = opts[flag];
|
|
529
|
+
if (!value)
|
|
530
|
+
continue;
|
|
531
|
+
const named = value.replace(/^--+/, "");
|
|
532
|
+
const { webTemplateId, apiTemplateId } = resolveTemplateAliases([named], templates);
|
|
533
|
+
const id = kind === "web" ? webTemplateId : apiTemplateId;
|
|
534
|
+
if (!id) {
|
|
535
|
+
throw new Error(`--${flag} expects a ${kind} template, but "${value}" is not one. Run \`seamless templates list\` to see which templates are ${kind}.`);
|
|
536
|
+
}
|
|
537
|
+
const existing = kind === "web" ? preselect.webTemplateId : preselect.apiTemplateId;
|
|
538
|
+
if (existing && existing !== id) {
|
|
539
|
+
throw new Error(`Conflicting ${kind} template flags: --${flag}=${value} cannot combine with --${existing}.`);
|
|
540
|
+
}
|
|
541
|
+
if (kind === "web")
|
|
542
|
+
preselect.webTemplateId = id;
|
|
543
|
+
else
|
|
544
|
+
preselect.apiTemplateId = id;
|
|
545
|
+
}
|
|
546
|
+
return preselect;
|
|
547
|
+
}
|
|
548
|
+
// Resolves `--<alias>` and `--<id>` flags (e.g. --oauth, --react-oauth) to specific
|
|
549
|
+
// templates from the registry, so a matching layer's prompt can be skipped. Both
|
|
550
|
+
// spellings live in the registry, so no per-flag code is needed here. Unknown or
|
|
551
|
+
// conflicting flags are hard errors.
|
|
552
|
+
export function resolveTemplateAliases(aliases, templates) {
|
|
334
553
|
const preselect = {};
|
|
335
554
|
for (const alias of aliases) {
|
|
336
|
-
const entry = templates.find((t) => t
|
|
555
|
+
const entry = templates.find((t) => matchesTemplateFlag(t, alias) && t.status !== "coming-soon");
|
|
337
556
|
if (!entry) {
|
|
338
557
|
const available = templates
|
|
339
|
-
.filter((t) => t.
|
|
340
|
-
.
|
|
558
|
+
.filter((t) => t.status !== "coming-soon")
|
|
559
|
+
.flatMap((t) => templateFlags(t))
|
|
341
560
|
.join(", ");
|
|
342
|
-
throw new Error(`Unknown option "--${alias}". Available template flags: ${available || "(none)"}.`);
|
|
561
|
+
throw new Error(`Unknown option "--${alias}". Available template flags: ${available || "(none)"}. Run \`seamless templates list\` for details.`);
|
|
343
562
|
}
|
|
344
563
|
if (entry.kind === "web") {
|
|
345
564
|
if (preselect.webTemplateId && preselect.webTemplateId !== entry.id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,WAAW,EACX,UAAU,GAEX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EACL,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,GAKd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,oBAAoB,GAGrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAChD,MAAM,OAAO,GAAG,uBAAuB,CAAC;AAExC,+EAA+E;AAC/E,8EAA8E;AAC9E,mEAAmE;AACnE,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAoBpC,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,WAAoB,EACpB,UAAoB,EAAE,EACtB,OAAoB,EAAE;IAEtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,+EAA+E;IAC/E,wDAAwD;IACxD,6DAA6D;IAC7D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,+FAA+F,CAChG,CACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,mBAAmB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IAExC,6EAA6E;IAC7E,4EAA4E;IAC5E,wEAAwE;IACxE,6EAA6E;IAC7E,6EAA6E;IAC7E,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;QACxC,MAAM,CAAC,MAAM,CACX,OAAO,EACP,wBAAwB,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAC5D,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,0EAA0E;IAC1E,4EAA4E;IAC5E,IAAI,OAAO,GAAkB,IAAI,CAAC;IAElC,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAEnC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,IAAI,OAAO;QAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,2EAA2E;QAC3E,0EAA0E;QAC1E,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAID,gFAAgF;AAChF,4EAA4E;AAC5E,cAAc;AACd,SAAS,kBAAkB;IACzB,IAAI,OAAO,GAAmC,IAAI,CAAC;IACnD,OAAO,GAAG,EAAE,CAAC,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,OAAO,CAAC,GAAkB;IACjC,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;QAC3E,0CAA0C;IAC5C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,IAAY,EACZ,WAA+B,EAC/B,SAAoB,EACpB,UAAsB,EACtB,IAAiB;IAEjB,wEAAwE;IACxE,YAAY;IACZ,IAAI,MAAM,GAAsB,IAAI,CAAC;IACrC,IAAI,cAAc,GAAwC,IAAI,CAAC;IAC/D,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAChD,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC;IAClD,CAAC;IAED,iFAAiF;IACjF,4EAA4E;IAC5E,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,cAAc,KAAK,aAAa;YAC9B,CAAC,CAAC,0JAA0J;YAC5J,CAAC,CAAC,2IAA2I,CAChJ,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,0EAA0E;IAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,6EAA6E;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK;YACvB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,8BAA8B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,MAAM,wBAAwB,CAAC,IAAI,EAAE,MAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK;YACvB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,eAAe,CACnB,IAAI,EACJ,WAAW,EACX,SAAS,EACT,UAAU,EACV,MAAO,EACP,IAAI,EACJ,IAAI,CACL,CAAC;YACF,OAAO;QACT,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;SAAM,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;QAC5C,yEAAyE;QACzE,uEAAuE;QACvE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,sJAAsJ,CACvJ,CAAC;QACJ,CAAC;QACD,kBAAkB,CAChB,6EAA6E,EAC7E,+CAA+C,CAChD,CAAC;QACF,MAAM,oBAAoB,EAAE,CAAC;IAC/B,CAAC;SAAM,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,uGAAuG,CACxG,CACF,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,+BAA+B;AAC/B,KAAK,UAAU,8BAA8B,CAC3C,UAAmB,EACnB,IAAiB;IAEjB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,kBAAkB,CAChB,yDAAyD,EACzD,qHAAqH,CACtH,CAAC;QACF,OAAO,6BAA6B,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,iNAAiN,CAClN,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,2DAA2D,CAAC,CAC1E,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,6EAA6E;AAC7E,+EAA+E;AAC/E,KAAK,UAAU,qBAAqB,CAClC,QAAgB,EAChB,IAAiB;IAEjB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,kBAAkB,CAChB,uCAAuC,EACvC,+FAA+F,CAChG,CAAC;QACF,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sMAAsM,CACvM,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,4EAA4E;AAC5E,qEAAqE;AACrE,KAAK,UAAU,kBAAkB,CAC/B,MAAkB,EAClB,GAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAE9D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,yCAAyC,GAAG,CAAC,IAAI,oEAAoE,CACtH,CACF,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,gFAAgF;AAChF,0CAA0C;AAC1C,SAAS,oBAAoB,CAAC,eAAwB;IACpD,OAAO,eAAe;QACpB,CAAC,CAAC,+HAA+H;QACjI,CAAC,CAAC,uIAAuI,CAAC;AAC9I,CAAC;AAMD,4EAA4E;AAC5E,0EAA0E;AAC1E,+EAA+E;AAC/E,kFAAkF;AAClF,iFAAiF;AACjF,iFAAiF;AACjF,KAAK,UAAU,oBAAoB;IACjC,IAAI,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;YACvC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACjD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAAY,EACZ,WAA+B,EAC/B,SAA4B,EAC5B,UAAsB,EACtB,MAAkB,EAClB,IAAsB,EACtB,IAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAC7C,MAAM,CAAC,QAAQ,CAAC,SAAS,EACzB,SAAS,EACT,IAAI,CAAC,GAAG,CACT,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAC7C,MAAM,EACN,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,aAAa,EACrB,IAAI,CACL,CAAC;IAEF,gFAAgF;IAChF,qDAAqD;IACrD,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtD,6EAA6E;IAC7E,iFAAiF;IACjF,gFAAgF;IAChF,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,KAAK,aAAa,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,6EAA6E;IAC7E,4EAA4E;IAC5E,6CAA6C;IAC7C,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1D,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAEhE,MAAM,aAAa,GAAG,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEvD,iFAAiF;IACjF,kFAAkF;IAClF,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAoB;YAC3B,aAAa;YACb,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,gBAAgB;YACzB,4EAA4E;YAC5E,kEAAkE;YAClE,iBAAiB,EAAE,OAAO;YAC1B,WAAW;SACZ,CAAC;QAEF,KAAK,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;YACzC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAE7E,sBAAsB,CAAC,IAAI,EAAE;YAC3B,WAAW;YACX,YAAY,EAAE,QAAQ,CAAC,SAAS;YAChC,YAAY,EAAE,QAAQ,CAAC,SAAS;YAChC,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE;gBACP,WAAW,EAAE,aAAa;gBAC1B,aAAa,EAAE,GAAG,CAAC,EAAE;gBACrB,eAAe,EAAE,GAAG,CAAC,IAAI;aAC1B;SACF,CAAC,CAAC;QAEH,yBAAyB,CAAC;YACxB,WAAW;YACX,YAAY,EAAE,QAAQ,CAAC,SAAS;YAChC,YAAY,EAAE,QAAQ,CAAC,SAAS;YAChC,aAAa;YACb,OAAO,EAAE,GAAG,CAAC,IAAI;YACjB,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,0HAA0H,CAC3H,CACF,CAAC;QACF,kBAAkB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,IAAY,EACZ,WAA+B,EAC/B,SAAoB,EACpB,UAAsB,EACtB,IAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAC1C,MAAM,CAAC,QAAQ,CAAC,SAAS,EACzB,SAAS,EACT,gBAAgB,EAAE,EAAE,KAAK,EACzB,IAAI,CAAC,GAAG,CACT,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAC7C,MAAM,EACN,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,aAAa,EACrB,IAAI,CACL,CAAC;IAEF,oFAAoF;IACpF,0EAA0E;IAC1E,4EAA4E;IAC5E,iEAAiE;IACjE,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IAClE,IAAI,cAAc,GAA6B,EAAE,CAAC;IAClD,IAAI,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,wGAAwG,CACzG,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,kBAAkB,CAChB,oDAAoD,EACpD,wGAAwG,CACzG,CAAC;YACF,cAAc,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,KAAK,aAAa,CAAC,CAAC;QAChD,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,YAAY,GAAQ,EAAE,CAAC;IAE3B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,YAAY,GAAG,MAAM,kBAAkB,CACrC,EAAE,IAAI,EAAE,EACR,OAAO,EACP,cAAc,EACd,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,UAAU,CACnB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE;YACrD,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,KAAK,EAAE,cAAc;YACrB,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,YAAY,GAAG,YAAY,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAoB;QAC3B,aAAa,EAAE,eAAe;QAC9B,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,OAAO,EAAE,YAAY,CAAC,GAAG;QACzB,iBAAiB,EAAE,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QACjE,yEAAyE;QACzE,oDAAoD;QACpD,WAAW,EAAE,EAAE;KAChB,CAAC;IAEF,KAAK,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;QACzC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE7E,sBAAsB,CAAC,IAAI,EAAE;QAC3B,WAAW;QACX,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,kBAAkB,CAAC;QACjB,WAAW;QACX,IAAI;QACJ,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,YAAY,EAAE,QAAQ,CAAC,SAAS;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IAEH,mBAAmB,CAAC,cAAc,CAAC,CAAC;AACtC,CAAC;AAED,6EAA6E;AAC7E,6EAA6E;AAC7E,gFAAgF;AAChF,uBAAuB;AACvB,KAAK,UAAU,wBAAwB,CACrC,IAAY,EACZ,MAAkB,EAClB,IAAsB,EACtB,IAAiB;IAEjB,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtD,6EAA6E;IAC7E,4EAA4E;IAC5E,6CAA6C;IAC7C,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1D,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAEhE,MAAM,aAAa,GAAG,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,kBAAkB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,gFAAgF;IAChF,kEAAkE;IAClE,IAAI,CAAC;QACH,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,0FAA0F,CAC3F,CACF,CAAC;QACF,kBAAkB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,kEAAkE;AAClE,SAAS,UAAU,CACjB,MAAc,EACd,aAAqB,EACrB,YAAoB,EACpB,WAAmB;IAEnB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/D,MAAM,CAAC,eAAe,GAAG,aAAa,CAAC;IACvC,MAAM,CAAC,iBAAiB,GAAG,YAAY,CAAC;IACxC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IACtD,MAAM,CAAC,kBAAkB;QACvB,MAAM,CAAC,kBAAkB,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;IAClD,oEAAoE;IACpE,6EAA6E;IAC7E,IAAI,WAAW,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACxC,MAAM,CAAC,YAAY,GAAG,WAAW,CAAC;IACpC,CAAC;IAED,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,kBAAkB,CAAC,aAAqB,EAAE,YAAoB;IACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,aAAa,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,YAAY,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,yEAAyE,CAC1E,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,yEAAyE,CAC1E,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CACpE,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,8EAA8E;AAC9E,4DAA4D;AAC5D,KAAK,UAAU,iBAAiB,CAC9B,MAAkB,EAClB,GAAc,EACd,IAAiB;IAEjB,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACxB,mEAAmE;QACnE,6EAA6E;QAC7E,gBAAgB;QAChB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CACb,IAAI,GAAG,CAAC,IAAI,4JAA4J,CACzK,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,4CAA4C,GAAG,CAAC,IAAI,cAAc,CACnE,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,kBAAkB,CAChB,IAAI,GAAG,CAAC,IAAI,iDAAiD,EAC7D,kEAAkE,CACnE,CAAC;YACF,MAAM,OAAO,GAAG,QAAQ,CACtB,MAAM,OAAO,CAAC;gBACZ,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,4FAA4F;gBACjH,YAAY,EAAE,KAAK;aACpB,CAAC,CACH,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,cAAc,CAAC,iCAAiC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5C,CAAC;AAID,iFAAiF;AACjF,+EAA+E;AAC/E,2EAA2E;AAC3E,SAAS,WAAW,CAAC,IAAiB;IACpC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAyB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACnE,CAAC;AAQD,2EAA2E;AAC3E,yEAAyE;AACzE,KAAK,UAAU,wBAAwB,CACrC,MAAsB,EACtB,aAAqB,EACrB,aAAqB,EACrB,IAAY;IAEZ,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClD,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,SAA0B,EAAE,EAAU;IACvD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,EAAE,2BAA2B,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qFAAqF;AACrF,gFAAgF;AAChF,SAAS,mBAAmB,CAAC,SAAmC;IAC9D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEnC,MAAM,KAAK,GAAG,SAAS;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC;SAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,SAAS;SACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,mCAAmC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CACT,6EAA6E,CAC9E,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,CAAC,GAAG,CACT,uFAAuF,CACxF,CAAC;AACJ,CAAC;AAOD,4EAA4E;AAC5E,6EAA6E;AAC7E,mDAAmD;AACnD,SAAS,kBAAkB,CAAC,IAAiB;IAC3C,MAAM,OAAO,GAAc,EAAE,CAAC;IAE9B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,KAAK,CAAmB,KAAa,EAAE,OAAY,EAAE,IAAY;IACxE,IAAI,CAAE,OAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,SAAS,IAAI,sBAAsB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChF,CAAC;IACJ,CAAC;IACD,OAAO,KAAU,CAAC;AACpB,CAAC;AAED,kFAAkF;AAClF,gFAAgF;AAChF,6EAA6E;AAC7E,4CAA4C;AAC5C,SAAS,wBAAwB,CAC/B,OAAiB,EACjB,IAAiB,EACjB,SAA0B;IAE1B,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE7D,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI;QACzB,CAAC,KAAK,EAAE,KAAK,CAAC;QACd,CAAC,KAAK,EAAE,KAAK,CAAC;KACN,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,sBAAsB,CAC7D,CAAC,KAAK,CAAC,EACP,SAAS,CACV,CAAC;QACF,MAAM,EAAE,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;QAC1D,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CACb,KAAK,IAAI,cAAc,IAAI,mBAAmB,KAAK,4EAA4E,IAAI,GAAG,CACvI,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC;QACpF,IAAI,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,sBAAsB,IAAI,IAAI,KAAK,0BAA0B,QAAQ,GAAG,CAC5F,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,KAAK,KAAK;YAAE,SAAS,CAAC,aAAa,GAAG,EAAE,CAAC;;YAC5C,SAAS,CAAC,aAAa,GAAG,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,oFAAoF;AACpF,iFAAiF;AACjF,iFAAiF;AACjF,qCAAqC;AACrC,MAAM,UAAU,sBAAsB,CACpC,OAAiB,EACjB,SAA0B;IAE1B,MAAM,SAAS,GAAsB,EAAE,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa,CACnE,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,SAAS;iBACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC;iBACzC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;iBAChC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,IAAI,KAAK,CACb,qBAAqB,KAAK,gCAAgC,SAAS,IAAI,QAAQ,gDAAgD,CAChI,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,aAAa,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CACb,qCAAqC,KAAK,2CAA2C,CACtF,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC,EAAE,CAAC;QACrC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAChC,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,aAAa,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;gBACpE,MAAM,IAAI,KAAK,CACb,qCAAqC,KAAK,2CAA2C,CACtF,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|