@relayfile/adapter-airtable 0.2.4 → 0.2.5

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.
@@ -0,0 +1,164 @@
1
+ import { extractAirtableNotificationChangedFieldIds, extractAirtableNotificationChanges, parseAirtableWebhookPayload, } from './webhook-normalizer.js';
2
+ export function buildSummary(input) {
3
+ const payload = isWebhookNotification(input)
4
+ ? (input.payload ?? {})
5
+ : input;
6
+ const record = parseAirtableWebhookPayload(payload);
7
+ const normalized = isWebhookNotification(input) ? input : undefined;
8
+ const baseId = normalized?.baseId ??
9
+ readOptionalString(record.baseId) ??
10
+ readOptionalString(record.base_id) ??
11
+ readOptionalString(getRecord(record.base)?.id);
12
+ const webhookId = normalized?.webhookId ??
13
+ readOptionalString(record.webhookId) ??
14
+ readOptionalString(record.webhook_id) ??
15
+ readOptionalString(getRecord(record.webhook)?.id) ??
16
+ readOptionalString(record.id);
17
+ const fieldNamesById = buildFieldNamesById(record);
18
+ const fieldsChanged = uniqueStrings([
19
+ ...(normalized?.changedFieldIds ?? [])
20
+ .map((fieldId) => resolveFieldName(fieldNamesById, fieldId))
21
+ .filter((value) => Boolean(value)),
22
+ ...(normalized?.changes ?? [])
23
+ .map((change) => change.fieldName ?? resolveFieldName(fieldNamesById, change.fieldId))
24
+ .filter((value) => Boolean(value)),
25
+ ...extractAirtableNotificationChangedFieldIds(record)
26
+ .map((fieldId) => resolveFieldName(fieldNamesById, fieldId) ?? fieldId)
27
+ .filter((value) => Boolean(value)),
28
+ ...extractAirtableNotificationChanges(record, 50)
29
+ .map((change) => change.fieldName ?? resolveFieldName(fieldNamesById, change.fieldId) ?? change.fieldId)
30
+ .filter((value) => Boolean(value)),
31
+ ]).slice(0, 16);
32
+ const tableIds = uniqueStrings([
33
+ ...extractAirtableNotificationChanges(record, 50)
34
+ .map((change) => change.tableId)
35
+ .filter((value) => Boolean(value)),
36
+ ]).slice(0, 6);
37
+ const actor = readActor(record);
38
+ const title = resolveNotificationTitle(record)
39
+ ?? (baseId ? `Airtable base ${baseId} change notification` : 'Airtable change notification');
40
+ return {
41
+ title,
42
+ ...(actor ? { actor } : {}),
43
+ ...(fieldsChanged.length > 0 ? { fieldsChanged } : {}),
44
+ ...(tableIds.length > 0 || webhookId
45
+ ? {
46
+ tags: uniqueStrings([
47
+ 'airtable',
48
+ 'notification',
49
+ ...(webhookId ? [`webhook:${webhookId}`] : []),
50
+ ...tableIds.map((tableId) => `table:${tableId}`),
51
+ ]).slice(0, 8),
52
+ }
53
+ : {}),
54
+ };
55
+ }
56
+ function resolveNotificationTitle(record) {
57
+ const changedTablesById = getRecord(record.changedTablesById);
58
+ if (!changedTablesById) {
59
+ return undefined;
60
+ }
61
+ for (const tableChange of Object.values(changedTablesById)) {
62
+ const changedRecordsById = getRecord(getRecord(tableChange)?.changedRecordsById);
63
+ if (!changedRecordsById) {
64
+ continue;
65
+ }
66
+ for (const changeRecord of Object.values(changedRecordsById)) {
67
+ const currentFields = getRecord(getRecord(changeRecord)?.current)?.cellValuesByFieldId;
68
+ const previousFields = getRecord(getRecord(changeRecord)?.previous)?.cellValuesByFieldId;
69
+ const title = firstNonEmptyString(...Object.values(getRecord(currentFields) ?? {}))
70
+ ?? firstNonEmptyString(...Object.values(getRecord(previousFields) ?? {}));
71
+ if (title) {
72
+ return title;
73
+ }
74
+ }
75
+ }
76
+ return undefined;
77
+ }
78
+ function readActor(record) {
79
+ const user = getRecord(getRecord(getRecord(record.actionMetadata)?.sourceMetadata)?.user) ??
80
+ getRecord(record.actor);
81
+ const id = readOptionalString(user?.id);
82
+ if (!id) {
83
+ return undefined;
84
+ }
85
+ const displayName = readOptionalString(user?.displayName) ??
86
+ readOptionalString(user?.name);
87
+ return {
88
+ id,
89
+ ...(displayName ? { displayName } : {}),
90
+ };
91
+ }
92
+ function buildFieldNamesById(record) {
93
+ const names = new Map();
94
+ collectFieldDefinitions(names, record.fields);
95
+ collectFieldDefinitions(names, getRecord(record.table)?.fields);
96
+ const baseTables = getRecord(record.base)?.tables;
97
+ if (Array.isArray(baseTables)) {
98
+ for (const table of baseTables) {
99
+ collectFieldDefinitions(names, getRecord(table)?.fields);
100
+ }
101
+ }
102
+ const changedTablesById = getRecord(record.changedTablesById);
103
+ if (changedTablesById) {
104
+ for (const tableChange of Object.values(changedTablesById)) {
105
+ const tableRecord = getRecord(tableChange);
106
+ collectFieldDefinitions(names, getRecord(tableRecord?.table)?.fields);
107
+ const fieldsById = getRecord(tableRecord?.fieldsById);
108
+ if (!fieldsById) {
109
+ continue;
110
+ }
111
+ for (const [fieldId, value] of Object.entries(fieldsById)) {
112
+ const fieldName = readOptionalString(getRecord(value)?.name);
113
+ if (fieldName) {
114
+ names.set(fieldId, fieldName);
115
+ }
116
+ }
117
+ }
118
+ }
119
+ return names;
120
+ }
121
+ function collectFieldDefinitions(names, value) {
122
+ if (!Array.isArray(value)) {
123
+ return;
124
+ }
125
+ for (const entry of value) {
126
+ const record = getRecord(entry);
127
+ const fieldId = readOptionalString(record?.id);
128
+ const fieldName = readOptionalString(record?.name);
129
+ if (fieldId && fieldName) {
130
+ names.set(fieldId, fieldName);
131
+ }
132
+ }
133
+ }
134
+ function resolveFieldName(fieldNamesById, fieldId) {
135
+ if (!fieldId) {
136
+ return undefined;
137
+ }
138
+ return fieldNamesById.get(fieldId) ?? fieldId;
139
+ }
140
+ function getRecord(value) {
141
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
142
+ ? value
143
+ : undefined;
144
+ }
145
+ function isWebhookNotification(value) {
146
+ const record = getRecord(value);
147
+ return Boolean(record && typeof record.baseId === 'string' && typeof record.webhookId === 'string');
148
+ }
149
+ function readOptionalString(value) {
150
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
151
+ }
152
+ function uniqueStrings(values) {
153
+ return Array.from(new Set(values.map((value) => value.trim()).filter(Boolean)));
154
+ }
155
+ function firstNonEmptyString(...values) {
156
+ for (const value of values) {
157
+ const string = readOptionalString(value);
158
+ if (string) {
159
+ return string;
160
+ }
161
+ }
162
+ return undefined;
163
+ }
164
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../src/summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=summary.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.test.d.ts","sourceRoot":"","sources":["../src/summary.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,79 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { buildSummary } from './summary.js';
4
+ test('buildSummary derives the Airtable title from the first changed text cell', () => {
5
+ const summary = buildSummary({
6
+ baseId: 'app_base',
7
+ changedFieldIds: ['fld_name', 'fld_status'],
8
+ changes: [
9
+ { fieldId: 'fld_name', recordId: 'rec_1', tableId: 'tbl_tasks', type: 'update' },
10
+ { fieldId: 'fld_status', recordId: 'rec_1', tableId: 'tbl_tasks', type: 'update' },
11
+ ],
12
+ payload: {
13
+ table: {
14
+ fields: [
15
+ { id: 'fld_name', name: 'Name' },
16
+ { id: 'fld_status', name: 'Status' },
17
+ ],
18
+ },
19
+ actionMetadata: {
20
+ sourceMetadata: {
21
+ user: {
22
+ id: 'usr_1',
23
+ displayName: 'Ada Lovelace',
24
+ },
25
+ },
26
+ },
27
+ changedTablesById: {
28
+ tbl_tasks: {
29
+ changedRecordsById: {
30
+ rec_1: {
31
+ current: {
32
+ cellValuesByFieldId: {
33
+ fld_name: 'Ship Airtable adapter',
34
+ fld_status: 'Done',
35
+ },
36
+ },
37
+ },
38
+ },
39
+ },
40
+ },
41
+ },
42
+ timestamp: '2026-05-12T01:00:00.000Z',
43
+ webhookId: 'ach_1',
44
+ });
45
+ assert.deepEqual(summary, {
46
+ actor: {
47
+ id: 'usr_1',
48
+ displayName: 'Ada Lovelace',
49
+ },
50
+ fieldsChanged: ['Name', 'Status'],
51
+ tags: ['airtable', 'notification', 'webhook:ach_1', 'table:tbl_tasks'],
52
+ title: 'Ship Airtable adapter',
53
+ });
54
+ });
55
+ test('buildSummary falls back to Airtable field ids when the notification lacks schema metadata', () => {
56
+ const summary = buildSummary({
57
+ baseId: 'app_base',
58
+ changedFieldIds: ['fld_status'],
59
+ payload: {
60
+ changedTablesById: {
61
+ tbl_tasks: {
62
+ changedRecordsById: {
63
+ rec_1: {
64
+ current: {
65
+ cellValuesByFieldId: {
66
+ fld_status: 'Done',
67
+ },
68
+ },
69
+ },
70
+ },
71
+ },
72
+ },
73
+ },
74
+ timestamp: '2026-05-12T01:00:00.000Z',
75
+ webhookId: 'ach_2',
76
+ });
77
+ assert.deepEqual(summary.fieldsChanged, ['fld_status']);
78
+ });
79
+ //# sourceMappingURL=summary.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.test.js","sourceRoot":"","sources":["../src/summary.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,IAAI,CAAC,0EAA0E,EAAE,GAAG,EAAE;IACpF,MAAM,OAAO,GAAG,YAAY,CAAC;QAC3B,MAAM,EAAE,UAAU;QAClB,eAAe,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC;QAC3C,OAAO,EAAE;YACP,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChF,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;SACnF;QACD,OAAO,EAAE;YACP,KAAK,EAAE;gBACL,MAAM,EAAE;oBACN,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;oBAChC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACrC;aACF;YACD,cAAc,EAAE;gBACd,cAAc,EAAE;oBACd,IAAI,EAAE;wBACJ,EAAE,EAAE,OAAO;wBACX,WAAW,EAAE,cAAc;qBAC5B;iBACF;aACF;YACD,iBAAiB,EAAE;gBACjB,SAAS,EAAE;oBACT,kBAAkB,EAAE;wBAClB,KAAK,EAAE;4BACL,OAAO,EAAE;gCACP,mBAAmB,EAAE;oCACnB,QAAQ,EAAE,uBAAuB;oCACjC,UAAU,EAAE,MAAM;iCACnB;6BACF;yBACF;qBACF;iBACF;aACF;SACF;QACD,SAAS,EAAE,0BAA0B;QACrC,SAAS,EAAE,OAAO;KACnB,CAAC,CAAC;IAEH,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE;QACxB,KAAK,EAAE;YACL,EAAE,EAAE,OAAO;YACX,WAAW,EAAE,cAAc;SAC5B;QACD,aAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;QACjC,IAAI,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,CAAC;QACtE,KAAK,EAAE,uBAAuB;KAC/B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2FAA2F,EAAE,GAAG,EAAE;IACrG,MAAM,OAAO,GAAG,YAAY,CAAC;QAC3B,MAAM,EAAE,UAAU;QAClB,eAAe,EAAE,CAAC,YAAY,CAAC;QAC/B,OAAO,EAAE;YACP,iBAAiB,EAAE;gBACjB,SAAS,EAAE;oBACT,kBAAkB,EAAE;wBAClB,KAAK,EAAE;4BACL,OAAO,EAAE;gCACP,mBAAmB,EAAE;oCACnB,UAAU,EAAE,MAAM;iCACnB;6BACF;yBACF;qBACF;iBACF;aACF;SACF;QACD,SAAS,EAAE,0BAA0B;QACrC,SAAS,EAAE,OAAO;KACnB,CAAC,CAAC;IAEH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { EventSummary as SharedEventSummary } from '@agent-relay/events';
1
2
  export declare const AIRTABLE_WEBHOOK_OBJECT_TYPES: readonly ["record", "table", "base"];
