draken 0.1.6 → 0.3.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.
Files changed (326) hide show
  1. package/ACCEPTANCE.md +34 -0
  2. package/CHANGELOG.md +65 -0
  3. package/CONTRIBUTING.md +129 -0
  4. package/MEMORY.md +118 -0
  5. package/PERSONA.md +67 -0
  6. package/README.md +168 -78
  7. package/SETUP.md +111 -0
  8. package/SOURCES.md +75 -0
  9. package/TRAY.md +54 -0
  10. package/VOICE.md +126 -0
  11. package/dist/auth/middleware.d.ts +3 -1
  12. package/dist/auth/middleware.d.ts.map +1 -1
  13. package/dist/auth/middleware.js +20 -15
  14. package/dist/auth/middleware.js.map +1 -1
  15. package/dist/cli.js +77 -113
  16. package/dist/cli.js.map +1 -1
  17. package/dist/db/agent-migration.d.ts +7 -0
  18. package/dist/db/agent-migration.d.ts.map +1 -0
  19. package/dist/db/agent-migration.js +36 -0
  20. package/dist/db/agent-migration.js.map +1 -0
  21. package/dist/db/evidence.d.ts +37 -0
  22. package/dist/db/evidence.d.ts.map +1 -0
  23. package/dist/db/evidence.js +110 -0
  24. package/dist/db/evidence.js.map +1 -0
  25. package/dist/db/pointer-migration.d.ts +7 -0
  26. package/dist/db/pointer-migration.d.ts.map +1 -0
  27. package/dist/db/pointer-migration.js +117 -0
  28. package/dist/db/pointer-migration.js.map +1 -0
  29. package/dist/db/retained-text.d.ts +8 -0
  30. package/dist/db/retained-text.d.ts.map +1 -0
  31. package/dist/db/retained-text.js +36 -0
  32. package/dist/db/retained-text.js.map +1 -0
  33. package/dist/db/schema.d.ts +1 -5
  34. package/dist/db/schema.d.ts.map +1 -1
  35. package/dist/db/schema.js +206 -55
  36. package/dist/db/schema.js.map +1 -1
  37. package/dist/db/snapshot-pointers.d.ts +5 -0
  38. package/dist/db/snapshot-pointers.d.ts.map +1 -0
  39. package/dist/db/snapshot-pointers.js +174 -0
  40. package/dist/db/snapshot-pointers.js.map +1 -0
  41. package/dist/memory/automatic.d.ts +38 -0
  42. package/dist/memory/automatic.d.ts.map +1 -0
  43. package/dist/memory/automatic.js +155 -0
  44. package/dist/memory/automatic.js.map +1 -0
  45. package/dist/memory/context.d.ts +12 -0
  46. package/dist/memory/context.d.ts.map +1 -0
  47. package/dist/memory/context.js +107 -0
  48. package/dist/memory/context.js.map +1 -0
  49. package/dist/memory/embedding-pool.d.ts +28 -0
  50. package/dist/memory/embedding-pool.d.ts.map +1 -0
  51. package/dist/memory/embedding-pool.js +135 -0
  52. package/dist/memory/embedding-pool.js.map +1 -0
  53. package/dist/memory/embedding-worker.d.ts +2 -0
  54. package/dist/memory/embedding-worker.d.ts.map +1 -0
  55. package/dist/memory/embedding-worker.js +32 -0
  56. package/dist/memory/embedding-worker.js.map +1 -0
  57. package/dist/memory/index.d.ts +32 -0
  58. package/dist/memory/index.d.ts.map +1 -0
  59. package/dist/memory/index.js +441 -0
  60. package/dist/memory/index.js.map +1 -0
  61. package/dist/memory/model-files.d.ts +9 -0
  62. package/dist/memory/model-files.d.ts.map +1 -0
  63. package/dist/memory/model-files.js +13 -0
  64. package/dist/memory/model-files.js.map +1 -0
  65. package/dist/memory/model.d.ts +15 -0
  66. package/dist/memory/model.d.ts.map +1 -0
  67. package/dist/memory/model.js +147 -0
  68. package/dist/memory/model.js.map +1 -0
  69. package/dist/memory/readiness.d.ts +16 -0
  70. package/dist/memory/readiness.d.ts.map +1 -0
  71. package/dist/memory/readiness.js +131 -0
  72. package/dist/memory/readiness.js.map +1 -0
  73. package/dist/memory/reconcile.d.ts +11 -0
  74. package/dist/memory/reconcile.d.ts.map +1 -0
  75. package/dist/memory/reconcile.js +132 -0
  76. package/dist/memory/reconcile.js.map +1 -0
  77. package/dist/memory/service.d.ts +10 -0
  78. package/dist/memory/service.d.ts.map +1 -0
  79. package/dist/memory/service.js +243 -0
  80. package/dist/memory/service.js.map +1 -0
  81. package/dist/memory/sources.d.ts +15 -0
  82. package/dist/memory/sources.d.ts.map +1 -0
  83. package/dist/memory/sources.js +94 -0
  84. package/dist/memory/sources.js.map +1 -0
  85. package/dist/memory/stamps.d.ts +13 -0
  86. package/dist/memory/stamps.d.ts.map +1 -0
  87. package/dist/memory/stamps.js +101 -0
  88. package/dist/memory/stamps.js.map +1 -0
  89. package/dist/memory/storage.d.ts +5 -0
  90. package/dist/memory/storage.d.ts.map +1 -0
  91. package/dist/memory/storage.js +116 -0
  92. package/dist/memory/storage.js.map +1 -0
  93. package/dist/memory/types.d.ts +89 -0
  94. package/dist/memory/types.d.ts.map +1 -0
  95. package/dist/memory/types.js +8 -0
  96. package/dist/memory/types.js.map +1 -0
  97. package/dist/memory/worker.d.ts +2 -0
  98. package/dist/memory/worker.d.ts.map +1 -0
  99. package/dist/memory/worker.js +84 -0
  100. package/dist/memory/worker.js.map +1 -0
  101. package/dist/npm-cli.d.ts +4 -0
  102. package/dist/npm-cli.d.ts.map +1 -0
  103. package/dist/npm-cli.js +36 -0
  104. package/dist/npm-cli.js.map +1 -0
  105. package/dist/pi/runtime.d.ts +34 -0
  106. package/dist/pi/runtime.d.ts.map +1 -0
  107. package/dist/pi/runtime.js +210 -0
  108. package/dist/pi/runtime.js.map +1 -0
  109. package/dist/pi/setup.d.ts +5 -0
  110. package/dist/pi/setup.d.ts.map +1 -0
  111. package/dist/pi/setup.js +147 -0
  112. package/dist/pi/setup.js.map +1 -0
  113. package/dist/routes/auth.d.ts.map +1 -1
  114. package/dist/routes/auth.js +3 -1
  115. package/dist/routes/auth.js.map +1 -1
  116. package/dist/routes/live-voice.d.ts +3 -0
  117. package/dist/routes/live-voice.d.ts.map +1 -0
  118. package/dist/routes/live-voice.js +49 -0
  119. package/dist/routes/live-voice.js.map +1 -0
  120. package/dist/routes/{browse.d.ts → memory.d.ts} +1 -1
  121. package/dist/routes/memory.d.ts.map +1 -0
  122. package/dist/routes/memory.js +18 -0
  123. package/dist/routes/memory.js.map +1 -0
  124. package/dist/routes/{tasks.d.ts → sync.d.ts} +1 -1
  125. package/dist/routes/sync.d.ts.map +1 -0
  126. package/dist/routes/sync.js +145 -0
  127. package/dist/routes/sync.js.map +1 -0
  128. package/dist/routes/{projects.d.ts → voice.d.ts} +1 -1
  129. package/dist/routes/voice.d.ts.map +1 -0
  130. package/dist/routes/voice.js +35 -0
  131. package/dist/routes/voice.js.map +1 -0
  132. package/dist/server-state.d.ts +30 -0
  133. package/dist/server-state.d.ts.map +1 -0
  134. package/dist/server-state.js +113 -0
  135. package/dist/server-state.js.map +1 -0
  136. package/dist/server-status.d.ts +7 -0
  137. package/dist/server-status.d.ts.map +1 -0
  138. package/dist/server-status.js +34 -0
  139. package/dist/server-status.js.map +1 -0
  140. package/dist/server.d.ts +5 -1
  141. package/dist/server.d.ts.map +1 -1
  142. package/dist/server.js +148 -46
  143. package/dist/server.js.map +1 -1
  144. package/dist/sources/adapters.d.ts +15 -0
  145. package/dist/sources/adapters.d.ts.map +1 -0
  146. package/dist/sources/adapters.js +159 -0
  147. package/dist/sources/adapters.js.map +1 -0
  148. package/dist/sources/registry.d.ts +17 -0
  149. package/dist/sources/registry.d.ts.map +1 -0
  150. package/dist/sources/registry.js +56 -0
  151. package/dist/sources/registry.js.map +1 -0
  152. package/dist/sync/collector.d.ts +3 -0
  153. package/dist/sync/collector.d.ts.map +1 -0
  154. package/dist/sync/collector.js +324 -0
  155. package/dist/sync/collector.js.map +1 -0
  156. package/dist/sync/cost.d.ts +7 -0
  157. package/dist/sync/cost.d.ts.map +1 -0
  158. package/dist/sync/cost.js +31 -0
  159. package/dist/sync/cost.js.map +1 -0
  160. package/dist/sync/jsonl.d.ts +34 -0
  161. package/dist/sync/jsonl.d.ts.map +1 -0
  162. package/dist/sync/jsonl.js +161 -0
  163. package/dist/sync/jsonl.js.map +1 -0
  164. package/dist/sync/manager.d.ts +15 -0
  165. package/dist/sync/manager.d.ts.map +1 -0
  166. package/dist/sync/manager.js +287 -0
  167. package/dist/sync/manager.js.map +1 -0
  168. package/dist/sync/normalize.d.ts +22 -0
  169. package/dist/sync/normalize.d.ts.map +1 -0
  170. package/dist/sync/normalize.js +107 -0
  171. package/dist/sync/normalize.js.map +1 -0
  172. package/dist/sync/pi-output.d.ts +33 -0
  173. package/dist/sync/pi-output.d.ts.map +1 -0
  174. package/dist/sync/pi-output.js +186 -0
  175. package/dist/sync/pi-output.js.map +1 -0
  176. package/dist/sync/pi.d.ts +15 -0
  177. package/dist/sync/pi.d.ts.map +1 -0
  178. package/dist/sync/pi.js +149 -0
  179. package/dist/sync/pi.js.map +1 -0
  180. package/dist/sync/recap.d.ts +25 -0
  181. package/dist/sync/recap.d.ts.map +1 -0
  182. package/dist/sync/recap.js +118 -0
  183. package/dist/sync/recap.js.map +1 -0
  184. package/dist/sync/reconciliation.d.ts +16 -0
  185. package/dist/sync/reconciliation.d.ts.map +1 -0
  186. package/dist/sync/reconciliation.js +22 -0
  187. package/dist/sync/reconciliation.js.map +1 -0
  188. package/dist/sync/references.d.ts +10 -0
  189. package/dist/sync/references.d.ts.map +1 -0
  190. package/dist/sync/references.js +50 -0
  191. package/dist/sync/references.js.map +1 -0
  192. package/dist/sync/source-files.d.ts +16 -0
  193. package/dist/sync/source-files.d.ts.map +1 -0
  194. package/dist/sync/source-files.js +56 -0
  195. package/dist/sync/source-files.js.map +1 -0
  196. package/dist/sync/store.d.ts +36 -0
  197. package/dist/sync/store.d.ts.map +1 -0
  198. package/dist/sync/store.js +359 -0
  199. package/dist/sync/store.js.map +1 -0
  200. package/dist/sync/summary-budget.d.ts +19 -0
  201. package/dist/sync/summary-budget.d.ts.map +1 -0
  202. package/dist/sync/summary-budget.js +39 -0
  203. package/dist/sync/summary-budget.js.map +1 -0
  204. package/dist/sync/tree.d.ts +69 -0
  205. package/dist/sync/tree.d.ts.map +1 -0
  206. package/dist/sync/tree.js +599 -0
  207. package/dist/sync/tree.js.map +1 -0
  208. package/dist/tray/controller.d.ts +51 -0
  209. package/dist/tray/controller.d.ts.map +1 -0
  210. package/dist/tray/controller.js +178 -0
  211. package/dist/tray/controller.js.map +1 -0
  212. package/dist/tray/launcher.d.ts +3 -0
  213. package/dist/tray/launcher.d.ts.map +1 -0
  214. package/dist/tray/launcher.js +47 -0
  215. package/dist/tray/launcher.js.map +1 -0
  216. package/dist/tray/native.d.ts +12 -0
  217. package/dist/tray/native.d.ts.map +1 -0
  218. package/dist/tray/native.js +93 -0
  219. package/dist/tray/native.js.map +1 -0
  220. package/dist/tray/processes.d.ts +5 -0
  221. package/dist/tray/processes.d.ts.map +1 -0
  222. package/dist/tray/processes.js +99 -0
  223. package/dist/tray/processes.js.map +1 -0
  224. package/dist/tray/worker.d.ts +4 -0
  225. package/dist/tray/worker.d.ts.map +1 -0
  226. package/dist/tray/worker.js +150 -0
  227. package/dist/tray/worker.js.map +1 -0
  228. package/dist/types.d.ts +221 -20
  229. package/dist/types.d.ts.map +1 -1
  230. package/dist/voice/continuation.d.ts +25 -0
  231. package/dist/voice/continuation.d.ts.map +1 -0
  232. package/dist/voice/continuation.js +95 -0
  233. package/dist/voice/continuation.js.map +1 -0
  234. package/dist/voice/history-focus.d.ts +14 -0
  235. package/dist/voice/history-focus.d.ts.map +1 -0
  236. package/dist/voice/history-focus.js +39 -0
  237. package/dist/voice/history-focus.js.map +1 -0
  238. package/dist/voice/legacy-history.d.ts +5 -0
  239. package/dist/voice/legacy-history.d.ts.map +1 -0
  240. package/dist/voice/legacy-history.js +34 -0
  241. package/dist/voice/legacy-history.js.map +1 -0
  242. package/dist/voice/live-context.d.ts +14 -0
  243. package/dist/voice/live-context.d.ts.map +1 -0
  244. package/dist/voice/live-context.js +137 -0
  245. package/dist/voice/live-context.js.map +1 -0
  246. package/dist/voice/live.d.ts +37 -0
  247. package/dist/voice/live.d.ts.map +1 -0
  248. package/dist/voice/live.js +462 -0
  249. package/dist/voice/live.js.map +1 -0
  250. package/dist/voice/preparation.d.ts +8 -0
  251. package/dist/voice/preparation.d.ts.map +1 -0
  252. package/dist/voice/preparation.js +59 -0
  253. package/dist/voice/preparation.js.map +1 -0
  254. package/package.json +49 -16
  255. package/public/assets/index-BQFBaSKm.js +40 -0
  256. package/public/assets/index-CYCbTSh1.js +131 -0
  257. package/public/assets/index-DntUQtGK.css +1 -0
  258. package/public/assets/persona-BVIfx5k8.js +1 -0
  259. package/public/assets/persona-C_m1CVKe.css +1 -0
  260. package/public/assets/scene-CBV2oPhA.js +3854 -0
  261. package/public/index.html +6 -8
  262. package/public/persona/THREE-LICENSE.txt +21 -0
  263. package/public/persona/call-poster.webp +0 -0
  264. package/public/persona/chat-avatar.webp +0 -0
  265. package/public/persona/reference.jpg +0 -0
  266. package/public/persona/sample.wav +0 -0
  267. package/public/persona.html +7 -0
  268. package/runtime/pi/package-lock.json +1549 -0
  269. package/runtime/pi/package.json +12 -0
  270. package/tests/fixtures/voice-question.wav +0 -0
  271. package/tray/assets/error.ico +0 -0
  272. package/tray/assets/error.png +0 -0
  273. package/tray/assets/running.ico +0 -0
  274. package/tray/assets/running.png +0 -0
  275. package/tray/assets/starting.ico +0 -0
  276. package/tray/assets/starting.png +0 -0
  277. package/tray/assets/stopped.ico +0 -0
  278. package/tray/assets/stopped.png +0 -0
  279. package/tray/assets/stopping.ico +0 -0
  280. package/tray/assets/stopping.png +0 -0
  281. package/tray/macos.js +72 -0
  282. package/tray/windows.ps1 +104 -0
  283. package/voice/realtime/README.md +84 -0
  284. package/voice/realtime/backend.mjs +81 -0
  285. package/voice/realtime/native.mjs +210 -0
  286. package/voice/realtime/peer.d.mts +15 -0
  287. package/voice/realtime/peer.mjs +116 -0
  288. package/voice/realtime/probe-browser.mjs +81 -0
  289. package/voice/realtime/probe-server.mjs +86 -0
  290. package/voice/realtime/probe.html +11 -0
  291. package/voice/realtime/probe.mjs +42 -0
  292. package/voice/realtime/rpc.mjs +118 -0
  293. package/voice/realtime/setup.mjs +32 -0
  294. package/voice/tls.mjs +49 -0
  295. package/dist/db/queries.d.ts +0 -16
  296. package/dist/db/queries.d.ts.map +0 -1
  297. package/dist/db/queries.js +0 -91
  298. package/dist/db/queries.js.map +0 -1
  299. package/dist/docker/dockerfile.d.ts +0 -50
  300. package/dist/docker/dockerfile.d.ts.map +0 -1
  301. package/dist/docker/dockerfile.js +0 -160
  302. package/dist/docker/dockerfile.js.map +0 -1
  303. package/dist/docker/manager.d.ts +0 -42
  304. package/dist/docker/manager.d.ts.map +0 -1
  305. package/dist/docker/manager.js +0 -421
  306. package/dist/docker/manager.js.map +0 -1
  307. package/dist/git/status.d.ts +0 -76
  308. package/dist/git/status.d.ts.map +0 -1
  309. package/dist/git/status.js +0 -332
  310. package/dist/git/status.js.map +0 -1
  311. package/dist/routes/browse.d.ts.map +0 -1
  312. package/dist/routes/browse.js +0 -49
  313. package/dist/routes/browse.js.map +0 -1
  314. package/dist/routes/git.d.ts +0 -9
  315. package/dist/routes/git.d.ts.map +0 -1
  316. package/dist/routes/git.js +0 -338
  317. package/dist/routes/git.js.map +0 -1
  318. package/dist/routes/projects.d.ts.map +0 -1
  319. package/dist/routes/projects.js +0 -220
  320. package/dist/routes/projects.js.map +0 -1
  321. package/dist/routes/tasks.d.ts.map +0 -1
  322. package/dist/routes/tasks.js +0 -313
  323. package/dist/routes/tasks.js.map +0 -1
  324. package/draken.dockerfile.template +0 -18
  325. package/public/assets/index-3ngsG5kF.css +0 -1
  326. package/public/assets/index-B3YSD0ee.js +0 -252
