@thangph2146/lexical-editor 0.0.4 → 0.0.6

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 (101) hide show
  1. package/README.md +47 -0
  2. package/dist/editor-x/editor.cjs +732 -443
  3. package/dist/editor-x/editor.cjs.map +1 -1
  4. package/dist/editor-x/editor.css +1418 -1120
  5. package/dist/editor-x/editor.css.map +1 -1
  6. package/dist/editor-x/editor.d.cts +2 -1
  7. package/dist/editor-x/editor.d.ts +2 -1
  8. package/dist/editor-x/editor.js +736 -447
  9. package/dist/editor-x/editor.js.map +1 -1
  10. package/dist/index.cjs +772 -482
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.css +1418 -1120
  13. package/dist/index.css.map +1 -1
  14. package/dist/index.d.cts +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.js +775 -485
  17. package/dist/index.js.map +1 -1
  18. package/package.json +86 -84
  19. package/src/components/lexical-editor.tsx +140 -123
  20. package/src/editor-x/editor.tsx +20 -5
  21. package/src/editor-x/plugins.tsx +385 -380
  22. package/src/nodes/list-with-color-node.tsx +160 -160
  23. package/src/plugins/autocomplete-plugin.tsx +2574 -2574
  24. package/src/plugins/context-menu-plugin.tsx +239 -9
  25. package/src/plugins/floating-text-format-plugin.tsx +84 -92
  26. package/src/plugins/images-plugin.tsx +4 -4
  27. package/src/plugins/list-color-plugin.tsx +178 -178
  28. package/src/plugins/tab-focus-plugin.tsx +66 -66
  29. package/src/plugins/table-column-resizer-plugin.tsx +329 -190
  30. package/src/plugins/toolbar/block-format/block-format-data.tsx +4 -0
  31. package/src/plugins/toolbar/block-format/format-bulleted-list.tsx +40 -40
  32. package/src/plugins/toolbar/block-format/format-list-with-marker.tsx +74 -74
  33. package/src/plugins/toolbar/block-format/format-numbered-list.tsx +40 -40
  34. package/src/plugins/toolbar/block-format-toolbar-plugin.tsx +118 -117
  35. package/src/plugins/toolbar/element-format-toolbar-plugin.tsx +37 -53
  36. package/src/plugins/toolbar/font-format-toolbar-plugin.tsx +8 -15
  37. package/src/plugins/toolbar/font-size-toolbar-plugin.tsx +2 -3
  38. package/src/plugins/toolbar/history-toolbar-plugin.tsx +2 -5
  39. package/src/plugins/toolbar/subsuper-toolbar-plugin.tsx +15 -23
  40. package/src/themes/_mixins.scss +158 -10
  41. package/src/themes/_variables.scss +168 -0
  42. package/src/themes/core/_code.scss +59 -0
  43. package/src/themes/core/_images.scss +80 -0
  44. package/src/themes/core/_lists.scss +214 -0
  45. package/src/themes/core/_misc.scss +46 -0
  46. package/src/themes/core/_reset.scss +119 -0
  47. package/src/themes/core/_tables.scss +145 -0
  48. package/src/themes/core/_text.scss +35 -0
  49. package/src/themes/core/_typography.scss +73 -0
  50. package/src/themes/editor-theme.scss +9 -623
  51. package/src/themes/editor-theme.ts +118 -118
  52. package/src/themes/plugins/_auto-embed.scss +11 -0
  53. package/src/themes/plugins/_color-picker.scss +103 -0
  54. package/src/themes/plugins/_draggable-block.scss +32 -0
  55. package/src/themes/plugins/_floating-link-editor.scss +47 -0
  56. package/src/themes/plugins/_floating-toolbars.scss +61 -0
  57. package/src/themes/plugins/_image-resizer.scss +38 -0
  58. package/src/themes/plugins/_image.scss +57 -0
  59. package/src/themes/plugins/_layout.scss +39 -0
  60. package/src/themes/plugins/_list-color.scss +23 -0
  61. package/src/themes/plugins/_mentions.scss +21 -0
  62. package/src/themes/plugins/_menus-and-pickers.scss +153 -0
  63. package/src/themes/plugins/_table.scss +20 -0
  64. package/src/themes/plugins/_toolbar.scss +36 -0
  65. package/src/themes/plugins/_tree-view.scss +11 -0
  66. package/src/themes/plugins.scss +20 -1165
  67. package/src/themes/ui-components/_animations.scss +31 -0
  68. package/src/themes/ui-components/_backgrounds.scss +27 -0
  69. package/src/themes/ui-components/_borders.scss +20 -0
  70. package/src/themes/ui-components/_button.scss +176 -0
  71. package/src/themes/ui-components/_checkbox.scss +14 -0
  72. package/src/themes/ui-components/_cursors.scss +31 -0
  73. package/src/themes/ui-components/_dialog.scss +86 -0
  74. package/src/themes/ui-components/_display-sizing.scss +100 -0
  75. package/src/themes/ui-components/_flex.scss +124 -0
  76. package/src/themes/ui-components/_form-layout.scss +15 -0
  77. package/src/themes/ui-components/_icons.scss +23 -0
  78. package/src/themes/ui-components/_input.scss +86 -0
  79. package/src/themes/ui-components/_label.scss +19 -0
  80. package/src/themes/ui-components/_loader.scss +9 -0
  81. package/src/themes/ui-components/_margins-paddings.scss +45 -0
  82. package/src/themes/ui-components/_popover.scss +16 -0
  83. package/src/themes/ui-components/_positioning.scss +73 -0
  84. package/src/themes/ui-components/_rounded.scss +19 -0
  85. package/src/themes/ui-components/_scroll-area.scss +11 -0
  86. package/src/themes/ui-components/_select.scss +110 -0
  87. package/src/themes/ui-components/_separator.scss +19 -0
  88. package/src/themes/ui-components/_shadow.scss +15 -0
  89. package/src/themes/ui-components/_tabs.scss +46 -0
  90. package/src/themes/ui-components/_text-utilities.scss +48 -0
  91. package/src/themes/ui-components/_toggle-toolbar.scss +128 -0
  92. package/src/themes/ui-components/_toggle.scss +80 -0
  93. package/src/themes/ui-components/_typography.scss +22 -0
  94. package/src/themes/ui-components.scss +27 -937
  95. package/src/transformers/markdown-list-transformer.ts +51 -51
  96. package/src/ui/button.tsx +11 -2
  97. package/src/ui/collapsible.tsx +1 -1
  98. package/src/ui/dialog.tsx +2 -2
  99. package/src/ui/flex.tsx +4 -4
  100. package/src/ui/popover.tsx +1 -1
  101. package/src/ui/tooltip.tsx +2 -2
