@delali/narsil-react-native 0.3.1-next.155 → 0.3.1-next.156

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 (253) hide show
  1. package/NOTICE +144 -0
  2. package/NarsilReactNative.podspec +2 -2
  3. package/android/CMakeLists.txt +1 -1
  4. package/cpp/HybridNarsilCoreAnalysis.cpp +277 -0
  5. package/cpp/HybridNarsilCoreImpl.hpp +43 -0
  6. package/cpp/HybridNarsilCoreKeyword.cpp +253 -0
  7. package/cpp/HybridNarsilCoreMath.cpp +47 -0
  8. package/cpp/core/include/narsil_analysis.h +86 -0
  9. package/cpp/core/include/narsil_core.h +1 -1
  10. package/cpp/core/include/narsil_keyword.h +110 -0
  11. package/cpp/core/include/narsil_math.h +36 -0
  12. package/cpp/core/src/analysis/analyse.c +281 -0
  13. package/cpp/core/src/analysis/analyser.h +49 -0
  14. package/cpp/core/src/analysis/languages.c +79 -0
  15. package/cpp/core/src/analysis/languages.h +42 -0
  16. package/cpp/core/src/analysis/normalise.c +242 -0
  17. package/cpp/core/src/analysis/normalise.h +28 -0
  18. package/cpp/core/src/analysis/split.c +183 -0
  19. package/cpp/core/src/analysis/split.h +27 -0
  20. package/cpp/core/src/analysis/stop_words.c +82 -0
  21. package/cpp/core/src/analysis/stop_words.h +19 -0
  22. package/cpp/core/src/analysis/term_cache.c +88 -0
  23. package/cpp/core/src/analysis/term_cache.h +36 -0
  24. package/cpp/core/src/analysis/text.c +161 -0
  25. package/cpp/core/src/analysis/text.h +45 -0
  26. package/cpp/core/src/analysis/transform.c +103 -0
  27. package/cpp/core/src/analysis/unicode.c +252 -0
  28. package/cpp/core/src/analysis/unicode.h +54 -0
  29. package/cpp/core/src/internal.h +4 -0
  30. package/cpp/core/src/keyword/pass.h +117 -0
  31. package/cpp/core/src/keyword/prune.c +324 -0
  32. package/cpp/core/src/keyword/request.c +179 -0
  33. package/cpp/core/src/keyword/rows.c +83 -0
  34. package/cpp/core/src/keyword/rows.h +18 -0
  35. package/cpp/core/src/keyword/score.c +257 -0
  36. package/cpp/core/src/keyword/score.h +17 -0
  37. package/cpp/core/src/keyword/scratch.c +226 -0
  38. package/cpp/core/src/keyword/scratch.h +55 -0
  39. package/cpp/core/src/keyword/select.c +155 -0
  40. package/cpp/core/src/keyword/select.h +17 -0
  41. package/cpp/core/src/languages/bulgarian_stemmer.c +114 -0
  42. package/cpp/core/src/languages/data/albanian.c +54 -0
  43. package/cpp/core/src/languages/data/amharic.c +93 -0
  44. package/cpp/core/src/languages/data/arabic.c +146 -0
  45. package/cpp/core/src/languages/data/armenian.c +46 -0
  46. package/cpp/core/src/languages/data/azerbaijani.c +68 -0
  47. package/cpp/core/src/languages/data/bambara.c +48 -0
  48. package/cpp/core/src/languages/data/basque.c +62 -0
  49. package/cpp/core/src/languages/data/belarusian.c +56 -0
  50. package/cpp/core/src/languages/data/bengali.c +63 -0
  51. package/cpp/core/src/languages/data/bosnian.c +73 -0
  52. package/cpp/core/src/languages/data/breton.c +52 -0
  53. package/cpp/core/src/languages/data/bulgarian.c +144 -0
  54. package/cpp/core/src/languages/data/burmese.c +48 -0
  55. package/cpp/core/src/languages/data/catalan.c +84 -0
  56. package/cpp/core/src/languages/data/chinese.c +70 -0
  57. package/cpp/core/src/languages/data/croatian.c +72 -0
  58. package/cpp/core/src/languages/data/czech.c +72 -0
  59. package/cpp/core/src/languages/data/dagbani.c +88 -0
  60. package/cpp/core/src/languages/data/danish.c +56 -0
  61. package/cpp/core/src/languages/data/declarations.h +114 -0
  62. package/cpp/core/src/languages/data/dutch.c +58 -0
  63. package/cpp/core/src/languages/data/english.c +172 -0
  64. package/cpp/core/src/languages/data/esperanto.c +71 -0
  65. package/cpp/core/src/languages/data/estonian.c +417 -0
  66. package/cpp/core/src/languages/data/ewe.c +89 -0
  67. package/cpp/core/src/languages/data/faroese.c +54 -0
  68. package/cpp/core/src/languages/data/fijian.c +44 -0
  69. package/cpp/core/src/languages/data/finnish.c +100 -0
  70. package/cpp/core/src/languages/data/french.c +74 -0
  71. package/cpp/core/src/languages/data/ga.c +83 -0
  72. package/cpp/core/src/languages/data/galician.c +70 -0
  73. package/cpp/core/src/languages/data/georgian.c +57 -0
  74. package/cpp/core/src/languages/data/german.c +96 -0
  75. package/cpp/core/src/languages/data/greek.c +202 -0
  76. package/cpp/core/src/languages/data/guarani.c +110 -0
  77. package/cpp/core/src/languages/data/gujarati.c +90 -0
  78. package/cpp/core/src/languages/data/haitian-creole.c +54 -0
  79. package/cpp/core/src/languages/data/hausa.c +85 -0
  80. package/cpp/core/src/languages/data/hawaiian.c +50 -0
  81. package/cpp/core/src/languages/data/hebrew.c +85 -0
  82. package/cpp/core/src/languages/data/hindi.c +91 -0
  83. package/cpp/core/src/languages/data/hungarian.c +98 -0
  84. package/cpp/core/src/languages/data/icelandic.c +73 -0
  85. package/cpp/core/src/languages/data/igbo.c +90 -0
  86. package/cpp/core/src/languages/data/indonesian.c +296 -0
  87. package/cpp/core/src/languages/data/irish.c +60 -0
  88. package/cpp/core/src/languages/data/italian.c +107 -0
  89. package/cpp/core/src/languages/data/japanese.c +52 -0
  90. package/cpp/core/src/languages/data/kannada.c +60 -0
  91. package/cpp/core/src/languages/data/kazakh.c +57 -0
  92. package/cpp/core/src/languages/data/khmer.c +71 -0
  93. package/cpp/core/src/languages/data/kinyarwanda.c +54 -0
  94. package/cpp/core/src/languages/data/kirundi.c +53 -0
  95. package/cpp/core/src/languages/data/korean.c +74 -0
  96. package/cpp/core/src/languages/data/kurmanji.c +43 -0
  97. package/cpp/core/src/languages/data/kyrgyz.c +65 -0
  98. package/cpp/core/src/languages/data/lao.c +46 -0
  99. package/cpp/core/src/languages/data/latin.c +46 -0
  100. package/cpp/core/src/languages/data/latvian.c +75 -0
  101. package/cpp/core/src/languages/data/lingala.c +88 -0
  102. package/cpp/core/src/languages/data/lithuanian.c +65 -0
  103. package/cpp/core/src/languages/data/luxembourgish.c +80 -0
  104. package/cpp/core/src/languages/data/macedonian.c +286 -0
  105. package/cpp/core/src/languages/data/malagasy.c +51 -0
  106. package/cpp/core/src/languages/data/malay.c +184 -0
  107. package/cpp/core/src/languages/data/malayalam.c +64 -0
  108. package/cpp/core/src/languages/data/maltese.c +102 -0
  109. package/cpp/core/src/languages/data/maori.c +52 -0
  110. package/cpp/core/src/languages/data/marathi.c +62 -0
  111. package/cpp/core/src/languages/data/nepali.c +72 -0
  112. package/cpp/core/src/languages/data/norwegian.c +74 -0
  113. package/cpp/core/src/languages/data/oromo.c +51 -0
  114. package/cpp/core/src/languages/data/persian.c +150 -0
  115. package/cpp/core/src/languages/data/polish.c +111 -0
  116. package/cpp/core/src/languages/data/portuguese.c +91 -0
  117. package/cpp/core/src/languages/data/punjabi.c +80 -0
  118. package/cpp/core/src/languages/data/registry.c +116 -0
  119. package/cpp/core/src/languages/data/romanian.c +93 -0
  120. package/cpp/core/src/languages/data/russian.c +76 -0
  121. package/cpp/core/src/languages/data/samoan.c +47 -0
  122. package/cpp/core/src/languages/data/sanskrit.c +53 -0
  123. package/cpp/core/src/languages/data/scottish-gaelic.c +119 -0
  124. package/cpp/core/src/languages/data/serbian.c +84 -0
  125. package/cpp/core/src/languages/data/shona.c +55 -0
  126. package/cpp/core/src/languages/data/sinhala.c +78 -0
  127. package/cpp/core/src/languages/data/slovak.c +135 -0
  128. package/cpp/core/src/languages/data/slovenian.c +139 -0
  129. package/cpp/core/src/languages/data/sorani.c +55 -0
  130. package/cpp/core/src/languages/data/spanish.c +84 -0
  131. package/cpp/core/src/languages/data/swahili.c +59 -0
  132. package/cpp/core/src/languages/data/swedish.c +60 -0
  133. package/cpp/core/src/languages/data/tagalog.c +75 -0
  134. package/cpp/core/src/languages/data/tamil.c +69 -0
  135. package/cpp/core/src/languages/data/tatar.c +548 -0
  136. package/cpp/core/src/languages/data/telugu.c +54 -0
  137. package/cpp/core/src/languages/data/thai.c +46 -0
  138. package/cpp/core/src/languages/data/tibetan.c +55 -0
  139. package/cpp/core/src/languages/data/tigrinya.c +73 -0
  140. package/cpp/core/src/languages/data/tongan.c +47 -0
  141. package/cpp/core/src/languages/data/turkish.c +100 -0
  142. package/cpp/core/src/languages/data/twi.c +88 -0
  143. package/cpp/core/src/languages/data/ukrainian.c +99 -0
  144. package/cpp/core/src/languages/data/urdu.c +174 -0
  145. package/cpp/core/src/languages/data/vietnamese.c +88 -0
  146. package/cpp/core/src/languages/data/welsh.c +143 -0
  147. package/cpp/core/src/languages/data/wolof.c +51 -0
  148. package/cpp/core/src/languages/data/xhosa.c +56 -0
  149. package/cpp/core/src/languages/data/yoruba.c +93 -0
  150. package/cpp/core/src/languages/data/zulu.c +58 -0
  151. package/cpp/core/src/languages/marks.c +64 -0
  152. package/cpp/core/src/languages/rules.c +63 -0
  153. package/cpp/core/src/languages/rules.h +68 -0
  154. package/cpp/core/src/languages/sanskrit_stemmer.c +50 -0
  155. package/cpp/core/src/languages/scripts.c +143 -0
  156. package/cpp/core/src/languages/slovenian_stemmer.c +46 -0
  157. package/cpp/core/src/languages/snowball/api.c +52 -0
  158. package/cpp/core/src/languages/snowball/api.h +43 -0
  159. package/cpp/core/src/languages/snowball/arabic_stemmer.c +1506 -0
  160. package/cpp/core/src/languages/snowball/arabic_stemmer.h +24 -0
  161. package/cpp/core/src/languages/snowball/armenian_stemmer.c +523 -0
  162. package/cpp/core/src/languages/snowball/armenian_stemmer.h +24 -0
  163. package/cpp/core/src/languages/snowball/basque_stemmer.c +1089 -0
  164. package/cpp/core/src/languages/snowball/basque_stemmer.h +24 -0
  165. package/cpp/core/src/languages/snowball/catalan_stemmer.c +1380 -0
  166. package/cpp/core/src/languages/snowball/catalan_stemmer.h +24 -0
  167. package/cpp/core/src/languages/snowball/czech_stemmer.c +582 -0
  168. package/cpp/core/src/languages/snowball/czech_stemmer.h +24 -0
  169. package/cpp/core/src/languages/snowball/danish_stemmer.c +352 -0
  170. package/cpp/core/src/languages/snowball/danish_stemmer.h +24 -0
  171. package/cpp/core/src/languages/snowball/dutch_stemmer.c +1657 -0
  172. package/cpp/core/src/languages/snowball/dutch_stemmer.h +24 -0
  173. package/cpp/core/src/languages/snowball/english_stemmer.c +1019 -0
  174. package/cpp/core/src/languages/snowball/english_stemmer.h +24 -0
  175. package/cpp/core/src/languages/snowball/esperanto_stemmer.c +716 -0
  176. package/cpp/core/src/languages/snowball/esperanto_stemmer.h +24 -0
  177. package/cpp/core/src/languages/snowball/estonian_stemmer.c +1361 -0
  178. package/cpp/core/src/languages/snowball/estonian_stemmer.h +24 -0
  179. package/cpp/core/src/languages/snowball/finnish_stemmer.c +800 -0
  180. package/cpp/core/src/languages/snowball/finnish_stemmer.h +24 -0
  181. package/cpp/core/src/languages/snowball/french_stemmer.c +1217 -0
  182. package/cpp/core/src/languages/snowball/french_stemmer.h +24 -0
  183. package/cpp/core/src/languages/snowball/german_stemmer.c +567 -0
  184. package/cpp/core/src/languages/snowball/german_stemmer.h +24 -0
  185. package/cpp/core/src/languages/snowball/greek_stemmer.c +3450 -0
  186. package/cpp/core/src/languages/snowball/greek_stemmer.h +24 -0
  187. package/cpp/core/src/languages/snowball/hindi_stemmer.c +325 -0
  188. package/cpp/core/src/languages/snowball/hindi_stemmer.h +24 -0
  189. package/cpp/core/src/languages/snowball/hungarian_stemmer.c +742 -0
  190. package/cpp/core/src/languages/snowball/hungarian_stemmer.h +24 -0
  191. package/cpp/core/src/languages/snowball/indonesian_stemmer.c +443 -0
  192. package/cpp/core/src/languages/snowball/indonesian_stemmer.h +24 -0
  193. package/cpp/core/src/languages/snowball/irish_stemmer.c +428 -0
  194. package/cpp/core/src/languages/snowball/irish_stemmer.h +24 -0
  195. package/cpp/core/src/languages/snowball/italian_stemmer.c +983 -0
  196. package/cpp/core/src/languages/snowball/italian_stemmer.h +24 -0
  197. package/cpp/core/src/languages/snowball/lithuanian_stemmer.c +794 -0
  198. package/cpp/core/src/languages/snowball/lithuanian_stemmer.h +24 -0
  199. package/cpp/core/src/languages/snowball/nepali_stemmer.c +361 -0
  200. package/cpp/core/src/languages/snowball/nepali_stemmer.h +24 -0
  201. package/cpp/core/src/languages/snowball/norwegian_stemmer.c +332 -0
  202. package/cpp/core/src/languages/snowball/norwegian_stemmer.h +24 -0
  203. package/cpp/core/src/languages/snowball/persian_stemmer.c +538 -0
  204. package/cpp/core/src/languages/snowball/persian_stemmer.h +24 -0
  205. package/cpp/core/src/languages/snowball/polish_stemmer.c +501 -0
  206. package/cpp/core/src/languages/snowball/polish_stemmer.h +24 -0
  207. package/cpp/core/src/languages/snowball/portuguese_stemmer.c +866 -0
  208. package/cpp/core/src/languages/snowball/portuguese_stemmer.h +24 -0
  209. package/cpp/core/src/languages/snowball/romanian_stemmer.c +940 -0
  210. package/cpp/core/src/languages/snowball/romanian_stemmer.h +24 -0
  211. package/cpp/core/src/languages/snowball/russian_stemmer.c +598 -0
  212. package/cpp/core/src/languages/snowball/russian_stemmer.h +24 -0
  213. package/cpp/core/src/languages/snowball/serbian_stemmer.c +6765 -0
  214. package/cpp/core/src/languages/snowball/serbian_stemmer.h +24 -0
  215. package/cpp/core/src/languages/snowball/snowball_runtime.h +122 -0
  216. package/cpp/core/src/languages/snowball/spanish_stemmer.c +955 -0
  217. package/cpp/core/src/languages/snowball/spanish_stemmer.h +24 -0
  218. package/cpp/core/src/languages/snowball/swedish_stemmer.c +364 -0
  219. package/cpp/core/src/languages/snowball/swedish_stemmer.h +24 -0
  220. package/cpp/core/src/languages/snowball/tamil_stemmer.c +1305 -0
  221. package/cpp/core/src/languages/snowball/tamil_stemmer.h +24 -0
  222. package/cpp/core/src/languages/snowball/turkish_stemmer.c +1700 -0
  223. package/cpp/core/src/languages/snowball/turkish_stemmer.h +24 -0
  224. package/cpp/core/src/languages/snowball/utilities.c +716 -0
  225. package/cpp/core/src/languages/substitutions.c +131 -0
  226. package/cpp/core/src/languages/swahili_stemmer.c +85 -0
  227. package/cpp/core/src/languages/ukrainian_stemmer.c +168 -0
  228. package/cpp/core/src/locks.c +2 -15
  229. package/cpp/core/src/math/apply.c +44 -0
  230. package/cpp/core/src/math/fdlibm.h +16 -0
  231. package/cpp/core/src/math/inverse.c +242 -0
  232. package/cpp/core/src/math/log.c +90 -0
  233. package/cpp/core/src/math/reduce.c +325 -0
  234. package/cpp/core/src/math/trig.c +188 -0
  235. package/cpp/core/src/math/words.h +45 -0
  236. package/cpp/core/src/thread_yield.h +18 -0
  237. package/cpp/core/src/unicode/decompositions.c +310 -0
  238. package/cpp/core/src/unicode/lowercase.c +172 -0
  239. package/cpp/core/src/unicode/properties.c +214 -0
  240. package/cpp/core/src/workspace.c +5 -1
  241. package/lib/engine/analysis.d.ts +3 -0
  242. package/lib/engine/analysis.js +76 -0
  243. package/lib/engine/core.js +5 -0
  244. package/lib/engine/keyword.d.ts +3 -0
  245. package/lib/engine/keyword.js +25 -0
  246. package/lib/specs/core.nitro.d.ts +1 -0
  247. package/nitrogen/generated/shared/c++/HybridNarsilCoreSpec.cpp +1 -0
  248. package/nitrogen/generated/shared/c++/HybridNarsilCoreSpec.hpp +1 -0
  249. package/package.json +4 -3
  250. package/src/engine/analysis.ts +87 -0
  251. package/src/engine/core.ts +6 -0
  252. package/src/engine/keyword.ts +26 -0
  253. package/src/specs/core.nitro.ts +1 -0
