@xopcai/xopc 0.0.112 → 0.0.113

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.
Files changed (102) hide show
  1. package/dist/browser-ext/icons/icon-128.png +0 -0
  2. package/dist/browser-ext/icons/icon-16.png +0 -0
  3. package/dist/browser-ext/icons/icon-32.png +0 -0
  4. package/dist/browser-ext/icons/icon-48.png +0 -0
  5. package/dist/browser-ext/manifest.json +1 -1
  6. package/dist/extensions/telegram/xopc.extension.json +1 -1
  7. package/dist/extensions/weixin/src/delivery-to.d.ts +3 -3
  8. package/dist/extensions/weixin/src/delivery-to.js.map +1 -1
  9. package/dist/gateway/static/root/apple-touch-icon.png +0 -0
  10. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-EhRp-ZMa.js → agent-avatar-dicebear-CBlklyNr.js} +1 -1
  11. package/dist/gateway/static/root/assets/{agent-browser-settings-page-H4foVCiS.js → agent-browser-settings-page-rGbKc2Hh.js} +1 -1
  12. package/dist/gateway/static/root/assets/{agent-defaults-tabbed-page-DDNw2oNU.js → agent-defaults-tabbed-page-CtwVbjOA.js} +1 -1
  13. package/dist/gateway/static/root/assets/{agents-E_X2kzS1.js → agents-CCBmGcwc.js} +3 -3
  14. package/dist/gateway/static/root/assets/{app-management-settings-panel-BIy7KEsM.js → app-management-settings-panel-28E_WfMe.js} +1 -1
  15. package/dist/gateway/static/root/assets/{appearance-settings-DGQG8NwA.js → appearance-settings-Do1z0XgJ.js} +1 -1
  16. package/dist/gateway/static/root/assets/{apps-page-BZLvInLr.js → apps-page-xwCsJS15.js} +1 -1
  17. package/dist/gateway/static/root/assets/{archive-plugin-uuQPupqx.js → archive-plugin-BAFlsov_.js} +1 -1
  18. package/dist/gateway/static/root/assets/{attachment-load-DBkv0cAv.js → attachment-load-V3qGPC3x.js} +1 -1
  19. package/dist/gateway/static/root/assets/{binary-plugins-DxxN_VAR.js → binary-plugins-DT8NvA6W.js} +1 -1
  20. package/dist/gateway/static/root/assets/{block-editor-CwnUlRmO.js → block-editor-CdLMEcHd.js} +1 -1
  21. package/dist/gateway/static/root/assets/{channels-settings-BHvUKlzw.js → channels-settings-C044DcYk.js} +1 -1
  22. package/dist/gateway/static/root/assets/{config-api-BD-NcD5d.js → config-api-Bf5mjpu7.js} +1 -1
  23. package/dist/gateway/static/root/assets/{connectors-settings-VBzXcEXL.js → connectors-settings-8VEWUOTj.js} +1 -1
  24. package/dist/gateway/static/root/assets/{cron-api-C5DoipZA.js → cron-api--pAB_rps.js} +1 -1
  25. package/dist/gateway/static/root/assets/cron-page-DqmNGNOy.js +3 -0
  26. package/dist/gateway/static/root/assets/{dreaming-settings-DSVhXTPq.js → dreaming-settings-6UZE1FSK.js} +1 -1
  27. package/dist/gateway/static/root/assets/{extension-debug-page-BDHA9o_e.js → extension-debug-page-BGhE7msg.js} +1 -1
  28. package/dist/gateway/static/root/assets/{extension-page-DmDLVSPE.js → extension-page-CvpI45WG.js} +1 -1
  29. package/dist/gateway/static/root/assets/{extension-settings-page-1124aHw_.js → extension-settings-page-DAmR5FUe.js} +1 -1
  30. package/dist/gateway/static/root/assets/{fetch-DOe56Wmy.js → fetch-NZmjSXLl.js} +1 -1
  31. package/dist/gateway/static/root/assets/{format-interval-label-tsMSvBSR.js → format-interval-label-qhth3BMV.js} +1 -1
  32. package/dist/gateway/static/root/assets/{gateway-config-api-CsD4FC9D.js → gateway-config-api-CaXBt-9R.js} +1 -1
  33. package/dist/gateway/static/root/assets/{gateway-settings-HQ8FBhY2.js → gateway-settings-DphpbLBc.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-startup-retry-C1zg7pH3.js → gateway-startup-retry-Be1omjh3.js} +1 -1
  35. package/dist/gateway/static/root/assets/{goal-detail-page-BG3Onph0.js → goal-detail-page-bv0VRDaf.js} +1 -1
  36. package/dist/gateway/static/root/assets/goals-page-1Ywnt4Cb.js +2 -0
  37. package/dist/gateway/static/root/assets/{goals-settings-B5nI6lgz.js → goals-settings-ceEBjnfc.js} +1 -1
  38. package/dist/gateway/static/root/assets/{heartbeat-config-api-CIv42nJD.js → heartbeat-config-api-BzO6G4fD.js} +1 -1
  39. package/dist/gateway/static/root/assets/{heartbeat-settings-DFcVuJ3M.js → heartbeat-settings-DCST9-du.js} +1 -1
  40. package/dist/gateway/static/root/assets/{index-BTmbp2AU.js → index-Cxm6xsps.js} +59 -58
  41. package/dist/gateway/static/root/assets/{index-5A_ZaABy.css → index-b_R4tKqt.css} +1 -1
  42. package/dist/gateway/static/root/assets/{interval-presets-DGP3S7OB.js → interval-presets-DJmshV8n.js} +1 -1
  43. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-fETaDYQP.js → keyboard-shortcuts-settings-9AUUlQ5Q.js} +1 -1
  44. package/dist/gateway/static/root/assets/{logs-page-B1-b27lK.js → logs-page-B_wrxhee.js} +1 -1
  45. package/dist/gateway/static/root/assets/{markdown-split-CgeBJMOD.js → markdown-split-CYYELqAr.js} +1 -1
  46. package/dist/gateway/static/root/assets/{media-plugins-C30GzlV2.js → media-plugins-BEcMR2M8.js} +1 -1
  47. package/dist/gateway/static/root/assets/messages-CkT-lcgP.js +3 -0
  48. package/dist/gateway/static/root/assets/{models-hub-panel-DPcTS1-u.js → models-hub-panel-D0JDSbNu.js} +1 -1
  49. package/dist/gateway/static/root/assets/{note-detail-page-xeGb4owe.js → note-detail-page-DpFV-EO6.js} +2 -2
  50. package/dist/gateway/static/root/assets/{note-image-lightbox-t1g0qZYh.js → note-image-lightbox-DNAoPcmm.js} +1 -1
  51. package/dist/gateway/static/root/assets/{notes-page-C_TdnKBe.js → notes-page-CdkjTch8.js} +1 -1
  52. package/dist/gateway/static/root/assets/{preview-open-alternatives-DeWp9x5g.js → preview-open-alternatives-BPLz0AIv.js} +1 -1
  53. package/dist/gateway/static/root/assets/{remote-access-hub-BtkPmJIN.js → remote-access-hub-DSYVAi96.js} +1 -1
  54. package/dist/gateway/static/root/assets/{save-bar-controls-BOaAOJI3.js → save-bar-controls-CrWwWRVK.js} +1 -1
  55. package/dist/gateway/static/root/assets/{schedule-field-BLWLKqgw.js → schedule-field-CF2sadvN.js} +1 -1
  56. package/dist/gateway/static/root/assets/{schema-form-plqRFYT8.js → schema-form-Di5cKjYE.js} +1 -1
  57. package/dist/gateway/static/root/assets/{sessions-page-DOUjxzJm.js → sessions-page-CenkcVjF.js} +1 -1
  58. package/dist/gateway/static/root/assets/settings-advanced-gate-D9sva86V.js +1 -0
  59. package/dist/gateway/static/root/assets/{settings-collapsible-section-BP5zRrDI.js → settings-collapsible-section-Chh282jW.js} +1 -1
  60. package/dist/gateway/static/root/assets/{settings-form-section-Bv8MZplG.js → settings-form-section-Dq-83cQd.js} +1 -1
  61. package/dist/gateway/static/root/assets/{settings-page-DmDfE1ww.js → settings-page-DL35U0x0.js} +1 -1
  62. package/dist/gateway/static/root/assets/{setup-status-panel-BEFwNcIZ.js → setup-status-panel-Ctwbp9Er.js} +1 -1
  63. package/dist/gateway/static/root/assets/{share-preview-page-4OX1YCgp.js → share-preview-page-0FXYnSUA.js} +1 -1
  64. package/dist/gateway/static/root/assets/{shares-settings-CbKmJZot.js → shares-settings-DIM3JNsr.js} +1 -1
  65. package/dist/gateway/static/root/assets/skill-reload-api-DAlNaNzL.js +1 -0
  66. package/dist/gateway/static/root/assets/skills-page-CLrHVzAt.js +2 -0
  67. package/dist/gateway/static/root/assets/{system-settings-panel-CGy4f_s2.js → system-settings-panel-W1pTcojB.js} +1 -1
  68. package/dist/gateway/static/root/assets/use-agent-defaults-form-BVRvkK7m.js +1 -0
  69. package/dist/gateway/static/root/assets/{use-channel-catalog-CjGHnDvN.js → use-channel-catalog-CgJibfMM.js} +1 -1
  70. package/dist/gateway/static/root/assets/{use-settings-tab-guard-BMMFa0oA.js → use-settings-tab-guard-Bw_qkRQE.js} +1 -1
  71. package/dist/gateway/static/root/assets/{voice-api-key-field-DnRbhMNq.js → voice-api-key-field-vYAO71Gn.js} +1 -1
  72. package/dist/gateway/static/root/assets/{voice-player-store-D5vzWwls.js → voice-player-store-C7lziaAx.js} +1 -1
  73. package/dist/gateway/static/root/assets/{workflow-page.utils-tjGpRVnw.js → workflow-page.utils-sgHjOXOm.js} +1 -1
  74. package/dist/gateway/static/root/assets/{workflows-page-DqqHKGj2.js → workflows-page-DYyOTmFx.js} +1 -1
  75. package/dist/gateway/static/root/favicon-16x16.png +0 -0
  76. package/dist/gateway/static/root/favicon-32x32.png +0 -0
  77. package/dist/gateway/static/root/favicon-icon.svg +1 -0
  78. package/dist/gateway/static/root/favicon.ico +0 -0
  79. package/dist/gateway/static/root/favicon.png +0 -0
  80. package/dist/gateway/static/root/favicon.svg +24 -17
  81. package/dist/gateway/static/root/index.html +5 -5
  82. package/dist/gateway/static/root/logo-dark.svg +23 -15
  83. package/dist/gateway/static/root/logo.svg +23 -16
  84. package/dist/package.js +1 -1
  85. package/dist/src/agent/service/process-direct-streaming.js +9 -4
  86. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  87. package/dist/src/ai-assist/text-assist.d.ts +3 -0
  88. package/dist/src/ai-assist/text-assist.js +25 -7
  89. package/dist/src/ai-assist/text-assist.js.map +1 -1
  90. package/dist/src/channels/plugins/types.adapters.d.ts +2 -2
  91. package/dist/src/cron/executor.js.map +1 -1
  92. package/dist/src/cron/types.d.ts +2 -2
  93. package/dist/src/session/store-reader.d.ts +5 -0
  94. package/dist/src/session/store-reader.js +1 -0
  95. package/package.json +1 -1
  96. package/dist/gateway/static/root/assets/cron-page-BLTpdm34.js +0 -3
  97. package/dist/gateway/static/root/assets/goals-page-DgeKn8zL.js +0 -2
  98. package/dist/gateway/static/root/assets/messages-BUUfPaZ9.js +0 -3
  99. package/dist/gateway/static/root/assets/settings-advanced-gate-qK_bnTrw.js +0 -1
  100. package/dist/gateway/static/root/assets/skill-reload-api-YdtnUHtK.js +0 -1
  101. package/dist/gateway/static/root/assets/skills-page-DwW1IzQ0.js +0 -2
  102. package/dist/gateway/static/root/assets/use-agent-defaults-form-BMuMvzl_.js +0 -1