@@ -1,2574 +1,2574 @@
1
- "use client"
2
-
3
- /**
4
- * Copyright (c) Meta Platforms, Inc. and affiliates.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- *
9
- */
10
- import type { JSX } from "react"
11
- import { useCallback, useEffect } from "react"
12
- import { logger } from "../lib/logger"
13
- import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext"
14
- import {
15
- $getSelectionStyleValueForProperty,
16
- $isAtNodeEnd,
17
- } from "@lexical/selection"
18
- import { mergeRegister } from "@lexical/utils"
19
- import type { BaseSelection, NodeKey, TextNode } from "lexical"
20
- import {
21
- $addUpdateTag,
22
- $createTextNode,
23
- $getNodeByKey,
24
- $getSelection,
25
- $isRangeSelection,
26
- $isTextNode,
27
- $setSelection,
28
- COMMAND_PRIORITY_LOW,
29
- HISTORY_MERGE_TAG,
30
- KEY_ARROW_RIGHT_COMMAND,
31
- KEY_TAB_COMMAND,
32
- } from "lexical"
33
-
34
- import {
35
- $createAutocompleteNode,
36
- AutocompleteNode,
37
- } from "../nodes/autocomplete-node"
38
- import { addSwipeRightListener } from "../utils/swipe"
39
-
40
- const HISTORY_MERGE = { tag: HISTORY_MERGE_TAG }
41
-
42
- declare global {
43
- interface Navigator {
44
- userAgentData?: {
45
- mobile: boolean
46
- }
47
- }
48
- }
49
-
50
- type SearchPromise = {
51
- dismiss: () => void
52
- promise: Promise<null | string>
53
- }
54
-
55
- export const uuid = Math.random()
56
- .toString(36)
57
- .replace(/[^a-z]+/g, "")
58
- .substring(0, 5)
59
-
60
- // TODO lookup should be custom
61
- function $search(selection: null | BaseSelection): [boolean, string] {
62
- if (!$isRangeSelection(selection) || !selection.isCollapsed()) {
63
- return [false, ""]
64
- }
65
- const node = selection.getNodes()[0]
66
- const anchor = selection.anchor
67
- // Check siblings?
68
- if (!$isTextNode(node) || !node.isSimpleText() || !$isAtNodeEnd(anchor)) {
69
- return [false, ""]
70
- }
71
- const word = []
72
- const text = node.getTextContent()
73
- let i = node.getTextContentSize()
74
- let c
75
- while (i-- && i >= 0 && (c = text[i]) !== " ") {
76
- word.push(c)
77
- }
78
- if (word.length === 0) {
79
- return [false, ""]
80
- }
81
- return [true, word.reverse().join("")]
82
- }
83
-
84
- // TODO query should be custom
85
- function useQuery(): (searchText: string) => SearchPromise {
86
- return useCallback((searchText: string) => {
87
- const server = new AutocompleteServer()
88
- const response = server.query(searchText)
89
- return response
90
- }, [])
91
- }
92
-
93
- function formatSuggestionText(suggestion: string): string {
94
- const userAgentData = window.navigator.userAgentData
95
- const isMobile =
96
- userAgentData !== undefined
97
- ? userAgentData.mobile
98
- : window.innerWidth <= 800 && window.innerHeight <= 600
99
-
100
- return `${suggestion} ${isMobile ? "(SWIPE \u2B95)" : "(TAB)"}`
101
- }
102
-
103
- export function AutocompletePlugin(): JSX.Element | null {
104
- const [editor] = useLexicalComposerContext()
105
- const query = useQuery()
106
-
107
- useEffect(() => {
108
- let autocompleteNodeKey: null | NodeKey = null
109
- let lastMatch: null | string = null
110
- let lastSuggestion: null | string = null
111
- let searchPromise: null | SearchPromise = null
112
- let prevNodeFormat: number = 0
113
- function $clearSuggestion() {
114
- const autocompleteNode =
115
- autocompleteNodeKey !== null ? $getNodeByKey(autocompleteNodeKey) : null
116
- if (autocompleteNode !== null && autocompleteNode.isAttached()) {
117
- autocompleteNode.remove()
118
- autocompleteNodeKey = null
119
- }
120
- if (searchPromise !== null) {
121
- searchPromise.dismiss()
122
- searchPromise = null
123
- }
124
- lastMatch = null
125
- lastSuggestion = null
126
- prevNodeFormat = 0
127
- }
128
- function updateAsyncSuggestion(
129
- refSearchPromise: SearchPromise,
130
- newSuggestion: null | string
131
- ) {
132
- if (searchPromise !== refSearchPromise || newSuggestion === null) {
133
- // Outdated or no suggestion
134
- return
135
- }
136
- editor.update(() => {
137
- const selection = $getSelection()
138
- const [hasMatch, match] = $search(selection)
139
- if (!hasMatch || match !== lastMatch || !$isRangeSelection(selection)) {
140
- // Outdated
141
- return
142
- }
143
- const fontSize = $getSelectionStyleValueForProperty(
144
- selection,
145
- "font-size",
146
- "16px"
147
- )
148
-
149
- const selectionCopy = selection.clone()
150
- const prevNode = selection.getNodes()[0] as TextNode
151
- prevNodeFormat = prevNode.getFormat()
152
- const node = $createAutocompleteNode(
153
- formatSuggestionText(newSuggestion),
154
- uuid
155
- )
156
- .setFormat(prevNodeFormat)
157
- .setStyle(`font-size: ${fontSize}`)
158
- autocompleteNodeKey = node.getKey()
159
- selection.insertNodes([node])
160
- $setSelection(selectionCopy)
161
- lastSuggestion = newSuggestion
162
- }, HISTORY_MERGE)
163
- }
164
-
165
- function $handleAutocompleteNodeTransform(node: AutocompleteNode) {
166
- const key = node.getKey()
167
- if (node.__uuid === uuid && key !== autocompleteNodeKey) {
168
- // Max one Autocomplete node per session
169
- $clearSuggestion()
170
- }
171
- }
172
- function handleUpdate() {
173
- editor.update(() => {
174
- const selection = $getSelection()
175
- const [hasMatch, match] = $search(selection)
176
- if (!hasMatch) {
177
- $clearSuggestion()
178
- return
179
- }
180
- if (match === lastMatch) {
181
- return
182
- }
183
- $clearSuggestion()
184
- searchPromise = query(match)
185
- searchPromise.promise
186
- .then((newSuggestion) => {
187
- if (searchPromise !== null) {
188
- updateAsyncSuggestion(searchPromise, newSuggestion)
189
- }
190
- })
191
- .catch((e) => {
192
- if (e !== "Dismissed") {
193
- logger.error("[AutocompletePlugin] Error:", e)
194
- }
195
- })
196
- lastMatch = match
197
- }, HISTORY_MERGE)
198
- }
199
- function $handleAutocompleteIntent(): boolean {
200
- if (lastSuggestion === null || autocompleteNodeKey === null) {
201
- return false
202
- }
203
- const autocompleteNode = $getNodeByKey(autocompleteNodeKey)
204
- if (autocompleteNode === null) {
205
- return false
206
- }
207
-
208
- const selection = $getSelection()
209
- if (!$isRangeSelection(selection)) {
210
- // Outdated
211
- return false
212
- }
213
- const fontSize = $getSelectionStyleValueForProperty(
214
- selection,
215
- "font-size",
216
- "16px"
217
- )
218
-
219
- const textNode = $createTextNode(lastSuggestion)
220
- .setFormat(prevNodeFormat)
221
- .setStyle(`font-size: ${fontSize}`)
222
- autocompleteNode.replace(textNode)
223
- textNode.selectNext()
224
- $clearSuggestion()
225
- return true
226
- }
227
- function $handleKeypressCommand(e: Event) {
228
- if ($handleAutocompleteIntent()) {
229
- e.preventDefault()
230
- return true
231
- }
232
- return false
233
- }
234
- function handleSwipeRight(_force: number, e: TouchEvent) {
235
- editor.update(() => {
236
- if ($handleAutocompleteIntent()) {
237
- e.preventDefault()
238
- } else {
239
- $addUpdateTag(HISTORY_MERGE.tag)
240
- }
241
- })
242
- }
243
- function unmountSuggestion() {
244
- editor.update(() => {
245
- $clearSuggestion()
246
- }, HISTORY_MERGE)
247
- }
248
-
249
- const rootElem = editor.getRootElement()
250
-
251
- return mergeRegister(
252
- editor.registerNodeTransform(
253
- AutocompleteNode,
254
- $handleAutocompleteNodeTransform
255
- ),
256
- editor.registerUpdateListener(handleUpdate),
257
- editor.registerCommand(
258
- KEY_TAB_COMMAND,
259
- $handleKeypressCommand,
260
- COMMAND_PRIORITY_LOW
261
- ),
262
- editor.registerCommand(
263
- KEY_ARROW_RIGHT_COMMAND,
264
- $handleKeypressCommand,
265
- COMMAND_PRIORITY_LOW
266
- ),
267
- ...(rootElem !== null
268
- ? [addSwipeRightListener(rootElem, handleSwipeRight)]
269
- : []),
270
- unmountSuggestion
271
- )
272
- }, [editor, query])
273
-
274
- return null
275
- }
276
-
277
- /*
278
- * Simulate an asynchronous autocomplete server (typical in more common use cases like GMail where
279
- * the data is not static).
280
- */
281
- class AutocompleteServer {
282
- DATABASE = DICTIONARY
283
- LATENCY = 200
284
-
285
- query = (searchText: string): SearchPromise => {
286
- let isDismissed = false
287
-
288
- const dismiss = () => {
289
- isDismissed = true
290
- }
291
- const promise: Promise<null | string> = new Promise((resolve, reject) => {
292
- setTimeout(() => {
293
- if (isDismissed) {
294
- // TODO cache result
295
- return reject("Dismissed")
296
- }
297
- const searchTextLength = searchText.length
298
- if (searchText === "" || searchTextLength < 4) {
299
- return resolve(null)
300
- }
301
- const char0 = searchText.charCodeAt(0)
302
- const isCapitalized = char0 >= 65 && char0 <= 90
303
- const caseInsensitiveSearchText = isCapitalized
304
- ? String.fromCharCode(char0 + 32) + searchText.substring(1)
305
- : searchText
306
- const match = this.DATABASE.find(
307
- (dictionaryWord) =>
308
- dictionaryWord.startsWith(caseInsensitiveSearchText) ?? null
309
- )
310
- if (match === undefined) {
311
- return resolve(null)
312
- }
313
- const matchCapitalized = isCapitalized
314
- ? String.fromCharCode(match.charCodeAt(0) - 32) + match.substring(1)
315
- : match
316
- const autocompleteChunk = matchCapitalized.substring(searchTextLength)
317
- if (autocompleteChunk === "") {
318
- return resolve(null)
319
- }
320
- return resolve(autocompleteChunk)
321
- }, this.LATENCY)
322
- })
323
-
324
- return {
325
- dismiss,
326
- promise,
327
- }
328
- }
329
- }
330
-
331
- // https://raw.githubusercontent.com/first20hours/google-10000-english/master/google-10000-english-usa-no-swears-long.txt
332
- const DICTIONARY = [
333
- "information",
334
- "available",
335
- "copyright",
336
- "university",
337
- "management",
338
- "international",
339
- "development",
340
- "education",
341
- "community",
342
- "technology",
343
- "following",
344
- "resources",
345
- "including",
346
- "directory",
347
- "government",
348
- "department",
349
- "description",
350
- "insurance",
351
- "different",
352
- "categories",
353
- "conditions",
354
- "accessories",
355
- "september",
356
- "questions",
357
- "application",
358
- "financial",
359
- "equipment",
360
- "performance",
361
- "experience",
362
- "important",
363
- "activities",
364
- "additional",
365
- "something",
366
- "professional",
367
- "committee",
368
- "washington",
369
- "california",
370
- "reference",
371
- "companies",
372
- "computers",
373
- "president",
374
- "australia",
375
- "discussion",
376
- "entertainment",
377
- "agreement",
378
- "marketing",
379
- "association",
380
- "collection",
381
- "solutions",
382
- "electronics",
383
- "technical",
384
- "microsoft",
385
- "conference",
386
- "environment",
387
- "statement",
388
- "downloads",
389
- "applications",
390
- "requirements",
391
- "individual",
392
- "subscribe",
393
- "everything",
394
- "production",
395
- "commercial",
396
- "advertising",
397
- "treatment",
398
- "newsletter",
399
- "knowledge",
400
- "currently",
401
- "construction",
402
- "registered",
403
- "protection",
404
- "engineering",
405
- "published",
406
- "corporate",
407
- "customers",
408
- "materials",
409
- "countries",
410
- "standards",
411
- "political",
412
- "advertise",
413
- "environmental",
414
- "availability",
415
- "employment",
416
- "commission",
417
- "administration",
418
- "institute",
419
- "sponsored",
420
- "electronic",
421
- "condition",
422
- "effective",
423
- "organization",
424
- "selection",
425
- "corporation",
426
- "executive",
427
- "necessary",
428
- "according",
429
- "particular",
430
- "facilities",
431
- "opportunities",
432
- "appropriate",
433
- "statistics",
434
- "investment",
435
- "christmas",
436
- "registration",
437
- "furniture",
438
- "wednesday",
439
- "structure",
440
- "distribution",
441
- "industrial",
442
- "potential",
443
- "responsible",
444
- "communications",
445
- "associated",
446
- "foundation",
447
- "documents",
448
- "communication",
449
- "independent",
450
- "operating",
451
- "developed",
452
- "telephone",
453
- "population",
454
- "navigation",
455
- "operations",
456
- "therefore",
457
- "christian",
458
- "understand",
459
- "publications",
460
- "worldwide",
461
- "connection",
462
- "publisher",
463
- "introduction",
464
- "properties",
465
- "accommodation",
466
- "excellent",
467
- "opportunity",
468
- "assessment",
469
- "especially",
470
- "interface",
471
- "operation",
472
- "restaurants",
473
- "beautiful",
474
- "locations",
475
- "significant",
476
- "technologies",
477
- "manufacturer",
478
- "providing",
479
- "authority",
480
- "considered",
481
- "programme",
482
- "enterprise",
483
- "educational",
484
- "employees",
485
- "alternative",
486
- "processing",
487
- "responsibility",
488
- "resolution",
489
- "publication",
490
- "relations",
491
- "photography",
492
- "components",
493
- "assistance",
494
- "completed",
495
- "organizations",
496
- "otherwise",
497
- "transportation",
498
- "disclaimer",
499
- "membership",
500
- "recommended",
501
- "background",
502
- "character",
503
- "maintenance",
504
- "functions",
505
- "trademarks",
506
- "phentermine",
507
- "submitted",
508
- "television",
509
- "interested",
510
- "throughout",
511
- "established",
512
- "programming",
513
- "regarding",
514
- "instructions",
515
- "increased",
516
- "understanding",
517
- "beginning",
518
- "associates",
519
- "instruments",
520
- "businesses",
521
- "specified",
522
- "restaurant",
523
- "procedures",
524
- "relationship",
525
- "traditional",
526
- "sometimes",
527
- "themselves",
528
- "transport",
529
- "interesting",
530
- "evaluation",
531
- "implementation",
532
- "galleries",
533
- "references",
534
- "presented",
535
- "literature",
536
- "respective",
537
- "definition",
538
- "secretary",
539
- "networking",
540
- "australian",
541
- "magazines",
542
- "francisco",
543
- "individuals",
544
- "guidelines",
545
- "installation",
546
- "described",
547
- "attention",
548
- "difference",
549
- "regulations",
550
- "certificate",
551
- "directions",
552
- "documentation",
553
- "automotive",
554
- "successful",
555
- "communities",
556
- "situation",
557
- "publishing",
558
- "emergency",
559
- "developing",
560
- "determine",
561
- "temperature",
562
- "announcements",
563
- "historical",
564
- "ringtones",
565
- "difficult",
566
- "scientific",
567
- "satellite",
568
- "particularly",
569
- "functional",
570
- "monitoring",
571
- "architecture",
572
- "recommend",
573
- "dictionary",
574
- "accounting",
575
- "manufacturing",
576
- "professor",
577
- "generally",
578
- "continued",
579
- "techniques",
580
- "permission",
581
- "generation",
582
- "component",
583
- "guarantee",
584
- "processes",
585
- "interests",
586
- "paperback",
587
- "classifieds",
588
- "supported",
589
- "competition",
590
- "providers",
591
- "characters",
592
- "thousands",
593
- "apartments",
594
- "generated",
595
- "administrative",
596
- "practices",
597
- "reporting",
598
- "essential",
599
- "affiliate",
600
- "immediately",
601
- "designated",
602
- "integrated",
603
- "configuration",
604
- "comprehensive",
605
- "universal",
606
- "presentation",
607
- "languages",
608
- "compliance",
609
- "improvement",
610
- "pennsylvania",
611
- "challenge",
612
- "acceptance",
613
- "strategies",
614
- "affiliates",
615
- "multimedia",
616
- "certified",
617
- "computing",
618
- "interactive",
619
- "procedure",
620
- "leadership",
621
- "religious",
622
- "breakfast",
623
- "developer",
624
- "approximately",
625
- "recommendations",
626
- "comparison",
627
- "automatically",
628
- "minnesota",
629
- "adventure",
630
- "institutions",
631
- "assistant",
632
- "advertisement",
633
- "headlines",
634
- "yesterday",
635
- "determined",
636
- "wholesale",
637
- "extension",
638
- "statements",
639
- "completely",
640
- "electrical",
641
- "applicable",
642
- "manufacturers",
643
- "classical",
644
- "dedicated",
645
- "direction",
646
- "basketball",
647
- "wisconsin",
648
- "personnel",
649
- "identified",
650
- "professionals",
651
- "advantage",
652
- "newsletters",
653
- "estimated",
654
- "anonymous",
655
- "miscellaneous",
656
- "integration",
657
- "interview",
658
- "framework",
659
- "installed",
660
- "massachusetts",
661
- "associate",
662
- "frequently",
663
- "discussions",
664
- "laboratory",
665
- "destination",
666
- "intelligence",
667
- "specifications",
668
- "tripadvisor",
669
- "residential",
670
- "decisions",
671
- "industries",
672
- "partnership",
673
- "editorial",
674
- "expression",
675
- "provisions",
676
- "principles",
677
- "suggestions",
678
- "replacement",
679
- "strategic",
680
- "economics",
681
- "compatible",
682
- "apartment",
683
- "netherlands",
684
- "consulting",
685
- "recreation",
686
- "participants",
687
- "favorites",
688
- "translation",
689
- "estimates",
690
- "protected",
691
- "philadelphia",
692
- "officials",
693
- "contained",
694
- "legislation",
695
- "parameters",
696
- "relationships",
697
- "tennessee",
698
- "representative",
699
- "frequency",
700
- "introduced",
701
- "departments",
702
- "residents",
703
- "displayed",
704
- "performed",
705
- "administrator",
706
- "addresses",
707
- "permanent",
708
- "agriculture",
709
- "constitutes",
710
- "portfolio",
711
- "practical",
712
- "delivered",
713
- "collectibles",
714
- "infrastructure",
715
- "exclusive",
716
- "originally",
717
- "utilities",
718
- "philosophy",
719
- "regulation",
720
- "reduction",
721
- "nutrition",
722
- "recording",
723
- "secondary",
724
- "wonderful",
725
- "announced",
726
- "prevention",
727
- "mentioned",
728
- "automatic",
729
- "healthcare",
730
- "maintained",
731
- "increasing",
732
- "connected",
733
- "directors",
734
- "participation",
735
- "containing",
736
- "combination",
737
- "amendment",
738
- "guaranteed",
739
- "libraries",
740
- "distributed",
741
- "singapore",
742
- "enterprises",
743
- "convention",
744
- "principal",
745
- "certification",
746
- "previously",
747
- "buildings",
748
- "household",
749
- "batteries",
750
- "positions",
751
- "subscription",
752
- "contemporary",
753
- "panasonic",
754
- "permalink",
755
- "signature",
756
- "provision",
757
- "certainly",
758
- "newspaper",
759
- "liability",
760
- "trademark",
761
- "trackback",
762
- "americans",
763
- "promotion",
764
- "conversion",
765
- "reasonable",
766
- "broadband",
767
- "influence",
768
- "importance",
769
- "webmaster",
770
- "prescription",
771
- "specifically",
772
- "represent",
773
- "conservation",
774
- "louisiana",
775
- "javascript",
776
- "marketplace",
777
- "evolution",
778
- "certificates",
779
- "objectives",
780
- "suggested",
781
- "concerned",
782
- "structures",
783
- "encyclopedia",
784
- "continuing",
785
- "interracial",
786
- "competitive",
787
- "suppliers",
788
- "preparation",
789
- "receiving",
790
- "accordance",
791
- "discussed",
792
- "elizabeth",
793
- "reservations",
794
- "playstation",
795
- "instruction",
796
- "annotation",
797
- "differences",
798
- "establish",
799
- "expressed",
800
- "paragraph",
801
- "mathematics",
802
- "compensation",
803
- "conducted",
804
- "percentage",
805
- "mississippi",
806
- "requested",
807
- "connecticut",
808
- "personals",
809
- "immediate",
810
- "agricultural",
811
- "supporting",
812
- "collections",
813
- "participate",
814
- "specialist",
815
- "experienced",
816
- "investigation",
817
- "institution",
818
- "searching",
819
- "proceedings",
820
- "transmission",
821
- "characteristics",
822
- "experiences",
823
- "extremely",
824
- "verzeichnis",
825
- "contracts",
826
- "concerning",
827
- "developers",
828
- "equivalent",
829
- "chemistry",
830
- "neighborhood",
831
- "variables",
832
- "continues",
833
- "curriculum",
834
- "psychology",
835
- "responses",
836
- "circumstances",
837
- "identification",
838
- "appliances",
839
- "elementary",
840
- "unlimited",
841
- "printable",
842
- "enforcement",
843
- "hardcover",
844
- "celebrity",
845
- "chocolate",
846
- "hampshire",
847
- "bluetooth",
848
- "controlled",
849
- "requirement",
850
- "authorities",
851
- "representatives",
852
- "pregnancy",
853
- "biography",
854
- "attractions",
855
- "transactions",
856
- "authorized",
857
- "retirement",
858
- "financing",
859
- "efficiency",
860
- "efficient",
861
- "commitment",
862
- "specialty",
863
- "interviews",
864
- "qualified",
865
- "discovery",
866
- "classified",
867
- "confidence",
868
- "lifestyle",
869
- "consistent",
870
- "clearance",
871
- "connections",
872
- "inventory",
873
- "converter",
874
- "organisation",
875
- "objective",
876
- "indicated",
877
- "securities",
878
- "volunteer",
879
- "democratic",
880
- "switzerland",
881
- "parameter",
882
- "processor",
883
- "dimensions",
884
- "contribute",
885
- "challenges",
886
- "recognition",
887
- "submission",
888
- "encourage",
889
- "regulatory",
890
- "inspection",
891
- "consumers",
892
- "territory",
893
- "transaction",
894
- "manchester",
895
- "contributions",
896
- "continuous",
897
- "resulting",
898
- "cambridge",
899
- "initiative",
900
- "execution",
901
- "disability",
902
- "increases",
903
- "contractor",
904
- "examination",
905
- "indicates",
906
- "committed",
907
- "extensive",
908
- "affordable",
909
- "candidate",
910
- "databases",
911
- "outstanding",
912
- "perspective",
913
- "messenger",
914
- "tournament",
915
- "consideration",
916
- "discounts",
917
- "catalogue",
918
- "publishers",
919
- "caribbean",
920
- "reservation",
921
- "remaining",
922
- "depending",
923
- "expansion",
924
- "purchased",
925
- "performing",
926
- "collected",
927
- "absolutely",
928
- "featuring",
929
- "implement",
930
- "scheduled",
931
- "calculator",
932
- "significantly",
933
- "temporary",
934
- "sufficient",
935
- "awareness",
936
- "vancouver",
937
- "contribution",
938
- "measurement",
939
- "constitution",
940
- "packaging",
941
- "consultation",
942
- "northwest",
943
- "classroom",
944
- "democracy",
945
- "wallpaper",
946
- "merchandise",
947
- "resistance",
948
- "baltimore",
949
- "candidates",
950
- "charlotte",
951
- "biological",
952
- "transition",
953
- "preferences",
954
- "instrument",
955
- "classification",
956
- "physician",
957
- "hollywood",
958
- "wikipedia",
959
- "spiritual",
960
- "photographs",
961
- "relatively",
962
- "satisfaction",
963
- "represents",
964
- "pittsburgh",
965
- "preferred",
966
- "intellectual",
967
- "comfortable",
968
- "interaction",
969
- "listening",
970
- "effectively",
971
- "experimental",
972
- "revolution",
973
- "consolidation",
974
- "landscape",
975
- "dependent",
976
- "mechanical",
977
- "consultants",
978
- "applicant",
979
- "cooperation",
980
- "acquisition",
981
- "implemented",
982
- "directories",
983
- "recognized",
984
- "notification",
985
- "licensing",
986
- "textbooks",
987
- "diversity",
988
- "cleveland",
989
- "investments",
990
- "accessibility",
991
- "sensitive",
992
- "templates",
993
- "completion",
994
- "universities",
995
- "technique",
996
- "contractors",
997
- "subscriptions",
998
- "calculate",
999
- "alexander",
1000
- "broadcast",
1001
- "converted",
1002
- "anniversary",
1003
- "improvements",
1004
- "specification",
1005
- "accessible",
1006
- "accessory",
1007
- "typically",
1008
- "representation",
1009
- "arrangements",
1010
- "conferences",
1011
- "uniprotkb",
1012
- "consumption",
1013
- "birmingham",
1014
- "afternoon",
1015
- "consultant",
1016
- "controller",
1017
- "ownership",
1018
- "committees",
1019
- "legislative",
1020
- "researchers",
1021
- "unsubscribe",
1022
- "molecular",
1023
- "residence",
1024
- "attorneys",
1025
- "operators",
1026
- "sustainable",
1027
- "philippines",
1028
- "statistical",
1029
- "innovation",
1030
- "employers",
1031
- "definitions",
1032
- "elections",
1033
- "stainless",
1034
- "newspapers",
1035
- "hospitals",
1036
- "exception",
1037
- "successfully",
1038
- "indonesia",
1039
- "primarily",
1040
- "capabilities",
1041
- "recommendation",
1042
- "recruitment",
1043
- "organized",
1044
- "improving",
1045
- "expensive",
1046
- "organisations",
1047
- "explained",
1048
- "programmes",
1049
- "expertise",
1050
- "mechanism",
1051
- "jewellery",
1052
- "eventually",
1053
- "agreements",
1054
- "considering",
1055
- "innovative",
1056
- "conclusion",
1057
- "disorders",
1058
- "collaboration",
1059
- "detection",
1060
- "formation",
1061
- "engineers",
1062
- "proposals",
1063
- "moderator",
1064
- "tutorials",
1065
- "settlement",
1066
- "collectables",
1067
- "fantastic",
1068
- "governments",
1069
- "purchasing",
1070
- "appointed",
1071
- "operational",
1072
- "corresponding",
1073
- "descriptions",
1074
- "determination",
1075
- "animation",
1076
- "productions",
1077
- "telecommunications",
1078
- "instructor",
1079
- "approaches",
1080
- "highlights",
1081
- "designers",
1082
- "melbourne",
1083
- "scientists",
1084
- "blackjack",
1085
- "argentina",
1086
- "possibility",
1087
- "commissioner",
1088
- "dangerous",
1089
- "reliability",
1090
- "unfortunately",
1091
- "respectively",
1092
- "volunteers",
1093
- "attachment",
1094
- "appointment",
1095
- "workshops",
1096
- "hurricane",
1097
- "represented",
1098
- "mortgages",
1099
- "responsibilities",
1100
- "carefully",
1101
- "productivity",
1102
- "investors",
1103
- "underground",
1104
- "diagnosis",
1105
- "principle",
1106
- "vacations",
1107
- "calculated",
1108
- "appearance",
1109
- "incorporated",
1110
- "notebooks",
1111
- "algorithm",
1112
- "valentine",
1113
- "involving",
1114
- "investing",
1115
- "christopher",
1116
- "admission",
1117
- "terrorism",
1118
- "parliament",
1119
- "situations",
1120
- "allocated",
1121
- "corrections",
1122
- "structural",
1123
- "municipal",
1124
- "describes",
1125
- "disabilities",
1126
- "substance",
1127
- "prohibited",
1128
- "addressed",
1129
- "simulation",
1130
- "initiatives",
1131
- "concentration",
1132
- "interpretation",
1133
- "bankruptcy",
1134
- "optimization",
1135
- "substances",
1136
- "discovered",
1137
- "restrictions",
1138
- "participating",
1139
- "exhibition",
1140
- "composition",
1141
- "nationwide",
1142
- "definitely",
1143
- "existence",
1144
- "commentary",
1145
- "limousines",
1146
- "developments",
1147
- "immigration",
1148
- "destinations",
1149
- "necessarily",
1150
- "attribute",
1151
- "apparently",
1152
- "surrounding",
1153
- "mountains",
1154
- "popularity",
1155
- "postposted",
1156
- "coordinator",
1157
- "obviously",
1158
- "fundamental",
1159
- "substantial",
1160
- "progressive",
1161
- "championship",
1162
- "sacramento",
1163
- "impossible",
1164
- "depression",
1165
- "testimonials",
1166
- "memorabilia",
1167
- "cartridge",
1168
- "explanation",
1169
- "cincinnati",
1170
- "subsection",
1171
- "electricity",
1172
- "permitted",
1173
- "workplace",
1174
- "confirmed",
1175
- "wallpapers",
1176
- "infection",
1177
- "eligibility",
1178
- "involvement",
1179
- "placement",
1180
- "observations",
1181
- "vbulletin",
1182
- "subsequent",
1183
- "motorcycle",
1184
- "disclosure",
1185
- "establishment",
1186
- "presentations",
1187
- "undergraduate",
1188
- "occupation",
1189
- "donations",
1190
- "associations",
1191
- "citysearch",
1192
- "radiation",
1193
- "seriously",
1194
- "elsewhere",
1195
- "pollution",
1196
- "conservative",
1197
- "guestbook",
1198
- "effectiveness",
1199
- "demonstrate",
1200
- "atmosphere",
1201
- "experiment",
1202
- "purchases",
1203
- "federation",
1204
- "assignment",
1205
- "chemicals",
1206
- "everybody",
1207
- "nashville",
1208
- "counseling",
1209
- "acceptable",
1210
- "satisfied",
1211
- "measurements",
1212
- "milwaukee",
1213
- "medication",
1214
- "warehouse",
1215
- "shareware",
1216
- "violation",
1217
- "configure",
1218
- "stability",
1219
- "southwest",
1220
- "institutional",
1221
- "expectations",
1222
- "independence",
1223
- "metabolism",
1224
- "personally",
1225
- "excellence",
1226
- "somewhere",
1227
- "attributes",
1228
- "recognize",
1229
- "screening",
1230
- "thumbnail",
1231
- "forgotten",
1232
- "intelligent",
1233
- "edinburgh",
1234
- "obligation",
1235
- "regardless",
1236
- "restricted",
1237
- "republican",
1238
- "merchants",
1239
- "attendance",
1240
- "arguments",
1241
- "amsterdam",
1242
- "adventures",
1243
- "announcement",
1244
- "appreciate",
1245
- "regularly",
1246
- "mechanisms",
1247
- "customize",
1248
- "tradition",
1249
- "indicators",
1250
- "emissions",
1251
- "physicians",
1252
- "complaint",
1253
- "experiments",
1254
- "afghanistan",
1255
- "scholarship",
1256
- "governance",
1257
- "supplements",
1258
- "camcorder",
1259
- "implementing",
1260
- "ourselves",
1261
- "conversation",
1262
- "capability",
1263
- "producing",
1264
- "precision",
1265
- "contributed",
1266
- "reproduction",
1267
- "ingredients",
1268
- "franchise",
1269
- "complaints",
1270
- "promotions",
1271
- "rehabilitation",
1272
- "maintaining",
1273
- "environments",
1274
- "reception",
1275
- "correctly",
1276
- "consequences",
1277
- "geography",
1278
- "appearing",
1279
- "integrity",
1280
- "discrimination",
1281
- "processed",
1282
- "implications",
1283
- "functionality",
1284
- "intermediate",
1285
- "emotional",
1286
- "platforms",
1287
- "overnight",
1288
- "geographic",
1289
- "preliminary",
1290
- "districts",
1291
- "introduce",
1292
- "promotional",
1293
- "chevrolet",
1294
- "specialists",
1295
- "generator",
1296
- "suspension",
1297
- "correction",
1298
- "authentication",
1299
- "communicate",
1300
- "supplement",
1301
- "showtimes",
1302
- "promoting",
1303
- "machinery",
1304
- "bandwidth",
1305
- "probability",
1306
- "dimension",
1307
- "schedules",
1308
- "admissions",
1309
- "quarterly",
1310
- "illustrated",
1311
- "continental",
1312
- "alternate",
1313
- "achievement",
1314
- "limitations",
1315
- "automated",
1316
- "passenger",
1317
- "convenient",
1318
- "orientation",
1319
- "childhood",
1320
- "flexibility",
1321
- "jurisdiction",
1322
- "displaying",
1323
- "encouraged",
1324
- "cartridges",
1325
- "declaration",
1326
- "automation",
1327
- "advantages",
1328
- "preparing",
1329
- "recipient",
1330
- "extensions",
1331
- "athletics",
1332
- "southeast",
1333
- "alternatives",
1334
- "determining",
1335
- "personalized",
1336
- "conditioning",
1337
- "partnerships",
1338
- "destruction",
1339
- "increasingly",
1340
- "migration",
1341
- "basically",
1342
- "conventional",
1343
- "applicants",
1344
- "occupational",
1345
- "adjustment",
1346
- "treatments",
1347
- "camcorders",
1348
- "difficulty",
1349
- "collective",
1350
- "coalition",
1351
- "enrollment",
1352
- "producers",
1353
- "collector",
1354
- "interfaces",
1355
- "advertisers",
1356
- "representing",
1357
- "observation",
1358
- "restoration",
1359
- "convenience",
1360
- "returning",
1361
- "opposition",
1362
- "container",
1363
- "defendant",
1364
- "confirmation",
1365
- "supervisor",
1366
- "peripherals",
1367
- "bestsellers",
1368
- "departure",
1369
- "minneapolis",
1370
- "interactions",
1371
- "intervention",
1372
- "attraction",
1373
- "modification",
1374
- "customized",
1375
- "understood",
1376
- "assurance",
1377
- "happening",
1378
- "amendments",
1379
- "metropolitan",
1380
- "compilation",
1381
- "verification",
1382
- "attractive",
1383
- "recordings",
1384
- "jefferson",
1385
- "gardening",
1386
- "obligations",
1387
- "orchestra",
1388
- "polyphonic",
1389
- "outsourcing",
1390
- "adjustable",
1391
- "allocation",
1392
- "discipline",
1393
- "demonstrated",
1394
- "identifying",
1395
- "alphabetical",
1396
- "dispatched",
1397
- "installing",
1398
- "voluntary",
1399
- "photographer",
1400
- "messaging",
1401
- "constructed",
1402
- "additions",
1403
- "requiring",
1404
- "engagement",
1405
- "refinance",
1406
- "calendars",
1407
- "arrangement",
1408
- "conclusions",
1409
- "bibliography",
1410
- "compatibility",
1411
- "furthermore",
1412
- "cooperative",
1413
- "measuring",
1414
- "jacksonville",
1415
- "headquarters",
1416
- "transfers",
1417
- "transformation",
1418
- "attachments",
1419
- "administrators",
1420
- "personality",
1421
- "facilitate",
1422
- "subscriber",
1423
- "priorities",
1424
- "bookstore",
1425
- "parenting",
1426
- "incredible",
1427
- "commonwealth",
1428
- "pharmaceutical",
1429
- "manhattan",
1430
- "workforce",
1431
- "organizational",
1432
- "portuguese",
1433
- "everywhere",
1434
- "discharge",
1435
- "halloween",
1436
- "hazardous",
1437
- "methodology",
1438
- "housewares",
1439
- "reputation",
1440
- "resistant",
1441
- "democrats",
1442
- "recycling",
1443
- "qualifications",
1444
- "slideshow",
1445
- "variation",
1446
- "transferred",
1447
- "photograph",
1448
- "distributor",
1449
- "underlying",
1450
- "wrestling",
1451
- "photoshop",
1452
- "gathering",
1453
- "projection",
1454
- "mathematical",
1455
- "specialized",
1456
- "diagnostic",
1457
- "indianapolis",
1458
- "corporations",
1459
- "criticism",
1460
- "automobile",
1461
- "confidential",
1462
- "statutory",
1463
- "accommodations",
1464
- "northeast",
1465
- "downloaded",
1466
- "paintings",
1467
- "injection",
1468
- "yorkshire",
1469
- "populations",
1470
- "protective",
1471
- "initially",
1472
- "indicator",
1473
- "eliminate",
1474
- "sunglasses",
1475
- "preference",
1476
- "threshold",
1477
- "venezuela",
1478
- "exploration",
1479
- "sequences",
1480
- "astronomy",
1481
- "translate",
1482
- "announces",
1483
- "compression",
1484
- "establishing",
1485
- "constitutional",
1486
- "perfectly",
1487
- "instantly",
1488
- "litigation",
1489
- "submissions",
1490
- "broadcasting",
1491
- "horizontal",
1492
- "terrorist",
1493
- "informational",
1494
- "ecommerce",
1495
- "suffering",
1496
- "prospective",
1497
- "ultimately",
1498
- "artificial",
1499
- "spectacular",
1500
- "coordination",
1501
- "connector",
1502
- "affiliated",
1503
- "activation",
1504
- "naturally",
1505
- "subscribers",
1506
- "mitsubishi",
1507
- "underwear",
1508
- "potentially",
1509
- "constraints",
1510
- "inclusive",
1511
- "dimensional",
1512
- "considerable",
1513
- "selecting",
1514
- "processors",
1515
- "pantyhose",
1516
- "difficulties",
1517
- "complexity",
1518
- "constantly",
1519
- "barcelona",
1520
- "presidential",
1521
- "documentary",
1522
- "territories",
1523
- "palestinian",
1524
- "legislature",
1525
- "hospitality",
1526
- "procurement",
1527
- "theoretical",
1528
- "exercises",
1529
- "surveillance",
1530
- "protocols",
1531
- "highlight",
1532
- "substitute",
1533
- "inclusion",
1534
- "hopefully",
1535
- "brilliant",
1536
- "evaluated",
1537
- "assignments",
1538
- "termination",
1539
- "households",
1540
- "authentic",
1541
- "montgomery",
1542
- "architectural",
1543
- "louisville",
1544
- "macintosh",
1545
- "movements",
1546
- "amenities",
1547
- "virtually",
1548
- "authorization",
1549
- "projector",
1550
- "comparative",
1551
- "psychological",
1552
- "surprised",
1553
- "genealogy",
1554
- "expenditure",
1555
- "liverpool",
1556
- "connectivity",
1557
- "algorithms",
1558
- "similarly",
1559
- "collaborative",
1560
- "excluding",
1561
- "commander",
1562
- "suggestion",
1563
- "spotlight",
1564
- "investigate",
1565
- "connecting",
1566
- "logistics",
1567
- "proportion",
1568
- "significance",
1569
- "symposium",
1570
- "essentials",
1571
- "protecting",
1572
- "transmitted",
1573
- "screenshots",
1574
- "intensive",
1575
- "switching",
1576
- "correspondence",
1577
- "supervision",
1578
- "expenditures",
1579
- "separation",
1580
- "testimony",
1581
- "celebrities",
1582
- "mandatory",
1583
- "boundaries",
1584
- "syndication",
1585
- "celebration",
1586
- "filtering",
1587
- "luxembourg",
1588
- "offensive",
1589
- "deployment",
1590
- "colleagues",
1591
- "separated",
1592
- "directive",
1593
- "governing",
1594
- "retailers",
1595
- "occasionally",
1596
- "attending",
1597
- "recruiting",
1598
- "instructional",
1599
- "traveling",
1600
- "permissions",
1601
- "biotechnology",
1602
- "prescribed",
1603
- "catherine",
1604
- "reproduced",
1605
- "calculation",
1606
- "consolidated",
1607
- "occasions",
1608
- "equations",
1609
- "exceptional",
1610
- "respondents",
1611
- "considerations",
1612
- "queensland",
1613
- "musicians",
1614
- "composite",
1615
- "unavailable",
1616
- "essentially",
1617
- "designing",
1618
- "assessments",
1619
- "brunswick",
1620
- "sensitivity",
1621
- "preservation",
1622
- "streaming",
1623
- "intensity",
1624
- "technological",
1625
- "syndicate",
1626
- "antivirus",
1627
- "addressing",
1628
- "discounted",
1629
- "bangladesh",
1630
- "constitute",
1631
- "concluded",
1632
- "desperate",
1633
- "demonstration",
1634
- "governmental",
1635
- "manufactured",
1636
- "graduation",
1637
- "variations",
1638
- "addiction",
1639
- "springfield",
1640
- "synthesis",
1641
- "undefined",
1642
- "unemployment",
1643
- "enhancement",
1644
- "newcastle",
1645
- "performances",
1646
- "societies",
1647
- "brazilian",
1648
- "identical",
1649
- "petroleum",
1650
- "norwegian",
1651
- "retention",
1652
- "exchanges",
1653
- "soundtrack",
1654
- "wondering",
1655
- "profession",
1656
- "separately",
1657
- "physiology",
1658
- "collecting",
1659
- "participant",
1660
- "scholarships",
1661
- "recreational",
1662
- "dominican",
1663
- "friendship",
1664
- "expanding",
1665
- "provincial",
1666
- "investigations",
1667
- "medications",
1668
- "rochester",
1669
- "advertiser",
1670
- "encryption",
1671
- "downloadable",
1672
- "sophisticated",
1673
- "possession",
1674
- "laboratories",
1675
- "vegetables",
1676
- "thumbnails",
1677
- "stockings",
1678
- "respondent",
1679
- "destroyed",
1680
- "manufacture",
1681
- "wordpress",
1682
- "vulnerability",
1683
- "accountability",
1684
- "celebrate",
1685
- "accredited",
1686
- "appliance",
1687
- "compressed",
1688
- "scheduling",
1689
- "perspectives",
1690
- "mortality",
1691
- "christians",
1692
- "therapeutic",
1693
- "impressive",
1694
- "accordingly",
1695
- "architect",
1696
- "challenging",
1697
- "microwave",
1698
- "accidents",
1699
- "relocation",
1700
- "contributors",
1701
- "violations",
1702
- "temperatures",
1703
- "competitions",
1704
- "discretion",
1705
- "cosmetics",
1706
- "repository",
1707
- "concentrations",
1708
- "christianity",
1709
- "negotiations",
1710
- "realistic",
1711
- "generating",
1712
- "christina",
1713
- "congressional",
1714
- "photographic",
1715
- "modifications",
1716
- "millennium",
1717
- "achieving",
1718
- "fisheries",
1719
- "exceptions",
1720
- "reactions",
1721
- "macromedia",
1722
- "companion",
1723
- "divisions",
1724
- "additionally",
1725
- "fellowship",
1726
- "victorian",
1727
- "copyrights",
1728
- "lithuania",
1729
- "mastercard",
1730
- "chronicles",
1731
- "obtaining",
1732
- "distribute",
1733
- "decorative",
1734
- "enlargement",
1735
- "campaigns",
1736
- "conjunction",
1737
- "instances",
1738
- "indigenous",
1739
- "validation",
1740
- "corruption",
1741
- "incentives",
1742
- "cholesterol",
1743
- "differential",
1744
- "scientist",
1745
- "starsmerchant",
1746
- "arthritis",
1747
- "nevertheless",
1748
- "practitioners",
1749
- "transcript",
1750
- "inflation",
1751
- "compounds",
1752
- "contracting",
1753
- "structured",
1754
- "reasonably",
1755
- "graduates",
1756
- "recommends",
1757
- "controlling",
1758
- "distributors",
1759
- "arlington",
1760
- "particles",
1761
- "extraordinary",
1762
- "indicating",
1763
- "coordinate",
1764
- "exclusively",
1765
- "limitation",
1766
- "widescreen",
1767
- "illustration",
1768
- "construct",
1769
- "inquiries",
1770
- "inspiration",
1771
- "affecting",
1772
- "downloading",
1773
- "aggregate",
1774
- "forecasts",
1775
- "complicated",
1776
- "shopzilla",
1777
- "decorating",
1778
- "expressions",
1779
- "shakespeare",
1780
- "connectors",
1781
- "conflicts",
1782
- "travelers",
1783
- "offerings",
1784
- "incorrect",
1785
- "furnishings",
1786
- "guatemala",
1787
- "perception",
1788
- "renaissance",
1789
- "pathology",
1790
- "ordinance",
1791
- "photographers",
1792
- "infections",
1793
- "configured",
1794
- "festivals",
1795
- "possibilities",
1796
- "contributing",
1797
- "analytical",
1798
- "circulation",
1799
- "assumption",
1800
- "jerusalem",
1801
- "transexuales",
1802
- "invention",
1803
- "technician",
1804
- "executives",
1805
- "enquiries",
1806
- "cognitive",
1807
- "exploring",
1808
- "registrar",
1809
- "supporters",
1810
- "withdrawal",
1811
- "predicted",
1812
- "saskatchewan",
1813
- "cancellation",
1814
- "ministers",
1815
- "veterinary",
1816
- "prostores",
1817
- "relevance",
1818
- "incentive",
1819
- "butterfly",
1820
- "mechanics",
1821
- "numerical",
1822
- "reflection",
1823
- "accompanied",
1824
- "invitation",
1825
- "princeton",
1826
- "spirituality",
1827
- "meanwhile",
1828
- "proprietary",
1829
- "childrens",
1830
- "thumbzilla",
1831
- "porcelain",
1832
- "pichunter",
1833
- "translated",
1834
- "columnists",
1835
- "consensus",
1836
- "delivering",
1837
- "journalism",
1838
- "intention",
1839
- "undertaken",
1840
- "statewide",
1841
- "semiconductor",
1842
- "illustrations",
1843
- "happiness",
1844
- "substantially",
1845
- "identifier",
1846
- "calculations",
1847
- "conducting",
1848
- "accomplished",
1849
- "calculators",
1850
- "impression",
1851
- "correlation",
1852
- "fragrance",
1853
- "neighbors",
1854
- "transparent",
1855
- "charleston",
1856
- "champions",
1857
- "selections",
1858
- "projectors",
1859
- "inappropriate",
1860
- "comparing",
1861
- "vocational",
1862
- "pharmacies",
1863
- "introducing",
1864
- "appreciated",
1865
- "albuquerque",
1866
- "distinguished",
1867
- "projected",
1868
- "assumptions",
1869
- "shareholders",
1870
- "developmental",
1871
- "regulated",
1872
- "anticipated",
1873
- "completing",
1874
- "comparable",
1875
- "confusion",
1876
- "copyrighted",
1877
- "warranties",
1878
- "documented",
1879
- "paperbacks",
1880
- "keyboards",
1881
- "vulnerable",
1882
- "reflected",
1883
- "respiratory",
1884
- "notifications",
1885
- "transexual",
1886
- "mainstream",
1887
- "evaluating",
1888
- "subcommittee",
1889
- "maternity",
1890
- "journalists",
1891
- "foundations",
1892
- "volleyball",
1893
- "liabilities",
1894
- "decreased",
1895
- "tolerance",
1896
- "creativity",
1897
- "describing",
1898
- "lightning",
1899
- "quotations",
1900
- "inspector",
1901
- "bookmarks",
1902
- "behavioral",
1903
- "riverside",
1904
- "bathrooms",
1905
- "abilities",
1906
- "initiated",
1907
- "nonprofit",
1908
- "lancaster",
1909
- "suspended",
1910
- "containers",
1911
- "attitudes",
1912
- "simultaneously",
1913
- "integrate",
1914
- "sociology",
1915
- "screenshot",
1916
- "exhibitions",
1917
- "confident",
1918
- "retrieved",
1919
- "officially",
1920
- "consortium",
1921
- "recipients",
1922
- "delicious",
1923
- "traditions",
1924
- "periodically",
1925
- "hungarian",
1926
- "referring",
1927
- "transform",
1928
- "educators",
1929
- "vegetable",
1930
- "humanities",
1931
- "independently",
1932
- "alignment",
1933
- "henderson",
1934
- "britannica",
1935
- "competitors",
1936
- "visibility",
1937
- "consciousness",
1938
- "encounter",
1939
- "resolutions",
1940
- "accessing",
1941
- "attempted",
1942
- "witnesses",
1943
- "administered",
1944
- "strengthen",
1945
- "frederick",
1946
- "aggressive",
1947
- "advertisements",
1948
- "sublimedirectory",
1949
- "disturbed",
1950
- "determines",
1951
- "sculpture",
1952
- "motivation",
1953
- "pharmacology",
1954
- "passengers",
1955
- "quantities",
1956
- "petersburg",
1957
- "consistently",
1958
- "powerpoint",
1959
- "obituaries",
1960
- "punishment",
1961
- "appreciation",
1962
- "subsequently",
1963
- "providence",
1964
- "restriction",
1965
- "incorporate",
1966
- "backgrounds",
1967
- "treasurer",
1968
- "lightweight",
1969
- "transcription",
1970
- "complications",
1971
- "scripting",
1972
- "remembered",
1973
- "synthetic",
1974
- "testament",
1975
- "specifics",
1976
- "partially",
1977
- "wilderness",
1978
- "generations",
1979
- "tournaments",
1980
- "sponsorship",
1981
- "headphones",
1982
- "proceeding",
1983
- "volkswagen",
1984
- "uncertainty",
1985
- "breakdown",
1986
- "reconstruction",
1987
- "subsidiary",
1988
- "strengths",
1989
- "encouraging",
1990
- "furnished",
1991
- "terrorists",
1992
- "comparisons",
1993
- "beneficial",
1994
- "distributions",
1995
- "viewpicture",
1996
- "threatened",
1997
- "republicans",
1998
- "discusses",
1999
- "responded",
2000
- "abstracts",
2001
- "prediction",
2002
- "pharmaceuticals",
2003
- "thesaurus",
2004
- "individually",
2005
- "battlefield",
2006
- "literally",
2007
- "ecological",
2008
- "appraisal",
2009
- "consisting",
2010
- "submitting",
2011
- "citations",
2012
- "geographical",
2013
- "mozambique",
2014
- "disclaimers",
2015
- "championships",
2016
- "sheffield",
2017
- "finishing",
2018
- "wellington",
2019
- "prospects",
2020
- "bulgarian",
2021
- "aboriginal",
2022
- "remarkable",
2023
- "preventing",
2024
- "productive",
2025
- "boulevard",
2026
- "compliant",
2027
- "penalties",
2028
- "imagination",
2029
- "refurbished",
2030
- "activated",
2031
- "conferencing",
2032
- "armstrong",
2033
- "politicians",
2034
- "trackbacks",
2035
- "accommodate",
2036
- "christine",
2037
- "accepting",
2038
- "precipitation",
2039
- "isolation",
2040
- "sustained",
2041
- "approximate",
2042
- "programmer",
2043
- "greetings",
2044
- "inherited",
2045
- "incomplete",
2046
- "chronicle",
2047
- "legitimate",
2048
- "biographies",
2049
- "investigator",
2050
- "plaintiff",
2051
- "prisoners",
2052
- "mediterranean",
2053
- "nightlife",
2054
- "architects",
2055
- "entrepreneur",
2056
- "freelance",
2057
- "excessive",
2058
- "screensaver",
2059
- "valuation",
2060
- "unexpected",
2061
- "cigarette",
2062
- "characteristic",
2063
- "metallica",
2064
- "consequently",
2065
- "appointments",
2066
- "narrative",
2067
- "academics",
2068
- "quantitative",
2069
- "screensavers",
2070
- "subdivision",
2071
- "distinction",
2072
- "livestock",
2073
- "exemption",
2074
- "sustainability",
2075
- "formatting",
2076
- "nutritional",
2077
- "nicaragua",
2078
- "affiliation",
2079
- "relatives",
2080
- "satisfactory",
2081
- "revolutionary",
2082
- "bracelets",
2083
- "telephony",
2084
- "breathing",
2085
- "thickness",
2086
- "adjustments",
2087
- "graphical",
2088
- "discussing",
2089
- "aerospace",
2090
- "meaningful",
2091
- "maintains",
2092
- "shortcuts",
2093
- "voyeurweb",
2094
- "extending",
2095
- "specifies",
2096
- "accreditation",
2097
- "blackberry",
2098
- "meditation",
2099
- "microphone",
2100
- "macedonia",
2101
- "combining",
2102
- "instrumental",
2103
- "organizing",
2104
- "moderators",
2105
- "kazakhstan",
2106
- "standings",
2107
- "partition",
2108
- "invisible",
2109
- "translations",
2110
- "commodity",
2111
- "kilometers",
2112
- "thanksgiving",
2113
- "guarantees",
2114
- "indication",
2115
- "congratulations",
2116
- "cigarettes",
2117
- "controllers",
2118
- "consultancy",
2119
- "conventions",
2120
- "coordinates",
2121
- "responding",
2122
- "physically",
2123
- "stakeholders",
2124
- "hydrocodone",
2125
- "consecutive",
2126
- "attempting",
2127
- "representations",
2128
- "competing",
2129
- "peninsula",
2130
- "accurately",
2131
- "considers",
2132
- "ministries",
2133
- "vacancies",
2134
- "parliamentary",
2135
- "acknowledge",
2136
- "thoroughly",
2137
- "nottingham",
2138
- "identifies",
2139
- "questionnaire",
2140
- "qualification",
2141
- "modelling",
2142
- "miniature",
2143
- "interstate",
2144
- "consequence",
2145
- "systematic",
2146
- "perceived",
2147
- "madagascar",
2148
- "presenting",
2149
- "troubleshooting",
2150
- "uzbekistan",
2151
- "centuries",
2152
- "magnitude",
2153
- "richardson",
2154
- "fragrances",
2155
- "vocabulary",
2156
- "earthquake",
2157
- "fundraising",
2158
- "geological",
2159
- "assessing",
2160
- "introduces",
2161
- "webmasters",
2162
- "computational",
2163
- "acdbentity",
2164
- "participated",
2165
- "handhelds",
2166
- "answering",
2167
- "impressed",
2168
- "conspiracy",
2169
- "organizer",
2170
- "combinations",
2171
- "preceding",
2172
- "cumulative",
2173
- "amplifier",
2174
- "arbitrary",
2175
- "prominent",
2176
- "lexington",
2177
- "contacted",
2178
- "recorders",
2179
- "occasional",
2180
- "innovations",
2181
- "postcards",
2182
- "reviewing",
2183
- "explicitly",
2184
- "transsexual",
2185
- "citizenship",
2186
- "informative",
2187
- "girlfriend",
2188
- "bloomberg",
2189
- "hierarchy",
2190
- "influenced",
2191
- "abandoned",
2192
- "complement",
2193
- "mauritius",
2194
- "checklist",
2195
- "requesting",
2196
- "lauderdale",
2197
- "scenarios",
2198
- "extraction",
2199
- "elevation",
2200
- "utilization",
2201
- "beverages",
2202
- "calibration",
2203
- "efficiently",
2204
- "entertaining",
2205
- "prerequisite",
2206
- "hypothesis",
2207
- "medicines",
2208
- "regression",
2209
- "enhancements",
2210
- "renewable",
2211
- "intersection",
2212
- "passwords",
2213
- "consistency",
2214
- "collectors",
2215
- "azerbaijan",
2216
- "astrology",
2217
- "occurring",
2218
- "supplemental",
2219
- "travelling",
2220
- "induction",
2221
- "precisely",
2222
- "spreading",
2223
- "provinces",
2224
- "widespread",
2225
- "incidence",
2226
- "incidents",
2227
- "enhancing",
2228
- "interference",
2229
- "palestine",
2230
- "listprice",
2231
- "atmospheric",
2232
- "knowledgestorm",
2233
- "referenced",
2234
- "publicity",
2235
- "proposition",
2236
- "allowance",
2237
- "designation",
2238
- "duplicate",
2239
- "criterion",
2240
- "civilization",
2241
- "vietnamese",
2242
- "tremendous",
2243
- "corrected",
2244
- "encountered",
2245
- "internationally",
2246
- "surrounded",
2247
- "creatures",
2248
- "commented",
2249
- "accomplish",
2250
- "vegetarian",
2251
- "newfoundland",
2252
- "investigated",
2253
- "ambassador",
2254
- "stephanie",
2255
- "contacting",
2256
- "vegetation",
2257
- "findarticles",
2258
- "specially",
2259
- "infectious",
2260
- "continuity",
2261
- "phenomenon",
2262
- "conscious",
2263
- "referrals",
2264
- "differently",
2265
- "integrating",
2266
- "revisions",
2267
- "reasoning",
2268
- "charitable",
2269
- "annotated",
2270
- "convinced",
2271
- "burlington",
2272
- "replacing",
2273
- "researcher",
2274
- "watershed",
2275
- "occupations",
2276
- "acknowledged",
2277
- "equilibrium",
2278
- "characterized",
2279
- "privilege",
2280
- "qualifying",
2281
- "estimation",
2282
- "pediatric",
2283
- "techrepublic",
2284
- "institutes",
2285
- "brochures",
2286
- "traveller",
2287
- "appropriations",
2288
- "suspected",
2289
- "benchmark",
2290
- "beginners",
2291
- "instructors",
2292
- "highlighted",
2293
- "stationery",
2294
- "unauthorized",
2295
- "competent",
2296
- "contributor",
2297
- "demonstrates",
2298
- "gradually",
2299
- "desirable",
2300
- "journalist",
2301
- "afterwards",
2302
- "religions",
2303
- "explosion",
2304
- "signatures",
2305
- "disciplines",
2306
- "daughters",
2307
- "conversations",
2308
- "simplified",
2309
- "motherboard",
2310
- "bibliographic",
2311
- "champagne",
2312
- "deviation",
2313
- "superintendent",
2314
- "housewives",
2315
- "influences",
2316
- "inspections",
2317
- "irrigation",
2318
- "hydraulic",
2319
- "robertson",
2320
- "penetration",
2321
- "conviction",
2322
- "omissions",
2323
- "retrieval",
2324
- "qualities",
2325
- "prototype",
2326
- "importantly",
2327
- "apparatus",
2328
- "explaining",
2329
- "nomination",
2330
- "empirical",
2331
- "dependence",
2332
- "sexuality",
2333
- "polyester",
2334
- "commitments",
2335
- "suggesting",
2336
- "remainder",
2337
- "privileges",
2338
- "televisions",
2339
- "specializing",
2340
- "commodities",
2341
- "motorcycles",
2342
- "concentrate",
2343
- "reproductive",
2344
- "molecules",
2345
- "refrigerator",
2346
- "intervals",
2347
- "sentences",
2348
- "exclusion",
2349
- "workstation",
2350
- "holocaust",
2351
- "receivers",
2352
- "disposition",
2353
- "navigator",
2354
- "investigators",
2355
- "marijuana",
2356
- "cathedral",
2357
- "fairfield",
2358
- "fascinating",
2359
- "landscapes",
2360
- "lafayette",
2361
- "computation",
2362
- "cardiovascular",
2363
- "salvation",
2364
- "predictions",
2365
- "accompanying",
2366
- "selective",
2367
- "arbitration",
2368
- "configuring",
2369
- "editorials",
2370
- "sacrifice",
2371
- "removable",
2372
- "convergence",
2373
- "gibraltar",
2374
- "anthropology",
2375
- "malpractice",
2376
- "reporters",
2377
- "necessity",
2378
- "rendering",
2379
- "hepatitis",
2380
- "nationally",
2381
- "waterproof",
2382
- "specialties",
2383
- "humanitarian",
2384
- "invitations",
2385
- "functioning",
2386
- "economies",
2387
- "alexandria",
2388
- "bacterial",
2389
- "undertake",
2390
- "continuously",
2391
- "achievements",
2392
- "convertible",
2393
- "secretariat",
2394
- "paragraphs",
2395
- "adolescent",
2396
- "nominations",
2397
- "cancelled",
2398
- "introductory",
2399
- "reservoir",
2400
- "occurrence",
2401
- "worcester",
2402
- "demographic",
2403
- "disciplinary",
2404
- "respected",
2405
- "portraits",
2406
- "interpreted",
2407
- "evaluations",
2408
- "elimination",
2409
- "hypothetical",
2410
- "immigrants",
2411
- "complimentary",
2412
- "helicopter",
2413
- "performer",
2414
- "commissions",
2415
- "powerseller",
2416
- "graduated",
2417
- "surprising",
2418
- "unnecessary",
2419
- "dramatically",
2420
- "yugoslavia",
2421
- "characterization",
2422
- "likelihood",
2423
- "fundamentals",
2424
- "contamination",
2425
- "endangered",
2426
- "compromise",
2427
- "expiration",
2428
- "namespace",
2429
- "peripheral",
2430
- "negotiation",
2431
- "opponents",
2432
- "nominated",
2433
- "confidentiality",
2434
- "electoral",
2435
- "changelog",
2436
- "alternatively",
2437
- "greensboro",
2438
- "controversial",
2439
- "recovered",
2440
- "upgrading",
2441
- "frontpage",
2442
- "demanding",
2443
- "defensive",
2444
- "forbidden",
2445
- "programmers",
2446
- "monitored",
2447
- "installations",
2448
- "deutschland",
2449
- "practitioner",
2450
- "motivated",
2451
- "smithsonian",
2452
- "examining",
2453
- "revelation",
2454
- "delegation",
2455
- "dictionaries",
2456
- "greenhouse",
2457
- "transparency",
2458
- "currencies",
2459
- "survivors",
2460
- "positioning",
2461
- "descending",
2462
- "temporarily",
2463
- "frequencies",
2464
- "reflections",
2465
- "municipality",
2466
- "detective",
2467
- "experiencing",
2468
- "fireplace",
2469
- "endorsement",
2470
- "psychiatry",
2471
- "persistent",
2472
- "summaries",
2473
- "looksmart",
2474
- "magnificent",
2475
- "colleague",
2476
- "adaptation",
2477
- "paintball",
2478
- "enclosure",
2479
- "supervisors",
2480
- "westminster",
2481
- "distances",
2482
- "absorption",
2483
- "treasures",
2484
- "transcripts",
2485
- "disappointed",
2486
- "continually",
2487
- "communist",
2488
- "collectible",
2489
- "entrepreneurs",
2490
- "creations",
2491
- "acquisitions",
2492
- "biodiversity",
2493
- "excitement",
2494
- "presently",
2495
- "mysterious",
2496
- "librarian",
2497
- "subsidiaries",
2498
- "stockholm",
2499
- "indonesian",
2500
- "therapist",
2501
- "promising",
2502
- "relaxation",
2503
- "thereafter",
2504
- "commissioners",
2505
- "forwarding",
2506
- "nightmare",
2507
- "reductions",
2508
- "southampton",
2509
- "organisms",
2510
- "telescope",
2511
- "portsmouth",
2512
- "advancement",
2513
- "harassment",
2514
- "generators",
2515
- "generates",
2516
- "replication",
2517
- "inexpensive",
2518
- "receptors",
2519
- "interventions",
2520
- "huntington",
2521
- "internship",
2522
- "aluminium",
2523
- "snowboard",
2524
- "beastality",
2525
- "evanescence",
2526
- "coordinated",
2527
- "shipments",
2528
- "antarctica",
2529
- "chancellor",
2530
- "controversy",
2531
- "legendary",
2532
- "beautifully",
2533
- "antibodies",
2534
- "examinations",
2535
- "immunology",
2536
- "departmental",
2537
- "terminology",
2538
- "gentleman",
2539
- "reproduce",
2540
- "convicted",
2541
- "roommates",
2542
- "threatening",
2543
- "spokesman",
2544
- "activists",
2545
- "frankfurt",
2546
- "encourages",
2547
- "assembled",
2548
- "restructuring",
2549
- "terminals",
2550
- "simulations",
2551
- "sufficiently",
2552
- "conditional",
2553
- "crossword",
2554
- "conceptual",
2555
- "liechtenstein",
2556
- "translator",
2557
- "automobiles",
2558
- "continent",
2559
- "longitude",
2560
- "challenged",
2561
- "telecharger",
2562
- "insertion",
2563
- "instrumentation",
2564
- "constraint",
2565
- "groundwater",
2566
- "strengthening",
2567
- "insulation",
2568
- "infringement",
2569
- "subjective",
2570
- "swaziland",
2571
- "varieties",
2572
- "mediawiki",
2573
- "configurations",
2574
- ]
1
+ "use client"
2
+
3
+ /**
4
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ *
9
+ */
10
+ import type { JSX } from "react"
11
+ import { useCallback, useEffect } from "react"
12
+ import { logger } from "../lib/logger"
13
+ import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext"
14
+ import {
15
+ $getSelectionStyleValueForProperty,
16
+ $isAtNodeEnd,
17
+ } from "@lexical/selection"
18
+ import { mergeRegister } from "@lexical/utils"
19
+ import type { BaseSelection, NodeKey, TextNode } from "lexical"
20
+ import {
21
+ $addUpdateTag,
22
+ $createTextNode,
23
+ $getNodeByKey,
24
+ $getSelection,
25
+ $isRangeSelection,
26
+ $isTextNode,
27
+ $setSelection,
28
+ COMMAND_PRIORITY_LOW,
29
+ HISTORY_MERGE_TAG,
30
+ KEY_ARROW_RIGHT_COMMAND,
31
+ KEY_TAB_COMMAND,
32
+ } from "lexical"
33
+
34
+ import {
35
+ $createAutocompleteNode,
36
+ AutocompleteNode,
37
+ } from "../nodes/autocomplete-node"
38
+ import { addSwipeRightListener } from "../utils/swipe"
39
+
40
+ const HISTORY_MERGE = { tag: HISTORY_MERGE_TAG }
41
+
42
+ declare global {
43
+ interface Navigator {
44
+ userAgentData?: {
45
+ mobile: boolean
46
+ }
47
+ }
48
+ }
49
+
50
+ type SearchPromise = {
51
+ dismiss: () => void
52
+ promise: Promise<null | string>
53
+ }
54
+
55
+ export const uuid = Math.random()
56
+ .toString(36)
57
+ .replace(/[^a-z]+/g, "")
58
+ .substring(0, 5)
59
+
60
+ // TODO lookup should be custom
61
+ function $search(selection: null | BaseSelection): [boolean, string] {
62
+ if (!$isRangeSelection(selection) || !selection.isCollapsed()) {
63
+ return [false, ""]
64
+ }
65
+ const node = selection.getNodes()[0]
66
+ const anchor = selection.anchor
67
+ // Check siblings?
68
+ if (!$isTextNode(node) || !node.isSimpleText() || !$isAtNodeEnd(anchor)) {
69
+ return [false, ""]
70
+ }
71
+ const word = []
72
+ const text = node.getTextContent()
73
+ let i = node.getTextContentSize()
74
+ let c
75
+ while (i-- && i >= 0 && (c = text[i]) !== " ") {
76
+ word.push(c)
77
+ }
78
+ if (word.length === 0) {
79
+ return [false, ""]
80
+ }
81
+ return [true, word.reverse().join("")]
82
+ }
83
+
84
+ // TODO query should be custom
85
+ function useQuery(): (searchText: string) => SearchPromise {
86
+ return useCallback((searchText: string) => {
87
+ const server = new AutocompleteServer()
88
+ const response = server.query(searchText)
89
+ return response
90
+ }, [])
91
+ }
92
+
93
+ function formatSuggestionText(suggestion: string): string {
94
+ const userAgentData = window.navigator.userAgentData
95
+ const isMobile =
96
+ userAgentData !== undefined
97
+ ? userAgentData.mobile
98
+ : window.innerWidth <= 800 && window.innerHeight <= 600
99
+
100
+ return `${suggestion} ${isMobile ? "(SWIPE \u2B95)" : "(TAB)"}`
101
+ }
102
+
103
+ export function AutocompletePlugin(): JSX.Element | null {
104
+ const [editor] = useLexicalComposerContext()
105
+ const query = useQuery()
106
+
107
+ useEffect(() => {
108
+ let autocompleteNodeKey: null | NodeKey = null
109
+ let lastMatch: null | string = null
110
+ let lastSuggestion: null | string = null
111
+ let searchPromise: null | SearchPromise = null
112
+ let prevNodeFormat: number = 0
113
+ function $clearSuggestion() {
114
+ const autocompleteNode =
115
+ autocompleteNodeKey !== null ? $getNodeByKey(autocompleteNodeKey) : null
116
+ if (autocompleteNode !== null && autocompleteNode.isAttached()) {
117
+ autocompleteNode.remove()
118
+ autocompleteNodeKey = null
119
+ }
120
+ if (searchPromise !== null) {
121
+ searchPromise.dismiss()
122
+ searchPromise = null
123
+ }
124
+ lastMatch = null
125
+ lastSuggestion = null
126
+ prevNodeFormat = 0
127
+ }
128
+ function updateAsyncSuggestion(
129
+ refSearchPromise: SearchPromise,
130
+ newSuggestion: null | string
131
+ ) {
132
+ if (searchPromise !== refSearchPromise || newSuggestion === null) {
133
+ // Outdated or no suggestion
134
+ return
135
+ }
136
+ editor.update(() => {
137
+ const selection = $getSelection()
138
+ const [hasMatch, match] = $search(selection)
139
+ if (!hasMatch || match !== lastMatch || !$isRangeSelection(selection)) {
140
+ // Outdated
141
+ return
142
+ }
143
+ const fontSize = $getSelectionStyleValueForProperty(
144
+ selection,
145
+ "font-size",
146
+ "16px"
147
+ )
148
+
149
+ const selectionCopy = selection.clone()
150
+ const prevNode = selection.getNodes()[0] as TextNode
151
+ prevNodeFormat = prevNode.getFormat()
152
+ const node = $createAutocompleteNode(
153
+ formatSuggestionText(newSuggestion),
154
+ uuid
155
+ )
156
+ .setFormat(prevNodeFormat)
157
+ .setStyle(`font-size: ${fontSize}`)
158
+ autocompleteNodeKey = node.getKey()
159
+ selection.insertNodes([node])
160
+ $setSelection(selectionCopy)
161
+ lastSuggestion = newSuggestion
162
+ }, HISTORY_MERGE)
163
+ }
164
+
165
+ function $handleAutocompleteNodeTransform(node: AutocompleteNode) {
166
+ const key = node.getKey()
167
+ if (node.__uuid === uuid && key !== autocompleteNodeKey) {
168
+ // Max one Autocomplete node per session
169
+ $clearSuggestion()
170
+ }
171
+ }
172
+ function handleUpdate() {
173
+ editor.update(() => {
174
+ const selection = $getSelection()
175
+ const [hasMatch, match] = $search(selection)
176
+ if (!hasMatch) {
177
+ $clearSuggestion()
178
+ return
179
+ }
180
+ if (match === lastMatch) {
181
+ return
182
+ }
183
+ $clearSuggestion()
184
+ searchPromise = query(match)
185
+ searchPromise.promise
186
+ .then((newSuggestion) => {
187
+ if (searchPromise !== null) {
188
+ updateAsyncSuggestion(searchPromise, newSuggestion)
189
+ }
190
+ })
191
+ .catch((e) => {
192
+ if (e !== "Dismissed") {
193
+ logger.error("[AutocompletePlugin] Error:", e)
194
+ }
195
+ })
196
+ lastMatch = match
197
+ }, HISTORY_MERGE)
198
+ }
199
+ function $handleAutocompleteIntent(): boolean {
200
+ if (lastSuggestion === null || autocompleteNodeKey === null) {
201
+ return false
202
+ }
203
+ const autocompleteNode = $getNodeByKey(autocompleteNodeKey)
204
+ if (autocompleteNode === null) {
205
+ return false
206
+ }
207
+
208
+ const selection = $getSelection()
209
+ if (!$isRangeSelection(selection)) {
210
+ // Outdated
211
+ return false
212
+ }
213
+ const fontSize = $getSelectionStyleValueForProperty(
214
+ selection,
215
+ "font-size",
216
+ "16px"
217
+ )
218
+
219
+ const textNode = $createTextNode(lastSuggestion)
220
+ .setFormat(prevNodeFormat)
221
+ .setStyle(`font-size: ${fontSize}`)
222
+ autocompleteNode.replace(textNode)
223
+ textNode.selectNext()
224
+ $clearSuggestion()
225
+ return true
226
+ }
227
+ function $handleKeypressCommand(e: Event) {
228
+ if ($handleAutocompleteIntent()) {
229
+ e.preventDefault()
230
+ return true
231
+ }
232
+ return false
233
+ }
234
+ function handleSwipeRight(_force: number, e: TouchEvent) {
235
+ editor.update(() => {
236
+ if ($handleAutocompleteIntent()) {
237
+ e.preventDefault()
238
+ } else {
239
+ $addUpdateTag(HISTORY_MERGE.tag)
240
+ }
241
+ })
242
+ }
243
+ function unmountSuggestion() {
244
+ editor.update(() => {
245
+ $clearSuggestion()
246
+ }, HISTORY_MERGE)
247
+ }
248
+
249
+ const rootElem = editor.getRootElement()
250
+
251
+ return mergeRegister(
252
+ editor.registerNodeTransform(
253
+ AutocompleteNode,
254
+ $handleAutocompleteNodeTransform
255
+ ),
256
+ editor.registerUpdateListener(handleUpdate),
257
+ editor.registerCommand(
258
+ KEY_TAB_COMMAND,
259
+ $handleKeypressCommand,
260
+ COMMAND_PRIORITY_LOW
261
+ ),
262
+ editor.registerCommand(
263
+ KEY_ARROW_RIGHT_COMMAND,
264
+ $handleKeypressCommand,
265
+ COMMAND_PRIORITY_LOW
266
+ ),
267
+ ...(rootElem !== null
268
+ ? [addSwipeRightListener(rootElem, handleSwipeRight)]
269
+ : []),
270
+ unmountSuggestion
271
+ )
272
+ }, [editor, query])
273
+
274
+ return null
275
+ }
276
+
277
+ /*
278
+ * Simulate an asynchronous autocomplete server (typical in more common use cases like GMail where
279
+ * the data is not static).
280
+ */
281
+ class AutocompleteServer {
282
+ DATABASE = DICTIONARY
283
+ LATENCY = 200
284
+
285
+ query = (searchText: string): SearchPromise => {
286
+ let isDismissed = false
287
+
288
+ const dismiss = () => {
289
+ isDismissed = true
290
+ }
291
+ const promise: Promise<null | string> = new Promise((resolve, reject) => {
292
+ setTimeout(() => {
293
+ if (isDismissed) {
294
+ // TODO cache result
295
+ return reject("Dismissed")
296
+ }
297
+ const searchTextLength = searchText.length
298
+ if (searchText === "" || searchTextLength < 4) {
299
+ return resolve(null)
300
+ }
301
+ const char0 = searchText.charCodeAt(0)
302
+ const isCapitalized = char0 >= 65 && char0 <= 90
303
+ const caseInsensitiveSearchText = isCapitalized
304
+ ? String.fromCharCode(char0 + 32) + searchText.substring(1)
305
+ : searchText
306
+ const match = this.DATABASE.find(
307
+ (dictionaryWord) =>
308
+ dictionaryWord.startsWith(caseInsensitiveSearchText) ?? null
309
+ )
310
+ if (match === undefined) {
311
+ return resolve(null)
312
+ }
313
+ const matchCapitalized = isCapitalized
314
+ ? String.fromCharCode(match.charCodeAt(0) - 32) + match.substring(1)
315
+ : match
316
+ const autocompleteChunk = matchCapitalized.substring(searchTextLength)
317
+ if (autocompleteChunk === "") {
318
+ return resolve(null)
319
+ }
320
+ return resolve(autocompleteChunk)
321
+ }, this.LATENCY)
322
+ })
323
+
324
+ return {
325
+ dismiss,
326
+ promise,
327
+ }
328
+ }
329
+ }
330
+
331
+ // https://raw.githubusercontent.com/first20hours/google-10000-english/master/google-10000-english-usa-no-swears-long.txt
332
+ const DICTIONARY = [
333
+ "information",
334
+ "available",
335
+ "copyright",
336
+ "university",
337
+ "management",
338
+ "international",
339
+ "development",
340
+ "education",
341
+ "community",
342
+ "technology",
343
+ "following",
344
+ "resources",
345
+ "including",
346
+ "directory",
347
+ "government",
348
+ "department",
349
+ "description",
350
+ "insurance",
351
+ "different",
352
+ "categories",
353
+ "conditions",
354
+ "accessories",
355
+ "september",
356
+ "questions",
357
+ "application",
358
+ "financial",
359
+ "equipment",
360
+ "performance",
361
+ "experience",
362
+ "important",
363
+ "activities",
364
+ "additional",
365
+ "something",
366
+ "professional",
367
+ "committee",
368
+ "washington",
369
+ "california",
370
+ "reference",
371
+ "companies",
372
+ "computers",
373
+ "president",
374
+ "australia",
375
+ "discussion",
376
+ "entertainment",
377
+ "agreement",
378
+ "marketing",
379
+ "association",
380
+ "collection",
381
+ "solutions",
382
+ "electronics",
383
+ "technical",
384
+ "microsoft",
385
+ "conference",
386
+ "environment",
387
+ "statement",
388
+ "downloads",
389
+ "applications",
390
+ "requirements",
391
+ "individual",
392
+ "subscribe",
393
+ "everything",
394
+ "production",
395
+ "commercial",
396
+ "advertising",
397
+ "treatment",
398
+ "newsletter",
399
+ "knowledge",
400
+ "currently",
401
+ "construction",
402
+ "registered",
403
+ "protection",
404
+ "engineering",
405
+ "published",
406
+ "corporate",
407
+ "customers",
408
+ "materials",
409
+ "countries",
410
+ "standards",
411
+ "political",
412
+ "advertise",
413
+ "environmental",
414
+ "availability",
415
+ "employment",
416
+ "commission",
417
+ "administration",
418
+ "institute",
419
+ "sponsored",
420
+ "electronic",
421
+ "condition",
422
+ "effective",
423
+ "organization",
424
+ "selection",
425
+ "corporation",
426
+ "executive",
427
+ "necessary",
428
+ "according",
429
+ "particular",
430
+ "facilities",
431
+ "opportunities",
432
+ "appropriate",
433
+ "statistics",
434
+ "investment",
435
+ "christmas",
436
+ "registration",
437
+ "furniture",
438
+ "wednesday",
439
+ "structure",
440
+ "distribution",
441
+ "industrial",
442
+ "potential",
443
+ "responsible",
444
+ "communications",
445
+ "associated",
446
+ "foundation",
447
+ "documents",
448
+ "communication",
449
+ "independent",
450
+ "operating",
451
+ "developed",
452
+ "telephone",
453
+ "population",
454
+ "navigation",
455
+ "operations",
456
+ "therefore",
457
+ "christian",
458
+ "understand",
459
+ "publications",
460
+ "worldwide",
461
+ "connection",
462
+ "publisher",
463
+ "introduction",
464
+ "properties",
465
+ "accommodation",
466
+ "excellent",
467
+ "opportunity",
468
+ "assessment",
469
+ "especially",
470
+ "interface",
471
+ "operation",
472
+ "restaurants",
473
+ "beautiful",
474
+ "locations",
475
+ "significant",
476
+ "technologies",
477
+ "manufacturer",
478
+ "providing",
479
+ "authority",
480
+ "considered",
481
+ "programme",
482
+ "enterprise",
483
+ "educational",
484
+ "employees",
485
+ "alternative",
486
+ "processing",
487
+ "responsibility",
488
+ "resolution",
489
+ "publication",
490
+ "relations",
491
+ "photography",
492
+ "components",
493
+ "assistance",
494
+ "completed",
495
+ "organizations",
496
+ "otherwise",
497
+ "transportation",
498
+ "disclaimer",
499
+ "membership",
500
+ "recommended",
501
+ "background",
502
+ "character",
503
+ "maintenance",
504
+ "functions",
505
+ "trademarks",
506
+ "phentermine",
507
+ "submitted",
508
+ "television",
509
+ "interested",
510
+ "throughout",
511
+ "established",
512
+ "programming",
513
+ "regarding",
514
+ "instructions",
515
+ "increased",
516
+ "understanding",
517
+ "beginning",
518
+ "associates",
519
+ "instruments",
520
+ "businesses",
521
+ "specified",
522
+ "restaurant",
523
+ "procedures",
524
+ "relationship",
525
+ "traditional",
526
+ "sometimes",
527
+ "themselves",
528
+ "transport",
529
+ "interesting",
530
+ "evaluation",
531
+ "implementation",
532
+ "galleries",
533
+ "references",
534
+ "presented",
535
+ "literature",
536
+ "respective",
537
+ "definition",
538
+ "secretary",
539
+ "networking",
540
+ "australian",
541
+ "magazines",
542
+ "francisco",
543
+ "individuals",
544
+ "guidelines",
545
+ "installation",
546
+ "described",
547
+ "attention",
548
+ "difference",
549
+ "regulations",
550
+ "certificate",
551
+ "directions",
552
+ "documentation",
553
+ "automotive",
554
+ "successful",
555
+ "communities",
556
+ "situation",
557
+ "publishing",
558
+ "emergency",
559
+ "developing",
560
+ "determine",
561
+ "temperature",
562
+ "announcements",
563
+ "historical",
564
+ "ringtones",
565
+ "difficult",
566
+ "scientific",
567
+ "satellite",
568
+ "particularly",
569
+ "functional",
570
+ "monitoring",
571
+ "architecture",
572
+ "recommend",
573
+ "dictionary",
574
+ "accounting",
575
+ "manufacturing",
576
+ "professor",
577
+ "generally",
578
+ "continued",
579
+ "techniques",
580
+ "permission",
581
+ "generation",
582
+ "component",
583
+ "guarantee",
584
+ "processes",
585
+ "interests",
586
+ "paperback",
587
+ "classifieds",
588
+ "supported",
589
+ "competition",
590
+ "providers",
591
+ "characters",
592
+ "thousands",
593
+ "apartments",
594
+ "generated",
595
+ "administrative",
596
+ "practices",
597
+ "reporting",
598
+ "essential",
599
+ "affiliate",
600
+ "immediately",
601
+ "designated",
602
+ "integrated",
603
+ "configuration",
604
+ "comprehensive",
605
+ "universal",
606
+ "presentation",
607
+ "languages",
608
+ "compliance",
609
+ "improvement",
610
+ "pennsylvania",
611
+ "challenge",
612
+ "acceptance",
613
+ "strategies",
614
+ "affiliates",
615
+ "multimedia",
616
+ "certified",
617
+ "computing",
618
+ "interactive",
619
+ "procedure",
620
+ "leadership",
621
+ "religious",
622
+ "breakfast",
623
+ "developer",
624
+ "approximately",
625
+ "recommendations",
626
+ "comparison",
627
+ "automatically",
628
+ "minnesota",
629
+ "adventure",
630
+ "institutions",
631
+ "assistant",
632
+ "advertisement",
633
+ "headlines",
634
+ "yesterday",
635
+ "determined",
636
+ "wholesale",
637
+ "extension",
638
+ "statements",
639
+ "completely",
640
+ "electrical",
641
+ "applicable",
642
+ "manufacturers",
643
+ "classical",
644
+ "dedicated",
645
+ "direction",
646
+ "basketball",
647
+ "wisconsin",
648
+ "personnel",
649
+ "identified",
650
+ "professionals",
651
+ "advantage",
652
+ "newsletters",
653
+ "estimated",
654
+ "anonymous",
655
+ "miscellaneous",
656
+ "integration",
657
+ "interview",
658
+ "framework",
659
+ "installed",
660
+ "massachusetts",
661
+ "associate",
662
+ "frequently",
663
+ "discussions",
664
+ "laboratory",
665
+ "destination",
666
+ "intelligence",
667
+ "specifications",
668
+ "tripadvisor",
669
+ "residential",
670
+ "decisions",
671
+ "industries",
672
+ "partnership",
673
+ "editorial",
674
+ "expression",
675
+ "provisions",
676
+ "principles",
677
+ "suggestions",
678
+ "replacement",
679
+ "strategic",
680
+ "economics",
681
+ "compatible",
682
+ "apartment",
683
+ "netherlands",
684
+ "consulting",
685
+ "recreation",
686
+ "participants",
687
+ "favorites",
688
+ "translation",
689
+ "estimates",
690
+ "protected",
691
+ "philadelphia",
692
+ "officials",
693
+ "contained",
694
+ "legislation",
695
+ "parameters",
696
+ "relationships",
697
+ "tennessee",
698
+ "representative",
699
+ "frequency",
700
+ "introduced",
701
+ "departments",
702
+ "residents",
703
+ "displayed",
704
+ "performed",
705
+ "administrator",
706
+ "addresses",
707
+ "permanent",
708
+ "agriculture",
709
+ "constitutes",
710
+ "portfolio",
711
+ "practical",
712
+ "delivered",
713
+ "collectibles",
714
+ "infrastructure",
715
+ "exclusive",
716
+ "originally",
717
+ "utilities",
718
+ "philosophy",
719
+ "regulation",
720
+ "reduction",
721
+ "nutrition",
722
+ "recording",
723
+ "secondary",
724
+ "wonderful",
725
+ "announced",
726
+ "prevention",
727
+ "mentioned",
728
+ "automatic",
729
+ "healthcare",
730
+ "maintained",
731
+ "increasing",
732
+ "connected",
733
+ "directors",
734
+ "participation",
735
+ "containing",
736
+ "combination",
737
+ "amendment",
738
+ "guaranteed",
739
+ "libraries",
740
+ "distributed",
741
+ "singapore",
742
+ "enterprises",
743
+ "convention",
744
+ "principal",
745
+ "certification",
746
+ "previously",
747
+ "buildings",
748
+ "household",
749
+ "batteries",
750
+ "positions",
751
+ "subscription",
752
+ "contemporary",
753
+ "panasonic",
754
+ "permalink",
755
+ "signature",
756
+ "provision",
757
+ "certainly",
758
+ "newspaper",
759
+ "liability",
760
+ "trademark",
761
+ "trackback",
762
+ "americans",
763
+ "promotion",
764
+ "conversion",
765
+ "reasonable",
766
+ "broadband",
767
+ "influence",
768
+ "importance",
769
+ "webmaster",
770
+ "prescription",
771
+ "specifically",
772
+ "represent",
773
+ "conservation",
774
+ "louisiana",
775
+ "javascript",
776
+ "marketplace",
777
+ "evolution",
778
+ "certificates",
779
+ "objectives",
780
+ "suggested",
781
+ "concerned",
782
+ "structures",
783
+ "encyclopedia",
784
+ "continuing",
785
+ "interracial",
786
+ "competitive",
787
+ "suppliers",
788
+ "preparation",
789
+ "receiving",
790
+ "accordance",
791
+ "discussed",
792
+ "elizabeth",
793
+ "reservations",
794
+ "playstation",
795
+ "instruction",
796
+ "annotation",
797
+ "differences",
798
+ "establish",
799
+ "expressed",
800
+ "paragraph",
801
+ "mathematics",
802
+ "compensation",
803
+ "conducted",
804
+ "percentage",
805
+ "mississippi",
806
+ "requested",
807
+ "connecticut",
808
+ "personals",
809
+ "immediate",
810
+ "agricultural",
811
+ "supporting",
812
+ "collections",
813
+ "participate",
814
+ "specialist",
815
+ "experienced",
816
+ "investigation",
817
+ "institution",
818
+ "searching",
819
+ "proceedings",
820
+ "transmission",
821
+ "characteristics",
822
+ "experiences",
823
+ "extremely",
824
+ "verzeichnis",
825
+ "contracts",
826
+ "concerning",
827
+ "developers",
828
+ "equivalent",
829
+ "chemistry",
830
+ "neighborhood",
831
+ "variables",
832
+ "continues",
833
+ "curriculum",
834
+ "psychology",
835
+ "responses",
836
+ "circumstances",
837
+ "identification",
838
+ "appliances",
839
+ "elementary",
840
+ "unlimited",
841
+ "printable",
842
+ "enforcement",
843
+ "hardcover",
844
+ "celebrity",
845
+ "chocolate",
846
+ "hampshire",
847
+ "bluetooth",
848
+ "controlled",
849
+ "requirement",
850
+ "authorities",
851
+ "representatives",
852
+ "pregnancy",
853
+ "biography",
854
+ "attractions",
855
+ "transactions",
856
+ "authorized",
857
+ "retirement",
858
+ "financing",
859
+ "efficiency",
860
+ "efficient",
861
+ "commitment",
862
+ "specialty",
863
+ "interviews",
864
+ "qualified",
865
+ "discovery",
866
+ "classified",
867
+ "confidence",
868
+ "lifestyle",
869
+ "consistent",
870
+ "clearance",
871
+ "connections",
872
+ "inventory",
873
+ "converter",
874
+ "organisation",
875
+ "objective",
876
+ "indicated",
877
+ "securities",
878
+ "volunteer",
879
+ "democratic",
880
+ "switzerland",
881
+ "parameter",
882
+ "processor",
883
+ "dimensions",
884
+ "contribute",
885
+ "challenges",
886
+ "recognition",
887
+ "submission",
888
+ "encourage",
889
+ "regulatory",
890
+ "inspection",
891
+ "consumers",
892
+ "territory",
893
+ "transaction",
894
+ "manchester",
895
+ "contributions",
896
+ "continuous",
897
+ "resulting",
898
+ "cambridge",
899
+ "initiative",
900
+ "execution",
901
+ "disability",
902
+ "increases",
903
+ "contractor",
904
+ "examination",
905
+ "indicates",
906
+ "committed",
907
+ "extensive",
908
+ "affordable",
909
+ "candidate",
910
+ "databases",
911
+ "outstanding",
912
+ "perspective",
913
+ "messenger",
914
+ "tournament",
915
+ "consideration",
916
+ "discounts",
917
+ "catalogue",
918
+ "publishers",
919
+ "caribbean",
920
+ "reservation",
921
+ "remaining",
922
+ "depending",
923
+ "expansion",
924
+ "purchased",
925
+ "performing",
926
+ "collected",
927
+ "absolutely",
928
+ "featuring",
929
+ "implement",
930
+ "scheduled",
931
+ "calculator",
932
+ "significantly",
933
+ "temporary",
934
+ "sufficient",
935
+ "awareness",
936
+ "vancouver",
937
+ "contribution",
938
+ "measurement",
939
+ "constitution",
940
+ "packaging",
941
+ "consultation",
942
+ "northwest",
943
+ "classroom",
944
+ "democracy",
945
+ "wallpaper",
946
+ "merchandise",
947
+ "resistance",
948
+ "baltimore",
949
+ "candidates",
950
+ "charlotte",
951
+ "biological",
952
+ "transition",
953
+ "preferences",
954
+ "instrument",
955
+ "classification",
956
+ "physician",
957
+ "hollywood",
958
+ "wikipedia",
959
+ "spiritual",
960
+ "photographs",
961
+ "relatively",
962
+ "satisfaction",
963
+ "represents",
964
+ "pittsburgh",
965
+ "preferred",
966
+ "intellectual",
967
+ "comfortable",
968
+ "interaction",
969
+ "listening",
970
+ "effectively",
971
+ "experimental",
972
+ "revolution",
973
+ "consolidation",
974
+ "landscape",
975
+ "dependent",
976
+ "mechanical",
977
+ "consultants",
978
+ "applicant",
979
+ "cooperation",
980
+ "acquisition",
981
+ "implemented",
982
+ "directories",
983
+ "recognized",
984
+ "notification",
985
+ "licensing",
986
+ "textbooks",
987
+ "diversity",
988
+ "cleveland",
989
+ "investments",
990
+ "accessibility",
991
+ "sensitive",
992
+ "templates",
993
+ "completion",
994
+ "universities",
995
+ "technique",
996
+ "contractors",
997
+ "subscriptions",
998
+ "calculate",
999
+ "alexander",
1000
+ "broadcast",
1001
+ "converted",
1002
+ "anniversary",
1003
+ "improvements",
1004
+ "specification",
1005
+ "accessible",
1006
+ "accessory",
1007
+ "typically",
1008
+ "representation",
1009
+ "arrangements",
1010
+ "conferences",
1011
+ "uniprotkb",
1012
+ "consumption",
1013
+ "birmingham",
1014
+ "afternoon",
1015
+ "consultant",
1016
+ "controller",
1017
+ "ownership",
1018
+ "committees",
1019
+ "legislative",
1020
+ "researchers",
1021
+ "unsubscribe",
1022
+ "molecular",
1023
+ "residence",
1024
+ "attorneys",
1025
+ "operators",
1026
+ "sustainable",
1027
+ "philippines",
1028
+ "statistical",
1029
+ "innovation",
1030
+ "employers",
1031
+ "definitions",
1032
+ "elections",
1033
+ "stainless",
1034
+ "newspapers",
1035
+ "hospitals",
1036
+ "exception",
1037
+ "successfully",
1038
+ "indonesia",
1039
+ "primarily",
1040
+ "capabilities",
1041
+ "recommendation",
1042
+ "recruitment",
1043
+ "organized",
1044
+ "improving",
1045
+ "expensive",
1046
+ "organisations",
1047
+ "explained",
1048
+ "programmes",
1049
+ "expertise",
1050
+ "mechanism",
1051
+ "jewellery",
1052
+ "eventually",
1053
+ "agreements",
1054
+ "considering",
1055
+ "innovative",
1056
+ "conclusion",
1057
+ "disorders",
1058
+ "collaboration",
1059
+ "detection",
1060
+ "formation",
1061
+ "engineers",
1062
+ "proposals",
1063
+ "moderator",
1064
+ "tutorials",
1065
+ "settlement",
1066
+ "collectables",
1067
+ "fantastic",
1068
+ "governments",
1069
+ "purchasing",
1070
+ "appointed",
1071
+ "operational",
1072
+ "corresponding",
1073
+ "descriptions",
1074
+ "determination",
1075
+ "animation",
1076
+ "productions",
1077
+ "telecommunications",
1078
+ "instructor",
1079
+ "approaches",
1080
+ "highlights",
1081
+ "designers",
1082
+ "melbourne",
1083
+ "scientists",
1084
+ "blackjack",
1085
+ "argentina",
1086
+ "possibility",
1087
+ "commissioner",
1088
+ "dangerous",
1089
+ "reliability",
1090
+ "unfortunately",
1091
+ "respectively",
1092
+ "volunteers",
1093
+ "attachment",
1094
+ "appointment",
1095
+ "workshops",
1096
+ "hurricane",
1097
+ "represented",
1098
+ "mortgages",
1099
+ "responsibilities",
1100
+ "carefully",
1101
+ "productivity",
1102
+ "investors",
1103
+ "underground",
1104
+ "diagnosis",
1105
+ "principle",
1106
+ "vacations",
1107
+ "calculated",
1108
+ "appearance",
1109
+ "incorporated",
1110
+ "notebooks",
1111
+ "algorithm",
1112
+ "valentine",
1113
+ "involving",
1114
+ "investing",
1115
+ "christopher",
1116
+ "admission",
1117
+ "terrorism",
1118
+ "parliament",
1119
+ "situations",
1120
+ "allocated",
1121
+ "corrections",
1122
+ "structural",
1123
+ "municipal",
1124
+ "describes",
1125
+ "disabilities",
1126
+ "substance",
1127
+ "prohibited",
1128
+ "addressed",
1129
+ "simulation",
1130
+ "initiatives",
1131
+ "concentration",
1132
+ "interpretation",
1133
+ "bankruptcy",
1134
+ "optimization",
1135
+ "substances",
1136
+ "discovered",
1137
+ "restrictions",
1138
+ "participating",
1139
+ "exhibition",
1140
+ "composition",
1141
+ "nationwide",
1142
+ "definitely",
1143
+ "existence",
1144
+ "commentary",
1145
+ "limousines",
1146
+ "developments",
1147
+ "immigration",
1148
+ "destinations",
1149
+ "necessarily",
1150
+ "attribute",
1151
+ "apparently",
1152
+ "surrounding",
1153
+ "mountains",
1154
+ "popularity",
1155
+ "postposted",
1156
+ "coordinator",
1157
+ "obviously",
1158
+ "fundamental",
1159
+ "substantial",
1160
+ "progressive",
1161
+ "championship",
1162
+ "sacramento",
1163
+ "impossible",
1164
+ "depression",
1165
+ "testimonials",
1166
+ "memorabilia",
1167
+ "cartridge",
1168
+ "explanation",
1169
+ "cincinnati",
1170
+ "subsection",
1171
+ "electricity",
1172
+ "permitted",
1173
+ "workplace",
1174
+ "confirmed",
1175
+ "wallpapers",
1176
+ "infection",
1177
+ "eligibility",
1178
+ "involvement",
1179
+ "placement",
1180
+ "observations",
1181
+ "vbulletin",
1182
+ "subsequent",
1183
+ "motorcycle",
1184
+ "disclosure",
1185
+ "establishment",
1186
+ "presentations",
1187
+ "undergraduate",
1188
+ "occupation",
1189
+ "donations",
1190
+ "associations",
1191
+ "citysearch",
1192
+ "radiation",
1193
+ "seriously",
1194
+ "elsewhere",
1195
+ "pollution",
1196
+ "conservative",
1197
+ "guestbook",
1198
+ "effectiveness",
1199
+ "demonstrate",
1200
+ "atmosphere",
1201
+ "experiment",
1202
+ "purchases",
1203
+ "federation",
1204
+ "assignment",
1205
+ "chemicals",
1206
+ "everybody",
1207
+ "nashville",
1208
+ "counseling",
1209
+ "acceptable",
1210
+ "satisfied",
1211
+ "measurements",
1212
+ "milwaukee",
1213
+ "medication",
1214
+ "warehouse",
1215
+ "shareware",
1216
+ "violation",
1217
+ "configure",
1218
+ "stability",
1219
+ "southwest",
1220
+ "institutional",
1221
+ "expectations",
1222
+ "independence",
1223
+ "metabolism",
1224
+ "personally",
1225
+ "excellence",
1226
+ "somewhere",
1227
+ "attributes",
1228
+ "recognize",
1229
+ "screening",
1230
+ "thumbnail",
1231
+ "forgotten",
1232
+ "intelligent",
1233
+ "edinburgh",
1234
+ "obligation",
1235
+ "regardless",
1236
+ "restricted",
1237
+ "republican",
1238
+ "merchants",
1239
+ "attendance",
1240
+ "arguments",
1241
+ "amsterdam",
1242
+ "adventures",
1243
+ "announcement",
1244
+ "appreciate",
1245
+ "regularly",
1246
+ "mechanisms",
1247
+ "customize",
1248
+ "tradition",
1249
+ "indicators",
1250
+ "emissions",
1251
+ "physicians",
1252
+ "complaint",
1253
+ "experiments",
1254
+ "afghanistan",
1255
+ "scholarship",
1256
+ "governance",
1257
+ "supplements",
1258
+ "camcorder",
1259
+ "implementing",
1260
+ "ourselves",
1261
+ "conversation",
1262
+ "capability",
1263
+ "producing",
1264
+ "precision",
1265
+ "contributed",
1266
+ "reproduction",
1267
+ "ingredients",
1268
+ "franchise",
1269
+ "complaints",
1270
+ "promotions",
1271
+ "rehabilitation",
1272
+ "maintaining",
1273
+ "environments",
1274
+ "reception",
1275
+ "correctly",
1276
+ "consequences",
1277
+ "geography",
1278
+ "appearing",
1279
+ "integrity",
1280
+ "discrimination",
1281
+ "processed",
1282
+ "implications",
1283
+ "functionality",
1284
+ "intermediate",
1285
+ "emotional",
1286
+ "platforms",
1287
+ "overnight",
1288
+ "geographic",
1289
+ "preliminary",
1290
+ "districts",
1291
+ "introduce",
1292
+ "promotional",
1293
+ "chevrolet",
1294
+ "specialists",
1295
+ "generator",
1296
+ "suspension",
1297
+ "correction",
1298
+ "authentication",
1299
+ "communicate",
1300
+ "supplement",
1301
+ "showtimes",
1302
+ "promoting",
1303
+ "machinery",
1304
+ "bandwidth",
1305
+ "probability",
1306
+ "dimension",
1307
+ "schedules",
1308
+ "admissions",
1309
+ "quarterly",
1310
+ "illustrated",
1311
+ "continental",
1312
+ "alternate",
1313
+ "achievement",
1314
+ "limitations",
1315
+ "automated",
1316
+ "passenger",
1317
+ "convenient",
1318
+ "orientation",
1319
+ "childhood",
1320
+ "flexibility",
1321
+ "jurisdiction",
1322
+ "displaying",
1323
+ "encouraged",
1324
+ "cartridges",
1325
+ "declaration",
1326
+ "automation",
1327
+ "advantages",
1328
+ "preparing",
1329
+ "recipient",
1330
+ "extensions",
1331
+ "athletics",
1332
+ "southeast",
1333
+ "alternatives",
1334
+ "determining",
1335
+ "personalized",
1336
+ "conditioning",
1337
+ "partnerships",
1338
+ "destruction",
1339
+ "increasingly",
1340
+ "migration",
1341
+ "basically",
1342
+ "conventional",
1343
+ "applicants",
1344
+ "occupational",
1345
+ "adjustment",
1346
+ "treatments",
1347
+ "camcorders",
1348
+ "difficulty",
1349
+ "collective",
1350
+ "coalition",
1351
+ "enrollment",
1352
+ "producers",
1353
+ "collector",
1354
+ "interfaces",
1355
+ "advertisers",
1356
+ "representing",
1357
+ "observation",
1358
+ "restoration",
1359
+ "convenience",
1360
+ "returning",
1361
+ "opposition",
1362
+ "container",
1363
+ "defendant",
1364
+ "confirmation",
1365
+ "supervisor",
1366
+ "peripherals",
1367
+ "bestsellers",
1368
+ "departure",
1369
+ "minneapolis",
1370
+ "interactions",
1371
+ "intervention",
1372
+ "attraction",
1373
+ "modification",
1374
+ "customized",
1375
+ "understood",
1376
+ "assurance",
1377
+ "happening",
1378
+ "amendments",
1379
+ "metropolitan",
1380
+ "compilation",
1381
+ "verification",
1382
+ "attractive",
1383
+ "recordings",
1384
+ "jefferson",
1385
+ "gardening",
1386
+ "obligations",
1387
+ "orchestra",
1388
+ "polyphonic",
1389
+ "outsourcing",
1390
+ "adjustable",
1391
+ "allocation",
1392
+ "discipline",
1393
+ "demonstrated",
1394
+ "identifying",
1395
+ "alphabetical",
1396
+ "dispatched",
1397
+ "installing",
1398
+ "voluntary",
1399
+ "photographer",
1400
+ "messaging",
1401
+ "constructed",
1402
+ "additions",
1403
+ "requiring",
1404
+ "engagement",
1405
+ "refinance",
1406
+ "calendars",
1407
+ "arrangement",
1408
+ "conclusions",
1409
+ "bibliography",
1410
+ "compatibility",
1411
+ "furthermore",
1412
+ "cooperative",
1413
+ "measuring",
1414
+ "jacksonville",
1415
+ "headquarters",
1416
+ "transfers",
1417
+ "transformation",
1418
+ "attachments",
1419
+ "administrators",
1420
+ "personality",
1421
+ "facilitate",
1422
+ "subscriber",
1423
+ "priorities",
1424
+ "bookstore",
1425
+ "parenting",
1426
+ "incredible",
1427
+ "commonwealth",
1428
+ "pharmaceutical",
1429
+ "manhattan",
1430
+ "workforce",
1431
+ "organizational",
1432
+ "portuguese",
1433
+ "everywhere",
1434
+ "discharge",
1435
+ "halloween",
1436
+ "hazardous",
1437
+ "methodology",
1438
+ "housewares",
1439
+ "reputation",
1440
+ "resistant",
1441
+ "democrats",
1442
+ "recycling",
1443
+ "qualifications",
1444
+ "slideshow",
1445
+ "variation",
1446
+ "transferred",
1447
+ "photograph",
1448
+ "distributor",
1449
+ "underlying",
1450
+ "wrestling",
1451
+ "photoshop",
1452
+ "gathering",
1453
+ "projection",
1454
+ "mathematical",
1455
+ "specialized",
1456
+ "diagnostic",
1457
+ "indianapolis",
1458
+ "corporations",
1459
+ "criticism",
1460
+ "automobile",
1461
+ "confidential",
1462
+ "statutory",
1463
+ "accommodations",
1464
+ "northeast",
1465
+ "downloaded",
1466
+ "paintings",
1467
+ "injection",
1468
+ "yorkshire",
1469
+ "populations",
1470
+ "protective",
1471
+ "initially",
1472
+ "indicator",
1473
+ "eliminate",
1474
+ "sunglasses",
1475
+ "preference",
1476
+ "threshold",
1477
+ "venezuela",
1478
+ "exploration",
1479
+ "sequences",
1480
+ "astronomy",
1481
+ "translate",
1482
+ "announces",
1483
+ "compression",
1484
+ "establishing",
1485
+ "constitutional",
1486
+ "perfectly",
1487
+ "instantly",
1488
+ "litigation",
1489
+ "submissions",
1490
+ "broadcasting",
1491
+ "horizontal",
1492
+ "terrorist",
1493
+ "informational",
1494
+ "ecommerce",
1495
+ "suffering",
1496
+ "prospective",
1497
+ "ultimately",
1498
+ "artificial",
1499
+ "spectacular",
1500
+ "coordination",
1501
+ "connector",
1502
+ "affiliated",
1503
+ "activation",
1504
+ "naturally",
1505
+ "subscribers",
1506
+ "mitsubishi",
1507
+ "underwear",
1508
+ "potentially",
1509
+ "constraints",
1510
+ "inclusive",
1511
+ "dimensional",
1512
+ "considerable",
1513
+ "selecting",
1514
+ "processors",
1515
+ "pantyhose",
1516
+ "difficulties",
1517
+ "complexity",
1518
+ "constantly",
1519
+ "barcelona",
1520
+ "presidential",
1521
+ "documentary",
1522
+ "territories",
1523
+ "palestinian",
1524
+ "legislature",
1525
+ "hospitality",
1526
+ "procurement",
1527
+ "theoretical",
1528
+ "exercises",
1529
+ "surveillance",
1530
+ "protocols",
1531
+ "highlight",
1532
+ "substitute",
1533
+ "inclusion",
1534
+ "hopefully",
1535
+ "brilliant",
1536
+ "evaluated",
1537
+ "assignments",
1538
+ "termination",
1539
+ "households",
1540
+ "authentic",
1541
+ "montgomery",
1542
+ "architectural",
1543
+ "louisville",
1544
+ "macintosh",
1545
+ "movements",
1546
+ "amenities",
1547
+ "virtually",
1548
+ "authorization",
1549
+ "projector",
1550
+ "comparative",
1551
+ "psychological",
1552
+ "surprised",
1553
+ "genealogy",
1554
+ "expenditure",
1555
+ "liverpool",
1556
+ "connectivity",
1557
+ "algorithms",
1558
+ "similarly",
1559
+ "collaborative",
1560
+ "excluding",
1561
+ "commander",
1562
+ "suggestion",
1563
+ "spotlight",
1564
+ "investigate",
1565
+ "connecting",
1566
+ "logistics",
1567
+ "proportion",
1568
+ "significance",
1569
+ "symposium",
1570
+ "essentials",
1571
+ "protecting",
1572
+ "transmitted",
1573
+ "screenshots",
1574
+ "intensive",
1575
+ "switching",
1576
+ "correspondence",
1577
+ "supervision",
1578
+ "expenditures",
1579
+ "separation",
1580
+ "testimony",
1581
+ "celebrities",
1582
+ "mandatory",
1583
+ "boundaries",
1584
+ "syndication",
1585
+ "celebration",
1586
+ "filtering",
1587
+ "luxembourg",
1588
+ "offensive",
1589
+ "deployment",
1590
+ "colleagues",
1591
+ "separated",
1592
+ "directive",
1593
+ "governing",
1594
+ "retailers",
1595
+ "occasionally",
1596
+ "attending",
1597
+ "recruiting",
1598
+ "instructional",
1599
+ "traveling",
1600
+ "permissions",
1601
+ "biotechnology",
1602
+ "prescribed",
1603
+ "catherine",
1604
+ "reproduced",
1605
+ "calculation",
1606
+ "consolidated",
1607
+ "occasions",
1608
+ "equations",
1609
+ "exceptional",
1610
+ "respondents",
1611
+ "considerations",
1612
+ "queensland",
1613
+ "musicians",
1614
+ "composite",
1615
+ "unavailable",
1616
+ "essentially",
1617
+ "designing",
1618
+ "assessments",
1619
+ "brunswick",
1620
+ "sensitivity",
1621
+ "preservation",
1622
+ "streaming",
1623
+ "intensity",
1624
+ "technological",
1625
+ "syndicate",
1626
+ "antivirus",
1627
+ "addressing",
1628
+ "discounted",
1629
+ "bangladesh",
1630
+ "constitute",
1631
+ "concluded",
1632
+ "desperate",
1633
+ "demonstration",
1634
+ "governmental",
1635
+ "manufactured",
1636
+ "graduation",
1637
+ "variations",
1638
+ "addiction",
1639
+ "springfield",
1640
+ "synthesis",
1641
+ "undefined",
1642
+ "unemployment",
1643
+ "enhancement",
1644
+ "newcastle",
1645
+ "performances",
1646
+ "societies",
1647
+ "brazilian",
1648
+ "identical",
1649
+ "petroleum",
1650
+ "norwegian",
1651
+ "retention",
1652
+ "exchanges",
1653
+ "soundtrack",
1654
+ "wondering",
1655
+ "profession",
1656
+ "separately",
1657
+ "physiology",
1658
+ "collecting",
1659
+ "participant",
1660
+ "scholarships",
1661
+ "recreational",
1662
+ "dominican",
1663
+ "friendship",
1664
+ "expanding",
1665
+ "provincial",
1666
+ "investigations",
1667
+ "medications",
1668
+ "rochester",
1669
+ "advertiser",
1670
+ "encryption",
1671
+ "downloadable",
1672
+ "sophisticated",
1673
+ "possession",
1674
+ "laboratories",
1675
+ "vegetables",
1676
+ "thumbnails",
1677
+ "stockings",
1678
+ "respondent",
1679
+ "destroyed",
1680
+ "manufacture",
1681
+ "wordpress",
1682
+ "vulnerability",
1683
+ "accountability",
1684
+ "celebrate",
1685
+ "accredited",
1686
+ "appliance",
1687
+ "compressed",
1688
+ "scheduling",
1689
+ "perspectives",
1690
+ "mortality",
1691
+ "christians",
1692
+ "therapeutic",
1693
+ "impressive",
1694
+ "accordingly",
1695
+ "architect",
1696
+ "challenging",
1697
+ "microwave",
1698
+ "accidents",
1699
+ "relocation",
1700
+ "contributors",
1701
+ "violations",
1702
+ "temperatures",
1703
+ "competitions",
1704
+ "discretion",
1705
+ "cosmetics",
1706
+ "repository",
1707
+ "concentrations",
1708
+ "christianity",
1709
+ "negotiations",
1710
+ "realistic",
1711
+ "generating",
1712
+ "christina",
1713
+ "congressional",
1714
+ "photographic",
1715
+ "modifications",
1716
+ "millennium",
1717
+ "achieving",
1718
+ "fisheries",
1719
+ "exceptions",
1720
+ "reactions",
1721
+ "macromedia",
1722
+ "companion",
1723
+ "divisions",
1724
+ "additionally",
1725
+ "fellowship",
1726
+ "victorian",
1727
+ "copyrights",
1728
+ "lithuania",
1729
+ "mastercard",
1730
+ "chronicles",
1731
+ "obtaining",
1732
+ "distribute",
1733
+ "decorative",
1734
+ "enlargement",
1735
+ "campaigns",
1736
+ "conjunction",
1737
+ "instances",
1738
+ "indigenous",
1739
+ "validation",
1740
+ "corruption",
1741
+ "incentives",
1742
+ "cholesterol",
1743
+ "differential",
1744
+ "scientist",
1745
+ "starsmerchant",
1746
+ "arthritis",
1747
+ "nevertheless",
1748
+ "practitioners",
1749
+ "transcript",
1750
+ "inflation",
1751
+ "compounds",
1752
+ "contracting",
1753
+ "structured",
1754
+ "reasonably",
1755
+ "graduates",
1756
+ "recommends",
1757
+ "controlling",
1758
+ "distributors",
1759
+ "arlington",
1760
+ "particles",
1761
+ "extraordinary",
1762
+ "indicating",
1763
+ "coordinate",
1764
+ "exclusively",
1765
+ "limitation",
1766
+ "widescreen",
1767
+ "illustration",
1768
+ "construct",
1769
+ "inquiries",
1770
+ "inspiration",
1771
+ "affecting",
1772
+ "downloading",
1773
+ "aggregate",
1774
+ "forecasts",
1775
+ "complicated",
1776
+ "shopzilla",
1777
+ "decorating",
1778
+ "expressions",
1779
+ "shakespeare",
1780
+ "connectors",
1781
+ "conflicts",
1782
+ "travelers",
1783
+ "offerings",
1784
+ "incorrect",
1785
+ "furnishings",
1786
+ "guatemala",
1787
+ "perception",
1788
+ "renaissance",
1789
+ "pathology",
1790
+ "ordinance",
1791
+ "photographers",
1792
+ "infections",
1793
+ "configured",
1794
+ "festivals",
1795
+ "possibilities",
1796
+ "contributing",
1797
+ "analytical",
1798
+ "circulation",
1799
+ "assumption",
1800
+ "jerusalem",
1801
+ "transexuales",
1802
+ "invention",
1803
+ "technician",
1804
+ "executives",
1805
+ "enquiries",
1806
+ "cognitive",
1807
+ "exploring",
1808
+ "registrar",
1809
+ "supporters",
1810
+ "withdrawal",
1811
+ "predicted",
1812
+ "saskatchewan",
1813
+ "cancellation",
1814
+ "ministers",
1815
+ "veterinary",
1816
+ "prostores",
1817
+ "relevance",
1818
+ "incentive",
1819
+ "butterfly",
1820
+ "mechanics",
1821
+ "numerical",
1822
+ "reflection",
1823
+ "accompanied",
1824
+ "invitation",
1825
+ "princeton",
1826
+ "spirituality",
1827
+ "meanwhile",
1828
+ "proprietary",
1829
+ "childrens",
1830
+ "thumbzilla",
1831
+ "porcelain",
1832
+ "pichunter",
1833
+ "translated",
1834
+ "columnists",
1835
+ "consensus",
1836
+ "delivering",
1837
+ "journalism",
1838
+ "intention",
1839
+ "undertaken",
1840
+ "statewide",
1841
+ "semiconductor",
1842
+ "illustrations",
1843
+ "happiness",
1844
+ "substantially",
1845
+ "identifier",
1846
+ "calculations",
1847
+ "conducting",
1848
+ "accomplished",
1849
+ "calculators",
1850
+ "impression",
1851
+ "correlation",
1852
+ "fragrance",
1853
+ "neighbors",
1854
+ "transparent",
1855
+ "charleston",
1856
+ "champions",
1857
+ "selections",
1858
+ "projectors",
1859
+ "inappropriate",
1860
+ "comparing",
1861
+ "vocational",
1862
+ "pharmacies",
1863
+ "introducing",
1864
+ "appreciated",
1865
+ "albuquerque",
1866
+ "distinguished",
1867
+ "projected",
1868
+ "assumptions",
1869
+ "shareholders",
1870
+ "developmental",
1871
+ "regulated",
1872
+ "anticipated",
1873
+ "completing",
1874
+ "comparable",
1875
+ "confusion",
1876
+ "copyrighted",
1877
+ "warranties",
1878
+ "documented",
1879
+ "paperbacks",
1880
+ "keyboards",
1881
+ "vulnerable",
1882
+ "reflected",
1883
+ "respiratory",
1884
+ "notifications",
1885
+ "transexual",
1886
+ "mainstream",
1887
+ "evaluating",
1888
+ "subcommittee",
1889
+ "maternity",
1890
+ "journalists",
1891
+ "foundations",
1892
+ "volleyball",
1893
+ "liabilities",
1894
+ "decreased",
1895
+ "tolerance",
1896
+ "creativity",
1897
+ "describing",
1898
+ "lightning",
1899
+ "quotations",
1900
+ "inspector",
1901
+ "bookmarks",
1902
+ "behavioral",
1903
+ "riverside",
1904
+ "bathrooms",
1905
+ "abilities",
1906
+ "initiated",
1907
+ "nonprofit",
1908
+ "lancaster",
1909
+ "suspended",
1910
+ "containers",
1911
+ "attitudes",
1912
+ "simultaneously",
1913
+ "integrate",
1914
+ "sociology",
1915
+ "screenshot",
1916
+ "exhibitions",
1917
+ "confident",
1918
+ "retrieved",
1919
+ "officially",
1920
+ "consortium",
1921
+ "recipients",
1922
+ "delicious",
1923
+ "traditions",
1924
+ "periodically",
1925
+ "hungarian",
1926
+ "referring",
1927
+ "transform",
1928
+ "educators",
1929
+ "vegetable",
1930
+ "humanities",
1931
+ "independently",
1932
+ "alignment",
1933
+ "henderson",
1934
+ "britannica",
1935
+ "competitors",
1936
+ "visibility",
1937
+ "consciousness",
1938
+ "encounter",
1939
+ "resolutions",
1940
+ "accessing",
1941
+ "attempted",
1942
+ "witnesses",
1943
+ "administered",
1944
+ "strengthen",
1945
+ "frederick",
1946
+ "aggressive",
1947
+ "advertisements",
1948
+ "sublimedirectory",
1949
+ "disturbed",
1950
+ "determines",
1951
+ "sculpture",
1952
+ "motivation",
1953
+ "pharmacology",
1954
+ "passengers",
1955
+ "quantities",
1956
+ "petersburg",
1957
+ "consistently",
1958
+ "powerpoint",
1959
+ "obituaries",
1960
+ "punishment",
1961
+ "appreciation",
1962
+ "subsequently",
1963
+ "providence",
1964
+ "restriction",
1965
+ "incorporate",
1966
+ "backgrounds",
1967
+ "treasurer",
1968
+ "lightweight",
1969
+ "transcription",
1970
+ "complications",
1971
+ "scripting",
1972
+ "remembered",
1973
+ "synthetic",
1974
+ "testament",
1975
+ "specifics",
1976
+ "partially",
1977
+ "wilderness",
1978
+ "generations",
1979
+ "tournaments",
1980
+ "sponsorship",
1981
+ "headphones",
1982
+ "proceeding",
1983
+ "volkswagen",
1984
+ "uncertainty",
1985
+ "breakdown",
1986
+ "reconstruction",
1987
+ "subsidiary",
1988
+ "strengths",
1989
+ "encouraging",
1990
+ "furnished",
1991
+ "terrorists",
1992
+ "comparisons",
1993
+ "beneficial",
1994
+ "distributions",
1995
+ "viewpicture",
1996
+ "threatened",
1997
+ "republicans",
1998
+ "discusses",
1999
+ "responded",
2000
+ "abstracts",
2001
+ "prediction",
2002
+ "pharmaceuticals",
2003
+ "thesaurus",
2004
+ "individually",
2005
+ "battlefield",
2006
+ "literally",
2007
+ "ecological",
2008
+ "appraisal",
2009
+ "consisting",
2010
+ "submitting",
2011
+ "citations",
2012
+ "geographical",
2013
+ "mozambique",
2014
+ "disclaimers",
2015
+ "championships",
2016
+ "sheffield",
2017
+ "finishing",
2018
+ "wellington",
2019
+ "prospects",
2020
+ "bulgarian",
2021
+ "aboriginal",
2022
+ "remarkable",
2023
+ "preventing",
2024
+ "productive",
2025
+ "boulevard",
2026
+ "compliant",
2027
+ "penalties",
2028
+ "imagination",
2029
+ "refurbished",
2030
+ "activated",
2031
+ "conferencing",
2032
+ "armstrong",
2033
+ "politicians",
2034
+ "trackbacks",
2035
+ "accommodate",
2036
+ "christine",
2037
+ "accepting",
2038
+ "precipitation",
2039
+ "isolation",
2040
+ "sustained",
2041
+ "approximate",
2042
+ "programmer",
2043
+ "greetings",
2044
+ "inherited",
2045
+ "incomplete",
2046
+ "chronicle",
2047
+ "legitimate",
2048
+ "biographies",
2049
+ "investigator",
2050
+ "plaintiff",
2051
+ "prisoners",
2052
+ "mediterranean",
2053
+ "nightlife",
2054
+ "architects",
2055
+ "entrepreneur",
2056
+ "freelance",
2057
+ "excessive",
2058
+ "screensaver",
2059
+ "valuation",
2060
+ "unexpected",
2061
+ "cigarette",
2062
+ "characteristic",
2063
+ "metallica",
2064
+ "consequently",
2065
+ "appointments",
2066
+ "narrative",
2067
+ "academics",
2068
+ "quantitative",
2069
+ "screensavers",
2070
+ "subdivision",
2071
+ "distinction",
2072
+ "livestock",
2073
+ "exemption",
2074
+ "sustainability",
2075
+ "formatting",
2076
+ "nutritional",
2077
+ "nicaragua",
2078
+ "affiliation",
2079
+ "relatives",
2080
+ "satisfactory",
2081
+ "revolutionary",
2082
+ "bracelets",
2083
+ "telephony",
2084
+ "breathing",
2085
+ "thickness",
2086
+ "adjustments",
2087
+ "graphical",
2088
+ "discussing",
2089
+ "aerospace",
2090
+ "meaningful",
2091
+ "maintains",
2092
+ "shortcuts",
2093
+ "voyeurweb",
2094
+ "extending",
2095
+ "specifies",
2096
+ "accreditation",
2097
+ "blackberry",
2098
+ "meditation",
2099
+ "microphone",
2100
+ "macedonia",
2101
+ "combining",
2102
+ "instrumental",
2103
+ "organizing",
2104
+ "moderators",
2105
+ "kazakhstan",
2106
+ "standings",
2107
+ "partition",
2108
+ "invisible",
2109
+ "translations",
2110
+ "commodity",
2111
+ "kilometers",
2112
+ "thanksgiving",
2113
+ "guarantees",
2114
+ "indication",
2115
+ "congratulations",
2116
+ "cigarettes",
2117
+ "controllers",
2118
+ "consultancy",
2119
+ "conventions",
2120
+ "coordinates",
2121
+ "responding",
2122
+ "physically",
2123
+ "stakeholders",
2124
+ "hydrocodone",
2125
+ "consecutive",
2126
+ "attempting",
2127
+ "representations",
2128
+ "competing",
2129
+ "peninsula",
2130
+ "accurately",
2131
+ "considers",
2132
+ "ministries",
2133
+ "vacancies",
2134
+ "parliamentary",
2135
+ "acknowledge",
2136
+ "thoroughly",
2137
+ "nottingham",
2138
+ "identifies",
2139
+ "questionnaire",
2140
+ "qualification",
2141
+ "modelling",
2142
+ "miniature",
2143
+ "interstate",
2144
+ "consequence",
2145
+ "systematic",
2146
+ "perceived",
2147
+ "madagascar",
2148
+ "presenting",
2149
+ "troubleshooting",
2150
+ "uzbekistan",
2151
+ "centuries",
2152
+ "magnitude",
2153
+ "richardson",
2154
+ "fragrances",
2155
+ "vocabulary",
2156
+ "earthquake",
2157
+ "fundraising",
2158
+ "geological",
2159
+ "assessing",
2160
+ "introduces",
2161
+ "webmasters",
2162
+ "computational",
2163
+ "acdbentity",
2164
+ "participated",
2165
+ "handhelds",
2166
+ "answering",
2167
+ "impressed",
2168
+ "conspiracy",
2169
+ "organizer",
2170
+ "combinations",
2171
+ "preceding",
2172
+ "cumulative",
2173
+ "amplifier",
2174
+ "arbitrary",
2175
+ "prominent",
2176
+ "lexington",
2177
+ "contacted",
2178
+ "recorders",
2179
+ "occasional",
2180
+ "innovations",
2181
+ "postcards",
2182
+ "reviewing",
2183
+ "explicitly",
2184
+ "transsexual",
2185
+ "citizenship",
2186
+ "informative",
2187
+ "girlfriend",
2188
+ "bloomberg",
2189
+ "hierarchy",
2190
+ "influenced",
2191
+ "abandoned",
2192
+ "complement",
2193
+ "mauritius",
2194
+ "checklist",
2195
+ "requesting",
2196
+ "lauderdale",
2197
+ "scenarios",
2198
+ "extraction",
2199
+ "elevation",
2200
+ "utilization",
2201
+ "beverages",
2202
+ "calibration",
2203
+ "efficiently",
2204
+ "entertaining",
2205
+ "prerequisite",
2206
+ "hypothesis",
2207
+ "medicines",
2208
+ "regression",
2209
+ "enhancements",
2210
+ "renewable",
2211
+ "intersection",
2212
+ "passwords",
2213
+ "consistency",
2214
+ "collectors",
2215
+ "azerbaijan",
2216
+ "astrology",
2217
+ "occurring",
2218
+ "supplemental",
2219
+ "travelling",
2220
+ "induction",
2221
+ "precisely",
2222
+ "spreading",
2223
+ "provinces",
2224
+ "widespread",
2225
+ "incidence",
2226
+ "incidents",
2227
+ "enhancing",
2228
+ "interference",
2229
+ "palestine",
2230
+ "listprice",
2231
+ "atmospheric",
2232
+ "knowledgestorm",
2233
+ "referenced",
2234
+ "publicity",
2235
+ "proposition",
2236
+ "allowance",
2237
+ "designation",
2238
+ "duplicate",
2239
+ "criterion",
2240
+ "civilization",
2241
+ "vietnamese",
2242
+ "tremendous",
2243
+ "corrected",
2244
+ "encountered",
2245
+ "internationally",
2246
+ "surrounded",
2247
+ "creatures",
2248
+ "commented",
2249
+ "accomplish",
2250
+ "vegetarian",
2251
+ "newfoundland",
2252
+ "investigated",
2253
+ "ambassador",
2254
+ "stephanie",
2255
+ "contacting",
2256
+ "vegetation",
2257
+ "findarticles",
2258
+ "specially",
2259
+ "infectious",
2260
+ "continuity",
2261
+ "phenomenon",
2262
+ "conscious",
2263
+ "referrals",
2264
+ "differently",
2265
+ "integrating",
2266
+ "revisions",
2267
+ "reasoning",
2268
+ "charitable",
2269
+ "annotated",
2270
+ "convinced",
2271
+ "burlington",
2272
+ "replacing",
2273
+ "researcher",
2274
+ "watershed",
2275
+ "occupations",
2276
+ "acknowledged",
2277
+ "equilibrium",
2278
+ "characterized",
2279
+ "privilege",
2280
+ "qualifying",
2281
+ "estimation",
2282
+ "pediatric",
2283
+ "techrepublic",
2284
+ "institutes",
2285
+ "brochures",
2286
+ "traveller",
2287
+ "appropriations",
2288
+ "suspected",
2289
+ "benchmark",
2290
+ "beginners",
2291
+ "instructors",
2292
+ "highlighted",
2293
+ "stationery",
2294
+ "unauthorized",
2295
+ "competent",
2296
+ "contributor",
2297
+ "demonstrates",
2298
+ "gradually",
2299
+ "desirable",
2300
+ "journalist",
2301
+ "afterwards",
2302
+ "religions",
2303
+ "explosion",
2304
+ "signatures",
2305
+ "disciplines",
2306
+ "daughters",
2307
+ "conversations",
2308
+ "simplified",
2309
+ "motherboard",
2310
+ "bibliographic",
2311
+ "champagne",
2312
+ "deviation",
2313
+ "superintendent",
2314
+ "housewives",
2315
+ "influences",
2316
+ "inspections",
2317
+ "irrigation",
2318
+ "hydraulic",
2319
+ "robertson",
2320
+ "penetration",
2321
+ "conviction",
2322
+ "omissions",
2323
+ "retrieval",
2324
+ "qualities",
2325
+ "prototype",
2326
+ "importantly",
2327
+ "apparatus",
2328
+ "explaining",
2329
+ "nomination",
2330
+ "empirical",
2331
+ "dependence",
2332
+ "sexuality",
2333
+ "polyester",
2334
+ "commitments",
2335
+ "suggesting",
2336
+ "remainder",
2337
+ "privileges",
2338
+ "televisions",
2339
+ "specializing",
2340
+ "commodities",
2341
+ "motorcycles",
2342
+ "concentrate",
2343
+ "reproductive",
2344
+ "molecules",
2345
+ "refrigerator",
2346
+ "intervals",
2347
+ "sentences",
2348
+ "exclusion",
2349
+ "workstation",
2350
+ "holocaust",
2351
+ "receivers",
2352
+ "disposition",
2353
+ "navigator",
2354
+ "investigators",
2355
+ "marijuana",
2356
+ "cathedral",
2357
+ "fairfield",
2358
+ "fascinating",
2359
+ "landscapes",
2360
+ "lafayette",
2361
+ "computation",
2362
+ "cardiovascular",
2363
+ "salvation",
2364
+ "predictions",
2365
+ "accompanying",
2366
+ "selective",
2367
+ "arbitration",
2368
+ "configuring",
2369
+ "editorials",
2370
+ "sacrifice",
2371
+ "removable",
2372
+ "convergence",
2373
+ "gibraltar",
2374
+ "anthropology",
2375
+ "malpractice",
2376
+ "reporters",
2377
+ "necessity",
2378
+ "rendering",
2379
+ "hepatitis",
2380
+ "nationally",
2381
+ "waterproof",
2382
+ "specialties",
2383
+ "humanitarian",
2384
+ "invitations",
2385
+ "functioning",
2386
+ "economies",
2387
+ "alexandria",
2388
+ "bacterial",
2389
+ "undertake",
2390
+ "continuously",
2391
+ "achievements",
2392
+ "convertible",
2393
+ "secretariat",
2394
+ "paragraphs",
2395
+ "adolescent",
2396
+ "nominations",
2397
+ "cancelled",
2398
+ "introductory",
2399
+ "reservoir",
2400
+ "occurrence",
2401
+ "worcester",
2402
+ "demographic",
2403
+ "disciplinary",
2404
+ "respected",
2405
+ "portraits",
2406
+ "interpreted",
2407
+ "evaluations",
2408
+ "elimination",
2409
+ "hypothetical",
2410
+ "immigrants",
2411
+ "complimentary",
2412
+ "helicopter",
2413
+ "performer",
2414
+ "commissions",
2415
+ "powerseller",
2416
+ "graduated",
2417
+ "surprising",
2418
+ "unnecessary",
2419
+ "dramatically",
2420
+ "yugoslavia",
2421
+ "characterization",
2422
+ "likelihood",
2423
+ "fundamentals",
2424
+ "contamination",
2425
+ "endangered",
2426
+ "compromise",
2427
+ "expiration",
2428
+ "namespace",
2429
+ "peripheral",
2430
+ "negotiation",
2431
+ "opponents",
2432
+ "nominated",
2433
+ "confidentiality",
2434
+ "electoral",
2435
+ "changelog",
2436
+ "alternatively",
2437
+ "greensboro",
2438
+ "controversial",
2439
+ "recovered",
2440
+ "upgrading",
2441
+ "frontpage",
2442
+ "demanding",
2443
+ "defensive",
2444
+ "forbidden",
2445
+ "programmers",
2446
+ "monitored",
2447
+ "installations",
2448
+ "deutschland",
2449
+ "practitioner",
2450
+ "motivated",
2451
+ "smithsonian",
2452
+ "examining",
2453
+ "revelation",
2454
+ "delegation",
2455
+ "dictionaries",
2456
+ "greenhouse",
2457
+ "transparency",
2458
+ "currencies",
2459
+ "survivors",
2460
+ "positioning",
2461
+ "descending",
2462
+ "temporarily",
2463
+ "frequencies",
2464
+ "reflections",
2465
+ "municipality",
2466
+ "detective",
2467
+ "experiencing",
2468
+ "fireplace",
2469
+ "endorsement",
2470
+ "psychiatry",
2471
+ "persistent",
2472
+ "summaries",
2473
+ "looksmart",
2474
+ "magnificent",
2475
+ "colleague",
2476
+ "adaptation",
2477
+ "paintball",
2478
+ "enclosure",
2479
+ "supervisors",
2480
+ "westminster",
2481
+ "distances",
2482
+ "absorption",
2483
+ "treasures",
2484
+ "transcripts",
2485
+ "disappointed",
2486
+ "continually",
2487
+ "communist",
2488
+ "collectible",
2489
+ "entrepreneurs",
2490
+ "creations",
2491
+ "acquisitions",
2492
+ "biodiversity",
2493
+ "excitement",
2494
+ "presently",
2495
+ "mysterious",
2496
+ "librarian",
2497
+ "subsidiaries",
2498
+ "stockholm",
2499
+ "indonesian",
2500
+ "therapist",
2501
+ "promising",
2502
+ "relaxation",
2503
+ "thereafter",
2504
+ "commissioners",
2505
+ "forwarding",
2506
+ "nightmare",
2507
+ "reductions",
2508
+ "southampton",
2509
+ "organisms",
2510
+ "telescope",
2511
+ "portsmouth",
2512
+ "advancement",
2513
+ "harassment",
2514
+ "generators",
2515
+ "generates",
2516
+ "replication",
2517
+ "inexpensive",
2518
+ "receptors",
2519
+ "interventions",
2520
+ "huntington",
2521
+ "internship",
2522
+ "aluminium",
2523
+ "snowboard",
2524
+ "beastality",
2525
+ "evanescence",
2526
+ "coordinated",
2527
+ "shipments",
2528
+ "antarctica",
2529
+ "chancellor",
2530
+ "controversy",
2531
+ "legendary",
2532
+ "beautifully",
2533
+ "antibodies",
2534
+ "examinations",
2535
+ "immunology",
2536
+ "departmental",
2537
+ "terminology",
2538
+ "gentleman",
2539
+ "reproduce",
2540
+ "convicted",
2541
+ "roommates",
2542
+ "threatening",
2543
+ "spokesman",
2544
+ "activists",
2545
+ "frankfurt",
2546
+ "encourages",
2547
+ "assembled",
2548
+ "restructuring",
2549
+ "terminals",
2550
+ "simulations",
2551
+ "sufficiently",
2552
+ "conditional",
2553
+ "crossword",
2554
+ "conceptual",
2555
+ "liechtenstein",
2556
+ "translator",
2557
+ "automobiles",
2558
+ "continent",
2559
+ "longitude",
2560
+ "challenged",
2561
+ "telecharger",
2562
+ "insertion",
2563
+ "instrumentation",
2564
+ "constraint",
2565
+ "groundwater",
2566
+ "strengthening",
2567
+ "insulation",
2568
+ "infringement",
2569
+ "subjective",
2570
+ "swaziland",
2571
+ "varieties",
2572
+ "mediawiki",
2573
+ "configurations",
2574
+ ]