@@ -0,0 +1,441 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.HistoryIndex = void 0;
37
+ const vec = __importStar(require("sqlite-vec"));
38
+ const normalize_1 = require("../sync/normalize");
39
+ const registry_1 = require("../sources/registry");
40
+ const jsonl_1 = require("../sync/jsonl");
41
+ const storage_1 = require("./storage");
42
+ const reconcile_1 = require("./reconcile");
43
+ const stamps_1 = require("./stamps");
44
+ const readiness_1 = require("./readiness");
45
+ const sources_1 = require("./sources");
46
+ const types_1 = require("./types");
47
+ function proximity(text, terms) {
48
+ if (terms.length < 2 || terms.length > 5)
49
+ return 1;
50
+ const positions = [...text.toLowerCase().matchAll(/[\p{L}\p{N}_]+/gu)].flatMap(match => terms.flatMap((term, i) => match[0].startsWith(term) ? [{ term: i, at: match.index }] : []));
51
+ const counts = new Map();
52
+ let left = 0, span = Infinity;
53
+ for (let right = 0; right < positions.length; right++) {
54
+ const item = positions[right];
55
+ counts.set(item.term, (counts.get(item.term) || 0) + 1);
56
+ while (counts.size === terms.length) {
57
+ span = Math.min(span, item.at - positions[left].at);
58
+ const term = positions[left++].term, count = counts.get(term) - 1;
59
+ if (count)
60
+ counts.set(term, count);
61
+ else
62
+ counts.delete(term);
63
+ }
64
+ }
65
+ return 1 + 2 * Math.exp(-span / 80);
66
+ }
67
+ const LIMITATIONS = 'Search of retained, currently admitted history, not exhaustive recall or independent verification. Excluded/missing sessions, pre-baseline session evidence and discarded sync discussions are omitted. Original logs may contain material not retained here. Summaries are not indexed as primary evidence. No review, decisions or execution changed.';
68
+ class HistoryIndex {
69
+ db;
70
+ source;
71
+ model;
72
+ root;
73
+ modelPrepared = false;
74
+ current = new Map();
75
+ normalized = new jsonl_1.NormalizationCache();
76
+ constructor(db, source, model, root = (0, registry_1.getSourceRoots)()) {
77
+ this.db = db;
78
+ this.source = source;
79
+ this.model = model;
80
+ this.root = root;
81
+ vec.load(db);
82
+ db.pragma('foreign_keys = ON');
83
+ db.pragma('journal_mode = WAL');
84
+ db.pragma('busy_timeout = 5000');
85
+ // Cap retained journal high-water space after checkpoints, not active work.
86
+ db.pragma('journal_size_limit = 4194304');
87
+ const fresh = !db.prepare("SELECT 1 FROM sqlite_master WHERE type='table'").get();
88
+ db.transaction(() => {
89
+ (0, storage_1.initHistoryStorage)(db, model.fingerprint);
90
+ // A newly created cache has a known empty baseline even if its first
91
+ // preparation is interrupted. Existing caches must not be guessed empty.
92
+ if (fresh)
93
+ (0, stamps_1.saveSourceCheckpoint)(db, new Map());
94
+ })();
95
+ }
96
+ /** Change only derived delta rows. Revalidate sources on every search/read so an
97
+ * exclusion, edit, source removal or discard cannot leak through stale vectors. */
98
+ refresh(addNew = true) {
99
+ const current = new Map();
100
+ this.source.transaction(() => this.db.transaction(() => {
101
+ const retained = new Set();
102
+ const existing = new Set(this.db.prepare('SELECT ref FROM records').all().map(row => row.ref));
103
+ const insert = this.db.prepare('INSERT INTO records VALUES(?,?,?,?,?,?,?)');
104
+ const passage = this.db.prepare('INSERT OR IGNORE INTO passages(hash) VALUES(?)');
105
+ const find = this.db.prepare('SELECT id FROM passages WHERE hash=?');
106
+ const words = this.db.prepare('INSERT INTO words(rowid,body) VALUES(?,?)');
107
+ const chunk = this.db.prepare('INSERT INTO chunk_links(ref,offset,passage_id) VALUES(?,?,?)');
108
+ for (const item of (0, sources_1.historySources)(this.source, this.root, this.normalized)) {
109
+ retained.add(item.ref);
110
+ if (existing.has(item.ref)) {
111
+ current.set(item.ref, item);
112
+ continue;
113
+ }
114
+ if (!addNew)
115
+ continue;
116
+ current.set(item.ref, item);
117
+ insert.run(item.ref, JSON.stringify({ ...item, text: undefined }), item.session_id, item.sync_id, item.at, item.group, item.position);
118
+ for (let offset = 0; offset < item.text.length; offset += 700) {
119
+ const body = `${item.title}\n${item.role}\n${item.text.slice(offset, offset + 800)}`, hash = (0, sources_1.digest)(this.model.fingerprint + '\0' + body);
120
+ passage.run(hash);
121
+ const row = find.get(hash);
122
+ const link = chunk.run(item.ref, offset, row.id);
123
+ words.run(link.lastInsertRowid, body);
124
+ if (offset + 800 >= item.text.length)
125
+ break;
126
+ }
127
+ }
128
+ const remove = this.db.prepare('DELETE FROM records WHERE ref=?');
129
+ let removed = false;
130
+ for (const ref of existing)
131
+ if (!retained.has(ref)) {
132
+ remove.run(ref);
133
+ removed = true;
134
+ }
135
+ if (removed)
136
+ this.db.exec('DELETE FROM passages WHERE id NOT IN (SELECT passage_id FROM chunk_links)');
137
+ })())();
138
+ this.current = current;
139
+ }
140
+ /** Automatic, on demand. A search never requires a separate setup/update action.
141
+ * Freeze the candidate set here; revalidation may remove records, but arrivals
142
+ * during this lookup belong to the next one rather than a partial keyword mode. */
143
+ async prepare(scope = {}, report, checkpoint = !scope.session_id && !scope.session_ids && !scope.kind && !scope.sync_id && !scope.before) {
144
+ report?.((0, types_1.historyUpdate)('scanning'));
145
+ // Scoped lookups cannot claim global background coverage. Capture the
146
+ // candidate metadata before inference; later source changes stay pending.
147
+ const before = scope.before || new Date().toISOString();
148
+ const stamps = checkpoint ? (0, stamps_1.sourceStamps)(this.source, before) : undefined;
149
+ const readiness = checkpoint ? (0, readiness_1.historyStamp)(this.source, before, this.root) : undefined;
150
+ const finish = () => {
151
+ if (stamps && readiness)
152
+ this.db.transaction(() => {
153
+ (0, readiness_1.saveHistoryReadiness)(this.db, this.source, before, readiness, this.model.fingerprint, this.root);
154
+ (0, stamps_1.saveSourceCheckpoint)(this.db, stamps);
155
+ })();
156
+ };
157
+ this.refresh();
158
+ const filter = this.filter(scope);
159
+ const groups = this.db.prepare(`SELECT DISTINCT p.id FROM passages p JOIN chunk_links c ON c.passage_id=p.id JOIN records r ON r.ref=c.ref
160
+ WHERE p.embedded=0 ${filter.sql} ORDER BY p.id`).all(...filter.args);
161
+ const reused = this.db.prepare(`SELECT COUNT(DISTINCT p.id) n FROM passages p JOIN chunk_links c ON c.passage_id=p.id JOIN records r ON r.ref=c.ref
162
+ WHERE p.embedded=1 ${filter.sql}`).get(...filter.args).n;
163
+ const total = groups.length;
164
+ let completed = 0, computed = 0, meanMs = 0, measured = 0;
165
+ const notify = (stage) => report?.((0, types_1.historyUpdate)(stage, { total, completed, reused, parallelism: this.model.parallelism,
166
+ remaining_seconds: completed === total ? 0 : measured >= 8 ? Math.ceil((total - completed) * meanMs / 1000) : null }));
167
+ if (!total) {
168
+ if (reused && !this.model.ready()) {
169
+ notify('loading');
170
+ await this.ensureModel(report);
171
+ }
172
+ finish();
173
+ notify('indexing');
174
+ return;
175
+ }
176
+ notify('loading');
177
+ await this.ensureModel(report);
178
+ const getChunk = this.db.prepare('SELECT c.ref,c.offset,p.hash FROM chunk_links c JOIN passages p ON p.id=c.passage_id WHERE p.id=? ORDER BY c.id LIMIT 1');
179
+ const saveVector = this.db.prepare('INSERT INTO passage_vectors(rowid,embedding) VALUES(?,?)');
180
+ const markReady = this.db.prepare('UPDATE passages SET embedded=1 WHERE id=?');
181
+ const pending = [];
182
+ let lastCommit = Date.now();
183
+ const commit = () => {
184
+ if (!pending.length)
185
+ return;
186
+ this.db.transaction(() => {
187
+ for (const item of pending) {
188
+ saveVector.run(BigInt(item.id), item.embedding);
189
+ markReady.run(item.id);
190
+ }
191
+ })();
192
+ completed += pending.length;
193
+ pending.length = 0;
194
+ lastCommit = Date.now();
195
+ notify('indexing');
196
+ };
197
+ notify('indexing');
198
+ for (let offset = 0; offset < groups.length; offset += 8) {
199
+ if (!computed)
200
+ notify('loading');
201
+ const batch = groups.slice(offset, offset + 8), bodies = batch.map(group => {
202
+ const chunk = getChunk.get(group.id), record = this.record(chunk.ref);
203
+ const body = `${record.title}\n${record.role}\n${record.text.slice(chunk.offset, chunk.offset + 800)}`;
204
+ if ((0, sources_1.digest)(this.model.fingerprint + '\0' + body) !== chunk.hash)
205
+ throw new Error('Verified search passage changed');
206
+ return body;
207
+ });
208
+ const start = Date.now(), vectors = [];
209
+ if (this.model.embedMany)
210
+ vectors.push(...await this.model.embedMany(bodies, total >= 32));
211
+ else
212
+ for (const body of bodies)
213
+ vectors.push(await this.model.embed(body, false));
214
+ if (vectors.length !== batch.length)
215
+ throw new Error('Incomplete embedding batch');
216
+ const embeddings = vectors.map(vector => {
217
+ if (!(vector instanceof Float32Array) || vector.length !== 384 || vector.some(value => !Number.isFinite(value)))
218
+ throw new Error('Invalid embedding');
219
+ return Buffer.from(vector.buffer, vector.byteOffset, vector.byteLength);
220
+ });
221
+ // Wall time per completed passage reflects parallel throughput. Exclude
222
+ // the first batch's cold model load and count only committed delta work.
223
+ if (computed) {
224
+ const ms = (Date.now() - start) / batch.length;
225
+ meanMs = measured ? meanMs * 0.9 + ms * 0.1 : ms;
226
+ measured += batch.length;
227
+ }
228
+ computed += batch.length;
229
+ batch.forEach((group, i) => pending.push({ id: group.id, embedding: embeddings[i] }));
230
+ if (pending.length >= 64 || Date.now() - lastCommit >= 1000)
231
+ commit();
232
+ }
233
+ commit();
234
+ notify('indexing');
235
+ this.refresh(false);
236
+ finish();
237
+ }
238
+ /** Voice can verify and query prepared passages, never build a missing corpus.
239
+ * Fresh original-byte/projection checks remain mandatory; the ready receipt
240
+ * only controls scheduling, not source authority. No derived writes here. */
241
+ assertPrepared(scope, report) {
242
+ report?.((0, types_1.historyUpdate)('scanning'));
243
+ const current = new Map();
244
+ const chunks = this.db.prepare('SELECT c.offset,p.hash,p.embedded FROM chunk_links c JOIN passages p ON p.id=c.passage_id WHERE c.ref=? ORDER BY c.offset');
245
+ for (const record of (0, sources_1.historySources)(this.source, this.root, this.normalized, scope)) {
246
+ if (!this.admitted(record, scope))
247
+ continue;
248
+ const rows = chunks.all(record.ref);
249
+ let count = 0;
250
+ for (let offset = 0; offset < record.text.length; offset += 700) {
251
+ const row = rows[count++], hash = (0, sources_1.digest)(this.model.fingerprint + '\0' + `${record.title}\n${record.role}\n${record.text.slice(offset, offset + 800)}`);
252
+ if (!row || row.offset !== offset || row.hash !== hash || row.embedded !== 1)
253
+ throw new Error('History needs preparation before calling.');
254
+ if (offset + 800 >= record.text.length)
255
+ break;
256
+ }
257
+ if (rows.length !== count)
258
+ throw new Error('Prepared history changed.');
259
+ current.set(record.ref, record);
260
+ }
261
+ this.current = current;
262
+ }
263
+ async ensureModel(report, allowDownload = true) {
264
+ if (!this.modelPrepared || !this.model.ready()) {
265
+ await this.model.setup(report, allowDownload);
266
+ this.modelPrepared = true;
267
+ }
268
+ }
269
+ keywords(match, condition, args, limit = 80) {
270
+ // Aliases and repeated reads share passages. Deduplicate *before* the top-k
271
+ // limit or eighty copies of one passage can erase every alternative hit.
272
+ return this.db.prepare(`WITH hits AS MATERIALIZED (
273
+ SELECT c.id,c.ref,c.offset,c.passage_id,r.at,bm25(words) relevance FROM words
274
+ JOIN chunk_links c ON c.id=words.rowid JOIN passages p ON p.id=c.passage_id JOIN records r ON r.ref=c.ref
275
+ WHERE words MATCH ? AND p.embedded=1 ${condition})
276
+ SELECT id,ref,offset,MAX(at) FROM hits GROUP BY passage_id ORDER BY relevance,id LIMIT ?`).all(match, ...args, limit);
277
+ }
278
+ admitted(record, scope) {
279
+ return !(scope.before && (!record.at || record.at > scope.before))
280
+ && (!scope.session_id || record.session_id === scope.session_id)
281
+ && (!scope.session_ids || Boolean(record.session_id && scope.session_ids.includes(record.session_id)))
282
+ && (!scope.sync_id || record.sync_id === scope.sync_id)
283
+ && (!scope.kind || (scope.kind === 'sources' ? record.session_id !== null : record.session_id === null));
284
+ }
285
+ filter(query) {
286
+ const conditions = [], args = [];
287
+ if (query.session_id) {
288
+ conditions.push('r.session_id=?');
289
+ args.push(query.session_id);
290
+ }
291
+ if (query.session_ids) {
292
+ conditions.push(`r.session_id IN (${query.session_ids.map(() => '?').join(',')})`);
293
+ args.push(...query.session_ids);
294
+ }
295
+ if (query.kind)
296
+ conditions.push(query.kind === 'sources' ? 'r.session_id IS NOT NULL' : 'r.session_id IS NULL');
297
+ if (query.sync_id) {
298
+ conditions.push('r.sync_id=?');
299
+ args.push(query.sync_id);
300
+ }
301
+ if (query.before) {
302
+ conditions.push('r.at IS NOT NULL AND r.at<=?');
303
+ args.push(query.before);
304
+ }
305
+ return { sql: conditions.length ? ' AND ' + conditions.join(' AND ') : '', args };
306
+ }
307
+ async search(query, report, preparedOnly = false) {
308
+ if (preparedOnly)
309
+ this.assertPrepared(query, report);
310
+ else
311
+ await this.prepare(query, report);
312
+ report?.((0, types_1.historyUpdate)('searching'));
313
+ const filter = this.filter(query);
314
+ const any = this.db.prepare(`SELECT 1 FROM chunks c JOIN records r ON r.ref=c.ref WHERE 1=1 ${filter.sql} LIMIT 1`).get(...filter.args);
315
+ if (!any)
316
+ return { mode: 'hybrid', results: [], limitations: LIMITATIONS };
317
+ if (preparedOnly && !this.model.ready())
318
+ throw new Error('Prepare the local search model before calling.');
319
+ await this.ensureModel(report, !preparedOnly);
320
+ const searches = [query.question, ...(query.topics || []).slice(0, 2)];
321
+ const embeddings = [];
322
+ for (const question of searches)
323
+ embeddings.push(await this.model.embed((0, normalize_1.cleanText)(question, 2000), true));
324
+ // Prune exclusions/edits again after inference without admitting unembedded
325
+ // arrivals. All returned candidates have both lexical and semantic coverage.
326
+ if (preparedOnly)
327
+ this.assertPrepared(query, report);
328
+ else
329
+ this.refresh(false);
330
+ const scoresByQuery = [], termSets = [];
331
+ for (const [search, embedding] of searches.map((text, i) => [text, embeddings[i]])) {
332
+ const scores = new Map();
333
+ scoresByQuery.push(scores);
334
+ const add = (rows, weight = 1) => {
335
+ const distinct = new Set();
336
+ for (const row of rows) {
337
+ if (!this.current.has(row.ref))
338
+ continue; // Excluded/removed records cannot be served from stale vectors.
339
+ const identity = this.record(row.ref).identity;
340
+ if (distinct.has(identity))
341
+ continue;
342
+ distinct.add(identity);
343
+ const old = scores.get(identity), score = weight / (60 + distinct.size);
344
+ scores.set(identity, { score: (old?.score || 0) + score, chunk: weight > 1 ? row : old?.chunk || row });
345
+ }
346
+ };
347
+ const stop = new Set('the a an and or of to in on is it we i you our my what why how did do does was were have has had this that with for from about remember recall previous earlier history please are those here exactly mean meant can could check hello still agent trying moment question call'.split(' '));
348
+ const terms = [...new Set(search.toLowerCase().match(/[\p{L}\p{N}_]+/gu) || [])].filter(term => !stop.has(term)).slice(0, 32);
349
+ const stems = [...new Set(terms.map(term => query.kind === 'sources' && term.length >= 5 ? term.slice(0, 4) : term))];
350
+ termSets.push(stems);
351
+ const lexical = stems.map(term => `"${term}"${query.kind === 'sources' ? '*' : ''}`);
352
+ if (terms.length)
353
+ add(this.keywords(lexical.join(' OR '), filter.sql, filter.args));
354
+ add(this.db.prepare(`SELECT c.id,c.ref,c.offset,MAX(r.at) FROM passage_vectors v JOIN chunk_links c ON c.passage_id=v.rowid JOIN records r ON r.ref=c.ref
355
+ WHERE v.embedding MATCH ? AND k=80 AND v.rowid IN (SELECT c.passage_id FROM chunk_links c JOIN passages p ON p.id=c.passage_id JOIN records r ON r.ref=c.ref WHERE p.embedded=1 ${filter.sql})
356
+ AND v.distance<=0.25 ${filter.sql} GROUP BY c.passage_id ORDER BY v.distance,c.id LIMIT 80`).all(Buffer.from(embedding.buffer), ...filter.args, ...filter.args));
357
+ if (query.kind === 'sources') {
358
+ // Agent explanations are a separate retrieval lane, not buried under the
359
+ // many near-identical tool reads/edits in a coding session. Existing vectors
360
+ // and original record identities are reused; no new corpus work in calls.
361
+ const narratives = [...this.current.values()].filter(record => this.admitted(record, query) && record.kind === 'session'
362
+ && record.role === 'assistant' && record.text.length >= 40 && !/^Tool requested:/.test(record.text))
363
+ .sort((a, b) => (b.at || '').localeCompare(a.at || '')).slice(0, 1024).map(record => record.ref);
364
+ if (narratives.length) {
365
+ const selected = narratives.map(() => '?').join(',');
366
+ if (terms.length)
367
+ add(this.keywords(lexical.join(' OR '), `AND c.offset=0 AND c.ref IN (${selected})`, narratives), 2);
368
+ add(this.db.prepare(`SELECT c.id,c.ref,c.offset,MAX(r.at) FROM passage_vectors v JOIN chunk_links c ON c.passage_id=v.rowid JOIN records r ON r.ref=c.ref
369
+ WHERE v.embedding MATCH ? AND k=80 AND v.rowid IN (SELECT passage_id FROM chunk_links WHERE offset=0 AND ref IN (${selected}))
370
+ AND v.distance<=0.25 AND c.offset=0 AND c.ref IN (${selected}) GROUP BY c.passage_id ORDER BY v.distance,c.id LIMIT 80`)
371
+ .all(Buffer.from(embedding.buffer), ...narratives, ...narratives), 2);
372
+ }
373
+ }
374
+ if (query.kind === 'sources' && terms.length >= 2 && terms.length <= 5)
375
+ add(this.keywords(lexical.join(' AND '), filter.sql, filter.args, 40), 5);
376
+ }
377
+ const rank = (value, terms) => {
378
+ if (query.kind !== 'sources')
379
+ return value.score;
380
+ const record = this.record(value.chunk.ref);
381
+ const age = Math.max(0, (Date.parse(query.before || new Date().toISOString()) - Date.parse(record.at || '')) / 86400000);
382
+ const role = record.role === 'user' ? 0.25 : /^Tool requested:/.test(record.text) ? 0.5 : 1;
383
+ const detail = record.role === 'assistant' && /\n(?:[-*] |### |\|)/.test(record.text) ? 1.5 : 1;
384
+ return value.score * role * detail * (query.recent ? 1 + 2 * Math.exp(-age / 0.5) : 1 + 0.4 * Math.exp(-age / 3))
385
+ * proximity(record.text.slice(value.chunk.offset, value.chunk.offset + 800), terms);
386
+ };
387
+ const rankings = scoresByQuery.map((scores, i) => [...scores.values()].sort((a, b) => rank(b, termSets[i]) - rank(a, termSets[i]) || a.chunk.id - b.chunk.id));
388
+ const ranked = rankings.flat(), topicLeaders = [0, 1].flatMap(i => rankings.slice(1).flatMap(rows => rows[i] ? [rows[i]] : []));
389
+ const recent = [];
390
+ if (query.recent && (query.session_id || query.session_ids)) {
391
+ const latest = [...this.current.values()].filter(record => this.admitted(record, query) && record.kind === 'session'
392
+ && record.role === 'assistant' && record.text.length >= 40 && !/^Tool requested:/.test(record.text))
393
+ .sort((a, b) => (b.at || '').localeCompare(a.at || '') || b.position - a.position).slice(0, 1);
394
+ for (const record of latest) {
395
+ const chunk = this.db.prepare('SELECT id,ref,offset FROM chunks WHERE ref=? AND embedded=1 ORDER BY offset LIMIT 1').get(record.ref);
396
+ if (chunk)
397
+ recent.push({ score: 1, chunk });
398
+ }
399
+ }
400
+ const explicit = query.kind === 'sources' ? [...new Set(query.question.match(/\bH[a-f0-9]{24}\b/g) || [])].slice(0, 3).map(ref => {
401
+ const record = this.record(ref);
402
+ if (!this.admitted(record, query))
403
+ throw new Error('Historical reference is outside this lookup scope or cutoff.');
404
+ const chunk = this.db.prepare('SELECT id,ref,offset FROM chunks WHERE ref=? AND embedded=1 ORDER BY offset LIMIT 1').get(ref);
405
+ if (!chunk)
406
+ throw new Error('Historical reference has not been prepared.');
407
+ return { score: 1, chunk };
408
+ }) : [];
409
+ const selected = [...explicit, ...recent, ...topicLeaders, ...ranked].filter((value, i, all) => all.findIndex(other => this.record(other.chunk.ref).identity === this.record(value.chunk.ref).identity) === i);
410
+ const results = selected.slice(0, 8).map(({ chunk, score }) => {
411
+ const record = this.record(chunk.ref);
412
+ return { ...record, sequence: record.position, text: record.text.slice(chunk.offset, chunk.offset + (query.kind === 'sources' ? 1600 : 800)), offset: chunk.offset, score, ...(query.kind === 'sources' && chunk.offset > 0 ? { lead: record.text.slice(0, 400) } : {}) };
413
+ });
414
+ return { mode: 'hybrid', ...(0, reconcile_1.reconcileHistory)([...this.current.values()].filter(record => this.admitted(record, query)), results, query), limitations: LIMITATIONS + ' Records arriving or changing during this lookup are considered by the next lookup.' };
415
+ }
416
+ record(ref) {
417
+ const record = this.current.get(ref);
418
+ if (!record)
419
+ throw new Error('This historical record is no longer admitted or its text changed. Search again.');
420
+ return record;
421
+ }
422
+ read(ref, offset = 0, preparedBefore) {
423
+ if (preparedBefore) {
424
+ const cached = this.db.prepare('SELECT session_id FROM records WHERE ref=?').get(ref);
425
+ if (!cached)
426
+ throw new Error('Historical source is unavailable.');
427
+ this.assertPrepared({ before: preparedBefore, ...(cached.session_id ? { session_id: cached.session_id } : { kind: 'conversation' }) });
428
+ }
429
+ else
430
+ this.refresh();
431
+ const item = this.record(ref);
432
+ const rows = this.db.prepare(`SELECT ref FROM records WHERE group_id=? ORDER BY COALESCE(at,''),position,ref`).all(item.group);
433
+ const records = rows.filter(row => this.current.has(row.ref)).map(row => this.record(row.ref)), at = records.findIndex(row => row.ref === ref);
434
+ const before = records.slice(0, at).reverse().find(row => row.identity !== item.identity);
435
+ const after = records.slice(at + 1).find(row => row.identity !== item.identity && row.identity !== before?.identity);
436
+ const neighbors = [before, after].filter((row) => Boolean(row)).map(row => ({ ...row, text: row.text.slice(0, 600) }));
437
+ return { record: { ...item, text: item.text.slice(offset, offset + 4000) }, offset, total: item.text.length, neighbors };
438
+ }
439
+ }
440
+ exports.HistoryIndex = HistoryIndex;
441
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAAkC;AAClC,iDAA8C;AAC9C,kDAAqE;AACrE,yCAAmD;AACnD,uCAA+C;AAC/C,2CAA+C;AAC/C,qCAA8D;AAC9D,2CAAiE;AACjE,uCAAsE;AACtE,mCAAqI;AAGrI,SAAS,SAAS,CAAC,IAAY,EAAE,KAAe;IAC9C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,KAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtL,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAAC,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IACxE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvF,OAAO,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,GAAG,CAAC,CAAC;YACnE,IAAI,KAAK;gBAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;gBAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACtC,CAAC;AACD,MAAM,WAAW,GAAG,yVAAyV,CAAC;AAE9W,MAAa,YAAY;IAIH;IAA+B;IAAmC;IAAyB;IAHvG,aAAa,GAAG,KAAK,CAAC;IACtB,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC1C,UAAU,GAAG,IAAI,0BAAkB,EAAE,CAAC;IAC9C,YAAoB,EAAqB,EAAU,MAAyB,EAAU,KAAe,EAAU,OAAkB,IAAA,yBAAc,GAAE;QAA7H,OAAE,GAAF,EAAE,CAAmB;QAAU,WAAM,GAAN,MAAM,CAAmB;QAAU,UAAK,GAAL,KAAK,CAAU;QAAU,SAAI,GAAJ,IAAI,CAA8B;QAC/I,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACb,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAClG,4EAA4E;QAC5E,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,EAAE,CAAC;QAClF,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAClB,IAAA,4BAAkB,EAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1C,qEAAqE;YACrE,yEAAyE;YACzE,IAAI,KAAK;gBAAE,IAAA,6BAAoB,EAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IACD;uFACmF;IAC3E,OAAO,CAAC,MAAM,GAAG,IAAI;QAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YACrD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,GAAG,EAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACtH,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;YAClF,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,8DAA8D,CAAC,CAAC;YAC9F,KAAK,MAAM,IAAI,IAAI,IAAA,wBAAc,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3E,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBACtE,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtI,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,EAAE,CAAC;oBAC9D,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,IAAA,gBAAM,EAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;oBAC1I,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAmB,CAAC;oBAChE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBACjD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;oBACtC,IAAI,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;wBAAE,MAAM;gBAC9C,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;YAAC,IAAI,OAAO,GAAG,KAAK,CAAC;YACvF,KAAK,MAAM,GAAG,IAAI,QAAQ;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAAC,OAAO,GAAG,IAAI,CAAC;gBAAC,CAAC;YACxF,IAAI,OAAO;gBAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QACzG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IACD;;uFAEmF;IACnF,KAAK,CAAC,OAAO,CAAC,QAA+B,EAAE,EAAE,MAAsB,EAAE,UAAU,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;QAC7K,MAAM,EAAE,CAAC,IAAA,qBAAa,EAAC,UAAU,CAAC,CAAC,CAAC;QACpC,sEAAsE;QACtE,0EAA0E;QAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAA,qBAAY,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAA,wBAAY,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,MAAM,IAAI,SAAS;gBAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;oBAChD,IAAA,gCAAoB,EAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjG,IAAA,6BAAoB,EAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACxC,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;2BACR,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAqB,CAAC;QAC3F,MAAM,MAAM,GAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;2BACT,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAmB,CAAC,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,SAAS,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,CAAC,KAA6B,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAA,qBAAa,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;YAC7I,iBAAiB,EAAE,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzH,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAAC,CAAC;YACzF,MAAM,EAAE,CAAC;YAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAAC,OAAO;QACvC,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,CAAC;QAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,yHAAyH,CAAC,CAAC;QAC5J,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC;QAC/F,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAwC,EAAE,CAAC;QACxD,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,OAAO;YAC5B,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;gBACvB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;oBAC3B,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;YACL,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/F,CAAC,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,CAAC;QACnB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAkD,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvH,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;gBACvG,IAAI,IAAA,gBAAM,EAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBACpH,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,GAAmB,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;;gBACtF,KAAK,MAAM,IAAI,IAAI,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YAClF,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YACnF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBACtC,IAAI,CAAC,CAAC,MAAM,YAAY,YAAY,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACtJ,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;YACH,wEAAwE;YACxE,yEAAyE;YACzE,IAAI,QAAQ,EAAE,CAAC;gBAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;gBAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC;YAAC,CAAC;YAC7I,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtF,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,IAAI,IAAI;gBAAE,MAAM,EAAE,CAAC;QACxE,CAAC;QACD,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,EAAE,CAAC;IACX,CAAC;IACD;;iFAE6E;IACrE,cAAc,CAAC,KAA4B,EAAE,MAAsB;QACzE,MAAM,EAAE,CAAC,IAAA,qBAAa,EAAC,UAAU,CAAC,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2HAA2H,CAAC,CAAC;QAC5J,KAAK,MAAM,MAAM,IAAI,IAAA,wBAAc,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;YACpF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;gBAAE,SAAS;YAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAyD,CAAC;YAC5F,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,EAAE,CAAC;gBAChE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,GAAG,IAAA,gBAAM,EAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxJ,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC3I,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM;oBAAE,MAAM;YAChD,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IACO,KAAK,CAAC,WAAW,CAAC,MAAsB,EAAE,aAAa,GAAG,IAAI;QACpE,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAAC,CAAC;IAC/H,CAAC;IACO,QAAQ,CAAC,KAAa,EAAE,SAAiB,EAAE,IAAyB,EAAE,KAAK,GAAG,EAAE;QACtF,4EAA4E;QAC5E,yEAAyE;QACzE,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;6CAGkB,SAAS;+FACyC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,KAAK,CAAY,CAAC;IACrI,CAAC;IACO,QAAQ,CAAC,MAAoB,EAAE,KAA4B;QACjE,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;eAC7D,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,CAAC;eAC7D,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;eACnG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC;eACpD,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC;IAC7G,CAAC;IACO,MAAM,CAAC,KAA4B;QACzC,MAAM,UAAU,GAAa,EAAE,EAAE,IAAI,GAAwB,EAAE,CAAC;QAChE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAAC,CAAC;QACzF,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;QAAC,CAAC;QAC/I,IAAI,KAAK,CAAC,IAAI;YAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;QAChH,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAChF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAC/F,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;IACpF,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,KAAmB,EAAE,MAAsB,EAAE,YAAY,GAAG,KAAK;QAC5E,IAAI,YAAY;YAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;;YAChD,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,EAAE,CAAC,IAAA,qBAAa,EAAC,WAAW,CAAC,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kEAAkE,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACxI,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAC3E,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC3G,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,UAAU,GAAmB,EAAE,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,QAAQ;YAAE,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAA,qBAAS,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1G,4EAA4E;QAC5E,6EAA6E;QAC7E,IAAI,YAAY;YAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;;YAChD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,aAAa,GAAmD,EAAE,EAAE,QAAQ,GAAe,EAAE,CAAC;QACpG,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAU,CAAC,EAAE,CAAC;YAC9F,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2C,CAAC;YAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9F,MAAM,GAAG,GAAG,CAAC,IAAa,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE;gBACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;gBACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,SAAS,CAAC,gEAAgE;oBAC1G,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;oBAC/C,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACxE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC1G,CAAC;YACH,CAAC,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,gRAAgR,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAClT,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9H,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtH,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrF,IAAI,KAAK,CAAC,MAAM;gBAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACpF,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;wLACgK,MAAM,CAAC,GAAG;6BACrK,MAAM,CAAC,GAAG,0DAA0D,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAY,CAAC,CAAC;YAC9K,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,yEAAyE;gBACzE,6EAA6E;gBAC7E,0EAA0E;gBAC1E,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;uBACnH,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;qBACnG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACnG,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBACtB,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACrD,IAAI,KAAK,CAAC,MAAM;wBAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,gCAAgC,QAAQ,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;oBACvH,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;6HACiG,QAAQ;8DACvE,QAAQ,2DAA2D,CAAC;yBACvH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,UAAU,CAAY,EAAE,CAAC,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClJ,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,KAAsC,EAAE,KAAe,EAAE,EAAE;YACvE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC,KAAK,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;YACzH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5F,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChG,OAAO,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;kBAC7G,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACxF,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/J,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChI,MAAM,MAAM,GAAsC,EAAE,CAAC;QACrD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;mBAC/G,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBACnG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjG,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qFAAqF,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAsB,CAAC;gBAC1J,IAAI,KAAK;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC/H,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;YACnH,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qFAAqF,CAAC,CAAC,GAAG,CAAC,GAAG,CAAsB,CAAC;YACnJ,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC3E,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACR,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/M,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;YAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5Q,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAA,4BAAgB,EAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,qFAAqF,EAAE,CAAC;IAC9P,CAAC;IACO,MAAM,CAAC,GAAW;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;QAChH,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,CAAC,GAAW,EAAE,MAAM,GAAG,CAAC,EAAE,cAAuB;QACnD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,GAAG,CAA8C,CAAC;YACnI,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAClE,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAuB,EAAE,CAAC,EAAE,CAAC,CAAC;QAClJ,CAAC;;YACI,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gFAAgF,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAsB,CAAC;QACpJ,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC/I,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1F,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrH,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAuB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5I,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAC3H,CAAC;CACF;AAzRD,oCAyRC"}
@@ -0,0 +1,9 @@
1
+ export declare const MODEL = "Xenova/multilingual-e5-small";
2
+ export declare const REVISION = "761b726dd34fb83930e26aab4e9ac3899aa1fa78";
3
+ export declare const MODEL_ID = "Xenova/multilingual-e5-small@761b726dd34fb83930e26aab4e9ac3899aa1fa78/q8-mean-normalized-v1";
4
+ export declare const FILES: {
5
+ name: string;
6
+ size: number;
7
+ sha: string;
8
+ }[];
9
+ //# sourceMappingURL=model-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-files.d.ts","sourceRoot":"","sources":["../../src/memory/model-files.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,KAAK,iCAAiC,CAAC;AACpD,eAAO,MAAM,QAAQ,6CAA6C,CAAC;AACnE,eAAO,MAAM,QAAQ,gGAA+C,CAAC;AACrE,eAAO,MAAM,KAAK;;;;GAIjB,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FILES = exports.MODEL_ID = exports.REVISION = exports.MODEL = void 0;
4
+ // Metadata only: safe to inspect readiness without loading an inference runtime.
5
+ exports.MODEL = 'Xenova/multilingual-e5-small';
6
+ exports.REVISION = '761b726dd34fb83930e26aab4e9ac3899aa1fa78';
7
+ exports.MODEL_ID = `${exports.MODEL}@${exports.REVISION}/q8-mean-normalized-v1`;
8
+ exports.FILES = [
9
+ { name: 'onnx/model_quantized.onnx', size: 118308185, sha: 'f80102d3f2a1229f387d3c81909990d8945513e347b0eab049f7de3c6f98c193' },
10
+ { name: 'tokenizer.json', size: 17082730, sha: '0b44a9d7b51c3c62626640cda0e2c2f70fdacdc25bbbd68038369d14ebdf4c39' },
11
+ { name: 'tokenizer_config.json', size: 443, sha: 'a1d6bc8734a6f635dc158508bef000f8e2e5a759c7d92f984b2c86e5ff53425b' },
12
+ ];
13
+ //# sourceMappingURL=model-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-files.js","sourceRoot":"","sources":["../../src/memory/model-files.ts"],"names":[],"mappings":";;;AAAA,iFAAiF;AACpE,QAAA,KAAK,GAAG,8BAA8B,CAAC;AACvC,QAAA,QAAQ,GAAG,0CAA0C,CAAC;AACtD,QAAA,QAAQ,GAAG,GAAG,aAAK,IAAI,gBAAQ,wBAAwB,CAAC;AACxD,QAAA,KAAK,GAAG;IACnB,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,kEAAkE,EAAE;IAC/H,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,kEAAkE,EAAE;IACnH,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,kEAAkE,EAAE;CACtH,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type Embedder, type ReportHistory } from './types';
2
+ export declare class LocalEmbedder implements Embedder {
3
+ private directory;
4
+ private threads;
5
+ readonly fingerprint = "Xenova/multilingual-e5-small@761b726dd34fb83930e26aab4e9ac3899aa1fa78/q8-mean-normalized-v1";
6
+ private session?;
7
+ private tokenizer?;
8
+ constructor(directory: string, threads?: number);
9
+ ready(): boolean;
10
+ private verified;
11
+ setup(report?: ReportHistory, allowDownload?: boolean): Promise<void>;
12
+ private load;
13
+ embed(text: string, query: boolean): Promise<Float32Array>;
14
+ }
15
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/memory/model.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAM3E,qBAAa,aAAc,YAAW,QAAQ;IAIhC,OAAO,CAAC,SAAS;IAAU,OAAO,CAAC,OAAO;IAHtD,QAAQ,CAAC,WAAW,iGAAY;IAChC,OAAO,CAAC,OAAO,CAAC,CAAuB;IACvC,OAAO,CAAC,SAAS,CAAC,CAAY;gBACV,SAAS,EAAE,MAAM,EAAU,OAAO,SAAmE;IAGzH,KAAK;YACS,QAAQ;IAKhB,KAAK,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,aAAa,UAAO;YA0B1C,IAAI;IAaZ,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;CA0BjE"}