@opentabs-dev/opentabs-plugin-ynab 0.0.74
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 +159 -0
- package/dist/adapter.iife.js +15312 -0
- package/dist/adapter.iife.js.map +7 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/create-transaction.d.ts +46 -0
- package/dist/tools/create-transaction.d.ts.map +1 -0
- package/dist/tools/create-transaction.js +57 -0
- package/dist/tools/create-transaction.js.map +1 -0
- package/dist/tools/delete-transaction.d.ts +8 -0
- package/dist/tools/delete-transaction.d.ts.map +1 -0
- package/dist/tools/delete-transaction.js +32 -0
- package/dist/tools/delete-transaction.js.map +1 -0
- package/dist/tools/get-account.d.ts +18 -0
- package/dist/tools/get-account.d.ts.map +1 -0
- package/dist/tools/get-account.js +34 -0
- package/dist/tools/get-account.js.map +1 -0
- package/dist/tools/get-current-user.d.ts +9 -0
- package/dist/tools/get-current-user.d.ts.map +1 -0
- package/dist/tools/get-current-user.js +19 -0
- package/dist/tools/get-current-user.js.map +1 -0
- package/dist/tools/get-month.d.ts +33 -0
- package/dist/tools/get-month.d.ts.map +1 -0
- package/dist/tools/get-month.js +70 -0
- package/dist/tools/get-month.js.map +1 -0
- package/dist/tools/get-plan.d.ts +12 -0
- package/dist/tools/get-plan.d.ts.map +1 -0
- package/dist/tools/get-plan.js +22 -0
- package/dist/tools/get-plan.js.map +1 -0
- package/dist/tools/get-transaction.d.ts +39 -0
- package/dist/tools/get-transaction.d.ts.map +1 -0
- package/dist/tools/get-transaction.js +43 -0
- package/dist/tools/get-transaction.js.map +1 -0
- package/dist/tools/list-accounts.d.ts +18 -0
- package/dist/tools/list-accounts.d.ts.map +1 -0
- package/dist/tools/list-accounts.js +34 -0
- package/dist/tools/list-accounts.js.map +1 -0
- package/dist/tools/list-categories.d.ts +26 -0
- package/dist/tools/list-categories.d.ts.map +1 -0
- package/dist/tools/list-categories.js +62 -0
- package/dist/tools/list-categories.js.map +1 -0
- package/dist/tools/list-months.d.ts +16 -0
- package/dist/tools/list-months.d.ts.map +1 -0
- package/dist/tools/list-months.js +43 -0
- package/dist/tools/list-months.js.map +1 -0
- package/dist/tools/list-payees.d.ts +9 -0
- package/dist/tools/list-payees.d.ts.map +1 -0
- package/dist/tools/list-payees.js +29 -0
- package/dist/tools/list-payees.js.map +1 -0
- package/dist/tools/list-scheduled-transactions.d.ts +21 -0
- package/dist/tools/list-scheduled-transactions.d.ts.map +1 -0
- package/dist/tools/list-scheduled-transactions.js +32 -0
- package/dist/tools/list-scheduled-transactions.js.map +1 -0
- package/dist/tools/list-transactions.d.ts +27 -0
- package/dist/tools/list-transactions.d.ts.map +1 -0
- package/dist/tools/list-transactions.js +44 -0
- package/dist/tools/list-transactions.js.map +1 -0
- package/dist/tools/schemas.d.ts +347 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +266 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/update-category-budget.d.ts +23 -0
- package/dist/tools/update-category-budget.d.ts.map +1 -0
- package/dist/tools/update-category-budget.js +50 -0
- package/dist/tools/update-category-budget.js.map +1 -0
- package/dist/tools/update-transaction.d.ts +47 -0
- package/dist/tools/update-transaction.d.ts.map +1 -0
- package/dist/tools/update-transaction.js +62 -0
- package/dist/tools/update-transaction.js.map +1 -0
- package/dist/tools.json +1684 -0
- package/dist/ynab-api.d.ts +19 -0
- package/dist/ynab-api.d.ts.map +1 -0
- package/dist/ynab-api.js +168 -0
- package/dist/ynab-api.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getPlanId, syncWrite } from '../ynab-api.js';
|
|
4
|
+
import { categorySchema, mapCategory } from './schemas.js';
|
|
5
|
+
export const updateCategoryBudget = defineTool({
|
|
6
|
+
name: 'update_category_budget',
|
|
7
|
+
displayName: 'Update Category Budget',
|
|
8
|
+
description: 'Set the budgeted amount for a category in a specific month. Amount is in currency units (e.g. 500 to budget $500). The month should be in YYYY-MM format (e.g. 2026-03 for March 2026).',
|
|
9
|
+
summary: 'Set budgeted amount for a category',
|
|
10
|
+
icon: 'pencil',
|
|
11
|
+
group: 'Categories',
|
|
12
|
+
input: z.object({
|
|
13
|
+
category_id: z.string().min(1).describe('Category ID to budget'),
|
|
14
|
+
month: z.string().min(1).describe('Month in YYYY-MM format (e.g. 2026-03)'),
|
|
15
|
+
budgeted: z.number().describe('Amount to budget in currency units (e.g. 500 for $500)'),
|
|
16
|
+
}),
|
|
17
|
+
output: z.object({
|
|
18
|
+
category: categorySchema,
|
|
19
|
+
}),
|
|
20
|
+
handle: async (params) => {
|
|
21
|
+
const planId = getPlanId();
|
|
22
|
+
const milliunits = Math.round(params.budgeted * 1000);
|
|
23
|
+
// Month in budget IDs uses YYYY-MM format
|
|
24
|
+
const monthKey = params.month.substring(0, 7);
|
|
25
|
+
const budgetId = `mcb/${monthKey}/${params.category_id}`;
|
|
26
|
+
const monthlyBudgetId = `mb/${monthKey}/${planId}`;
|
|
27
|
+
const result = await syncWrite(planId, {
|
|
28
|
+
be_monthly_subcategory_budgets: [
|
|
29
|
+
{
|
|
30
|
+
id: budgetId,
|
|
31
|
+
entities_monthly_budget_id: monthlyBudgetId,
|
|
32
|
+
entities_subcategory_id: params.category_id,
|
|
33
|
+
budgeted: milliunits,
|
|
34
|
+
overspending_handling: 'AffectsBuffer',
|
|
35
|
+
is_tombstone: false,
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
});
|
|
39
|
+
// The sync write returns the updated budget entity
|
|
40
|
+
const budgets = result.changed_entities?.be_monthly_subcategory_budgets;
|
|
41
|
+
const updatedBudget = budgets?.[0]?.budgeted ?? milliunits;
|
|
42
|
+
return {
|
|
43
|
+
category: mapCategory({
|
|
44
|
+
id: params.category_id,
|
|
45
|
+
budgeted: updatedBudget,
|
|
46
|
+
}),
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=update-category-budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-category-budget.js","sourceRoot":"","sources":["../../src/tools/update-category-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,wBAAwB;IACrC,WAAW,EACT,yLAAyL;IAC3L,OAAO,EAAE,oCAAoC;IAC7C,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QAC3E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;KACxF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,cAAc;KACzB,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;QAEtD,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,OAAO,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACzD,MAAM,eAAe,GAAG,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE;YACrC,8BAA8B,EAAE;gBAC9B;oBACE,EAAE,EAAE,QAAQ;oBACZ,0BAA0B,EAAE,eAAe;oBAC3C,uBAAuB,EAAE,MAAM,CAAC,WAAW;oBAC3C,QAAQ,EAAE,UAAU;oBACpB,qBAAqB,EAAE,eAAe;oBACtC,YAAY,EAAE,KAAK;iBACpB;aACF;SACF,CAAC,CAAC;QAEH,mDAAmD;QACnD,MAAM,OAAO,GACX,MAOD,CAAC,gBAAgB,EAAE,8BAA8B,CAAC;QAEnD,MAAM,aAAa,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,UAAU,CAAC;QAE3D,OAAO;YACL,QAAQ,EAAE,WAAW,CAAC;gBACpB,EAAE,EAAE,MAAM,CAAC,WAAW;gBACtB,QAAQ,EAAE,aAAa;aACxB,CAAC;SACH,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const updateTransaction: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
transaction_id: z.ZodString;
|
|
4
|
+
account_id: z.ZodString;
|
|
5
|
+
date: z.ZodOptional<z.ZodString>;
|
|
6
|
+
amount: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
payee_name: z.ZodOptional<z.ZodString>;
|
|
8
|
+
payee_id: z.ZodOptional<z.ZodString>;
|
|
9
|
+
category_id: z.ZodOptional<z.ZodString>;
|
|
10
|
+
memo: z.ZodOptional<z.ZodString>;
|
|
11
|
+
cleared: z.ZodOptional<z.ZodEnum<{
|
|
12
|
+
cleared: "cleared";
|
|
13
|
+
uncleared: "uncleared";
|
|
14
|
+
reconciled: "reconciled";
|
|
15
|
+
}>>;
|
|
16
|
+
approved: z.ZodOptional<z.ZodBoolean>;
|
|
17
|
+
flag_color: z.ZodOptional<z.ZodEnum<{
|
|
18
|
+
red: "red";
|
|
19
|
+
orange: "orange";
|
|
20
|
+
yellow: "yellow";
|
|
21
|
+
green: "green";
|
|
22
|
+
blue: "blue";
|
|
23
|
+
purple: "purple";
|
|
24
|
+
}>>;
|
|
25
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
26
|
+
transaction: z.ZodObject<{
|
|
27
|
+
id: z.ZodString;
|
|
28
|
+
date: z.ZodString;
|
|
29
|
+
amount: z.ZodString;
|
|
30
|
+
amount_milliunits: z.ZodNumber;
|
|
31
|
+
memo: z.ZodString;
|
|
32
|
+
cleared: z.ZodString;
|
|
33
|
+
approved: z.ZodBoolean;
|
|
34
|
+
flag_color: z.ZodString;
|
|
35
|
+
flag_name: z.ZodString;
|
|
36
|
+
account_id: z.ZodString;
|
|
37
|
+
account_name: z.ZodString;
|
|
38
|
+
payee_id: z.ZodString;
|
|
39
|
+
payee_name: z.ZodString;
|
|
40
|
+
category_id: z.ZodString;
|
|
41
|
+
category_name: z.ZodString;
|
|
42
|
+
transfer_account_id: z.ZodString;
|
|
43
|
+
import_id: z.ZodString;
|
|
44
|
+
deleted: z.ZodBoolean;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
}, z.core.$strip>>;
|
|
47
|
+
//# sourceMappingURL=update-transaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-transaction.d.ts","sourceRoot":"","sources":["../../src/tools/update-transaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAqD5B,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { defineTool, ToolError } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getPlanId, syncWrite } from '../ynab-api.js';
|
|
4
|
+
import { mapTransaction, transactionSchema } from './schemas.js';
|
|
5
|
+
export const updateTransaction = defineTool({
|
|
6
|
+
name: 'update_transaction',
|
|
7
|
+
displayName: 'Update Transaction',
|
|
8
|
+
description: 'Update an existing transaction in the active YNAB plan. Only specified fields are changed; omitted fields remain unchanged. Amount is in currency units (negative for expenses, positive for income).',
|
|
9
|
+
summary: 'Update a transaction',
|
|
10
|
+
icon: 'pencil',
|
|
11
|
+
group: 'Transactions',
|
|
12
|
+
input: z.object({
|
|
13
|
+
transaction_id: z.string().min(1).describe('Transaction ID to update'),
|
|
14
|
+
account_id: z.string().min(1).describe('Account ID the transaction belongs to'),
|
|
15
|
+
date: z.string().optional().describe('New transaction date in YYYY-MM-DD format'),
|
|
16
|
+
amount: z.number().optional().describe('New amount in currency units (negative for expenses, positive for income)'),
|
|
17
|
+
payee_name: z.string().optional().describe('New payee name'),
|
|
18
|
+
payee_id: z.string().optional().describe('New payee ID'),
|
|
19
|
+
category_id: z.string().optional().describe('New category ID'),
|
|
20
|
+
memo: z.string().optional().describe('New transaction memo'),
|
|
21
|
+
cleared: z.enum(['cleared', 'uncleared', 'reconciled']).optional().describe('New cleared status'),
|
|
22
|
+
approved: z.boolean().optional().describe('New approval status'),
|
|
23
|
+
flag_color: z.enum(['red', 'orange', 'yellow', 'green', 'blue', 'purple']).optional().describe('New flag color'),
|
|
24
|
+
}),
|
|
25
|
+
output: z.object({
|
|
26
|
+
transaction: transactionSchema,
|
|
27
|
+
}),
|
|
28
|
+
handle: async (params) => {
|
|
29
|
+
const planId = getPlanId();
|
|
30
|
+
const transaction = {
|
|
31
|
+
id: params.transaction_id,
|
|
32
|
+
entities_account_id: params.account_id,
|
|
33
|
+
};
|
|
34
|
+
if (params.date !== undefined)
|
|
35
|
+
transaction.date = params.date;
|
|
36
|
+
if (params.amount !== undefined)
|
|
37
|
+
transaction.amount = Math.round(params.amount * 1000);
|
|
38
|
+
if (params.payee_name !== undefined)
|
|
39
|
+
transaction.payee_name = params.payee_name;
|
|
40
|
+
if (params.payee_id !== undefined)
|
|
41
|
+
transaction.entities_payee_id = params.payee_id;
|
|
42
|
+
if (params.category_id !== undefined)
|
|
43
|
+
transaction.entities_subcategory_id = params.category_id;
|
|
44
|
+
if (params.memo !== undefined)
|
|
45
|
+
transaction.memo = params.memo;
|
|
46
|
+
if (params.cleared !== undefined)
|
|
47
|
+
transaction.cleared = params.cleared;
|
|
48
|
+
if (params.approved !== undefined)
|
|
49
|
+
transaction.approved = params.approved;
|
|
50
|
+
if (params.flag_color !== undefined)
|
|
51
|
+
transaction.flag_color = params.flag_color;
|
|
52
|
+
const result = await syncWrite(planId, {
|
|
53
|
+
be_transactions: [transaction],
|
|
54
|
+
});
|
|
55
|
+
const saved = result.changed_entities?.be_transactions?.[0];
|
|
56
|
+
if (!saved) {
|
|
57
|
+
throw ToolError.internal('Transaction was updated but no data was returned');
|
|
58
|
+
}
|
|
59
|
+
return { transaction: mapTransaction(saved) };
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=update-transaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-transaction.js","sourceRoot":"","sources":["../../src/tools/update-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAQjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oBAAoB;IACjC,WAAW,EACT,uMAAuM;IACzM,OAAO,EAAE,sBAAsB;IAC/B,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACtE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC/E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACjF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;QACnH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACxD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC9D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC5D,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACjG,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAChE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KACjH,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,iBAAiB;KAC/B,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAE3B,MAAM,WAAW,GAA4B;YAC3C,EAAE,EAAE,MAAM,CAAC,cAAc;YACzB,mBAAmB,EAAE,MAAM,CAAC,UAAU;SACvC,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACvF,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;YAAE,WAAW,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAChF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;YAAE,WAAW,CAAC,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC;QACnF,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;YAAE,WAAW,CAAC,uBAAuB,GAAG,MAAM,CAAC,WAAW,CAAC;QAC/F,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC9D,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;YAAE,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACvE,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;YAAE,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC1E,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;YAAE,WAAW,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAEhF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE;YACrC,eAAe,EAAE,CAAC,WAAW,CAAC;SAC/B,CAAC,CAAC;QAEH,MAAM,KAAK,GAAI,MAAkC,CAAC,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,SAAS,CAAC,QAAQ,CAAC,kDAAkD,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;IAChD,CAAC;CACF,CAAC,CAAC"}
|