fg-tracker-sdk 0.13.0 → 0.15.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/CHANGELOG.md +34 -0
- package/README.md +31 -5
- package/dist/context.d.ts +39 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +59 -5
- package/dist/context.js.map +1 -1
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +3 -1
- package/dist/database.js.map +1 -1
- package/dist/express.d.ts +6 -1
- package/dist/express.d.ts.map +1 -1
- package/dist/express.js +20 -6
- package/dist/express.js.map +1 -1
- package/dist/fetch.d.ts.map +1 -1
- package/dist/fetch.js +156 -9
- package/dist/fetch.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/infra/aws.d.ts +7 -4
- package/dist/infra/aws.d.ts.map +1 -1
- package/dist/infra/aws.js +38 -7
- package/dist/infra/aws.js.map +1 -1
- package/dist/infra/lambda.d.ts +2 -0
- package/dist/infra/lambda.d.ts.map +1 -1
- package/dist/infra/lambda.js +6 -3
- package/dist/infra/lambda.js.map +1 -1
- package/dist/infra/messaging.d.ts +10 -2
- package/dist/infra/messaging.d.ts.map +1 -1
- package/dist/infra/messaging.js +22 -3
- package/dist/infra/messaging.js.map +1 -1
- package/dist/logs/shipper.d.ts.map +1 -1
- package/dist/logs/shipper.js +15 -4
- package/dist/logs/shipper.js.map +1 -1
- package/dist/logs/types.d.ts +8 -0
- package/dist/logs/types.d.ts.map +1 -1
- package/dist/monitors.d.ts.map +1 -1
- package/dist/monitors.js +3 -1
- package/dist/monitors.js.map +1 -1
- package/dist/next.d.ts.map +1 -1
- package/dist/next.js +8 -3
- package/dist/next.js.map +1 -1
- package/dist/node-http.d.ts.map +1 -1
- package/dist/node-http.js +12 -3
- package/dist/node-http.js.map +1 -1
- package/dist/normalize.d.ts +58 -8
- package/dist/normalize.d.ts.map +1 -1
- package/dist/normalize.js +383 -79
- package/dist/normalize.js.map +1 -1
- package/dist/pg.d.ts +12 -2
- package/dist/pg.d.ts.map +1 -1
- package/dist/pg.js +464 -213
- package/dist/pg.js.map +1 -1
- package/dist/scrub.d.ts +62 -4
- package/dist/scrub.d.ts.map +1 -1
- package/dist/scrub.js +656 -11
- package/dist/scrub.js.map +1 -1
- package/dist/tracker.d.ts +45 -5
- package/dist/tracker.d.ts.map +1 -1
- package/dist/tracker.js +93 -17
- package/dist/tracker.js.map +1 -1
- package/dist/types.d.ts +44 -8
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -1
package/dist/monitors.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { performance } from 'node:perf_hooks';
|
|
2
2
|
import { toSpanError } from './normalize.js';
|
|
3
|
+
import { scrubText } from './scrub.js';
|
|
3
4
|
/**
|
|
4
5
|
* Check-ins de jobs agendados (CONTRATO.md §18): `in_progress` ao começar,
|
|
5
6
|
* `ok`/`fail` ao terminar, com a duração. Sem apiKey vira no-op.
|
|
@@ -56,7 +57,8 @@ export function createMonitor(core, slug, options = {}) {
|
|
|
56
57
|
if (closed)
|
|
57
58
|
return;
|
|
58
59
|
closed = true;
|
|
59
|
-
|
|
60
|
+
// A mensagem vai para a API fora da fila de spans: mesma limpeza por valor dos spans (§22).
|
|
61
|
+
const message = error === undefined ? 'Job reportou falha' : scrubText(toSpanError(error).message, { fields: core.options.scrubFields, sendDefaultPii: core.options.sendDefaultPii });
|
|
60
62
|
await sendCheckIn(core, slug, payload(core, 'fail', options, { durationMs: durationMs(), error: message.slice(0, 2000) }));
|
|
61
63
|
},
|
|
62
64
|
};
|
package/dist/monitors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitors.js","sourceRoot":"","sources":["../src/monitors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"monitors.js","sourceRoot":"","sources":["../src/monitors.ts"],"names":[],"mappings":"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"}
|
package/dist/next.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CA4CrH"}
|
package/dist/next.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseTraceContext } from './context.js';
|
|
1
|
+
import { parseTraceContext, sanitizeBaggage } from './context.js';
|
|
2
2
|
import { normalizePath } from './normalize.js';
|
|
3
3
|
/**
|
|
4
4
|
* Envolve um route handler do App Router (`export const GET = tracker.wrapNextRoute(...)`)
|
|
@@ -25,15 +25,20 @@ export function wrapNextRouteHandler(core, handler) {
|
|
|
25
25
|
const attributes = {
|
|
26
26
|
url: rawUrl,
|
|
27
27
|
userAgent: req.headers.get('user-agent'),
|
|
28
|
-
ip: req.headers.get('x-forwarded-for')?.split(',')[0]?.trim() ?? null,
|
|
28
|
+
...(core.options.sendDefaultPii ? { ip: req.headers.get('x-forwarded-for')?.split(',')[0]?.trim() ?? null } : {}),
|
|
29
29
|
...(requestId ? { requestId } : {}),
|
|
30
30
|
};
|
|
31
31
|
const remote = parseTraceContext(req.headers.get('traceparent'), req.headers.get('tracestate'));
|
|
32
32
|
const span = remote
|
|
33
|
-
? core.startRemoteRoot('http.server', `${method} ${route}`, attributes, remote)
|
|
33
|
+
? core.startRemoteRoot('http.server', `${method} ${route}`, attributes, remote, { origin: 'http' })
|
|
34
34
|
: core.startSpan('http.server', `${method} ${route}`, attributes, null);
|
|
35
35
|
span.method = method;
|
|
36
36
|
span.route = route;
|
|
37
|
+
if (core.options.propagateBaggageTo !== false) {
|
|
38
|
+
const baggage = sanitizeBaggage(req.headers.get('baggage'));
|
|
39
|
+
if (baggage)
|
|
40
|
+
span.baggage = baggage;
|
|
41
|
+
}
|
|
37
42
|
try {
|
|
38
43
|
const res = await core.runInSpan(span, () => handler(req, ctx));
|
|
39
44
|
span.statusCode = res.status;
|
package/dist/next.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"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"}
|
package/dist/node-http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-http.d.ts","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AA0DjE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"node-http.d.ts","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AA0DjE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,CA6FhE"}
|
package/dist/node-http.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { subscribe, unsubscribe } from 'node:diagnostics_channel';
|
|
2
|
-
import { TRACEPARENT_HEADER, TRACESTATE_HEADER, traceContextHeaders } from './context.js';
|
|
2
|
+
import { BAGGAGE_HEADER, TRACEPARENT_HEADER, TRACESTATE_HEADER, traceContextHeaders } from './context.js';
|
|
3
3
|
import { httpClientSemconv, normalizePath } from './normalize.js';
|
|
4
4
|
import { shouldPropagate } from './tracker.js';
|
|
5
5
|
const CREATED = 'http.client.request.created';
|
|
@@ -50,12 +50,18 @@ export function instrumentNodeHttp(core) {
|
|
|
50
50
|
const request = message.request;
|
|
51
51
|
if (!request || typeof request.setHeader !== 'function')
|
|
52
52
|
return;
|
|
53
|
-
// Fora de um request instrumentado não há trace a que pendurar a chamada
|
|
54
|
-
|
|
53
|
+
// Fora de um request instrumentado não há trace a que pendurar a chamada; dentro de uma chamada
|
|
54
|
+
// do AWS SDK, o span `http.client` dela já cobre este HTTP (S08).
|
|
55
|
+
const parent = core.currentContext();
|
|
56
|
+
if (!core.enabled || !parent)
|
|
55
57
|
return;
|
|
56
58
|
const url = requestUrl(request);
|
|
57
59
|
if (!url)
|
|
58
60
|
return;
|
|
61
|
+
if (parent.httpCovered) {
|
|
62
|
+
core.noteCoveredHttp(url);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
59
65
|
// Nunca instrumentar a entrega ao próprio coletor: daria loop de ingestão.
|
|
60
66
|
if (`${url.origin}${url.pathname}`.startsWith(core.options.endpoint))
|
|
61
67
|
return;
|
|
@@ -75,6 +81,9 @@ export function instrumentNodeHttp(core) {
|
|
|
75
81
|
request.setHeader(TRACEPARENT_HEADER, headers[TRACEPARENT_HEADER]);
|
|
76
82
|
if (headers[TRACESTATE_HEADER] && !request.getHeader(TRACESTATE_HEADER))
|
|
77
83
|
request.setHeader(TRACESTATE_HEADER, headers[TRACESTATE_HEADER]);
|
|
84
|
+
// `baggage` só para quem também está em `propagateBaggageTo` (padrão: ninguém).
|
|
85
|
+
if (parent.baggage && !request.getHeader(BAGGAGE_HEADER) && shouldPropagate(core.options.propagateBaggageTo, url))
|
|
86
|
+
request.setHeader(BAGGAGE_HEADER, parent.baggage);
|
|
78
87
|
span.setAttribute('propagated', true);
|
|
79
88
|
}
|
|
80
89
|
catch {
|
package/dist/node-http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-http.js","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"node-http.js","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"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"}
|
package/dist/normalize.d.ts
CHANGED
|
@@ -11,25 +11,75 @@ export declare function redactedUrl(url: URL): string;
|
|
|
11
11
|
/** Atributos semconv OTel de uma chamada HTTP de saída (aditivos aos históricos `url`/`host`). */
|
|
12
12
|
export declare function httpClientSemconv(url: URL): Record<string, unknown>;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* Dialeto do lexer SQL, escolhido pelo `db.system`. Cada dialeto tem as próprias regras de literal,
|
|
15
|
+
* identificador delimitado e comentário: aplicar as do PostgreSQL a outro sistema deixava passar
|
|
16
|
+
* literais (`"…"` do MySQL, `q'…'` do Oracle, apóstrofo dentro de crase ou colchete). Sistema
|
|
17
|
+
* desconhecido usa o corte conservador (`other`).
|
|
16
18
|
*/
|
|
17
|
-
export
|
|
18
|
-
/**
|
|
19
|
-
export declare function
|
|
20
|
-
|
|
19
|
+
export type SqlDialect = 'postgresql' | 'mysql' | 'sqlite' | 'other';
|
|
20
|
+
/** `postgresql`/`postgres`/`pg`, `mysql`/`mariadb`, `sqlite`/`sqlite3`; o resto é `other`. Sem sistema, PostgreSQL. */
|
|
21
|
+
export declare function sqlDialect(system?: string | null): SqlDialect;
|
|
22
|
+
/**
|
|
23
|
+
* SQL normalizado inteiro (sem o corte de 200 caracteres do nome do span): literais → `'?'`,
|
|
24
|
+
* números e parâmetros → `?`, `IN (...)` → `IN (?)`, comentários fora, espaços colapsados,
|
|
25
|
+
* minúsculas. `system` escolhe o dialeto (padrão PostgreSQL; desconhecido corta no primeiro
|
|
26
|
+
* delimitador que pode abrir literal).
|
|
27
|
+
*/
|
|
28
|
+
export declare function normalizeSqlFull(sql: string, system?: string | null): string;
|
|
29
|
+
/** {@link normalizeSqlFull} com no máximo 200 caracteres (nome do span). */
|
|
30
|
+
export declare function normalizeSql(sql: string, system?: string | null): string;
|
|
21
31
|
/** `db.query.text` vai até este tamanho (o resto é cortado); o fingerprint usa o texto inteiro. */
|
|
22
32
|
export declare const MAX_DB_QUERY_TEXT = 2048;
|
|
23
33
|
/**
|
|
24
34
|
* Nome do span e atributos semconv de uma query: `db.query.text` (SQL normalizado, sem
|
|
25
35
|
* literais), `db.query.fingerprint` (16 hex do SHA-256 do SQL normalizado **inteiro**, calculado
|
|
26
36
|
* antes do corte de 200 caracteres do nome: duas queries com o mesmo prefixo não se fundem) e
|
|
27
|
-
* `db.operation.name` (primeira palavra: SELECT, INSERT, BEGIN…).
|
|
37
|
+
* `db.operation.name` (primeira palavra: SELECT, INSERT, BEGIN…). O nome e o `db.query.text` saem
|
|
38
|
+
* do mesmo lexer, o do dialeto de `system`.
|
|
28
39
|
*/
|
|
29
|
-
export declare function sqlSpanFields(sql: string): {
|
|
40
|
+
export declare function sqlSpanFields(sql: string, system?: string | null): {
|
|
30
41
|
name: string;
|
|
31
42
|
attributes: Record<string, unknown>;
|
|
32
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* Comandos do SQL (PostgreSQL), sem literais, comentários nem o conteúdo de identificadores entre
|
|
46
|
+
* aspas, para a análise local de transações. Lê o texto inteiro; `escapeReading` lê o literal comum
|
|
47
|
+
* como com `standard_conforming_strings = off`. Nunca sai do processo.
|
|
48
|
+
*/
|
|
49
|
+
export declare function sqlCommandText(sql: string, escapeReading?: boolean): string;
|
|
50
|
+
/**
|
|
51
|
+
* Comando de transação de um comando (já sem literais e comentários, em minúsculas):
|
|
52
|
+
* - `begin`: BEGIN, START TRANSACTION;
|
|
53
|
+
* - `commit`: COMMIT, END (não COMMIT PREPARED, que não encerra a transação da sessão);
|
|
54
|
+
* - `rollback`: ROLLBACK, ABORT (não ROLLBACK [WORK|TRANSACTION] TO, que volta a um savepoint, nem
|
|
55
|
+
* ROLLBACK PREPARED);
|
|
56
|
+
* - `prepare`: PREPARE TRANSACTION (2PC; aceito ou recusado, a sessão sai da transação), distinto de
|
|
57
|
+
* `PREPARE nome AS …`;
|
|
58
|
+
* - `chain`: COMMIT/END/ROLLBACK/ABORT … AND CHAIN, que encerra e abre outra na hora.
|
|
59
|
+
*/
|
|
60
|
+
export type SqlTransactionCommand = 'begin' | 'commit' | 'rollback' | 'prepare' | 'chain';
|
|
61
|
+
export declare function sqlTransactionCommand(statement: string): SqlTransactionCommand | null;
|
|
62
|
+
/** Análise dos comandos de transação de um texto (PostgreSQL), feita uma vez por query. */
|
|
63
|
+
export interface SqlCommandAnalysis {
|
|
64
|
+
/** Comandos não vazios na leitura principal. */
|
|
65
|
+
count: number;
|
|
66
|
+
/** Comandos de transação, em ordem, na leitura principal (a do servidor, quando conhecida). */
|
|
67
|
+
transaction: SqlTransactionCommand[];
|
|
68
|
+
/** Algum comando, em qualquer leitura, encerra a transação (inclusive `… AND CHAIN`). */
|
|
69
|
+
closes: boolean;
|
|
70
|
+
/** Algum comando, em qualquer leitura, encerra a transação sem abrir outra (sem `AND CHAIN`). */
|
|
71
|
+
ends: boolean;
|
|
72
|
+
/** O primeiro comando da leitura principal é BEGIN/START TRANSACTION. */
|
|
73
|
+
startsWithBegin: boolean;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Comandos de transação do texto. Com barra invertida no texto (só ela faz as leituras divergirem),
|
|
77
|
+
* lê pelas duas regras de `standard_conforming_strings`: o valor da sessão pode mudar por um `SET`
|
|
78
|
+
* ainda em voo, ou no próprio texto. `closes`/`ends` valem se qualquer leitura encerra: é o lado
|
|
79
|
+
* seguro para quem decide se outra query ainda roda dentro da transação. O valor conhecido da
|
|
80
|
+
* sessão só escolhe a leitura principal (a do servidor).
|
|
81
|
+
*/
|
|
82
|
+
export declare function analyzeSqlCommands(sql: string, standardConformingStrings?: 'on' | 'off'): SqlCommandAnalysis;
|
|
33
83
|
/**
|
|
34
84
|
* Atributos de uma falha de banco pelo SQLSTATE: `db.response.status_code` (semconv) e, para
|
|
35
85
|
* disputa de lock, `db.lock.outcome` (`deadlock`, `lock_not_available` — `lock_timeout`/`NOWAIT` —,
|
package/dist/normalize.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAetE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAQ5C;AAED,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGnE;
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAetE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAQ5C;AAED,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGnE;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErE,uHAAuH;AACvH,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,CAO7D;AAuTD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG5E;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGxE;AAED,mGAAmG;AACnG,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAWxH;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,MAAM,CAEzE;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1F,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAcrF;AAED,2FAA2F;AAC3F,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,+FAA+F;IAC/F,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACrC,yFAAyF;IACzF,MAAM,EAAE,OAAO,CAAC;IAChB,iGAAiG;IACjG,IAAI,EAAE,OAAO,CAAC;IACd,yEAAyE;IACzE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,yBAAyB,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,kBAAkB,CA4B5G;AASD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI/E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAW3F"}
|