2
3
  export declare const AIRTABLE_WEBHOOK_ACTIONS: readonly ["create", "update", "delete"];
3
4
  export type AirtableWebhookObjectType = (typeof AIRTABLE_WEBHOOK_OBJECT_TYPES)[number];
@@ -90,6 +91,54 @@ export type AirtableRecordWebhookPayload = AirtableWebhookBase<AirtableRecord>;
90
91
  export type AirtableTableWebhookPayload = AirtableWebhookBase<AirtableTable>;
91
92
  export type AirtableBaseWebhookPayload = AirtableWebhookBase<AirtableBase>;
92
93
  export type AirtableWebhookPayload = AirtableBaseWebhookPayload | AirtableRecordWebhookPayload | AirtableTableWebhookPayload | AirtableWebhookBase<Record<string, unknown>>;
94
+ export interface AirtableEventActorSummary {
95
+ id: string;
96
+ displayName?: string;
97
+ }
98
+ export type AirtableEventSummary = SharedEventSummary;
99
+ export interface AirtableNotificationChange {
100
+ fieldId?: string;
101
+ fieldName?: string;
102
+ recordId?: string;
103
+ tableId?: string;
104
+ type?: string;
105
+ }
106
+ export interface AirtableWebhookNotification {
107
+ baseId: string;
108
+ kind?: string;
109
+ webhookId: string;
110
+ timestamp: string;
111
+ notificationId?: string;
112
+ changedFieldIds?: string[];
113
+ changes?: AirtableNotificationChange[];
114
+ connectionId?: string;
115
+ cursor?: number;
116
+ path?: string;
117
+ payload?: Record<string, unknown>;
118
+ payloadFormat?: string;
119
+ provider?: string;
120
+ providerConfigKey?: string;
121
+ }
122
+ export interface AirtableWebhookPayloadPage {
123
+ cursor?: number;
124
+ mightHaveMore?: boolean;
125
+ payloadFormat?: string;
126
+ payloads: Record<string, unknown>[];
127
+ }
128
+ export interface AirtableMaterializedChangePayload extends AirtableWebhookPayloadPage {
129
+ baseId: string;
130
+ digest: string;
131
+ webhookId: string;
132
+ notificationId: string;
133
+ endpoint: string;
134
+ path: string;
135
+ data: Record<string, unknown>;
136
+ }
137
+ export interface AirtableFetchOnDemandOptions extends Pick<AirtableAdapterConfig, 'apiUrl' | 'connectionId' | 'providerConfigKey'> {
138
+ cursor?: number;
139
+ defaultBaseId?: string;
140
+ query?: Record<string, string>;
141
+ }
93
142
  export interface AirtableReadRequest {
94
143
  action: 'get_base' | 'get_record' | 'get_table_records';
95
144
  method: 'GET';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,QAAQ;IACR,OAAO;IACP,MAAM;CACE,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,QAAQ;IACR,QAAQ;IACR,QAAQ;CACA,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,QAAQ;IACR,OAAO;IACP,MAAM;CACE,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,QAAQ;IACR,QAAQ;IACR,QAAQ;CACA,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { NormalizedWebhook } from './airtable-adapter.js';
2
+ import type { AirtableNotificationChange, AirtableWebhookNotification } from './types.js';
2
3
  export declare const AIRTABLE_PROVIDER = "airtable";
3
4
  export declare const AIRTABLE_CONTENT_MAC_HEADER = "x-airtable-content-mac";
4
5
  export declare const AIRTABLE_TIMESTAMP_HEADER = "x-airtable-timestamp";
@@ -35,12 +36,21 @@ export interface NormalizeAirtableWebhookOptions {
35
36
  toleranceMs?: number;
36
37
  webhookSecret?: string;
37
38
  }
39
+ export type NormalizeAirtableNotificationOptions = Omit<NormalizeAirtableWebhookOptions, 'requireTimestamp'> & {
40
+ defaultBaseId?: string;
41
+ defaultConnectionId?: string;
42
+ defaultProvider?: string;
43
+ defaultProviderConfigKey?: string;
44
+ };
38
45
  export declare function normalizeAirtableWebhook(rawPayload: unknown, headers?: AirtableWebhookHeaders, options?: NormalizeAirtableWebhookOptions): NormalizedWebhook;
46
+ export declare function normalizeAirtableNotification(rawPayload: unknown, headers?: AirtableWebhookHeaders, options?: NormalizeAirtableNotificationOptions): AirtableWebhookNotification;
39
47
  export declare function parseAirtableWebhookPayload(rawPayload: unknown): AirtableRecord;
40
48
  export declare function extractAirtableConnectionMetadata(payload: unknown, headers?: AirtableWebhookHeaders): AirtableWebhookConnectionMetadata;
41
49
  export declare function extractAirtableEventType(payload: unknown, headers?: AirtableWebhookHeaders, objectType?: string, action?: string): string;
42
50
  export declare function extractAirtableObjectType(payload: unknown, headers?: AirtableWebhookHeaders): string;
43
51
  export declare function extractAirtableObjectId(payload: unknown, objectType?: string): string;
52
+ export declare function extractAirtableNotificationChangedFieldIds(payload: unknown): string[];
53
+ export declare function extractAirtableNotificationChanges(payload: unknown, limit?: number): AirtableNotificationChange[];
44
54
  export declare function computeAirtableWebhookSignature(rawPayload: unknown, secret: string): string;
45
55
  export declare function validateAirtableWebhookSignature(rawPayload: unknown, headers: AirtableWebhookHeaders, secret: string): AirtableWebhookSignatureValidationResult;
46
56
  export declare function assertValidAirtableWebhookSignature(rawPayload: unknown, headers: AirtableWebhookHeaders, secret: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-normalizer.d.ts","sourceRoot":"","sources":["../src/webhook-normalizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhook-normalizer.d.ts","sourceRoot":"","sources":["../src/webhook-normalizer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,KAAK,EACV,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAC5C,eAAO,MAAM,2BAA2B,2BAA2B,CAAC;AACpE,eAAO,MAAM,yBAAyB,yBAAyB,CAAC;AAChE,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAC9D,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AACxD,eAAO,MAAM,yBAAyB,iBAAiB,CAAC;AA0BxD,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9C,KAAK,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEpF,MAAM,MAAM,sBAAsB,GAC9B,OAAO,GACP,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACnC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEhC,MAAM,WAAW,iCAAiC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,wCAAwC;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,mBAAmB,GAAG,qBAAqB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;IAC9F,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,wCAAwC;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,oCAAoC,GAAG,IAAI,CAAC,+BAA+B,EAAE,kBAAkB,CAAC,GAAG;IAC7G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,OAAO,EACnB,OAAO,GAAE,sBAA2B,EACpC,OAAO,GAAE,+BAAoC,GAC5C,iBAAiB,CA6CnB;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,OAAO,EACnB,OAAO,GAAE,sBAA2B,EACpC,OAAO,GAAE,oCAAyC,GACjD,2BAA2B,CAkF7B;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,OAAO,GAAG,cAAc,CAM/E;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,sBAA2B,GACnC,iCAAiC,CAyFnC;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,sBAA2B,EACpC,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAqBR;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,sBAA2B,GACnC,MAAM,CAkCR;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CA8BrF;AAED,wBAAgB,0CAA0C,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CA+CrF;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,OAAO,EAChB,KAAK,SAAK,GACT,0BAA0B,EAAE,CAiE9B;AAED,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAU3F;AAED,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,MAAM,GACb,wCAAwC,CA4B1C;AAED,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,MAAM,GACb,IAAI,CAKN;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,sBAA2B,EACpC,WAAW,SAA+B,EAC1C,KAAK,SAAa,EAClB,gBAAgB,UAAQ,GACvB,wCAAwC,CAkC1C;AAED,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,sBAA2B,EACpC,WAAW,SAA+B,EAC1C,KAAK,SAAa,EAClB,gBAAgB,UAAQ,GACvB,IAAI,CAKN"}