@@ -0,0 +1,188 @@
1
+ #include "fdlibm.h"
2
+ #include "words.h"
3
+
4
+ #include <math.h>
5
+ #include <stdint.h>
6
+
7
+ #define PI_OVER_FOUR_HIGH_WORD 0x3FE921FB
8
+ #define TINY_SINE_HIGH_WORD 0x3E400000
9
+ #define TINY_TANGENT_HIGH_WORD 0x3E300000
10
+ #define SMALL_COSINE_HIGH_WORD 0x3FD33333
11
+ #define LARGE_COSINE_HIGH_WORD 0x3FE90000
12
+ #define QUARTER_EXPONENT_STEP 0x00200000
13
+ #define TANGENT_REFLECTION_HIGH_WORD 0x3FE59428
14
+ #define TANGENT_SIGN_SHIFT 30U
15
+ #define TANGENT_SIGN_MASK 2U
16
+ #define QUADRANT_MASK 3
17
+
18
+ static const double half = 5.00000000000000000000e-01;
19
+ static const double two = 2.0;
20
+ static const double large_cosine_quarter = 0.28125;
21
+
22
+ static const double cos1 = 4.16666666666666019037e-02;
23
+ static const double cos2 = -1.38888888888741095749e-03;
24
+ static const double cos3 = 2.48015872894767294178e-05;
25
+ static const double cos4 = -2.75573143513906633035e-07;
26
+ static const double cos5 = 2.08757232129817482790e-09;
27
+ static const double cos6 = -1.13596475577881948265e-11;
28
+
29
+ static const double sin1 = -1.66666666666666324348e-01;
30
+ static const double sin2 = 8.33333333332248946124e-03;
31
+ static const double sin3 = -1.98412698298579493134e-04;
32
+ static const double sin4 = 2.75573137070700676789e-06;
33
+ static const double sin5 = -2.50507602534068634195e-08;
34
+ static const double sin6 = 1.58969099521155010221e-10;
35
+
36
+ static const double tan0 = 3.33333333333334091986e-01;
37
+ static const double tan1 = 1.33333333333201242699e-01;
38
+ static const double tan2 = 5.39682539762260521377e-02;
39
+ static const double tan3 = 2.18694882948595424599e-02;
40
+ static const double tan4 = 8.86323982359930005737e-03;
41
+ static const double tan5 = 3.59207910759131235356e-03;
42
+ static const double tan6 = 1.45620945432529025516e-03;
43
+ static const double tan7 = 5.88041240820264096874e-04;
44
+ static const double tan8 = 2.46463134818469906812e-04;
45
+ static const double tan9 = 7.81794442939557092300e-05;
46
+ static const double tan10 = 7.14072491382608190305e-05;
47
+ static const double tan11 = -1.85586374855275456654e-05;
48
+ static const double tan12 = 2.59073051863633712884e-05;
49
+
50
+ static const double pio4 = 7.85398163397448278999e-01;
51
+ static const double pio4lo = 3.06161699786838301793e-17;
52
+
53
+ static double kernel_cos(const double *angle) {
54
+ double head = angle[0];
55
+ double tail = angle[1];
56
+ int32_t magnitude = high_word(head) & MAGNITUDE_MASK;
57
+ if (magnitude < TINY_SINE_HIGH_WORD && (int32_t)head == 0) { return 1.0; }
58
+ double square = head * head;
59
+ double poly =
60
+ square * (cos1 + (square * (cos2 + (square * (cos3 + (square * (cos4 + (square * (cos5 + (square * cos6))))))))));
61
+ if (magnitude < SMALL_COSINE_HIGH_WORD) { return 1.0 - ((half * square) - ((square * poly) - (head * tail))); }
62
+ double quarter =
63
+ magnitude > LARGE_COSINE_HIGH_WORD ? large_cosine_quarter : from_words(magnitude - QUARTER_EXPONENT_STEP, 0);
64
+ double shifted = (half * square) - quarter;
65
+ double rest = 1.0 - quarter;
66
+ return rest - (shifted - ((square * poly) - (head * tail)));
67
+ }
68
+
69
+ static double kernel_sin(const double *angle, int with_tail) {
70
+ double head = angle[0];
71
+ double tail = angle[1];
72
+ int32_t magnitude = high_word(head) & MAGNITUDE_MASK;
73
+ if (magnitude < TINY_SINE_HIGH_WORD && (int32_t)head == 0) { return head; }
74
+ double square = head * head;
75
+ double cube = square * head;
76
+ double poly = sin2 + (square * (sin3 + (square * (sin4 + (square * (sin5 + (square * sin6)))))));
77
+ if (with_tail == 0) { return head + (cube * (sin1 + (square * poly))); }
78
+ return head - (((square * ((half * tail) - (cube * poly))) - tail) - (cube * sin1));
79
+ }
80
+
81
+ static double careful_reciprocal(const double *parts) {
82
+ double sum = parts[0] + parts[1];
83
+ double sum_head = with_low_word(sum, 0);
84
+ double sum_tail = parts[1] - (sum_head - parts[0]);
85
+ double reciprocal = -1.0 / sum;
86
+ double reciprocal_head = with_low_word(reciprocal, 0);
87
+ double error = 1.0 + (reciprocal_head * sum_head);
88
+ return reciprocal_head + (reciprocal * (error + (reciprocal_head * sum_tail)));
89
+ }
90
+
91
+ static double tiny_tangent(const double *angle, int sign) {
92
+ double head = angle[0];
93
+ int32_t magnitude = high_word(head) & MAGNITUDE_MASK;
94
+ if ((((uint32_t)magnitude | low_word(head)) | (uint32_t)(sign + 1)) == 0U) { return 1.0 / fabs(head); }
95
+ if (sign == 1) { return head; }
96
+ return careful_reciprocal(angle);
97
+ }
98
+
99
+ static double kernel_tan(const double *angle, int sign) {
100
+ double head = angle[0];
101
+ double tail = angle[1];
102
+ int32_t high = high_word(head);
103
+ int32_t magnitude = high & MAGNITUDE_MASK;
104
+ if (magnitude < TINY_TANGENT_HIGH_WORD && (int32_t)head == 0) { return tiny_tangent(angle, sign); }
105
+ int reflected = magnitude >= TANGENT_REFLECTION_HIGH_WORD;
106
+ if (reflected) {
107
+ if (is_negative_word(high)) {
108
+ head = -head;
109
+ tail = -tail;
110
+ }
111
+ double offset = pio4 - head;
112
+ double offset_tail = pio4lo - tail;
113
+ head = offset + offset_tail;
114
+ tail = 0.0;
115
+ }
116
+ double square = head * head;
117
+ double fourth = square * square;
118
+ double odd = tan1 + (fourth * (tan3 + (fourth * (tan5 + (fourth * (tan7 + (fourth * (tan9 + (fourth * tan11)))))))));
119
+ double even =
120
+ square *
121
+ (tan2 + (fourth * (tan4 + (fourth * (tan6 + (fourth * (tan8 + (fourth * (tan10 + (fourth * tan12))))))))));
122
+ double cube = square * head;
123
+ double rest = tail + (square * ((cube * (odd + even)) + tail));
124
+ rest += tan0 * cube;
125
+ double sum = head + rest;
126
+ if (reflected) {
127
+ double turn = (double)sign;
128
+ double direction = (double)(1 - (int32_t)(((uint32_t)high >> TANGENT_SIGN_SHIFT) & TANGENT_SIGN_MASK));
129
+ return direction * (turn - (two * (head - (((sum * sum) / (sum + turn)) - rest))));
130
+ }
131
+ if (sign == 1) { return sum; }
132
+ double parts[2] = {head, rest};
133
+ return careful_reciprocal(parts);
134
+ }
135
+
136
+ double fdlibm_sin(double value) {
137
+ int32_t magnitude = high_word(value) & MAGNITUDE_MASK;
138
+ if (magnitude <= PI_OVER_FOUR_HIGH_WORD) {
139
+ double angle[2] = {value, 0.0};
140
+ return kernel_sin(angle, 0);
141
+ }
142
+ if (magnitude >= INFINITE_HIGH_WORD) { return (double)NAN; }
143
+ double reduced[2] = {0.0, 0.0};
144
+ int32_t turns = fdlibm_rem_pio2(value, reduced);
145
+ switch (turns & QUADRANT_MASK) {
146
+ case 0:
147
+ return kernel_sin(reduced, 1);
148
+ case 1:
149
+ return kernel_cos(reduced);
150
+ case 2:
151
+ return -kernel_sin(reduced, 1);
152
+ default:
153
+ return -kernel_cos(reduced);
154
+ }
155
+ }
156
+
157
+ double fdlibm_cos(double value) {
158
+ int32_t magnitude = high_word(value) & MAGNITUDE_MASK;
159
+ if (magnitude <= PI_OVER_FOUR_HIGH_WORD) {
160
+ double angle[2] = {value, 0.0};
161
+ return kernel_cos(angle);
162
+ }
163
+ if (magnitude >= INFINITE_HIGH_WORD) { return (double)NAN; }
164
+ double reduced[2] = {0.0, 0.0};
165
+ int32_t turns = fdlibm_rem_pio2(value, reduced);
166
+ switch (turns & QUADRANT_MASK) {
167
+ case 0:
168
+ return kernel_cos(reduced);
169
+ case 1:
170
+ return -kernel_sin(reduced, 1);
171
+ case 2:
172
+ return -kernel_cos(reduced);
173
+ default:
174
+ return kernel_sin(reduced, 1);
175
+ }
176
+ }
177
+
178
+ double fdlibm_tan(double value) {
179
+ int32_t magnitude = high_word(value) & MAGNITUDE_MASK;
180
+ if (magnitude <= PI_OVER_FOUR_HIGH_WORD) {
181
+ double angle[2] = {value, 0.0};
182
+ return kernel_tan(angle, 1);
183
+ }
184
+ if (magnitude >= INFINITE_HIGH_WORD) { return (double)NAN; }
185
+ double reduced[2] = {0.0, 0.0};
186
+ int32_t turns = fdlibm_rem_pio2(value, reduced);
187
+ return kernel_tan(reduced, 1 - ((turns & 1) << 1));
188
+ }
@@ -0,0 +1,45 @@
1
+ #ifndef NARSIL_MATH_WORDS_H
2
+ #define NARSIL_MATH_WORDS_H
3
+
4
+ #include <stdint.h>
5
+ #include <string.h>
6
+
7
+ #define WORD_BITS 32U
8
+ #define SIGN_BIT 31U
9
+ #define MAGNITUDE_MASK 0x7FFFFFFF
10
+ #define EXPONENT_SHIFT 20U
11
+ #define EXPONENT_MASK 0x7FFU
12
+ #define INFINITE_HIGH_WORD 0x7FF00000
13
+ #define SMALLEST_NORMAL_HIGH_WORD 0x00100000
14
+
15
+ static inline uint64_t bits_of(double value) {
16
+ uint64_t bits = 0;
17
+ memcpy(&bits, &value, sizeof bits);
18
+ return bits;
19
+ }
20
+
21
+ static inline double double_of(uint64_t bits) {
22
+ double value = 0;
23
+ memcpy(&value, &bits, sizeof value);
24
+ return value;
25
+ }
26
+
27
+ static inline int32_t high_word(double value) { return (int32_t)(uint32_t)(bits_of(value) >> WORD_BITS); }
28
+
29
+ static inline uint32_t low_word(double value) { return (uint32_t)bits_of(value); }
30
+
31
+ static inline double from_words(int32_t high, uint32_t low) {
32
+ return double_of(((uint64_t)(uint32_t)high << WORD_BITS) | low);
33
+ }
34
+
35
+ static inline double with_high_word(double value, int32_t high) { return from_words(high, low_word(value)); }
36
+
37
+ static inline double with_low_word(double value, uint32_t low) { return from_words(high_word(value), low); }
38
+
39
+ static inline int32_t floor_shift(int32_t value, uint32_t shift) {
40
+ return value >= 0 ? value >> shift : -1 - ((-1 - value) >> shift);
41
+ }
42
+
43
+ static inline int is_negative_word(int32_t high) { return (((uint32_t)high >> SIGN_BIT) & 1U) != 0; }
44
+
45
+ #endif
@@ -0,0 +1,18 @@
1
+ #ifndef NARSIL_THREAD_YIELD_H
2
+ #define NARSIL_THREAD_YIELD_H
3
+
4
+ #ifdef _WIN32
5
+ #include <windows.h>
6
+ #else
7
+ #include <sched.h>
8
+ #endif
9
+
10
+ static inline void narsil_yield_thread(void) {
11
+ #ifdef _WIN32
12
+ SwitchToThread();
13
+ #else
14
+ sched_yield();
15
+ #endif
16
+ }
17
+
18
+ #endif
@@ -0,0 +1,310 @@
1
+ #include "../analysis/unicode.h"
2
+
3
+ #include <stdint.h>
4
+
5
+ const uint32_t narsil_unicode_decompositions[6243] = {
6
+ 192, 65, 768, 193, 65, 769, 194, 65, 770, 195, 65, 771, 196, 65, 776, 197, 65, 778, 199, 67, 807, 200, 69, 768, 201,
7
+ 69, 769, 202, 69, 770, 203, 69, 776, 204, 73, 768, 205, 73, 769, 206, 73, 770, 207, 73, 776, 209, 78, 771, 210, 79,
8
+ 768, 211, 79, 769, 212, 79, 770, 213, 79, 771, 214, 79, 776, 217, 85, 768, 218, 85, 769, 219, 85, 770, 220, 85, 776,
9
+ 221, 89, 769, 224, 97, 768, 225, 97, 769, 226, 97, 770, 227, 97, 771, 228, 97, 776, 229, 97, 778, 231, 99, 807, 232,
10
+ 101, 768, 233, 101, 769, 234, 101, 770, 235, 101, 776, 236, 105, 768, 237, 105, 769, 238, 105, 770, 239, 105, 776,
11
+ 241, 110, 771, 242, 111, 768, 243, 111, 769, 244, 111, 770, 245, 111, 771, 246, 111, 776, 249, 117, 768, 250, 117,
12
+ 769, 251, 117, 770, 252, 117, 776, 253, 121, 769, 255, 121, 776, 256, 65, 772, 257, 97, 772, 258, 65, 774, 259, 97,
13
+ 774, 260, 65, 808, 261, 97, 808, 262, 67, 769, 263, 99, 769, 264, 67, 770, 265, 99, 770, 266, 67, 775, 267, 99, 775,
14
+ 268, 67, 780, 269, 99, 780, 270, 68, 780, 271, 100, 780, 274, 69, 772, 275, 101, 772, 276, 69, 774, 277, 101, 774,
15
+ 278, 69, 775, 279, 101, 775, 280, 69, 808, 281, 101, 808, 282, 69, 780, 283, 101, 780, 284, 71, 770, 285, 103, 770,
16
+ 286, 71, 774, 287, 103, 774, 288, 71, 775, 289, 103, 775, 290, 71, 807, 291, 103, 807, 292, 72, 770, 293, 104, 770,
17
+ 296, 73, 771, 297, 105, 771, 298, 73, 772, 299, 105, 772, 300, 73, 774, 301, 105, 774, 302, 73, 808, 303, 105, 808,
18
+ 304, 73, 775, 308, 74, 770, 309, 106, 770, 310, 75, 807, 311, 107, 807, 313, 76, 769, 314, 108, 769, 315, 76, 807,
19
+ 316, 108, 807, 317, 76, 780, 318, 108, 780, 323, 78, 769, 324, 110, 769, 325, 78, 807, 326, 110, 807, 327, 78, 780,
20
+ 328, 110, 780, 332, 79, 772, 333, 111, 772, 334, 79, 774, 335, 111, 774, 336, 79, 779, 337, 111, 779, 340, 82, 769,
21
+ 341, 114, 769, 342, 82, 807, 343, 114, 807, 344, 82, 780, 345, 114, 780, 346, 83, 769, 347, 115, 769, 348, 83, 770,
22
+ 349, 115, 770, 350, 83, 807, 351, 115, 807, 352, 83, 780, 353, 115, 780, 354, 84, 807, 355, 116, 807, 356, 84, 780,
23
+ 357, 116, 780, 360, 85, 771, 361, 117, 771, 362, 85, 772, 363, 117, 772, 364, 85, 774, 365, 117, 774, 366, 85, 778,
24
+ 367, 117, 778, 368, 85, 779, 369, 117, 779, 370, 85, 808, 371, 117, 808, 372, 87, 770, 373, 119, 770, 374, 89, 770,
25
+ 375, 121, 770, 376, 89, 776, 377, 90, 769, 378, 122, 769, 379, 90, 775, 380, 122, 775, 381, 90, 780, 382, 122, 780,
26
+ 416, 79, 795, 417, 111, 795, 431, 85, 795, 432, 117, 795, 461, 65, 780, 462, 97, 780, 463, 73, 780, 464, 105, 780,
27
+ 465, 79, 780, 466, 111, 780, 467, 85, 780, 468, 117, 780, 469, 220, 772, 470, 252, 772, 471, 220, 769, 472, 252, 769,
28
+ 473, 220, 780, 474, 252, 780, 475, 220, 768, 476, 252, 768, 478, 196, 772, 479, 228, 772, 480, 550, 772, 481, 551,
29
+ 772, 482, 198, 772, 483, 230, 772, 486, 71, 780, 487, 103, 780, 488, 75, 780, 489, 107, 780, 490, 79, 808, 491, 111,
30
+ 808, 492, 490, 772, 493, 491, 772, 494, 439, 780, 495, 658, 780, 496, 106, 780, 500, 71, 769, 501, 103, 769, 504, 78,
31
+ 768, 505, 110, 768, 506, 197, 769, 507, 229, 769, 508, 198, 769, 509, 230, 769, 510, 216, 769, 511, 248, 769, 512, 65,
32
+ 783, 513, 97, 783, 514, 65, 785, 515, 97, 785, 516, 69, 783, 517, 101, 783, 518, 69, 785, 519, 101, 785, 520, 73, 783,
33
+ 521, 105, 783, 522, 73, 785, 523, 105, 785, 524, 79, 783, 525, 111, 783, 526, 79, 785, 527, 111, 785, 528, 82, 783,
34
+ 529, 114, 783, 530, 82, 785, 531, 114, 785, 532, 85, 783, 533, 117, 783, 534, 85, 785, 535, 117, 785, 536, 83, 806,
35
+ 537, 115, 806, 538, 84, 806, 539, 116, 806, 542, 72, 780, 543, 104, 780, 550, 65, 775, 551, 97, 775, 552, 69, 807,
36
+ 553, 101, 807, 554, 214, 772, 555, 246, 772, 556, 213, 772, 557, 245, 772, 558, 79, 775, 559, 111, 775, 560, 558, 772,
37
+ 561, 559, 772, 562, 89, 772, 563, 121, 772, 832, 768, 0, 833, 769, 0, 835, 787, 0, 836, 776, 769, 884, 697, 0, 894,
38
+ 59, 0, 901, 168, 769, 902, 913, 769, 903, 183, 0, 904, 917, 769, 905, 919, 769, 906, 921, 769, 908, 927, 769, 910,
39
+ 933, 769, 911, 937, 769, 912, 970, 769, 938, 921, 776, 939, 933, 776, 940, 945, 769, 941, 949, 769, 942, 951, 769,
40
+ 943, 953, 769, 944, 971, 769, 970, 953, 776, 971, 965, 776, 972, 959, 769, 973, 965, 769, 974, 969, 769, 979, 978,
41
+ 769, 980, 978, 776, 1024, 1045, 768, 1025, 1045, 776, 1027, 1043, 769, 1031, 1030, 776, 1036, 1050, 769, 1037, 1048,
42
+ 768, 1038, 1059, 774, 1049, 1048, 774, 1081, 1080, 774, 1104, 1077, 768, 1105, 1077, 776, 1107, 1075, 769, 1111, 1110,
43
+ 776, 1116, 1082, 769, 1117, 1080, 768, 1118, 1091, 774, 1142, 1140, 783, 1143, 1141, 783, 1217, 1046, 774, 1218, 1078,
44
+ 774, 1232, 1040, 774, 1233, 1072, 774, 1234, 1040, 776, 1235, 1072, 776, 1238, 1045, 774, 1239, 1077, 774, 1242, 1240,
45
+ 776, 1243, 1241, 776, 1244, 1046, 776, 1245, 1078, 776, 1246, 1047, 776, 1247, 1079, 776, 1250, 1048, 772, 1251, 1080,
46
+ 772, 1252, 1048, 776, 1253, 1080, 776, 1254, 1054, 776, 1255, 1086, 776, 1258, 1256, 776, 1259, 1257, 776, 1260, 1069,
47
+ 776, 1261, 1101, 776, 1262, 1059, 772, 1263, 1091, 772, 1264, 1059, 776, 1265, 1091, 776, 1266, 1059, 779, 1267, 1091,
48
+ 779, 1268, 1063, 776, 1269, 1095, 776, 1272, 1067, 776, 1273, 1099, 776, 1570, 1575, 1619, 1571, 1575, 1620, 1572,
49
+ 1608, 1620, 1573, 1575, 1621, 1574, 1610, 1620, 1728, 1749, 1620, 1730, 1729, 1620, 1747, 1746, 1620, 2345, 2344,
50
+ 2364, 2353, 2352, 2364, 2356, 2355, 2364, 2392, 2325, 2364, 2393, 2326, 2364, 2394, 2327, 2364, 2395, 2332, 2364,
51
+ 2396, 2337, 2364, 2397, 2338, 2364, 2398, 2347, 2364, 2399, 2351, 2364, 2507, 2503, 2494, 2508, 2503, 2519, 2524,
52
+ 2465, 2492, 2525, 2466, 2492, 2527, 2479, 2492, 2611, 2610, 2620, 2614, 2616, 2620, 2649, 2582, 2620, 2650, 2583,
53
+ 2620, 2651, 2588, 2620, 2654, 2603, 2620, 2888, 2887, 2902, 2891, 2887, 2878, 2892, 2887, 2903, 2908, 2849, 2876,
54
+ 2909, 2850, 2876, 2964, 2962, 3031, 3018, 3014, 3006, 3019, 3015, 3006, 3020, 3014, 3031, 3144, 3142, 3158, 3264,
55
+ 3263, 3285, 3271, 3270, 3285, 3272, 3270, 3286, 3274, 3270, 3266, 3275, 3274, 3285, 3402, 3398, 3390, 3403, 3399,
56
+ 3390, 3404, 3398, 3415, 3546, 3545, 3530, 3548, 3545, 3535, 3549, 3548, 3530, 3550, 3545, 3551, 3907, 3906, 4023,
57
+ 3917, 3916, 4023, 3922, 3921, 4023, 3927, 3926, 4023, 3932, 3931, 4023, 3945, 3904, 4021, 3955, 3953, 3954, 3957,
58
+ 3953, 3956, 3958, 4018, 3968, 3960, 4019, 3968, 3969, 3953, 3968, 3987, 3986, 4023, 3997, 3996, 4023, 4002, 4001,
59
+ 4023, 4007, 4006, 4023, 4012, 4011, 4023, 4025, 3984, 4021, 4134, 4133, 4142, 6918, 6917, 6965, 6920, 6919, 6965,
60
+ 6922, 6921, 6965, 6924, 6923, 6965, 6926, 6925, 6965, 6930, 6929, 6965, 6971, 6970, 6965, 6973, 6972, 6965, 6976,
61
+ 6974, 6965, 6977, 6975, 6965, 6979, 6978, 6965, 7680, 65, 805, 7681, 97, 805, 7682, 66, 775, 7683, 98, 775, 7684, 66,
62
+ 803, 7685, 98, 803, 7686, 66, 817, 7687, 98, 817, 7688, 199, 769, 7689, 231, 769, 7690, 68, 775, 7691, 100, 775, 7692,
63
+ 68, 803, 7693, 100, 803, 7694, 68, 817, 7695, 100, 817, 7696, 68, 807, 7697, 100, 807, 7698, 68, 813, 7699, 100, 813,
64
+ 7700, 274, 768, 7701, 275, 768, 7702, 274, 769, 7703, 275, 769, 7704, 69, 813, 7705, 101, 813, 7706, 69, 816, 7707,
65
+ 101, 816, 7708, 552, 774, 7709, 553, 774, 7710, 70, 775, 7711, 102, 775, 7712, 71, 772, 7713, 103, 772, 7714, 72, 775,
66
+ 7715, 104, 775, 7716, 72, 803, 7717, 104, 803, 7718, 72, 776, 7719, 104, 776, 7720, 72, 807, 7721, 104, 807, 7722, 72,
67
+ 814, 7723, 104, 814, 7724, 73, 816, 7725, 105, 816, 7726, 207, 769, 7727, 239, 769, 7728, 75, 769, 7729, 107, 769,
68
+ 7730, 75, 803, 7731, 107, 803, 7732, 75, 817, 7733, 107, 817, 7734, 76, 803, 7735, 108, 803, 7736, 7734, 772, 7737,
69
+ 7735, 772, 7738, 76, 817, 7739, 108, 817, 7740, 76, 813, 7741, 108, 813, 7742, 77, 769, 7743, 109, 769, 7744, 77, 775,
70
+ 7745, 109, 775, 7746, 77, 803, 7747, 109, 803, 7748, 78, 775, 7749, 110, 775, 7750, 78, 803, 7751, 110, 803, 7752, 78,
71
+ 817, 7753, 110, 817, 7754, 78, 813, 7755, 110, 813, 7756, 213, 769, 7757, 245, 769, 7758, 213, 776, 7759, 245, 776,
72
+ 7760, 332, 768, 7761, 333, 768, 7762, 332, 769, 7763, 333, 769, 7764, 80, 769, 7765, 112, 769, 7766, 80, 775, 7767,
73
+ 112, 775, 7768, 82, 775, 7769, 114, 775, 7770, 82, 803, 7771, 114, 803, 7772, 7770, 772, 7773, 7771, 772, 7774, 82,
74
+ 817, 7775, 114, 817, 7776, 83, 775, 7777, 115, 775, 7778, 83, 803, 7779, 115, 803, 7780, 346, 775, 7781, 347, 775,
75
+ 7782, 352, 775, 7783, 353, 775, 7784, 7778, 775, 7785, 7779, 775, 7786, 84, 775, 7787, 116, 775, 7788, 84, 803, 7789,
76
+ 116, 803, 7790, 84, 817, 7791, 116, 817, 7792, 84, 813, 7793, 116, 813, 7794, 85, 804, 7795, 117, 804, 7796, 85, 816,
77
+ 7797, 117, 816, 7798, 85, 813, 7799, 117, 813, 7800, 360, 769, 7801, 361, 769, 7802, 362, 776, 7803, 363, 776, 7804,
78
+ 86, 771, 7805, 118, 771, 7806, 86, 803, 7807, 118, 803, 7808, 87, 768, 7809, 119, 768, 7810, 87, 769, 7811, 119, 769,
79
+ 7812, 87, 776, 7813, 119, 776, 7814, 87, 775, 7815, 119, 775, 7816, 87, 803, 7817, 119, 803, 7818, 88, 775, 7819, 120,
80
+ 775, 7820, 88, 776, 7821, 120, 776, 7822, 89, 775, 7823, 121, 775, 7824, 90, 770, 7825, 122, 770, 7826, 90, 803, 7827,
81
+ 122, 803, 7828, 90, 817, 7829, 122, 817, 7830, 104, 817, 7831, 116, 776, 7832, 119, 778, 7833, 121, 778, 7835, 383,
82
+ 775, 7840, 65, 803, 7841, 97, 803, 7842, 65, 777, 7843, 97, 777, 7844, 194, 769, 7845, 226, 769, 7846, 194, 768, 7847,
83
+ 226, 768, 7848, 194, 777, 7849, 226, 777, 7850, 194, 771, 7851, 226, 771, 7852, 7840, 770, 7853, 7841, 770, 7854, 258,
84
+ 769, 7855, 259, 769, 7856, 258, 768, 7857, 259, 768, 7858, 258, 777, 7859, 259, 777, 7860, 258, 771, 7861, 259, 771,
85
+ 7862, 7840, 774, 7863, 7841, 774, 7864, 69, 803, 7865, 101, 803, 7866, 69, 777, 7867, 101, 777, 7868, 69, 771, 7869,
86
+ 101, 771, 7870, 202, 769, 7871, 234, 769, 7872, 202, 768, 7873, 234, 768, 7874, 202, 777, 7875, 234, 777, 7876, 202,
87
+ 771, 7877, 234, 771, 7878, 7864, 770, 7879, 7865, 770, 7880, 73, 777, 7881, 105, 777, 7882, 73, 803, 7883, 105, 803,
88
+ 7884, 79, 803, 7885, 111, 803, 7886, 79, 777, 7887, 111, 777, 7888, 212, 769, 7889, 244, 769, 7890, 212, 768, 7891,
89
+ 244, 768, 7892, 212, 777, 7893, 244, 777, 7894, 212, 771, 7895, 244, 771, 7896, 7884, 770, 7897, 7885, 770, 7898, 416,
90
+ 769, 7899, 417, 769, 7900, 416, 768, 7901, 417, 768, 7902, 416, 777, 7903, 417, 777, 7904, 416, 771, 7905, 417, 771,
91
+ 7906, 416, 803, 7907, 417, 803, 7908, 85, 803, 7909, 117, 803, 7910, 85, 777, 7911, 117, 777, 7912, 431, 769, 7913,
92
+ 432, 769, 7914, 431, 768, 7915, 432, 768, 7916, 431, 777, 7917, 432, 777, 7918, 431, 771, 7919, 432, 771, 7920, 431,
93
+ 803, 7921, 432, 803, 7922, 89, 768, 7923, 121, 768, 7924, 89, 803, 7925, 121, 803, 7926, 89, 777, 7927, 121, 777,
94
+ 7928, 89, 771, 7929, 121, 771, 7936, 945, 787, 7937, 945, 788, 7938, 7936, 768, 7939, 7937, 768, 7940, 7936, 769,
95
+ 7941, 7937, 769, 7942, 7936, 834, 7943, 7937, 834, 7944, 913, 787, 7945, 913, 788, 7946, 7944, 768, 7947, 7945, 768,
96
+ 7948, 7944, 769, 7949, 7945, 769, 7950, 7944, 834, 7951, 7945, 834, 7952, 949, 787, 7953, 949, 788, 7954, 7952, 768,
97
+ 7955, 7953, 768, 7956, 7952, 769, 7957, 7953, 769, 7960, 917, 787, 7961, 917, 788, 7962, 7960, 768, 7963, 7961, 768,
98
+ 7964, 7960, 769, 7965, 7961, 769, 7968, 951, 787, 7969, 951, 788, 7970, 7968, 768, 7971, 7969, 768, 7972, 7968, 769,
99
+ 7973, 7969, 769, 7974, 7968, 834, 7975, 7969, 834, 7976, 919, 787, 7977, 919, 788, 7978, 7976, 768, 7979, 7977, 768,
100
+ 7980, 7976, 769, 7981, 7977, 769, 7982, 7976, 834, 7983, 7977, 834, 7984, 953, 787, 7985, 953, 788, 7986, 7984, 768,
101
+ 7987, 7985, 768, 7988, 7984, 769, 7989, 7985, 769, 7990, 7984, 834, 7991, 7985, 834, 7992, 921, 787, 7993, 921, 788,
102
+ 7994, 7992, 768, 7995, 7993, 768, 7996, 7992, 769, 7997, 7993, 769, 7998, 7992, 834, 7999, 7993, 834, 8000, 959, 787,
103
+ 8001, 959, 788, 8002, 8000, 768, 8003, 8001, 768, 8004, 8000, 769, 8005, 8001, 769, 8008, 927, 787, 8009, 927, 788,
104
+ 8010, 8008, 768, 8011, 8009, 768, 8012, 8008, 769, 8013, 8009, 769, 8016, 965, 787, 8017, 965, 788, 8018, 8016, 768,
105
+ 8019, 8017, 768, 8020, 8016, 769, 8021, 8017, 769, 8022, 8016, 834, 8023, 8017, 834, 8025, 933, 788, 8027, 8025, 768,
106
+ 8029, 8025, 769, 8031, 8025, 834, 8032, 969, 787, 8033, 969, 788, 8034, 8032, 768, 8035, 8033, 768, 8036, 8032, 769,
107
+ 8037, 8033, 769, 8038, 8032, 834, 8039, 8033, 834, 8040, 937, 787, 8041, 937, 788, 8042, 8040, 768, 8043, 8041, 768,
108
+ 8044, 8040, 769, 8045, 8041, 769, 8046, 8040, 834, 8047, 8041, 834, 8048, 945, 768, 8049, 940, 0, 8050, 949, 768,
109
+ 8051, 941, 0, 8052, 951, 768, 8053, 942, 0, 8054, 953, 768, 8055, 943, 0, 8056, 959, 768, 8057, 972, 0, 8058, 965,
110
+ 768, 8059, 973, 0, 8060, 969, 768, 8061, 974, 0, 8064, 7936, 837, 8065, 7937, 837, 8066, 7938, 837, 8067, 7939, 837,
111
+ 8068, 7940, 837, 8069, 7941, 837, 8070, 7942, 837, 8071, 7943, 837, 8072, 7944, 837, 8073, 7945, 837, 8074, 7946, 837,
112
+ 8075, 7947, 837, 8076, 7948, 837, 8077, 7949, 837, 8078, 7950, 837, 8079, 7951, 837, 8080, 7968, 837, 8081, 7969, 837,
113
+ 8082, 7970, 837, 8083, 7971, 837, 8084, 7972, 837, 8085, 7973, 837, 8086, 7974, 837, 8087, 7975, 837, 8088, 7976, 837,
114
+ 8089, 7977, 837, 8090, 7978, 837, 8091, 7979, 837, 8092, 7980, 837, 8093, 7981, 837, 8094, 7982, 837, 8095, 7983, 837,
115
+ 8096, 8032, 837, 8097, 8033, 837, 8098, 8034, 837, 8099, 8035, 837, 8100, 8036, 837, 8101, 8037, 837, 8102, 8038, 837,
116
+ 8103, 8039, 837, 8104, 8040, 837, 8105, 8041, 837, 8106, 8042, 837, 8107, 8043, 837, 8108, 8044, 837, 8109, 8045, 837,
117
+ 8110, 8046, 837, 8111, 8047, 837, 8112, 945, 774, 8113, 945, 772, 8114, 8048, 837, 8115, 945, 837, 8116, 940, 837,
118
+ 8118, 945, 834, 8119, 8118, 837, 8120, 913, 774, 8121, 913, 772, 8122, 913, 768, 8123, 902, 0, 8124, 913, 837, 8126,
119
+ 953, 0, 8129, 168, 834, 8130, 8052, 837, 8131, 951, 837, 8132, 942, 837, 8134, 951, 834, 8135, 8134, 837, 8136, 917,
120
+ 768, 8137, 904, 0, 8138, 919, 768, 8139, 905, 0, 8140, 919, 837, 8141, 8127, 768, 8142, 8127, 769, 8143, 8127, 834,
121
+ 8144, 953, 774, 8145, 953, 772, 8146, 970, 768, 8147, 912, 0, 8150, 953, 834, 8151, 970, 834, 8152, 921, 774, 8153,
122
+ 921, 772, 8154, 921, 768, 8155, 906, 0, 8157, 8190, 768, 8158, 8190, 769, 8159, 8190, 834, 8160, 965, 774, 8161, 965,
123
+ 772, 8162, 971, 768, 8163, 944, 0, 8164, 961, 787, 8165, 961, 788, 8166, 965, 834, 8167, 971, 834, 8168, 933, 774,
124
+ 8169, 933, 772, 8170, 933, 768, 8171, 910, 0, 8172, 929, 788, 8173, 168, 768, 8174, 901, 0, 8175, 96, 0, 8178, 8060,
125
+ 837, 8179, 969, 837, 8180, 974, 837, 8182, 969, 834, 8183, 8182, 837, 8184, 927, 768, 8185, 908, 0, 8186, 937, 768,
126
+ 8187, 911, 0, 8188, 937, 837, 8189, 180, 0, 8192, 8194, 0, 8193, 8195, 0, 8486, 937, 0, 8490, 75, 0, 8491, 197, 0,
127
+ 8602, 8592, 824, 8603, 8594, 824, 8622, 8596, 824, 8653, 8656, 824, 8654, 8660, 824, 8655, 8658, 824, 8708, 8707, 824,
128
+ 8713, 8712, 824, 8716, 8715, 824, 8740, 8739, 824, 8742, 8741, 824, 8769, 8764, 824, 8772, 8771, 824, 8775, 8773, 824,
129
+ 8777, 8776, 824, 8800, 61, 824, 8802, 8801, 824, 8813, 8781, 824, 8814, 60, 824, 8815, 62, 824, 8816, 8804, 824, 8817,
130
+ 8805, 824, 8820, 8818, 824, 8821, 8819, 824, 8824, 8822, 824, 8825, 8823, 824, 8832, 8826, 824, 8833, 8827, 824, 8836,
131
+ 8834, 824, 8837, 8835, 824, 8840, 8838, 824, 8841, 8839, 824, 8876, 8866, 824, 8877, 8872, 824, 8878, 8873, 824, 8879,
132
+ 8875, 824, 8928, 8828, 824, 8929, 8829, 824, 8930, 8849, 824, 8931, 8850, 824, 8938, 8882, 824, 8939, 8883, 824, 8940,
133
+ 8884, 824, 8941, 8885, 824, 9001, 12296, 0, 9002, 12297, 0, 10972, 10973, 824, 12364, 12363, 12441, 12366, 12365,
134
+ 12441, 12368, 12367, 12441, 12370, 12369, 12441, 12372, 12371, 12441, 12374, 12373, 12441, 12376, 12375, 12441, 12378,
135
+ 12377, 12441, 12380, 12379, 12441, 12382, 12381, 12441, 12384, 12383, 12441, 12386, 12385, 12441, 12389, 12388, 12441,
136
+ 12391, 12390, 12441, 12393, 12392, 12441, 12400, 12399, 12441, 12401, 12399, 12442, 12403, 12402, 12441, 12404, 12402,
137
+ 12442, 12406, 12405, 12441, 12407, 12405, 12442, 12409, 12408, 12441, 12410, 12408, 12442, 12412, 12411, 12441, 12413,
138
+ 12411, 12442, 12436, 12358, 12441, 12446, 12445, 12441, 12460, 12459, 12441, 12462, 12461, 12441, 12464, 12463, 12441,
139
+ 12466, 12465, 12441, 12468, 12467, 12441, 12470, 12469, 12441, 12472, 12471, 12441, 12474, 12473, 12441, 12476, 12475,
140
+ 12441, 12478, 12477, 12441, 12480, 12479, 12441, 12482, 12481, 12441, 12485, 12484, 12441, 12487, 12486, 12441, 12489,
141
+ 12488, 12441, 12496, 12495, 12441, 12497, 12495, 12442, 12499, 12498, 12441, 12500, 12498, 12442, 12502, 12501, 12441,
142
+ 12503, 12501, 12442, 12505, 12504, 12441, 12506, 12504, 12442, 12508, 12507, 12441, 12509, 12507, 12442, 12532, 12454,
143
+ 12441, 12535, 12527, 12441, 12536, 12528, 12441, 12537, 12529, 12441, 12538, 12530, 12441, 12542, 12541, 12441, 63744,
144
+ 35912, 0, 63745, 26356, 0, 63746, 36554, 0, 63747, 36040, 0, 63748, 28369, 0, 63749, 20018, 0, 63750, 21477, 0, 63751,
145
+ 40860, 0, 63752, 40860, 0, 63753, 22865, 0, 63754, 37329, 0, 63755, 21895, 0, 63756, 22856, 0, 63757, 25078, 0, 63758,
146
+ 30313, 0, 63759, 32645, 0, 63760, 34367, 0, 63761, 34746, 0, 63762, 35064, 0, 63763, 37007, 0, 63764, 27138, 0, 63765,
147
+ 27931, 0, 63766, 28889, 0, 63767, 29662, 0, 63768, 33853, 0, 63769, 37226, 0, 63770, 39409, 0, 63771, 20098, 0, 63772,
148
+ 21365, 0, 63773, 27396, 0, 63774, 29211, 0, 63775, 34349, 0, 63776, 40478, 0, 63777, 23888, 0, 63778, 28651, 0, 63779,
149
+ 34253, 0, 63780, 35172, 0, 63781, 25289, 0, 63782, 33240, 0, 63783, 34847, 0, 63784, 24266, 0, 63785, 26391, 0, 63786,
150
+ 28010, 0, 63787, 29436, 0, 63788, 37070, 0, 63789, 20358, 0, 63790, 20919, 0, 63791, 21214, 0, 63792, 25796, 0, 63793,
151
+ 27347, 0, 63794, 29200, 0, 63795, 30439, 0, 63796, 32769, 0, 63797, 34310, 0, 63798, 34396, 0, 63799, 36335, 0, 63800,
152
+ 38706, 0, 63801, 39791, 0, 63802, 40442, 0, 63803, 30860, 0, 63804, 31103, 0, 63805, 32160, 0, 63806, 33737, 0, 63807,
153
+ 37636, 0, 63808, 40575, 0, 63809, 35542, 0, 63810, 22751, 0, 63811, 24324, 0, 63812, 31840, 0, 63813, 32894, 0, 63814,
154
+ 29282, 0, 63815, 30922, 0, 63816, 36034, 0, 63817, 38647, 0, 63818, 22744, 0, 63819, 23650, 0, 63820, 27155, 0, 63821,
155
+ 28122, 0, 63822, 28431, 0, 63823, 32047, 0, 63824, 32311, 0, 63825, 38475, 0, 63826, 21202, 0, 63827, 32907, 0, 63828,
156
+ 20956, 0, 63829, 20940, 0, 63830, 31260, 0, 63831, 32190, 0, 63832, 33777, 0, 63833, 38517, 0, 63834, 35712, 0, 63835,
157
+ 25295, 0, 63836, 27138, 0, 63837, 35582, 0, 63838, 20025, 0, 63839, 23527, 0, 63840, 24594, 0, 63841, 29575, 0, 63842,
158
+ 30064, 0, 63843, 21271, 0, 63844, 30971, 0, 63845, 20415, 0, 63846, 24489, 0, 63847, 19981, 0, 63848, 27852, 0, 63849,
159
+ 25976, 0, 63850, 32034, 0, 63851, 21443, 0, 63852, 22622, 0, 63853, 30465, 0, 63854, 33865, 0, 63855, 35498, 0, 63856,
160
+ 27578, 0, 63857, 36784, 0, 63858, 27784, 0, 63859, 25342, 0, 63860, 33509, 0, 63861, 25504, 0, 63862, 30053, 0, 63863,
161
+ 20142, 0, 63864, 20841, 0, 63865, 20937, 0, 63866, 26753, 0, 63867, 31975, 0, 63868, 33391, 0, 63869, 35538, 0, 63870,
162
+ 37327, 0, 63871, 21237, 0, 63872, 21570, 0, 63873, 22899, 0, 63874, 24300, 0, 63875, 26053, 0, 63876, 28670, 0, 63877,
163
+ 31018, 0, 63878, 38317, 0, 63879, 39530, 0, 63880, 40599, 0, 63881, 40654, 0, 63882, 21147, 0, 63883, 26310, 0, 63884,
164
+ 27511, 0, 63885, 36706, 0, 63886, 24180, 0, 63887, 24976, 0, 63888, 25088, 0, 63889, 25754, 0, 63890, 28451, 0, 63891,
165
+ 29001, 0, 63892, 29833, 0, 63893, 31178, 0, 63894, 32244, 0, 63895, 32879, 0, 63896, 36646, 0, 63897, 34030, 0, 63898,
166
+ 36899, 0, 63899, 37706, 0, 63900, 21015, 0, 63901, 21155, 0, 63902, 21693, 0, 63903, 28872, 0, 63904, 35010, 0, 63905,
167
+ 35498, 0, 63906, 24265, 0, 63907, 24565, 0, 63908, 25467, 0, 63909, 27566, 0, 63910, 31806, 0, 63911, 29557, 0, 63912,
168
+ 20196, 0, 63913, 22265, 0, 63914, 23527, 0, 63915, 23994, 0, 63916, 24604, 0, 63917, 29618, 0, 63918, 29801, 0, 63919,
169
+ 32666, 0, 63920, 32838, 0, 63921, 37428, 0, 63922, 38646, 0, 63923, 38728, 0, 63924, 38936, 0, 63925, 20363, 0, 63926,
170
+ 31150, 0, 63927, 37300, 0, 63928, 38584, 0, 63929, 24801, 0, 63930, 20102, 0, 63931, 20698, 0, 63932, 23534, 0, 63933,
171
+ 23615, 0, 63934, 26009, 0, 63935, 27138, 0, 63936, 29134, 0, 63937, 30274, 0, 63938, 34044, 0, 63939, 36988, 0, 63940,
172
+ 40845, 0, 63941, 26248, 0, 63942, 38446, 0, 63943, 21129, 0, 63944, 26491, 0, 63945, 26611, 0, 63946, 27969, 0, 63947,
173
+ 28316, 0, 63948, 29705, 0, 63949, 30041, 0, 63950, 30827, 0, 63951, 32016, 0, 63952, 39006, 0, 63953, 20845, 0, 63954,
174
+ 25134, 0, 63955, 38520, 0, 63956, 20523, 0, 63957, 23833, 0, 63958, 28138, 0, 63959, 36650, 0, 63960, 24459, 0, 63961,
175
+ 24900, 0, 63962, 26647, 0, 63963, 29575, 0, 63964, 38534, 0, 63965, 21033, 0, 63966, 21519, 0, 63967, 23653, 0, 63968,
176
+ 26131, 0, 63969, 26446, 0, 63970, 26792, 0, 63971, 27877, 0, 63972, 29702, 0, 63973, 30178, 0, 63974, 32633, 0, 63975,
177
+ 35023, 0, 63976, 35041, 0, 63977, 37324, 0, 63978, 38626, 0, 63979, 21311, 0, 63980, 28346, 0, 63981, 21533, 0, 63982,
178
+ 29136, 0, 63983, 29848, 0, 63984, 34298, 0, 63985, 38563, 0, 63986, 40023, 0, 63987, 40607, 0, 63988, 26519, 0, 63989,
179
+ 28107, 0, 63990, 33256, 0, 63991, 31435, 0, 63992, 31520, 0, 63993, 31890, 0, 63994, 29376, 0, 63995, 28825, 0, 63996,
180
+ 35672, 0, 63997, 20160, 0, 63998, 33590, 0, 63999, 21050, 0, 64000, 20999, 0, 64001, 24230, 0, 64002, 25299, 0, 64003,
181
+ 31958, 0, 64004, 23429, 0, 64005, 27934, 0, 64006, 26292, 0, 64007, 36667, 0, 64008, 34892, 0, 64009, 38477, 0, 64010,
182
+ 35211, 0, 64011, 24275, 0, 64012, 20800, 0, 64013, 21952, 0, 64016, 22618, 0, 64018, 26228, 0, 64021, 20958, 0, 64022,
183
+ 29482, 0, 64023, 30410, 0, 64024, 31036, 0, 64025, 31070, 0, 64026, 31077, 0, 64027, 31119, 0, 64028, 38742, 0, 64029,
184
+ 31934, 0, 64030, 32701, 0, 64032, 34322, 0, 64034, 35576, 0, 64037, 36920, 0, 64038, 37117, 0, 64042, 39151, 0, 64043,
185
+ 39164, 0, 64044, 39208, 0, 64045, 40372, 0, 64046, 37086, 0, 64047, 38583, 0, 64048, 20398, 0, 64049, 20711, 0, 64050,
186
+ 20813, 0, 64051, 21193, 0, 64052, 21220, 0, 64053, 21329, 0, 64054, 21917, 0, 64055, 22022, 0, 64056, 22120, 0, 64057,
187
+ 22592, 0, 64058, 22696, 0, 64059, 23652, 0, 64060, 23662, 0, 64061, 24724, 0, 64062, 24936, 0, 64063, 24974, 0, 64064,
188
+ 25074, 0, 64065, 25935, 0, 64066, 26082, 0, 64067, 26257, 0, 64068, 26757, 0, 64069, 28023, 0, 64070, 28186, 0, 64071,
189
+ 28450, 0, 64072, 29038, 0, 64073, 29227, 0, 64074, 29730, 0, 64075, 30865, 0, 64076, 31038, 0, 64077, 31049, 0, 64078,
190
+ 31048, 0, 64079, 31056, 0, 64080, 31062, 0, 64081, 31069, 0, 64082, 31117, 0, 64083, 31118, 0, 64084, 31296, 0, 64085,
191
+ 31361, 0, 64086, 31680, 0, 64087, 32244, 0, 64088, 32265, 0, 64089, 32321, 0, 64090, 32626, 0, 64091, 32773, 0, 64092,
192
+ 33261, 0, 64093, 33401, 0, 64094, 33401, 0, 64095, 33879, 0, 64096, 35088, 0, 64097, 35222, 0, 64098, 35585, 0, 64099,
193
+ 35641, 0, 64100, 36051, 0, 64101, 36104, 0, 64102, 36790, 0, 64103, 36920, 0, 64104, 38627, 0, 64105, 38911, 0, 64106,
194
+ 38971, 0, 64107, 24693, 0, 64108, 148206, 0, 64109, 33304, 0, 64112, 20006, 0, 64113, 20917, 0, 64114, 20840, 0,
195
+ 64115, 20352, 0, 64116, 20805, 0, 64117, 20864, 0, 64118, 21191, 0, 64119, 21242, 0, 64120, 21917, 0, 64121, 21845, 0,
196
+ 64122, 21913, 0, 64123, 21986, 0, 64124, 22618, 0, 64125, 22707, 0, 64126, 22852, 0, 64127, 22868, 0, 64128, 23138, 0,
197
+ 64129, 23336, 0, 64130, 24274, 0, 64131, 24281, 0, 64132, 24425, 0, 64133, 24493, 0, 64134, 24792, 0, 64135, 24910, 0,
198
+ 64136, 24840, 0, 64137, 24974, 0, 64138, 24928, 0, 64139, 25074, 0, 64140, 25140, 0, 64141, 25540, 0, 64142, 25628, 0,
199
+ 64143, 25682, 0, 64144, 25942, 0, 64145, 26228, 0, 64146, 26391, 0, 64147, 26395, 0, 64148, 26454, 0, 64149, 27513, 0,
200
+ 64150, 27578, 0, 64151, 27969, 0, 64152, 28379, 0, 64153, 28363, 0, 64154, 28450, 0, 64155, 28702, 0, 64156, 29038, 0,
201
+ 64157, 30631, 0, 64158, 29237, 0, 64159, 29359, 0, 64160, 29482, 0, 64161, 29809, 0, 64162, 29958, 0, 64163, 30011, 0,
202
+ 64164, 30237, 0, 64165, 30239, 0, 64166, 30410, 0, 64167, 30427, 0, 64168, 30452, 0, 64169, 30538, 0, 64170, 30528, 0,
203
+ 64171, 30924, 0, 64172, 31409, 0, 64173, 31680, 0, 64174, 31867, 0, 64175, 32091, 0, 64176, 32244, 0, 64177, 32574, 0,
204
+ 64178, 32773, 0, 64179, 33618, 0, 64180, 33775, 0, 64181, 34681, 0, 64182, 35137, 0, 64183, 35206, 0, 64184, 35222, 0,
205
+ 64185, 35519, 0, 64186, 35576, 0, 64187, 35531, 0, 64188, 35585, 0, 64189, 35582, 0, 64190, 35565, 0, 64191, 35641, 0,
206
+ 64192, 35722, 0, 64193, 36104, 0, 64194, 36664, 0, 64195, 36978, 0, 64196, 37273, 0, 64197, 37494, 0, 64198, 38524, 0,
207
+ 64199, 38627, 0, 64200, 38742, 0, 64201, 38875, 0, 64202, 38911, 0, 64203, 38923, 0, 64204, 38971, 0, 64205, 39698, 0,
208
+ 64206, 40860, 0, 64207, 141386, 0, 64208, 141380, 0, 64209, 144341, 0, 64210, 15261, 0, 64211, 16408, 0, 64212, 16441,
209
+ 0, 64213, 152137, 0, 64214, 154832, 0, 64215, 163539, 0, 64216, 40771, 0, 64217, 40846, 0, 64285, 1497, 1460, 64287,
210
+ 1522, 1463, 64298, 1513, 1473, 64299, 1513, 1474, 64300, 64329, 1473, 64301, 64329, 1474, 64302, 1488, 1463, 64303,
211
+ 1488, 1464, 64304, 1488, 1468, 64305, 1489, 1468, 64306, 1490, 1468, 64307, 1491, 1468, 64308, 1492, 1468, 64309,
212
+ 1493, 1468, 64310, 1494, 1468, 64312, 1496, 1468, 64313, 1497, 1468, 64314, 1498, 1468, 64315, 1499, 1468, 64316,
213
+ 1500, 1468, 64318, 1502, 1468, 64320, 1504, 1468, 64321, 1505, 1468, 64323, 1507, 1468, 64324, 1508, 1468, 64326,
214
+ 1510, 1468, 64327, 1511, 1468, 64328, 1512, 1468, 64329, 1513, 1468, 64330, 1514, 1468, 64331, 1493, 1465, 64332,
215
+ 1489, 1471, 64333, 1499, 1471, 64334, 1508, 1471, 67017, 67026, 775, 67044, 67034, 775, 69786, 69785, 69818, 69788,
216
+ 69787, 69818, 69803, 69797, 69818, 69934, 69937, 69927, 69935, 69938, 69927, 70475, 70471, 70462, 70476, 70471, 70487,
217
+ 70531, 70530, 70601, 70533, 70532, 70587, 70542, 70539, 70594, 70545, 70544, 70601, 70597, 70594, 70594, 70599, 70594,
218
+ 70584, 70600, 70594, 70601, 70843, 70841, 70842, 70844, 70841, 70832, 70846, 70841, 70845, 71098, 71096, 71087, 71099,
219
+ 71097, 71087, 71992, 71989, 71984, 90401, 90398, 90398, 90402, 90398, 90409, 90403, 90398, 90399, 90404, 90409, 90399,
220
+ 90405, 90398, 90400, 90406, 90401, 90399, 90407, 90402, 90399, 90408, 90401, 90400, 93544, 93543, 93543, 93545, 93539,
221
+ 93543, 93546, 93545, 93543, 119134, 119127, 119141, 119135, 119128, 119141, 119136, 119135, 119150, 119137, 119135,
222
+ 119151, 119138, 119135, 119152, 119139, 119135, 119153, 119140, 119135, 119154, 119227, 119225, 119141, 119228,
223
+ 119226, 119141, 119229, 119227, 119150, 119230, 119228, 119150, 119231, 119227, 119151, 119232, 119228, 119151,
224
+ 194560, 20029, 0, 194561, 20024, 0, 194562, 20033, 0, 194563, 131362, 0, 194564, 20320, 0, 194565, 20398, 0, 194566,
225
+ 20411, 0, 194567, 20482, 0, 194568, 20602, 0, 194569, 20633, 0, 194570, 20711, 0, 194571, 20687, 0, 194572, 13470, 0,
226
+ 194573, 132666, 0, 194574, 20813, 0, 194575, 20820, 0, 194576, 20836, 0, 194577, 20855, 0, 194578, 132380, 0, 194579,
227
+ 13497, 0, 194580, 20839, 0, 194581, 20877, 0, 194582, 132427, 0, 194583, 20887, 0, 194584, 20900, 0, 194585, 20172, 0,
228
+ 194586, 20908, 0, 194587, 20917, 0, 194588, 168415, 0, 194589, 20981, 0, 194590, 20995, 0, 194591, 13535, 0, 194592,
229
+ 21051, 0, 194593, 21062, 0, 194594, 21106, 0, 194595, 21111, 0, 194596, 13589, 0, 194597, 21191, 0, 194598, 21193, 0,
230
+ 194599, 21220, 0, 194600, 21242, 0, 194601, 21253, 0, 194602, 21254, 0, 194603, 21271, 0, 194604, 21321, 0, 194605,
231
+ 21329, 0, 194606, 21338, 0, 194607, 21363, 0, 194608, 21373, 0, 194609, 21375, 0, 194610, 21375, 0, 194611, 21375, 0,
232
+ 194612, 133676, 0, 194613, 28784, 0, 194614, 21450, 0, 194615, 21471, 0, 194616, 133987, 0, 194617, 21483, 0, 194618,
233
+ 21489, 0, 194619, 21510, 0, 194620, 21662, 0, 194621, 21560, 0, 194622, 21576, 0, 194623, 21608, 0, 194624, 21666, 0,
234
+ 194625, 21750, 0, 194626, 21776, 0, 194627, 21843, 0, 194628, 21859, 0, 194629, 21892, 0, 194630, 21892, 0, 194631,
235
+ 21913, 0, 194632, 21931, 0, 194633, 21939, 0, 194634, 21954, 0, 194635, 22294, 0, 194636, 22022, 0, 194637, 22295, 0,
236
+ 194638, 22097, 0, 194639, 22132, 0, 194640, 20999, 0, 194641, 22766, 0, 194642, 22478, 0, 194643, 22516, 0, 194644,
237
+ 22541, 0, 194645, 22411, 0, 194646, 22578, 0, 194647, 22577, 0, 194648, 22700, 0, 194649, 136420, 0, 194650, 22770, 0,
238
+ 194651, 22775, 0, 194652, 22790, 0, 194653, 22810, 0, 194654, 22818, 0, 194655, 22882, 0, 194656, 136872, 0, 194657,
239
+ 136938, 0, 194658, 23020, 0, 194659, 23067, 0, 194660, 23079, 0, 194661, 23000, 0, 194662, 23142, 0, 194663, 14062, 0,
240
+ 194664, 14076, 0, 194665, 23304, 0, 194666, 23358, 0, 194667, 23358, 0, 194668, 137672, 0, 194669, 23491, 0, 194670,
241
+ 23512, 0, 194671, 23527, 0, 194672, 23539, 0, 194673, 138008, 0, 194674, 23551, 0, 194675, 23558, 0, 194676, 24403, 0,
242
+ 194677, 23586, 0, 194678, 14209, 0, 194679, 23648, 0, 194680, 23662, 0, 194681, 23744, 0, 194682, 23693, 0, 194683,
243
+ 138724, 0, 194684, 23875, 0, 194685, 138726, 0, 194686, 23918, 0, 194687, 23915, 0, 194688, 23932, 0, 194689, 24033,
244
+ 0, 194690, 24034, 0, 194691, 14383, 0, 194692, 24061, 0, 194693, 24104, 0, 194694, 24125, 0, 194695, 24169, 0, 194696,
245
+ 14434, 0, 194697, 139651, 0, 194698, 14460, 0, 194699, 24240, 0, 194700, 24243, 0, 194701, 24246, 0, 194702, 24266, 0,
246
+ 194703, 172946, 0, 194704, 24318, 0, 194705, 140081, 0, 194706, 140081, 0, 194707, 33281, 0, 194708, 24354, 0, 194709,
247
+ 24354, 0, 194710, 14535, 0, 194711, 144056, 0, 194712, 156122, 0, 194713, 24418, 0, 194714, 24427, 0, 194715, 14563,
248
+ 0, 194716, 24474, 0, 194717, 24525, 0, 194718, 24535, 0, 194719, 24569, 0, 194720, 24705, 0, 194721, 14650, 0, 194722,
249
+ 14620, 0, 194723, 24724, 0, 194724, 141012, 0, 194725, 24775, 0, 194726, 24904, 0, 194727, 24908, 0, 194728, 24910, 0,
250
+ 194729, 24908, 0, 194730, 24954, 0, 194731, 24974, 0, 194732, 25010, 0, 194733, 24996, 0, 194734, 25007, 0, 194735,
251
+ 25054, 0, 194736, 25074, 0, 194737, 25078, 0, 194738, 25104, 0, 194739, 25115, 0, 194740, 25181, 0, 194741, 25265, 0,
252
+ 194742, 25300, 0, 194743, 25424, 0, 194744, 142092, 0, 194745, 25405, 0, 194746, 25340, 0, 194747, 25448, 0, 194748,
253
+ 25475, 0, 194749, 25572, 0, 194750, 142321, 0, 194751, 25634, 0, 194752, 25541, 0, 194753, 25513, 0, 194754, 14894, 0,
254
+ 194755, 25705, 0, 194756, 25726, 0, 194757, 25757, 0, 194758, 25719, 0, 194759, 14956, 0, 194760, 25935, 0, 194761,
255
+ 25964, 0, 194762, 143370, 0, 194763, 26083, 0, 194764, 26360, 0, 194765, 26185, 0, 194766, 15129, 0, 194767, 26257, 0,
256
+ 194768, 15112, 0, 194769, 15076, 0, 194770, 20882, 0, 194771, 20885, 0, 194772, 26368, 0, 194773, 26268, 0, 194774,
257
+ 32941, 0, 194775, 17369, 0, 194776, 26391, 0, 194777, 26395, 0, 194778, 26401, 0, 194779, 26462, 0, 194780, 26451, 0,
258
+ 194781, 144323, 0, 194782, 15177, 0, 194783, 26618, 0, 194784, 26501, 0, 194785, 26706, 0, 194786, 26757, 0, 194787,
259
+ 144493, 0, 194788, 26766, 0, 194789, 26655, 0, 194790, 26900, 0, 194791, 15261, 0, 194792, 26946, 0, 194793, 27043, 0,
260
+ 194794, 27114, 0, 194795, 27304, 0, 194796, 145059, 0, 194797, 27355, 0, 194798, 15384, 0, 194799, 27425, 0, 194800,
261
+ 145575, 0, 194801, 27476, 0, 194802, 15438, 0, 194803, 27506, 0, 194804, 27551, 0, 194805, 27578, 0, 194806, 27579, 0,
262
+ 194807, 146061, 0, 194808, 138507, 0, 194809, 146170, 0, 194810, 27726, 0, 194811, 146620, 0, 194812, 27839, 0,
263
+ 194813, 27853, 0, 194814, 27751, 0, 194815, 27926, 0, 194816, 27966, 0, 194817, 28023, 0, 194818, 27969, 0, 194819,
264
+ 28009, 0, 194820, 28024, 0, 194821, 28037, 0, 194822, 146718, 0, 194823, 27956, 0, 194824, 28207, 0, 194825, 28270, 0,
265
+ 194826, 15667, 0, 194827, 28363, 0, 194828, 28359, 0, 194829, 147153, 0, 194830, 28153, 0, 194831, 28526, 0, 194832,
266
+ 147294, 0, 194833, 147342, 0, 194834, 28614, 0, 194835, 28729, 0, 194836, 28702, 0, 194837, 28699, 0, 194838, 15766,
267
+ 0, 194839, 28746, 0, 194840, 28797, 0, 194841, 28791, 0, 194842, 28845, 0, 194843, 132389, 0, 194844, 28997, 0,
268
+ 194845, 148067, 0, 194846, 29084, 0, 194847, 148395, 0, 194848, 29224, 0, 194849, 29237, 0, 194850, 29264, 0, 194851,
269
+ 149000, 0, 194852, 29312, 0, 194853, 29333, 0, 194854, 149301, 0, 194855, 149524, 0, 194856, 29562, 0, 194857, 29579,
270
+ 0, 194858, 16044, 0, 194859, 29605, 0, 194860, 16056, 0, 194861, 16056, 0, 194862, 29767, 0, 194863, 29788, 0, 194864,
271
+ 29809, 0, 194865, 29829, 0, 194866, 29898, 0, 194867, 16155, 0, 194868, 29988, 0, 194869, 150582, 0, 194870, 30014, 0,
272
+ 194871, 150674, 0, 194872, 30064, 0, 194873, 139679, 0, 194874, 30224, 0, 194875, 151457, 0, 194876, 151480, 0,
273
+ 194877, 151620, 0, 194878, 16380, 0, 194879, 16392, 0, 194880, 30452, 0, 194881, 151795, 0, 194882, 151794, 0, 194883,
274
+ 151833, 0, 194884, 151859, 0, 194885, 30494, 0, 194886, 30495, 0, 194887, 30495, 0, 194888, 30538, 0, 194889, 16441,
275
+ 0, 194890, 30603, 0, 194891, 16454, 0, 194892, 16534, 0, 194893, 152605, 0, 194894, 30798, 0, 194895, 30860, 0,
276
+ 194896, 30924, 0, 194897, 16611, 0, 194898, 153126, 0, 194899, 31062, 0, 194900, 153242, 0, 194901, 153285, 0, 194902,
277
+ 31119, 0, 194903, 31211, 0, 194904, 16687, 0, 194905, 31296, 0, 194906, 31306, 0, 194907, 31311, 0, 194908, 153980, 0,
278
+ 194909, 154279, 0, 194910, 154279, 0, 194911, 31470, 0, 194912, 16898, 0, 194913, 154539, 0, 194914, 31686, 0, 194915,
279
+ 31689, 0, 194916, 16935, 0, 194917, 154752, 0, 194918, 31954, 0, 194919, 17056, 0, 194920, 31976, 0, 194921, 31971, 0,
280
+ 194922, 32000, 0, 194923, 155526, 0, 194924, 32099, 0, 194925, 17153, 0, 194926, 32199, 0, 194927, 32258, 0, 194928,
281
+ 32325, 0, 194929, 17204, 0, 194930, 156200, 0, 194931, 156231, 0, 194932, 17241, 0, 194933, 156377, 0, 194934, 32634,
282
+ 0, 194935, 156478, 0, 194936, 32661, 0, 194937, 32762, 0, 194938, 32773, 0, 194939, 156890, 0, 194940, 156963, 0,
283
+ 194941, 32864, 0, 194942, 157096, 0, 194943, 32880, 0, 194944, 144223, 0, 194945, 17365, 0, 194946, 32946, 0, 194947,
284
+ 33027, 0, 194948, 17419, 0, 194949, 33086, 0, 194950, 23221, 0, 194951, 157607, 0, 194952, 157621, 0, 194953, 144275,
285
+ 0, 194954, 144284, 0, 194955, 33281, 0, 194956, 33284, 0, 194957, 36766, 0, 194958, 17515, 0, 194959, 33425, 0,
286
+ 194960, 33419, 0, 194961, 33437, 0, 194962, 21171, 0, 194963, 33457, 0, 194964, 33459, 0, 194965, 33469, 0, 194966,
287
+ 33510, 0, 194967, 158524, 0, 194968, 33509, 0, 194969, 33565, 0, 194970, 33635, 0, 194971, 33709, 0, 194972, 33571, 0,
288
+ 194973, 33725, 0, 194974, 33767, 0, 194975, 33879, 0, 194976, 33619, 0, 194977, 33738, 0, 194978, 33740, 0, 194979,
289
+ 33756, 0, 194980, 158774, 0, 194981, 159083, 0, 194982, 158933, 0, 194983, 17707, 0, 194984, 34033, 0, 194985, 34035,
290
+ 0, 194986, 34070, 0, 194987, 160714, 0, 194988, 34148, 0, 194989, 159532, 0, 194990, 17757, 0, 194991, 17761, 0,
291
+ 194992, 159665, 0, 194993, 159954, 0, 194994, 17771, 0, 194995, 34384, 0, 194996, 34396, 0, 194997, 34407, 0, 194998,
292
+ 34409, 0, 194999, 34473, 0, 195000, 34440, 0, 195001, 34574, 0, 195002, 34530, 0, 195003, 34681, 0, 195004, 34600, 0,
293
+ 195005, 34667, 0, 195006, 34694, 0, 195007, 17879, 0, 195008, 34785, 0, 195009, 34817, 0, 195010, 17913, 0, 195011,
294
+ 34912, 0, 195012, 34915, 0, 195013, 161383, 0, 195014, 35031, 0, 195015, 35038, 0, 195016, 17973, 0, 195017, 35066, 0,
295
+ 195018, 13499, 0, 195019, 161966, 0, 195020, 162150, 0, 195021, 18110, 0, 195022, 18119, 0, 195023, 35488, 0, 195024,
296
+ 35565, 0, 195025, 35722, 0, 195026, 35925, 0, 195027, 162984, 0, 195028, 36011, 0, 195029, 36033, 0, 195030, 36123, 0,
297
+ 195031, 36215, 0, 195032, 163631, 0, 195033, 133124, 0, 195034, 36299, 0, 195035, 36284, 0, 195036, 36336, 0, 195037,
298
+ 133342, 0, 195038, 36564, 0, 195039, 36664, 0, 195040, 165330, 0, 195041, 165357, 0, 195042, 37012, 0, 195043, 37105,
299
+ 0, 195044, 37137, 0, 195045, 165678, 0, 195046, 37147, 0, 195047, 37432, 0, 195048, 37591, 0, 195049, 37592, 0,
300
+ 195050, 37500, 0, 195051, 37881, 0, 195052, 37909, 0, 195053, 166906, 0, 195054, 38283, 0, 195055, 18837, 0, 195056,
301
+ 38327, 0, 195057, 167287, 0, 195058, 18918, 0, 195059, 38595, 0, 195060, 23986, 0, 195061, 38691, 0, 195062, 168261,
302
+ 0, 195063, 168474, 0, 195064, 19054, 0, 195065, 19062, 0, 195066, 38880, 0, 195067, 168970, 0, 195068, 19122, 0,
303
+ 195069, 169110, 0, 195070, 38923, 0, 195071, 38923, 0, 195072, 38953, 0, 195073, 169398, 0, 195074, 39138, 0, 195075,
304
+ 19251, 0, 195076, 39209, 0, 195077, 39335, 0, 195078, 39362, 0, 195079, 39422, 0, 195080, 19406, 0, 195081, 170800, 0,
305
+ 195082, 39698, 0, 195083, 40000, 0, 195084, 40189, 0, 195085, 19662, 0, 195086, 19693, 0, 195087, 40295, 0, 195088,
306
+ 172238, 0, 195089, 19704, 0, 195090, 172293, 0, 195091, 172558, 0, 195092, 172689, 0, 195093, 40635, 0, 195094, 19798,
307
+ 0, 195095, 40697, 0, 195096, 40702, 0, 195097, 40709, 0, 195098, 40719, 0, 195099, 40726, 0, 195100, 40763, 0, 195101,
308
+ 173568, 0,
309
+ };
310
+ const uint32_t narsil_unicode_decompositions_length = 6243;