Binary file
Binary file
Binary file
Binary file
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "xopc Browser Bridge",
4
- "version": "0.0.112",
4
+ "version": "0.0.113",
5
5
  "description": "Browser automation bridge for xopc — executes commands in Chrome via the local xopc daemon.",
6
6
  "permissions": [
7
7
  "debugger",
@@ -2,7 +2,7 @@
2
2
  "id": "telegram",
3
3
  "name": "Telegram Channel",
4
4
  "description": "Bundled Telegram Bot channel (private workspace sources; ships inside @xopcai/xopc dist/)",
5
- "version": "0.0.112",
5
+ "version": "0.0.113",
6
6
  "kind": "channel",
7
7
  "main": "src/index.js",
8
8
  "channels": [
@@ -1,4 +1,4 @@
1
- import type { SessionStore } from '@xopcai/xopc/session/store.js';
1
+ import type { SessionListReader } from '@xopcai/xopc/session/store-reader.js';
2
2
  export type NormalizedWeixinCronDelivery = {
3
3
  chatId: string;
4
4
  /** Set on OutboundMessage.metadata for multi-account Weixin */
@@ -11,6 +11,6 @@ export declare function normalizeWeixinCronDeliveryTo(to: string): NormalizedWei
11
11
  /**
12
12
  * If exactly one indexed weixin DM session matches `ilinkPeerId`, return that session's accountId.
13
13
  */
14
- export declare function resolveWeixinAccountIdFromSessions(store: SessionStore, ilinkPeerId: string): Promise<string | undefined>;
14
+ export declare function resolveWeixinAccountIdFromSessions(store: SessionListReader, ilinkPeerId: string): Promise<string | undefined>;
15
15
  /** Like {@link normalizeWeixinCronDeliveryTo}, plus session-index lookup for bare ilink user ids. */
16
- export declare function normalizeWeixinCronDeliveryToResolved(to: string, sessionStore?: SessionStore): Promise<NormalizedWeixinCronDelivery>;
16
+ export declare function normalizeWeixinCronDeliveryToResolved(to: string, sessionStore?: SessionListReader): Promise<NormalizedWeixinCronDelivery>;
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-to.js","names":[],"sources":["../../../../extensions/weixin/src/delivery-to.ts"],"sourcesContent":["import { parseSessionKey } from '@xopcai/xopc/routing/session-key.js';\nimport type { SessionStore } from '@xopcai/xopc/session/store.js';\n\nexport type NormalizedWeixinCronDelivery = {\n chatId: string;\n /** Set on OutboundMessage.metadata for multi-account Weixin */\n accountId?: string;\n};\n\n/**\n * Resolves Weixin ilink `chat_id` and optional `accountId` from cron / UI `delivery.to`.\n */\nexport function normalizeWeixinCronDeliveryTo(to: string): NormalizedWeixinCronDelivery {\n const trimmed = to.trim();\n if (!trimmed) {\n return { chatId: trimmed };\n }\n\n const parsed = parseSessionKey(trimmed);\n if (parsed?.source === 'weixin' && (parsed.peerKind === 'direct' || parsed.peerKind === 'dm') && parsed.peerId) {\n const accountId = parsed.accountId && parsed.accountId !== '_' ? parsed.accountId : undefined;\n return { chatId: parsed.peerId, accountId };\n }\n\n const parts = trimmed.split(':');\n if (parts.length === 3 && parts[1]?.toLowerCase() === 'direct' && parts[0] && parts[2]) {\n return { chatId: parts[2], accountId: parts[0] };\n }\n\n return { chatId: trimmed };\n}\n\n/**\n * If exactly one indexed weixin DM session matches `ilinkPeerId`, return that session's accountId.\n */\nexport async function resolveWeixinAccountIdFromSessions(\n store: SessionStore,\n ilinkPeerId: string,\n): Promise<string | undefined> {\n const normalized = ilinkPeerId.trim().toLowerCase();\n if (!normalized) return undefined;\n\n const accountIds = new Set<string>();\n let offset = 0;\n const pageSize = 2000;\n\n for (;;) {\n const batch = await store.list({ channel: 'weixin', limit: pageSize, offset });\n for (const s of batch.items) {\n const rp = s.routing?.peerId?.toLowerCase();\n if (rp === normalized && s.routing?.accountId) {\n accountIds.add(s.routing.accountId);\n }\n }\n if (!batch.hasMore) break;\n offset += pageSize;\n }\n\n if (accountIds.size === 1) return [...accountIds][0];\n return undefined;\n}\n\n/** Like {@link normalizeWeixinCronDeliveryTo}, plus session-index lookup for bare ilink user ids. */\nexport async function normalizeWeixinCronDeliveryToResolved(\n to: string,\n sessionStore?: SessionStore,\n): Promise<NormalizedWeixinCronDelivery> {\n const base = normalizeWeixinCronDeliveryTo(to);\n if (base.accountId || !sessionStore) return base;\n if (!to.trim().includes(':')) {\n const accountId = await resolveWeixinAccountIdFromSessions(sessionStore, base.chatId);\n if (accountId) return { chatId: base.chatId, accountId };\n }\n return base;\n}\n"],"mappings":";;kBAAsE;;;;AAYtE,SAAgB,8BAA8B,IAA0C;CACtF,MAAM,UAAU,GAAG,MAAM;AACzB,KAAI,CAAC,QACH,QAAO,EAAE,QAAQ,SAAS;CAG5B,MAAM,SAAS,gBAAgB,QAAQ;AACvC,KAAI,QAAQ,WAAW,aAAa,OAAO,aAAa,YAAY,OAAO,aAAa,SAAS,OAAO,QAAQ;EAC9G,MAAM,YAAY,OAAO,aAAa,OAAO,cAAc,MAAM,OAAO,YAAY,KAAA;AACpF,SAAO;GAAE,QAAQ,OAAO;GAAQ;GAAW;;CAG7C,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,KAAI,MAAM,WAAW,KAAK,MAAM,IAAI,aAAa,KAAK,YAAY,MAAM,MAAM,MAAM,GAClF,QAAO;EAAE,QAAQ,MAAM;EAAI,WAAW,MAAM;EAAI;AAGlD,QAAO,EAAE,QAAQ,SAAS;;;;;AAM5B,eAAsB,mCACpB,OACA,aAC6B;CAC7B,MAAM,aAAa,YAAY,MAAM,CAAC,aAAa;AACnD,KAAI,CAAC,WAAY,QAAO,KAAA;CAExB,MAAM,6BAAa,IAAI,KAAa;CACpC,IAAI,SAAS;CACb,MAAM,WAAW;AAEjB,UAAS;EACP,MAAM,QAAQ,MAAM,MAAM,KAAK;GAAE,SAAS;GAAU,OAAO;GAAU;GAAQ,CAAC;AAC9E,OAAK,MAAM,KAAK,MAAM,MAEpB,KADW,EAAE,SAAS,QAAQ,aAAa,KAChC,cAAc,EAAE,SAAS,UAClC,YAAW,IAAI,EAAE,QAAQ,UAAU;AAGvC,MAAI,CAAC,MAAM,QAAS;AACpB,YAAU;;AAGZ,KAAI,WAAW,SAAS,EAAG,QAAO,CAAC,GAAG,WAAW,CAAC;;;AAKpD,eAAsB,sCACpB,IACA,cACuC;CACvC,MAAM,OAAO,8BAA8B,GAAG;AAC9C,KAAI,KAAK,aAAa,CAAC,aAAc,QAAO;AAC5C,KAAI,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE;EAC5B,MAAM,YAAY,MAAM,mCAAmC,cAAc,KAAK,OAAO;AACrF,MAAI,UAAW,QAAO;GAAE,QAAQ,KAAK;GAAQ;GAAW;;AAE1D,QAAO"}
1
+ {"version":3,"file":"delivery-to.js","names":[],"sources":["../../../../extensions/weixin/src/delivery-to.ts"],"sourcesContent":["import { parseSessionKey } from '@xopcai/xopc/routing/session-key.js';\nimport type { SessionListReader } from '@xopcai/xopc/session/store-reader.js';\n\nexport type NormalizedWeixinCronDelivery = {\n chatId: string;\n /** Set on OutboundMessage.metadata for multi-account Weixin */\n accountId?: string;\n};\n\n/**\n * Resolves Weixin ilink `chat_id` and optional `accountId` from cron / UI `delivery.to`.\n */\nexport function normalizeWeixinCronDeliveryTo(to: string): NormalizedWeixinCronDelivery {\n const trimmed = to.trim();\n if (!trimmed) {\n return { chatId: trimmed };\n }\n\n const parsed = parseSessionKey(trimmed);\n if (parsed?.source === 'weixin' && (parsed.peerKind === 'direct' || parsed.peerKind === 'dm') && parsed.peerId) {\n const accountId = parsed.accountId && parsed.accountId !== '_' ? parsed.accountId : undefined;\n return { chatId: parsed.peerId, accountId };\n }\n\n const parts = trimmed.split(':');\n if (parts.length === 3 && parts[1]?.toLowerCase() === 'direct' && parts[0] && parts[2]) {\n return { chatId: parts[2], accountId: parts[0] };\n }\n\n return { chatId: trimmed };\n}\n\n/**\n * If exactly one indexed weixin DM session matches `ilinkPeerId`, return that session's accountId.\n */\nexport async function resolveWeixinAccountIdFromSessions(\n store: SessionListReader,\n ilinkPeerId: string,\n): Promise<string | undefined> {\n const normalized = ilinkPeerId.trim().toLowerCase();\n if (!normalized) return undefined;\n\n const accountIds = new Set<string>();\n let offset = 0;\n const pageSize = 2000;\n\n for (;;) {\n const batch = await store.list({ channel: 'weixin', limit: pageSize, offset });\n for (const s of batch.items) {\n const rp = s.routing?.peerId?.toLowerCase();\n if (rp === normalized && s.routing?.accountId) {\n accountIds.add(s.routing.accountId);\n }\n }\n if (!batch.hasMore) break;\n offset += pageSize;\n }\n\n if (accountIds.size === 1) return [...accountIds][0];\n return undefined;\n}\n\n/** Like {@link normalizeWeixinCronDeliveryTo}, plus session-index lookup for bare ilink user ids. */\nexport async function normalizeWeixinCronDeliveryToResolved(\n to: string,\n sessionStore?: SessionListReader,\n): Promise<NormalizedWeixinCronDelivery> {\n const base = normalizeWeixinCronDeliveryTo(to);\n if (base.accountId || !sessionStore) return base;\n if (!to.trim().includes(':')) {\n const accountId = await resolveWeixinAccountIdFromSessions(sessionStore, base.chatId);\n if (accountId) return { chatId: base.chatId, accountId };\n }\n return base;\n}\n"],"mappings":";;kBAAsE;;;;AAYtE,SAAgB,8BAA8B,IAA0C;CACtF,MAAM,UAAU,GAAG,MAAM;AACzB,KAAI,CAAC,QACH,QAAO,EAAE,QAAQ,SAAS;CAG5B,MAAM,SAAS,gBAAgB,QAAQ;AACvC,KAAI,QAAQ,WAAW,aAAa,OAAO,aAAa,YAAY,OAAO,aAAa,SAAS,OAAO,QAAQ;EAC9G,MAAM,YAAY,OAAO,aAAa,OAAO,cAAc,MAAM,OAAO,YAAY,KAAA;AACpF,SAAO;GAAE,QAAQ,OAAO;GAAQ;GAAW;;CAG7C,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,KAAI,MAAM,WAAW,KAAK,MAAM,IAAI,aAAa,KAAK,YAAY,MAAM,MAAM,MAAM,GAClF,QAAO;EAAE,QAAQ,MAAM;EAAI,WAAW,MAAM;EAAI;AAGlD,QAAO,EAAE,QAAQ,SAAS;;;;;AAM5B,eAAsB,mCACpB,OACA,aAC6B;CAC7B,MAAM,aAAa,YAAY,MAAM,CAAC,aAAa;AACnD,KAAI,CAAC,WAAY,QAAO,KAAA;CAExB,MAAM,6BAAa,IAAI,KAAa;CACpC,IAAI,SAAS;CACb,MAAM,WAAW;AAEjB,UAAS;EACP,MAAM,QAAQ,MAAM,MAAM,KAAK;GAAE,SAAS;GAAU,OAAO;GAAU;GAAQ,CAAC;AAC9E,OAAK,MAAM,KAAK,MAAM,MAEpB,KADW,EAAE,SAAS,QAAQ,aAAa,KAChC,cAAc,EAAE,SAAS,UAClC,YAAW,IAAI,EAAE,QAAQ,UAAU;AAGvC,MAAI,CAAC,MAAM,QAAS;AACpB,YAAU;;AAGZ,KAAI,WAAW,SAAS,EAAG,QAAO,CAAC,GAAG,WAAW,CAAC;;;AAKpD,eAAsB,sCACpB,IACA,cACuC;CACvC,MAAM,OAAO,8BAA8B,GAAG;AAC9C,KAAI,KAAK,aAAa,CAAC,aAAc,QAAO;AAC5C,KAAI,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE;EAC5B,MAAM,YAAY,MAAM,mCAAmC,cAAc,KAAK,OAAO;AACrF,MAAI,UAAW,QAAO;GAAE,QAAQ,KAAK;GAAQ;GAAW;;AAE1D,QAAO"}