tinbase 0.10.0 → 0.10.2
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 +10 -9
- package/dist/admin/api.d.ts +62 -1
- package/dist/admin/api.js +221 -10
- package/dist/admin/api.js.map +1 -1
- package/dist/admin/ui.d.ts +1 -1
- package/dist/admin/ui.js +1548 -16
- package/dist/admin/ui.js.map +1 -1
- package/dist/auth/handler.d.ts +52 -5
- package/dist/auth/handler.js +147 -36
- package/dist/auth/handler.js.map +1 -1
- package/dist/auth/inbox.d.ts +4 -2
- package/dist/auth/inbox.js +1 -0
- package/dist/auth/inbox.js.map +1 -1
- package/dist/auth/oauth.d.ts +30 -4
- package/dist/auth/oauth.js +22 -6
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/password.d.ts +5 -0
- package/dist/auth/password.js +7 -0
- package/dist/auth/password.js.map +1 -1
- package/dist/auth/qr.d.ts +1 -1
- package/dist/auth/qr.js +1 -1
- package/dist/auth/rate-limit.d.ts +33 -0
- package/dist/auth/rate-limit.js +63 -0
- package/dist/auth/rate-limit.js.map +1 -0
- package/dist/auth/redirect.d.ts +20 -0
- package/dist/auth/redirect.js +79 -0
- package/dist/auth/redirect.js.map +1 -0
- package/dist/auth/settings.d.ts +55 -0
- package/dist/auth/settings.js +116 -0
- package/dist/auth/settings.js.map +1 -0
- package/dist/auth/totp.js +1 -1
- package/dist/cli.js +43 -21
- package/dist/cli.js.map +1 -1
- package/dist/cron/service.d.ts +15 -2
- package/dist/cron/service.js +19 -2
- package/dist/cron/service.js.map +1 -1
- package/dist/db/bootstrap.d.ts +13 -6
- package/dist/db/bootstrap.js +26 -5
- package/dist/db/bootstrap.js.map +1 -1
- package/dist/db/database.d.ts +61 -3
- package/dist/db/database.js +72 -9
- package/dist/db/database.js.map +1 -1
- package/dist/db/emulated.d.ts +39 -2
- package/dist/db/emulated.js +39 -23
- package/dist/db/emulated.js.map +1 -1
- package/dist/db/engine.d.ts +19 -5
- package/dist/db/engine.js +4 -2
- package/dist/db/engine.js.map +1 -1
- package/dist/db/inspect.d.ts +6 -1
- package/dist/db/inspect.js +2 -1
- package/dist/db/inspect.js.map +1 -1
- package/dist/db/pglite-engine.d.ts +7 -1
- package/dist/db/pglite-engine.js +7 -1
- package/dist/db/pglite-engine.js.map +1 -1
- package/dist/db/pgmem-engine.d.ts +9 -3
- package/dist/db/pgmem-engine.js +13 -7
- package/dist/db/pgmem-engine.js.map +1 -1
- package/dist/db/schema-diff.d.ts +9 -1
- package/dist/db/schema-diff.js +19 -5
- package/dist/db/schema-diff.js.map +1 -1
- package/dist/db/sql-compat.d.ts +2 -2
- package/dist/db/sql-compat.js +2 -2
- package/dist/functions/deno-shim.d.ts +6 -17
- package/dist/functions/deno-shim.js +42 -10
- package/dist/functions/deno-shim.js.map +1 -1
- package/dist/functions/handler.d.ts +9 -4
- package/dist/functions/handler.js +9 -1
- package/dist/functions/handler.js.map +1 -1
- package/dist/gen-types.d.ts +6 -1
- package/dist/gen-types.js +53 -41
- package/dist/gen-types.js.map +1 -1
- package/dist/index.d.ts +33 -3
- package/dist/index.js +158 -28
- package/dist/index.js.map +1 -1
- package/dist/jwt.d.ts +4 -1
- package/dist/jwt.js +4 -2
- package/dist/jwt.js.map +1 -1
- package/dist/log-buffer.d.ts +7 -1
- package/dist/log-buffer.js +3 -0
- package/dist/log-buffer.js.map +1 -1
- package/dist/net/service.d.ts +35 -6
- package/dist/net/service.js +72 -17
- package/dist/net/service.js.map +1 -1
- package/dist/node/bun-server.d.ts +2 -1
- package/dist/node/bun-server.js +11 -1
- package/dist/node/bun-server.js.map +1 -1
- package/dist/node/bundle-function.d.ts +1 -1
- package/dist/node/bundle-function.js +1 -1
- package/dist/node/config-toml.d.ts +31 -0
- package/dist/node/config-toml.js +186 -0
- package/dist/node/config-toml.js.map +1 -0
- package/dist/node/db-diff.d.ts +13 -1
- package/dist/node/db-diff.js +3 -1
- package/dist/node/db-diff.js.map +1 -1
- package/dist/node/fs-driver.d.ts +16 -1
- package/dist/node/fs-driver.js +20 -1
- package/dist/node/fs-driver.js.map +1 -1
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/load-config.d.ts +80 -0
- package/dist/node/load-config.js +230 -0
- package/dist/node/load-config.js.map +1 -0
- package/dist/node/load-functions.d.ts +17 -2
- package/dist/node/load-functions.js +17 -4
- package/dist/node/load-functions.js.map +1 -1
- package/dist/node/native/engine.d.ts +7 -0
- package/dist/node/native/engine.js +58 -7
- package/dist/node/native/engine.js.map +1 -1
- package/dist/node/native/wire.d.ts +15 -1
- package/dist/node/native/wire.js +32 -10
- package/dist/node/native/wire.js.map +1 -1
- package/dist/node/project.d.ts +15 -1
- package/dist/node/project.js +19 -7
- package/dist/node/project.js.map +1 -1
- package/dist/node/server-shared.d.ts +4 -1
- package/dist/node/server.d.ts +11 -0
- package/dist/node/server.js +11 -0
- package/dist/node/server.js.map +1 -1
- package/dist/node/ws.d.ts +26 -1
- package/dist/node/ws.js +26 -3
- package/dist/node/ws.js.map +1 -1
- package/dist/realtime/engine.d.ts +6 -0
- package/dist/realtime/engine.js +45 -34
- package/dist/realtime/engine.js.map +1 -1
- package/dist/rest/build.d.ts +37 -1
- package/dist/rest/build.js +48 -8
- package/dist/rest/build.js.map +1 -1
- package/dist/rest/errors.d.ts +8 -0
- package/dist/rest/errors.js +12 -1
- package/dist/rest/errors.js.map +1 -1
- package/dist/rest/handler.d.ts +17 -1
- package/dist/rest/handler.js +48 -5
- package/dist/rest/handler.js.map +1 -1
- package/dist/rest/parse.d.ts +24 -1
- package/dist/rest/parse.js +7 -1
- package/dist/rest/parse.js.map +1 -1
- package/dist/retention/service.d.ts +3 -0
- package/dist/retention/service.js +3 -1
- package/dist/retention/service.js.map +1 -1
- package/dist/security.d.ts +22 -0
- package/dist/security.js +47 -0
- package/dist/security.js.map +1 -0
- package/dist/storage/driver.d.ts +8 -1
- package/dist/storage/driver.js +4 -1
- package/dist/storage/driver.js.map +1 -1
- package/dist/storage/handler.d.ts +10 -1
- package/dist/storage/handler.js +93 -12
- package/dist/storage/handler.js.map +1 -1
- package/dist/types.d.ts +77 -1
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -1
- package/dist/webhooks/service.d.ts +25 -2
- package/dist/webhooks/service.js +21 -3
- package/dist/webhooks/service.js.map +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -124,7 +124,7 @@ const server = await serve(backend, { port: 54321 })
|
|
|
124
124
|
| Cron | `cron.*` | Scheduled jobs, drop-in with pg_cron's API — `cron.schedule(name, '*/5 * * * *', 'sql')` (also the `'N seconds'` form), `cron.unschedule(...)`, and the `cron.job` / `cron.job_run_details` tables. Schedules match in **UTC**, like hosted pg_cron; an in-process scheduler runs due jobs and logs to `cron.job_run_details`. Jobs run while tinbase is up, with service-role privileges. No extension |
|
|
125
125
|
| HTTP from SQL (pg_net) | `net.*` | `net.http_post` / `net.http_get` / `net.http_delete(...)` enqueue a request that an in-process worker sends, recording the reply in `net._http_response`. Lets a cron job or trigger call an Edge Function or any URL — the common Supabase `cron.schedule(..., $$ select net.http_post(...) $$)` pattern works unchanged. No extension |
|
|
126
126
|
| Database Webhooks | config | Fire HTTP requests on table INSERT/UPDATE/DELETE with Supabase's exact payload (`type`/`table`/`schema`/`record`/`old_record`). Configured via `createBackend({ webhooks })`, `backend.webhooks.register()`, or `supabase/webhooks.json`. Built on the CDC pipeline — no extension needed |
|
|
127
|
-
| Studio (Admin UI) | `/_/` | A Supabase-Studio-style dashboard (React + Radix + Tailwind):
|
|
127
|
+
| Studio (Admin UI) | `/_/` | A Supabase-Studio-style dashboard (React + Radix + Tailwind) with real URL routing and a command palette: table editor (filters, sorting, inline type-aware editing, FK navigation, RLS + role preview), database section (schema visualizer, tables, functions, triggers, enums, indexes, migrations, policies, roles), authentication, storage, edge functions, realtime, automations (cron/queues/webhooks), logs, SQL editor, settings, and a live Advisor. One self-contained HTML file (works in the single binary); log in with the service_role key |
|
|
128
128
|
| Realtime | `/realtime/v1` | Phoenix protocol (v1 JSON and v2 array/binary serializers), `postgres_changes` (INSERT/UPDATE/DELETE, filters) fed by triggers + `pg_notify`, broadcast (incl. binary payloads), presence. WebSocket server is a ~150-line RFC 6455 implementation - no `ws` dependency |
|
|
129
129
|
|
|
130
130
|
### RLS works like real Supabase
|
|
@@ -139,14 +139,15 @@ create policy "own rows" on todos
|
|
|
139
139
|
|
|
140
140
|
## Studio
|
|
141
141
|
|
|
142
|
-
tinbase ships with a built-in dashboard at [`/_/`](http://127.0.0.1:54321/_/) - the same shape as Supabase Studio:
|
|
142
|
+
tinbase ships with a built-in dashboard at [`/_/`](http://127.0.0.1:54321/_/) - the same shape as Supabase Studio, with real URL routing (deep links, back/forward), a `Ctrl+K` command palette, light/dark theming, and drag-resizable panels:
|
|
143
143
|
|
|
144
|
-
- **Table Editor** - browse
|
|
145
|
-
- **SQL Editor** -
|
|
146
|
-
- **
|
|
147
|
-
- **
|
|
148
|
-
- **
|
|
149
|
-
- **
|
|
144
|
+
- **Table Editor** - browse and edit with filters, column sorting, checkboxes and bulk actions; inline type-aware cell editors (enums and booleans as pickers, timestamps with a NOW helper); foreign-key navigation; RLS controls and "view data as" role preview; a schema selector; and a Data/Definition split.
|
|
145
|
+
- **SQL Editor** - saved queries and tabs, run-as-role, result limits, history, schema-aware autocomplete, and a results grid with CSV/JSON export.
|
|
146
|
+
- **Database** - a schema visualizer plus tables, functions, triggers, enumerated types, indexes, migrations, policies, and roles - each with create/edit flows in side sheets.
|
|
147
|
+
- **Authentication** - a users grid with a detail panel, invite via magic link, and live sign-in/provider settings.
|
|
148
|
+
- **Storage** - bucket rail with Files/Settings/Policies tabs, folder browsing, previews, signed URLs, drag-drop upload, and RLS policy management.
|
|
149
|
+
- **Edge Functions / Realtime / Automations / Logs** - an invoke tester and secrets, a live channel inspector with authorization policies, cron/queues/webhooks, and a faceted log explorer.
|
|
150
|
+
- **Advisor** - runs the applicable Supabase security and performance lints live against the catalog, opened from the header or the dashboard, with per-finding detail and a jump to the fix.
|
|
150
151
|
|
|
151
152
|
It is a React app compiled to a single self-contained HTML file, so it also works inside the single binary. Sign in with the `service_role` key printed at startup.
|
|
152
153
|
|
|
@@ -213,7 +214,7 @@ Rough coverage of the supabase-js SDK surface, measured against what each sub-li
|
|
|
213
214
|
|
|
214
215
|
**Overall: roughly 80% of the supabase-js SDK surface - and ~90% of what a typical CRUD + auth + storage + realtime app actually calls.**
|
|
215
216
|
|
|
216
|
-
Beyond the client SDK, the local platform features real projects depend on also work: **type generation**, **RLS** (enforced on REST, Storage, and realtime), **database webhooks**, **cron**, **queues (pgmq)**,
|
|
217
|
+
Beyond the client SDK, the local platform features real projects depend on also work: **type generation**, **RLS** (enforced on REST, Storage, and realtime), **database webhooks**, **cron**, **queues (pgmq)**, a **Supabase-Studio-parity dashboard** (table editor, database catalog, auth/storage/edge-functions/realtime/automations management, SQL editor, and a live Advisor), and Supabase-CLI migration conventions (`db reset` / `db diff`). The remaining gaps are OAuth logins' provider variety, phone auth/MFA polish, and pgvector (needs an extension binary).
|
|
217
218
|
|
|
218
219
|
## Known gaps
|
|
219
220
|
|
package/dist/admin/api.d.ts
CHANGED
|
@@ -1,19 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin API (/admin/v1/*) backing tinbase studio at /_/.
|
|
3
|
+
* Every endpoint requires the service_role key. This is a thin, introspection-
|
|
4
|
+
* and-SQL surface; row CRUD goes through the normal PostgREST layer (with RLS
|
|
5
|
+
* bypassed by the service_role), so the studio uses the same paths an app does.
|
|
6
|
+
*/
|
|
7
|
+
import { type AuthSettings } from '../auth/settings.js';
|
|
1
8
|
import type { Database } from '../db/database.js';
|
|
2
9
|
import type { LogBuffer } from '../log-buffer.js';
|
|
3
10
|
import type { RequestContext } from '../types.js';
|
|
11
|
+
/** Studio-facing admin surface: schema introspection, raw SQL, RLS policies, secrets, and auth settings, all gated on the service_role key. */
|
|
4
12
|
export declare class AdminApi {
|
|
5
13
|
private db;
|
|
6
14
|
private logs?;
|
|
7
|
-
|
|
15
|
+
private auth?;
|
|
16
|
+
private info?;
|
|
17
|
+
constructor(db: Database, logs?: LogBuffer | undefined, auth?: {
|
|
18
|
+
anonKey: string;
|
|
19
|
+
jwtSecret: string;
|
|
20
|
+
} | undefined, info?: {
|
|
21
|
+
/** names of loaded edge functions */
|
|
22
|
+
edgeFunctions: string[];
|
|
23
|
+
/** configured OAuth provider ids */
|
|
24
|
+
oauthProviders: string[];
|
|
25
|
+
/** whether the local dev inbox mailer is mounted at /inbox */
|
|
26
|
+
inbox: boolean;
|
|
27
|
+
/** statically configured database webhooks */
|
|
28
|
+
webhooks: unknown[];
|
|
29
|
+
/** SHARED runtime auth settings - mutated in place so the auth handler sees changes instantly */
|
|
30
|
+
authSettings?: AuthSettings;
|
|
31
|
+
/** env vars injected into edge functions (service_role-only introspection for the studio) */
|
|
32
|
+
functionEnv?: Record<string, string>;
|
|
33
|
+
} | undefined);
|
|
34
|
+
/** Route an /admin/v1/* request to its handler, rejecting any non-service_role caller with a 403. */
|
|
8
35
|
handle(req: Request, ctx: RequestContext, url: URL): Promise<Response>;
|
|
36
|
+
/**
|
|
37
|
+
* Patch the shared runtime auth settings (signups / anonymous / autoconfirm /
|
|
38
|
+
* password length / disabled providers). Mutates the object the auth handler
|
|
39
|
+
* reads on every request - changes apply instantly - and persists it to
|
|
40
|
+
* auth.config so a restart keeps them.
|
|
41
|
+
*/
|
|
42
|
+
private patchAuthSettings;
|
|
43
|
+
/**
|
|
44
|
+
* Add or replace edge-function secrets. Mutates the live functionEnv object
|
|
45
|
+
* the Deno shim reads on the next invocation, so changes apply with no
|
|
46
|
+
* restart. This is a runtime store: it is not written back to
|
|
47
|
+
* supabase/functions/.env, so a restart reloads from that file. Built-in
|
|
48
|
+
* SUPABASE_* vars are read-only and cannot be overwritten here.
|
|
49
|
+
*
|
|
50
|
+
* Body: { secrets: { NAME: value, ... } } - names must be valid env keys.
|
|
51
|
+
*/
|
|
52
|
+
private putSecrets;
|
|
53
|
+
/** Delete one custom edge-function secret. Built-ins cannot be deleted. */
|
|
54
|
+
private deleteSecret;
|
|
55
|
+
/**
|
|
56
|
+
* Mint a short-lived JWT for role preview in the studio ("view data as anon /
|
|
57
|
+
* authenticated"). Requires the service_role key like every admin endpoint.
|
|
58
|
+
*/
|
|
59
|
+
private impersonate;
|
|
60
|
+
/** List a schema's tables and views with columns, primary keys, row counts, and outbound foreign keys for the studio table browser. */
|
|
9
61
|
private listTables;
|
|
62
|
+
/** Run an arbitrary SQL statement from the studio SQL editor, optionally under a SET LOCAL role + JWT claims to preview RLS as anon/authenticated. */
|
|
10
63
|
private runSql;
|
|
64
|
+
/** List user-visible schema names (excluding the Postgres catalog schemas). */
|
|
11
65
|
private schemas;
|
|
66
|
+
/** List applied migrations from supabase_migrations.schema_migrations, ordered by version. */
|
|
12
67
|
private migrations;
|
|
68
|
+
/** List the RLS policies defined in a schema (from pg_policies). */
|
|
13
69
|
private listPolicies;
|
|
70
|
+
/** Create an RLS policy from the studio policy editor, building the CREATE POLICY DDL from the request body. */
|
|
14
71
|
private createPolicy;
|
|
72
|
+
/** Drop an RLS policy by schema/table/name. */
|
|
15
73
|
private dropPolicy;
|
|
74
|
+
/** List a schema's SQL functions with signatures, language, and source body. */
|
|
16
75
|
private listFunctions;
|
|
76
|
+
/** List a schema's user triggers with timing and events, decoded from pg_trigger's tgtype bitmask. */
|
|
17
77
|
private listTriggers;
|
|
78
|
+
/** Summary counts (users, buckets, objects, migrations, tables) plus database size and version for the studio dashboard. */
|
|
18
79
|
private stats;
|
|
19
80
|
}
|
package/dist/admin/api.js
CHANGED
|
@@ -4,20 +4,62 @@
|
|
|
4
4
|
* and-SQL surface; row CRUD goes through the normal PostgREST layer (with RLS
|
|
5
5
|
* bypassed by the service_role), so the studio uses the same paths an app does.
|
|
6
6
|
*/
|
|
7
|
+
import { applyAuthSettingsPatch, saveAuthSettings } from '../auth/settings.js';
|
|
8
|
+
import { statusForSqlState } from '../rest/errors.js';
|
|
7
9
|
import { quoteIdent } from '../db/database.js';
|
|
10
|
+
import { signJwt } from '../jwt.js';
|
|
8
11
|
function json(status, body) {
|
|
9
12
|
return new Response(JSON.stringify(body), {
|
|
10
13
|
status,
|
|
11
14
|
headers: { 'content-type': 'application/json; charset=utf-8' },
|
|
12
15
|
});
|
|
13
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Map any thrown value to an admin error response. Postgres errors get their
|
|
19
|
+
* SQLSTATE-derived status (via PostgREST's mapping) and carry code/detail/hint;
|
|
20
|
+
* everything else is a 500. The `error` field stays a plain string so existing
|
|
21
|
+
* studio callers keep working.
|
|
22
|
+
*/
|
|
23
|
+
function adminError(e) {
|
|
24
|
+
const pg = e;
|
|
25
|
+
if (pg && typeof pg.code === 'string' && /^[0-9A-Z]{5}$/.test(pg.code)) {
|
|
26
|
+
return json(statusForSqlState(pg.code), {
|
|
27
|
+
error: pg.message ?? 'database error',
|
|
28
|
+
code: pg.code,
|
|
29
|
+
detail: pg.detail ?? null,
|
|
30
|
+
hint: pg.hint ?? null,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return json(500, { error: e instanceof Error ? e.message : String(e) });
|
|
34
|
+
}
|
|
35
|
+
/** Built-in edge-function vars tinbase injects - read-only, can't be edited/deleted. */
|
|
36
|
+
const BUILTIN_SECRETS = new Set(['SUPABASE_URL', 'SUPABASE_ANON_KEY', 'SUPABASE_SERVICE_ROLE_KEY']);
|
|
37
|
+
/**
|
|
38
|
+
* SHA-256 digests of every secret value, so the studio can show a stable
|
|
39
|
+
* fingerprint (like hosted Supabase) without ever sending the plaintext of a
|
|
40
|
+
* custom secret back over the wire.
|
|
41
|
+
*/
|
|
42
|
+
async function secretDigests(env) {
|
|
43
|
+
const out = {};
|
|
44
|
+
for (const [name, value] of Object.entries(env)) {
|
|
45
|
+
const buf = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value));
|
|
46
|
+
out[name] = [...new Uint8Array(buf)].map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
/** Studio-facing admin surface: schema introspection, raw SQL, RLS policies, secrets, and auth settings, all gated on the service_role key. */
|
|
14
51
|
export class AdminApi {
|
|
15
52
|
db;
|
|
16
53
|
logs;
|
|
17
|
-
|
|
54
|
+
auth;
|
|
55
|
+
info;
|
|
56
|
+
constructor(db, logs, auth, info) {
|
|
18
57
|
this.db = db;
|
|
19
58
|
this.logs = logs;
|
|
59
|
+
this.auth = auth;
|
|
60
|
+
this.info = info;
|
|
20
61
|
}
|
|
62
|
+
/** Route an /admin/v1/* request to its handler, rejecting any non-service_role caller with a 403. */
|
|
21
63
|
async handle(req, ctx, url) {
|
|
22
64
|
if (ctx.role !== 'service_role') {
|
|
23
65
|
return json(403, { error: 'admin API requires the service_role key' });
|
|
@@ -45,6 +87,34 @@ export class AdminApi {
|
|
|
45
87
|
return await this.listFunctions(url);
|
|
46
88
|
if (path === 'triggers' && method === 'GET')
|
|
47
89
|
return await this.listTriggers(url);
|
|
90
|
+
if (path === 'keys' && method === 'GET')
|
|
91
|
+
return json(200, { anonKey: this.auth?.anonKey ?? null });
|
|
92
|
+
if (path === 'impersonate' && method === 'GET')
|
|
93
|
+
return await this.impersonate(url);
|
|
94
|
+
if (path === 'edge-functions' && method === 'GET') {
|
|
95
|
+
const env = this.info?.functionEnv ?? {};
|
|
96
|
+
return json(200, {
|
|
97
|
+
functions: this.info?.edgeFunctions ?? [],
|
|
98
|
+
env,
|
|
99
|
+
builtins: [...BUILTIN_SECRETS],
|
|
100
|
+
digests: await secretDigests(env),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
if (path === 'edge-functions/secrets' && method === 'PUT')
|
|
104
|
+
return await this.putSecrets(req);
|
|
105
|
+
if (path === 'edge-functions/secrets' && method === 'DELETE')
|
|
106
|
+
return await this.deleteSecret(url);
|
|
107
|
+
if (path === 'auth-config' && method === 'GET') {
|
|
108
|
+
return json(200, {
|
|
109
|
+
providers: this.info?.oauthProviders ?? [],
|
|
110
|
+
inbox: this.info?.inbox ?? false,
|
|
111
|
+
settings: this.info?.authSettings ?? null,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (path === 'auth-config' && method === 'PATCH')
|
|
115
|
+
return await this.patchAuthSettings(req);
|
|
116
|
+
if (path === 'webhooks' && method === 'GET')
|
|
117
|
+
return json(200, { webhooks: this.info?.webhooks ?? [] });
|
|
48
118
|
if (path === 'logs' && method === 'GET')
|
|
49
119
|
return json(200, { logs: this.logs?.list() ?? [] });
|
|
50
120
|
if (path === 'logs' && method === 'DELETE') {
|
|
@@ -54,18 +124,134 @@ export class AdminApi {
|
|
|
54
124
|
return json(404, { error: `unknown admin endpoint: ${path}` });
|
|
55
125
|
}
|
|
56
126
|
catch (e) {
|
|
57
|
-
return
|
|
127
|
+
return adminError(e);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Patch the shared runtime auth settings (signups / anonymous / autoconfirm /
|
|
132
|
+
* password length / disabled providers). Mutates the object the auth handler
|
|
133
|
+
* reads on every request - changes apply instantly - and persists it to
|
|
134
|
+
* auth.config so a restart keeps them.
|
|
135
|
+
*/
|
|
136
|
+
async patchAuthSettings(req) {
|
|
137
|
+
const settings = this.info?.authSettings;
|
|
138
|
+
if (!settings)
|
|
139
|
+
return json(400, { error: 'auth settings are not configured' });
|
|
140
|
+
const body = (await req.json().catch(() => null));
|
|
141
|
+
if (!body || typeof body !== 'object')
|
|
142
|
+
return json(400, { error: 'a JSON object body is required' });
|
|
143
|
+
// only known OAuth providers can be disabled - reject typos outright
|
|
144
|
+
if (Array.isArray(body.disabledProviders)) {
|
|
145
|
+
const known = this.info?.oauthProviders ?? [];
|
|
146
|
+
const unknown = body.disabledProviders.filter((p) => !known.includes(p));
|
|
147
|
+
if (unknown.length > 0)
|
|
148
|
+
return json(400, { error: `unknown provider(s): ${unknown.join(', ')}` });
|
|
149
|
+
}
|
|
150
|
+
const err = applyAuthSettingsPatch(settings, body);
|
|
151
|
+
if (err)
|
|
152
|
+
return json(400, { error: err });
|
|
153
|
+
await saveAuthSettings(this.db, settings);
|
|
154
|
+
return json(200, { settings });
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Add or replace edge-function secrets. Mutates the live functionEnv object
|
|
158
|
+
* the Deno shim reads on the next invocation, so changes apply with no
|
|
159
|
+
* restart. This is a runtime store: it is not written back to
|
|
160
|
+
* supabase/functions/.env, so a restart reloads from that file. Built-in
|
|
161
|
+
* SUPABASE_* vars are read-only and cannot be overwritten here.
|
|
162
|
+
*
|
|
163
|
+
* Body: { secrets: { NAME: value, ... } } - names must be valid env keys.
|
|
164
|
+
*/
|
|
165
|
+
async putSecrets(req) {
|
|
166
|
+
const env = this.info?.functionEnv;
|
|
167
|
+
if (!env)
|
|
168
|
+
return json(400, { error: 'edge functions are not configured' });
|
|
169
|
+
const body = (await req.json().catch(() => null));
|
|
170
|
+
const secrets = body?.secrets;
|
|
171
|
+
if (!secrets || typeof secrets !== 'object' || Array.isArray(secrets)) {
|
|
172
|
+
return json(400, { error: 'body must be { secrets: { NAME: value, ... } }' });
|
|
173
|
+
}
|
|
174
|
+
const names = Object.keys(secrets);
|
|
175
|
+
if (names.length === 0)
|
|
176
|
+
return json(400, { error: 'at least one secret is required' });
|
|
177
|
+
for (const name of names) {
|
|
178
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) {
|
|
179
|
+
return json(400, { error: `invalid secret name "${name}" - use letters, digits, and underscores` });
|
|
180
|
+
}
|
|
181
|
+
if (BUILTIN_SECRETS.has(name))
|
|
182
|
+
return json(400, { error: `"${name}" is a built-in and cannot be changed` });
|
|
183
|
+
if (typeof secrets[name] !== 'string')
|
|
184
|
+
return json(400, { error: `value for "${name}" must be a string` });
|
|
185
|
+
}
|
|
186
|
+
for (const name of names)
|
|
187
|
+
env[name] = secrets[name];
|
|
188
|
+
return json(200, { ok: true, secrets: await secretDigests(env) });
|
|
189
|
+
}
|
|
190
|
+
/** Delete one custom edge-function secret. Built-ins cannot be deleted. */
|
|
191
|
+
async deleteSecret(url) {
|
|
192
|
+
const env = this.info?.functionEnv;
|
|
193
|
+
if (!env)
|
|
194
|
+
return json(400, { error: 'edge functions are not configured' });
|
|
195
|
+
const name = url.searchParams.get('name');
|
|
196
|
+
if (!name)
|
|
197
|
+
return json(400, { error: 'a secret name is required (?name=)' });
|
|
198
|
+
if (BUILTIN_SECRETS.has(name))
|
|
199
|
+
return json(400, { error: `"${name}" is a built-in and cannot be deleted` });
|
|
200
|
+
if (!(name in env))
|
|
201
|
+
return json(404, { error: `secret "${name}" not found` });
|
|
202
|
+
delete env[name];
|
|
203
|
+
return json(200, { ok: true, secrets: await secretDigests(env) });
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Mint a short-lived JWT for role preview in the studio ("view data as anon /
|
|
207
|
+
* authenticated"). Requires the service_role key like every admin endpoint.
|
|
208
|
+
*/
|
|
209
|
+
async impersonate(url) {
|
|
210
|
+
if (!this.auth)
|
|
211
|
+
return json(400, { error: 'impersonation is not configured' });
|
|
212
|
+
const role = url.searchParams.get('role') ?? 'anon';
|
|
213
|
+
if (role !== 'anon' && role !== 'authenticated') {
|
|
214
|
+
return json(400, { error: 'role must be anon or authenticated' });
|
|
58
215
|
}
|
|
216
|
+
const now = Math.floor(Date.now() / 1000);
|
|
217
|
+
const claims = { iss: 'supabase', ref: 'tinbase', role, iat: now, exp: now + 3600 };
|
|
218
|
+
if (role === 'authenticated') {
|
|
219
|
+
const sub = url.searchParams.get('sub');
|
|
220
|
+
if (!sub)
|
|
221
|
+
return json(400, { error: 'sub (user id) is required for authenticated' });
|
|
222
|
+
claims.sub = sub;
|
|
223
|
+
const email = url.searchParams.get('email');
|
|
224
|
+
if (email)
|
|
225
|
+
claims.email = email;
|
|
226
|
+
}
|
|
227
|
+
return json(200, { token: await signJwt(claims, this.auth.jwtSecret), expiresIn: 3600 });
|
|
59
228
|
}
|
|
229
|
+
/** List a schema's tables and views with columns, primary keys, row counts, and outbound foreign keys for the studio table browser. */
|
|
60
230
|
async listTables(url) {
|
|
61
231
|
const schema = url.searchParams.get('schema') ?? 'public';
|
|
62
232
|
this.db.invalidateSchemaCache();
|
|
63
233
|
const info = await this.db.getSchemaInfo(schema);
|
|
234
|
+
// information_schema.columns includes views, so flag them - the studio
|
|
235
|
+
// renders views read-only instead of complaining about a missing PK.
|
|
236
|
+
//
|
|
237
|
+
// Guarded like the per-table count below: the pgmem preview engine has no
|
|
238
|
+
// information_schema.views, and an unguarded throw here failed the whole
|
|
239
|
+
// request, so the studio's table browser showed "No tables yet" for a
|
|
240
|
+
// database full of tables. No views on that engine either, so an empty set
|
|
241
|
+
// is the right answer rather than a degraded one.
|
|
242
|
+
let views = new Set();
|
|
243
|
+
try {
|
|
244
|
+
const viewRows = await this.db.query(`select table_name from information_schema.views where table_schema = $1`, [schema]);
|
|
245
|
+
views = new Set(viewRows.rows.map((v) => v.table_name));
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
// engine without information_schema.views - treat everything as a table
|
|
249
|
+
}
|
|
64
250
|
const tables = [];
|
|
65
251
|
for (const t of info.tables.values()) {
|
|
66
252
|
// A single table whose count fails (e.g. an engine gap in an RLS policy's
|
|
67
253
|
// correlated subquery on the pgmem preview engine) must not blank the whole
|
|
68
|
-
// table list
|
|
254
|
+
// table list - fall back to an unknown count for just that table.
|
|
69
255
|
let count;
|
|
70
256
|
try {
|
|
71
257
|
count = await this.db.query(`select count(*)::int as n from ${quoteIdent(schema)}.${quoteIdent(t.name)}`);
|
|
@@ -81,6 +267,7 @@ export class AdminApi {
|
|
|
81
267
|
name: t.name,
|
|
82
268
|
primaryKey: t.primaryKey,
|
|
83
269
|
rowCount: count.rows[0]?.n ?? 0,
|
|
270
|
+
isView: views.has(t.name),
|
|
84
271
|
foreignKeys: fks,
|
|
85
272
|
columns: t.columns.map((c) => ({
|
|
86
273
|
name: c.name,
|
|
@@ -93,13 +280,25 @@ export class AdminApi {
|
|
|
93
280
|
}
|
|
94
281
|
return json(200, { schema, tables });
|
|
95
282
|
}
|
|
283
|
+
/** Run an arbitrary SQL statement from the studio SQL editor, optionally under a SET LOCAL role + JWT claims to preview RLS as anon/authenticated. */
|
|
96
284
|
async runSql(req) {
|
|
97
285
|
const body = (await req.json().catch(() => ({})));
|
|
98
286
|
if (!body.query?.trim())
|
|
99
287
|
return json(400, { error: 'query is required' });
|
|
288
|
+
const role = body.role?.trim();
|
|
289
|
+
if (role !== undefined && !/^[a-z_][a-z0-9_]{0,62}$/.test(role)) {
|
|
290
|
+
return json(400, { error: 'invalid role name' });
|
|
291
|
+
}
|
|
100
292
|
const started = Date.now();
|
|
101
293
|
try {
|
|
102
|
-
|
|
294
|
+
// When a role is requested ("run as anon/authenticated"), execute inside a
|
|
295
|
+
// transaction with SET LOCAL role + request.jwt.claims - the same mechanism
|
|
296
|
+
// the REST layer uses - so role/claims never leak onto the shared connection
|
|
297
|
+
// between concurrent requests. The claims value is passed as a bound
|
|
298
|
+
// parameter, not interpolated.
|
|
299
|
+
const res = role
|
|
300
|
+
? await this.db.withContext({ role, claims: body.claims ?? { role } }, (q) => q(body.query))
|
|
301
|
+
: await this.db.query(body.query);
|
|
103
302
|
this.db.invalidateSchemaCache();
|
|
104
303
|
return json(200, {
|
|
105
304
|
rows: res.rows.slice(0, 2000),
|
|
@@ -109,20 +308,22 @@ export class AdminApi {
|
|
|
109
308
|
});
|
|
110
309
|
}
|
|
111
310
|
catch (e) {
|
|
112
|
-
|
|
113
|
-
return json(400, { error: pg.message, code: pg.code, detail: pg.detail, hint: pg.hint });
|
|
311
|
+
return adminError(e);
|
|
114
312
|
}
|
|
115
313
|
}
|
|
314
|
+
/** List user-visible schema names (excluding the Postgres catalog schemas). */
|
|
116
315
|
async schemas() {
|
|
117
316
|
const res = await this.db.query(`select schema_name as name from information_schema.schemata
|
|
118
317
|
where schema_name not in ('pg_catalog','information_schema','pg_toast')
|
|
119
318
|
order by schema_name`);
|
|
120
319
|
return json(200, { schemas: res.rows.map((r) => r.name) });
|
|
121
320
|
}
|
|
321
|
+
/** List applied migrations from supabase_migrations.schema_migrations, ordered by version. */
|
|
122
322
|
async migrations() {
|
|
123
323
|
const res = await this.db.query(`select version, name, applied_at from supabase_migrations.schema_migrations order by version`);
|
|
124
324
|
return json(200, { migrations: res.rows });
|
|
125
325
|
}
|
|
326
|
+
/** List the RLS policies defined in a schema (from pg_policies). */
|
|
126
327
|
async listPolicies(url) {
|
|
127
328
|
const schema = url.searchParams.get('schema') ?? 'public';
|
|
128
329
|
const res = await this.db.query(`select schemaname as schema, tablename as table, policyname as name,
|
|
@@ -131,14 +332,19 @@ export class AdminApi {
|
|
|
131
332
|
order by tablename, policyname`, [schema]);
|
|
132
333
|
return json(200, { policies: res.rows });
|
|
133
334
|
}
|
|
335
|
+
/** Create an RLS policy from the studio policy editor, building the CREATE POLICY DDL from the request body. */
|
|
134
336
|
async createPolicy(req) {
|
|
135
337
|
const b = (await req.json().catch(() => ({})));
|
|
136
338
|
if (!b.table || !b.name)
|
|
137
339
|
return json(400, { error: 'table and name are required' });
|
|
138
340
|
const schema = b.schema ?? 'public';
|
|
139
341
|
const cmd = (b.command ?? 'ALL').toUpperCase();
|
|
342
|
+
const behavior = (b.behavior ?? 'PERMISSIVE').toUpperCase();
|
|
343
|
+
if (behavior !== 'PERMISSIVE' && behavior !== 'RESTRICTIVE') {
|
|
344
|
+
return json(400, { error: 'behavior must be PERMISSIVE or RESTRICTIVE' });
|
|
345
|
+
}
|
|
140
346
|
const roles = b.roles?.trim() || 'public';
|
|
141
|
-
let sql = `create policy ${quoteIdent(b.name)} on ${quoteIdent(schema)}.${quoteIdent(b.table)} for ${cmd} to ${roles}`;
|
|
347
|
+
let sql = `create policy ${quoteIdent(b.name)} on ${quoteIdent(schema)}.${quoteIdent(b.table)} as ${behavior} for ${cmd} to ${roles}`;
|
|
142
348
|
if (b.using?.trim())
|
|
143
349
|
sql += ` using (${b.using})`;
|
|
144
350
|
if (b.check?.trim())
|
|
@@ -149,10 +355,10 @@ export class AdminApi {
|
|
|
149
355
|
return json(200, { ok: true });
|
|
150
356
|
}
|
|
151
357
|
catch (e) {
|
|
152
|
-
|
|
153
|
-
return json(400, { error: pg.message, code: pg.code, hint: pg.hint });
|
|
358
|
+
return adminError(e);
|
|
154
359
|
}
|
|
155
360
|
}
|
|
361
|
+
/** Drop an RLS policy by schema/table/name. */
|
|
156
362
|
async dropPolicy(url) {
|
|
157
363
|
const schema = url.searchParams.get('schema') ?? 'public';
|
|
158
364
|
const table = url.searchParams.get('table');
|
|
@@ -161,17 +367,20 @@ export class AdminApi {
|
|
|
161
367
|
return json(400, { error: 'table and name are required' });
|
|
162
368
|
try {
|
|
163
369
|
await this.db.query(`drop policy ${quoteIdent(name)} on ${quoteIdent(schema)}.${quoteIdent(table)}`);
|
|
370
|
+
this.db.invalidateSchemaCache();
|
|
164
371
|
return json(200, { ok: true });
|
|
165
372
|
}
|
|
166
373
|
catch (e) {
|
|
167
|
-
return
|
|
374
|
+
return adminError(e);
|
|
168
375
|
}
|
|
169
376
|
}
|
|
377
|
+
/** List a schema's SQL functions with signatures, language, and source body. */
|
|
170
378
|
async listFunctions(url) {
|
|
171
379
|
const schema = url.searchParams.get('schema') ?? 'public';
|
|
172
380
|
const res = await this.db.query(`select p.proname as name,
|
|
173
381
|
pg_get_function_identity_arguments(p.oid) as args,
|
|
174
382
|
t.typname as returns, l.lanname as language,
|
|
383
|
+
p.prosecdef as security_definer,
|
|
175
384
|
p.prosrc as body
|
|
176
385
|
from pg_proc p
|
|
177
386
|
join pg_namespace n on n.oid = p.pronamespace
|
|
@@ -181,6 +390,7 @@ export class AdminApi {
|
|
|
181
390
|
order by p.proname`, [schema]);
|
|
182
391
|
return json(200, { functions: res.rows });
|
|
183
392
|
}
|
|
393
|
+
/** List a schema's user triggers with timing and events, decoded from pg_trigger's tgtype bitmask. */
|
|
184
394
|
async listTriggers(url) {
|
|
185
395
|
const schema = url.searchParams.get('schema') ?? 'public';
|
|
186
396
|
const res = await this.db.query(`select tg.tgname as name, c.relname as table,
|
|
@@ -198,6 +408,7 @@ export class AdminApi {
|
|
|
198
408
|
order by c.relname, tg.tgname`, [schema]);
|
|
199
409
|
return json(200, { triggers: res.rows });
|
|
200
410
|
}
|
|
411
|
+
/** Summary counts (users, buckets, objects, migrations, tables) plus database size and version for the studio dashboard. */
|
|
201
412
|
async stats() {
|
|
202
413
|
const one = async (sql) => (await this.db.query(sql)).rows[0]?.n ?? 0;
|
|
203
414
|
const users = await one(`select count(*)::int as n from auth.users`);
|
package/dist/admin/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/admin/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/admin/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAqB,MAAM,qBAAqB,CAAA;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,SAAS,IAAI,CAAC,MAAc,EAAE,IAAa;IACzC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,iCAAiC,EAAE;KAC/D,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,CAAU;IAC5B,MAAM,EAAE,GAAG,CAAwE,CAAA;IACnF,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YACtC,KAAK,EAAE,EAAE,CAAC,OAAO,IAAI,gBAAgB;YACrC,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI;YACzB,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI;SACtB,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AACzE,CAAC;AAED,wFAAwF;AACxF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,CAAC,CAAA;AAEnG;;;;GAIG;AACH,KAAK,UAAU,aAAa,CAAC,GAA2B;IACtD,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAClF,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3F,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,+IAA+I;AAC/I,MAAM,OAAO,QAAQ;IAET;IACA;IACA;IACA;IAJV,YACU,EAAY,EACZ,IAAgB,EAChB,IAA6C,EAC7C,IAaP;QAhBO,OAAE,GAAF,EAAE,CAAU;QACZ,SAAI,GAAJ,IAAI,CAAY;QAChB,SAAI,GAAJ,IAAI,CAAyC;QAC7C,SAAI,GAAJ,IAAI,CAaX;IACA,CAAC;IAEJ,qGAAqG;IACrG,KAAK,CAAC,MAAM,CAAC,GAAY,EAAE,GAAmB,EAAE,GAAQ;QACtD,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC,CAAA;QACxE,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;QACxD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QAEvC,IAAI,CAAC;YACH,IAAI,IAAI,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAC5E,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM;gBAAE,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACtE,IAAI,IAAI,KAAK,OAAO,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YACnE,IAAI,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;YACvE,IAAI,IAAI,KAAK,YAAY,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;YAC7E,IAAI,IAAI,KAAK,UAAU,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YAChF,IAAI,IAAI,KAAK,UAAU,IAAI,MAAM,KAAK,MAAM;gBAAE,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACjF,IAAI,IAAI,KAAK,UAAU,IAAI,MAAM,KAAK,QAAQ;gBAAE,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YACjF,IAAI,IAAI,KAAK,WAAW,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;YAClF,IAAI,IAAI,KAAK,UAAU,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YAChF,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC,CAAA;YAClG,IAAI,IAAI,KAAK,aAAa,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YAClF,IAAI,IAAI,KAAK,gBAAgB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAClD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAA;gBACxC,OAAO,IAAI,CAAC,GAAG,EAAE;oBACf,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,IAAI,EAAE;oBACzC,GAAG;oBACH,QAAQ,EAAE,CAAC,GAAG,eAAe,CAAC;oBAC9B,OAAO,EAAE,MAAM,aAAa,CAAC,GAAG,CAAC;iBAClC,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,IAAI,KAAK,wBAAwB,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAC5F,IAAI,IAAI,KAAK,wBAAwB,IAAI,MAAM,KAAK,QAAQ;gBAAE,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACjG,IAAI,IAAI,KAAK,aAAa,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC,GAAG,EAAE;oBACf,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,IAAI,EAAE;oBAC1C,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK;oBAChC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,IAAI;iBAC1C,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,IAAI,KAAK,aAAa,IAAI,MAAM,KAAK,OAAO;gBAAE,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAA;YAC1F,IAAI,IAAI,KAAK,UAAU,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAA;YACtG,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;YAC5F,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC3C,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;gBAClB,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;YAChC,CAAC;YACD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,2BAA2B,IAAI,EAAE,EAAE,CAAC,CAAA;QAChE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,UAAU,CAAC,CAAC,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,iBAAiB,CAAC,GAAY;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAA;QACxC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC,CAAA;QAC9E,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAmC,CAAA;QACnF,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAA;QACpG,qEAAqE;QACrE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,IAAI,EAAE,CAAA;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAW,CAAC,CAAC,CAAA;YAClF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QACnG,CAAC;QACD,MAAM,GAAG,GAAG,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAClD,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;QACzC,MAAM,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;QACzC,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAA;IAChC,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,UAAU,CAAC,GAAY;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAA;QAClC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC,CAAA;QAC1E,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAiD,CAAA;QACjG,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,CAAA;QAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACtE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,gDAAgD,EAAE,CAAC,CAAA;QAC/E,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAA;QACtF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,wBAAwB,IAAI,0CAA0C,EAAE,CAAC,CAAA;YACrG,CAAC;YACD,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,uCAAuC,EAAE,CAAC,CAAA;YAC3G,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,IAAI,oBAAoB,EAAE,CAAC,CAAA;QAC5G,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAW,CAAA;QAC7D,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,2EAA2E;IACnE,KAAK,CAAC,YAAY,CAAC,GAAQ;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAA;QAClC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC,CAAA;QAC1E,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACzC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAA;QAC5E,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,uCAAuC,EAAE,CAAC,CAAA;QAC3G,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,IAAI,aAAa,EAAE,CAAC,CAAA;QAC7E,OAAO,GAAG,CAAC,IAAI,CAAC,CAAA;QAChB,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACnE,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,WAAW,CAAC,GAAQ;QAChC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAA;QAC9E,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAA;QACnD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;QACzC,MAAM,MAAM,GAA4B,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,CAAA;QAC5G,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACvC,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC,CAAA;YACpF,MAAM,CAAC,GAAG,GAAG,GAAG,CAAA;YAChB,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC3C,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1F,CAAC;IAED,uIAAuI;IAC/H,KAAK,CAAC,UAAU,CAAC,GAAQ;QAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAA;QACzD,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAA;QAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAChD,uEAAuE;QACvE,qEAAqE;QACrE,EAAE;QACF,0EAA0E;QAC1E,yEAAyE;QACzE,sEAAsE;QACtE,2EAA2E;QAC3E,kDAAkD;QAClD,IAAI,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;QAC7B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAClC,yEAAyE,EACzE,CAAC,MAAM,CAAC,CACT,CAAA;YACD,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;QAC1E,CAAC;QACD,MAAM,MAAM,GAAG,EAAE,CAAA;QACjB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,0EAA0E;YAC1E,4EAA4E;YAC5E,kEAAkE;YAClE,IAAI,KAAgC,CAAA;YACpC,IAAI,CAAC;gBACH,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACzB,kCAAkC,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAC7E,CAAA;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;YAC/B,CAAC;YACD,6DAA6D;YAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW;iBACzB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,KAAK,MAAM,IAAI,EAAE,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,CAAC;iBACjE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;YACpH,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC/B,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzB,WAAW,EAAE,GAAG;gBAChB,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC7B,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,CAAC,CAAC,OAAO;oBACf,QAAQ,EAAE,CAAC,CAAC,UAAU;oBACtB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,YAAY,EAAE,CAAC,CAAC,YAAY;iBAC7B,CAAC,CAAC;aACJ,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACtC,CAAC;IAED,sJAAsJ;IAC9I,KAAK,CAAC,MAAM,CAAC,GAAY;QAC/B,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAM/C,CAAA;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAA;QACzE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAA;QAC9B,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAClD,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC1B,IAAI,CAAC;YACH,2EAA2E;YAC3E,4EAA4E;YAC5E,6EAA6E;YAC7E,qEAAqE;YACrE,+BAA+B;YAC/B,MAAM,GAAG,GAAG,IAAI;gBACd,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC;gBAC7F,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACnC,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAA;YAC/B,OAAO,IAAI,CAAC,GAAG,EAAE;gBACf,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;gBAC7B,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM;gBACzB,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,IAAI;gBACtC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;aACzB,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,UAAU,CAAC,CAAC,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,+EAA+E;IACvE,KAAK,CAAC,OAAO;QACnB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAC7B;;4BAEsB,CACvB,CAAA;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,8FAA8F;IACtF,KAAK,CAAC,UAAU;QACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAC7B,8FAA8F,CAC/F,CAAA;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,oEAAoE;IAC5D,KAAK,CAAC,YAAY,CAAC,GAAQ;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAA;QACzD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAC7B;;;sCAGgC,EAChC,CAAC,MAAM,CAAC,CACT,CAAA;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,gHAAgH;IACxG,KAAK,CAAC,YAAY,CAAC,GAAY;QACrC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAS5C,CAAA;QACD,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAA;QACnF,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAA;QACnC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;QAC9C,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;QAC3D,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC,CAAA;QAC3E,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAA;QACzC,IAAI,GAAG,GAAG,iBAAiB,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,QAAQ,GAAG,OAAO,KAAK,EAAE,CAAA;QACrI,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE;YAAE,GAAG,IAAI,WAAW,CAAC,CAAC,KAAK,GAAG,CAAA;QACjD,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE;YAAE,GAAG,IAAI,gBAAgB,CAAC,CAAC,KAAK,GAAG,CAAA;QACtD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACxB,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAA;YAC/B,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAChC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,UAAU,CAAC,CAAC,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,+CAA+C;IACvC,KAAK,CAAC,UAAU,CAAC,GAAQ;QAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAA;QACzD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACzC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,CAAA;QAC/E,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,UAAU,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACpG,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAA;YAC/B,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAChC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,UAAU,CAAC,CAAC,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,gFAAgF;IACxE,KAAK,CAAC,aAAa,CAAC,GAAQ;QAClC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAA;QACzD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAC7B;;;;;;;;;;0BAUoB,EACpB,CAAC,MAAM,CAAC,CACT,CAAA;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED,sGAAsG;IAC9F,KAAK,CAAC,YAAY,CAAC,GAAQ;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAA;QACzD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAC7B;;;;;;;;;;;;qCAY+B,EAC/B,CAAC,MAAM,CAAC,CACT,CAAA;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,4HAA4H;IACpH,KAAK,CAAC,KAAK;QACjB,MAAM,GAAG,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAgB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;QAC5F,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,2CAA2C,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,gDAAgD,CAAC,CAAA;QAC3E,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,gDAAgD,CAAC,CAAA;QAC3E,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,sEAAsE,CAAC,CAAA;QACpG,MAAM,MAAM,GAAG,MAAM,GAAG,CACtB,kHAAkH,CACnH,CAAA;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAC9B,kFAAkF,CACnF,CAAA;QACD,OAAO,IAAI,CAAC,GAAG,EAAE;YACf,KAAK;YACL,OAAO;YACP,OAAO;YACP,UAAU;YACV,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG;YAC9B,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAClD,CAAC,CAAA;IACJ,CAAC;CACF"}
|