ai-database 0.1.0 → 0.2.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 (72) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/.turbo/turbo-test.log +102 -0
  3. package/README.md +381 -68
  4. package/TESTING.md +410 -0
  5. package/TEST_SUMMARY.md +250 -0
  6. package/TODO.md +128 -0
  7. package/dist/ai-promise-db.d.ts +370 -0
  8. package/dist/ai-promise-db.d.ts.map +1 -0
  9. package/dist/ai-promise-db.js +839 -0
  10. package/dist/ai-promise-db.js.map +1 -0
  11. package/dist/authorization.d.ts +531 -0
  12. package/dist/authorization.d.ts.map +1 -0
  13. package/dist/authorization.js +632 -0
  14. package/dist/authorization.js.map +1 -0
  15. package/dist/durable-clickhouse.d.ts +193 -0
  16. package/dist/durable-clickhouse.d.ts.map +1 -0
  17. package/dist/durable-clickhouse.js +422 -0
  18. package/dist/durable-clickhouse.js.map +1 -0
  19. package/dist/durable-promise.d.ts +182 -0
  20. package/dist/durable-promise.d.ts.map +1 -0
  21. package/dist/durable-promise.js +409 -0
  22. package/dist/durable-promise.js.map +1 -0
  23. package/dist/execution-queue.d.ts +239 -0
  24. package/dist/execution-queue.d.ts.map +1 -0
  25. package/dist/execution-queue.js +400 -0
  26. package/dist/execution-queue.js.map +1 -0
  27. package/dist/index.d.ts +50 -191
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +79 -462
  30. package/dist/index.js.map +1 -0
  31. package/dist/linguistic.d.ts +115 -0
  32. package/dist/linguistic.d.ts.map +1 -0
  33. package/dist/linguistic.js +379 -0
  34. package/dist/linguistic.js.map +1 -0
  35. package/dist/memory-provider.d.ts +304 -0
  36. package/dist/memory-provider.d.ts.map +1 -0
  37. package/dist/memory-provider.js +785 -0
  38. package/dist/memory-provider.js.map +1 -0
  39. package/dist/schema.d.ts +899 -0
  40. package/dist/schema.d.ts.map +1 -0
  41. package/dist/schema.js +1165 -0
  42. package/dist/schema.js.map +1 -0
  43. package/dist/tests.d.ts +107 -0
  44. package/dist/tests.d.ts.map +1 -0
  45. package/dist/tests.js +568 -0
  46. package/dist/tests.js.map +1 -0
  47. package/dist/types.d.ts +972 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +126 -0
  50. package/dist/types.js.map +1 -0
  51. package/package.json +37 -37
  52. package/src/ai-promise-db.ts +1243 -0
  53. package/src/authorization.ts +1102 -0
  54. package/src/durable-clickhouse.ts +596 -0
  55. package/src/durable-promise.ts +582 -0
  56. package/src/execution-queue.ts +608 -0
  57. package/src/index.test.ts +868 -0
  58. package/src/index.ts +337 -0
  59. package/src/linguistic.ts +404 -0
  60. package/src/memory-provider.test.ts +1036 -0
  61. package/src/memory-provider.ts +1119 -0
  62. package/src/schema.test.ts +1254 -0
  63. package/src/schema.ts +2296 -0
  64. package/src/tests.ts +725 -0
  65. package/src/types.ts +1177 -0
  66. package/test/README.md +153 -0
  67. package/test/edge-cases.test.ts +646 -0
  68. package/test/provider-resolution.test.ts +402 -0
  69. package/tsconfig.json +9 -0
  70. package/vitest.config.ts +19 -0
  71. package/dist/index.d.mts +0 -195
  72. package/dist/index.mjs +0 -430
