@selfhost.dev/mcp-server 0.10.0 → 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 +12 -8
- package/dist/tools/project-services.js +359 -68
- package/dist/tools/project-services.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -106,7 +106,7 @@ Connect a repo, deploy, and it's live - SelfHost takes your code from GitHub to
|
|
|
106
106
|
| *"Notify my team channel when a deploy fails"* | Binds a notification channel to the app's deploy outcomes |
|
|
107
107
|
| *"Stop this build, I pushed the wrong thing"* | Aborts the run in flight, and confirms nothing was rolled back - what is deployed keeps serving |
|
|
108
108
|
| *"Is my app actually up?"* | Reads `last_deploy_status`, which catches the case a run says `active` but the container has since crashed |
|
|
109
|
-
| *"Give me a GitLab / Nextcloud / Metabase / Odoo instance"* | Any of
|
|
109
|
+
| *"Give me a GitLab / Nextcloud / Metabase / Odoo instance"* | Any of 36 one-click apps, with the right credential shape for each and a real boot-time estimate |
|
|
110
110
|
| *"I want a CRM"* | Offers Twenty, EspoCRM or Krayin, asks for the credentials that app actually accepts, and warns when the first visitor to the URL claims the owner account |
|
|
111
111
|
| *"Why is my n8n container crash-looping?"* | Captures the container's own stdout/stderr from the host - where a failed migration or bad env var actually shows |
|
|
112
112
|
| *"Why is my project server full?"* | Reads live per-container CPU and memory, so you learn which service is eating the box rather than guessing |
|
|
@@ -564,14 +564,18 @@ Postgres/Redis/MySQL/MongoDB provisioned inside a project (distinct from the man
|
|
|
564
564
|
| `delete_project_database` | Delete a project database (exact name match + confirmation) |
|
|
565
565
|
|
|
566
566
|
### PaaS - Project Services (one-click apps)
|
|
567
|
-
**
|
|
567
|
+
**Thirty-six templates**, every one the backend serves: `supabase`, `n8n`, `n8n-with-postgresql`, `twenty`, `wordpress`, `gitlab`, `elasticsearch`, `elasticsearch-with-kibana`, `immich`, `nextcloud`, `jenkins`, `grafana`, `grafana-with-postgresql`, `strapi`, `metabase`, `anythingllm`, `stalwart`, `chatwoot`, `mautic`, `minio`, `open-webui-with-ollama`, `litellm`, `odoo`, `paperless`, `espocrm`, `krayin`, `mysterium`, `mysterium-gateway`, `urnetwork`, `nginx`, `wireguard`, `code-server`, `openssh-server`, `jupyterlab`, `jupyter-datascience`, `laravel`. The backend auto-discovers them from its strategy files, so it ships templates ahead of its clients - an unrecognised `template_type` still lists, deletes, inspects and takes a domain.
|
|
568
568
|
|
|
569
|
-
**
|
|
570
|
-
- *username + password* - becomes the app's admin login. The accepted username form varies: a slug for Jenkins/Grafana/EspoCRM, an **email** for Krayin (a bare `admin` creates an account nobody can sign in as), anything for the rest.
|
|
571
|
-
- *password only* - the app owns the username (GitLab is always `root`, Elasticsearch
|
|
569
|
+
**Five credential shapes, and the wrong one is refused before the request goes out** (the backend silently drops fields a template does not accept, which would leave a user believing they set a password):
|
|
570
|
+
- *username + password* - becomes the app's admin login. The accepted username form varies: a slug for Jenkins/Grafana/EspoCRM, an **email** for Krayin (a bare `admin` creates an account nobody can sign in as), a Linux login name for the OpenSSH server, anything for the rest. WireGuard and the OpenSSH server default it (`admin`, `dev`).
|
|
571
|
+
- *password only* - the app owns the username (GitLab is always `root`, Elasticsearch `elastic`, Mysterium `myst`) or has none (code-server, JupyterLab, Jupyter Data Science).
|
|
572
572
|
- *nothing* - **the first visitor to the public URL claims the owner account.** Every create of one of these says so unprompted.
|
|
573
|
+
- *no login and nothing to claim* - a static site (Nginx), a fresh app with no accounts yet (Laravel) or an HTTP proxy with no UI (the Mysterium VPN Gateway).
|
|
574
|
+
- *an auth code* - URnetwork takes the token from ur.io/app, and it is never repeated back.
|
|
573
575
|
|
|
574
|
-
**
|
|
576
|
+
**Template-specific fields**, each refused on any other template: Mysterium's `panel_source` and the gateway's `proxy_source` (the IP or CIDR allowed in; never a world range), the gateway's `country` and `service_type`, and the OpenSSH server's `public_key` and `password_access` (key-only sign-in needs a key). Mysterium, the gateway and URnetwork share the server's network with other people or spend MYST outside the platform, so each needs `acknowledge_network_terms: true` from the user. Four templates have no web UI (Mysterium, the gateway, URnetwork, the OpenSSH server), so no URL and no custom domain, and four refuse `is_public: false` because the backend would never open the port they are reached on (Mysterium, the gateway, WireGuard, the OpenSSH server).
|
|
577
|
+
|
|
578
|
+
**Capacity is a refusal at declare time, not slow degradation.** A project is one VM: `heavy` templates must leave more headroom (65% memory / 75% disk vs 80% / 85%), some need a minimum *total* host RAM, at most 5 children exist per project, Stalwart, WireGuard, Mysterium and the Mysterium VPN Gateway are one-per-project (their ports are fixed on the host), and Krayin cannot run on an ARM (`cax*`) server at all. A project server cannot be resized, so exhausting it means a new project.
|
|
575
579
|
|
|
576
580
|
Boot windows run from ~3 min (MinIO) to ~25 (GitLab). The create response names the expected window so nothing gets called stuck early.
|
|
577
581
|
|
|
@@ -579,9 +583,9 @@ Boot windows run from ~3 min (MinIO) to ~25 (GitLab). The create response names
|
|
|
579
583
|
|------|-------------|
|
|
580
584
|
| `list_project_services` | List deployed templates (status, `provisioning` stages, `error_message`) - **no credentials** |
|
|
581
585
|
| `get_project_service` | One service **including its credentials** - the only endpoint that returns them |
|
|
582
|
-
| `create_project_service` | Deploy any of the
|
|
586
|
+
| `create_project_service` | Deploy any of the 36 templates into a project, with per-template credential validation |
|
|
583
587
|
| `delete_project_service` | Delete a project service (exact name match + confirmation) |
|
|
584
|
-
| `set_project_service_custom_domain` | Point a domain at a service's web UI. **DNS must already resolve to the project IP** - the backend refuses otherwise, to avoid burning Let's Encrypt quota on certain-to-fail issuance |
|
|
588
|
+
| `set_project_service_custom_domain` | Point a domain at a service's web UI (every template but the four without one). **DNS must already resolve to the project IP** - the backend refuses otherwise, to avoid burning Let's Encrypt quota on certain-to-fail issuance |
|
|
585
589
|
| `remove_project_service_custom_domain` | Re-pin the platform hostname (with confirmation) - breaks anything registered against the custom domain |
|
|
586
590
|
|
|
587
591
|
#### Container inspection (services **and** project databases)
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
+
import { isIP } from "node:net";
|
|
1
2
|
import { z } from "zod";
|
|
2
3
|
import { apiRequest } from "../client.js";
|
|
3
4
|
import { session } from "../session.js";
|
|
4
5
|
/**
|
|
5
6
|
* Project services (CoolifyService) - one-click application templates deployed into a project.
|
|
6
|
-
*
|
|
7
|
+
* THIRTY-SIX templates are live, resolved backend-side from `ServiceProvisioning::Strategy.all`
|
|
7
8
|
* (one strategy file per template, auto-discovered). This module shipped knowing four of them
|
|
8
|
-
* until the 2026-09 sync, which meant an agent could only reach a sixth of the catalogue
|
|
9
|
+
* until the 2026-09 sync, which meant an agent could only reach a sixth of the catalogue; the
|
|
10
|
+
* 2026-09-25 sync added the ten the backend gained after it (Mysterium, Mysterium VPN Gateway,
|
|
11
|
+
* URnetwork, Nginx, WireGuard, code-server, OpenSSH server, JupyterLab, Jupyter Data Science,
|
|
12
|
+
* Laravel). The backend's `compose` strategy is bring-your-own Docker Compose, not a template,
|
|
13
|
+
* and has no tool here.
|
|
9
14
|
*
|
|
10
15
|
* Endpoints:
|
|
11
16
|
* - GET /api/v1/platform/projects/:pid/services
|
|
@@ -27,16 +32,33 @@ import { session } from "../session.js";
|
|
|
27
32
|
* return a `template_type` this module does not know. Report it by its wire string
|
|
28
33
|
* rather than guessing - list, delete, logs, stats and custom domains work on any type.
|
|
29
34
|
*
|
|
30
|
-
*
|
|
35
|
+
* FIVE CREDENTIAL SHAPES, and getting this wrong is the main failure mode here:
|
|
31
36
|
* - `dashboardLogin` - the create takes `dashboard_username` + `dashboard_password`, and they
|
|
32
37
|
* become the app's admin login. The username's accepted FORM varies:
|
|
33
|
-
* any string, a slug (`[a-zA-Z0-9_-]+`),
|
|
34
|
-
*
|
|
38
|
+
* any string, a slug (`[a-zA-Z0-9_-]+`), an email address (Krayin signs
|
|
39
|
+
* in by email, so a bare `admin` creates an unusable account) or a Linux
|
|
40
|
+
* login name (OpenSSH server). WireGuard and OpenSSH default the username
|
|
41
|
+
* (`admin`, `dev`), so it is optional for those two only.
|
|
35
42
|
* - `fixedRootPassword` - password only; the app owns the username (GitLab is always `root`,
|
|
36
|
-
* Elasticsearch
|
|
43
|
+
* Elasticsearch `elastic`, Mysterium `myst`) or has none (code-server,
|
|
44
|
+
* JupyterLab, Jupyter Data Science, Odoo, AnythingLLM). Sending a
|
|
45
|
+
* username is refused here.
|
|
37
46
|
* - `none` - no admin env at all. THE FIRST VISITOR TO THE PUBLIC URL CLAIMS THE
|
|
38
47
|
* OWNER ACCOUNT. This is a real security consequence and every create
|
|
39
48
|
* of one of these says so unprompted.
|
|
49
|
+
* - `noLogin` - no login AND nothing to claim: a static site (Nginx), a fresh app with
|
|
50
|
+
* no accounts yet (Laravel) or an HTTP proxy with no UI (Mysterium VPN
|
|
51
|
+
* Gateway). Not the first-visitor warning.
|
|
52
|
+
* - `authCode` - a vendor token instead of a login (URnetwork's code from ur.io/app).
|
|
53
|
+
* It is a secret: never echo it back.
|
|
54
|
+
*
|
|
55
|
+
* THREE TEMPLATES SHARE THE SERVER'S NETWORK WITH OTHER PEOPLE OR SPEND MONEY OUTSIDE THE
|
|
56
|
+
* PLATFORM (Mysterium, Mysterium VPN Gateway, URnetwork), so their create demands
|
|
57
|
+
* `acknowledge_network_terms: true`, the same gate the console puts in front of them. Four
|
|
58
|
+
* templates have NO web component (Mysterium, the gateway, URnetwork, OpenSSH server): no
|
|
59
|
+
* public URL and no custom domain. Four are only reachable through a firewall rule the
|
|
60
|
+
* backend opens when `is_public` is true (Mysterium's panel, the gateway's proxy, WireGuard's
|
|
61
|
+
* UDP port, the OpenSSH port), so `is_public: false` is refused for them.
|
|
40
62
|
*
|
|
41
63
|
* CAPACITY IS A DECLARE-TIME REFUSAL, NOT A RUNTIME DEGRADATION. A project is ONE VM.
|
|
42
64
|
* `heavy` templates (many containers, large pulls, first-boot migrations) are held to
|
|
@@ -54,7 +76,9 @@ const TEMPLATE_TYPES = [
|
|
|
54
76
|
"grafana-with-postgresql", "strapi", "metabase", "anythingllm",
|
|
55
77
|
"stalwart", "chatwoot", "mautic", "minio",
|
|
56
78
|
"open-webui-with-ollama", "litellm", "odoo", "paperless",
|
|
57
|
-
"espocrm", "krayin",
|
|
79
|
+
"espocrm", "krayin", "mysterium", "mysterium-gateway",
|
|
80
|
+
"urnetwork", "nginx", "wireguard", "code-server",
|
|
81
|
+
"openssh-server", "jupyterlab", "jupyter-datascience", "laravel",
|
|
58
82
|
];
|
|
59
83
|
const TEMPLATES = {
|
|
60
84
|
"supabase": {
|
|
@@ -316,26 +340,194 @@ const TEMPLATES = {
|
|
|
316
340
|
bootMinutes: 15,
|
|
317
341
|
loginNote: "Krayin signs in with an EMAIL ADDRESS, so dashboard_username must be one - a bare `admin` creates an account nobody can sign in as. The admin is seeded before the first boot.",
|
|
318
342
|
},
|
|
343
|
+
"mysterium": {
|
|
344
|
+
label: "Mysterium (VPN node)",
|
|
345
|
+
tagline: "A VPN node that shares the server's bandwidth on the Mysterium network, and earns for it.",
|
|
346
|
+
recommendedRamGb: 4,
|
|
347
|
+
heavy: false,
|
|
348
|
+
creds: "fixedRootPassword",
|
|
349
|
+
fixedUsername: "myst",
|
|
350
|
+
minPasswordLength: 12,
|
|
351
|
+
maxPasswordBytes: 72,
|
|
352
|
+
passwordForbids: "nul",
|
|
353
|
+
singleton: true,
|
|
354
|
+
noWebComponent: true,
|
|
355
|
+
requiresPublic: "its node panel (HTTP on port 4449) is reachable only through a firewall rule the backend opens for a public service, restricted to `panel_source` - that restriction, not `is_public: false`, is what keeps it private",
|
|
356
|
+
networkTerms: "a Mysterium node shares this server's bandwidth with strangers on the Mysterium network: their traffic leaves from the project's IP address, under Mysterium's terms",
|
|
357
|
+
bootMinutes: 4,
|
|
358
|
+
loginNote: "The node panel is plain HTTP on port 4449 of the project IP (`public_url` from get_project_service), reachable ONLY from `panel_source`. Sign in as `myst` with the password; on first boot the password can take a minute to apply. Then claim the node on mystnodes.com. A running container does not mean the node is claimed or earning. The allowed IPs can be changed later in the console (Settings, Panel access); this MCP has no tool for that yet.",
|
|
359
|
+
},
|
|
360
|
+
"mysterium-gateway": {
|
|
361
|
+
label: "Mysterium VPN Gateway",
|
|
362
|
+
tagline: "An HTTP proxy that routes your apps through the Mysterium VPN network, paid for in MYST.",
|
|
363
|
+
recommendedRamGb: 4,
|
|
364
|
+
heavy: false,
|
|
365
|
+
creds: "noLogin",
|
|
366
|
+
singleton: true,
|
|
367
|
+
noWebComponent: true,
|
|
368
|
+
requiresPublic: "its HTTP proxy (port 3128) is reachable only through a firewall rule the backend opens for a public service, restricted to `proxy_source` - that restriction, not `is_public: false`, is what keeps it from being an open proxy",
|
|
369
|
+
networkTerms: "the gateway consumes the Mysterium network and is paid for in MYST per GB from a funded identity, separately from the project server, under Mysterium's terms",
|
|
370
|
+
bootMinutes: 10,
|
|
371
|
+
loginNote: "No login and no web UI: it is an HTTP proxy on port 3128 (`proxy_endpoint` from get_project_service), reachable ONLY from `proxy_source`. It carries NO traffic until its identity is registered and funded with MYST: request the `connector` container's logs (request_project_container_logs) for the identity address to fund, the registration state and the exit IP. Then set HTTP_PROXY / HTTPS_PROXY in the app to `proxy_endpoint`.",
|
|
372
|
+
},
|
|
373
|
+
"urnetwork": {
|
|
374
|
+
label: "URnetwork (bandwidth node)",
|
|
375
|
+
tagline: "A provider node that shares the server's bandwidth with the URnetwork network.",
|
|
376
|
+
recommendedRamGb: 4,
|
|
377
|
+
heavy: false,
|
|
378
|
+
creds: "authCode",
|
|
379
|
+
noWebComponent: true,
|
|
380
|
+
networkTerms: "a URnetwork provider shares this server's bandwidth with the URnetwork network: other people's traffic leaves from the project's IP address, under URnetwork's terms",
|
|
381
|
+
bootMinutes: 10,
|
|
382
|
+
loginNote: "No UI and no ports: the node dials out to URnetwork. Manage it (earnings, pausing) at ur.io/app. A running container does NOT prove the auth code was accepted: check the account, or the container logs for `init proxy auth failed`. Auth codes expire; a new one can replace it without recreating the node from the console (Settings, URnetwork account); this MCP has no tool for that yet.",
|
|
383
|
+
},
|
|
384
|
+
"nginx": {
|
|
385
|
+
label: "Nginx (static site)",
|
|
386
|
+
tagline: "A static website served over HTTPS, with custom domains.",
|
|
387
|
+
recommendedRamGb: 4,
|
|
388
|
+
heavy: false,
|
|
389
|
+
creds: "noLogin",
|
|
390
|
+
bootMinutes: 10,
|
|
391
|
+
loginNote: "No login: it serves a welcome page until you upload a site. get_project_service returns `credentials.content_path` (for example `~/nginx-def123`); install a project SSH key (add_project_ssh_key), connect as `shell` to the project IP, and put the site's files there. They are served immediately, with no sudo or Docker. The directory can outlive a deleted service, and a recreated service gets a new one.",
|
|
392
|
+
},
|
|
393
|
+
"wireguard": {
|
|
394
|
+
label: "WireGuard (wg-easy)",
|
|
395
|
+
tagline: "A private WireGuard VPN with an HTTPS admin panel.",
|
|
396
|
+
recommendedRamGb: 4,
|
|
397
|
+
heavy: false,
|
|
398
|
+
creds: "dashboardLogin",
|
|
399
|
+
usernameShape: "any",
|
|
400
|
+
defaultUsername: "admin",
|
|
401
|
+
usernameMaxLength: 64,
|
|
402
|
+
minPasswordLength: 12,
|
|
403
|
+
singleton: true,
|
|
404
|
+
requiresPublic: "VPN clients reach it on UDP 51820 only through a firewall rule the backend opens for a public service; the admin panel is password-protected HTTPS",
|
|
405
|
+
bootMinutes: 10,
|
|
406
|
+
loginNote: "Sign in to the admin panel over HTTPS with this login, add VPN peers there, and import their configurations into WireGuard clients. Clients connect to `wireguard_endpoint` (the project IP, UDP 51820). A running container does not prove a working tunnel.",
|
|
407
|
+
},
|
|
408
|
+
"code-server": {
|
|
409
|
+
label: "code-server",
|
|
410
|
+
tagline: "VS Code in the browser, with a terminal and your extensions.",
|
|
411
|
+
recommendedRamGb: 4,
|
|
412
|
+
heavy: false,
|
|
413
|
+
creds: "fixedRootPassword",
|
|
414
|
+
fixedUsername: "",
|
|
415
|
+
minPasswordLength: 12,
|
|
416
|
+
bootMinutes: 10,
|
|
417
|
+
loginNote: "There is no username: the sign-in screen asks for the password alone, and the same password unlocks sudo in the terminal. Settings, extensions and /config/workspace persist across restarts.",
|
|
418
|
+
},
|
|
419
|
+
"openssh-server": {
|
|
420
|
+
label: "OpenSSH server",
|
|
421
|
+
tagline: "A Linux container you reach over SSH, with sudo and a home that persists.",
|
|
422
|
+
recommendedRamGb: 4,
|
|
423
|
+
heavy: false,
|
|
424
|
+
creds: "dashboardLogin",
|
|
425
|
+
usernameShape: "unix",
|
|
426
|
+
defaultUsername: "dev",
|
|
427
|
+
minPasswordLength: 12,
|
|
428
|
+
passwordForbids: "control",
|
|
429
|
+
noWebComponent: true,
|
|
430
|
+
requiresPublic: "its SSH port (`public_port`, default 2222) is reachable only through a firewall rule the backend opens for a public service",
|
|
431
|
+
publicPortNote: "the host port sshd listens on (default 2222); each SSH server in a project needs its own",
|
|
432
|
+
bootMinutes: 10,
|
|
433
|
+
loginNote: "Connect with `credentials.ssh_command` from get_project_service (`ssh -p <public_port> <user>@<project IP>`). The SSH port is open to the whole internet, which is why the password is required even with a key; sudo uses the same password. It is its own SSH server in a container, separate from the project server's `shell` access, and everything under /config persists across restarts.",
|
|
434
|
+
},
|
|
435
|
+
"jupyterlab": {
|
|
436
|
+
label: "JupyterLab",
|
|
437
|
+
tagline: "Python notebooks with numpy, pandas and scikit-learn installed.",
|
|
438
|
+
recommendedRamGb: 8,
|
|
439
|
+
heavy: true,
|
|
440
|
+
creds: "fixedRootPassword",
|
|
441
|
+
fixedUsername: "",
|
|
442
|
+
minPasswordLength: 12,
|
|
443
|
+
bootMinutes: 15,
|
|
444
|
+
loginNote: "There is no username: paste the password into the `Password or token` box on the sign-in page. The whole home folder (notebooks, settings, `pip install --user` packages) persists across restarts.",
|
|
445
|
+
},
|
|
446
|
+
"jupyter-datascience": {
|
|
447
|
+
label: "Jupyter Data Science",
|
|
448
|
+
tagline: "JupyterLab with Python, R and Julia notebooks.",
|
|
449
|
+
recommendedRamGb: 8,
|
|
450
|
+
heavy: true,
|
|
451
|
+
creds: "fixedRootPassword",
|
|
452
|
+
fixedUsername: "",
|
|
453
|
+
minPasswordLength: 12,
|
|
454
|
+
bootMinutes: 20,
|
|
455
|
+
loginNote: "There is no username: paste the password into the `Password or token` box on the sign-in page. It is JupyterLab with the R (tidyverse) and Julia kernels added, a ~2.7 GB image; `jupyterlab` is the lighter Python-only choice. The whole home folder persists across restarts.",
|
|
456
|
+
},
|
|
457
|
+
"laravel": {
|
|
458
|
+
label: "Laravel",
|
|
459
|
+
tagline: "A fresh Laravel app on its own MySQL database.",
|
|
460
|
+
recommendedRamGb: 4,
|
|
461
|
+
heavy: false,
|
|
462
|
+
creds: "noLogin",
|
|
463
|
+
bootMinutes: 15,
|
|
464
|
+
loginNote: "No login to set: the URL serves the Laravel welcome page on its own MySQL database, and the app built on it defines its own sign-in. First boot runs `composer create-project`, so the URL can take several minutes to serve.",
|
|
465
|
+
},
|
|
319
466
|
};
|
|
467
|
+
/** `RESERVED_USERNAMES` on the OpenSSH server's validator: root and the image's own accounts. */
|
|
468
|
+
const UNIX_RESERVED_USERNAMES = new Set(["root", "abc", "daemon", "bin", "sys", "nobody", "sshd"]);
|
|
320
469
|
/** Username validation per shape, mirroring the backend validators. */
|
|
321
470
|
const USERNAME_SHAPE_RULES = {
|
|
322
471
|
any: { test: (v) => v.length > 0, hint: "any non-empty string" },
|
|
323
472
|
slug: { test: (v) => /^[a-zA-Z0-9_-]+$/.test(v), hint: "letters, digits, hyphen and underscore only" },
|
|
324
473
|
email: { test: (v) => /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(v), hint: "an email address - this app signs in by email" },
|
|
474
|
+
unix: {
|
|
475
|
+
test: (v) => /^[a-z_][a-z0-9_-]{0,31}$/.test(v) && !UNIX_RESERVED_USERNAMES.has(v),
|
|
476
|
+
hint: "a lowercase Linux login name (letters, digits, - and _, starting with a letter or _, up to 32) and never root or a system account",
|
|
477
|
+
},
|
|
325
478
|
};
|
|
479
|
+
/** The key algorithms the OpenSSH server's `PUBLIC_KEY_FORMAT` accepts. */
|
|
480
|
+
const OPENSSH_KEY_ALGORITHMS = new Set([
|
|
481
|
+
"ssh-ed25519", "ssh-rsa", "ecdsa-sha2-nistp256", "ecdsa-sha2-nistp384",
|
|
482
|
+
"ecdsa-sha2-nistp521", "sk-ssh-ed25519@openssh.com", "sk-ecdsa-sha2-nistp256@openssh.com",
|
|
483
|
+
]);
|
|
484
|
+
/** Gateway service types (`MysteriumGatewayServiceValidator::SERVICE_TYPES`), default first. */
|
|
485
|
+
const GATEWAY_SERVICE_TYPES = ["wireguard", "scraping", "data_transfer", "quic"];
|
|
486
|
+
/** URnetwork's `AUTH_CODE_FORMAT`, with its 20-character floor. */
|
|
487
|
+
const URNETWORK_AUTH_CODE = /^[A-Za-z0-9_\-=+/.]{20,}$/;
|
|
488
|
+
/**
|
|
489
|
+
* One IP or CIDR the backend's `IPAddr.new` would accept, never an everything-range: the
|
|
490
|
+
* console refuses a world-open panel or proxy at create, and so does this. Returns an error
|
|
491
|
+
* sentence, or null when the value is fine.
|
|
492
|
+
*/
|
|
493
|
+
function sourceError(value, field) {
|
|
494
|
+
const v = value.trim();
|
|
495
|
+
const [address, prefix, extra] = v.split("/");
|
|
496
|
+
const family = isIP(address ?? "");
|
|
497
|
+
const bits = family === 4 ? 32 : 128;
|
|
498
|
+
if (!family || extra !== undefined || (prefix !== undefined && !/^\d{1,3}$/.test(prefix))
|
|
499
|
+
|| (prefix !== undefined && Number(prefix) > bits)) {
|
|
500
|
+
return `${field} \`${v}\` is not an IP address or CIDR range (for example 203.0.113.7 or 203.0.113.0/24).`;
|
|
501
|
+
}
|
|
502
|
+
if (prefix !== undefined && Number(prefix) === 0) {
|
|
503
|
+
return `${field} \`${v}\` is every address on the internet. Pass the IP (or range) that should reach it; opening it to everyone is a deliberate choice made later in the console, never at create.`;
|
|
504
|
+
}
|
|
505
|
+
return null;
|
|
506
|
+
}
|
|
326
507
|
/** Rendered into the create description so the catalogue cannot drift from the code. */
|
|
327
508
|
const TEMPLATE_CATALOGUE_TEXT = TEMPLATE_TYPES.map((t) => {
|
|
328
509
|
const f = TEMPLATES[t];
|
|
510
|
+
const username = f.defaultUsername
|
|
511
|
+
? `optional username (default \`${f.defaultUsername}\`; ${USERNAME_SHAPE_RULES[f.usernameShape ?? "any"].hint})`
|
|
512
|
+
: `username (${USERNAME_SHAPE_RULES[f.usernameShape ?? "any"].hint})`;
|
|
513
|
+
const password = `password${f.minPasswordLength && f.minPasswordLength > 8 ? ` (${f.minPasswordLength}+)` : ""}`;
|
|
329
514
|
const creds = f.creds === "dashboardLogin"
|
|
330
|
-
?
|
|
515
|
+
? `${username} + ${password}`
|
|
331
516
|
: f.creds === "fixedRootPassword"
|
|
332
|
-
?
|
|
333
|
-
:
|
|
517
|
+
? `${password} only${f.fixedUsername ? `, user is always \`${f.fixedUsername}\`` : ", no username"}`
|
|
518
|
+
: f.creds === "noLogin"
|
|
519
|
+
? "no login and nothing to claim"
|
|
520
|
+
: f.creds === "authCode"
|
|
521
|
+
? "an `auth_code` from ur.io/app"
|
|
522
|
+
: "NO admin creds - first visitor owns it";
|
|
334
523
|
const flags = [
|
|
335
524
|
f.heavy ? "heavy" : null,
|
|
336
525
|
f.hostFloorGb ? `needs a ${f.hostFloorGb} GB+ host` : null,
|
|
337
526
|
f.singleton ? "one per project" : null,
|
|
338
527
|
f.unsupportedArchitectures?.length ? `no ${f.unsupportedArchitectures.join("/")} hosts` : null,
|
|
528
|
+
f.noWebComponent ? "no URL, no custom domain" : null,
|
|
529
|
+
f.requiresPublic ? "is_public must be true" : null,
|
|
530
|
+
f.networkTerms ? "needs acknowledge_network_terms" : null,
|
|
339
531
|
].filter(Boolean).join(", ");
|
|
340
532
|
return `- \`${t}\` (${f.label}) - ${f.tagline} ${creds}. ~${f.bootMinutes} min, ${f.recommendedRamGb} GB recommended${flags ? ` [${flags}]` : ""}`;
|
|
341
533
|
}).join("\n");
|
|
@@ -394,9 +586,19 @@ A \`template_type\` you do not recognise means the backend shipped a template ne
|
|
|
394
586
|
});
|
|
395
587
|
server.tool("get_project_service", `Get one deployed service, INCLUDING ITS CREDENTIALS. This is the only endpoint that returns them - \`list_project_services\` deliberately does not.
|
|
396
588
|
|
|
397
|
-
|
|
589
|
+
The block can be absent or partial until the service reaches \`active\`; then the right answer is "not ready yet", not an error. What it holds depends on the template:
|
|
590
|
+
- Login templates: the username and password plus \`public_url\`; Supabase adds the anon key.
|
|
591
|
+
- First-visitor templates (n8n, n8n-with-postgresql, Twenty, WordPress, Immich, Strapi, Metabase, Chatwoot, Mautic, Open WebUI + Ollama): \`public_url\` only, because their first admin is created through the app's own first-run screen rather than from env.
|
|
592
|
+
- code-server, JupyterLab and Jupyter Data Science: \`password\` and \`public_url\`, and no username.
|
|
593
|
+
- Laravel: \`public_url\` only. A fresh app with no accounts, so there is nothing to claim and no warning to give.
|
|
594
|
+
- OpenSSH server: \`host\`, \`port\`, \`username\`, \`password\` and a ready-made \`ssh_command\`; no URL.
|
|
595
|
+
- WireGuard: the admin \`username\` and \`password\`, the HTTPS \`public_url\`, and \`wireguard_endpoint\` (the project IP, UDP 51820) for VPN clients.
|
|
596
|
+
- Mysterium: \`public_url\` (its HTTP panel on port 4449), the fixed username \`myst\`, the password, and the \`panel_sources\` allowed to open it.
|
|
597
|
+
- Mysterium VPN Gateway: \`proxy_endpoint\`, \`proxy_sources\`, \`country\` and \`service_type\`; no login.
|
|
598
|
+
- Nginx: \`content_path\`, the directory to upload the site to over SSH.
|
|
599
|
+
- URnetwork: a \`hint\` only; the node is managed at ur.io/app.
|
|
398
600
|
|
|
399
|
-
HAND THE URL OVER WITH THE WARNING ATTACHED for
|
|
601
|
+
HAND THE URL OVER WITH THE WARNING ATTACHED for the first-visitor templates: the account is claimed by whoever opens it first, so an unattended public URL is an open door until the user completes setup.
|
|
400
602
|
|
|
401
603
|
Call this after \`create_project_service\` reports \`active\`, and give the user the credentials - creating a service and not passing on how to log into it leaves the job half done.`, {
|
|
402
604
|
project_pid: z.string().min(1),
|
|
@@ -412,103 +614,192 @@ Call this after \`create_project_service\` reports \`active\`, and give the user
|
|
|
412
614
|
}
|
|
413
615
|
return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
|
|
414
616
|
});
|
|
415
|
-
server.tool("create_project_service", `Deploy a one-click application template into a project.
|
|
617
|
+
server.tool("create_project_service", `Deploy a one-click application template into a project. THIRTY-SIX are available:
|
|
416
618
|
|
|
417
619
|
${TEMPLATE_CATALOGUE_TEXT}
|
|
418
620
|
|
|
419
621
|
CREDENTIALS DIFFER PER TEMPLATE AND THE WRONG SHAPE IS REFUSED HERE rather than sent and silently dropped:
|
|
420
|
-
- Templates taking a username + password: pass \`dashboard_username\` and \`dashboard_password\`. The accepted username FORM varies - a slug for Jenkins/Grafana/EspoCRM, an EMAIL for Krayin, anything for the rest. The catalogue above says which.
|
|
421
|
-
- Templates taking a password only: pass \`dashboard_password\` alone. The app owns the username (GitLab is \`root\`, Elasticsearch
|
|
422
|
-
- Templates taking nothing: pass neither.
|
|
622
|
+
- Templates taking a username + password: pass \`dashboard_username\` and \`dashboard_password\`. The accepted username FORM varies - a slug for Jenkins/Grafana/EspoCRM, an EMAIL for Krayin, a Linux login name for the OpenSSH server, anything for the rest. WireGuard and the OpenSSH server default the username (\`admin\`, \`dev\`), so it is optional for those two. The catalogue above says which.
|
|
623
|
+
- Templates taking a password only: pass \`dashboard_password\` alone. The app owns the username (GitLab is \`root\`, Elasticsearch \`elastic\`, Mysterium \`myst\`) or has none (code-server, JupyterLab, Jupyter Data Science). Passing a username is refused.
|
|
624
|
+
- Templates taking nothing: pass neither. "No login and nothing to claim" (Nginx, Laravel, the Mysterium VPN Gateway) is NOT the first-visitor case below.
|
|
625
|
+
- URnetwork takes an \`auth_code\` from ur.io/app instead of a login. It is a secret: never repeat it back.
|
|
626
|
+
|
|
627
|
+
TEMPLATE-SPECIFIC FIELDS, each refused on any other template:
|
|
628
|
+
- Mysterium: \`panel_source\`, the IP or CIDR allowed to open its HTTP panel on 4449.
|
|
629
|
+
- Mysterium VPN Gateway: \`proxy_source\`, the IP or CIDR of the apps that will use the proxy on 3128; \`country\` (two-letter code, optional); \`service_type\` (wireguard, the default, or scraping, data_transfer, quic).
|
|
630
|
+
For both, an omitted source makes the backend use the IP this MCP's requests come from, which is the machine running this server and not necessarily where the user or their apps are. Pass it explicitly; \`list_project_ssh_keys\` shows the \`requester_ip\` the backend sees. A world range (\`/0\`) is refused.
|
|
631
|
+
- OpenSSH server: \`public_key\` (one OpenSSH public key line, optional) and \`password_access\` (default true; false only with a key, and the password still gates sudo). \`public_port\` is its SSH port, default 2222, and a second SSH server in the same project needs another one.
|
|
632
|
+
- Mysterium, the Mysterium VPN Gateway and URnetwork share the server's network with other people or spend MYST outside the platform, so each needs \`acknowledge_network_terms: true\`. Explain what they are agreeing to and ask; never set it on the user's behalf.
|
|
423
633
|
|
|
424
634
|
FIRST-ADMIN SECURITY WARNING, for every template marked "first visitor owns it": these ship with no admin credentials whatsoever. Whoever opens the public URL first gets the owner account. Say this UNPROMPTED, tell the user to finish setup the moment it is up, and tell them not to share the URL before then.
|
|
425
635
|
|
|
426
|
-
\`is_public\` is REQUIRED with no default: ASK THE USER.
|
|
636
|
+
\`is_public\` is REQUIRED with no default: ASK THE USER. Most templates are web apps whose first-run setup happens at the public URL, so \`true\` is usually what they want, but do not assume it. Four are refused with \`false\` because the backend would never open the port they are reached on: Mysterium, the Mysterium VPN Gateway, WireGuard and the OpenSSH server (the first two stay private through their source IP lock, not through \`is_public\`).
|
|
427
637
|
|
|
428
|
-
CAPACITY: a project is ONE server, and these limits are refusals at declare time, not slow degradation. \`heavy\` templates must leave more headroom (65% memory / 75% disk vs 80% / 85%); some need a minimum TOTAL host RAM whatever is free; at most 5 children per project; Stalwart
|
|
638
|
+
CAPACITY: a project is ONE server, and these limits are refusals at declare time, not slow degradation. \`heavy\` templates must leave more headroom (65% memory / 75% disk vs 80% / 85%); some need a minimum TOTAL host RAM whatever is free; at most 5 children per project; Stalwart, WireGuard, Mysterium and the Mysterium VPN Gateway are one-per-project (their ports are fixed on the host). A project server CANNOT be resized, so exhausting it means creating a new project - check the recommended RAM against the project's server BEFORE promising a deploy.
|
|
429
639
|
|
|
430
640
|
The project must be \`active\` (409 otherwise). Returns 202 with status \`creating\`; poll \`list_project_services\`, then call \`get_project_service\` for the credentials once it is \`active\`.
|
|
431
641
|
|
|
432
|
-
EXPECT THESE 422s: a duplicate service name inside the same project; \`public_port\` already claimed by another database or service; the capacity guard refusing the template; a second Stalwart; and Krayin on an ARM (\`cax*\`) host, whose image has no ARM manifest at any tag.`, {
|
|
642
|
+
EXPECT THESE 422s: a duplicate service name inside the same project; \`public_port\` already claimed by another database or service (a second OpenSSH server left on 2222 is the common one); the capacity guard refusing the template; a second Stalwart, WireGuard, Mysterium or Mysterium VPN Gateway; and Krayin on an ARM (\`cax*\`) host, whose image has no ARM manifest at any tag.`, {
|
|
433
643
|
project_pid: z.string().min(1),
|
|
434
|
-
template_type: z.enum(TEMPLATE_TYPES).describe("One of the
|
|
644
|
+
template_type: z.enum(TEMPLATE_TYPES).describe("One of the 36 template slugs - see the catalogue in the description"),
|
|
435
645
|
name: z.string().min(1).max(255).describe("Unique within the project"),
|
|
436
646
|
is_public: z.boolean().describe("Required choice (ask the user, do not assume): true = internet-reachable; false = private to the project. First-run setup for these apps happens at the public URL."),
|
|
437
|
-
dashboard_username: z.string().min(1).max(255).optional().describe("For templates that take a username + password only. The accepted form varies per template (slug / email / any) - see the catalogue. Refused for password-only and no-credential templates."),
|
|
438
|
-
dashboard_password: z.string().min(8).max(255).optional().describe("For templates that take any password. 8+ chars
|
|
439
|
-
public_port: z.number().int().min(1024).max(65535).optional().describe("Optional. Must not collide with another database or service in this project."),
|
|
440
|
-
|
|
647
|
+
dashboard_username: z.string().min(1).max(255).optional().describe("For templates that take a username + password only. The accepted form varies per template (slug / email / Linux login name / any) - see the catalogue. Optional for WireGuard (default admin) and the OpenSSH server (default dev). Refused for password-only and no-credential templates."),
|
|
648
|
+
dashboard_password: z.string().min(8).max(255).optional().describe("For templates that take any password. 8+ chars; 12+ for GitLab, Mysterium, WireGuard, code-server, the OpenSSH server, JupyterLab and Jupyter Data Science (see the catalogue). Refused for no-credential templates."),
|
|
649
|
+
public_port: z.number().int().min(1024).max(65535).optional().describe("Optional. Must not collide with another database or service in this project. For the OpenSSH server it is the SSH port (default 2222)."),
|
|
650
|
+
panel_source: z.string().min(1).max(64).optional().describe("Mysterium only: the IP or CIDR allowed to open its HTTP panel on 4449. Omitted, the backend uses the IP this MCP's requests come from."),
|
|
651
|
+
proxy_source: z.string().min(1).max(64).optional().describe("Mysterium VPN Gateway only: the IP or CIDR of the apps that will use the proxy on 3128. Omitted, the backend uses the IP this MCP's requests come from."),
|
|
652
|
+
country: z.string().length(2).optional().describe("Mysterium VPN Gateway only: a two-letter country code to exit from. Optional."),
|
|
653
|
+
service_type: z.enum(GATEWAY_SERVICE_TYPES).optional().describe("Mysterium VPN Gateway only: the Mysterium service to consume. Default wireguard."),
|
|
654
|
+
auth_code: z.string().min(1).max(512).optional().describe("URnetwork only, and required there: the auth code from ur.io/app (20+ characters, letters, digits and _-=+/. only). A secret: never repeat it back."),
|
|
655
|
+
public_key: z.string().min(1).max(16384).optional().describe("OpenSSH server only: one OpenSSH PUBLIC key line (ssh-ed25519, ssh-rsa, ecdsa-sha2-nistp256/384/521 or their sk- variants). Never a private key."),
|
|
656
|
+
password_access: z.boolean().optional().describe("OpenSSH server only: false turns password sign-in off, which needs a public_key. Default true. The password still gates sudo."),
|
|
657
|
+
acknowledge_network_terms: z.boolean().optional().describe("Mysterium, Mysterium VPN Gateway and URnetwork only, and required true there: the user has agreed to what the catalogue says the template does with the server's network or their money. Ask; never set it on their behalf."),
|
|
658
|
+
}, async ({ project_pid, template_type, name, is_public, dashboard_username, dashboard_password, public_port, panel_source, proxy_source, country, service_type, auth_code, public_key, password_access, acknowledge_network_terms }) => {
|
|
441
659
|
if (!hasOrg())
|
|
442
660
|
return { content: [{ type: "text", text: NO_ORG }] };
|
|
443
661
|
const template = TEMPLATES[template_type];
|
|
444
662
|
const minPw = template.minPasswordLength ?? 8;
|
|
663
|
+
const refuse = (text) => ({ content: [{ type: "text", text }] });
|
|
664
|
+
// Trimmed like the console does, and blank means absent. " admin" would otherwise reach
|
|
665
|
+
// a validator that does not trim and fail a shape check the user cannot see.
|
|
666
|
+
const username = dashboard_username?.trim() || undefined;
|
|
667
|
+
// A field that belongs to one template is refused on every other one: the backend would
|
|
668
|
+
// drop it silently, and for `auth_code` that means a secret sent somewhere it is not used.
|
|
669
|
+
const ownFields = [
|
|
670
|
+
["panel_source", panel_source, "mysterium"],
|
|
671
|
+
["proxy_source", proxy_source, "mysterium-gateway"],
|
|
672
|
+
["country", country, "mysterium-gateway"],
|
|
673
|
+
["service_type", service_type, "mysterium-gateway"],
|
|
674
|
+
["auth_code", auth_code, "urnetwork"],
|
|
675
|
+
["public_key", public_key, "openssh-server"],
|
|
676
|
+
["password_access", password_access, "openssh-server"],
|
|
677
|
+
];
|
|
678
|
+
for (const [field, value, owner] of ownFields) {
|
|
679
|
+
if (value !== undefined && template_type !== owner) {
|
|
680
|
+
return refuse(`\`${field}\` belongs to \`${owner}\` only, so it was NOT sent for \`${template_type}\`. Re-run without it.`);
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
if (template.requiresPublic && !is_public) {
|
|
684
|
+
return refuse(`${template.label} needs is_public: true, because ${template.requiresPublic}. With false the backend never opens that port and the service cannot be reached. Re-run with is_public true.`);
|
|
685
|
+
}
|
|
686
|
+
if (template.networkTerms && acknowledge_network_terms !== true) {
|
|
687
|
+
return refuse(`${template.label} needs acknowledge_network_terms: true, because ${template.networkTerms}. Explain that to the user and ask; re-run with the flag only once they agree.`);
|
|
688
|
+
}
|
|
445
689
|
// Validate the credential SHAPE before sending. The backend drops fields a template
|
|
446
690
|
// does not accept, so a silently-ignored password leaves the user believing they set
|
|
447
691
|
// one - which for a "first visitor owns it" template is a security problem, not a
|
|
448
692
|
// cosmetic one.
|
|
449
693
|
if (template.creds === "dashboardLogin") {
|
|
450
|
-
if (!dashboard_username || !dashboard_password) {
|
|
451
|
-
return {
|
|
452
|
-
content: [{
|
|
453
|
-
type: "text",
|
|
454
|
-
text: `\`${template_type}\` (${template.label}) requires BOTH dashboard_username and dashboard_password - they become its admin login. Username must be ${USERNAME_SHAPE_RULES[template.usernameShape ?? "any"].hint}; password ${minPw}+ chars. Ask the user for them.`,
|
|
455
|
-
}],
|
|
456
|
-
};
|
|
457
|
-
}
|
|
458
694
|
const rule = USERNAME_SHAPE_RULES[template.usernameShape ?? "any"];
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
695
|
+
const usernameOptional = template.defaultUsername !== undefined;
|
|
696
|
+
if (!dashboard_password || (!username && !usernameOptional)) {
|
|
697
|
+
return refuse(usernameOptional
|
|
698
|
+
? `\`${template_type}\` (${template.label}) requires dashboard_password (${minPw}+ chars). dashboard_username is optional and defaults to \`${template.defaultUsername}\`; if given it must be ${rule.hint}. Ask the user for the password.`
|
|
699
|
+
: `\`${template_type}\` (${template.label}) requires BOTH dashboard_username and dashboard_password - they become its admin login. Username must be ${rule.hint}; password ${minPw}+ chars. Ask the user for them.`);
|
|
700
|
+
}
|
|
701
|
+
if (username !== undefined && !rule.test(username)) {
|
|
702
|
+
return refuse(`dashboard_username \`${username}\` is not valid for ${template.label}: it must be ${rule.hint}.${template.usernameShape === "email" ? " Krayin signs in by email address, so a non-email username creates an admin account nobody can log in as." : ""}`);
|
|
703
|
+
}
|
|
704
|
+
if (username !== undefined && template.usernameMaxLength && [...username].length > template.usernameMaxLength) {
|
|
705
|
+
return refuse(`dashboard_username is too long for ${template.label}: ${template.usernameMaxLength} characters at most.`);
|
|
466
706
|
}
|
|
467
707
|
}
|
|
468
708
|
else if (template.creds === "fixedRootPassword") {
|
|
469
709
|
if (!dashboard_password) {
|
|
470
|
-
return {
|
|
471
|
-
content: [{
|
|
472
|
-
type: "text",
|
|
473
|
-
text: `\`${template_type}\` (${template.label}) requires dashboard_password (${minPw}+ chars).${template.fixedUsername ? ` The username is fixed by the app: \`${template.fixedUsername}\`.` : " The app does not use a username here."}${template.loginNote ? `\n\n${template.loginNote}` : ""}`,
|
|
474
|
-
}],
|
|
475
|
-
};
|
|
710
|
+
return refuse(`\`${template_type}\` (${template.label}) requires dashboard_password (${minPw}+ chars).${template.fixedUsername ? ` The username is fixed by the app: \`${template.fixedUsername}\`.` : " The app does not use a username here."}${template.loginNote ? `\n\n${template.loginNote}` : ""}`);
|
|
476
711
|
}
|
|
477
|
-
if (
|
|
478
|
-
return {
|
|
479
|
-
content: [{
|
|
480
|
-
type: "text",
|
|
481
|
-
text: `\`${template_type}\` does not accept a username - ${template.fixedUsername ? `the app's account is always \`${template.fixedUsername}\`` : "it has no username"}, so dashboard_username was not sent. Re-run with the password alone.`,
|
|
482
|
-
}],
|
|
483
|
-
};
|
|
712
|
+
if (username) {
|
|
713
|
+
return refuse(`\`${template_type}\` does not accept a username - ${template.fixedUsername ? `the app's account is always \`${template.fixedUsername}\`` : "it has no username"}, so dashboard_username was not sent. Re-run with the password alone.`);
|
|
484
714
|
}
|
|
485
715
|
}
|
|
486
|
-
else if (
|
|
487
|
-
return
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
text: `\`${template_type}\` (${template.label}) has no admin credentials to set, so dashboard_username / dashboard_password do not apply and were NOT sent. Its owner account goes to the first person who opens the public URL. Re-run without them.`,
|
|
491
|
-
}],
|
|
492
|
-
};
|
|
716
|
+
else if (username || dashboard_password) {
|
|
717
|
+
return refuse(template.creds === "none"
|
|
718
|
+
? `\`${template_type}\` (${template.label}) has no admin credentials to set, so dashboard_username / dashboard_password do not apply and were NOT sent. Its owner account goes to the first person who opens the public URL. Re-run without them.`
|
|
719
|
+
: `\`${template_type}\` (${template.label}) has no login to set, so dashboard_username / dashboard_password do not apply and were NOT sent.${template.creds === "authCode" ? " It takes an `auth_code` from ur.io/app instead." : ""} Re-run without them.`);
|
|
493
720
|
}
|
|
494
|
-
if (dashboard_password
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
}
|
|
721
|
+
if (dashboard_password) {
|
|
722
|
+
if (dashboard_password.length < minPw) {
|
|
723
|
+
return refuse(`${template.label} requires a password of at least ${minPw} characters (got ${dashboard_password.length}).`);
|
|
724
|
+
}
|
|
725
|
+
if (dashboard_password.trim() === "") {
|
|
726
|
+
return refuse(`${template.label} needs a real password: one made only of spaces fails the backend's presence check.`);
|
|
727
|
+
}
|
|
728
|
+
if (template.maxPasswordBytes && Buffer.byteLength(dashboard_password, "utf8") > template.maxPasswordBytes) {
|
|
729
|
+
return refuse(`${template.label} takes a password of at most ${template.maxPasswordBytes} bytes (its image hashes it with bcrypt, which cannot take more). Use a shorter one.`);
|
|
730
|
+
}
|
|
731
|
+
if (template.passwordForbids === "nul" && dashboard_password.includes("\u0000")) {
|
|
732
|
+
return refuse(`${template.label} cannot take a password with a null character in it.`);
|
|
733
|
+
}
|
|
734
|
+
if (template.passwordForbids === "control" && /[\u0000-\u001f\u007f-\u009f]/.test(dashboard_password)) {
|
|
735
|
+
return refuse(`${template.label} cannot take a password with a tab, line break or other control character: the image feeds it to chpasswd as one line, so a line break would inject a second entry.`);
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
if (panel_source !== undefined) {
|
|
739
|
+
const error = sourceError(panel_source, "panel_source");
|
|
740
|
+
if (error)
|
|
741
|
+
return refuse(error);
|
|
742
|
+
}
|
|
743
|
+
if (proxy_source !== undefined) {
|
|
744
|
+
const error = sourceError(proxy_source, "proxy_source");
|
|
745
|
+
if (error)
|
|
746
|
+
return refuse(error);
|
|
747
|
+
}
|
|
748
|
+
if (country !== undefined && !/^[A-Za-z]{2}$/.test(country)) {
|
|
749
|
+
return refuse("country must be a two-letter ISO-3166 code, like DE or US.");
|
|
750
|
+
}
|
|
751
|
+
let authCode;
|
|
752
|
+
if (template.creds === "authCode") {
|
|
753
|
+
authCode = auth_code?.trim();
|
|
754
|
+
if (!authCode) {
|
|
755
|
+
return refuse("URnetwork requires auth_code: the token the user creates at ur.io/app. Ask them for it.");
|
|
756
|
+
}
|
|
757
|
+
if (!URNETWORK_AUTH_CODE.test(authCode)) {
|
|
758
|
+
return refuse("That auth_code is not a URnetwork auth code: it must be one token of 20 or more characters using letters, digits and _-=+/. only, copied exactly from ur.io/app. It was NOT sent.");
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
let publicKey;
|
|
762
|
+
if (public_key !== undefined) {
|
|
763
|
+
const key = public_key.trim();
|
|
764
|
+
if (/-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(key)) {
|
|
765
|
+
return refuse("That is a PRIVATE key, and it was NOT sent anywhere. Send the PUBLIC half - the `.pub` one-liner (`ssh-ed25519 AAAA... user@host`). Treat the pasted private key as compromised and generate a new keypair.");
|
|
766
|
+
}
|
|
767
|
+
const parts = /^(\S+)\s+(\S+)(?:\s+(.*))?$/.exec(key);
|
|
768
|
+
if (/[\r\n]/.test(key) || !parts || !OPENSSH_KEY_ALGORITHMS.has(parts[1])
|
|
769
|
+
|| !/^[A-Za-z0-9+/]+={0,3}$/.test(parts[2]) || parts[2].length < 40) {
|
|
770
|
+
return refuse(`public_key must be ONE OpenSSH public key line: an algorithm (${[...OPENSSH_KEY_ALGORITHMS].join(", ")}), the base64 key, and an optional comment - the contents of a \`.pub\` file.`);
|
|
771
|
+
}
|
|
772
|
+
// Single spaces between the parts, as the backend's PUBLIC_KEY_FORMAT expects.
|
|
773
|
+
publicKey = [parts[1], parts[2], parts[3]?.trim()].filter(Boolean).join(" ");
|
|
774
|
+
}
|
|
775
|
+
if (password_access === false && !publicKey) {
|
|
776
|
+
return refuse("password_access: false needs a public_key: without one nobody could sign in. Pass the user's public key, or leave password sign-in on.");
|
|
501
777
|
}
|
|
502
778
|
const body = { name, is_public, instant_deploy: true };
|
|
503
779
|
if (template.creds === "dashboardLogin") {
|
|
504
|
-
body.dashboard_username =
|
|
780
|
+
body.dashboard_username = username ?? template.defaultUsername;
|
|
505
781
|
body.dashboard_password = dashboard_password;
|
|
506
782
|
}
|
|
507
783
|
else if (template.creds === "fixedRootPassword") {
|
|
508
784
|
body.dashboard_password = dashboard_password;
|
|
509
785
|
}
|
|
786
|
+
else if (template.creds === "authCode") {
|
|
787
|
+
body.auth_code = authCode;
|
|
788
|
+
}
|
|
510
789
|
if (public_port !== undefined)
|
|
511
790
|
body.public_port = public_port;
|
|
791
|
+
if (panel_source !== undefined)
|
|
792
|
+
body.panel_source = panel_source.trim();
|
|
793
|
+
if (proxy_source !== undefined)
|
|
794
|
+
body.proxy_source = proxy_source.trim();
|
|
795
|
+
if (country !== undefined)
|
|
796
|
+
body.country = country.toUpperCase();
|
|
797
|
+
if (service_type !== undefined)
|
|
798
|
+
body.service_type = service_type;
|
|
799
|
+
if (publicKey !== undefined)
|
|
800
|
+
body.public_key = publicKey;
|
|
801
|
+
if (password_access !== undefined)
|
|
802
|
+
body.password_access = password_access;
|
|
512
803
|
const result = await apiRequest(`${PROJECTS_BASE}/${project_pid}/services/${template_type}`, {
|
|
513
804
|
method: "POST",
|
|
514
805
|
body,
|
|
@@ -625,7 +916,7 @@ THIS IS THE TOOL FOR "why is my project server full?". A project is ONE VM share
|
|
|
625
916
|
}
|
|
626
917
|
return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
|
|
627
918
|
});
|
|
628
|
-
server.tool("set_project_service_custom_domain", `Point a custom domain at a project service's web UI, replacing its platform-generated hostname. Every
|
|
919
|
+
server.tool("set_project_service_custom_domain", `Point a custom domain at a project service's web UI, replacing its platform-generated hostname. Every template exposes a web component except four with no web UI to route: Mysterium, the Mysterium VPN Gateway, URnetwork and the OpenSSH server. The backend refuses a domain for those, so do not offer one.
|
|
629
920
|
|
|
630
921
|
DNS MUST ALREADY BE POINTING HERE BEFORE YOU CALL THIS. The backend resolves the domain and refuses if it does not already answer with the project's public IP - deliberately, because applying a domain before DNS lands burns Let's Encrypt rate limits on certificate requests that are guaranteed to fail. The correct order is:
|
|
631
922
|
1. \`get_project\` for the project's \`public_ip\`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-services.js","sourceRoot":"","sources":["../../src/tools/project-services.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project-services.js","sourceRoot":"","sources":["../../src/tools/project-services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AAEH,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAElD,kEAAkE;AAClE,MAAM,cAAc,GAAG;IACrB,UAAU,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ;IAClD,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,2BAA2B;IACnE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS;IAC3C,yBAAyB,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa;IAC9D,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO;IACzC,wBAAwB,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW;IACxD,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB;IACrD,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa;IAChD,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,SAAS;CACxD,CAAC;AAGX,MAAM,SAAS,GAAwC;IACrD,UAAU,EAAE;QACV,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,kDAAkD;QAC3D,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,KAAK;QACpB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;KACf;IACD,KAAK,EAAE;QACL,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,oDAAoD;QAC7D,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,CAAC;KACf;IACD,qBAAqB,EAAE;QACrB,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,6DAA6D;QACtE,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,CAAC;KACf;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,cAAc;QACrB,OAAO,EAAE,oDAAoD;QAC7D,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,EAAE;KAChB;IACD,WAAW,EAAE;QACX,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,oDAAoD;QAC7D,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,CAAC;KACf;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,+BAA+B;QACxC,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,mBAAmB;QAC1B,aAAa,EAAE,MAAM;QACrB,iBAAiB,EAAE,EAAE;QACrB,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,4CAA4C;KACxD;IACD,eAAe,EAAE;QACf,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,+CAA+C;QACxD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,mBAAmB;QAC1B,aAAa,EAAE,SAAS;QACxB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,4EAA4E;KACxF;IACD,2BAA2B,EAAE;QAC3B,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,gDAAgD;QACzD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,mBAAmB;QAC1B,aAAa,EAAE,SAAS;QACxB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,kKAAkK;KAC9K;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,wCAAwC;QACjD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,EAAE;KAChB;IACD,WAAW,EAAE;QACX,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,iDAAiD;QAC1D,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,KAAK;QACpB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,EAAE;KAChB;IACD,SAAS,EAAE;QACT,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,gCAAgC;QACzC,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,MAAM;QACrB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,uFAAuF;KACnG;IACD,SAAS,EAAE;QACT,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,0CAA0C;QACnD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,MAAM;QACrB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,uDAAuD;KACnE;IACD,yBAAyB,EAAE;QACzB,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,yEAAyE;QAClF,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,MAAM;QACrB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,uDAAuD;KACnE;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,uDAAuD;QAChE,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,CAAC;KACf;IACD,UAAU,EAAE;QACV,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,0CAA0C;QACnD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;KACf;IACD,aAAa,EAAE;QACb,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,+BAA+B;QACxC,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,mBAAmB;QAC1B,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,mIAAmI;KAC/I;IACD,UAAU,EAAE;QACV,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,wCAAwC;QACjD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,mBAAmB;QAC1B,aAAa,EAAE,OAAO;QACtB,iBAAiB,EAAE,CAAC;QACpB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,gPAAgP;KAC5P;IACD,UAAU,EAAE;QACV,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,uCAAuC;QAChD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,EAAE;KAChB;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,qCAAqC;QAC9C,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,CAAC;KACf;IACD,OAAO,EAAE;QACP,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,+BAA+B;QACxC,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,KAAK;QACpB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,4IAA4I;KACxJ;IACD,wBAAwB,EAAE;QACxB,KAAK,EAAE,qBAAqB;QAC5B,OAAO,EAAE,yCAAyC;QAClD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,gIAAgI;KAC5I;IACD,SAAS,EAAE;QACT,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,kEAAkE;QAC3E,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,mBAAmB;QAC1B,aAAa,EAAE,OAAO;QACtB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,oIAAoI;KAChJ;IACD,MAAM,EAAE;QACN,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,yCAAyC;QAClD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,mBAAmB;QAC1B,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,+IAA+I;KAC3J;IACD,WAAW,EAAE;QACX,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,sDAAsD;QAC/D,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,KAAK;QACpB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;KACf;IACD,SAAS,EAAE;QACT,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,gDAAgD;QACzD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,MAAM;QACrB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,8HAA8H;KAC1I;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,cAAc;QACrB,OAAO,EAAE,wDAAwD;QACjE,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,OAAO;QACtB,iBAAiB,EAAE,CAAC;QACpB,wBAAwB,EAAE,CAAC,KAAK,CAAC;QACjC,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,gLAAgL;KAC5L;IACD,WAAW,EAAE;QACX,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,2FAA2F;QACpG,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,mBAAmB;QAC1B,aAAa,EAAE,MAAM;QACrB,iBAAiB,EAAE,EAAE;QACrB,gBAAgB,EAAE,EAAE;QACpB,eAAe,EAAE,KAAK;QACtB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,wNAAwN;QACxO,YAAY,EAAE,sKAAsK;QACpL,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,+bAA+b;KAC3c;IACD,mBAAmB,EAAE;QACnB,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,0FAA0F;QACnG,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,iOAAiO;QACjP,YAAY,EAAE,+JAA+J;QAC7K,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,8aAA8a;KAC1b;IACD,WAAW,EAAE;QACX,KAAK,EAAE,4BAA4B;QACnC,OAAO,EAAE,gFAAgF;QACzF,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,sKAAsK;QACpL,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,mYAAmY;KAC/Y;IACD,OAAO,EAAE;QACP,KAAK,EAAE,qBAAqB;QAC5B,OAAO,EAAE,0DAA0D;QACnE,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,qZAAqZ;KACja;IACD,WAAW,EAAE;QACX,KAAK,EAAE,qBAAqB;QAC5B,OAAO,EAAE,oDAAoD;QAC7D,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,KAAK;QACpB,eAAe,EAAE,OAAO;QACxB,iBAAiB,EAAE,EAAE;QACrB,iBAAiB,EAAE,EAAE;QACrB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,oJAAoJ;QACpK,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,+PAA+P;KAC3Q;IACD,aAAa,EAAE;QACb,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,8DAA8D;QACvE,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,mBAAmB;QAC1B,aAAa,EAAE,EAAE;QACjB,iBAAiB,EAAE,EAAE;QACrB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,+LAA+L;KAC3M;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,2EAA2E;QACpF,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,MAAM;QACrB,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,EAAE;QACrB,eAAe,EAAE,SAAS;QAC1B,cAAc,EAAE,IAAI;QACpB,cAAc,EAAE,6HAA6H;QAC7I,cAAc,EAAE,0FAA0F;QAC1G,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,kYAAkY;KAC9Y;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,iEAAiE;QAC1E,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,mBAAmB;QAC1B,aAAa,EAAE,EAAE;QACjB,iBAAiB,EAAE,EAAE;QACrB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,qMAAqM;KACjN;IACD,qBAAqB,EAAE;QACrB,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,gDAAgD;QACzD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,mBAAmB;QAC1B,aAAa,EAAE,EAAE;QACjB,iBAAiB,EAAE,EAAE;QACrB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,kRAAkR;KAC9R;IACD,SAAS,EAAE;QACT,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,gDAAgD;QACzD,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,+NAA+N;KAC3O;CACF,CAAC;AAyCF,iGAAiG;AACjG,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAEnG,uEAAuE;AACvE,MAAM,oBAAoB,GAA8F;IACtH,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE;IAChE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,6CAA6C,EAAE;IACtG,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,+CAA+C,EAAE;IACnH,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC;QAClF,IAAI,EAAE,mIAAmI;KAC1I;CACF,CAAC;AAEF,2EAA2E;AAC3E,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,aAAa,EAAE,SAAS,EAAE,qBAAqB,EAAE,qBAAqB;IACtE,qBAAqB,EAAE,4BAA4B,EAAE,oCAAoC;CAC1F,CAAC,CAAC;AAEH,gGAAgG;AAChG,MAAM,qBAAqB,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,CAAU,CAAC;AAE1F,mEAAmE;AACnE,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AAExD;;;;GAIG;AACH,SAAS,WAAW,CAAC,KAAa,EAAE,KAAa;IAC/C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACrC,IAAI,CAAC,MAAM,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;WAClF,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO,GAAG,KAAK,MAAM,CAAC,oFAAoF,CAAC;IAC7G,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,KAAK,MAAM,CAAC,6KAA6K,CAAC;IACtM,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wFAAwF;AACxF,MAAM,uBAAuB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;IACvD,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe;QAChC,CAAC,CAAC,gCAAgC,CAAC,CAAC,eAAe,OAAO,oBAAoB,CAAC,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG;QAChH,CAAC,CAAC,aAAa,oBAAoB,CAAC,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC;IACxE,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACjH,MAAM,KAAK,GACT,CAAC,CAAC,KAAK,KAAK,gBAAgB;QAC1B,CAAC,CAAC,GAAG,QAAQ,MAAM,QAAQ,EAAE;QAC7B,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,mBAAmB;YAC/B,CAAC,CAAC,GAAG,QAAQ,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE;YACpG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS;gBACrB,CAAC,CAAC,+BAA+B;gBACjC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU;oBACtB,CAAC,CAAC,+BAA+B;oBACjC,CAAC,CAAC,wCAAwC,CAAC;IACrD,MAAM,KAAK,GAAG;QACZ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QACxB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,WAAW,WAAW,CAAC,CAAC,CAAC,IAAI;QAC1D,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI;QACtC,CAAC,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;QAC9F,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI;QACpD,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI;QAClD,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,IAAI;KAC1D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,WAAW,SAAS,CAAC,CAAC,gBAAgB,kBAAkB,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACrJ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEd,MAAM,MAAM,GACV,qFAAqF,CAAC;AAExF,SAAS,MAAM;IACb,OAAO,OAAO,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,UAAU,CAAU,CAAC;AAEhE,MAAM,eAAe,GACnB,iZAAiZ,CAAC;AAEpZ,SAAS,WAAW,CAClB,UAAkB,EAClB,YAAqD,EACrD,WAAmB,EACnB,SAA2B;IAE3B,MAAM,UAAU,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IACzE,OAAO,GAAG,aAAa,IAAI,UAAU,IAAI,UAAU,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,WAAW,GAAG;IAClB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;SACxC,QAAQ,CAAC,4IAA4I,CAAC;IAC3J,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4FAA4F,CAAC;CACvI,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB;;;;;;4JAMwJ,EACxJ;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/B,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,WAAW,EAAE;YACnF,QAAQ,EAAE,uBAAuB;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5H,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB;;;;;;;;;;;;;;;;sLAgBkL,EAClL;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/B,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QACrC,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,aAAa,WAAW,EAAE,EAAE;YAClG,QAAQ,EAAE,qBAAqB;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC1H,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB;;EAEF,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;4XAuBmW,EACxX;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,qEAAqE,CAAC;QACrH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACtE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,qKAAqK,CAAC;QACtM,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4RAA4R,CAAC;QAChW,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sNAAsN,CAAC;QAC1R,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wIAAwI,CAAC;QAChN,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wIAAwI,CAAC;QACrM,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yJAAyJ,CAAC;QACtN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;QAClI,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kFAAkF,CAAC;QACnJ,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qJAAqJ,CAAC;QAChN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kJAAkJ,CAAC;QAChN,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+HAA+H,CAAC;QACjL,yBAAyB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6NAA6N,CAAC;KAC1R,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,yBAAyB,EAAE,EAAE,EAAE;QACnO,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEpE,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAClF,wFAAwF;QACxF,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,kBAAkB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QAEzD,wFAAwF;QACxF,2FAA2F;QAC3F,MAAM,SAAS,GAA2C;YACxD,CAAC,cAAc,EAAE,YAAY,EAAE,WAAW,CAAC;YAC3C,CAAC,cAAc,EAAE,YAAY,EAAE,mBAAmB,CAAC;YACnD,CAAC,SAAS,EAAE,OAAO,EAAE,mBAAmB,CAAC;YACzC,CAAC,cAAc,EAAE,YAAY,EAAE,mBAAmB,CAAC;YACnD,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC;YACrC,CAAC,YAAY,EAAE,UAAU,EAAE,gBAAgB,CAAC;YAC5C,CAAC,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,CAAC;SACvD,CAAC;QACF,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;YAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;gBACnD,OAAO,MAAM,CAAC,KAAK,KAAK,mBAAmB,KAAK,qCAAqC,aAAa,wBAAwB,CAAC,CAAC;YAC9H,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,cAAc,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,mCAAmC,QAAQ,CAAC,cAAc,+GAA+G,CAAC,CAAC;QAC5M,CAAC;QACD,IAAI,QAAQ,CAAC,YAAY,IAAI,yBAAyB,KAAK,IAAI,EAAE,CAAC;YAChE,OAAO,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,mDAAmD,QAAQ,CAAC,YAAY,gFAAgF,CAAC,CAAC;QAC3L,CAAC;QAED,oFAAoF;QACpF,qFAAqF;QACrF,kFAAkF;QAClF,gBAAgB;QAChB,IAAI,QAAQ,CAAC,KAAK,KAAK,gBAAgB,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,oBAAoB,CAAC,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC;YACnE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,eAAe,KAAK,SAAS,CAAC;YAChE,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC5D,OAAO,MAAM,CACX,gBAAgB;oBACd,CAAC,CAAC,KAAK,aAAa,OAAO,QAAQ,CAAC,KAAK,kCAAkC,KAAK,8DAA8D,QAAQ,CAAC,eAAe,2BAA2B,IAAI,CAAC,IAAI,kCAAkC;oBAC5O,CAAC,CAAC,KAAK,aAAa,OAAO,QAAQ,CAAC,KAAK,6GAA6G,IAAI,CAAC,IAAI,cAAc,KAAK,iCAAiC,CACtN,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnD,OAAO,MAAM,CAAC,wBAAwB,QAAQ,uBAAuB,QAAQ,CAAC,KAAK,gBAAgB,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,2GAA2G,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3Q,CAAC;YACD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,iBAAiB,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBAC9G,OAAO,MAAM,CAAC,sCAAsC,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,iBAAiB,sBAAsB,CAAC,CAAC;YAC3H,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,mBAAmB,EAAE,CAAC;YAClD,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,OAAO,MAAM,CAAC,KAAK,aAAa,OAAO,QAAQ,CAAC,KAAK,kCAAkC,KAAK,YAAY,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,wCAAwC,QAAQ,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,wCAAwC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7S,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,MAAM,CAAC,KAAK,aAAa,mCAAmC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,iCAAiC,QAAQ,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,oBAAoB,uEAAuE,CAAC,CAAC;YACzP,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,IAAI,kBAAkB,EAAE,CAAC;YAC1C,OAAO,MAAM,CACX,QAAQ,CAAC,KAAK,KAAK,MAAM;gBACvB,CAAC,CAAC,KAAK,aAAa,OAAO,QAAQ,CAAC,KAAK,yMAAyM;gBAClP,CAAC,CAAC,KAAK,aAAa,OAAO,QAAQ,CAAC,KAAK,oGAAoG,QAAQ,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAC9P,CAAC;QACJ,CAAC;QAED,IAAI,kBAAkB,EAAE,CAAC;YACvB,IAAI,kBAAkB,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBACtC,OAAO,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,oCAAoC,KAAK,oBAAoB,kBAAkB,CAAC,MAAM,IAAI,CAAC,CAAC;YAC7H,CAAC;YACD,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACrC,OAAO,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,qFAAqF,CAAC,CAAC;YACxH,CAAC;YACD,IAAI,QAAQ,CAAC,gBAAgB,IAAI,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBAC3G,OAAO,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,gCAAgC,QAAQ,CAAC,gBAAgB,sFAAsF,CAAC,CAAC;YAClL,CAAC;YACD,IAAI,QAAQ,CAAC,eAAe,KAAK,KAAK,IAAI,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChF,OAAO,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,sDAAsD,CAAC,CAAC;YACzF,CAAC;YACD,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,IAAI,8BAA8B,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACtG,OAAO,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,qKAAqK,CAAC,CAAC;YACxM,CAAC;QACH,CAAC;QAED,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YACxD,IAAI,KAAK;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YACxD,IAAI,KAAK;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5D,OAAO,MAAM,CAAC,4DAA4D,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,QAA4B,CAAC;QACjC,IAAI,QAAQ,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAClC,QAAQ,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,MAAM,CAAC,yFAAyF,CAAC,CAAC;YAC3G,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxC,OAAO,MAAM,CAAC,mLAAmL,CAAC,CAAC;YACrM,CAAC;QACH,CAAC;QAED,IAAI,SAA6B,CAAC;QAClC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,oCAAoC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnD,OAAO,MAAM,CAAC,6MAA6M,CAAC,CAAC;YAC/N,CAAC;YACD,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtD,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;mBAClE,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACxE,OAAO,MAAM,CAAC,iEAAiE,CAAC,GAAG,sBAAsB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;YACxM,CAAC;YACD,+EAA+E;YAC/E,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,eAAe,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,wIAAwI,CAAC,CAAC;QAC1J,CAAC;QAED,MAAM,IAAI,GAA4B,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAChF,IAAI,QAAQ,CAAC,KAAK,KAAK,gBAAgB,EAAE,CAAC;YACxC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,IAAI,QAAQ,CAAC,eAAe,CAAC;YAC/D,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC/C,CAAC;aAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,mBAAmB,EAAE,CAAC;YAClD,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC/C,CAAC;aAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACzC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC5B,CAAC;QACD,IAAI,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC9D,IAAI,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QACxE,IAAI,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QACxE,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAChE,IAAI,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjE,IAAI,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QACzD,IAAI,eAAe,KAAK,SAAS;YAAE,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAE1E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,aAAa,aAAa,EAAE,EAAE;YACpG,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,QAAQ,EAAE,wBAAwB;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACrH,CAAC;QAED,MAAM,KAAK,GAAG;YACZ,GAAG,QAAQ,CAAC,KAAK,cAAc,IAAI,wDAAwD,QAAQ,CAAC,WAAW,UAAU,QAAQ,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,sCAAsC;YACpM,uJAAuJ;SACxJ,CAAC;QACF,IAAI,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CACR,+BAA+B,QAAQ,CAAC,KAAK,4LAA4L,CAC1O,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC7D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,2SAA2S,EAC3S;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAC3E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;KAC9F,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACpD,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,IAAI,OAAO,WAAW,wGAAwG,EAAE,CAAC,EAAE,CAAC;QAC5M,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,aAAa,WAAW,EAAE,EAAE;YAClG,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,EAAE,IAAI,EAAE;YACd,QAAQ,EAAE,wBAAwB;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACrH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC;IAC3E,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gCAAgC,EAChC;;;;gKAI4J,EAC5J;QACE,GAAG,WAAW;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;aAC3D,QAAQ,CAAC,wBAAwB,qBAAqB,SAAS,iBAAiB,wBAAwB,CAAC;KAC/G,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5D,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE;YACtG,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,QAAQ,EAAE,gCAAgC;SAC3C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qCAAqC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7H,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0IAA0I,EAAE;gBAClK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC7D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,qFAAqF,eAAe,EAAE,EACtG,WAAW,EACX,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;QACrD,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE;YACtG,QAAQ,EAAE,4BAA4B;SACvC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC1H,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iCAAiC,EACjC;;wVAEoV,EACpV,WAAW,EACX,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;QACrD,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;YACvG,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,iCAAiC;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sCAAsC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC9H,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sGAAsG,EAAE;gBAC9H,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC7D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,6FAA6F,eAAe,EAAE,EAC9G,WAAW,EACX,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;QACrD,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;YACvG,QAAQ,EAAE,6BAA6B;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mCAAmC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3H,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mCAAmC,EACnC;;;;;;;;;;qUAUiU,EACjU;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qEAAqE,CAAC;KAC1G,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE;QAC7C,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,aAAa,WAAW,gBAAgB,EAAE;YAChH,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,MAAM,EAAE;YAChB,QAAQ,EAAE,mCAAmC;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,KAAK,GAAG;gBACvC,CAAC,CAAC,4IAA4I;gBAC9I,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,IAAI,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACnI,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,MAAM,8LAA8L,EAAE;gBACjO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC7D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sCAAsC,EACtC;;qQAEiQ,EACjQ;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,sHAAsH,CAAC;KACtJ,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;QAC9C,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,kDAAkD,WAAW,iMAAiM;qBACrQ,CAAC;aACH,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,aAAa,WAAW,gBAAgB,EAAE;YAChH,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,sCAAsC;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mCAAmC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3H,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uHAAuH,EAAE;gBAC/I,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC7D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AAEJ,CAAC"}
|
package/package.json
CHANGED