@@ -0,0 +1,379 @@
1
+ /**
2
+ * Linguistic Helpers
3
+ *
4
+ * Utilities for verb conjugation, noun pluralization, and linguistic inference.
5
+ * Used for auto-generating forms, events, and semantic metadata.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { Verbs } from './types.js';
10
+ // =============================================================================
11
+ // Internal Helpers
12
+ // =============================================================================
13
+ function capitalize(s) {
14
+ return s.charAt(0).toUpperCase() + s.slice(1);
15
+ }
16
+ function preserveCase(original, replacement) {
17
+ if (original[0] === original[0]?.toUpperCase()) {
18
+ return capitalize(replacement);
19
+ }
20
+ return replacement;
21
+ }
22
+ function isVowel(char) {
23
+ return char ? 'aeiou'.includes(char.toLowerCase()) : false;
24
+ }
25
+ function splitCamelCase(s) {
26
+ return s.replace(/([a-z])([A-Z])/g, '$1 $2').split(' ');
27
+ }
28
+ /** Check if we should double the final consonant (CVC pattern) */
29
+ function shouldDoubleConsonant(verb) {
30
+ if (verb.length < 2)
31
+ return false;
32
+ const last = verb[verb.length - 1];
33
+ const secondLast = verb[verb.length - 2];
34
+ // Don't double w, x, y
35
+ if ('wxy'.includes(last))
36
+ return false;
37
+ // Must end in consonant preceded by vowel
38
+ if (isVowel(last) || !isVowel(secondLast))
39
+ return false;
40
+ // Common verbs that double the final consonant
41
+ const doublingVerbs = ['submit', 'commit', 'permit', 'omit', 'admit', 'emit', 'transmit', 'refer', 'prefer', 'defer', 'occur', 'recur', 'begin', 'stop', 'drop', 'shop', 'plan', 'scan', 'ban', 'run', 'gun', 'stun', 'cut', 'shut', 'hit', 'sit', 'fit', 'spit', 'quit', 'knit', 'get', 'set', 'pet', 'wet', 'bet', 'let', 'put', 'drag', 'brag', 'flag', 'tag', 'bag', 'nag', 'wag', 'hug', 'bug', 'mug', 'tug', 'rub', 'scrub', 'grab', 'stab', 'rob', 'sob', 'throb', 'nod', 'prod', 'plod', 'plot', 'rot', 'blot', 'spot', 'knot', 'trot', 'chat', 'pat', 'bat', 'mat', 'rat', 'slap', 'clap', 'flap', 'tap', 'wrap', 'snap', 'trap', 'cap', 'map', 'nap', 'zap', 'tip', 'sip', 'dip', 'rip', 'zip', 'slip', 'trip', 'drip', 'chip', 'clip', 'flip', 'grip', 'ship', 'skip', 'whip', 'strip', 'equip', 'hop', 'pop', 'mop', 'cop', 'chop', 'crop', 'prop', 'flop', 'swim', 'trim', 'slim', 'skim', 'dim', 'rim', 'brim', 'grim', 'hem', 'stem', 'jam', 'cram', 'ram', 'slam', 'dam', 'ham', 'scam', 'spam', 'tram', 'hum', 'drum', 'strum', 'sum', 'gum', 'chum', 'plum'];
42
+ // Short words (3 letters) almost always double
43
+ if (verb.length <= 3)
44
+ return true;
45
+ // Check if verb matches any known doubling pattern
46
+ return doublingVerbs.some(v => verb === v || verb.endsWith(v));
47
+ }
48
+ /** Convert verb to past participle (create → created, publish → published) */
49
+ function toPastParticiple(verb) {
50
+ if (verb.endsWith('e'))
51
+ return verb + 'd';
52
+ if (verb.endsWith('y') && !isVowel(verb[verb.length - 2])) {
53
+ return verb.slice(0, -1) + 'ied';
54
+ }
55
+ if (shouldDoubleConsonant(verb)) {
56
+ return verb + verb[verb.length - 1] + 'ed';
57
+ }
58
+ return verb + 'ed';
59
+ }
60
+ /** Convert verb to actor noun (create → creator, publish → publisher) */
61
+ function toActor(verb) {
62
+ if (verb.endsWith('e'))
63
+ return verb + 'r';
64
+ if (verb.endsWith('y') && !isVowel(verb[verb.length - 2])) {
65
+ return verb.slice(0, -1) + 'ier';
66
+ }
67
+ if (shouldDoubleConsonant(verb)) {
68
+ return verb + verb[verb.length - 1] + 'er';
69
+ }
70
+ return verb + 'er';
71
+ }
72
+ /** Convert verb to present 3rd person (create → creates, publish → publishes) */
73
+ function toPresent(verb) {
74
+ if (verb.endsWith('y') && !isVowel(verb[verb.length - 2])) {
75
+ return verb.slice(0, -1) + 'ies';
76
+ }
77
+ if (verb.endsWith('s') || verb.endsWith('x') || verb.endsWith('z') ||
78
+ verb.endsWith('ch') || verb.endsWith('sh')) {
79
+ return verb + 'es';
80
+ }
81
+ return verb + 's';
82
+ }
83
+ /** Convert verb to gerund (create → creating, publish → publishing) */
84
+ function toGerund(verb) {
85
+ if (verb.endsWith('ie'))
86
+ return verb.slice(0, -2) + 'ying';
87
+ if (verb.endsWith('e') && !verb.endsWith('ee'))
88
+ return verb.slice(0, -1) + 'ing';
89
+ if (shouldDoubleConsonant(verb)) {
90
+ return verb + verb[verb.length - 1] + 'ing';
91
+ }
92
+ return verb + 'ing';
93
+ }
94
+ /** Convert verb to result noun (create → creation, publish → publication) */
95
+ function toResult(verb) {
96
+ // Common -ate → -ation
97
+ if (verb.endsWith('ate'))
98
+ return verb.slice(0, -1) + 'ion';
99
+ // Common -ify → -ification
100
+ if (verb.endsWith('ify'))
101
+ return verb.slice(0, -1) + 'ication';
102
+ // Common -ize → -ization
103
+ if (verb.endsWith('ize'))
104
+ return verb.slice(0, -1) + 'ation';
105
+ // Common -e → -ion (but not always correct)
106
+ if (verb.endsWith('e'))
107
+ return verb.slice(0, -1) + 'ion';
108
+ // Default: just add -ion
109
+ return verb + 'ion';
110
+ }
111
+ // =============================================================================
112
+ // Public API
113
+ // =============================================================================
114
+ /**
115
+ * Auto-conjugate a verb from just the base form
116
+ *
117
+ * Given just "publish", generates all forms:
118
+ * - actor: publisher
119
+ * - act: publishes
120
+ * - activity: publishing
121
+ * - result: publication
122
+ * - reverse: { at: publishedAt, by: publishedBy, ... }
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * conjugate('publish')
127
+ * // => { action: 'publish', actor: 'publisher', act: 'publishes', activity: 'publishing', ... }
128
+ *
129
+ * conjugate('create')
130
+ * // => { action: 'create', actor: 'creator', act: 'creates', activity: 'creating', ... }
131
+ * ```
132
+ */
133
+ export function conjugate(action) {
134
+ // Check if it's a known verb first
135
+ if (action in Verbs) {
136
+ return Verbs[action];
137
+ }
138
+ const base = action.toLowerCase();
139
+ const pastParticiple = toPastParticiple(base);
140
+ return {
141
+ action: base,
142
+ actor: toActor(base),
143
+ act: toPresent(base),
144
+ activity: toGerund(base),
145
+ result: toResult(base),
146
+ reverse: {
147
+ at: `${pastParticiple}At`,
148
+ by: `${pastParticiple}By`,
149
+ in: `${pastParticiple}In`,
150
+ for: `${pastParticiple}For`,
151
+ },
152
+ };
153
+ }
154
+ /**
155
+ * Auto-pluralize a noun
156
+ *
157
+ * @example
158
+ * ```ts
159
+ * pluralize('post') // => 'posts'
160
+ * pluralize('category') // => 'categories'
161
+ * pluralize('person') // => 'people'
162
+ * pluralize('child') // => 'children'
163
+ * ```
164
+ */
165
+ export function pluralize(singular) {
166
+ const lower = singular.toLowerCase();
167
+ // Irregular plurals
168
+ const irregulars = {
169
+ person: 'people',
170
+ child: 'children',
171
+ man: 'men',
172
+ woman: 'women',
173
+ foot: 'feet',
174
+ tooth: 'teeth',
175
+ goose: 'geese',
176
+ mouse: 'mice',
177
+ ox: 'oxen',
178
+ leaf: 'leaves',
179
+ life: 'lives',
180
+ knife: 'knives',
181
+ wife: 'wives',
182
+ half: 'halves',
183
+ self: 'selves',
184
+ calf: 'calves',
185
+ analysis: 'analyses',
186
+ crisis: 'crises',
187
+ thesis: 'theses',
188
+ datum: 'data',
189
+ medium: 'media',
190
+ criterion: 'criteria',
191
+ phenomenon: 'phenomena',
192
+ };
193
+ if (irregulars[lower]) {
194
+ return preserveCase(singular, irregulars[lower]);
195
+ }
196
+ // Rules for regular plurals
197
+ if (lower.endsWith('y') && !isVowel(lower[lower.length - 2])) {
198
+ return singular.slice(0, -1) + 'ies';
199
+ }
200
+ // Words ending in z that double: quiz → quizzes, fez → fezzes
201
+ if (lower.endsWith('z') && !lower.endsWith('zz')) {
202
+ return singular + 'zes';
203
+ }
204
+ if (lower.endsWith('s') || lower.endsWith('x') || lower.endsWith('zz') ||
205
+ lower.endsWith('ch') || lower.endsWith('sh')) {
206
+ return singular + 'es';
207
+ }
208
+ if (lower.endsWith('f')) {
209
+ return singular.slice(0, -1) + 'ves';
210
+ }
211
+ if (lower.endsWith('fe')) {
212
+ return singular.slice(0, -2) + 'ves';
213
+ }
214
+ return singular + 's';
215
+ }
216
+ /**
217
+ * Auto-singularize a noun (reverse of pluralize)
218
+ *
219
+ * @example
220
+ * ```ts
221
+ * singularize('posts') // => 'post'
222
+ * singularize('categories') // => 'category'
223
+ * singularize('people') // => 'person'
224
+ * ```
225
+ */
226
+ export function singularize(plural) {
227
+ const lower = plural.toLowerCase();
228
+ // Irregular singulars
229
+ const irregulars = {
230
+ people: 'person',
231
+ children: 'child',
232
+ men: 'man',
233
+ women: 'woman',
234
+ feet: 'foot',
235
+ teeth: 'tooth',
236
+ geese: 'goose',
237
+ mice: 'mouse',
238
+ oxen: 'ox',
239
+ leaves: 'leaf',
240
+ lives: 'life',
241
+ knives: 'knife',
242
+ wives: 'wife',
243
+ halves: 'half',
244
+ selves: 'self',
245
+ calves: 'calf',
246
+ analyses: 'analysis',
247
+ crises: 'crisis',
248
+ theses: 'thesis',
249
+ data: 'datum',
250
+ media: 'medium',
251
+ criteria: 'criterion',
252
+ phenomena: 'phenomenon',
253
+ };
254
+ if (irregulars[lower]) {
255
+ return preserveCase(plural, irregulars[lower]);
256
+ }
257
+ // Rules for regular singulars
258
+ if (lower.endsWith('ies')) {
259
+ return plural.slice(0, -3) + 'y';
260
+ }
261
+ if (lower.endsWith('ves')) {
262
+ return plural.slice(0, -3) + 'f';
263
+ }
264
+ if (lower.endsWith('es') && (lower.endsWith('sses') || lower.endsWith('xes') || lower.endsWith('zes') ||
265
+ lower.endsWith('ches') || lower.endsWith('shes'))) {
266
+ return plural.slice(0, -2);
267
+ }
268
+ if (lower.endsWith('s') && !lower.endsWith('ss')) {
269
+ return plural.slice(0, -1);
270
+ }
271
+ return plural;
272
+ }
273
+ /**
274
+ * Infer a complete Noun from just a type name
275
+ *
276
+ * @example
277
+ * ```ts
278
+ * inferNoun('BlogPost')
279
+ * // => { singular: 'blog post', plural: 'blog posts', ... }
280
+ *
281
+ * inferNoun('Category')
282
+ * // => { singular: 'category', plural: 'categories', ... }
283
+ * ```
284
+ */
285
+ export function inferNoun(typeName) {
286
+ const words = splitCamelCase(typeName);
287
+ const singular = words.join(' ').toLowerCase();
288
+ const plural = words.slice(0, -1).concat(pluralize(words[words.length - 1])).join(' ').toLowerCase();
289
+ return {
290
+ singular,
291
+ plural,
292
+ actions: ['create', 'update', 'delete'],
293
+ events: ['created', 'updated', 'deleted'],
294
+ };
295
+ }
296
+ /**
297
+ * Create TypeMeta from a type name - all linguistic forms auto-inferred
298
+ *
299
+ * @example
300
+ * ```ts
301
+ * const meta = createTypeMeta('BlogPost')
302
+ * meta.singular // 'blog post'
303
+ * meta.plural // 'blog posts'
304
+ * meta.slug // 'blog-post'
305
+ * meta.created // 'BlogPost.created'
306
+ * meta.createdAt // 'createdAt'
307
+ * meta.creator // 'creator'
308
+ * ```
309
+ */
310
+ export function createTypeMeta(typeName) {
311
+ const noun = inferNoun(typeName);
312
+ const slug = noun.singular.replace(/\s+/g, '-');
313
+ const slugPlural = noun.plural.replace(/\s+/g, '-');
314
+ return {
315
+ name: typeName,
316
+ singular: noun.singular,
317
+ plural: noun.plural,
318
+ slug,
319
+ slugPlural,
320
+ // From Verbs.create
321
+ creator: 'creator',
322
+ createdAt: 'createdAt',
323
+ createdBy: 'createdBy',
324
+ updatedAt: 'updatedAt',
325
+ updatedBy: 'updatedBy',
326
+ // Event types
327
+ created: `${typeName}.created`,
328
+ updated: `${typeName}.updated`,
329
+ deleted: `${typeName}.deleted`,
330
+ };
331
+ }
332
+ /** Cache of TypeMeta by type name */
333
+ const typeMetaCache = new Map();
334
+ /**
335
+ * Get or create TypeMeta for a type name (cached)
336
+ */
337
+ export function getTypeMeta(typeName) {
338
+ let meta = typeMetaCache.get(typeName);
339
+ if (!meta) {
340
+ meta = createTypeMeta(typeName);
341
+ typeMetaCache.set(typeName, meta);
342
+ }
343
+ return meta;
344
+ }
345
+ /**
346
+ * Type proxy - provides dynamic access to type metadata
347
+ *
348
+ * @example
349
+ * ```ts
350
+ * const Post = Type('Post')
351
+ * Post.singular // 'post'
352
+ * Post.plural // 'posts'
353
+ * Post.created // 'Post.created'
354
+ *
355
+ * // In event handlers:
356
+ * on.create(thing => {
357
+ * console.log(thing.$type.plural) // 'posts'
358
+ * })
359
+ * ```
360
+ */
361
+ export function Type(name) {
362
+ return getTypeMeta(name);
363
+ }
364
+ /**
365
+ * Get reverse property names for a verb action
366
+ *
367
+ * @example
368
+ * ```ts
369
+ * getVerbFields('create')
370
+ * // => { at: 'createdAt', by: 'createdBy', in: 'createdIn', for: 'createdFor' }
371
+ *
372
+ * getVerbFields('publish')
373
+ * // => { at: 'publishedAt', by: 'publishedBy' }
374
+ * ```
375
+ */
376
+ export function getVerbFields(action) {
377
+ return Verbs[action]?.reverse ?? {};
378
+ }
379
+ //# sourceMappingURL=linguistic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linguistic.js","sourceRoot":"","sources":["../src/linguistic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAuC,MAAM,YAAY,CAAA;AAEvE,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,WAAmB;IACzD,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC;QAC/C,OAAO,UAAU,CAAC,WAAW,CAAC,CAAA;IAChC,CAAC;IACD,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,SAAS,OAAO,CAAC,IAAwB;IACvC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AAC5D,CAAC;AAED,SAAS,cAAc,CAAC,CAAS;IAC/B,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACzD,CAAC;AAED,kEAAkE;AAClE,SAAS,qBAAqB,CAAC,IAAY;IACzC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;IACzC,uBAAuB;IACvB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IACtC,0CAA0C;IAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAA;IACvD,+CAA+C;IAC/C,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAA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"}