Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3988 lines
181 KiB

  1. /*++
  2. Copyright (c) 1990-1991 Microsoft Corporation
  3. Module Name:
  4. htpat.c
  5. Abstract:
  6. This module contains all the functions which generate the halftone
  7. patterns (brushs) to be used for later halftone process.
  8. Author:
  9. 23-Apr-1992 Thu 20:01:55 updated -by- Daniel Chou (danielc)
  10. changed 'CHAR' type to 'BYTE' type, this will make sure if compiled
  11. under MIPS the default 'unsigned char' will not affect the signed
  12. operation on the single 8 bits
  13. 15-Jan-1991 Tue 21:09:33 created -by- Daniel Chou (danielc)
  14. [Environment:]
  15. GDI Device Driver - Halftone.
  16. [Notes:]
  17. Revision History:
  18. Change DrawPatLine() function to DrawCornerLine(), and speed up the
  19. process by only using integer operation for modified DDA.
  20. --*/
  21. #define DBGP_VARNAME dbgpHTPat
  22. #include "htp.h"
  23. #include "htmath.h"
  24. #include "htmapclr.h"
  25. #include "htrender.h"
  26. #include "htpat.h"
  27. #include "stdio.h"
  28. #ifdef UMODE
  29. #include <search.h>
  30. #endif
  31. #define DBGP_DRAWLINE 0x00000001
  32. #define DBGP_SHOW_HTCELL 0x00000002
  33. #define DBGP_CACHE_PAT 0x00000004
  34. #define DBGP_GEN_PAT 0x00000008
  35. DEF_DBGPVAR(BIT_IF(DBGP_DRAWLINE, 0) |
  36. BIT_IF(DBGP_SHOW_HTCELL, 0) |
  37. BIT_IF(DBGP_CACHE_PAT, 0) |
  38. BIT_IF(DBGP_GEN_PAT, 0))
  39. #define HTSC_M_CX 91
  40. #define HTSC_M_CY 91
  41. #define HTSC_M_COUNT (HTSC_M_CX * HTSC_M_CY)
  42. #define HTSC_M_OFFSET_M (HTSC_M_COUNT * 0)
  43. #define HTSC_M_OFFSET_C (HTSC_M_COUNT * 1)
  44. #define HTSC_M_OFFSET_Y (HTSC_M_COUNT * 2)
  45. LPWORD ppwHTPat[HTPAT_SIZE_MAX_INDEX] = {
  46. NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  47. NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
  48. };
  49. extern HTGLOBAL HTGlobal;
  50. CONST BYTE RGB555Pat[CB_RGB555PAT] = {
  51. //
  52. // SuperCell: 65x65x1x0, 35%!, 0.8300, 3.2500, 0%, 05753eba
  53. //
  54. // Pattern Checksum = eaeb3b7e
  55. //
  56. 161,216, 20, 87, 38,198, 19,111,208, 67,201, 75, 4,164, 40,240, // 0
  57. 12,109,245,159,129, 32,242,100,187, 79,248, 62,177, 78, 24,246,
  58. 43,213, 62,254, 34, 72,188,145, 32, 74,200, 52,233, 62,125, 82,
  59. 201,117, 68,129, 55,208,107,237,174,207, 76,236, 17,189,224, 8,
  60. 78, 0,
  61. 118, 69,200,163,235,137, 75,248, 43,151,103,253,123,226,142, 57, // 1
  62. 157,210, 87, 6,226, 60,155, 43,125, 25,196,107,236,127,183, 87,
  63. 123,161, 11,116,156,227,103, 52,231,159,108,185,144, 14,176,249,
  64. 57,232,171, 24,250, 81,140, 59, 11,130, 41,196,135, 93, 54,131,
  65. 192, 0,
  66. 246, 42,133, 10,109, 51,193,163,121,220, 21,145, 44, 80,113,192, // 2
  67. 74,131, 52,199,118,182, 80,223,200,159, 51,150, 2, 60,226, 15,
  68. 192, 76,225,182, 81, 44,209,168, 80, 13,245, 34, 72,202,104, 21,
  69. 154, 42, 94,194,147, 2,183,216, 95,252,161, 99, 50,247,155,217,
  70. 29, 0,
  71. 101,158,211, 75,175,223, 31, 92, 11,175, 85,216,173,208, 15,250, // 3
  72. 37,224,168, 97, 21,254,139, 9, 71,113,228, 86,211,164,100,143,
  73. 243, 41,131, 22,241,144, 2,115,192,137, 95,178,125,239,159, 72,
  74. 215,119,224, 35,108,206, 46,121,169, 67, 18,230,185, 12,114, 59,
  75. 171, 0,
  76. 225, 64, 27,250,120, 68,143,232,114,240, 47,121, 24, 68,159,121, // 4
  77. 177,101, 28,208,154, 45,110,177,239, 19,167, 41,128, 29,216, 47,
  78. 86,170,211, 61,106,201, 70,251, 56,226, 39,214, 5, 89, 38,194,
  79. 141, 7,166, 62,241,138, 71,238, 27,210,118,142, 65,161,207, 88,
  80. 5, 0,
  81. 128,195,144, 91,190, 5,199, 53,150, 73,202,157,245,109,221, 77, // 5
  82. 4,238,137, 61,235, 85,197, 60,122,203, 96,252,175, 92,186,130,
  83. 222, 27, 94,147,181, 29,132,164, 16,151,116, 59,170,135,230, 98,
  84. 57,252,104,190, 90, 20,181,106,149, 81,182, 29,220, 81,134,240,
  85. 181, 0,
  86. 82, 17,230, 45,134,239,110,171, 26,185, 1, 88, 41,176, 55,141, // 6
  87. 198, 49,188,112, 18,133,223, 24,171, 43,148, 64, 17,231, 58, 7,
  88. 162,117,252, 12,218, 85,232,103,202, 84,181,250, 79,186, 17,125,
  89. 198, 33,150, 48,212,153,228, 35,214, 13,246,112, 50,195, 24,112,
  90. 43, 0,
  91. 246,120,180, 78,172, 24, 72,221, 97,255,122,222,116,207, 21,247, // 7
  92. 94,158, 73,223,178, 69,151,104,243, 83,220,117,200,140,106,245,
  93. 72,200, 52,161,125, 41,174, 27, 65,224, 18,127, 31,222, 70,237,
  94. 168, 83,224,126, 9,108, 51, 98,183,119, 54,166,234,147, 75,214,
  95. 163, 0,
  96. 51,201,102, 36,212,128,184, 37,145, 66,170, 33,150, 79,164,122, // 8
  97. 38,233, 11,144, 46,250, 1,188, 37,161, 8,181, 43, 70,209,171,
  98. 32,149,100,225, 71,207,109,248,130,163, 55,206,161, 91,148, 51,
  99. 108, 14,186, 77,241,196,135,255, 62,146,220, 87, 2,117,183, 17,
  100. 135, 0,
  101. 89, 4,156,251, 92, 53,241,108,213, 14,206, 62,245, 7,226, 59, // 9
  102. 204,132, 90,198,102,127,210, 77,115,233,136, 91,243,156, 12, 86,
  103. 126,237, 3,178, 25,149, 49,170, 16, 97,240, 73,114,188, 2,206,
  104. 159,244,140, 54,152, 26, 67,164, 8,194, 36,132,203, 49,239, 61,
  105. 219, 0,
  106. 170,208,123, 23,187,146, 6,171, 82,159,127, 96,183,138,105,173, // 10
  107. 19,162, 50,238, 19,172, 60,147,200, 68, 47,211, 24,109,181,229,
  108. 43,194, 85,127,239,100,227, 81,216,186,141, 14,202, 68,254,120,
  109. 26, 93, 36,230,114,186,219, 99,231,113, 72,237,166, 89,155,128,
  110. 105, 0,
  111. 35, 83,234, 67,110,204, 71,222, 29,246, 44,221, 27, 68,199, 79, // 11
  112. 248,100,179,125, 84,222, 31,245, 11,141,178,103,150,203, 54,139,
  113. 104,158, 54,202, 41,157, 8,139, 37, 87, 48,231,122, 36,154, 64,
  114. 179,213,127,196, 3, 83, 43,155, 33,143,197, 14,111, 40,206, 10,
  115. 244, 0,
  116. 132,192, 48,154,229, 19,135,100,144, 70,198,107,168,238, 12,129, // 12
  117. 46,195, 4,206, 38,140,182,121, 92,194, 19,255, 34, 75,240, 19,
  118. 218, 30,253,105,185, 73,212,173,115,251,151, 94,181,217, 90,231,
  119. 43,148, 60, 90,170,250,126,191, 81,247, 52,137,176,253, 75,189,
  120. 59, 0,
  121. 224, 11,175, 95, 44,169,249, 50,213,180, 3,142, 47, 91,205,157, // 13
  122. 222, 66,112,148,252,105, 64,213, 40,230,115, 58,184,143,117,174,
  123. 65,182, 82,140, 21,245, 99, 42,191, 17,209, 61, 9,131, 30,195,
  124. 117,248, 23,219,141, 28, 91,222, 9,164, 94,219, 61, 18,145, 93,
  125. 162, 0,
  126. 73,111,254,139,214, 73,116,162, 20,124, 83,243,186,124, 37,100, // 14
  127. 18,168,234, 84, 50,197, 8,159,132, 71,148,213, 82,227, 2, 95,
  128. 206,135, 12,212,176, 53,132,206, 74,157,101,138,246,174,103,152,
  129. 6, 94,172,119, 70,213,164, 58,117,203, 27,118,184,227,108,205,
  130. 29, 0,
  131. 134,201, 52, 87, 9,199, 35,236, 76,222,160, 26, 70,227,169,254, // 15
  132. 136, 74,197, 25,171,122,225, 87,249, 13,179, 30,123, 47,168,249,
  133. 37, 77,234,111, 75,154,235, 1,123,232, 25,203, 45, 76,236, 57,
  134. 220,192, 44,239, 11,130, 40,243,145, 46,234,151, 78, 36,164, 64,
  135. 244, 0,
  136. 169, 18,148,236,118,159, 90,130,174, 32,111,194,139, 15, 84, 50, // 16
  137. 208, 33,116,142,239, 65, 31,188, 52,204,101,236,158,199, 64,139,
  138. 115,194,144, 40,204, 26, 95,172, 51,186, 87,160,116,190, 21,167,
  139. 127, 71,155,105,168,199,101,180, 62,193,103, 9,249,121,215, 1,
  140. 85, 0,
  141. 233, 75,187, 32,210, 45,231, 5,211, 60,251, 41,219,114,190,141, // 17
  142. 95,165,229, 9, 96,199,140,108,167, 79,136, 59, 10,106,229, 27,
  143. 217, 7, 68,248,165,123,218, 63,253,136, 43,238, 5,142,209,102,
  144. 32,233, 21,207, 60, 31,226, 4,137, 79,220,168, 67,153, 91,191,
  145. 117, 0,
  146. 29,204,101,137, 61,191,120,162, 86,134,178, 79,163, 47,214, 1, // 18
  147. 244, 41, 84,207,175, 39,245, 2,226, 47,211,172,245,145, 79,166,
  148. 87,153,189,100, 14, 72,189,144, 12,107,193, 68,215, 94, 61,251,
  149. 185, 81,137, 92,254,140, 77,166,248, 23,128, 47,192, 18,239, 40,
  150. 143, 0,
  151. 63,127, 6,242,166, 77, 19,246, 47,202,102, 11,239, 88,128,173, // 19
  152. 110,183,143, 50,133, 74,165, 96,131,160, 24,113, 66, 21,212, 51,
  153. 237,118, 33,218,136,234, 32, 97,178,223, 28,158,113,181, 29,131,
  154. 53,157,201, 13,174,110,215, 56,108,160,212, 96,228,118, 74,167,
  155. 212, 0,
  156. 248,156,209, 55, 98,225,149,104,168, 28,229,123,154, 22,226, 81, // 20
  157. 54,226, 22,251, 94,215, 23,192, 41,254, 83,219,190,156, 99,180,
  158. 23,199, 65,169, 51,180,117,242, 39, 76,139,249, 17,207, 83,169,
  159. 229, 28,115,232, 66, 39,179, 14,195, 66, 39,176, 28,146,202, 48,
  160. 100, 0,
  161. 18, 89, 38,190,140, 31,202, 61,221, 84,175, 63,202,113,164, 33, // 21
  162. 208,125, 75,152,185, 55,144,231, 76,121,170, 8,128, 37,247,135,
  163. 93,148,255,114, 88, 7,203, 55,145,201,102, 48, 78,122,241, 8,
  164. 103,209, 73,152,124,241, 97,137,232,113,242,130, 85,255, 10,136,
  165. 187, 0,
  166. 125,228,171,105,253, 75,128, 15,118,148, 4,254, 42, 78,241,134, // 22
  167. 178, 15,195,102, 5,239, 85,126, 12,200, 52,240, 63,196, 72, 1,
  168. 228, 58, 15,189,229,157,128, 90,224, 3,169,226,189,156, 50,194,
  169. 148, 42,180, 4,193, 26,208, 67, 35,172, 3,199, 55,178,102,234,
  170. 66, 0,
  171. 176, 28,134, 57, 1,212,165,191,236, 58,194,107,142,183, 8, 64, // 23
  172. 97,245, 56,220,120,160, 27,180,216,147,105,162, 98,141,215,162,
  173. 117,177, 84,141, 32, 56,247, 21,180,114, 56,131, 13, 88,220,119,
  174. 69,252, 89,224,110, 59,147,183,217, 85,153,104,223, 21,157, 52,
  175. 208, 0,
  176. 109, 75,234,195,156,101, 40, 91, 27,158, 84,217, 24,226,118,204, // 24
  177. 155, 37,147, 79,182, 68,225,109, 72, 37,231, 19,221, 39,111, 62,
  178. 209, 34,239,112,213,182,101,154, 48,240,195, 96,247,142, 34,181,
  179. 20,166,131, 36,162,248,116, 10,126, 49,238, 31,145, 75,196,118,
  180. 5, 0,
  181. 251,185, 45,115, 62,243,138,219,122,245, 33,169, 59, 91,172, 49, // 25
  182. 236,114,213, 22,253, 38,142, 47,241,138, 82,198, 68,169,252, 23,
  183. 87,187,148, 17, 77,138, 62,220,121, 77, 18,167, 44,205, 70,237,
  184. 109,211, 63,190, 78, 29,198, 74,233,176, 91,185,112,247, 36,218,
  185. 155, 0,
  186. 89, 18,144,223, 16,182, 69, 9,184, 55,111,208,131,250, 16,137, // 26
  187. 74, 9,190,134,102,165,207,116,167, 14,179,107,147, 8,190,135,
  188. 232,108, 55,200,251, 36,194, 25,168,211,129,230, 83,124,169, 1,
  189. 150, 92, 23,230,139,217,104,157, 19,138, 38,209, 11,173, 97,137,
  190. 55, 0,
  191. 164,118,200, 92,161,114,207,147, 86,214,161, 19, 78,193,100,223, // 27
  192. 197,158, 86, 48,221, 6, 79, 30,212, 66,250, 29,226,124, 91, 42,
  193. 165, 5,127,171, 99,155,119,242, 95, 39, 61,153, 14,199, 90,224,
  194. 56,244,160,106, 6, 89,186, 59,206,107,244, 77,150, 53,190, 22,
  195. 225, 0,
  196. 48,244, 68, 40,238, 30, 58,253, 26,128, 50,239,153, 54,176, 28, // 28
  197. 119, 42,246,142,193, 98,243,175,129, 93,156, 60,194, 51,242,201,
  198. 64,196,235, 77, 14,231, 74, 2,151,190,218,106,250, 46,130, 37,
  199. 193,125, 64,179,241, 54,143,255, 34,189, 60,125,219, 85,234,106,
  200. 197, 0,
  201. 152, 3,193,146,107,189,121,176, 97,225,180,102, 2,229,143, 90, // 29
  202. 235,166,106, 22, 67,162,120, 42,230, 1,217,132,102,176, 13,112,
  203. 155, 99, 33,148,197, 47,164,206,105, 31, 75,166, 59,151,217,163,
  204. 95, 11,219, 36,122,204, 18,125, 96,163, 2,199, 40,154, 9,135,
  205. 73, 0,
  206. 188,125, 82,227, 14, 69,230, 5,155, 34, 65,134,209, 84, 41,186, // 30
  207. 11, 71,211,172,232, 13,200, 83,153,109,181, 20,236, 74,140,221,
  208. 23,250,183, 55,106,218,131, 54,255,132,226, 6,210,109, 72, 20,
  209. 253,146,186, 99,158, 68,175,218, 65,237,107,142,240,103,173,249,
  210. 28, 0,
  211. 92,233, 57,174,119,206,141, 85,202,114,248,186, 46,125,253,108, // 31
  212. 215,145, 35, 80,116,148, 53,254, 27,203, 51, 88,162, 32,187, 53,
  213. 85,134, 71,229,161, 18, 79,175, 22,189, 88,124,186, 34,227,171,
  214. 114, 54, 81,238, 9,224,101, 26,154, 51,182, 81, 18,194, 43, 89,
  215. 206, 0,
  216. 160, 20,192, 44,152, 23, 57,242, 44,163, 19, 88,154,198, 16,161, // 32
  217. 49,101,190,249, 48,214,100,168,132, 98,241,134,215, 98,246,111,
  218. 202,170, 6,124, 46,246,116,204, 73,150, 36,239, 80,156,127, 51,
  219. 191,221, 28,121,170, 57,138,211,117,227, 27,205,130, 76,228,136,
  220. 37, 0,
  221. 245,140,107,240, 92,222,181,135, 91,217,131,232, 32, 74,218, 66, // 33
  222. 240,152, 3,124,163, 16,196, 62,229, 10,159, 73, 16,167, 43,149,
  223. 21,235, 94,214,184, 83,159, 8,240,109,210, 59,174, 15,243, 86,
  224. 3,104,143,193, 83,251, 42,167, 6, 92,161, 67,252,158, 60,179,
  225. 103, 0,
  226. 6, 89,204, 25,163, 67,115, 30,187, 9, 67,176,115,165, 93,136, // 34
  227. 22,202, 82,215, 67,233,129, 36, 89,199, 58,187,110,202, 79,225,
  228. 123, 63,151, 32,138, 56,224,130, 66,169, 13,129,204, 70,111,205,
  229. 159,248, 44,219, 16,133,203, 72,241,132,215, 38,112, 22,201, 46,
  230. 212, 0,
  231. 72,182, 58,138,216, 1,255,154,212,126,247, 39,205, 5,182,231, // 35
  232. 112, 48,167,114, 24,151, 95,190,149,117,247, 24,219,137, 3,172,
  233. 46,185,254,112,204, 25,104,191, 35,201, 93,252, 33,142,181, 25,
  234. 129, 80,180, 70,116,176, 29,109,189, 49, 86,191,139,231, 98,127,
  235. 155, 0,
  236. 219,133,249, 35,106,184, 97, 39, 70,101,153, 80,134,243, 52, 73, // 36
  237. 143,221, 69,242,192, 76,251, 5,218, 31, 84,162, 49, 91,248,107,
  238. 211, 88, 9, 65,149,244,175, 78,232,140, 43,166,101,227, 65,237,
  239. 53,214, 23,147,243, 58,225,141, 16,164,229, 8, 63,179, 16,247,
  240. 35, 0,
  241. 113, 11, 94,198,143, 63,211,134,236, 46,189,224, 32,104,151,199, // 37
  242. 37,179, 11,138, 38,163, 52,174, 62,124,210,133,228,169, 37,146,
  243. 23,157,221,182, 94, 16, 59,157, 1,116,223, 71,189, 7,120,156,
  244. 98,168,119,198, 5,105,191, 74,255,118, 90,146,209, 82,157, 61,
  245. 170, 0,
  246. 57,228,174, 44,237, 13,168, 25,196,123, 8, 69,175,210, 15,100, // 38
  247. 255, 80,116,203, 93,227,107,137,234,184, 69, 10,111, 78,197, 57,
  248. 230, 95,128, 38,234,141,212,106,240, 53,153, 22,135,203, 47,217,
  249. 14,246, 46, 73,216,138, 49,158, 40,194, 24,245, 36,124,233, 95,
  250. 208, 0,
  251. 185,131, 72,156, 86,117,229, 70, 99,164,251,114,138, 58,233,160, // 39
  252. 24,139,224, 56,153, 30,195, 17, 87, 38,156,254,191, 19,238,112,
  253. 174, 62,192, 84,172,119, 34,177, 66,184,214,110,248, 72,126,165,
  254. 69,132,182,110,160, 31,230,119,214, 67,121,160, 71,195, 4,147,
  255. 31, 0,
  256. 89, 17,241, 34,203,139, 36,151,220, 31, 82,199, 23,187, 78,119, // 40
  257. 191, 63,178, 4,241,130, 82,246,168,217,101, 45,129,176, 68,148,
  258. 12,245, 33,210, 7, 68,251, 94,139, 12, 89, 47,151, 25,232, 93,
  259. 192, 41,223, 11,250, 77,169, 92, 2,168,222, 94,179, 51,217,109,
  260. 254, 0,
  261. 152,206,110,175, 58,252, 83,193, 57,135,175, 45,240,148, 6,206, // 41
  262. 42,235,104,161, 76,205, 49,141,108, 2,145,197, 59, 99,222, 53,
  263. 207, 90,147,110,227,144,191, 26,200,238,124,188,221, 87,171, 3,
  264. 243,102,146, 69,133,201, 20,235,191,132, 56, 13,231,140, 79,169,
  265. 52, 0,
  266. 120, 39,191, 7, 99,165, 16,111,236, 2,205,110, 66,118,223, 88, // 42
  267. 152,126, 35,218, 22,114,180, 27,201, 64,227, 21,244,142, 24,166,
  268. 121,189, 45,173, 83, 49,112,162, 71, 45,158, 21, 66,135,211, 60,
  269. 127, 30,210,184, 36, 83,145, 71, 39,100,242,151,112, 38,201, 13,
  270. 219, 0,
  271. 56,236, 85,145,206,122,224,179, 89,156, 74,225,171, 52,178, 32, // 43
  272. 251, 71,188, 85,138,248, 74,218,155, 93,123,162, 87,188,105,240,
  273. 77, 1,253, 61,197,237, 10,223,127,212, 96,254,193, 31,105,152,
  274. 222,170, 62, 99,227,171,245,122,216,163, 20,203, 67,249,128, 94,
  275. 177, 0,
  276. 144,113, 27,231, 44, 78, 34,132, 22,249, 41,129, 26,242,136,106, // 44
  277. 183, 20,224,157, 51,169, 7,122, 39,252, 30,215, 55, 10,214, 60,
  278. 142,205, 96,152, 30,120,167, 87, 34,182, 4,140, 90,164,244, 40,
  279. 90, 10,253,137, 15,104, 57, 8,182, 64,139, 96,180, 22,171, 42,
  280. 244, 0,
  281. 1,216,176,126,184,246,154,216, 61,188, 90,164,202, 73, 16,208, // 45
  282. 53,139,116, 13,234, 96,192,227, 87,188,150,100,198,122,157, 36,
  283. 182, 25,126,228, 86,186, 56,250,146,103,226, 54,205, 12, 76,180,
  284. 206,113,154, 45,215,160,201,145, 98,254, 33,213, 54,135,207,112,
  285. 71, 0,
  286. 201, 97, 48, 83, 12,108, 53,102,161,120,224, 9,103,146,229, 80, // 46
  287. 170,244, 84,181, 67,125, 33,145, 46,126, 6,240, 64,177, 80,236,
  288. 92,217, 50,192, 17,233,135, 13,205, 41,170, 84,130,231,120,142,
  289. 22,236, 59,181,120, 77, 29,229, 45,195,115,156,238, 90, 11,231,
  290. 166, 0,
  291. 35,147,255,134,221,160,211, 4,243, 39, 74,183,254, 49,180,119, // 47
  292. 1, 55,198, 34,215,164,249, 69,197,233, 79,143, 35,209, 15,151,
  293. 122, 65,166,107,150, 44,105,192, 85,127,246, 18,181, 42, 65,195,
  294. 55,172, 88,222, 23,243,107,136, 78,167, 3, 82, 38,194,147, 53,
  295. 128, 0,
  296. 80,189, 18,197, 63, 33,121,189, 84,200,148, 30,130, 95, 23,207, // 48
  297. 153,224, 96,145, 60,103, 19,171,113, 29,172,220, 96,124,254, 58,
  298. 188,232, 5,247, 81,218,176, 30,234, 60,155,113,215,149,252,104,
  299. 220,119, 1,138,196, 67,177,214, 25,235,128,221,178,116,251, 98,
  300. 209, 0,
  301. 233,123, 70,110,167,232, 78,149, 25,127,231, 83,215,163,237, 86, // 49
  302. 61,124,177, 10,237,153,212, 81,223, 56,125, 20,185, 50,172,110,
  303. 29, 88,138, 46,196, 63,137, 98,165, 8,207, 66, 35, 97, 7,173,
  304. 30,150,249, 95, 46,153, 10, 85,192,104, 50,145, 18, 78, 41,180,
  305. 15, 0,
  306. 156, 29,185,242, 7,144, 53,239,173,102, 42,180, 5, 67,121,187, // 50
  307. 26,252, 48,201, 82, 42,123, 4,148,183,250, 72,208,132, 7,228,
  308. 198,157,212,111,158, 10,252, 55,213,143, 81,174,239,142,196, 61,
  309. 88,200, 61,174,220,111,247,149, 45,163,249, 98,214,165,222,141,
  310. 63, 0,
  311. 96,216,136, 54, 99,204,124, 12,210, 63,247,117,150,209, 33,142, // 51
  312. 204,116, 77,159,114,205,169,242, 64,102, 13,149, 92,236, 74,141,
  313. 44, 79, 18,230, 93,177,121,184, 31,105,232, 16,118, 50,226,123,
  314. 240,111, 34,133, 17,193, 38,121,227, 87, 27,198, 44,120, 7,111,
  315. 243, 0,
  316. 201, 41, 82,173,221, 32,187, 90,130,162, 16,194, 46,103,242, 91, // 52
  317. 7,166,220, 17,246, 27, 95, 44,129,225,187, 44,171, 52,186,101,
  318. 177,207,131, 69, 33,236, 45, 86,225,135, 47,150,190, 79, 14,179,
  319. 39,158,194,235, 86, 58,100,208, 6,188,150, 80,141,245, 75,187,
  320. 26, 0,
  321. 165,129,249, 14,118,153, 66,250, 45,205,109, 70,228,174, 65,185, // 53
  322. 234, 57,108, 64,123,149,190,216,159, 34, 76,241,122,213, 35,250,
  323. 10,106,243,183,144,115,208,157, 4,196, 85,254, 92,209,146, 96,
  324. 219, 69, 22,104,156,241,179,146, 65,127,234, 13,186, 60,211,132,
  325. 87, 0,
  326. 4, 63,196, 91,234, 51,210,110,149, 27,238,154, 26,136, 14,146, // 54
  327. 43,126,208,175,232, 51, 84, 20, 98,193,113,157, 2, 77,161,129,
  328. 71,158, 54, 23,203, 64, 24,106,236, 54,176, 21,133, 59,245, 28,
  329. 152,120,229,175, 3,131, 30, 81,253, 34, 93,209,115, 20,155, 42,
  330. 197, 0,
  331. 218,171,113, 31,179,128, 2,183, 58,173, 80,115,217, 86,248,105, // 55
  332. 219,160, 30, 93, 3,167,222,129,255, 12,214, 52,192,104,222, 28,
  333. 197,220, 88,168, 98,229,136,184, 75,149,110,226,193, 2,123,178,
  334. 56,198, 81, 50,205, 66,220,184,110,204,144, 53,167,219, 95,255,
  335. 107, 0,
  336. 139, 48,228,159, 67,204, 89,239,101,210, 11,195, 41,187, 50,199, // 56
  337. 19, 68,252,136,203,117, 65,162, 57,178,127, 90,248,133, 66,177,
  338. 101, 15,138,235, 7,175, 40,248, 15,203, 30, 69,160, 94,217, 80,
  339. 233, 10,148,251,124, 98,152, 15, 59,173, 21,242, 78,137, 32,164,
  340. 66, 0,
  341. 237, 86, 20,133,252, 49,154, 23,129, 50,255,133,170,103,149, 85, // 57
  342. 175,119,188, 73, 39,238, 15,204,109, 40,228, 28,167, 16,233, 45,
  343. 152,255, 49,106,205, 76,130, 97,166,120,244,131, 36,197,146, 46,
  344. 122,191, 92, 32,178, 55,244,123,223,130, 96,194, 1,232, 62,207,
  345. 15, 0,
  346. 112,152,203, 97, 10,181,115,221,190,160, 97, 64, 25,240, 9,216, // 58
  347. 40,230, 11,146,179,103,150, 80,243,133,173, 64,122,189, 97,200,
  348. 120, 78,183,143, 60,152,225, 61,213, 43, 80,174,235, 73, 20,249,
  349. 172, 26,228,133,213, 8,195, 69, 25,200, 47,141,109,169, 97,128,
  350. 184, 0,
  351. 46,223, 62,173,126,230, 65, 37, 88, 5,199,225,124,191, 93,132, // 59
  352. 162, 74,111,244, 53,215, 34,178, 60, 5,209, 94,237, 43,146, 4,
  353. 229, 37,214, 12,243, 37,185, 3,115,155,216, 9,114,140,203,106,
  354. 59,113,161, 40, 81,165,102,143,238, 88,173,250, 38,213, 24,247,
  355. 83, 0,
  356. 188,131, 25,244, 40, 91,202,158,246,111,144, 39, 82,160, 49,237, // 60
  357. 58,210,187, 21,134, 82,196,126,222,153,113, 25,155,210, 89,180,
  358. 57,158,126, 88,166,124, 93,253,177, 32,108, 63,227, 56,163, 7,
  359. 223,196, 70,238,119,218, 29,183, 48,136, 15, 71,199, 57,134,173,
  360. 6, 0,
  361. 238, 99,193, 80,140,179, 45,133, 20,208, 65,188,250, 28,197,118, // 61
  362. 2,102,147, 69,174,235, 13, 99, 30, 76,241,189, 70,125, 28,235,
  363. 108,210, 23,235, 49,215, 29,132, 76,235,196,130,172, 28,241,131,
  364. 76,143, 14,173, 56,150, 77,230, 99,195,228,119,152,101,231, 62,
  365. 117, 0,
  366. 76, 16,154,212, 3,237,103,217, 57,126,165, 13,117,151, 76,218, // 62
  367. 166,253, 31,227,115, 54,155,252,193,165, 43,139, 8,253,163, 75,
  368. 149, 68,178,107,184, 71,161,211, 12,143, 42, 73,205, 90,115,187,
  369. 36,255,122,210, 27,247,125, 4,165, 37, 93,177, 6,185, 26,207,
  370. 159, 0,
  371. 184,225, 48,118, 63,151, 35,183, 89,242, 95,219, 55,234, 19,137, // 63
  372. 48, 86,136,185, 17,202, 70,129, 52,105,217, 95,198,105, 48,206,
  373. 9,238, 41,147, 6,233,108, 58,185, 91,170,251, 3,153, 51,230,
  374. 99,176, 50, 81,112,190, 69,213,134,247, 56,213, 72,253, 84,139,
  375. 33, 0,
  376. 53,104,145,255,178, 94,228,140, 8,172, 35,141,195, 92,187,102, // 64
  377. 204,177, 39, 73,216,106,177, 4,226,144, 17,159, 38,221,133,170,
  378. 97,129,186, 92,200,136, 20,247,120,220, 22,134, 99,212,182, 26,
  379. 150, 6,197,233,153, 17,167, 44,100, 22,162,108,146, 47,168,113,
  380. 242, 0
  381. };
  382. CONST BYTE HTSC_SUPERCELL_M[] = {
  383. //
  384. // SuperCell: 91x91x3x0, 31%!, 1.4225, 10.0000, 0%, c716938f
  385. //
  386. // Pattern Checksum = 7fb46795
  387. //
  388. //
  389. // Magenta
  390. //
  391. 166,206, 43,184,226,118,151, 71,167, 14,239,124,218, 8,228, 59, // 0
  392. 28,156,180,255, 89,169,101,230,150, 78,170,126,194,101,141, 28,
  393. 131, 57,120,156, 70, 18,188,136, 9,150,181,210, 6,248, 38,132,
  394. 102,196,162,234, 17,166,108,218, 54, 19,241,178,222, 34,146,245,
  395. 23,219, 47, 71,166,121,217, 19,225,182,125,231,106,132,212, 80,
  396. 122, 55,154, 5,239, 92,201, 17,154, 41,254,
  397. 51,126,239,101, 58, 36,188,221, 56,185, 39,152, 46, 87,147,186, // 1
  398. 238,105, 48, 4,224, 31,127,195, 60, 33,211, 45,239, 37,213,165,
  399. 220, 88,235, 42,180,125,244, 39,228, 89,114, 75,143,109,198,222,
  400. 66, 35,111,135, 71,243, 41,195,132,169, 89, 66,136,106,183, 72,
  401. 125, 98,140,254,194, 52, 93,190,108, 62, 5,163, 40, 60,155, 37,
  402. 198,254, 73,171,126, 45,228, 67,109,213, 77,
  403. 183, 89, 13,162,134,252, 96, 23,113,137,211, 96,178,206, 39,117, // 2
  404. 16,139,200, 84,149, 51,218, 13,172,252,142,106, 72,180, 60, 98,
  405. 6,194, 25, 99,223, 81,166, 78, 59,190,219, 26,232, 46,155, 11,
  406. 174,252,207, 25,192,149, 11, 77,234,104,205, 23,251, 58,212, 5,
  407. 235,187, 18, 87,113, 7,241,149, 26,251,207, 76,193,240, 90,175,
  408. 11,140, 99,221, 26,179, 97,142,190, 3,145,
  409. 39,221,199, 66,191, 7,171,145,238, 82, 9,252, 62,133,243, 91, // 3
  410. 193, 67,232,119,208,175, 75,138,103, 80, 2,200,156, 15,126,249,
  411. 143,171,122,203,145, 2,114,209,152, 13,132,169, 64,186, 85,126,
  412. 93,139, 79, 51,105,220,125,180, 47, 1,156,118,174, 38,159, 90,
  413. 145, 64,215,156,229,177, 70,123,170, 89,142,113, 16,140,215,111,
  414. 233, 51,191, 65,147,215, 20,246, 60,118,237,
  415. 167,138, 27,122,225, 50, 78,216, 30,191,161,106, 27,171, 1,217, // 4
  416. 151, 35,170, 21, 60,106,247, 42,222,184,123,232, 89,220,189, 84,
  417. 39, 57,242, 74, 47,238,181, 35,243, 91, 47,255, 98,215, 28,239,
  418. 190, 20,167,235,182, 80, 93,255,147,214, 70,235, 87,218,116,202,
  419. 28,177, 43, 79, 29,136, 38,214, 44,187, 29,233,172, 45, 73, 24,
  420. 165,132, 31,241,112, 53,122,169, 32,201, 95,
  421. 10,103,244, 80,151,111,199,122, 69, 49,130,226,189,121, 79, 53, // 5
  422. 115,251, 92,145,235, 7,151,199, 19,157, 57, 26,146, 62, 33,166,
  423. 225,111,183, 22,161, 96, 58,138,110,198,161,118, 3,133,167, 68,
  424. 42,226,122, 5,140, 33,168, 24, 61,107,188, 32,142, 12, 71,248,
  425. 131,102,243,119,211,192,101,237, 76,119,218, 58, 99,244,129,196,
  426. 62,209,106,172, 14,158,207, 90,227,134, 69,
  427. 175,206, 43,184, 33,241, 18,162,249,208, 92, 34, 67,235,155,199, // 6
  428. 20,182, 48,200,124,186, 88,119, 70,243,100,186,251,111,202,133,
  429. 12,151, 92,200,126,220,191, 15,226, 25, 67,182,228, 59,206,109,
  430. 147,204, 71,100,245,189,116,206,135,238, 53,126,228,196,157, 20,
  431. 60,198,146, 2,159, 54, 18,144,197, 4,159,131,204, 9,157, 97,
  432. 248, 4, 81,219, 77,250, 63, 6,153, 48,248,
  433. 87,148,118,222, 93,176, 58, 97,143, 5,181,150,205, 13, 89,241, // 7
  434. 139,103,226, 78, 28, 62,216,169, 34,137,213, 44,131, 6, 90,236,
  435. 71,214, 54,254, 9, 70,107,160, 84,142,209, 33, 87,149, 17,244,
  436. 90, 26,157,212, 64, 40,230, 7, 91,159, 21,177,100, 45, 89,188,
  437. 233, 38, 84,219, 69,241,115,170, 63,255, 87, 32,174, 77,223, 35,
  438. 149,122,186,139, 42,184,125,197,100,181, 33,
  439. 231, 17, 72,161, 2,138,233,195, 45,118,229, 58,107,133,177, 59, // 8
  440. 38,166, 9,150,248,132, 43,234, 85,181, 14, 76,169,223,182, 49,
  441. 122,165, 32,139,176, 42,239,205, 53,250,103,129,238,195, 47,132,
  442. 190, 54,178, 20,144,102,155, 68,183,217, 77,244, 4,210,140,117,
  443. 162, 99,174, 23,183,141, 86,225, 43,111,191,229, 52,124,183, 67,
  444. 213, 57,232, 18, 96,148, 28,235, 80,215,130,
  445. 107,190,250, 52,213,117, 74, 22,214, 81,168, 20,255, 36,215,119, // 9
  446. 223, 74,193,106,206, 90,154, 5,202,107,149,240,103, 58,149, 22,
  447. 245,189, 82,110,229, 90,148,123, 4,172, 43,161, 9,112,170, 68,
  448. 218,111,248,128,221,196, 49,249,114, 38,145,119,165, 63,250, 76,
  449. 8,208,124,253,106, 30,205, 12,183,135, 15,147, 98,250, 17, 93,
  450. 163, 28,104,167,203,224, 55,113,160, 10, 59,
  451. 168, 32,140,104,172, 36,187,145,106,242,136, 76,195,147, 67, 4, // 10
  452. 181,133,234, 47, 18,172,240,115, 63,231, 49,196, 26,124,209, 86,
  453. 106, 1,222,157, 20,186, 37, 69,195, 97,227, 64,212, 79,252, 37,
  454. 160, 2, 89, 38, 75, 10,170,136, 15,199, 54,221, 29,109,179, 33,
  455. 227, 55,150, 73, 49,233,122,159, 92,237, 69,212, 35,195,136,236,
  456. 119,193,252, 50, 72,121,175, 21,255,138,201,
  457. 91, 63,204, 18,226, 85,252, 57,177, 11, 40,225,116, 91,164,246, // 11
  458. 96, 24, 63,120,189, 78, 31,140,176, 18,128, 91,173,233, 35,178,
  459. 216,147, 74, 50,210,116,247,156,215,133, 19,180,140, 26,192, 95,
  460. 130,230,194,152,233,123,211, 86,230,101,156, 80,189,231, 47,156,
  461. 97,182, 17,215,164,189, 78, 55,202, 23,172,115,158, 73, 41,174,
  462. 12, 82,147,128, 1,242, 92,208, 76, 48,226,
  463. 153,121,235, 72,153,124, 7,205, 88,150,190, 62,171, 16,202, 45, // 12
  464. 142,206,168,253,134,221, 51,198, 88,219,165,255, 5, 74,152, 61,
  465. 131, 42,251,176,133, 62, 11,105, 30, 77,248, 88,120,223,149, 16,
  466. 180, 57,117, 45,176, 98, 29, 58,165, 40,253,128, 9, 86,116,205,
  467. 137,246, 83,113, 34,138, 5,247,146,103, 50,243, 3,230,107,211,
  468. 55,227, 37,216,191,156, 38,133,189,111, 28,
  469. 194, 5,182, 44,101,211,162, 43,126,231,102,211, 43,239,126, 70, // 13
  470. 232,110, 82, 12, 57,101,154,247, 26,113, 40, 61,135,196, 99,228,
  471. 12,193,109, 16, 83,233,191,168,224, 49,156,194, 39, 63,107,241,
  472. 78,211, 21,254, 68,141,243,186,120,206, 21,176,216,142,241, 14,
  473. 79, 36,131,234,200, 99,214,117, 34,221,190,134, 92,179,142, 84,
  474. 154,112,173, 96, 24,110, 69,231, 8,169,246,
  475. 55, 85,138,248,171, 27, 81,241,182, 78, 26,131,154, 80,182, 20, // 14
  476. 157, 37,191,145,210,177, 1,125, 67,190,155,211,110,237, 22,182,
  477. 119, 77,224,165,204,145, 43, 88,135,201,115, 14,237,171,203, 52,
  478. 166,109,153,191, 7,219, 89, 13,147, 61, 88,110, 55, 35,160, 64,
  479. 197,220,162, 11, 63,158, 51,183, 83,159, 66, 32,207, 58, 20,250,
  480. 190, 8,241, 67,166,237,200,148, 59, 89,129,
  481. 230,201,110, 21, 68,224,146,111, 13, 52,187,249, 2,108,226, 95, // 15
  482. 214, 67,243,113, 45,236, 94,208,146,232, 10, 85,176, 47,161, 55,
  483. 243,154, 30, 64,101, 22,121,255, 3, 68,232, 99,145, 85, 5,138,
  484. 25,233, 63,130,102,164, 46,195,101,241,212,155,196,229,102,177,
  485. 121, 54,103,185, 91,251, 25,224,124, 13,253,113,155,225,122, 36,
  486. 77,127, 45,210,138, 56, 15,117,181,219, 19,
  487. 158, 35,150,216,179,105, 34,201,165,234,121, 65,169,201, 35,136, // 16
  488. 176, 6, 91,165, 19, 71,162, 49, 31, 96,128,247, 24, 76,220,128,
  489. 93, 48,210,141,244,183,211, 56,179,151, 29,188, 42,213,114,245,
  490. 185, 83, 32,213, 58,203,129,229, 28,172, 45, 1,127, 82, 23,255,
  491. 5,154,237, 26,206,115,144, 76,171,209, 88,182, 10, 81,184,149,
  492. 221,197,159, 90, 33,188, 96,247, 29,140,100,
  493. 72,243, 54, 95, 9,137,254, 58, 90,142, 81,221, 48,146, 74,254, // 17
  494. 54,124,202,230,134,193,118,251,176,216, 54,153,200,104,147, 10,
  495. 198,163,110, 6, 83, 46,158, 94,116,221, 79,132,251, 65,163, 36,
  496. 99,220,173,141,247, 22, 81,156, 66,113,141,237, 66,186,214,135,
  497. 74,208, 42,139, 67,169, 1,237, 36, 64,143,233, 47,107,242, 66,
  498. 48,101, 16,252,122,222,160, 75,208, 51,188,
  499. 2,177,128,198,234, 51,185,116,218, 10,203, 30,118,235, 15,107, // 18
  500. 193,154, 47, 27, 82,217, 23, 62,134, 14,194,114, 44,239,183, 82,
  501. 253, 27,231,176,216,132, 13,240, 25,191, 50,168, 17,122,199, 59,
  502. 155,123, 3, 95, 41,121,184, 8,252,197, 89,176, 30,156,109, 38,
  503. 171,115, 88,181,244, 51,212, 96,135,196, 17,120,169,203,136, 2,
  504. 174,231,145,177, 60, 5,134, 44,166,112,221,
  505. 144,104, 25, 64,159, 85, 19,151, 44,172,107,152,194, 91,174,217, // 19
  506. 22, 95,245,175,109,152, 77,229,102,164, 80,229, 7, 65,118, 36,
  507. 141, 66,129, 55,105,168, 73,197,142, 87,237,107,209, 86,232, 11,
  508. 193, 69,228,196,164,234, 87,212,134, 60, 14,225, 99,246, 63,199,
  509. 238, 17,218,124, 23,107,152,186, 48,242, 94,220, 75, 24, 97,216,
  510. 84,114, 33, 76,214,108,240,195, 15,254, 84,
  511. 214,185,246,142,223,119,203,244, 74,228, 61,251, 7, 50,150,120, // 20
  512. 72,206,138, 58,227, 11,177,201, 29,245, 89,143,175,214,159,226,
  513. 191, 95,202, 16,248, 34,221,107, 37,175, 6,144, 37,172,140,110,
  514. 244, 35,143, 51, 75,137, 32,108, 44,170,205,132, 53,143, 7, 83,
  515. 145, 52,158, 71,194,231, 75, 11,112,170, 57,153, 42,251,150,190,
  516. 45,137,242,197,126, 25, 91,145, 68,126, 47,
  517. 13, 78, 38,100, 7,173, 40, 98,138, 22,180, 97,136,226, 65,247, // 21
  518. 37,171, 4, 91,197,125, 44,111,147, 55,186,119, 73, 26,100, 53,
  519. 4,167,224,149, 85,182,138, 65,252,121,212, 62,228, 73, 22,178,
  520. 87,163,102,254, 12,215,192,151,230, 84,114, 21,212,173,223,123,
  521. 184,101,250, 6,166, 37,131,254,199, 25,134,213,185,124, 66, 15,
  522. 222,183, 18, 56,150,179,228, 39,218,187,157,
  523. 239,130,208,164, 60,214, 77,194,164,118, 40,215, 76,177, 24,186, // 22
  524. 134,221,113,238, 51,156,253, 80,221, 2,210, 36,243,198,148,249,
  525. 124, 72, 40,108,198, 51, 1,165,199, 51, 92,161,195,127,236, 48,
  526. 217, 17,207,122,173, 98, 66, 3,180, 29,242,158, 71, 39, 98, 21,
  527. 232, 30,198,136, 92,213, 57,158, 90,224, 82, 12, 98, 31,235,166,
  528. 107, 70,159, 96,237, 49, 79,169,107, 34, 94,
  529. 54,174, 44,112,250,134, 31,240, 2,224,189,145, 46,117,211,100, // 23
  530. 81, 56,162, 32,185,100, 14,188,126,165, 95,138, 56,114, 18, 90,
  531. 185,235,136, 21,241,122,230, 81, 22,150,231, 13,105, 59,188, 98,
  532. 133, 62,187, 35, 58,225,125,245,105,142, 50,188,126,253,198,155,
  533. 69,126, 78, 41,228,115,186, 29,125, 41,180,247,158,205, 79,133,
  534. 50,255,117,213, 12,121,207, 3,139,230,196,
  535. 148, 90,225, 25,187, 93,157,111, 70, 52,105, 25,248,161, 6,146, // 24
  536. 242, 17,206,131, 70,225,139, 39, 62,240, 24,223,185,162,216, 61,
  537. 153, 47,209,169, 63,148, 98,207,109,188, 42,136,247, 35,156, 2,
  538. 249,147, 82,237,154, 19,164, 53,195, 74,225,102, 8, 79,134, 56,
  539. 217,170,238,149,178, 10, 72,205,240,155,109, 58,120, 45,181,225,
  540. 11,197, 31,175, 85,189,146,247, 72, 21,115,
  541. 251, 13,197,131, 65, 10,221,191,135,236,171,207, 94, 61,230, 51, // 25
  542. 192,125, 92,249, 21,167,207, 91,196,113,151, 77, 8, 96, 37,231,
  543. 117, 9,103, 84,193, 12,178, 37,244,127, 73,168,206, 81,223,109,
  544. 202, 26,174,101,130,197, 89,217, 38,163, 22,209,175,233, 36,187,
  545. 2,107, 52, 22, 83,249,138,103, 22, 64,197, 2,222,145, 26,102,
  546. 160,128, 79,143,243, 29, 63,101,199,165, 47,
  547. 178,123, 81,160,233,177, 45, 84, 18,155, 75, 11,134,197,110,170, // 26
  548. 33, 72,180,151, 52, 84,117,245, 27,173, 45,206,254,120,173, 72,
  549. 191,248,161,218, 52,255, 78,134, 61, 7,233, 99, 18,120,176, 46,
  550. 71,120,231, 6, 68,251, 26,116,139,247, 84,132, 42,112,157, 98,
  551. 249,146,211,190,100,162, 44,177,215,142,232, 94,191, 71,246, 81,
  552. 213, 55,230, 39,112,168,225, 43,121,221, 86,
  553. 215, 59,242, 39, 97,119,142,252,202,117, 43,242,173, 36, 76,137, // 27
  554. 213,237, 1,112,229,190, 14,155, 76,231, 98,131, 59,150,209, 29,
  555. 138, 57, 27,132,113, 32,210,167,222,154,198, 52,189,146, 28,238,
  556. 163,196, 40,213,167, 46,151,188, 14, 97,199, 63,167,220, 17,204,
  557. 80, 25, 67,125,221, 61,234, 12, 86,114, 43,168,127, 17,165,117,
  558. 186, 4,154,204, 70, 15,132,184, 10,144, 36,
  559. 158, 1,140,209, 21,194, 68, 24, 93,182,220, 90,119,205,255, 22, // 28
  560. 98,158, 63,208, 33,142, 56,217,125, 4,180, 32,193, 15, 83,238,
  561. 102,183, 79,232,187,150,103, 15, 87,112, 32,135,253, 67,212, 88,
  562. 138, 61,103,143, 85,223,104,238, 57,218,145, 10,241, 89, 60,133,
  563. 181,113,243,169, 6,148,116,201,165,253, 19, 78,239, 50,217, 35,
  564. 68,250, 99,128,176,213, 95,253, 76,232,112,
  565. 93,191,107,170, 61,239,165,215,149, 52, 15,164, 60, 8,152,185, // 29
  566. 50,130,188, 92,127,253, 98,171, 66,202,143,245, 68,226,115,161,
  567. 2,214,147, 13, 50, 81,235,193, 52,179,228, 74,107, 14,182,114,
  568. 8,248,175, 23,198,130, 39, 79,156,115, 44,192,109,141,214, 41,
  569. 234,149, 58, 40, 94,210, 32, 79, 50,134,211,182,141,102,193,151,
  570. 124,178, 26, 56,240, 40,149, 54,173, 23,200,
  571. 248, 28, 81,225,133, 9,109, 37,127,241,110,212,141,233,104, 70, // 30
  572. 240, 13,226, 57,169, 8,198, 26,242, 43,109, 90,170,136, 35,199,
  573. 71,120,244, 93,202,162, 26,121,250,147, 3,205,167,229, 60,151,
  574. 205, 42,126,232, 76, 17,181,209, 7,173,249, 69,163, 19,177, 75,
  575. 8, 96,196,227,178,130,246,156,190, 26,110, 59, 5,229, 61, 13,
  576. 233, 86,209,163, 89,120, 5,203,106,136, 46,
  577. 77,130,202, 39, 76,154,228, 85,203, 63,175, 81, 40,192, 33,122, // 31
  578. 201,167,108, 35,236, 84,149,116, 81,159,210, 11, 49,191, 95,252,
  579. 45,176, 30,113,224,134, 66,170, 35, 95,119, 54,140, 96, 34,239,
  580. 78,184, 98, 55,157,253,144,118,227, 92, 27,102,205, 59,255,118,
  581. 223,165, 26,109, 71, 19, 52,100,228, 72,241,152,204, 82,130,184,
  582. 103, 39,139, 14,226,192,160,242, 83,219,161,
  583. 7,233,150,110,255,192, 45,179, 5,152, 32,250,131, 78,221,143, // 32
  584. 23, 85,149,192,119,212, 39,234,187, 21,129,239,116,220, 22,147,
  585. 125,209, 67,168, 47, 5,239,198, 72,220,182,246, 20,200,128,170,
  586. 19,141,217, 1,204,100, 49, 73, 37,195,151,225,129, 35, 82,144,
  587. 201, 53,134,241,158,189,221,141, 7,128,178, 30,107,169,253, 48,
  588. 217,167,243, 74,111, 33, 63,128, 20, 53,183,
  589. 197, 56, 30,178, 13, 64,105,133,236, 88,210,104,184, 4,166, 61, // 33
  590. 249, 45,223, 10, 64,163, 74,135, 97,226, 55,177, 85,155, 62,188,
  591. 81, 9,236,139,190, 84,105,143, 17,152, 80, 40,162, 69,221, 50,
  592. 115,250, 67,164,131, 27,194,162,245,126, 53, 5,168,218,189, 98,
  593. 31, 78,211, 2, 57,116, 84,175, 46,203, 87, 52,224, 24, 70,153,
  594. 21,121, 59,178,134,206,101,189,231,144, 97,
  595. 115,157, 90,211,140,219,164, 23,196,120, 16,147, 51,235, 92,203, // 34
  596. 115,170, 98,138,251, 27,204, 2,168, 69,149, 31,204, 4,241,108,
  597. 227,160, 98, 24,250,127,212, 61,235,108,208,135,236,110, 5,187,
  598. 83,196, 32,108,242, 83,219,109, 18,178, 84,242, 70,114, 14,159,
  599. 244,176, 94,147,196,253, 17,211,109,153,250,123,195,145,116,209,
  600. 88,191, 3,221, 45,246, 10,153, 37, 68,249,
  601. 205, 66,243,120, 33, 84,244, 70, 44,172,240, 75,205,129, 35,152, // 35
  602. 14,189, 53,207, 81,184,112,245, 45,212,101,251,133, 74,171, 35,
  603. 58,128,205, 73, 50,167, 12,185, 36,168, 53, 15, 85,181,148,228,
  604. 137, 52,173,211, 16,175, 43,146, 61,229,105,198,138, 47,232, 63,
  605. 119, 24,223,122, 46, 74,161, 34,231, 62, 15,166, 81, 11,240, 36,
  606. 159,248,104,147, 77,160, 93,216,122,171, 18,
  607. 43,179, 9,167, 51,203,112,144,218, 94, 55,163, 19,177,109,242, // 36
  608. 74,228, 30,125,160, 56,145, 84,179,120, 22,190, 48,112,211,140,
  609. 197, 20,172,218,110,229, 79,136, 94,255,121,194,220, 35, 57, 95,
  610. 26,237,100,145, 77,126,238, 93,204,129, 14,157, 25,173,207,141,
  611. 196, 55,158, 15,235,180,126, 89,144,102,205, 42,233,104,171, 66,
  612. 132, 81,215, 34,200, 22,184, 50, 82,223,133,
  613. 234,106,142,220, 97,179, 2,187, 30,135,225,117,253, 80,212, 46, // 37
  614. 134,158,102,241, 9,218, 32,227, 12,152,235, 87,145,228, 26, 95,
  615. 254, 85, 48,124, 25,152, 40,193,218, 3, 63,138,102,163,250,129,
  616. 207,159, 8, 57,218, 36,193, 3,163, 42,217, 78,249,102, 84, 4,
  617. 105,249, 86,204,108, 31,226,198, 52,245,177,117,151, 49,193,228,
  618. 9,181, 61,128,235,106,135,253, 2,190, 95,
  619. 58,208, 30, 74,238,130, 69,251,103,201, 8, 49,144, 27, 99,190, // 38
  620. 1,203, 60,177, 88,188,102,128,201, 68, 37,167, 7,184, 62,163,
  621. 12,184,144,241,197, 95,246,114, 73,149,175,240, 19, 68,197, 13,
  622. 65,116,192,254,165,107,153, 73,250, 98,174, 52,124,193, 54,235,
  623. 163, 36,133,174, 59,153, 78, 11,157, 38, 83, 3,212, 79,137, 42,
  624. 116,206, 23,168, 86,190, 65,166,110,150, 25,
  625. 164,122,187, 48,155, 26,173, 46,156, 74,168, 92,183,223,159,123, // 39
  626. 86,226, 24,122,148, 39,234, 58,170, 95,218,123,247,103,135,236,
  627. 119,216,100, 1, 58,177, 17,166, 46,209, 29, 90,203,146,111,177,
  628. 229, 37, 81,130, 22, 66,232,133, 27,202,140,231, 34,146,216, 26,
  629. 123,194, 67,217, 8,250,119,214,105,192,135,237,167, 22,220, 93,
  630. 255,156,105,243, 54, 12,228, 42,214, 68,240,
  631. 79, 5,254,109,213, 83,233,125,221, 26,206,237,125, 61, 18,247, // 40
  632. 48,140,184,255, 64,206,159, 16,251,115, 46,195, 75, 28,200, 43,
  633. 75, 34,159, 78,221,140, 66,236,132, 99,234,128, 60,231, 34, 89,
  634. 131,203,171, 96,214,185, 11,196,116, 56, 87, 6,186, 72,112,173,
  635. 83,228, 28, 97,135,190, 36,167, 62,224, 28, 94, 61,118,180,149,
  636. 16, 76, 44,131,217,154, 89,128, 19,196,131,
  637. 216,179, 87,139, 16,195,101, 12, 66,136,109, 81, 41,192, 74,206, // 41
  638. 166,104, 37, 78, 7,115, 84,133, 39,183,142, 13,157,223, 91,152,
  639. 210,175,233,129,188, 30,108,204, 9,186, 40,160, 8,180, 72,163,
  640. 249, 2, 55,240, 40,139,104, 50,224,156,214,121,243,159, 15,254,
  641. 50,148,117,242,168, 64, 92,238, 16,120,176,145,206,241, 32, 58,
  642. 191,223,173,201, 31,116,197,236,175, 99, 36,
  643. 63,149, 32,230,174, 41,145,205,164,249,182, 5,163,240,144, 95, // 42
  644. 9,197,232,157,220,173,240,203, 70,227, 89,240, 53,121,179, 5,
  645. 115, 53, 24,103, 68,253,148, 86,167, 64,220,107,246,133,208, 26,
  646. 109, 73,152,116,178, 71,236,171, 93, 16,180, 42, 95, 60,211,104,
  647. 187, 5,199, 55, 24,207,126,147,201, 75,245, 52, 7,100,142,232,
  648. 91,122, 3, 67, 99,171, 9, 77, 49,154,245,
  649. 96,203,123, 56, 75,113,245, 54, 95, 30, 62,218,129, 23,112,226, // 43
  650. 58,124, 80,135, 99, 55, 32,150, 2,110,160, 67,206, 31,236, 70,
  651. 219,139,244,197, 7,172, 46,229, 31,125, 80,201, 44, 90, 55,222,
  652. 142,194,231, 27,211, 16,146, 37,253,135, 76,229,143,192, 40,139,
  653. 73,224,160, 84,111,225, 1, 52,164, 31,108,196,168, 80,201,115,
  654. 36,161,248,143,228, 41,252,145,111,193, 20,
  655. 172, 8,247,156,221,188, 3,171,125,226,153, 87,194, 70,173, 34, // 44
  656. 187,249, 25,211, 16,196, 77,121,192,219, 22,124,166,103,144, 22,
  657. 188, 87, 60,153,118,216,133, 99,199,249,142, 27,158,189,117,170,
  658. 18, 94, 48,167,108, 86,197,113, 62,204, 29,168, 11,122,231,170,
  659. 21,126, 37,239,142,172, 78,254, 95,215,144, 38,127,252, 17,179,
  660. 60,205, 29, 82,178,133, 62,208, 27,230,132,
  661. 221,108, 49, 93, 27,133, 84,235, 21,200, 44,119,254, 48,210,137, // 45
  662. 86,158, 48,178,108,228,162,246, 93, 61,184,254, 50,192, 79,247,
  663. 112,169, 15,227, 40, 75, 18,181, 54, 12,176,104,217, 4,232, 49,
  664. 247,126,217, 74,248,157,226, 3,185,123,218,106,249, 73, 31, 89,
  665. 247,183, 97,205, 18, 47,196,134,182, 10,236, 88,208, 57,153, 77,
  666. 240,131,103,220, 16,112,185, 91,160, 52, 78,
  667. 36,150,190,216,169, 53,197,148, 71,101,181, 17,149,105, 6,234, // 46
  668. 116, 64,218,141, 68,131, 53, 12,175, 31,131, 85, 9,224, 36,155,
  669. 51,215,125,180, 90,203,243,155,119, 86,231, 56,134, 71,102,148,
  670. 79,173, 7,143, 25, 56,130, 77,161, 38, 81,150, 51,202,156,214,
  671. 113, 48,157, 66,125,232,105, 27, 69,121, 53,184, 23,105,228,123,
  672. 9,190,159, 55,197, 44,225, 1,243,123,180,
  673. 240, 65,128, 20,119,230,103, 34,210,136,240, 74,225,183, 79,166, // 47
  674. 24,182, 96, 9,253, 34,208,146,105,230,152,205,114,172,129,210,
  675. 100, 25, 70,252,142,107, 34, 69,222,185,147, 20,253,165,194, 19,
  676. 210, 41,200,114,187,216, 39,245,104,194,237, 7,182, 92,133, 13,
  677. 70,201, 9,243,171, 81,155,204,240,171,150,230,132,173, 31,201,
  678. 97, 41, 74,244,128,166, 75,143,102,199, 13,
  679. 85,203, 41,249, 78, 9,159,244, 63, 6,161, 36,124, 51,217,132, // 48
  680. 245, 42,226,150,184,110, 80,238, 38,195, 73, 53,241, 90, 64, 3,
  681. 175,230,152, 44, 6,168,191,135, 9, 46, 95,202, 66,121, 38,239,
  682. 131,101,235, 60,162, 95,140,200, 18, 55,135,101,222, 33,244,188,
  683. 124,226,141,106, 32,220, 7, 57,109, 34, 92, 14, 65,217, 51,166,
  684. 237,153,207, 6, 97,232, 24,206, 40, 66,158,
  685. 136,106,174,145,208,187, 87,127,176,109,216, 93,202,152, 15, 64, // 49
  686. 102,196,125, 75, 22,202,136,180, 91,124, 13,178, 24,151,197,248,
  687. 138, 85,198,118,220, 61,238, 99,204,234,125,169, 31,223, 81,176,
  688. 53,159, 85, 23,254, 8, 66,166,119,212,179, 24,153,119, 77, 45,
  689. 169, 23, 83,196, 55,181, 91,138,218,185,252,118,188, 96,138, 85,
  690. 20,128,106,180, 52,152,118,177,255,116,216,
  691. 18,238, 29, 71, 45,112, 28,207, 44,238, 56,187, 28,251, 94,206, // 50
  692. 158, 1, 58,173,234, 46, 72, 4,158,251,209, 97,219,120, 34, 57,
  693. 111, 29, 67,173, 88,128, 25, 52,152, 72, 16,243,101,146,201,109,
  694. 1,222,185,137,104,190,221, 37,241, 90, 65,252, 48,175,217,108,
  695. 233, 63,163,253,136,110,238,160, 17, 76, 49,148,227, 5,249,195,
  696. 66,222, 47,250, 85,211, 46, 92, 10,167, 51,
  697. 185, 91,211,130,233,173,254, 74,155, 17,122,146, 72,115,177, 35, // 51
  698. 235,139,216, 92,113,154,210,229, 61, 34,140, 45,166, 75,227,186,
  699. 164,233,210, 14,247,160,214,174,110,190,141, 51,184, 12, 62,251,
  700. 134, 74, 33,230, 46,150,114, 74,146, 7,166,124,193, 69, 1,147,
  701. 35,203, 97, 5, 43,213, 24, 60,201,131,178, 24, 78,162,120, 35,
  702. 147,183, 14,138,169, 22,237,133,203, 79,227,
  703. 149, 59,166, 15, 86,147, 1,130,194, 97,180,217, 5,232,138, 70, // 52
  704. 112, 45,187, 21,243, 32,127, 99,194, 87,176,108,246, 17,135, 93,
  705. 10,133, 55,146, 39,103, 70, 2,255, 30,226, 89,212,121,163, 40,
  706. 172,206,120,164, 89,239, 16,208,181,102,215, 29, 95,209,127,249,
  707. 85,155,129,218,173, 84,196,120,245, 90,217,112,196, 41,212,103,
  708. 241, 87,118,199, 65,111,190, 59,155, 28,124,
  709. 4,251,101,192,219, 53,103,226, 58,235, 69, 41,160, 85,192, 19, // 53
  710. 168,249, 76,134,167, 59,182, 15,133,235, 8,195, 65,150,215, 47,
  711. 252,101,189, 87,179,222,143,204, 93,131, 58,152, 23,236, 86,218,
  712. 99, 21, 54,213, 29,175, 59,133, 32,233, 53,148,238, 21,164, 58,
  713. 187, 27,240, 56,113,145, 66,164, 43, 2,154, 59,246,135, 64, 22,
  714. 168, 55,219, 30,232,159, 6, 98,213,240,104,
  715. 207, 49,138, 34,121,170,209, 39,167, 23,140,246,105,206, 42,228, // 54
  716. 88,124, 10,211,101,200, 79,250,160, 57,117,223, 38,105,188, 78,
  717. 127,204, 24,235,118, 18, 56,183, 39,168,209,106,176, 46,141, 10,
  718. 190,153,248,103,145, 79,192,245, 83,128,198, 70,118,179, 42,104,
  719. 217,119, 77, 18,193,248, 11,228,108,189,225, 27, 97,180,235,122,
  720. 208, 3,147, 97,127, 43,249,144, 38, 67,181,
  721. 86,163,223, 70,245, 17, 73,150,111,199, 84,176, 15,124, 68,142, // 55
  722. 185,221, 51,144, 28,231, 42,110, 30,214,142, 84,165,238, 1,168,
  723. 30,148, 61,161, 77,246,128,100,237, 78, 7,249, 73,204,113,244,
  724. 75,129, 63,198, 20,226,117, 3,168, 42,175, 10,213, 79,244,139,
  725. 10,174,209,159, 99, 42,135,178, 57,140, 80,127,165, 8, 76,154,
  726. 91,188,254, 69,179,207, 79,186,112,159, 30,
  727. 243,112, 10,153,105,201,132,236, 8,224,131, 63,219,154,255, 6, // 56
  728. 57, 97,172,247, 83,155,127,173,196, 76, 43,190, 24,125, 62,207,
  729. 242, 88,224, 5,186, 48,158,213, 21,145,192,126, 28,157, 59,168,
  730. 34,231, 6,165,127, 51,161, 94,219,113,255, 91,156, 29,191, 66,
  731. 230, 93, 36,123,225, 73,203, 90, 30,255,205, 50,232,199, 44,226,
  732. 58,129, 35,215, 12, 57,134, 19,230,200,132,
  733. 62,189,213, 43,181, 89, 33,177, 61, 99, 28,191, 38, 82,193,113, // 57
  734. 158,207, 23,115,188, 2,213, 92, 21,227,154,255, 92,220,157,100,
  735. 39,124,198,101,135,207, 29, 64,179,107, 44,219, 96,236, 14,209,
  736. 103,176, 90,213, 68,251, 37,204, 27, 67,144, 39,234,129,107,166,
  737. 50,149,253, 60,168, 21,114,222,159,116, 13,155, 85,114,141,184,
  738. 22,169,100,153,115,164,242, 83, 41, 96, 13,
  739. 171, 34, 82,128,228, 55,253,107,205,165,247,150,106,233, 51, 32, // 58
  740. 239, 73,138, 41,229, 58, 78,247,140,104, 6,114, 47,181, 15,140,
  741. 189, 67,156, 34,234, 90,121,251, 88,230,169, 70,140,189,120, 80,
  742. 144,222, 38,112,183,145,101,176,134,227,187,100,200, 4,222, 34,
  743. 199,117, 6,205,138,244,182, 7, 69,194, 94,184, 32,250, 14, 98,
  744. 243,204, 80,239, 45,218,104,176,211,154,234,
  745. 137,103,249,155, 15,118,160, 12,139, 41, 75, 4,208,139,171,122, // 59
  746. 185, 12,220,168, 99,137,166, 37,186, 55,170,200,136, 65,246, 83,
  747. 215, 10,253, 56,165, 16,184,143, 3,130, 31,200, 19, 55,165,254,
  748. 44, 72,137,234, 16, 57,236, 10, 85, 52, 17,164, 54, 82,152, 96,
  749. 238, 75,171, 99, 27, 77, 44,146,240, 48,216,123, 62,202,161, 65,
  750. 123, 50,137, 23,197, 74, 1,139, 53,116, 67,
  751. 193, 4,179, 66,218,196, 69,216, 91,236,183,127, 86, 26, 72,222, // 60
  752. 96,146, 82, 48,196,239, 15,209,119,231, 71,238, 25,205,120, 32,
  753. 172,105,133,201,114, 70,219, 54,202, 62,159,248, 94,227,104, 3,
  754. 181,202, 28,159, 94,195,118,210,149,249,116,217,135,246,179, 24,
  755. 134,186, 48,237,121,165,200,100,127,161, 26,236,143,105, 37,221,
  756. 192, 6,231,180,119,157, 41,189,244, 19,219,
  757. 91,229,116, 40,100, 29,127,169, 24,115, 50,218,162,251,187, 18, // 61
  758. 54,248,179,120, 29, 70,128, 97, 42,157, 12,101,148, 89,165,229,
  759. 49,220, 35, 84,173,245, 34,157,108,236, 83,117,147, 47,207,152,
  760. 123, 91,245, 64,220,141, 30, 49,174, 93,191, 69, 20,104, 45,214,
  761. 64, 13,208,144, 60,230, 86,221, 14, 70,177, 79, 3,229,175, 83,
  762. 147,110,166, 60, 90,251,206,107, 81,168, 45,
  763. 157, 25,139,239,151,184,244, 56,227,190,152, 13,105, 41,129,153, // 62
  764. 204,111, 8,234,208,156,187,250, 77,213,125,191, 40,242, 4,110,
  765. 143, 71,159,209, 9,137, 94,212, 23,179, 39,194, 10,178, 78, 39,
  766. 224, 19,173,127, 6,170, 82,227,129, 1, 44,161,234,201,148,111,
  767. 251,162, 89, 33,183, 1,137, 42,188,252, 97,200,154, 49,125, 18,
  768. 253, 75, 32,210, 13,137, 65, 24,135,199,120,
  769. 59,214, 83,199, 50, 75, 2,104,141, 83, 63,239,195, 69,230,100, // 63
  770. 33,162, 67,137, 96, 54, 4,142, 25,171, 80,223,160, 76,184, 60,
  771. 197,249, 21,111,235, 49,185,125, 76,133,224, 67,214,128,247,113,
  772. 187, 62,108,209, 45,253,106,199, 62,239,212,118, 85, 53, 6,191,
  773. 81,124,218,108,239, 74,209,162, 57,141,118, 33,245, 90,216,185,
  774. 43,203,141,236,113,182,227,160,216, 7,255,
  775. 179, 38,170, 11,114,222,163,194, 21,211,113, 44,124,166, 1,209, // 64
  776. 86,226,193, 23,170,217,115,202, 62,239,111, 20, 57,129,214, 20,
  777. 125, 93,182, 58,152, 79,222, 5,246,171, 20,109,161, 28, 56,146,
  778. 32,242,153, 87,186, 67,149, 15,160, 97,141, 24,186,136,232, 68,
  779. 174, 18,152, 52,164,128, 26,111,226, 17,216, 66,129,168, 62,113,
  780. 155, 98, 51,169, 80, 28, 56,118, 40, 77,104,
  781. 228, 92,131,242,156, 81,129,254, 48,171,231,157, 28,246, 77,177, // 65
  782. 142, 47,122,254, 75, 38,237, 90,155, 34,205,145,249,172, 91,236,
  783. 156, 42,224,121,203, 32,161,103, 43, 63,140,242, 73,222,102,172,
  784. 213, 73, 9,234,132, 23,236,122,185, 47,204, 65,243, 96,160, 29,
  785. 222, 60,245, 31,193, 95,248, 70,181, 88,157,192, 10,205, 30,225,
  786. 15,244,130, 3,191,247, 95,169,240,187,148,
  787. 125, 19,198, 60, 23,207, 35, 66, 99,131, 8, 87,200,137, 51,117, // 66
  788. 242, 10, 65,184,105,136,173, 11,124,180, 71,101, 7, 47,119, 31,
  789. 203, 77,169, 20, 94,252,132,209,178,219, 86,197, 1,132,192, 17,
  790. 92,130,199, 41,175, 94,202, 32, 83,250, 8,173,125, 44,198,119,
  791. 93,201,130, 80,214, 9,173,136, 38,243,107, 48,237, 96,131,165,
  792. 69,180, 88,223,108,146,202, 45,130, 12, 65,
  793. 47,248,151,106,233,180,118,160,235,208, 56,183,105,215, 15,191, // 67
  794. 80,164,219,144, 14,222, 68,197,252, 53,224,158,197,228,178, 84,
  795. 130, 2,241,139,190, 67, 13, 82,122, 21,152,106,180, 42,255, 64,
  796. 231,166,106, 61,227,116, 65,163,220,109,152, 88,212, 14, 73,255,
  797. 143, 4,182,103,150, 53,222, 60,201, 4,147,183, 72,151, 38,238,
  798. 108,211, 29,156, 42, 70, 19,228, 88,195,217,
  799. 113,183, 71, 37,137, 89, 6,194, 31, 82,145,250, 38, 66,151,231, // 68
  800. 109, 36, 93,196, 59,161, 30, 85,108, 21,129, 40, 78,138, 59,255,
  801. 161,212, 65,105, 41,158,224,196, 54,250, 46,232, 71,159,100,147,
  802. 40,208, 16,137,158, 4,214, 44,135, 68,192, 32,143,229,180, 53,
  803. 170, 76,220, 24,243,121, 94,163,124, 86,226, 28,119,214,177, 57,
  804. 7,144, 65,203,234,139,181,106,161, 32,153,
  805. 91, 3,225,172,211, 49,246,139,105,174, 20,119,169,224, 94, 23, // 69
  806. 179,239,130, 27,248,120,232,141,216,164,190,245,115, 12,200, 23,
  807. 108, 46,151,200,236,123, 33,110,167,136,202, 17,127,219, 9,196,
  808. 121, 79,240,187, 70,252,127,177, 13,230, 49,246,104, 80,116, 19,
  809. 231, 45,126,166, 41,186, 15,251, 43,210,137, 56,250, 12, 81,195,
  810. 126,255,174,115, 14, 79,251, 51,215, 72,235,
  811. 202,137,100, 28,116,162, 75,215, 55,203,227, 69, 5,130,199, 49, // 70
  812. 143, 65,208, 77,178, 94, 43,187, 1, 61, 92, 31,169,223,146, 87,
  813. 225,187, 25, 75, 12,178, 88,239, 4, 75, 96,169, 57,186, 84,244,
  814. 29,141, 46,102, 29,193, 76,100,201,154,119,174, 3,161,198,134,
  815. 88,204, 99,232, 71,208,143, 82,181, 19, 97,186,161,110,143,229,
  816. 93, 31, 50, 95,197,126,167, 6,115,141, 22,
  817. 170, 45,252,189, 82,229, 17,125, 25,150, 96,181,242, 84,165,111, // 71
  818. 215, 3,168,117, 12,205,152, 72,126,233,141,207,100, 63, 35,172,
  819. 123, 80,248,130,222, 54,149,191, 61,181,243,117,227, 31,151,108,
  820. 177,219,159,206,121,154, 19,234, 62, 24, 91,214, 57,224, 27,243,
  821. 165, 33,153, 8,132, 98, 47,233,118,148,239, 71, 37,207, 27, 67,
  822. 156,215,191,148,238, 36, 67,208,182,246, 56,
  823. 221, 75,156, 11,131, 41,198,174,251, 80,127, 28, 48,210, 59,237, // 72
  824. 40, 98,246,148, 63,227, 33,245,105,197, 52, 9,240,130,195,233,
  825. 43,153, 91,167,106,207, 39,121,224,144, 20, 41,142, 69,207, 19,
  826. 55, 94, 7, 64,245, 40,213,109,140,244,191, 73,143,112, 47,100,
  827. 62,186,252, 59,185,225,163, 6, 74,200, 46,218,132, 89,246,172,
  828. 16,124, 62, 3, 87,219,144,102, 43, 88,121,
  829. 148, 30,114,207,239,150,109, 72, 46,162,232,194,147,121, 14,154, // 73
  830. 129,195, 69, 35,189,132, 95,172, 15,156, 79,186,150, 28, 76,111,
  831. 16,211,185, 5, 68,135,254, 13,103, 53,217, 86,175,252,116,185,
  832. 224,127,233,181, 86,130,164, 54,178, 36,128, 17,252,189,151,209,
  833. 131, 16,110,144, 85, 27,108,215,174, 30,104,166, 2,193,114, 42,
  834. 223, 99,248,162,119,183, 18,230,174, 11,193,
  835. 99,231,175, 51, 68, 89,224, 1,188,114, 12, 62, 90,254,179, 76, // 74
  836. 224, 24,174,230,103, 18,202, 68,220, 38,253,116, 91,206,166,251,
  837. 61,126, 75,238,201, 29,174, 83,193,158,124,199, 99, 3, 47,140,
  838. 83,163, 38,109, 46,203, 2,229, 82,207, 99,170, 41, 87, 9,237,
  839. 72,195,224, 36,198,246,151, 54,135,254,125, 56,237,148, 61,185,
  840. 140,199, 71, 30,203, 50, 76,129,153,240, 63,
  841. 136, 4, 91,195, 18,165,201,127,243, 94,219,170,206, 34,104,204, // 75
  842. 58,109,139, 82,157,249, 43,150,127, 92,175, 20,229, 50, 3,137,
  843. 179,224, 24,143, 50, 94,151,220, 43,247, 11, 65,230,154,213, 71,
  844. 247, 12,210,154,241,174, 96,122, 26,155,238, 65,218,130,177, 56,
  845. 164, 96, 49,171,114, 67, 17,191, 84, 11,211,177, 77, 26,230, 92,
  846. 8, 50,172,226, 97,149,253, 38, 90, 25,210,
  847. 41,243,154,121,254,101, 59, 32,155, 44,139, 26,117, 64,141, 6, // 76
  848. 167,248, 17,191, 50,120,180,237, 59,215,133, 56,161,125,216, 98,
  849. 33, 88,164,106,181,242,115, 25, 74,111,177,143, 29,114,173, 22,
  850. 188,104, 53,134, 19, 72,146,255,187, 48,137, 5,196,108,227, 22,
  851. 119,249,148, 2,210,134,236,102,227,158, 40, 98,137,206,113,160,
  852. 241,127, 83,135, 9,210,107,188,222,123,176,
  853. 193, 76, 46,210, 27,139,227,182, 84,204, 70,246,153,225,188,237, // 77
  854. 122, 44,212, 68,220, 4, 91, 37,112, 8,190,241, 88,193, 65,154,
  855. 244,192, 57,212, 14, 68,209,138,190,235, 56,208, 77,245, 94, 57,
  856. 127,237,176, 93,225, 40,206, 11, 70,114,228, 96,156, 76, 37,143,
  857. 211, 80, 59,228, 83, 33,172, 42,123, 65,201,242, 15,182, 38, 59,
  858. 211, 20,192,246, 57,174, 65, 12,163, 53,104,
  859. 148,224,107,180, 82,170, 15,114,234, 9,176,103, 20, 85, 36, 55, // 78
  860. 93,160,132,102,171,128,228,148,207,163, 79, 30,116, 13,230, 41,
  861. 114, 7,141,233,123,161, 48, 2,155, 85, 16,162, 37,135,192,216,
  862. 158, 34, 71,200,117,178, 89,130,220,167, 21,202, 50,184,243, 94,
  863. 170, 16,190,120,182,150, 71,220,181, 19,146, 72,120,223, 88,142,
  864. 175, 69,110,158, 29,123,238,141, 83,246, 27,
  865. 66, 11,132, 35,238, 52,213, 92,148, 51,131,219,198,162,118,181, // 79
  866. 215, 10,202, 36,255, 64,194, 20, 85,232, 46,153,213,143,179, 83,
  867. 169,205, 96, 40, 84,200,252,102,226,124,214,105,234, 86, 5, 49,
  868. 108,223, 9,144, 48,247,157, 35,194, 93, 67,250,131, 12, 64,200,
  869. 41,132,241, 28, 92,252, 7,137, 92,248,105,192, 47,167, 6,253,
  870. 117, 43,219, 93,229, 81,198, 31,215,129,202,
  871. 174,249,156,204, 97,126,162, 63,194,241, 81, 41, 96, 3,229,140, // 80
  872. 80,237, 72,153, 95, 25,162, 57,138,118,182,252, 92, 60, 27,238,
  873. 133, 49,248,178, 23,133, 58,180, 74, 27,174, 44,200,153,182,254,
  874. 142, 89,169,236, 82, 23,112, 65,235,144, 31,161,110,229,150,117,
  875. 225, 99,156, 69,210,111,195, 38,212, 60,164, 25,234,136,102,184,
  876. 23,199,134, 1,186,151, 46,110,165, 4, 93,
  877. 120, 47, 73, 16,183, 39,250, 4,123, 30,172,144,253,184, 70, 31, // 81
  878. 109,170, 21,192,136,221,107,242,202, 31, 69, 3,129,199,112,212,
  879. 18, 75,115,143,225,106,164, 37,198,139,247, 68,123, 22,113, 64,
  880. 27,204, 40,107,208,163,220,179, 7,116,189,216, 46, 80,178, 20,
  881. 57,194, 5,176, 45,146, 77,167,122, 14,204,117, 66,205, 51,227,
  882. 74,163,240, 72, 38,117,217, 75,194, 51,225,
  883. 21,189,216,116,230,143, 80,188,223,102,207, 23,122, 49,154,242, // 82
  884. 195, 53,120,244, 48, 73,179, 11,155,100,210,162,227, 46,152, 90,
  885. 164,192,216, 8, 65,202, 14,239,113, 56, 6,148,215, 79,233,158,
  886. 219,129,186, 60,136, 14, 52,127, 87,241, 54,100, 2,204, 93,254,
  887. 136, 86,237,125,218, 22,239, 48,227,146, 83,239,157, 30, 95,149,
  888. 123, 49,104,205,159,243, 25,139,254,104,155,
  889. 240,142, 81,163, 50, 20,170, 90, 47,158, 64,229, 87,202,104, 13, // 83
  890. 136,217, 87,157, 1,214,130, 51, 78,234,115, 39, 72,180, 11,251,
  891. 64, 36, 98,174,236, 81,150, 95,208,172,222, 82,167, 38,194, 16,
  892. 101, 73, 1,241,195, 91,253,199,154, 21,131,171,245,115,158, 43,
  893. 212,154, 34, 60, 94,183,115,200, 93, 39,186, 3,106,183,248, 10,
  894. 212,186, 19,129, 55, 97,183, 64, 16,179, 79,
  895. 54,110, 6,246,100,212,118,231,132, 11,186,140, 18,162,223, 78, // 84
  896. 44,163, 27,229,111,194, 92,251,173, 28,185,147,242,106,135,201,
  897. 119,224,148, 55, 30,127,188, 43, 72,130, 34,100,250,127, 54,140,
  898. 245,178,147,113, 35,172,106, 31, 68,223,198, 60,142, 33,189, 68,
  899. 10, 99,204,167,250,140, 8, 67,157,255,123, 69,222,132, 63,161,
  900. 41, 85,252,172,213, 8,223,161,118,208, 33,
  901. 227,171,195, 56,140,186, 60, 28,200,241, 80,110,247, 38,126,192, // 85
  902. 252,103,184, 68,142, 39,162, 22,137,219, 63, 8, 88,216, 32, 52,
  903. 159, 14,112,248,160,215,105,255, 10,231,159,203, 13,182, 97,204,
  904. 66, 29,214, 82,225, 64,137,232,162,110, 83, 25,209, 86,232,123,
  905. 242,178,130, 14, 71, 42,222,178,107, 19,209,171, 49, 25,215,110,
  906. 234,142,102, 36, 74,144,106, 39,237, 86,149,
  907. 95,128, 37,225, 86, 11,255,151, 97, 39,165,207, 58, 91,176, 7, // 86
  908. 66,131,207, 16,245, 62,222,114, 80, 98,203,126,191,151, 78,183,
  909. 242, 71,187, 87, 1, 69, 35,151,181, 89,117, 60,141, 78,230, 8,
  910. 167,132, 50,182,153, 21,188, 55, 4,185,139,230,112,174, 26,151,
  911. 82, 49,226,113,206,160,123, 33,235, 52,144, 82,245,153, 86,185,
  912. 71, 4,217,157,193,242, 67,189,135, 2,185,
  913. 29, 76,209,152,112,169, 69,114,181, 62,128, 4,185,229,114,148, // 87
  914. 221, 33, 93,155,106,176, 6,198,237,165, 20,254, 54, 24,234, 95,
  915. 129, 30,208,122,170,197,223,112, 54,206, 19,241,193, 46,160,111,
  916. 218, 94,250, 10,102,236,121,208, 87,244, 49, 16,148, 54,217, 98,
  917. 203, 18, 68,152, 88,244, 76,192,138, 74,198,117, 10,194,123, 22,
  918. 164,199, 54,114, 14,126, 23,220, 53,111,248,
  919. 157,187, 9, 58,235, 33,219,195, 19,236,214,101,139, 43, 73,199, // 88
  920. 47,171,238, 71,218,131, 85,144, 34, 61,139,103,178,120,162, 5,
  921. 219,149, 59,233, 47, 91,133, 15,234,146, 83,169, 31,123,244, 73,
  922. 33,189, 61,129,201, 74, 42,151,106,164, 73,189,253, 75, 3,184,
  923. 137,249,175, 30,189, 53, 1, 96,211, 15,161,227,101, 48,210,239,
  924. 40,126,247, 78,222,179, 97,147,174,209, 61,
  925. 222, 82,245,129,176, 94,134, 49,144, 87,160, 28,251,164, 20,244, // 89
  926. 104,136, 11,192, 26, 47,247,180, 95,188,213, 41,226, 64,201,112,
  927. 44,172, 94,138, 27,247,163, 72,177, 45,128,224,102,207, 18,146,
  928. 173,116,223,151, 31,175,252, 11,226, 33,213, 98,124,160,231,118,
  929. 36, 76,111,232,100,137,236,175,114,247, 37, 66,175,145, 68,103,
  930. 149, 87,175, 41,141, 29,250, 44, 86, 13,134,
  931. 24,108,150, 21, 73,205, 2,246,108,203, 77, 59,187, 97,129,175, // 90
  932. 82,217, 61,115,145,205, 65, 17,120,240, 8, 88,154, 17,244, 77,
  933. 188,253, 11,215,195,111, 52,212,101,251, 28, 63,158, 88,183, 59,
  934. 238, 3, 87, 53,210, 92,137, 69,184,117,146, 52, 13,199, 90, 56,
  935. 168,199,149, 11,210, 36,155, 73, 45,146, 89,200, 25,250, 7,180,
  936. 228, 22,213,108,193, 64,163,121,232,184, 98
  937. ,
  938. //
  939. // Cyan
  940. //
  941. 87,195,141, 6,185,154, 78,141, 94,121,252, 82,161,226,195,100, // 0
  942. 255, 12,201,232, 79,126,230, 48, 75,130,102, 34,139, 16,198,152,
  943. 11,188, 37,100,199,228, 68,191,252,151, 8,101,245, 19,204, 85,
  944. 14, 57,206, 26,103, 45,182, 12,227,153,195,233, 57,147,194, 47,
  945. 151,204,111,248, 80, 32, 51,113,181, 17,141, 69, 13,243, 34,145,
  946. 237,216, 26,117, 62,161, 42,241,175,119,158,
  947. 110, 22,176, 62, 98,209, 30,176,197, 25,207, 8,106,137, 63,128, // 1
  948. 166, 83,109,149, 34,189,155, 21,253,209,171, 86,211,174, 78, 48,
  949. 212, 80,128,156, 2,138, 44,100, 24, 80,231,139, 42,187, 52,234,
  950. 166,123,247, 77,164,208,142, 59,123, 27, 89,127, 32,210, 10,128,
  951. 227, 39,168, 17,199,124,237,149, 60,250, 86,188,113,204, 60,177,
  952. 19, 56,149,248, 14,191,121, 87, 17, 57,245,
  953. 211, 70,224,118,238, 54,127,227, 58,151, 73,173,219, 37,240, 18, // 2
  954. 215,191, 23,246, 66,218, 82,114,145, 66, 10,243,109, 40,132,255,
  955. 104,170,232, 69,250,114,212,161,220,183, 56,199,116,159, 79,135,
  956. 95,191, 6,114,229, 20, 92,191,215, 50,252,182, 74,241, 85,184,
  957. 98, 64,219,137, 59,170, 89, 22,207,124,167,223, 42,160, 90,126,
  958. 206,104,189, 76,141,235, 32,217,200,146, 33,
  959. 127,168, 36,151, 17,195, 90, 2,107,239,125, 47, 93,200,157, 52, // 3
  960. 78,124, 49,174,116, 10,177,227, 28,195,120,153, 68,223,183, 24,
  961. 144, 53, 17,186, 33,176, 74, 10,109,132, 28, 91,225, 2,253, 24,
  962. 208, 38,149,177, 43,133,246, 71,159,104,137, 11,160,112,152, 21,
  963. 255,119, 31, 93,242, 2,219,186, 43,101, 5, 76,131,232, 9,255,
  964. 71,164, 4,210,100, 54,132,163,107, 73,181,
  965. 3, 94,248, 78,178,133,255,165,206, 33,188,234,140, 12,114,182, // 4
  966. 232,147,220, 91,205,139, 49, 99,164, 53,232, 38,199, 6,116, 88,
  967. 221,193,120, 91,219, 49,149,243, 44,174,248,149, 64,175,102,154,
  968. 55,232, 87,214, 64,184,107, 4, 41,228,195, 61,221, 36,197, 70,
  969. 136,166,208,183,153,106,130, 70,143,231,198,153, 35,192,109,150,
  970. 27,225,129, 43,179,220, 75, 8,254, 41,232,
  971. 192,144, 52,204,105, 28, 49, 79,143, 99, 64, 25,180, 80,245, 91, // 5
  972. 31, 72, 1,159, 35,238,186, 70,248,135, 89,173,100,145,242,163,
  973. 41, 73,246,164,134,105,195, 81,206, 67, 11,109,209, 34,219,120,
  974. 180, 71,138,104, 15,220,154,236,174, 81, 26,123,174, 99,238, 47,
  975. 213, 9, 78, 56, 28,202, 47,253,175, 32, 64,246,101, 62,216, 43,
  976. 180, 97, 63,250,149, 20,169,194, 91,154,109,
  977. 70,214,116, 12,231,159,219,187, 12,244,160,118,210, 48,151,125, // 6
  978. 208,167,251,123, 62,107, 19,208,112, 4,214, 25,229, 51, 77, 18,
  979. 212,137, 5, 66, 30,238, 15,140,114,161,233,187, 48,144, 74, 26,
  980. 240, 8,195,251,127, 79, 49,131, 98,205,149,246, 73, 1,142,171,
  981. 87,109,246,133,232, 86,164, 10,117, 92,134,180, 25,170,133, 80,
  982. 238,143,200, 32,114, 88,238,123, 28,208, 47,
  983. 245, 34,152,187, 66, 92,121, 59,133,197, 77,228, 4,170, 66,189, // 7
  984. 16, 89, 47,190,223,169,138, 40,157,192, 71,153,123,185,205,125,
  985. 176,103,227,187,210, 88,179, 41,218, 22, 74,131, 96,247,199,159,
  986. 97,147, 61, 35,157,197, 18,211, 59, 10,109, 41,185,219,118, 23,
  987. 227,146,192, 17,102,146,210, 80,187,228, 15,212,117,237, 10,191,
  988. 114, 17, 77,174,223, 50,141, 65,228,117,175,
  989. 132, 89,235, 40,137,242, 33,212,102, 26, 53,146, 90,254, 33,215, // 8
  990. 111,230,146, 96, 11, 74,245, 93,231, 51,108,245, 42, 92, 27,252,
  991. 54, 83,146, 45,123,159, 61,235, 96,145,201, 31,172, 7,116, 46,
  992. 225,204,122,186, 91,238,107,145,254,178,223,160, 97, 53,201, 65,
  993. 179, 74, 44,166,218, 72, 21,243,139, 43,161, 56, 86,156, 70,221,
  994. 51,161,243,126, 7,208,186, 16,160, 77, 22,
  995. 167, 5,177,107,205, 9,181,144,249,164,207,112,193,130, 80,138, // 9
  996. 56,177, 37,209,135,186, 54,205, 17,147,179, 11,216,168,112,152,
  997. 10,236,180, 19,100,248, 11,124,188, 50,226, 83,236,140, 67,178,
  998. 25, 81, 13,229, 55, 24,170, 69, 30,123, 76, 18,241,145, 32,250,
  999. 125, 6,233,113, 50,196, 40,110, 68,199,100,247,188, 41,127,174,
  1000. 103,207, 39, 98,156, 69,106,251, 44,200,224,
  1001. 63,123,219, 57, 84,163, 52, 76, 40, 95, 15,238, 48, 18,221,165, // 10
  1002. 243, 6, 78,249,111, 26,160,104,128, 83,208, 75,140, 58,195, 79,
  1003. 208,128, 68,204,150, 75,213,161, 69, 4,157,105, 54,194,219, 93,
  1004. 254,141,175,104,163,127,222,188, 97,151,215, 56,111,189, 81,103,
  1005. 164,207, 91,142,252,177,130,165,234, 9,147, 31,113,205, 24,253,
  1006. 1,139, 66,194,234, 35,173,124, 81,139, 98,
  1007. 248,197, 44,147,253,116,224,191,128,227,171, 70,153,183,107, 29, // 11
  1008. 90,126,194,156, 63,202,239, 46,193,255, 31,122,241, 23,225, 45,
  1009. 173, 29,108,225, 47,178, 30,105,202,253,126,188, 16,118, 31,154,
  1010. 115, 51,216, 37,249, 87, 57, 3,239, 42,196,132,227, 9,153,212,
  1011. 25, 61,188, 31, 75, 2, 95,208, 55,126,221,176, 76,234,151, 61,
  1012. 94,229,178, 16,132, 90,216, 3,236,182, 18,
  1013. 154, 28, 93,172, 18, 39,142,100, 2,198, 32,133, 91,233, 58,206, // 12
  1014. 147,226, 44,100, 10,131, 86,150, 2,168, 55,156, 94,179,114,143,
  1015. 95,244,157, 1,136,115,230, 54,138, 88, 45,215,162,243, 61,184,
  1016. 1,199, 72,133, 12,198,141,211,117,161, 87, 36,167, 68,234, 51,
  1017. 137,241,157,117,222,155,239, 78, 34,192, 88, 18,139, 45,106,200,
  1018. 165, 32,117,249, 72,200,144, 56,157, 41,113,
  1019. 74,186,237,108,194,218, 62,245,157, 57,111,248,200, 5,124,176, // 13
  1020. 67, 17,166,236,179,210, 34,232,116, 78,227,196, 7, 69,234, 13,
  1021. 211, 37, 65,183,250, 84,190, 13,166,221, 20, 68, 92,135,204, 80,
  1022. 236,165,107,224,156, 48,102,170, 74, 24,247,183, 99,128, 22,184,
  1023. 109, 86, 10,205, 46,128, 21,175,146,103,252, 60,215,187, 13,127,
  1024. 222, 85,155, 55,169, 19,110,226, 87,201,223,
  1025. 143,121, 7, 68,131, 89,173, 27, 77,222,177, 49, 81,168, 38,251, // 14
  1026. 103,215,120, 82, 51,112,163, 60,200,132, 35,102,218,127,157, 62,
  1027. 177,132,203, 96, 27, 59,149,239, 71,121,185,148,226, 12, 45,103,
  1028. 134, 21, 44,182, 90,242, 17,226, 52,205,124, 5,224,197, 85,254,
  1029. 166, 55,230,101,170, 64,202,110,227, 6,168,117,157, 94,246, 68,
  1030. 38,189, 9,214, 98,240, 41,184,130, 11, 59,
  1031. 243, 48,199,230,163, 13,213,126,200, 93,135, 26,153,226, 90,137, // 15
  1032. 53,193, 33,150,253, 19,217,102, 23,248,176,149, 49,186, 26,252,
  1033. 109, 76,238,122,162,218,105, 36,203, 98,243, 31,109,173,251,158,
  1034. 211, 69,247,123, 62,191,148,121,180, 92,150, 71, 46,153, 36,134,
  1035. 17,198,144, 26,192, 92,250, 39, 68,203, 45,234, 21, 56,163,203,
  1036. 138,236,106,142, 31,192,154, 78,255,105,173,
  1037. 20, 95,152, 60, 38,243,108, 47,153, 7,231,190,115, 18,204,181, // 16
  1038. 13,156,228, 66,189,140, 76,183,147, 57, 90, 16,240,111, 83,198,
  1039. 47,168, 20, 52,188, 8,130,180, 63, 3,168, 76,203, 59,125, 38,
  1040. 89,177,144, 6,209, 34, 82, 41,253, 16,216,177,244,107,217, 67,
  1041. 227,116, 74,240,131, 10,159,135,185, 94,148, 75,132,225,107, 4,
  1042. 82, 45,176, 69,224,125, 57, 18,167, 44,209,
  1043. 125,181,220,115,140,185, 72,168,254, 61,104, 70,247, 57,121, 74, // 17
  1044. 244, 85,106, 5,122, 40,225, 10,236,113,212,193,133, 54,223,145,
  1045. 5,232,137,212, 91,232, 78,254,146,216,123, 44,139,222, 6,194,
  1046. 229, 27,103,233,153,114,229,163,104,136, 51, 90,129, 13,185,101,
  1047. 168, 47,180, 36,215, 56,224, 29,114,246, 12,212,190, 47,179,145,
  1048. 220,120,249, 16,168, 81,209,118,225,140, 67,
  1049. 239, 35, 85, 3,209, 92, 18,207, 33,140,216,164, 34,150,221,165, // 18
  1050. 28,132,173,201,236, 88,166,131, 45,170, 34, 68,161, 12,176,119,
  1051. 93,192, 67,112,154, 30,172, 55,106, 35,190,247, 96,180, 78,108,
  1052. 147, 62,197, 46, 87,184, 20,206, 60,194,231, 22,164,208, 57,143,
  1053. 7,249, 88,151,101,123,177, 83,205, 50,171,108, 82, 27,254, 91,
  1054. 23,183, 59,150, 94,241, 37,185, 91, 7,193,
  1055. 73,144,171,251, 43,150,236,123, 96,178, 12,126,205,101, 1, 65, // 19
  1056. 195,219, 69, 31,152, 51,195,105, 73,220,121,254, 99,233, 74,209,
  1057. 53,158, 24,245, 45,199,128, 11,223,163, 82, 11,156, 29,240,167,
  1058. 17,255,132,170, 28,245, 67,126, 5,154,100,187, 72, 38,235, 82,
  1059. 212,128,189, 16,207, 67,245, 2,158,130, 68,237,141,168, 63,206,
  1060. 158, 39,211,108,196, 2,142, 71,246,164,108,
  1061. 14,229, 50,131,106,192, 67, 40,199, 75,244, 43, 86,172,236,142, // 20
  1062. 98, 40,119,244,102,216, 16,249,184, 1,152, 25,186, 43,148, 22,
  1063. 251,102,205,133, 74,227, 85,189,135, 62,234,113,214, 68,133, 48,
  1064. 202,114, 73,211,110,138,176,218, 86,239, 33,134,252,123,158,195,
  1065. 25,106, 45,234,161, 28,145,105,234, 36,214, 19,196,102, 14,131,
  1066. 110,235, 85,138, 55,222,170, 43,131, 32,211,
  1067. 178,105,203, 69,226, 10,173,133,223,156, 58,186,222, 21,117, 49, // 21
  1068. 255,153,179, 20,144, 79,134, 56,144,100,200, 70,125,218,110,179,
  1069. 130, 40,176, 2,168,117, 27,246, 98, 19,182,137, 39,196,103,224,
  1070. 82,183, 2, 55,235, 14, 97, 38,143,172, 57,197, 91, 1,101, 51,
  1071. 140,226, 66,133, 87,187, 57,200, 79,181, 96,123, 43,244,185,221,
  1072. 68, 10,168,243, 23,118, 85,195,220, 63,124,
  1073. 82, 39,156, 27,164, 82,249, 31,108, 20,100,124,146, 72,211,184, // 22
  1074. 77, 7,229, 67,201,173, 34,219, 83,241, 46,230,156, 85, 6,234,
  1075. 66,219, 86,239, 54,213,155, 51,145,221, 46, 90,252,172, 21,155,
  1076. 37,140,227,166, 84,156,195,251, 66,108,210, 25,164,220,185,245,
  1077. 77,175,202, 5,255,114,217, 42,139, 11,157,233, 65,152, 85, 32,
  1078. 149,198, 47, 74,188,152,254, 13,104,160,243,
  1079. 194,132,248, 97,214,117,147, 56,178,239,202, 6,250, 40,151, 27, // 23
  1080. 132,203,103,125, 46,238, 96,180, 14,162,114, 18,181, 39,201, 94,
  1081. 154, 19,123,148,103, 14,194,113,174, 80,206,152, 4,123, 62,242,
  1082. 205,102, 47,128,202, 63, 29,117,183, 8,232,121, 69, 41,129, 15,
  1083. 152, 29,112,156, 71,169, 20,120,243,195, 55,204,136, 3,171,117,
  1084. 251, 95,133,211,104, 33, 70,135,184, 54, 19,
  1085. 226, 75, 8,187, 54, 22,198,218, 88,141, 67,169, 87,191,106,235, // 24
  1086. 85,171, 35,218,159, 4,119,138,209, 77,195,140, 58,242,134,172,
  1087. 52,209,190, 61,177,250, 71, 37,239, 16,120,192, 71,232,144, 95,
  1088. 10,176,249, 19,108,237,136,206, 45,156, 77,142,247,177, 84,194,
  1089. 104,241, 50,225, 36, 98,230,154, 69, 99, 27,113, 80,212,231, 60,
  1090. 186, 37,226, 5,162,233,200, 45,238, 96,149,
  1091. 29,177,110,230,137,174, 76, 2,126, 40,232, 31,122,224, 52,160, // 25
  1092. 12,246, 66,139, 89,205, 62,251, 50, 28,236, 98,207, 78,112, 11,
  1093. 249,101, 32,232, 21,126, 97,212,129, 63,230, 38,109,175, 27,193,
  1094. 66,134, 81,212, 54,173, 12, 82,243,103,192, 52, 14,109,228, 47,
  1095. 216, 67,179,122,208,186, 59, 7,179,220,162,251,187, 42,103, 21,
  1096. 143, 75,175,121, 55, 91,115,148, 3,210,120,
  1097. 198, 47,143, 34, 67,246,111,235,167,193, 99,150,180, 20, 74,215, // 26
  1098. 125, 97,190, 19,242,170, 30,189,111,159,128, 4,166, 30,217,186,
  1099. 72,149,119, 76,153,221,170, 4,149,182, 93,166,221, 50,213,119,
  1100. 228,164, 34,187,142, 95,215,164,129, 20,225,168,209,148, 26,160,
  1101. 128, 7,149, 81, 22,143,110,247,127, 37,140, 14, 65,132,161,199,
  1102. 238,111, 30,248,195, 16,176,226, 86,173, 60,
  1103. 95,234,165,208,103, 24,157, 50, 80, 16,213, 58,240,108,144,185, // 27
  1104. 42,167,228, 50,117, 72,144, 93,214, 64,184, 86,255,140, 56,121,
  1105. 23,236,169,208, 41, 87, 55,200, 46,251, 29,140, 8,101,153, 56,
  1106. 14,102,238,120, 17,252, 45, 73,198, 64, 38,118, 93, 60,241, 72,
  1107. 207, 98,188,251, 56,219, 83,196, 54, 79,200, 93,179,241, 7, 79,
  1108. 46,211,155, 62,130,219, 77, 42,134, 25,245,
  1109. 67,125, 5, 82,180,216,132,196,224,113,138, 29, 79,205, 8,253, // 28
  1110. 82, 24,106,152,196, 16,226,174, 12,239, 36,198, 43,103,232,171,
  1111. 203, 49, 90, 7,185,144,237,122, 84,113,209, 76,242,191, 80,254,
  1112. 136,184, 49, 74,200,154,125, 6,237,141,161,255, 3,189,121,176,
  1113. 19,232, 41,116,163, 15,173, 30,156,237,115,218, 27,107,217,123,
  1114. 183, 87, 11,180, 93, 26,161,252,203,110,155,
  1115. 217,193, 54,255,118, 66, 9, 97, 41,161,251,190,128,165, 52,119, // 29
  1116. 209,138,218, 63,237,124, 82, 43,137, 79,148,118,218,160, 14, 85,
  1117. 141,108,223,127,253,107, 19,158,223, 11,132,161, 55,121,166, 26,
  1118. 202, 89,144,219, 28, 87,230,171,111, 90,191, 73,135,224, 35,104,
  1119. 149, 78,137,217, 91,242,131,206,103, 1,173, 67,155, 51,167, 34,
  1120. 146,236,114,226,138,197, 53,101, 9,180, 48,
  1121. 18,100,163,140, 35,228,150,242,181, 70, 4, 92, 43,218, 96,172, // 30
  1122. 60,182, 10, 94, 35,156,189,252,111,221,177, 8, 93, 65,191, 46,
  1123. 248, 19,175, 55, 30, 71,197, 42,180, 64,202, 32,233, 14,223, 68,
  1124. 44,229, 1,162,112,186, 50, 75,213, 19, 51,217, 28,162, 58,250,
  1125. 182, 30,202, 4, 63,112, 40, 72,229,142, 50,254,133,197, 91,244,
  1126. 61, 22,200, 44, 74,233,120,154, 72,227,141,
  1127. 173,230, 24,214, 96,170, 56,126, 26,109,210,158,236, 23,141,240, // 31
  1128. 39,108,248,168,204,102, 1, 68,165, 23, 61,245,201,145,236,123,
  1129. 162, 74,209,150,217,132,232, 82,139,247,100,178, 86,148,106,181,
  1130. 126,170,102,247, 37,139,205, 26,149,240,122,173, 85,111,196, 93,
  1131. 53,236,109,165,190,146,222,163, 21, 89,202, 16, 76,226, 9,190,
  1132. 130,173,100,157, 1,175, 24,239,190, 37, 83,
  1133. 120, 57,130, 72,194, 13,207, 88,192,238,135, 61,111,191, 85, 5, // 32
  1134. 199,151, 66,130, 49,238,136,216, 45,207,105,134, 30, 55,105, 3,
  1135. 198, 40,115, 87,182,101, 1,167,108, 18, 49,123,207, 40,216, 81,
  1136. 240, 21, 72,196, 65,232, 98,130,182, 57,201, 12,245,140,218, 7,
  1137. 123,152, 84, 44,213, 56, 27,192,116,240,179,127,105, 41,150,110,
  1138. 72,223, 53,252,115,215, 95, 55,131,106,242,
  1139. 3,186,245, 39,148,112,251, 46,155, 75, 22,178, 47,152,225,119, // 33
  1140. 76,229, 15,217, 88, 23,192,116, 90,146,186, 78,166,227,182, 85,
  1141. 222,134,242, 13, 46,246,191, 68,222,197,165,239, 62,172, 7,140,
  1142. 55,202,131,155, 10,171, 41,253, 15, 83,103,157, 47, 79, 38,164,
  1143. 192,220, 21,240,123, 99,248, 82,150, 36, 60,159,219,176,248, 33,
  1144. 207, 12,146, 79,167, 37,143,178,220, 29,202,
  1145. 143, 98,159, 80,230, 31,167,132, 11,224,103,204,254, 17, 67,180, // 34
  1146. 139, 38,191,108,178,144, 73,231, 9,248, 38,214, 11,128, 44,155,
  1147. 23, 62,173,146, 72,154, 30,129, 45,145, 81, 11,131, 94,252,184,
  1148. 112, 32,224, 83,113,215, 89,119,210,170,236,128,209,175,233,105,
  1149. 27, 67,137,173, 14,183,133, 5,221,101,205, 22, 82, 55,131, 93,
  1150. 182,120,232, 26,209, 64,246, 8, 88,160, 67,
  1151. 39,197, 16,209,101,188, 67, 96,199,171, 42,136, 80,124,214, 48, // 35
  1152. 247, 94,158, 60,255, 38,164, 54,124,159, 69,111,240, 95,196,254,
  1153. 113,191, 93,213,112,225, 92,201,254, 26,115,223,196,158, 25, 79,
  1154. 217,167, 64,250,185, 21,160, 49,145, 65, 32, 75, 8,116, 64,148,
  1155. 244, 96,205, 55, 90,212, 63,159, 75,174,124,230,147,195, 5,225,
  1156. 66, 39,172,104,134,193,112, 49,204,114,253,
  1157. 90,222,123, 59,137, 4,213,239, 53,115,242, 1,165,196, 30,112, // 36
  1158. 172, 19,213,122, 5,203,101,182,216, 20,205,178,148, 19, 64,140,
  1159. 37,230, 16, 52,181, 8,166, 56,103,162,186, 56, 35,110,228, 48,
  1160. 148, 4,120, 36,142, 60,238,194, 3,226,199,137,251,192, 20,214,
  1161. 42,165,115,251,148, 32,238,196, 29,253, 14, 94, 38,242,106,163,
  1162. 135,203, 81,241, 12, 86,162,235,135, 15,169,
  1163. 50,154, 32,180,235,162,121, 37,150, 75,158, 61,233, 95,144,230, // 37
  1164. 81,135, 43,230, 86,130,242, 29, 92,135, 47, 87, 39,232,107,215,
  1165. 84,158,121,250,138, 68,239,127, 16,233, 89,138,244, 73,136,200,
  1166. 92,241,176,206, 99,219, 77,130, 88,114,163, 92, 39,157, 94,131,
  1167. 81,199, 2, 48,178,124, 96, 46,107,135, 57,189,127,170, 24, 55,
  1168. 255, 20,157, 47,180,222, 30, 58,181, 76,232,
  1169. 190,105,247, 86, 24, 61, 91,184, 22,212,190,110, 27,175, 71, 9, // 38
  1170. 206,188,103,156,184, 46,152, 66,229,165,251,121,208,154,188, 24,
  1171. 174, 61,203, 33,100,191, 36,208,146, 65,197, 3,168,208, 15,172,
  1172. 116, 45, 80,133, 10,155, 43,174,249, 54, 25,183,219, 56,235,182,
  1173. 33,139,230, 79,220, 14,185,145,219,202,156,236, 63,212, 84,191,
  1174. 116, 95,217,140, 60,120,152,107,215, 28,124,
  1175. 6, 63,136,214,116,200,254,138,227, 96, 13,142,218, 45,244,151, // 39
  1176. 38, 76,248, 13, 71,225, 18,201,113, 12, 58,183, 3, 78, 51,127,
  1177. 246, 5,145, 86,235,157,115, 84,178, 33,220,123, 46,105, 60,233,
  1178. 28,193,219, 57,245,188,119, 16,203,135,233, 76,118,146, 13,110,
  1179. 246, 60,173,101,153, 71,234, 56, 25, 84, 8,101, 40,118,155,224,
  1180. 36,176, 9, 85,249,188, 3,240, 90,163,206,
  1181. 233,174, 21,155, 44,168, 17, 77, 48,123,249, 64,198,129, 98,212, // 40
  1182. 119,166, 49,137,207, 97,127,170, 75,194,146, 93,235,136,226, 90,
  1183. 194,104,226,171, 17, 53,214, 6,250,102,157, 77,192,248,133, 85,
  1184. 156,123, 20,168, 85, 34,214, 67, 98,159, 7,198, 32,177, 73,211,
  1185. 153, 21,123,201, 29,208,113,162,248,126,175,200,146,246, 2, 60,
  1186. 142,239,122,201, 35,102, 68,197,134, 39, 77,
  1187. 119, 94,196, 72,234,100,131,178,204,154, 35,167, 88, 5,186, 64, // 41
  1188. 15,223,193,107,174, 53,253, 42,217, 30,243,115, 36,176, 18,165,
  1189. 34, 70,126, 62,219,136, 73,163,130, 51,235, 25,148, 10,178,214,
  1190. 50,255, 97,143,232,109,148,235,189, 46, 88,130,253,101,194, 42,
  1191. 92,190, 73,255, 51,140, 5, 92,190, 66, 35,219, 23, 71,173,102,
  1192. 208, 74, 48,167,135,216,172, 22, 58,252,150,
  1193. 215, 34,249,122, 9,212, 52,244, 3, 70,222,105,237, 53,162,250, // 42
  1194. 130, 89, 28, 66,232, 1,158,102,135, 83,165, 70,200, 59,217,108,
  1195. 236,157,199, 39,183, 95,240, 40,186, 87,202,120,218, 53, 75,113,
  1196. 15,175,203, 62, 2,181, 54, 19,126,242,169,211, 52,156, 4,242,
  1197. 128,222, 9,149, 89,178,238, 47,138,229,107,134, 87,195,227,133,
  1198. 29,186,109,229, 12, 80,114,222,165,105, 14,
  1199. 75,159, 58,182,147, 82,161,116, 92,198,130, 19,194,137,109, 23, // 43
  1200. 197,151,242,163,126, 91,208, 26,233,190, 7,221,125,154, 84,139,
  1201. 54, 15,255,112,153, 10,198,117,230, 12,167, 42,104,189,241,163,
  1202. 131, 78, 30,225,134,210, 96,173, 75, 36,106, 18, 75,230,138, 64,
  1203. 169, 45,117,186,221, 59,122,213, 22,169, 56,251,162,118, 15, 55,
  1204. 158,252, 21, 72,155,247, 45,142, 84,202,181,
  1205. 137,224,107, 26,204, 41,221, 32,236,164, 53,174, 79,215, 44,226, // 44
  1206. 74, 40,109, 16,201, 58,131,172, 64,112,152, 55, 31,237, 11,210,
  1207. 189,124, 86, 32,228, 57,142, 33,100,145, 77,253,139, 89, 30, 60,
  1208. 234,192,153,107, 72, 39,244,141,197,225,149,186,122,202, 28,106,
  1209. 215, 85,236, 35,108, 15,160, 84,197, 79, 6,185, 36, 65,239,182,
  1210. 93,123,210,176, 38,124,187, 9,230, 29, 51,
  1211. 89, 1,168,234, 95,130,189, 68,141, 14,110,254, 36,157, 99,179, // 45
  1212. 126,168,213, 52,177,225, 19,246, 36,212, 89,254,182, 98,164, 41,
  1213. 78,161,217,192,100,176,249, 71,219,188, 28,174, 8,222,149,206,
  1214. 6, 95, 45,249,165,191, 14,113, 65, 7, 85,247, 35, 95,178,149,
  1215. 14,192,159, 71,136,206,250, 38,117,238,139, 84,202,150,100,214,
  1216. 18, 60,141, 88,201, 97,236, 74,121,154,242,
  1217. 127,197, 45,141, 63,243, 8,122,177,217, 61,187,128, 7,238, 58, // 46
  1218. 13,252, 85,146,115, 77,153, 93,120,165, 15,141,121, 64,227,115,
  1219. 246, 58, 1,144, 64,122, 20,164,125, 53,210,111, 64,184,119, 81,
  1220. 173,125,204, 23,121, 93, 57,228,168,214,139, 57,166,219, 48,252,
  1221. 66,125, 21,244,172, 62, 95,145,180, 29,211,108,231, 10,130, 72,
  1222. 163,237, 33,227, 2,157, 51,175,216, 62,187,
  1223. 19,255, 84,214, 20,170,103,227, 84, 30,149, 88,227, 70,201,146, // 47
  1224. 188,106, 34,219, 11,242, 51,182,220, 71,193, 49,218, 6,195, 29,
  1225. 138,182, 96,237, 30,189,210, 96, 4,245, 88,152,238, 43, 20,250,
  1226. 53,223,147, 66,236,202,156, 31,125, 39,108,203, 15,133, 88,196,
  1227. 110,231,151, 97, 30,195, 1,227, 54, 88,157, 23, 59,169,246, 45,
  1228. 203, 98,189,118, 70,209,138, 17, 99, 39,107,
  1229. 164, 52,155,112,192,133, 41, 59,186,246,116,206, 44,172,114, 37, // 48
  1230. 76,206,159, 63,179,134,206, 4,139, 39,235,101,149, 87,157,100,
  1231. 211, 45,128,201,159, 79, 39,226,141,169, 37,201,133, 83,203,140,
  1232. 103, 15, 88,180, 4,136, 75,254,198, 94,237,151, 79,233, 27,143,
  1233. 4, 57,203, 46,222,129,158,104,203,124,253,189,119, 81,193,110,
  1234. 14,150, 53,168,239, 28,110,250,198,144,224,
  1235. 67,121,229, 31, 69,250,204,156,129, 4, 58,159, 16, 96,247,131, // 49
  1236. 224, 20,124,235, 97, 33,107, 79,249,111,170, 18,200,250, 50,175,
  1237. 16,242, 72, 13,110,248,129, 58,198,112, 70, 16,102,226,167, 47,
  1238. 191,154,232,114, 44,221,104, 21,178, 68, 5,175, 43,106,161,226,
  1239. 179, 86,136,174,109, 68,247, 28,172, 12, 75, 48,226,143, 31,224,
  1240. 128,255, 26, 83,134,184, 66,161, 80, 25,192,
  1241. 239, 5,202, 97,163, 9, 91, 35,231,106,193,240,137,210, 72, 2, // 50
  1242. 150,180, 89, 47,200,172,229,157, 28,187, 57,129, 74, 27,115,230,
  1243. 84,145,172,223, 36,152,184, 93, 24,230,175,217,156, 64, 1,122,
  1244. 240, 72, 33,199,159, 59,187,150, 47,141,210,121,247,188, 74, 35,
  1245. 113,212, 24,242, 11,188, 48, 81,233,136,215,154, 3,186, 58, 91,
  1246. 175, 70,194,223, 97, 43,211, 6,229,130, 94,
  1247. 172,141, 47,182,127,214,115,184, 81,166, 77, 23,111, 51,190,234, // 51
  1248. 104, 65,250,145, 7, 76,128, 53,201, 90,231,161,219,180,138, 58,
  1249. 204,119, 49, 91,204, 62, 7,240,120, 45, 84,127, 41,252,185, 90,
  1250. 25,209,134, 92,249,125, 10,231,115,243, 90, 58, 21,134,208, 58,
  1251. 250,129, 52,160, 87,138,210,155, 99, 40,182,111, 89,243,120,210,
  1252. 7,147,116, 16,155,245,118,146, 53,184, 35,
  1253. 109,218, 83,241, 64, 44,234,139, 15,211, 38,226,181,145, 26,160, // 52
  1254. 42,192, 26,212,117,244, 20,215,138, 12,120, 46, 3, 86,211, 33,
  1255. 161, 6,251,178,139,107,210,166,141,196,238, 10,200,106,139,223,
  1256. 162, 50,179, 13, 69,196, 97,205, 70, 25,194,158,222,100, 8,171,
  1257. 92,191, 76,221,120,238, 16,114,201, 70, 19,232, 49,169, 23,156,
  1258. 241, 60,204, 53,188, 31, 78,204,103,252, 69,
  1259. 134, 22,160, 11,148,199, 25, 75,254,113,154, 97, 56,249, 83,112, // 53
  1260. 219,132, 99,160, 67,169, 96,179, 69,254,184, 98,238,154,107,244,
  1261. 76,197,110, 20, 74,231, 32, 85, 17, 56,159, 94,149, 58, 21, 75,
  1262. 119,246,102,206,142, 31,164, 43,145,174,112, 38, 78,184,238,137,
  1263. 33,147, 5,199, 37, 65,177, 45,251,162,119,207,143, 79,196,103,
  1264. 36, 91,230,143,106,233,177, 13,161, 24,209,
  1265. 63,245,102,216,117, 85,176,152, 53,191, 65,206,122, 8,169,201, // 54
  1266. 63, 11,230, 36,204, 51,236,115, 35,150, 59,136,192, 62, 21,171,
  1267. 129, 54,148,223, 42,153,116,198,253,107,187, 26,212,242,170,198,
  1268. 8, 62,155, 39,239,119,226, 86,239, 1,207,253,147, 48,111, 70,
  1269. 207,233,113,168, 98,148,229, 88,138, 33,187, 95, 11,253, 46,138,
  1270. 218,127,167, 9, 73,134, 57,221,129, 92,181,
  1271. 35,189, 52,169, 66,246,124,224, 3,134,233, 21,178,223,135, 32, // 55
  1272. 243,144,181, 92,125, 22,143, 77,228,199, 15,220, 38,116,205, 83,
  1273. 234, 26,207, 80,184,243, 50,170, 70,135,229, 77,123, 34, 99,144,
  1274. 214,129,223, 80,175, 56, 15,183,105,134, 58, 97, 12,220,161, 17,
  1275. 175, 40, 62,255, 18,207,118, 9,212, 69,237, 57,176,113,204, 68,
  1276. 185, 25, 81,252,197, 27,170, 83, 44,235,150,
  1277. 83,222,137, 29,186, 16, 47, 92,185, 81, 42,148, 89, 40, 71,104, // 56
  1278. 174, 81, 47,253,152,219,183, 4,165, 89,125, 79,176,250,147, 8,
  1279. 181, 97,164,126, 2, 94,132, 25,221, 5, 48,154,181, 65,230, 45,
  1280. 87, 36,185, 11, 96,217,141, 68,213, 32,167,188,119,199, 83,247,
  1281. 125, 94,189,132, 84,165, 59,194,109,158, 22,132,231, 31,160, 6,
  1282. 241,112,178, 46,153,218,105,248,194, 15,118,
  1283. 165, 1, 91,237,107,206,162,217,111,243,173,114,252,188,156,234, // 57
  1284. 15,127,206, 9, 69,101, 59,208,132, 27,235,156, 24, 93, 57,228,
  1285. 118, 48,254, 60,218,176,207, 86,158,193, 98,249, 19,205,127,174,
  1286. 255,150,113,243,166,117,195, 25,156,245, 79,228, 64, 29,144, 52,
  1287. 213,159, 23,224, 50,240,143, 29,245, 87,216, 99,151, 76,224, 95,
  1288. 144, 38,224, 94,121, 59, 4,131,156, 69,214,
  1289. 252,128,201,156, 59,134, 78, 33,142, 24, 55,197, 6, 60,120,199, // 58
  1290. 54,225, 96,164,193,239,119, 42,249,102,195, 66,224,133,203, 37,
  1291. 143,196, 18,111,142, 30, 58,247,114, 60,215,118, 83,148, 30,109,
  1292. 2, 63,200, 27, 74, 44,240, 89,114, 43,143, 22,128,175,223,109,
  1293. 6, 69,200,100,175, 4, 81,180,129, 40,174, 2,193, 52,129,182,
  1294. 69,205,157, 14,243,143,210, 39, 98,188, 49,
  1295. 102, 24, 79, 40,222, 8,253,191, 71,164,229, 94,143,213, 22, 91, // 59
  1296. 146,183, 28,137, 54, 24,172,148, 74,177, 49,118, 1,169,107,177,
  1297. 71,237, 85,163,231, 99,167, 11,145, 33,167, 11,191,238, 77,218,
  1298. 180,232, 99,140,224,151, 5,172,222,190,101,204,248, 94, 39,188,
  1299. 148,245,118, 39,136,198,106,221, 72,205, 62,251,117,211, 38,247,
  1300. 20,122, 52,190, 69,175, 87,164,233, 18,143,
  1301. 173,194,242,115,181, 97,152,119,222, 12,129, 66,238,108,168,241, // 60
  1302. 36, 66,249,114,217, 81,229, 9,205, 30,154,241,207, 80, 28,218,
  1303. 11,128,183, 36, 65,200,127,224,185, 89,244,136, 44,169, 54,135,
  1304. 92, 20,164, 54,109,209, 65,130, 52, 17,161, 59, 7,140, 71,237,
  1305. 85, 32,171,214, 64,234, 50,151, 12,163, 98,139, 25, 89,162,105,
  1306. 146,236, 88,220,113, 25,238, 61,121,204, 74,
  1307. 33,130, 64,165, 26,215, 37, 56, 96,180,207, 42,176, 30, 63,124, // 61
  1308. 203,106,174, 2,155,195,131, 90,113,222,133, 91, 43,149,250, 97,
  1309. 158, 49,209,119,246, 20, 86, 42, 65,208,111, 68,220,100, 23,205,
  1310. 153, 48,193,248, 14,184, 98,251,196, 83,236,121,184,217,160, 14,
  1311. 127,221, 95, 13,161,123, 27,248,111,216, 35,170,191,230, 9,215,
  1312. 62,178, 3,151, 44,188,137, 9,178, 42,239,
  1313. 106,220, 5,231,136, 70,198,166,243, 34,112,154, 84,191,223, 9, // 62
  1314. 162, 83,227, 48,101, 61, 38,255,183, 71, 16,175,196, 65,131,192,
  1315. 73,231, 95, 4,172,142,194,241,140, 5,177, 34,150,197,119,244,
  1316. 71,220,125, 83,135, 42,158, 29,106,140,208, 74, 33,100, 56,205,
  1317. 175, 63,144,253, 72,191, 93,174, 55,131,236, 78, 44,126, 69,186,
  1318. 39,102,207,125,247, 92,223,108,216, 89,157,
  1319. 202, 82,151, 51, 98,247,123, 8,140, 88,217, 1,251,133, 99,147, // 63
  1320. 245, 21,138,206,168,236,148, 14,162, 52,244,105, 29,214, 7,114,
  1321. 41,167,136, 69,220,102, 31,116,169, 95,231,127,240, 16, 84,172,
  1322. 10,108, 31,169,202,237, 81,213,173, 3, 49,158,254,135,227, 25,
  1323. 106, 41,201,108, 44,231,139, 17,198, 87, 7,206,155,239,107,142,
  1324. 254,160, 32, 59,169, 15, 69,160, 55,132, 19,
  1325. 47,175,113,205,161, 20,183, 75,234, 53,178,120, 65, 23,214, 44, // 64
  1326. 72,189, 64,119, 24, 78,210,122, 95,201,129,159,228, 94,172,237,
  1327. 202, 22,251,187, 40,160, 75,212, 53, 23,195, 81, 55,182,140, 44,
  1328. 198,147,243, 76, 50,111, 16,134, 68,244,182,109, 20,194, 84,129,
  1329. 187,240, 1,169,132, 30,211, 75,241,147,178,103, 62, 15,213, 29,
  1330. 73,119,233, 82,212,143,195, 37,228,180,253,
  1331. 126, 13,242, 35, 80,217, 49,114,200,155, 27,229,193,162, 89,179, // 65
  1332. 126,221, 38,249,179,109, 44,186, 34,232, 4, 74, 50,139, 36, 67,
  1333. 144, 86,108, 55,129,239, 20,179,255,153,119, 29,212, 98,249, 69,
  1334. 226, 92,189, 4,227,155,192,221, 40,119, 81,210, 65,151, 40,234,
  1335. 70,148, 89,225, 79,183,111,162, 45,116, 25,252,134,196, 93,163,
  1336. 222, 14,189,132, 22,102,235,117, 2, 94, 67,
  1337. 220,188, 58,129,177,100,144,224, 16, 95,131, 77, 36,116,231, 7, // 66
  1338. 81,159,100,146, 6,231,142,222, 65,152,114,179,199,253,118,191,
  1339. 13,209,163,222, 9,196, 83,125, 61,102,226,166,131, 2,161,120,
  1340. 18,136, 56,166, 85,126, 30, 96,159,232,146, 10,241,117,181, 9,
  1341. 163, 46,118,198, 24,247, 65, 5,224,190, 77,213, 35,173, 50,130,
  1342. 199, 56, 92,174,250, 48, 78,170,136,199,159,
  1343. 104, 78,149,227, 3,254, 31,168, 61,187,244,158,206, 57,144,192, // 67
  1344. 239, 20,216, 75,198, 54, 93, 12,173, 86,242, 43,104, 10,164, 90,
  1345. 241,122, 29, 79,143,104,218,148, 6,202, 43, 72,236,196, 41,217,
  1346. 185, 35,239,105,211, 53,252,174, 14, 57,198, 48,171, 86,216,101,
  1347. 202,249, 17,145, 54,154,125,177, 94,138, 51,154,109, 71,246, 1,
  1348. 100,154,228, 40,117,149,190, 60,241, 22, 52,
  1349. 248, 16,209,108, 60,194,125, 87,234,113, 51, 6,107,255, 29, 99, // 68
  1350. 48,135,176, 36,127,165,251,116,215,136, 19,208,153, 69,215, 42,
  1351. 147, 64,184,245,169, 59, 35,174,235, 90,183, 22, 88,117, 61,103,
  1352. 156, 84,196,140, 20,187, 69,129,218, 86,111,137,221, 29, 54,141,
  1353. 66,128, 91,219,190, 83,204, 37,242, 17,197,231, 23,209,119,179,
  1354. 237, 34,129, 74,201, 8,220, 30,108,210,144,
  1355. 124,184, 37,166, 83,152, 46,203, 11,146,218,172, 83,183,129,167, // 69
  1356. 206, 63,245,103,208, 71, 41,192, 29, 63,184,125, 91,230, 22,197,
  1357. 105,229, 47,115, 15,193,249,109, 51,121,155,250,136,176,231, 21,
  1358. 254,127, 70, 46,230,154,109, 33,183,148,250, 23, 96,157,245,190,
  1359. 39,226,174, 34,112, 10,231, 57,151,105, 80,127,177, 88,152, 27,
  1360. 67,210,170, 18,238,104,163,129, 80,172, 41,
  1361. 94, 56,137,245,205, 21,241,108,174, 70, 25,119,210, 60, 13,227, // 70
  1362. 89,123, 2,155, 28,225,142, 97,163,220, 79,244, 33,178,137, 77,
  1363. 171, 4,153,203, 90,133, 73, 25,144,220, 11, 66,209, 43,151, 79,
  1364. 199, 6,217,169, 97, 12,207,238, 76, 2,190, 70,204,121, 17,112,
  1365. 166, 4, 70,134,254,165,101,129,211,181,248, 64, 13,235, 51,201,
  1366. 143,112, 91,188,142, 85, 36,255,196, 5,234,
  1367. 199,228, 76, 7,104,131,161, 53,224, 96,246,150, 38,237, 75,151, // 71
  1368. 31,185,214, 88,179,118, 13,235, 44,121, 2,166, 57,106,250, 49,
  1369. 220,131, 70,233, 27,216,157,230,187, 77,198,113, 27, 99,190,114,
  1370. 60,149, 37,125,246, 72,139, 43,165,122, 50,236,169, 61,228, 79,
  1371. 208, 98,235,187, 50, 77,195, 29, 73, 3, 48,170,138,189,115, 86,
  1372. 226, 21,251, 66, 43,224,185, 58,141, 74,155,
  1373. 18,110,150,188, 45,213, 85, 26,192,137, 59,195, 94,134,190,109, // 72
  1374. 249, 68,130, 46,247, 67,203,172, 84,151,228, 93,207,127, 13,192,
  1375. 102, 25,187, 98,169, 59,113, 1, 98, 34,163,233,142,246, 12,215,
  1376. 171,241, 89,182, 54,200,105,186, 92,225,150,110, 9,143,185, 32,
  1377. 132,159, 44,104,152, 14,219,139,233,158,122,225, 99, 35,248, 7,
  1378. 158, 59,135,204,167,125, 26,102,213,118, 47,
  1379. 166,215, 30,234,171, 62,232,167,117, 3,213, 31,170, 8,216, 43, // 73
  1380. 169, 15,223,158, 23,145,101, 55,255, 21,183,136, 24,235,162, 84,
  1381. 154,241, 62,137,244, 38,205,171,253,133, 58, 84,178, 48, 73,131,
  1382. 50, 23,116,220, 8,160, 34,253, 18,199, 36, 86,202, 49, 99,252,
  1383. 59,218, 18,203,242,121,176, 38, 93,194, 82, 24,205, 61,168,122,
  1384. 191,218, 36,103, 6, 78,241,159, 12,245,191,
  1385. 130, 58, 80, 99,124, 11,144, 90,243, 76,155,110,251, 56,101,147, // 74
  1386. 80,199,112, 90,187,213, 8,130,197,108, 50, 75,193, 67, 44,214,
  1387. 124, 37,200, 9,108,152, 71,122, 49,183,224, 7,121,220,151,237,
  1388. 100,195,155, 78,134,209,115, 60,140, 68,177,247,128,225,172, 11,
  1389. 190,122, 86,141, 28, 91, 63,239,118, 45,253,179,145, 90,212, 45,
  1390. 99, 75,152,234,180,207,135, 54,177, 69, 92,
  1391. 23,253,193,146,240, 77,185, 24,199, 40,223, 82,126,188,235, 24, // 75
  1392. 226,133, 61,237, 50,120,227,169, 37,146,212,243,103,141,179, 6,
  1393. 73,222,163, 83,180,216, 20,235, 91, 23,150,100,203, 30, 85,175,
  1394. 2,225, 58,249, 24, 85,233,167,214,119, 13,154, 71, 24,118,150,
  1395. 70,228,170, 56,186,215,164, 6,207,141, 76, 8,114,239, 27,142,
  1396. 243,176, 29,126, 61, 19,110,233, 33,142,226,
  1397. 157,115, 9, 53,204, 38,225,102,133,170, 60,181, 17,150, 74,114, // 76
  1398. 175, 5,160, 33,176, 85, 30, 70,237, 87, 7,155, 39,219,116,254,
  1399. 151,110, 53,248, 33, 95,140,166,194,214, 70,244,165, 63,197,113,
  1400. 65,137,183, 41,152,187, 45, 4, 95,240, 82,210, 42,217, 90,242,
  1401. 44,107, 5,250,110, 37,136,101,180, 33,167,231, 59,158, 79,195,
  1402. 2, 65,220, 95,253,164, 80,190, 99,207, 46,
  1403. 88,218,181,155, 94,126,160, 49,253, 11, 99,237, 51,199, 32,207, // 77
  1404. 53,252,104,217,135,247,162,106,202,122,177, 65,190, 19, 87, 50,
  1405. 187, 27,141,195,121,223, 54, 10,114, 42,127, 34,136, 12,255,145,
  1406. 211, 28,120, 90,214,107,135,203,158, 28,193,130,104,159,194, 17,
  1407. 179,142,205, 81,153,228, 77,244, 60,221, 94,122,202, 19,225,106,
  1408. 132,156,193, 22,139, 51,223,147, 1,122,183,
  1409. 17, 61,104, 29,247, 4,209, 71,190,120,153,205,136, 90,244,158, // 78
  1410. 129, 85,182, 18, 68,113, 2,182, 58, 26,250,100,131,237,159,208,
  1411. 97,237, 73, 3,161, 69,187,250, 82,160,236,189, 86,178,102, 38,
  1412. 82,241,163,231, 10, 73,250, 54,124, 64,171, 54,254, 28, 80,128,
  1413. 232, 92, 32,181, 52, 12,192, 25,125,151, 12,185, 49,129,173, 47,
  1414. 249, 88, 43,112,210,181, 35, 75,248, 66,229,
  1415. 172,124,231,189, 75,173,106,146, 21,222, 41, 78, 1,174,105, 67, // 79
  1416. 13,213, 46,152,193,213, 48,233,132,214,151, 15,200, 76, 37,135,
  1417. 13,171,206,108,240, 34, 98,138,216, 57, 3,105,215, 49,225,165,
  1418. 200, 14,105, 61,198,161, 26,177,228, 87,212, 8,146,182,223, 55,
  1419. 158, 63,244,124,213,145,114,171,212, 42,228, 74,247, 93,208, 73,
  1420. 23,213,168,240, 8, 99,126,200,157, 39,138,
  1421. 245, 36,149, 52,130,226, 33,241, 93, 59,167,248,124,226, 26,193, // 80
  1422. 237,137,110,243, 25,130, 84,153, 95, 36, 72,223, 49,115,179,230,
  1423. 62,122, 42, 82,147,212,171, 17,121,175,203,139, 67,151, 18,118,
  1424. 54,150,188, 32,142,115,218, 97, 15,154,110,230, 93, 41,118, 1,
  1425. 201,115, 15,165, 94, 60,255, 87, 64,111,177,142, 32,162, 9,147,
  1426. 186,121, 55,138, 73,161,235, 16,111,215, 95,
  1427. 68,196, 91,207, 14,157, 57,185,127,211,104, 28,197, 57,116,146, // 81
  1428. 40, 72,186, 92, 55,174,254, 12,206,184,106,168,143,240, 18,103,
  1429. 211,159,234,185, 23,117, 53,234, 72, 26, 81,228, 31,249,182, 92,
  1430. 233,128,252, 91,208, 69, 44,139,245, 42,198, 58,137,240,166,216,
  1431. 97,181,220, 48,231, 30,196, 5,159,240, 19, 96,216,113,240, 84,
  1432. 228, 98, 31,204,184, 27, 62,178, 80,190, 8,
  1433. 162,116, 22,255,118, 95,217, 78,152, 7,183,142, 86,160,214, 88, // 82
  1434. 172,209, 4,145,225,117, 68,160, 42,127,246, 7, 87,196, 67,173,
  1435. 35, 78, 11,132,255, 78,204,140,193,244,114,164, 96,129, 63,203,
  1436. 3, 73, 41,166, 9,242,171,196, 72,124,168, 22,185, 67, 24, 83,
  1437. 148, 22, 76,119,147,175,105,140,204, 50,133,182, 55,193, 65,130,
  1438. 18,165,255, 83,115,211,142,251, 31,137,221,
  1439. 28,228,180, 78,168,197, 46, 26,251, 82,225, 42,241, 9, 52,253, // 83
  1440. 20,106,240, 43,194, 22,216,111,233, 63, 32,202,128, 39,141,251,
  1441. 116,149,221, 89, 43,167, 5, 93, 42,153, 65,188, 8,211, 34,139,
  1442. 171,213,111,222,134,101, 35,110, 3,221, 83,250,102,206,133,228,
  1443. 41,245,160,203, 13, 74,235, 38, 95,224, 70,252, 1,140, 39,217,
  1444. 183, 63,148, 3,228, 46, 90,120,171, 52, 99,
  1445. 153, 65,138, 43, 2,141,235,101,163,117, 63,133,178,112,194,125, // 84
  1446. 148, 68,162,126, 87,169, 50, 79,180,141,216, 76,176,230, 96, 2,
  1447. 199, 51,171,112,211,135,232,183,125, 14,221, 51,240,156,101,231,
  1448. 80, 28,148, 51,185, 64,229,162,206,143, 41,129, 7,156, 47,105,
  1449. 191,127, 52, 96,249, 43,199,128,187, 28,119,152, 83,229,161, 80,
  1450. 111,210, 40,101,158,181, 18,216, 68,193,243,
  1451. 48,215,103,239,207, 64,115,185, 14,210,190, 24, 92,221, 73, 33, // 85
  1452. 231,201, 53,220, 11,243,136,201, 3, 97,163,116, 17, 62,209,167,
  1453. 71,237, 17,194, 66, 21,107, 73,249,171, 94,142,118, 41,181, 58,
  1454. 122,193,241, 87, 17,203,123, 23, 56, 97,234,179,213, 80,237,169,
  1455. 73, 26,221,179,139,110,162, 10, 76,164,210, 22,197,116, 32,244,
  1456. 10,135,172,245,128, 61,239,146,108, 5,126,
  1457. 176, 13,189, 84,126,171, 31,224, 76,136, 51,234,150, 13,159,187, // 86
  1458. 96, 23,115,178,100,155, 35,117,251, 59,225, 41,247,150,113, 25,
  1459. 129, 99,146, 37,247,151,218, 32, 57,208, 25,195, 72,209, 20,244,
  1460. 162, 14,104,173,234,153, 81,255,182,151, 15, 60,107, 36,198, 10,
  1461. 147,204, 82, 3, 59,222, 88,206,242,104, 49,235, 98,177, 61,189,
  1462. 89,225, 52, 78, 13,192, 95, 27,201,229, 81,
  1463. 246,112,148, 21, 53,249, 89,149, 40,246,100,171, 67,120,247, 59, // 87
  1464. 135,166,250, 47,208, 68,225, 84,160, 27,181,132, 89,186, 45,243,
  1465. 181,211, 82,174,118, 87,191,165,136,104,155, 49,254,102,149, 82,
  1466. 47,201, 66,133, 49,106, 34,132, 76,222,117,164,247,144,124, 62,
  1467. 252, 97,137,239,169, 31,148, 61, 27,145,184, 65,138, 17,222,145,
  1468. 118, 22,186,213,112,227,158, 55,169, 40,144,
  1469. 26, 63,202,229,157,193, 9,213,116,162, 3,213, 34,197, 91, 39, // 88
  1470. 209, 2, 76,147, 24,122,180, 19,212,122, 73,207, 6,220, 77,144,
  1471. 52, 7,235, 61,206, 51, 6, 93,238, 15,228,120,163, 4,190,126,
  1472. 216,145,251, 1,217,167,196,215, 19, 46,189, 81, 24,184, 93,213,
  1473. 34,167, 48,116,202, 99,254,189,126,232, 5, 92,248,165, 78, 53,
  1474. 252,161, 99,147, 28,134, 77,253,124, 99,210,
  1475. 134,170, 96, 32, 73,131,103,173, 62,201, 73,112,238,133,170,230, // 89
  1476. 110,181,224, 97,194,245, 57,142, 91,241, 46,150,105,166, 29,205,
  1477. 108,160,124, 21,147,243,131,211, 61,181, 84, 34,215, 60,237, 28,
  1478. 97, 37,115,188, 86, 22, 61,147,109,242,135,211, 50,229, 17,160,
  1479. 120,192,229, 23, 63,131, 8, 80, 40,165,115,194, 37,121,215, 3,
  1480. 197, 37, 66,241, 48,182, 1,203, 31,184, 77,
  1481. 219, 46,252,120,218, 43,244, 19,229, 38,145,185, 52, 15, 79, 30, // 90
  1482. 152, 58,129, 41,166, 6,104,203,169, 13,189,228, 62,246,120, 88,
  1483. 239, 64,222,179, 84, 31,167,110, 38,125,207,171, 77,143,111,158,
  1484. 227,179, 71,151,231,127,248, 88,175, 65, 3,101,170,117, 82,244,
  1485. 71, 6, 90,147,180,217,162,227, 97,211, 52,227,153, 87,184,110,
  1486. 81,128,171,201, 94,223,105,143, 66,229, 9
  1487. ,
  1488. //
  1489. // Yellow
  1490. //
  1491. 28, 84,145,176, 68, 21,101,253, 50,178, 35,225, 7,162, 28,195, // 0
  1492. 152,115, 55, 4,212, 39, 67,148,110,171, 15,235, 84,225, 10,252,
  1493. 134, 99,170, 69,224, 90,172, 53,141, 76,132, 7, 97,210,116,241,
  1494. 96,176, 49,108,243,183, 68,253,139,171, 55, 23,106,223, 20, 89,
  1495. 153, 42,164,121, 98,168,231,111, 22,124, 66,209,107, 41,130,102,
  1496. 20, 91,145,189,221, 51,240,151, 31,250, 71,
  1497. 127,239, 12,204,129,227,155, 6,204, 94,149,124,201, 58,142, 73, // 1
  1498. 15,173,255,104,126,239, 15,197, 87,253, 51,193, 31,165,107,152,
  1499. 59,222, 31,119,154, 18,244,112,220,194, 62,227,143, 21,165, 35,
  1500. 147,226, 16,201,133, 47,158, 98, 18,202, 85,248,189, 46,138,232,
  1501. 65,247, 3,203, 47,139, 11, 63,217,181,248, 30,148,186,252,158,
  1502. 215,121,243, 34,108,138, 85,211,172,114,182,
  1503. 50,158,108, 54, 28,192, 78,126,161, 25,245, 44, 83,222,116,238, // 2
  1504. 208, 39, 89,197,160, 86,138,228, 30,126,156, 79,136, 93,218, 41,
  1505. 203, 79,147,248, 60,202, 44, 87,156, 38,108,164, 56,246, 87,190,
  1506. 80, 64,138, 93, 33,215,126,191, 52,235, 69,122,146, 93,183,116,
  1507. 33,180,142, 84,235,184, 81,199,134, 85, 52,120,230, 10, 85, 59,
  1508. 180, 4, 69,154,182, 15,194, 70, 7, 95,224,
  1509. 206, 78,219,167,249,113, 43,231, 64,213,105,190,164, 21, 65,159, // 3
  1510. 100,134,224, 63, 23,188,105, 55,180,100,218, 2,246,197, 70,172,
  1511. 6,112,185, 23, 97,167,119,189, 12,254,185, 26,198,110,132,217,
  1512. 20,255,195,163,240, 81, 24,226,116,156, 6,177, 38,240, 15,215,
  1513. 78,127,223, 54, 24,120,251, 32,170, 1,157,204, 97, 67,223, 34,
  1514. 137,203, 97,223, 41,248,127, 46,237,146, 24,
  1515. 173, 1,134, 91, 61,146,183, 27,173,121, 10, 71,137,249,183, 3, // 4
  1516. 56,175, 14,147,245, 43,221,155, 12,203, 59,168, 40,123, 20,243,
  1517. 132,227, 46,209,133,237, 31,218,137, 69,127, 82,220, 5,176, 42,
  1518. 156,119, 50, 4,112,180, 66,170, 91, 42,196,227, 80,168, 61,153,
  1519. 199, 12,106,191,163, 71,149, 98,227, 69,242, 43,141,173,198,100,
  1520. 236, 54,168,129, 63,100,163,213,120,185, 69,
  1521. 127, 45,240,196, 14,218,100,245, 91,148,237,202, 33, 90,126,206, // 5
  1522. 243,108,194, 76,119,171, 79,129,248, 74,140,228, 84,186,149, 49,
  1523. 94,160, 74,173, 15, 62,150, 99, 52,169,237, 48,155,100, 63,238,
  1524. 96,184, 75,231,149,211, 14,250,142,217, 98,134, 25,117,223,102,
  1525. 43,250,145, 89,238, 7,218, 40,125,194,110,184, 16,117, 25,157,
  1526. 122, 29,244, 20,216,192, 74, 26, 84, 35,254,
  1527. 189, 83,154,109,172, 52,130, 3,192, 39, 62,174,107,213, 47, 77, // 6
  1528. 148, 42,233, 31,216, 4,204, 37,110,191, 23,119, 54,237,106,212,
  1529. 192, 12,253,107,221, 82,197,246, 2,195,111, 18,230,191,127,205,
  1530. 11,142,202, 27, 57, 96,126, 40, 79, 11,162, 52,254,191, 3,136,
  1531. 176, 75, 25,211, 50,132,174,203, 63,150, 36, 81,207,246, 52,220,
  1532. 70,185, 90,151,109, 3,149,235,198,157,101,
  1533. 39,231, 66, 27,234, 81,201,162, 74,212,132, 20,233,138,170, 27, // 7
  1534. 189, 82,130,161, 98,143, 66,230,167, 48,156,203, 8,171, 66, 23,
  1535. 127, 60,148, 43,125,177, 26,117,157, 91,214,143, 83, 29,165, 55,
  1536. 82,248,100,133,173,239,201,154,188,238,119,206, 69,148, 81,235,
  1537. 59,203,158,115,184, 80, 28,102,245, 12,232,162, 57,146, 92,192,
  1538. 6,135,210, 43,174,251, 65,128, 11, 59,211,
  1539. 16,169,117,205,134, 20,241, 45,119,254,102,160, 78, 11,250,118, // 8
  1540. 224, 7,206, 59,252,182,118, 28, 99,213, 90,255,135, 83,222,151,
  1541. 240, 89,208,167, 8,237,141, 70,224, 28, 60,176, 51,240,114,219,
  1542. 33,157, 47,227, 80, 22, 49,104, 65, 32,174, 18,109,179, 39,209,
  1543. 18,128, 97,228, 16,255,148, 55,122,186, 84,126,219, 11,114,163,
  1544. 255,105, 57,229,127, 36,104,176,229,110,140,
  1545. 82,214, 48,157, 57,181,105,149, 16,179, 30,202, 50,180, 95, 55, // 9
  1546. 152,107,177, 38, 81, 17,200,151,244, 21, 60,111, 38,193, 29,110,
  1547. 180, 40,104,227, 80, 58,204, 39,169,104,252,118,205, 8,146, 98,
  1548. 193,118,209, 8,188,130,167,230,208,146, 91,216, 49,242,134, 91,
  1549. 162,246, 72, 53,167,108,198,223,166, 46,209, 30, 77,176,236, 32,
  1550. 79,146,196, 22, 75,186,218, 23, 87,163,247,
  1551. 182,131, 5,252, 93,218, 86,198,230, 55, 92,232,147,215,127,195, // 10
  1552. 20,241, 91,215,137,231, 48, 71,127,170,190,147,220,162, 63,230,
  1553. 3,142,191, 26,129,183, 98,244,132,194, 14,150, 93,188, 62,246,
  1554. 15,168, 71,146,110,253, 73, 1,124, 41,248,116,161, 8,193,118,
  1555. 33,186, 4,201,134, 44, 24, 78, 3,108,147,251,191, 43,136, 65,
  1556. 225, 15,169, 99,239,151, 56,141,193, 31, 51,
  1557. 73,229,103,176, 36,145, 7,128, 80,168,134,112, 1, 81, 37,227, // 11
  1558. 82,168,124, 10,161,101,176,220, 1,104,229, 13, 50, 99,209,131,
  1559. 77,251, 87,160,241, 35,156, 6, 78, 45,214, 66,237,128,171, 43,
  1560. 79,232, 32,219, 55, 25,199,160, 84,183, 60,198, 70,102,221, 56,
  1561. 231,140,105,221, 92,240,188,124,244,183, 70, 15,115, 95,205,159,
  1562. 113,209, 45,136,203, 12, 84,245, 99,206,121,
  1563. 24,147, 60,204,120,233,172, 59,210, 38,241,181, 61,247,171,142, // 12
  1564. 42, 64,202, 53,242, 23,131, 83,195, 43,136, 75,249,122, 24,175,
  1565. 47,200, 14,106, 51,201,115,222,180,107,164, 22, 84, 39,222,120,
  1566. 183,130, 98,158,192, 85,137,233, 29,220, 11,139,240,153, 22,164,
  1567. 76, 44,178, 25,157, 60,144, 93,158, 52,217,137,167,232, 2, 55,
  1568. 182, 89,235, 62,117, 42,181,127, 3,153,238,
  1569. 188,213, 17,161, 78, 27,104,247, 18,156, 72, 23,198,118, 15,106, // 13
  1570. 182,254,136,104,185, 76,228, 33,159,245, 96,205,182,153, 70,232,
  1571. 144,114,169,225,135, 88, 24,142, 63,240,123,218,191,156, 2, 90,
  1572. 215, 48,248, 9,121,241, 39, 62,107,129,174, 84, 34, 63,188,113,
  1573. 203,253,120, 74,228, 11,211, 33,232, 19, 81,194, 34, 76,132,250,
  1574. 36,148, 9,171,253,155,214, 67,223, 82, 42,
  1575. 110, 90,133,248, 47,215,182,135, 92,201,109,224, 89,155,235,206, // 14
  1576. 26, 94, 38,218,153, 50,144,207,111, 56,147, 30, 60, 5,192, 96,
  1577. 19,238, 37, 66,207,175,253, 46,202, 13, 78,143, 58,106,255,163,
  1578. 20,144,197, 67,167, 78,182,211,159,250, 51,195,216,122,232, 89,
  1579. 7,147, 36,193,130,172,113, 66,186,133,113,247, 57,212,176, 94,
  1580. 215,125,191,103, 73, 25,109, 46,186,133,170,
  1581. 8,227, 40,185, 99,151, 9, 62,229,143, 52,169,132, 44, 82, 63, // 15
  1582. 141,231,168, 4, 90,250, 15, 71,179, 9,225,170,106,240,125,207,
  1583. 61,179, 93,155, 1,120, 77,161,100,182, 43,232, 32,204,134, 66,
  1584. 208, 92,112, 37,226, 25,143, 5, 68, 85, 24,111,161, 15,145, 50,
  1585. 172,216, 63,239, 83, 52,250,147, 98,221,174, 8,104,146, 19,120,
  1586. 86, 28,229, 41,218,193,145,238, 18, 74,245,
  1587. 139,164, 74,122,231, 72,203,124, 37,183, 5,248, 30,215,164, 8, // 16
  1588. 194,115, 69,211,122,191,106,231,126,196, 80,130,210, 86,156, 33,
  1589. 110,213,133,246, 50,228, 21,217,126,245,153,114,177, 93, 24,174,
  1590. 43,244,184,134,206,105,234,122,198,222,136,238, 59, 97,249,197,
  1591. 101, 20,136,106, 2,183, 24,202, 53, 28, 78,156,229,192, 64,238,
  1592. 197,153, 75,166,133, 8, 91,172,121,202, 55,
  1593. 216, 28,204, 11,143, 34,161,255, 78,113,203, 93,119,185,102,246, // 17
  1594. 90,156, 46,175, 30,150, 44,166, 28, 64,254, 18, 42,185, 67,251,
  1595. 166, 10, 72,183,107,192,138, 41, 67, 5, 90,207, 18,239,111,224,
  1596. 76,152, 6, 83, 51,157, 90, 44,164, 17,183, 36,209,177, 68, 28,
  1597. 123,236,178,210,158,232,131, 92,164,245,207, 38, 90,126, 44,165,
  1598. 102, 4,248,113, 61,243, 48,214, 31,161, 98,
  1599. 115,182, 93,244, 57,216, 97, 24,175,236, 59,159,229, 17,137, 41, // 18
  1600. 218, 19,237, 99,219, 66,242, 95,217,158,105,144,229,119, 16,135,
  1601. 53,230,121, 26, 62,161, 90,201,169,222,130, 50,164, 64,138,195,
  1602. 34,121,202,171,241, 13,179,254,110, 64, 85,154,120, 3,140,224,
  1603. 159, 56, 85, 72, 41,111, 63,219, 6,114,137, 67,173,251, 14,209,
  1604. 134, 55,189, 31,178,203,142,111, 71,254, 42,
  1605. 234, 55,128,156,181,118,192, 56,149, 12,133, 37, 85, 73,200,168, // 19
  1606. 120, 74,189,131, 10,142,199, 20,133, 36,191, 56,162, 91,196,221,
  1607. 102,192,154,240,205, 10,245,116, 77, 34,187,249, 79,214, 4,163,
  1608. 98,233, 27, 58,141, 79,204, 27,146,192,232, 46,243,100,184, 86,
  1609. 37,202, 24,252,146,193, 33,149,182, 48,195, 18,218, 98,149, 72,
  1610. 233, 95,216,131, 72,102, 17,225,148, 1,169,
  1611. 88, 13,223, 38, 68, 4,230,127,213, 92,224,194,166,252, 26, 60, // 20
  1612. 210,151, 48,253, 78,181,113, 60,175,244, 79,212, 10,245, 44,151,
  1613. 23, 81, 36, 99,132, 86,149, 19,232,144,105, 15,150,124, 56,252,
  1614. 72,135,210,109,218, 36,132, 84,224, 8,131, 74,189, 39,216,117,
  1615. 243,138,174,121, 12,226, 94,243, 71,105,235,152,117, 53,194, 31,
  1616. 176, 39,158, 13,235,161, 57,180, 94,199,124,
  1617. 212,142,195,108,250, 87,159, 21, 68,181,113, 50, 6,144,115,237, // 21
  1618. 100, 2,173,118, 39,231, 88,207, 7,110, 45,139,103,178, 68,117,
  1619. 181,212, 58,220,179, 37,208,176, 66,206, 47,180,224,101,194, 36,
  1620. 176, 10,161, 89,183,246, 61,176, 49, 98,211,165, 16,147, 72,170,
  1621. 7, 63,101,216, 66,170,132, 18,209,171, 24, 69,204, 1,229,126,
  1622. 106,254, 86,112,186, 28,249,121, 37,237, 60,
  1623. 166, 98, 27,175,136,200,100,242, 41,151,236, 72,207, 94,186, 35, // 22
  1624. 137,229, 69,201,145, 17,165,127,223,152,196,231, 32,125,218, 8,
  1625. 249,133,167, 5,117,255, 91,110, 25,122,242, 83, 61, 23,154,218,
  1626. 110,242, 65, 38,122, 1,147,207,124,248, 37,114,202,253, 52,108,
  1627. 193,224, 22,187, 84, 51,199,114, 44,135, 94,248,138,171, 86,161,
  1628. 18,192,138,209, 51,148, 86,189, 70,154, 29,
  1629. 246, 53,225, 77, 14, 47,171,124,207, 79, 14,169,124,228, 51,160, // 23
  1630. 86,180, 23,104,220, 61,249, 42, 93, 26, 65,167, 90,192,153, 83,
  1631. 49,107, 75,228, 62,142, 43,234,151,196, 5,136,166,239,130, 78,
  1632. 52,144,193,230,168, 99,226, 69, 18,170,146, 61, 94,136, 20,235,
  1633. 149, 91,159,131,236, 8,152,255, 76,220,194, 58, 36,105,242, 62,
  1634. 218, 45, 73, 3,226,104,205,136, 15,197,118,
  1635. 5,181,121,156,237,212, 67, 33,179,111,139,247, 30, 67,196, 11, // 24
  1636. 213,123,247, 49,170,123, 82,159,189,241,126, 1,253, 56, 27,234,
  1637. 170,201, 28,154,195, 15,165,203, 58, 93,176, 53,203, 94, 11,181,
  1638. 211, 17, 88,133, 22,190, 44,112,197, 87,236, 4,219,181, 87,127,
  1639. 31, 54,250, 35,112,209, 95, 37,168, 6,153,119,184,210, 28,133,
  1640. 103,180,241,159,124, 62, 22,234,109,221, 77,
  1641. 141,209, 62, 35, 96,118,150,250, 19,221, 42,181, 84,146,111,242, // 25
  1642. 97, 41,157, 76,196, 4,205, 32,112,145, 76,214,107,141,205,119,
  1643. 13,140,246,102, 88,239, 71,126, 29,226,114,248, 34,121,229, 43,
  1644. 152,115,220, 54,248, 79,155,240,139, 32,182,119,154, 38,211,170,
  1645. 222,117,198, 87,169, 57,184,133,226,108, 50,236, 12, 88,152,195,
  1646. 10,144, 87, 31,178,246,150, 76,174, 48,163,
  1647. 33,102,254,190,168, 2,197, 88,142, 58, 99,213, 7,233,164, 53, // 26
  1648. 141,207, 12,235,106,140,224, 73,233, 16,198,155, 38,181, 62, 91,
  1649. 224, 68, 43,172,130, 40,215, 99,186,148, 19, 75,156,192, 67, 99,
  1650. 253, 33,184,104,147, 34,212, 9, 63,227, 93, 49,232, 70,107, 17,
  1651. 62,181, 1,145,217, 26,234, 66, 21,203, 80,176,128,219, 41,249,
  1652. 58,228,110,201, 53, 97, 33,209, 10, 85,235,
  1653. 57,126, 18,138, 70,231, 52,109,234,191,160,131, 64,202, 91, 17, // 27
  1654. 189, 64,115,173, 33, 89,166, 53,177,102, 44, 70,220, 11,246,135,
  1655. 186,107,217, 2,230,182,143, 9,244, 49,208,130,222, 2,171,135,
  1656. 199, 71,161, 5,202,121,179,102,128,161,207,144, 11,191,160,240,
  1657. 141, 99,228, 55,125, 97,151,114,175,129,244, 27, 63,162,111, 90,
  1658. 126,173, 23,222,129,193,162,119,250,132,188,
  1659. 226,160,197, 92,214, 32,132,172, 10, 80, 25,254,108, 35,180,122, // 28
  1660. 250,154,220, 46,198,254,116, 22,204,125,248,172,128,101,162, 20,
  1661. 54,148,198,121, 60, 26, 79,170,117, 70,182, 91, 51,105,238, 59,
  1662. 16,127,240, 91,231, 70, 47,254,194, 16, 57,114,250, 81,130, 39,
  1663. 201, 68,159, 23,239,186, 10,250, 43, 69,157,105,202,233, 13,188,
  1664. 215, 51,146, 71, 5,239, 43, 65,179, 26, 79,
  1665. 6, 67,237, 48,120,184,239, 71,217,121,209, 48,171,140,227, 46, // 29
  1666. 97, 25, 80,143, 73, 11,153,236, 86,158, 7, 84,234, 49,196, 88,
  1667. 240, 37, 74,161, 98,251,202, 45,212,142, 13,252,151,205, 26,145,
  1668. 225, 81, 46,188,137, 17,162, 94, 38, 82,221,180, 30, 52,228, 95,
  1669. 11,253,107,175, 82, 62,208, 91,190,222, 2,184, 46,133, 72,151,
  1670. 34, 85,255,182, 83,148,113,226, 96,151,211,
  1671. 177,103,140, 11,159, 96, 18,153, 39,185,149, 73,236, 4, 71,212, // 30
  1672. 135,194,238,113,212,181, 59,135, 33,222, 56,187, 21,150,217,114,
  1673. 173,208, 18,227,187,124,150,102, 28,230,111,172, 34,124,187, 91,
  1674. 175,211,152, 29,108,220,198,143,230,171,126, 96,146,199,169,119,
  1675. 184,134, 41,213,141, 29,161,131, 32,112,145, 89,252, 26,195,115,
  1676. 234,163, 19,109,219, 36,172, 14,200, 41,120,
  1677. 251, 33,207,182,244, 60,197,112,247, 97, 16,116,199, 98,165, 20, // 31
  1678. 177, 52, 8,168, 30,106,219, 96,195,107,143,210,117, 75, 32, 58,
  1679. 132, 93,144, 83, 58, 7, 87,241,175, 74, 48,208, 83, 64,243, 44,
  1680. 111, 9, 66,250,178, 74, 52,105, 19, 67,246, 11,215, 88, 18, 66,
  1681. 219, 57,198, 5,246,111,231, 59,170,242, 53,207,152, 98,218, 5,
  1682. 76,203, 60,131,199, 74,236, 57,137,222, 86,
  1683. 145,111, 54, 90, 23,135,222, 46,143, 65,225,176, 27,138,249,116, // 32
  1684. 86,226,125, 65,244, 44,157, 3,174,251, 64, 35,175,247,166,224,
  1685. 14,254,193, 42,238,179,215, 20,128,200,145, 6,227,136, 15,158,
  1686. 228,132,171, 91,126, 2,244,129,211,152, 39,187, 54,130,248,147,
  1687. 26,163, 88,122, 66,172, 97, 8,215, 82, 28,125, 64,176, 48,160,
  1688. 123, 37,241,177, 9,152,123,194,102,165, 21,
  1689. 188,230,152,215,114,165, 74,182, 3,200,157, 59,231, 87, 45,208, // 33
  1690. 158, 99,199,145,184,123,228, 55, 80, 21,130,228, 88, 4,137, 87,
  1691. 180,108, 27,166,117,139, 54,161, 93, 56,247,116,163,190,100,199,
  1692. 86, 31,207, 39,223,154,189, 45,178, 89,121,162,229,107,175, 74,
  1693. 236,101,225,148,191, 42,206,147,118,190,159,238, 10,224,108,237,
  1694. 193,144,105, 89, 53,250, 29, 81, 1,238, 62,
  1695. 35, 80, 8,177, 40,251, 31,108,235, 80,121, 34,106,150,186, 26, // 34
  1696. 68,241, 42, 77, 13, 89,190,133,237,164,103,190,152,106,199, 46,
  1697. 126,213, 77,226, 93, 30,198,112,228, 32,170, 87, 25, 70,255, 49,
  1698. 144,238,110,188, 60,102, 30, 77,237, 9,218, 47, 86, 3,205, 44,
  1699. 124,181, 22, 49,241, 14, 88,255, 50, 19, 76,199, 90,143, 22, 61,
  1700. 81, 27,225,165,211,111,180,227,133,200,115,
  1701. 245,135,221, 65,127, 94,203,169,132, 26,253,180,212, 9,243,113, // 35
  1702. 141, 1,161,205,252,110, 22,208, 97, 39,218, 17, 51,243, 24,233,
  1703. 157, 7, 50,152,205, 68,251, 4,183,132,213,106,205, 42,113,170,
  1704. 4, 95,160, 13,146,233,197,160,114,144,100,193,150,240, 98,158,
  1705. 14,209, 84,168,112,140,196,107,177,228,129, 35,113,184,208,157,
  1706. 253,178, 57, 19,128, 44, 75,158, 38, 71,153,
  1707. 175, 41,109,192,236,154, 10, 63,215, 54,151, 89,128, 75,167, 57, // 36
  1708. 230,185,117, 28,135,176, 47,153, 60,181,137, 75,206,119,177, 70,
  1709. 101,187,247,114, 15,168,100,149, 48, 82, 20,241,144,180,225,129,
  1710. 215,195, 54,251, 89,118, 16, 56,203, 24,255, 40,126, 30,185, 58,
  1711. 246,138, 69,235, 57,220, 77, 24,143, 70,211,172,246, 67, 38,118,
  1712. 12,134,108,201,152,233, 11,187, 95,214, 15,
  1713. 206, 83,164, 47, 20, 78,229,148,104,190, 14,201, 45,221, 29,205, // 37
  1714. 93, 51,223, 85,212, 75,235,119,223, 5,254, 86,161, 61,144, 36,
  1715. 219, 86,139, 57,229,131,190, 65,232,199,160, 75, 11, 95, 32, 59,
  1716. 79, 23,134,184, 65,213,137,244, 83,163, 68,177,214, 73,119,219,
  1717. 104, 30,201,122, 20,178, 40,165,234, 4,103, 51, 14,135,233, 96,
  1718. 216,192, 88,245, 63, 85,206,138,254,112, 60,
  1719. 131, 4,246,143,214,184,123, 49,244, 69,115,239,164,105,154,126, // 38
  1720. 174, 18,150, 64, 35,144, 12,194, 73,109,171, 38,220, 21,235,197,
  1721. 113,167, 18,199, 83, 31,243, 13, 95,115, 37,188,132,237,158,187,
  1722. 244,106,222, 30,156, 45,175,105, 35,229,135, 97, 21,237,166, 8,
  1723. 151,187, 51,156,210, 92,243,113, 50,193,139,161,215, 88,177,148,
  1724. 76, 34,165, 8,182, 30,120, 56, 19,157,235,
  1725. 103,178, 67,117, 57, 98, 32,202, 23,172,143, 81, 33,230, 5, 73, // 39
  1726. 254,105,233,169,191,248,100,165, 27,201,131, 68,185, 99,129, 1,
  1727. 51,240, 76,160,216, 50,121,164,221,140,252, 56,209, 65,116, 10,
  1728. 141,174, 87,120,242, 92, 12,217,187, 58, 4,203,149, 51, 92,207,
  1729. 63, 94,253, 1,110,145, 63,199,130, 89,251, 62,116,194, 56, 2,
  1730. 248, 61,219,141,105,239,150,226, 78,184, 34,
  1731. 149,221,199, 37,171,249,132,162, 91,215, 9,189, 60,137,185, 50, // 40
  1732. 198, 40,131, 7,112, 66, 39,127,242, 49,226, 10,147,249, 78,178,
  1733. 137,194, 30,130,101,181, 90,205, 44, 81, 1,161,100, 27,203,227,
  1734. 71, 41,204, 2,179,206,115,150, 79,130,168,247,114,194,140, 34,
  1735. 230,129,167, 75,228, 28,172, 38,225, 29,168, 17,236, 36,105,204,
  1736. 156, 97,122, 49,207, 79,176, 43,116,203, 91,
  1737. 52, 18, 83,139,216, 5, 69,234,112, 55,252,118,214, 96,240,122, // 41
  1738. 157, 81,212, 93,201,158,218,180, 89,151, 78,191,116, 44,209, 66,
  1739. 233, 97, 58,255, 5,226,136, 19,152,184,217,125,239,177, 89, 37,
  1740. 129,253,155, 69,140, 34, 65,249, 25,227, 85, 44, 74, 11,240,178,
  1741. 115, 22,215, 45,192,122,249, 81,150,109,219, 82,126,173,223,132,
  1742. 39,183,228, 22,159, 61, 5,211,142, 13,229,
  1743. 127,252,164, 25,102,186,147, 19,197,141, 39,158, 23,169, 77, 12, // 42
  1744. 228, 26,172,245, 21,137, 52, 2,114,215, 22,239, 91,174, 24,160,
  1745. 14,123,166,203,149, 45, 73,214, 61,112, 34, 75, 18,147,119,196,
  1746. 165, 94, 25,235, 99,226,125,165, 60,198, 17,185,222,132, 98, 46,
  1747. 67,199,142,101,160, 17, 57,201, 12,179, 52,203,155, 24, 54, 80,
  1748. 239, 15,147, 88,253,190,133, 90,244, 69,170,
  1749. 105, 64,209,117,242, 89, 45,224, 81,180,102,206, 66,221, 42,184, // 43
  1750. 107, 63,136, 40, 75,229, 97,249,189, 41,129,156, 34,223,140,104,
  1751. 213,183, 35, 69,109,237,167, 85,242,195,158,228,200, 62,244, 5,
  1752. 54,207,116,185, 53,175, 8,205,104,153,127,100,159, 32,212,169,
  1753. 246, 89, 9,237, 70,217,138,113,235, 88,140, 4, 71,255,191,116,
  1754. 165, 69,197,113, 31,103,224, 38,154, 29,194,
  1755. 1,144, 40,176, 54,203,168,124, 27, 59,239, 2,148,106,131,250, // 44
  1756. 149,214,189,114,160,183,123, 60,161, 74,210,103,181, 64, 87,245,
  1757. 49, 81,239,140, 17,189, 34,142, 7, 53, 97,137, 45, 84,170,107,
  1758. 223, 74,151, 14,213,144, 83, 47,231, 33,217, 55,252, 67,142, 13,
  1759. 119,154,187,126, 39,178, 90,163, 36,191,244,117,212, 95,143, 9,
  1760. 203, 45,134,230,161, 55,178,113,200, 93,232,
  1761. 76,185,225, 80,152, 25, 95,251,156,202,121, 77,186,237, 17, 78, // 45
  1762. 55, 4, 91,219, 57, 10,207, 32,133,237, 13, 53,252, 6,196,121,
  1763. 154, 9,196, 84,223,125, 97,217,179,128,253, 11,187,225, 22,142,
  1764. 176, 42,242,127, 67, 32,252,186,139, 87,179, 3,196,114,187, 78,
  1765. 223, 34, 63,208,107,243, 5,221, 56,105, 28,167, 43,176, 37,217,
  1766. 98,247, 79, 3,212, 77, 26,249, 59,124,160,
  1767. 241, 30,122, 13,238,136,213, 6,110, 37,168,222, 28, 93,140,197, // 46
  1768. 166,233,125, 24,254, 89,150,222, 83,173,113,203,138,109,171, 27,
  1769. 229,102,170, 38,159, 54,247, 67, 24,209, 75,168,109,134, 51,251,
  1770. 96, 19,188,101,223,170,115, 95, 13,243,124, 95,148, 23,234, 47,
  1771. 171,103,255,165, 21,148, 72,186,129,155,225, 73,133,230, 64,121,
  1772. 160, 29,183,104,144,193,131,164, 9,216, 43,
  1773. 108, 86,202,160,103, 41, 67,187, 88,243, 66,136, 49,172,213, 31, // 47
  1774. 114, 41,204,173,134,190,107, 18, 63,196, 35,159, 68,224, 55,211,
  1775. 73,129,252, 68,210, 12,173,115,154, 85, 40,229, 27,213, 86,195,
  1776. 124,217, 77,159, 3, 74,204,152, 66,164, 42,207,240, 62, 85,145,
  1777. 197, 2,138, 45, 96,200,117, 27,252, 85, 15,200,101, 22,184,239,
  1778. 73,140,219, 43,240, 16, 96,231, 75,144,197,
  1779. 172,135,255, 50,192,230,166,131,208,149, 10,198,110,235, 59, 97, // 48
  1780. 247,148, 71,101, 36, 65,231,160,248,140, 94,237, 19, 85,162,136,
  1781. 43,204, 19,117,145,101,202, 35,231,195,124, 67,148, 97,158, 29,
  1782. 67,151, 48,245,129, 43,234, 28,196,223, 78, 20,165,129,210, 29,
  1783. 122,214, 75,179,238, 54,216,173, 68,208, 50,175,248,152, 94, 36,
  1784. 201, 13,118,171, 68,123,205, 31,184,100, 22,
  1785. 224, 68, 5, 94,120, 29, 84, 15, 58,116,231, 79,154, 18,129,191, // 49
  1786. 9,178, 49,242,161,206, 26,121, 52, 5,216,128,186, 47,246, 2,
  1787. 183, 86,168,220, 56,241, 72,127, 58, 7,173,247,190, 12,226,177,
  1788. 238, 10,197,108,211,178, 97,134, 53,111,141,189,104, 46,175,249,
  1789. 59,101,232, 19,122,156, 36,105, 7,161,139,109, 68, 3,222,114,
  1790. 164, 61,253, 89,215, 38,156, 55,133,245, 59,
  1791. 116,190,145,177,214,149,250,175,220, 37,165, 27,253, 71,163,228, // 50
  1792. 76,133,216,119, 1,136, 91,178,209, 79,175, 61,105,209,122, 96,
  1793. 230,148,101, 34,188, 4,158,185,244,140, 92, 32, 61,128,105, 43,
  1794. 137, 90,172, 21, 57,146, 13,241,170, 9,254, 54,231, 6, 89,154,
  1795. 16,189,141, 51,196, 78,225,127,238, 92,218, 41,198,136,174, 48,
  1796. 209,101,151, 22,136,185,249,111,212, 12,154,
  1797. 26, 45,234, 59, 17, 79, 49,128,102,190, 92,214,125,187, 45,109, // 51
  1798. 24,199, 35, 81,184,225, 40,245,113,153, 34,255, 14,156, 37,201,
  1799. 58, 17,245,138, 84,232,109, 25, 76,206,110,219,165,237,197, 74,
  1800. 212,112,250, 83,224, 78,204,116, 69,209, 83,155,120,216,195,106,
  1801. 229, 73,170,112,251, 10,142,201, 48,178, 19,123,234, 35, 74,243,
  1802. 131, 7,224,178, 53, 95, 2, 73,170, 94,199,
  1803. 80,208,102,129,242,180,205, 24,229, 63,146, 44, 99, 9,219,142, // 52
  1804. 249,102,171,238, 54,109,166, 76, 12,196, 85,139,180,224, 81,144,
  1805. 178,125,197, 41,177, 62,145,223, 48,163, 12,144, 43, 84, 1,156,
  1806. 24,147, 33,128,180, 29,161, 39,182,135, 35,187, 27, 72,143, 47,
  1807. 128, 37,222, 25, 62,182, 95, 29, 73,146,250, 79,157, 99,189, 28,
  1808. 84,192, 43,113,235,199,125,232, 36,131,240,
  1809. 139,173, 23,163, 68,108,139, 87,160, 7,241,181,139,200, 86,167, // 53
  1810. 67, 45,149, 12,138,217, 22,141,231, 49,220, 66,115, 59, 22,249,
  1811. 101, 49, 75,214,118, 21,203, 95,182,123,255, 79,202,123,179,243,
  1812. 62,221,167, 68,233,109,213, 99,245, 59,225, 99,240,172, 14,245,
  1813. 163,201, 91,149,207,115,160,244,189,114, 59,183, 9,211,115,162,
  1814. 231,141, 76,164, 62, 32,154,194, 65,181, 52,
  1815. 106,251, 50,223, 2,213, 45,237,105,203,118, 27, 68,245,111, 15, // 54
  1816. 225,185,116,196, 69, 92,200, 58,180,120,162, 3,238,194,136,207,
  1817. 8,233,153, 13,248,168,130, 36,236, 22, 58,177, 31,233, 53,115,
  1818. 193, 98, 48,198, 3,151, 55, 16,157,118, 5,139, 52,124,211, 98,
  1819. 64, 7,116,234, 72, 16,219, 81, 1,214, 37,226,142, 45,255, 15,
  1820. 56,211, 21,248,131,219,100, 23,117,226, 6,
  1821. 152, 72,198,134, 95,150,192, 19,174, 42, 87,224,153, 47,176,132, // 55
  1822. 38, 76,215, 30,254,170,116,241, 97, 21,204, 88,151, 32,111, 88,
  1823. 165,128,191,109, 91, 52,222, 71,148, 91,159,224, 93,148, 17, 76,
  1824. 139, 11,238,135, 93,253,122,221, 76,188,216,166,200, 89, 37,182,
  1825. 230,141,188, 30,174,140, 44,123,149,168, 96,121, 69,179, 90,151,
  1826. 79,117,182, 93, 8,175, 86,254,146, 76,213,
  1827. 192, 19,116,174, 42,247,121, 78,141,254,124,191, 3,216, 92,200, // 56
  1828. 246,147,100, 60,144, 4, 48,154, 39,136,251,108,177, 51,230,182,
  1829. 29, 82, 57,227,143,199, 2,117,187,208,114, 6,126,214,175,252,
  1830. 163,216,116,181, 42,166, 64,194, 31,102, 46, 77, 24,252,144,108,
  1831. 46, 81,248, 51,104,241,186, 71,233, 27,190,238, 23,218,127,206,
  1832. 174, 32,229,151,204,114, 44,206, 15,169, 42,
  1833. 96,238, 54,227, 80, 28,178, 60,200, 15,158, 64,107,137, 29, 59, // 57
  1834. 112, 7,173,234,121,192,218, 72,228,186, 53, 25,221, 81,146, 63,
  1835. 201,254, 38,169, 28, 85,164,249, 20, 62,239, 72,198, 47,107, 64,
  1836. 23, 84, 35, 72,204, 22,229,135,163,247,129,229,113,163, 3,209,
  1837. 173, 18,159,129,214, 87, 20,208, 51, 84,137, 54,163, 95, 11, 49,
  1838. 242,140, 55, 77, 39,233,159,130,104,242,125,
  1839. 61,141,201, 12,153,214,104,227, 47, 94,211, 37,243,168,223,192, // 58
  1840. 158,225, 45,201, 20, 88,106,172, 11, 77,163,133,201, 17,243,123,
  1841. 4,155,106,213, 68,234,131, 47, 85,179, 37,144,168, 26,232,124,
  1842. 210,191,155,246,130,103, 80, 8, 58,184, 13,152, 41,192, 71,127,
  1843. 226,102,200, 72, 6,165,120,145,175,242, 6,210,110,248,181, 74,
  1844. 109, 3,213,124,182, 13, 67,191, 75, 31,184,
  1845. 17,170,111, 92,188,130, 5,146,170,237,110,183, 84, 16,120, 78, // 59
  1846. 23, 95,134, 69,162,247, 26,129,203,120,238, 60,102,161, 45, 96,
  1847. 222, 86,194,127, 10,186, 74,220,155,122,211,103,249, 91,184, 55,
  1848. 139,100, 50, 11,218,176,150,240,117, 93,211, 72,221, 97,241, 49,
  1849. 24,150, 57,228,185,100,249, 35, 96,116,193, 70,148, 29,134,225,
  1850. 165,195, 99,251,147,102,239, 46,214,153,227,
  1851. 73,247, 33,233, 67, 41,251, 74, 38,131, 9,145, 67,230,153, 47, // 60
  1852. 253,176,214,108, 40,185,148,233, 46, 99,211, 6,188,130,210,176,
  1853. 143, 32, 56,236,150,111, 21,200, 32,235, 10, 53,135, 14,152,222,
  1854. 19,239,166,121, 76, 25,211, 38,196,156, 25,132,175, 22,141,184,
  1855. 87,255,117, 43,134, 27,203, 58,219, 19,157, 41,223, 77,204, 36,
  1856. 59,143, 75, 24, 53,198,134,167, 2, 92,118,
  1857. 190, 53,157,120,206,174, 99,187,220, 82,202,250, 40,198, 98,184, // 61
  1858. 124, 64, 9,142,228, 96, 55, 80,188, 21,154, 82,250, 30, 77, 14,
  1859. 247,120,171, 94, 40,252,174,137,104, 69,150,196, 73,209,112, 41,
  1860. 78,200, 62,226,193, 53,109,134, 70,232, 50,251,115, 65,212,108,
  1861. 162,203, 11,167,238, 70,158, 81,186,125,254, 94,173, 21,103,125,
  1862. 246, 17,210,176,231, 84, 29,108,250,143,210,
  1863. 14,138,218, 7, 60,147, 32,125, 20,154, 50,114,172,132, 6,208, // 62
  1864. 34,161,242,189, 23,126,207, 30,167,240,129, 54,172,118,218, 61,
  1865. 101,200, 22,217,188, 63, 84, 53,244,187,115,228,169, 49,243,182,
  1866. 156,118, 5,140, 96,159,255,185, 1,104,167, 87,199, 10,237, 52,
  1867. 32,132, 83,212, 96,192, 4,234,139, 30, 52,197,132,234,163,188,
  1868. 90,159,117, 47,155, 63,221,175, 66, 36, 80,
  1869. 177,103, 87,167,243,112,230,197, 66,236,188, 90, 31,216, 59, 82, // 63
  1870. 226,111, 92, 48, 72,174,255,141,112, 91,202, 33,230, 95,187,153,
  1871. 226, 48,147,125, 3,157,228, 13,167, 46, 25, 90, 1,144, 87, 17,
  1872. 97,250,187, 46,236, 14, 89, 45,221,144,207, 41,138,173, 98,151,
  1873. 192,234, 61, 23,147,123, 53,107,179, 85,230,109, 2, 80, 58, 12,
  1874. 223, 39,235, 93, 5,201,121, 19,195,159,234,
  1875. 117,255, 23,201, 41, 88, 10,157,101,134, 2,227,143,103,239,156, // 64
  1876. 134, 20,199,148,219,100, 14, 57,220, 4, 66,164,142, 16, 44,124,
  1877. 10,177, 83,246,109, 87,206,140, 94,218,155,252,123,192,232,131,
  1878. 205, 27, 68,168,115,213,135,174,117, 64, 18,242,107, 30,206, 86,
  1879. 2,104,179,243, 68,200,251,155, 16,204, 61,144,179,246,121,200,
  1880. 139, 67,183,125,253,103,148,242, 97,127, 46,
  1881. 72,185, 60,144,121,182,210, 54,242, 40,180, 64,165, 18,183, 38, // 65
  1882. 62,175,231, 1,115,163,196, 82,157,190,244, 99,208, 80,254,196,
  1883. 74,236, 57,196, 43,177,119, 35,190,128, 63,204,102, 40, 72,174,
  1884. 43,149,233, 92, 21,188, 73, 27,236,187, 92,158,195, 72,249,121,
  1885. 221,145, 35,119,161, 14, 42, 94,220, 78,167, 28,207, 40,157, 30,
  1886. 107,210, 24,162,189, 71, 30, 56,206, 7,222,
  1887. 33,151,216, 95,229, 28,138,110,168, 80,211,127,247, 75,116,205, // 66
  1888. 251, 88,125, 54,245, 63, 36,236,116, 45,135, 21,123,172, 60,141,
  1889. 109,160, 23,129,223, 17,244, 61,234, 7, 84, 26,164,222, 13,109,
  1890. 216, 76,118,210,142, 44,245,154,101, 47,230,120, 7,145, 38,163,
  1891. 75,193, 58,210, 90,227,139,181,120, 45,249,124, 96, 66,221, 76,
  1892. 244,153, 85, 61, 13,220,156,180, 81,139,173,
  1893. 242,124, 2, 48,159, 75,251, 35,218, 17,111, 56, 34,197,145, 7, // 67
  1894. 105,154, 31,191,137, 93,213,145, 18,181, 73,230, 47,218, 1,226,
  1895. 29,208, 98,171, 70,150, 90,166,108,158,226,188, 56,147,125,239,
  1896. 57,191, 3,178, 65,219,122, 6,180,139, 31,206, 56,227,185, 59,
  1897. 16,246,134, 20,173,111, 62,239, 23,188,146, 8,236,189,134,175,
  1898. 6, 48,236,143,198, 92,126,230, 36,215,103,
  1899. 51,202,101,236,190, 17,173, 84,133,195,158,229,171, 99,222, 49, // 68
  1900. 178,211, 69,227,169, 16,183,106, 67,252,148,191,108,155, 91,175,
  1901. 66,135,234, 6,193,110,212, 20,198, 45,134,103,247, 79,203, 40,
  1902. 163,133,253, 37,109,169, 92,200, 67,214, 79,174, 85,132,106,208,
  1903. 95,166, 78,232, 49,214, 4,160, 82,228, 69,110,161, 57, 21, 97,
  1904. 204,122,178,102, 42,242, 20,112, 65,160, 18,
  1905. 82,170,140, 65,128,104,205, 61,231, 46, 92, 9,128, 26, 66,244, // 69
  1906. 82,130, 11,108, 44,123,240, 31,208,121, 8, 79, 25,199,124,247,
  1907. 39,182, 88, 51,247, 31,136, 55,255, 76, 16,171, 49, 8,179,101,
  1908. 23, 86, 98,151,235, 16, 59,251,126, 19,241,152, 12,254, 30,149,
  1909. 228,113, 41,188,120,153,101,196,131, 55,170,209, 36,225,120,255,
  1910. 155, 64, 24,219,132,169, 54,193,250,130,190,
  1911. 58,248, 12,211, 43,239,149, 4,119,184,149,255,212,180,121,155, // 70
  1912. 22,218,162,253,199, 78,157, 52,167, 92,225,164,243, 65, 33,152,
  1913. 78,211,122,167,145, 65,224,170,113,150,229,197,118,216,135,245,
  1914. 172,220,195, 49,207,130,187, 36, 98,145, 57,111,197, 68,178, 53,
  1915. 7,194,142, 17,239, 65, 32,252, 40,217, 21, 94,139, 76,180, 43,
  1916. 83,234,188, 80, 1,207, 87,150, 8, 95,226,
  1917. 23,111,160, 91,183, 30, 86,169,241, 27, 77, 41,105, 87,206, 42, // 71
  1918. 192,103, 74, 51,142, 5,226,104,193, 61,138, 44,128,209,113,223,
  1919. 11,106,238, 18,197,118, 78, 3,190, 92, 26, 67,157, 90, 31, 64,
  1920. 111, 9,138, 76, 26,100,150,216,168,227,185, 35,221, 97,136,212,
  1921. 81,248, 68,174, 94,202,166,113, 88,185,119,247,190, 9,147,207,
  1922. 17,131, 40,152,251,105,125,217, 52,177,122,
  1923. 220,198, 48,233,146,115,215, 98, 56,210,135,195,163, 15,236, 69, // 72
  1924. 141,231, 29,186,100,213,131, 28,248, 14,214,181, 80, 6,173, 54,
  1925. 189,155, 60, 83, 42,211,160,235, 43,215,131,245, 46,224,190,148,
  1926. 234, 57,184,246,167,231, 12, 77, 49, 2, 82,122,154, 15,240,120,
  1927. 169, 33,123,224, 50,138, 15,221,143, 8,157, 45, 70,230, 85,114,
  1928. 226,174,100,195, 71, 34,185, 25,239, 78,155,
  1929. 70,136, 99, 19, 61,252, 13,197,159,114, 7,234, 58,128,172,112, // 73
  1930. 3,169,123,241,159, 42, 70,179,149, 94,115, 31,240,149, 87,254,
  1931. 133, 36,206,173,250, 95, 28,137, 72,175,105,165, 5,128, 96, 18,
  1932. 201,125, 82, 41,119, 64,189,116,243,133,205,237, 51,188, 66, 26,
  1933. 99,205,154, 1,110,245, 74,190, 62,239,102,215,127,170, 34,194,
  1934. 71, 50,239, 15,140,226,162, 67,133,195, 40,
  1935. 3,187,226,169,125,178, 47,137, 34,247, 95,153, 80,216, 32,249, // 74
  1936. 90,209, 62, 12, 79,200,238,111, 47,229,166,204, 63,107,200, 28,
  1937. 99,230, 87,129, 16,146,189,103,248, 13, 61,205, 77,183,249, 52,
  1938. 165, 35,225,155,206, 33,142,210, 92,173, 64, 20,162, 85,209,147,
  1939. 232, 41, 82,185,210, 37,175,100, 40,202, 31,178, 13, 63,251,158,
  1940. 6,150,118,210, 59,114, 93,208, 13,109,254,
  1941. 162,113, 32, 77,208,103, 79,223, 72,172, 41,223, 18,193, 55,145, // 75
  1942. 195, 36,150,217,119, 34,142, 17,195, 71, 9,141, 38,224,162,123,
  1943. 182, 3,164,106,214, 51,228, 58,122,195,143,232, 32,156,116, 87,
  1944. 217,102,137, 3, 92,254, 72, 21,150, 35,194,110,130,251, 5,106,
  1945. 177, 60,253,133, 62,152,120,227,161,123, 88,142,235,101,133, 77,
  1946. 221, 88,171, 34,181,242, 52,148,234,174, 83,
  1947. 217, 47,245,135, 6,237,151,191, 16,130,186,110,140, 94,175,120, // 76
  1948. 68,108,244, 88,188,167, 95,226,158, 85,252,117,189, 84, 13, 65,
  1949. 242, 50,222, 64,186, 80, 6,171,218, 25, 94, 48,103,219, 11,145,
  1950. 186, 24,242,197,169,113,183,220, 54,247, 97,220,176, 73, 48,194,
  1951. 128, 19,169,103, 12,240, 30, 69, 5,254,190, 50,200, 38,207, 23,
  1952. 186,106,249, 73,146, 4,199, 29, 74, 44,142,
  1953. 68,195,153, 55,186, 65, 33,108,243, 89,209, 51,253, 37,220, 8, // 77
  1954. 231,167, 25,136, 16,250, 49,126, 58,214, 24,160, 51,236,135,205,
  1955. 83,144,116, 20,152,235,130,100, 42,150,182,254,132,192, 67,238,
  1956. 48,129, 65, 84, 48,146, 10,106,166,127, 7, 66, 25,215,155,235,
  1957. 77,213, 89,223,196, 86,184,216,151,105, 22, 72,157,112,168,232,
  1958. 58,138, 12,208,123, 96,167,119,221,190, 20,
  1959. 128,104, 18,222, 94,139,213,174, 47,158, 2, 72,164,200,103,155, // 78
  1960. 47,197, 63,206,111, 71,210, 7,184,138,109,204, 74,179, 36,165,
  1961. 19,210,181,247, 40, 90,163,204,240, 86,118, 1,166, 85, 30,171,
  1962. 98,206,159, 19,233,203, 70,231, 78,205,154,238,135, 90,108, 14,
  1963. 40,159,119, 27,138,163,104,132, 46,179,208,127,241, 3, 68,126,
  1964. 33,163,191, 64,232, 39,250, 86,138,100,247,
  1965. 160,231, 75,166,117,253, 11, 80,128,219,112,232,125, 22, 70,241, // 79
  1966. 122, 90,143,228, 40,177,147,103,241, 46, 89,245, 1,122, 93,250,
  1967. 112, 67, 34, 96,125,194, 68, 50, 15,188,214, 58, 77,210,233,137,
  1968. 6,252,113,178,124, 34,135,186, 25, 45,114,190, 49,174,206,145,
  1969. 241,184, 49,246, 80, 42,237, 16, 82,244, 53, 97,217, 83,192,246,
  1970. 99,223, 82, 26,154,184, 60,210, 14,178, 52,
  1971. 5,183, 42,202, 27, 60,153,198, 36,177, 93,152, 46,188,146, 13, // 80
  1972. 204, 37,185, 4,125,234, 88,199, 31,153,176, 38,146,225,196, 45,
  1973. 140,233,169,145,221, 12,245,140,102,156, 31,235,145, 40,119, 71,
  1974. 190, 83, 45,215, 95,243, 56,157,251, 85,218, 75, 29,249, 57,117,
  1975. 66, 84,141,193, 4,208, 62,189,140,161, 10,173,135, 35,151, 15,
  1976. 180, 40,132,200,104, 17,115,156, 45,228, 81,
  1977. 243,125,100,140,229,180,109,225, 70,248, 21,206, 80,246,108,225, // 81
  1978. 169,101,255, 79,165, 56, 17,133, 70,226,115,192, 83, 54,157, 16,
  1979. 187, 88, 4, 64,179, 44,120,172,228, 86,130,107,199,179, 16,164,
  1980. 227, 29,155, 71, 7,192,106, 17,124,173, 9,164,140,101, 2,193,
  1981. 217, 16,232, 98,173,130,107,227, 29,115,231, 69,195, 60,215,112,
  1982. 143, 66,255, 88,217,137,239, 90,204,120,149,
  1983. 189, 54,210, 11, 74, 39, 91,124, 6,139, 57,171, 28,135, 43, 77, // 82
  1984. 29,129,158, 46,219,108,243,171,207, 10, 61,238, 25,208,116, 76,
  1985. 227,128,202,255,110, 88,217, 19, 54,177,247, 10, 55, 93,249, 60,
  1986. 141,115,204,236,127,166,220, 75,196, 51,232,118,198,227,168,136,
  1987. 46,163,119, 34, 56,251, 70,166, 51,207, 95, 25,252,102,169, 47,
  1988. 237,187, 1,166, 38, 56,193, 7,169, 24, 64,
  1989. 93, 29,167,249,152,200,239,162,189,212,110,237, 85,219,164,191, // 83
  1990. 215, 68, 11,205,137,187, 41, 89,107,144,168, 97,134,175,248, 57,
  1991. 172,106, 48, 26,136,199,153, 79,193, 35, 95,162,224,146,112,207,
  1992. 20, 94,178, 49, 25, 82,142, 35,240,148, 93, 59, 19, 79, 39, 94,
  1993. 253, 70,213,143,205,153, 24,219, 81,147,186,128,156, 6,230, 88,
  1994. 29, 95,116,141,232,176, 77,129,252,105,216,
  1995. 131,235,114, 89,128, 16, 81, 34, 65, 92,155, 10,194, 73, 16, 97, // 84
  1996. 146,242,178, 84, 25, 73,151,222, 27,253, 44,213, 7, 80, 33,148,
  1997. 13,216, 81,163,236, 8, 65,245,119,219,139,204, 28, 72,182, 50,
  1998. 168,244, 65,146,190,255, 59,170,108, 14,212,180,242,131,211,187,
  1999. 114, 22,177, 76, 12,100,193,116, 2,246, 33, 87,219, 51,118,202,
  2000. 162,220,194, 69, 27,106,220, 33,150, 52,174,
  2001. 205, 2, 63,196, 55,173,208,138,252, 23,221,125, 52,143,251,123, // 85
  2002. 26, 53,114,229,128,249, 2,193,123, 71,179,112,155,234,196, 94,
  2003. 240,138,191, 58,103,180, 38, 99,160, 3, 83, 47,123,238, 6,220,
  2004. 89,131, 9,222,101,123, 4,224,189, 46,137,106, 32,157, 62, 9,
  2005. 155,222, 44,245,123,232, 53,175,135,201, 59,174,106,191,150, 14,
  2006. 131, 56, 19,247,162,126, 58,191, 83,227, 39,
  2007. 73,142,164,225, 36,235,109, 50,171,100,187, 37,171,202, 61,218, // 86
  2008. 174,206, 76,164, 39,173,111, 54,157,209, 21,227, 64, 41,118,179,
  2009. 48,113, 32,230,130,212,143,224,187, 72,251,195,166, 91,153,119,
  2010. 35,212,159, 75, 36,202,155, 92,129, 71,250,162, 69,220,104,241,
  2011. 129, 86,103,149,182, 28, 74,223, 38, 92,126,233, 22, 66,250, 77,
  2012. 235,107,147, 92,209, 13,243,159, 9,122,162,
  2013. 111,255, 26,100,137, 75,153, 3,225,127, 73,244,110, 81, 1,107, // 87
  2014. 47,137, 9,221, 63,199, 87,233, 31, 96,133, 82,185,136,222, 5,
  2015. 70,213,169, 14, 75, 44, 85, 17,126, 32,144,103, 14,205, 61,253,
  2016. 186, 55,110,246,178, 65,241, 22,215, 30,201, 89, 15,193, 47,181,
  2017. 27,169,208, 5, 83,205,152,107,166,241, 13,158,208,137, 33,186,
  2018. 42,171,225, 48,186, 72,139,102,198,241, 30,
  2019. 215, 87,183,212, 11,194,243, 83,201, 53,160, 14,207,154,233,188, // 88
  2020. 159,247, 99,123,152, 21,214,139,181,243,165, 9,249, 28, 98,165,
  2021. 244,150, 96,201,252,162,193,242, 57,217,183, 53,233,130, 24,101,
  2022. 164, 21,194,134, 15,104,141, 53,181,146,103,177,234,113,147, 78,
  2023. 229, 57,115,241, 50,129,255, 9, 64,190,110, 52, 81,172, 96,117,
  2024. 213, 79, 6,121,155, 39,232, 26, 80, 56,179,
  2025. 8,136, 56,118,159, 60, 33,117,167, 21,214,138, 65, 43,129, 35, // 89
  2026. 70, 22,196, 42,243, 95,119, 8, 82, 39,112,204, 55,150,212, 76,
  2027. 123, 40, 62,141,104, 31, 71,149,105,163, 86,118, 36,177,222,142,
  2028. 69,236, 82, 58,217,166,225,122, 77,239, 1, 61,131, 37,253, 8,
  2029. 127,185, 30,143,180, 68, 96,196,136, 37,221,133,244, 3,226,151,
  2030. 29,132,200,254,101,206,118,183,223,149,103,
  2031. 167,224, 38,245, 96,216,183,139, 71,236,112, 89,181,251,104,217, // 90
  2032. 93,228,140,179, 75,162,189,236, 55,213,140, 70,177,120, 50,185,
  2033. 21,198,236, 1,187,126,212, 9,234, 26,200,248,158, 73, 46,194,
  2034. 2,125,210,154, 32, 85, 8,197, 38,114,217,156,202, 73,165,199,
  2035. 101,216, 74,232, 19,211, 40,156,237, 82,165, 20,179, 74,198, 54,
  2036. 237,176, 61, 22, 77,166, 10, 73,128, 44,205
  2037. };
  2038. CONST BYTE Cluster2x2[] = { 1, 2 };
  2039. CONST BYTE Cluster4x4[] = { 7, 1, 2, 5,
  2040. 6, 3, 4, 8 };
  2041. CONST BYTE Cluster6x6[] = { 12, 9, 6, 7, 10, 14,
  2042. 17, 5, 1, 2, 15, 18,
  2043. 11, 8, 3, 4, 13, 16 };
  2044. CONST BYTE Cluster8x8[] = { 28, 18, 14, 5, 9, 16, 19, 21,
  2045. 29, 27, 1, 2, 6, 10, 22, 32,
  2046. 30, 26, 3, 4, 7, 11, 23, 31,
  2047. 25, 20, 13, 8, 12, 15, 17, 24 };
  2048. CONST BYTE Cluster10x10[] = { 36, 28, 25, 21, 10, 11, 22, 26, 30, 38,
  2049. 45, 37, 20, 9, 1, 2, 12, 31, 42, 46,
  2050. 50, 41, 19, 8, 3, 4, 5, 40, 47, 49,
  2051. 43, 35, 18, 16, 7, 6, 13, 33, 44, 48,
  2052. 34, 27, 24, 17, 15, 14, 23, 29, 32, 39 };
  2053. CONST BYTE Cluster12x12[] = {
  2054. 50, 48, 39, 36, 32, 24, 13, 25, 33, 37, 41, 49,
  2055. 67, 59, 47, 31, 23, 12, 5, 14, 26, 42, 57, 61,
  2056. 70, 68, 53, 22, 11, 1, 2, 6, 15, 56, 62, 69,
  2057. 71, 64, 54, 21, 10, 3, 4, 7, 16, 55, 65, 72,
  2058. 63, 58, 44, 30, 20, 9, 8, 17, 27, 45, 60, 66,
  2059. 52, 43, 40, 35, 29, 19, 18, 28, 34, 38, 46, 51 };
  2060. CONST BYTE Cluster14x14[] = {
  2061. 76, 68, 58, 53, 48, 38, 23, 22, 37, 43, 47, 50, 54, 62,
  2062. 88, 82, 73, 59, 39, 24, 15, 14, 21, 36, 42, 55, 70, 78,
  2063. 94, 92, 83, 69, 25, 16, 12, 5, 13, 20, 35, 63, 79, 90,
  2064. 98, 97, 86, 74, 26, 11, 1, 2, 6, 19, 34, 75, 87, 95,
  2065. 96, 91, 81, 64, 27, 10, 3, 4, 7, 18, 33, 66, 84, 93,
  2066. 89, 80, 72, 56, 44, 28, 9, 8, 17, 32, 41, 60, 71, 85,
  2067. 77, 65, 57, 52, 49, 45, 29, 30, 31, 40, 46, 51, 61, 67 };
  2068. CONST BYTE Cluster16x16[] = {
  2069. 93, 82, 74, 67, 64, 60, 52, 33, 34, 35, 53, 61, 65, 69, 77, 94,
  2070. 110,102, 87, 73, 59, 51, 32, 24, 13, 25, 36, 54, 70, 85, 97,105,
  2071. 122,115,101, 81, 50, 31, 23, 12, 5, 14, 26, 37, 78, 98,113,117,
  2072. 127,121,109, 91, 49, 22, 11, 1, 2, 6, 15, 38, 89,106,118,125,
  2073. 128,119,107, 92, 48, 21, 10, 3, 4, 7, 16, 39, 90,111,123,126,
  2074. 120,114, 99, 79, 47, 30, 20, 9, 8, 17, 27, 40, 83,103,116,124,
  2075. 108,100, 86, 71, 58, 46, 29, 19, 18, 28, 41, 55, 75, 88,104,112,
  2076. 95, 80, 72, 66, 63, 57, 45, 44, 43, 42, 56, 62, 68, 76, 84, 96 };
  2077. #define REAL_PAT_CX(x) ((x) + ((PAT_CX_ADD / (x)) * (x)))
  2078. #define FINAL_PAT_CX(x) (REAL_PAT_CX(x) + PAT_CX_ADD)
  2079. #define PAT_DATA(x,y,p) (x), (y), sizeof(p), (p)
  2080. CONST STDHTPAT DefStdHTPat[HTPAT_SIZE_MAX_INDEX / 2] = {
  2081. { PAT_DATA( 2, 2, Cluster2x2) },
  2082. { PAT_DATA( 4, 4, Cluster4x4) },
  2083. { PAT_DATA( 6, 6, Cluster6x6) },
  2084. { PAT_DATA( 8, 8, Cluster8x8) },
  2085. { PAT_DATA( 10, 10, Cluster10x10) },
  2086. { PAT_DATA( 12, 12, Cluster12x12) },
  2087. { PAT_DATA( 14, 14, Cluster14x14) },
  2088. { PAT_DATA( 16, 16, Cluster16x16) },
  2089. { PAT_DATA(HTSC_M_CX, HTSC_M_CY, HTSC_SUPERCELL_M) }
  2090. };
  2091. const MONOPATRATIO MonoPatRatio[] = {
  2092. { 2680, 2589 }, // 15 degree
  2093. { 5774, 5000 }, // 30 degree
  2094. { 10000, 7071 }, // 45 degree
  2095. { 17321, 8660 }, // 60 degree
  2096. { 37321, 9659 } // 75 degree
  2097. };
  2098. #if DBG
  2099. VOID
  2100. DbgShowThresholds(
  2101. LPBYTE pTitle,
  2102. LPWORD pwPat,
  2103. UINT cx,
  2104. UINT cy
  2105. )
  2106. /*++
  2107. Routine Description:
  2108. This is a debug functions which show all the HTCELL Infomation
  2109. Arguments:
  2110. pHTCell - HTCELL to be displayed
  2111. Return Value:
  2112. VOID
  2113. Author:
  2114. 01-Feb-1995 Wed 14:24:45 created -by- Daniel Chou (danielc)
  2115. Revision History:
  2116. --*/
  2117. {
  2118. //
  2119. // Output some information
  2120. //
  2121. DBGP_IF(DBGP_SHOW_HTCELL,
  2122. {
  2123. LPBYTE pbBuf;
  2124. BYTE Buf[1024];
  2125. UINT xLoop;
  2126. UINT yLoop;
  2127. UINT cData;
  2128. UINT cRow;
  2129. DBGP("\n*** %hs ****\n\n%ldx%ld=%ld\n\n"
  2130. ARGPTR(pTitle)
  2131. ARGDW(cx) ARGDW(cy)
  2132. ARGDW(cx * cy));
  2133. yLoop = (UINT)cy;
  2134. while (yLoop--) {
  2135. xLoop = (UINT)cx;
  2136. pbBuf = Buf;
  2137. cData = 0;
  2138. cRow = 0;
  2139. while (xLoop--) {
  2140. pbBuf += sprintf(pbBuf, "%04lx:%04lx:%04lx ",
  2141. (DWORD)pwPat[0],
  2142. (DWORD)pwPat[1],
  2143. (DWORD)pwPat[2]);
  2144. pwPat += 3;
  2145. if ((pbBuf >= &Buf[250]) || (xLoop == 0)) {
  2146. DBGP(Buf);
  2147. pbBuf = Buf;
  2148. cData = 0;
  2149. ++cRow;
  2150. }
  2151. }
  2152. if (cRow > 1) {
  2153. DBGP("");
  2154. }
  2155. }
  2156. }
  2157. )
  2158. }
  2159. #endif
  2160. VOID
  2161. HTENTRY
  2162. RotateHTPatXY(
  2163. LPWORD pPatSrc,
  2164. LPWORD pPatDst,
  2165. UINT cx,
  2166. UINT cy,
  2167. UINT cyNext,
  2168. UINT x,
  2169. UINT y
  2170. )
  2171. /*++
  2172. Routine Description:
  2173. Arguments:
  2174. Return Value:
  2175. Author:
  2176. 19-May-1998 Tue 18:45:03 created -by- Daniel Chou (danielc)
  2177. Revision History:
  2178. --*/
  2179. {
  2180. LPWORD pwS;
  2181. LPWORD pwD;
  2182. UINT cbCX;
  2183. UINT cCX;
  2184. UINT cCY;
  2185. cCY = cy;
  2186. (LPBYTE)pPatSrc += ((y * cyNext) + x) * SIZE_PER_PAT;
  2187. cyNext *= SIZE_PER_PAT;
  2188. cbCX = cx * SIZE_PER_PAT;
  2189. DBGP_IF(DBGP_SHOW_HTCELL,
  2190. DBGP("RotatePatXY: %p --> %p, %ld x %ld, Offset=(%ld, %ld)"
  2191. ARGPTR(pPatSrc) ARGPTR(pPatDst) ARGDW(cx) ARGDW(cy)
  2192. ARGDW(x) ARGDW(y)));
  2193. while (cCY--) {
  2194. pwS = pPatSrc;
  2195. (LPBYTE)pPatSrc += cyNext;
  2196. pwD = pPatDst;
  2197. (LPBYTE)pPatDst += cyNext;
  2198. cCX = cx - x;
  2199. while (cCX--) {
  2200. *pwD = *pwS;
  2201. pwS += COUNT_PER_PAT;
  2202. pwD += COUNT_PER_PAT;
  2203. }
  2204. (LPBYTE)pwS -= cbCX;
  2205. cCX = x;
  2206. while (cCX--) {
  2207. *pwD = *pwS;
  2208. pwS += COUNT_PER_PAT;
  2209. pwD += COUNT_PER_PAT;
  2210. }
  2211. if (++y == cy) {
  2212. y = 0;
  2213. (LPBYTE)pPatSrc -= (cy * cyNext);
  2214. }
  2215. }
  2216. }
  2217. VOID
  2218. HTENTRY
  2219. RotateHTPat45(
  2220. LPBYTE pPatSrc,
  2221. LPWORD pPatDst,
  2222. UINT cx,
  2223. UINT cy,
  2224. UINT cMax,
  2225. UINT cyNext,
  2226. BOOL SplitThreshold
  2227. )
  2228. /*++
  2229. Routine Description:
  2230. This function rotate the pattern 45 degree by copy first top half
  2231. and exchange left/right
  2232. Arguments:
  2233. pHTCell - Pointer to the cell to be rotated
  2234. Return Value:
  2235. VOID
  2236. Author:
  2237. 07-Mar-1995 Tue 17:45:09 created -by- Daniel Chou (danielc)
  2238. Revision History:
  2239. --*/
  2240. {
  2241. LPWORD pPatDst1;
  2242. LPWORD pPatDst2;
  2243. UINT xLoop;
  2244. UINT yLoop;
  2245. UINT cxHalf;
  2246. UINT cAdd;
  2247. UINT PatSrc;
  2248. UINT cbCX;
  2249. UINT cbDst2Off;
  2250. WORD wPat;
  2251. ASSERT((cx & 0x01) == 0);
  2252. ASSERT((cy & 0x01) == 0);
  2253. cAdd = cMax;
  2254. cMax <<= 1;
  2255. yLoop = (UINT)(cy >> 1);
  2256. cxHalf = (UINT)(cx >> 1);
  2257. cbDst2Off = (((yLoop * cyNext) + cxHalf) * SIZE_PER_PAT);
  2258. cyNext *= SIZE_PER_PAT;
  2259. cbCX = cx * SIZE_PER_PAT;
  2260. while (yLoop--) {
  2261. //
  2262. // for each scan line, we need to swap first half of the bytes
  2263. // with second half of the bytes, this will make the halftone
  2264. // pattern as 45 degree angle.
  2265. //
  2266. pPatDst1 = pPatDst;
  2267. pPatDst2 = (LPWORD)((LPBYTE)pPatDst1 + cbDst2Off);
  2268. (LPBYTE)pPatDst += cyNext;
  2269. xLoop = cx;
  2270. while (xLoop--) {
  2271. //
  2272. // Make range from 1 to MAX_PAT_IDX
  2273. //
  2274. PatSrc = (UINT)((((UINT)*pPatSrc++ << 1) * MAX_BGR_IDX) + cAdd);
  2275. *pPatDst1 =
  2276. wPat = (WORD)(PatSrc / cMax);
  2277. *pPatDst2 = (WORD)((SplitThreshold) ?
  2278. ((PatSrc - MAX_BGR_IDX) / cMax) : wPat);
  2279. pPatDst1 += COUNT_PER_PAT;
  2280. pPatDst2 += COUNT_PER_PAT;
  2281. if (xLoop == cxHalf) {
  2282. (LPBYTE)pPatDst2 -= cbCX;
  2283. }
  2284. }
  2285. }
  2286. }
  2287. VOID
  2288. HTENTRY
  2289. ExpandHTPatX(
  2290. LPWORD pwSrc,
  2291. UINT cx,
  2292. UINT cy,
  2293. UINT cxExp
  2294. )
  2295. /*++
  2296. Routine Description:
  2297. Arguments:
  2298. Return Value:
  2299. Author:
  2300. 25-Nov-1998 Wed 11:06:43 created -by- Daniel Chou (danielc)
  2301. Revision History:
  2302. --*/
  2303. {
  2304. cx *= SIZE_PER_PAT;
  2305. cxExp *= SIZE_PER_PAT;
  2306. if (cxExp > cx) {
  2307. while (cy--) {
  2308. LPWORD pwD;
  2309. UINT cbCopy;
  2310. UINT cbRem;
  2311. pwD = (LPWORD)((LPBYTE)pwSrc + cx);
  2312. cbRem = cxExp - cx;
  2313. cbCopy = 0;
  2314. while (cbRem -= cbCopy) {
  2315. cbCopy = (cbRem > cx) ? cx : cbRem;
  2316. CopyMemory(pwD, pwSrc, cbCopy);
  2317. (LPBYTE)pwD += cbCopy;
  2318. }
  2319. (LPBYTE)pwSrc += cxExp;
  2320. }
  2321. }
  2322. }
  2323. INT
  2324. __cdecl
  2325. SCDataCompare(
  2326. const void *pA,
  2327. const void *pB
  2328. )
  2329. {
  2330. return((INT)(((PSCDATA)pA)->Value) - (INT)(((PSCDATA)pB)->Value));
  2331. }
  2332. BOOL
  2333. GenerateWORDPat(
  2334. LPBYTE pPatR,
  2335. LPBYTE pPatG,
  2336. LPBYTE pPatB,
  2337. LPWORD pwDst,
  2338. UINT cxReal,
  2339. UINT cx,
  2340. UINT cy
  2341. )
  2342. /*++
  2343. Routine Description:
  2344. Arguments:
  2345. Return Value:
  2346. Author:
  2347. 27-Aug-1998 Thu 17:17:13 created -by- Daniel Chou (danielc)
  2348. Revision History:
  2349. --*/
  2350. {
  2351. LPBYTE ppSrc[3];
  2352. LPBYTE pbAlloc;
  2353. LPWORD pw;
  2354. UINT cxAdd;
  2355. DWORD Count;
  2356. ppSrc[0] = pPatB;
  2357. ppSrc[1] = pPatG;
  2358. ppSrc[2] = pPatR;
  2359. //
  2360. // Since the cx is add one to the real cx so sub on now
  2361. //
  2362. cxAdd = cx - cxReal;
  2363. Count = cxReal * cy;
  2364. if (pbAlloc = (LPBYTE)HTAllocMem(NULL,
  2365. HTMEM_pSCData,
  2366. LPTR,
  2367. Count * sizeof(SCDATA))) {
  2368. PSCDATA pSC;
  2369. LPBYTE pb;
  2370. UINT iPat;
  2371. UINT jPat;
  2372. DWORD i;
  2373. DWORD j;
  2374. UINT x;
  2375. UINT y;
  2376. WORD Idx;
  2377. DWORD MaxV;
  2378. DWORD VAdd;
  2379. BYTE PreV;
  2380. for (iPat = 0; iPat < 3; iPat++) {
  2381. pSC = (PSCDATA)pbAlloc;
  2382. i = iPat;
  2383. pb = ppSrc[iPat];
  2384. y = cy;
  2385. while (y--) {
  2386. x = cxReal;
  2387. while (x--) {
  2388. (pSC )->Value = *pb++;
  2389. (pSC++)->Index = (WORD)i;
  2390. i += COUNT_PER_PAT;
  2391. }
  2392. i += (COUNT_PER_PAT * cxAdd);
  2393. }
  2394. pSC = (PSCDATA)pbAlloc;
  2395. qsort((LPVOID)pSC, Count, sizeof(SCDATA), SCDataCompare);
  2396. Idx = 0;
  2397. MaxV = (DWORD)pSC[Count - 1].Value;
  2398. VAdd = MaxV >> 1;
  2399. PreV = 0;
  2400. i = Count;
  2401. while (i--) {
  2402. if (pSC->Value != PreV) {
  2403. PreV = pSC->Value;
  2404. Idx = (WORD)((((DWORD)PreV * MAX_BGR_IDX) + VAdd) / MaxV);
  2405. }
  2406. pwDst[(pSC++)->Index] = Idx;
  2407. }
  2408. ASSERT(Idx == MAX_BGR_IDX);
  2409. }
  2410. //
  2411. // Now copy the last one from the first pixel
  2412. //
  2413. ExpandHTPatX(pwDst, cxReal, cy, cx);
  2414. HTFreeMem(pbAlloc);
  2415. return(TRUE);
  2416. }
  2417. return(FALSE);
  2418. }
  2419. BOOL
  2420. Generate_HTSC_WORD(
  2421. PHTCELL pHTCell
  2422. )
  2423. /*++
  2424. Routine Description:
  2425. Arguments:
  2426. Return Value:
  2427. Author:
  2428. 27-Aug-1998 Thu 17:17:13 created -by- Daniel Chou (danielc)
  2429. Revision History:
  2430. --*/
  2431. {
  2432. LPWORD pwPat;
  2433. LPBYTE pbC;
  2434. LPBYTE pbM;
  2435. LPBYTE pbY;
  2436. PSTDHTPAT pStdHTPat;
  2437. DWORD dw;
  2438. HTCELL HTCell;
  2439. UINT RotX;
  2440. UINT RotY;
  2441. if (pHTCell->HTPatIdx >= HTPAT_SIZE_USER) {
  2442. ASSERT(pHTCell->HTPatIdx < HTPAT_SIZE_USER);
  2443. return(FALSE);
  2444. }
  2445. ACQUIRE_HTMUTEX(HTGlobal.HTMutexCDCI);
  2446. if (!(pHTCell->pThresholds = (LPBYTE)ppwHTPat[pHTCell->HTPatIdx])) {
  2447. HTCell = *pHTCell;
  2448. if ((dw = (DWORD)HTCell.HTPatIdx) > 9) {
  2449. dw += 'A' - '9' - 1;
  2450. }
  2451. dw = (dw << 24) + HTMEM_pHTPat;
  2452. pStdHTPat = (PSTDHTPAT)&DefStdHTPat[HTCell.HTPatIdx >> 1];
  2453. pbC = (LPBYTE)pStdHTPat->pbSrcPat;
  2454. DBGP_IF(DBGP_GEN_PAT,
  2455. DBGP("Allocating %ld bytes for HTPatIdx=%ld, %ldx%ld, cxOrg=%ld, cxReal=%ld"
  2456. ARGDW(HTCell.Size)
  2457. ARGDW(HTCell.HTPatIdx)
  2458. ARGDW(HTCell.Width) ARGDW(HTCell.Height)
  2459. ARGDW(HTCell.cxOrg) ARGDW(HTCell.cxReal)));
  2460. if (pwPat = (LPWORD)HTAllocMem(NULL, dw, LPTR, HTCell.Size)) {
  2461. if (HTCell.HTPatIdx <= HTPAT_SIZE_16x16_M) {
  2462. //
  2463. // The first pattern to make is M/G, the second C/R and third is Y/B
  2464. // and the pattern order in the pattern is BGR or YMC
  2465. // so we need to make in offset of 1, 2, 0
  2466. //
  2467. dw = (DWORD)HTCell.cxOrg;
  2468. ASSERT((dw * (HTCell.Height/2)) == (DWORD)pStdHTPat->cbSrcPat);
  2469. RotateHTPat45(pbC,
  2470. pwPat + 1,
  2471. (UINT)dw,
  2472. (UINT)HTCell.Height,
  2473. (UINT)pStdHTPat->cbSrcPat,
  2474. (UINT)HTCell.Width,
  2475. TRUE);
  2476. #if DBG
  2477. DbgShowThresholds("RotateHTPat45",
  2478. pwPat,
  2479. HTCell.Width,
  2480. HTCell.Height);
  2481. #endif
  2482. RotX = (UINT)((HTCell.HTPatIdx & 0x01) ? (dw >> 1) : 0);
  2483. RotY = 0;
  2484. RotateHTPatXY((LPWORD)pwPat + 1,
  2485. (LPWORD)pwPat + 2,
  2486. (UINT)dw,
  2487. (UINT)HTCell.Height,
  2488. (UINT)HTCell.Width,
  2489. RotX,
  2490. RotY);
  2491. #if DBG
  2492. DbgShowThresholds("RotateHTPatXY 1",
  2493. pwPat,
  2494. HTCell.Width,
  2495. HTCell.Height);
  2496. #endif
  2497. if (HTCell.HTPatIdx & 0x01) {
  2498. RotX = (UINT)(dw >> 2);
  2499. RotY = (UINT)(HTCell.Height >> 2);
  2500. } else {
  2501. RotX =
  2502. RotY = 0;
  2503. }
  2504. RotateHTPatXY((LPWORD)pwPat + 1,
  2505. (LPWORD)pwPat + 0,
  2506. (UINT)dw,
  2507. (UINT)HTCell.Height,
  2508. (UINT)HTCell.Width,
  2509. RotX,
  2510. RotY);
  2511. #if DBG
  2512. DbgShowThresholds("RotateHTPatXY 2",
  2513. pwPat,
  2514. HTCell.Width,
  2515. HTCell.Height);
  2516. #endif
  2517. ExpandHTPatX(pwPat,
  2518. (UINT)dw,
  2519. (UINT)HTCell.Height,
  2520. (UINT)HTCell.Width);
  2521. #if DBG
  2522. DbgShowThresholds("ExpandHTPatX",
  2523. pwPat,
  2524. HTCell.Width,
  2525. HTCell.Height);
  2526. #endif
  2527. } else {
  2528. if (HTCell.HTPatIdx == HTPAT_SIZE_SUPERCELL) {
  2529. pbC =
  2530. pbM =
  2531. pbY = (LPBYTE)pbC + HTSC_M_OFFSET_M;
  2532. } else {
  2533. pbY = (LPBYTE)pbC + HTSC_M_OFFSET_Y;
  2534. pbM = (LPBYTE)pbC + HTSC_M_OFFSET_M;
  2535. pbC = (LPBYTE)pbC + HTSC_M_OFFSET_C;
  2536. }
  2537. ASSERT(HTCell.cxReal == HTCell.cxOrg);
  2538. if (!(GenerateWORDPat(pbC,
  2539. pbM,
  2540. pbY,
  2541. pwPat,
  2542. HTCell.cxOrg,
  2543. HTCell.Width,
  2544. HTCell.Height))) {
  2545. HTFreeMem(pwPat);
  2546. pwPat = NULL;
  2547. }
  2548. }
  2549. }
  2550. ppwHTPat[HTCell.HTPatIdx] = pwPat;
  2551. pHTCell->pThresholds = (LPBYTE)pwPat;
  2552. }
  2553. RELEASE_HTMUTEX(HTGlobal.HTMutexCDCI);
  2554. return((pHTCell->pThresholds) ? TRUE : FALSE);
  2555. }
  2556. LONG
  2557. HTENTRY
  2558. ComputeHTCell(
  2559. WORD HTPatternIndex,
  2560. PHALFTONEPATTERN pHalftonePattern,
  2561. PDEVICECOLORINFO pDCI
  2562. )
  2563. /*++
  2564. Routine Description:
  2565. This function creates the halftone threshold pattern and places them in
  2566. to supplied buffer.
  2567. Arguments:
  2568. HTPatternIndex - index to the internal halftone pattern, if this
  2569. number is not 0xffff.
  2570. pHalftonePattern - pointer to user's halftone pattern
  2571. pDCI - pointer to the DEVICECOLORINFO data structure. This
  2572. structure describes the required halftone pattern.
  2573. Return Value:
  2574. The return value is the size of the pattern copied or a zero
  2575. to indicate failure.
  2576. Author:
  2577. 21-Jan-1991 Mon 12:47:48 created -by- Daniel Chou (danielc)
  2578. 30-Mar-1995 Thu 13:56:45 updated -by- Daniel Chou (danielc)
  2579. Adding new brush regression
  2580. 22-Oct-1997 Wed 20:01:53 updated -by- Daniel Chou (danielc)
  2581. Remove Regression but using computation in the HTMapClr.c
  2582. Revision History:
  2583. --*/
  2584. {
  2585. LPBYTE pPatSrc;
  2586. LPBYTE pPatABC[3];
  2587. PATINFO PatInfo;
  2588. DWORD Checksum;
  2589. DWORD cbPat;
  2590. DWORD dw;
  2591. DWORD DCIFlags;
  2592. ZeroMemory(&PatInfo, sizeof(PATINFO));
  2593. if (HTPatternIndex > HTPAT_SIZE_MAX_INDEX) {
  2594. return(HTERR_INVALID_HTPATTERN_INDEX);
  2595. }
  2596. PatInfo.HTCell.HTPatIdx = (BYTE)HTPatternIndex;
  2597. //
  2598. // Setup basic PatInfo information
  2599. //
  2600. if (pDCI) {
  2601. DCIFlags = pDCI->Flags & ~(DCIF_CLUSTER_HTCELL |
  2602. DCIF_SUPERCELL |
  2603. DCIF_SUPERCELL_M);
  2604. }
  2605. if (HTPatternIndex == HTPAT_SIZE_USER) {
  2606. if ((!pHalftonePattern) ||
  2607. (pHalftonePattern->cbSize != sizeof(HALFTONEPATTERN))) {
  2608. return(HTERR_INVALID_HALFTONE_PATTERN);
  2609. }
  2610. pPatABC[0] = pHalftonePattern->pHTPatA;
  2611. pPatABC[1] = pHalftonePattern->pHTPatB;
  2612. pPatABC[2] = pHalftonePattern->pHTPatC;
  2613. PatInfo.HTCell.cxOrg = (WORD)pHalftonePattern->Width;
  2614. PatInfo.HTCell.Height = (WORD)pHalftonePattern->Height;
  2615. cbPat = (DWORD)PatInfo.HTCell.cxOrg *
  2616. (DWORD)PatInfo.HTCell.Height;
  2617. if (!(pPatSrc = pPatABC[0])) {
  2618. if (!(pPatSrc = pPatABC[1])) {
  2619. if (!(pPatSrc = pPatABC[2])) {
  2620. return(HTERR_INVALID_HALFTONE_PATTERN);
  2621. }
  2622. }
  2623. }
  2624. if ((!pPatABC[0]) || (!pPatABC[1]) || (!pPatABC[2])) {
  2625. pPatABC[0] =
  2626. pPatABC[1] =
  2627. pPatABC[2] = pPatSrc;
  2628. dw = (DWORD)'Usr1';
  2629. } else {
  2630. if ((pPatABC[0] == pPatABC[1]) && (pPatABC[0] == pPatABC[2])) {
  2631. dw = (DWORD)'Usr2';
  2632. } else {
  2633. dw = (DWORD)'Usr3';
  2634. }
  2635. if (!pPatABC[0]) {
  2636. pPatABC[0] = pPatSrc;
  2637. }
  2638. if (!pPatABC[1]) {
  2639. pPatABC[1] = pPatSrc;
  2640. }
  2641. if (!pPatABC[2]) {
  2642. pPatABC[2] = pPatSrc;
  2643. }
  2644. }
  2645. Checksum = ComputeChecksum((LPBYTE)&HTPatternIndex,
  2646. dw,
  2647. sizeof(HTPatternIndex));
  2648. Checksum = ComputeChecksum((LPBYTE)pPatSrc, Checksum, cbPat);
  2649. if (dw == (DWORD)'Usr3') {
  2650. Checksum = ComputeChecksum((LPBYTE)pPatABC[1], Checksum, cbPat);
  2651. Checksum = ComputeChecksum((LPBYTE)pPatABC[2], Checksum, cbPat);
  2652. }
  2653. } else {
  2654. Checksum = ComputeChecksum((LPBYTE)&HTPatternIndex,
  2655. 'HTSC',
  2656. sizeof(HTPatternIndex));
  2657. if (HTPatternIndex == HTPAT_SIZE_SUPERCELL) {
  2658. DCIFlags |= DCIF_SUPERCELL;
  2659. } else if (HTPatternIndex == HTPAT_SIZE_SUPERCELL_M) {
  2660. DCIFlags |= DCIF_SUPERCELL_M;
  2661. }
  2662. HTPatternIndex >>= 1;
  2663. PatInfo.HTCell.cxOrg = (WORD)DefStdHTPat[HTPatternIndex].cx;
  2664. PatInfo.HTCell.Height = (WORD)DefStdHTPat[HTPatternIndex].cy;
  2665. PatInfo.HTCell.Flags = HTCF_STATIC_PTHRESHOLDS;
  2666. }
  2667. PatInfo.HTCell.cxReal = (WORD)REAL_PAT_CX(PatInfo.HTCell.cxOrg);
  2668. PatInfo.HTCell.Width = (WORD)FINAL_PAT_CX(PatInfo.HTCell.cxOrg);
  2669. PatInfo.HTCell.Size = (DWORD)PatInfo.HTCell.Width *
  2670. (DWORD)PatInfo.HTCell.Height * SIZE_PER_PAT;
  2671. DBGP_IF((DBGP_CACHE_PAT | DBGP_GEN_PAT),
  2672. DBGP("HTCell(%3ldx%3ld): pDCI=%p, Idx=%2ld, cxOrg=%3ld, cxReal=%3ld, Size=%ld"
  2673. ARGDW(PatInfo.HTCell.Width) ARGDW(PatInfo.HTCell.Height)
  2674. ARGPTR(pDCI) ARGDW(PatInfo.HTCell.HTPatIdx)
  2675. ARGDW(PatInfo.HTCell.cxOrg) ARGDW(PatInfo.HTCell.cxReal)
  2676. ARGDW(PatInfo.HTCell.Size)));
  2677. ASSERT(PatInfo.HTCell.cxReal > PAT_CX_ADD);
  2678. //
  2679. // Add width by one because we want to be able to do two pixel at end, and
  2680. // pattern always in 3 plane mode
  2681. //
  2682. if (!pDCI) {
  2683. //
  2684. // Return checksum if pDCI passed is NULL
  2685. //
  2686. return(ComputeChecksum((LPBYTE)&PatInfo, Checksum, sizeof(PATINFO)));
  2687. }
  2688. //
  2689. // Allocate the memory for the pattern buffer which we will stored the
  2690. // final halftone pattern for this device.
  2691. //
  2692. if (PatInfo.HTCell.Flags & HTCF_STATIC_PTHRESHOLDS) {
  2693. PatInfo.HTCell.pThresholds = NULL;
  2694. } else {
  2695. if (!(PatInfo.HTCell.pThresholds =
  2696. (LPBYTE)HTAllocMem(pDCI,
  2697. HTMEM_pThresholds,
  2698. NONZEROLPTR,
  2699. PatInfo.HTCell.Size))) {
  2700. return(HTERR_INSUFFICIENT_MEMORY);
  2701. }
  2702. if (!(GenerateWORDPat(pPatABC[0],
  2703. pPatABC[1],
  2704. pPatABC[2],
  2705. (LPWORD)PatInfo.HTCell.pThresholds,
  2706. (UINT)PatInfo.HTCell.cxOrg,
  2707. (UINT)PatInfo.HTCell.Width,
  2708. (UINT)PatInfo.HTCell.Height))) {
  2709. HTFreeMem(PatInfo.HTCell.pThresholds);
  2710. return(HTERR_INSUFFICIENT_MEMORY);
  2711. }
  2712. }
  2713. pDCI->Flags = DCIFlags;
  2714. pDCI->HTCell = PatInfo.HTCell;
  2715. return(PatInfo.HTCell.Size);
  2716. }
  2717. VOID
  2718. HTENTRY
  2719. DrawCornerLine(
  2720. LPBYTE pPattern,
  2721. WORD cxPels,
  2722. WORD cyPels,
  2723. WORD BytesPerScanLine,
  2724. WORD LineWidthPels,
  2725. BOOL FlipY
  2726. )
  2727. /*++
  2728. Routine Description:
  2729. This function draw a line from lower left corner to the upper right
  2730. corner, to draw a line from upper left corner to the lower right corner
  2731. just set the FlipY to true.
  2732. This is the modified integer DDA algorithm which the line always symmetry,
  2733. it make the line look less starsteps, if need to draw line from specified
  2734. (x1, y1) to (x2, y2) then this function can be modified whih only changed
  2735. to the startingt/end points for calculating the ErrorInc/ErrorDec/Error
  2736. and Length parameters.
  2737. Origin X, Y - at first pel of last scan line and the X moving to
  2738. the right and Y moving to the top.
  2739. Color - only black/white where white=0, and black=1
  2740. Arguments:
  2741. pPattern - The pointer to the buffer, it must already initialize
  2742. to all zero and must have the size in bytes of
  2743. BytesPerScanLine * cyPels
  2744. cxPels - The width in pels of the visible area in the pattern.
  2745. cyPels - The height of the pattern buffer in scan line.
  2746. BytesPerScanLine - Total bytes of one scan line.
  2747. LineWidthPels - The line width in pels which will be draw into the
  2748. pattern buffer, (pen width).
  2749. FlipY - If true then the final pattern will be up-side-down
  2750. Return Value:
  2751. No return value
  2752. Author:
  2753. 24-May-1991 Fri 22:30:43 created -by- Daniel Chou (danielc)
  2754. Revision History:
  2755. 20-Sep-1991 Fri 18:14:28 updated -by- Daniel Chou (danielc)
  2756. Updated so it only using interger operation only (fast) and plus
  2757. modified DDA so it will symmetric for better line constant brightness,
  2758. the parameters for this call is reduced by assuming that the line
  2759. is always drawing from corner to corner only.
  2760. --*/
  2761. {
  2762. LPBYTE pCurPat;
  2763. INT NextScanLine;
  2764. INT x;
  2765. INT y;
  2766. INT xLast;
  2767. INT yLast;
  2768. INT MinPels;
  2769. INT TotalPels;
  2770. INT xyInc[2];
  2771. INT Error;
  2772. INT ErrorInc;
  2773. INT ErrorDec;
  2774. INT Length;
  2775. BYTE DestMask;
  2776. BYTE DestByte;
  2777. ASSERT((LineWidthPels) && (LineWidthPels <= cxPels));
  2778. if (!LineWidthPels) {
  2779. return;
  2780. }
  2781. if ((cxPels == 1) || (cyPels == 1) || (LineWidthPels >= cxPels)) {
  2782. FillMemory(pPattern, BytesPerScanLine * cyPels, 0xff);
  2783. return;
  2784. }
  2785. if (FlipY) {
  2786. //
  2787. // Flip the Y, draw from top/left, it located at first line
  2788. //
  2789. NextScanLine = (INT)BytesPerScanLine;
  2790. } else {
  2791. //
  2792. // no Y flip so we have to draw from the lower left corner, and its
  2793. // buffer location is at last scan line
  2794. //
  2795. pPattern += ((LONG)BytesPerScanLine * (LONG)(cyPels - 1));
  2796. NextScanLine = -(INT)BytesPerScanLine;
  2797. }
  2798. //
  2799. // Calculate the X/Y increment and initial error values, remember we must
  2800. // always truncate the XInc/YInc values. how this works is that we keep a
  2801. // fixed floating point version of the error terms (15-bit fixed point
  2802. // value, one unit of fixed value is 0.000031) and has bit 15 (ie. 0x8000)
  2803. // as the overrun indicator, if after the X/Y increment and this bit is
  2804. // set then X/Y will need to increment by 1.
  2805. //
  2806. // At first we initialize the X/Y error terms to the half of the slope
  2807. // different, this way the DDA lines will be balanced distributed
  2808. // for the pels in the line resulting better constant line brightness and
  2809. // less stairsteps than the round up type of error term for reqular DDA.
  2810. //
  2811. // For drawing from starting points (x1, x2) to (x2, y2) (ie. point at
  2812. // (x2, y2) is exclusive) then using following changes
  2813. //
  2814. // xLast = x = x1;
  2815. // yLast = y = y1;
  2816. //
  2817. // change 'cxPels' to '(x2 - x1)' when calcaulate Inc/Dec/Error terms
  2818. // change 'cyPels' to '(y2 - y1)' when calcaulate Inc/Dec/Error terms
  2819. //
  2820. if (cxPels >= cyPels) {
  2821. xyInc[0] = 1;
  2822. xyInc[1] = 0;
  2823. ErrorDec = (INT)cxPels;
  2824. ErrorInc = (INT)cyPels;
  2825. } else {
  2826. xyInc[0] = 0;
  2827. xyInc[1] = 1;
  2828. ErrorDec = (INT)cyPels;
  2829. ErrorInc = (INT)cxPels;
  2830. }
  2831. Length = ErrorDec; // DeltaX = total run (larger one)
  2832. ErrorDec += ErrorDec; // Delta2X
  2833. Error = ErrorInc - ErrorDec; // DeltaY - Delta2X (initlal negative)
  2834. ErrorInc += ErrorInc; // Delta2Y
  2835. MinPels = (INT)LineWidthPels - 1;
  2836. if (cxPels > cyPels) {
  2837. if ((MinPels -= (INT)(cxPels / cyPels)) < 0) {
  2838. MinPels = 0;
  2839. }
  2840. }
  2841. TotalPels = MinPels;
  2842. xLast =
  2843. yLast =
  2844. x =
  2845. y = 0;
  2846. DBGP_IF(DBGP_DRAWLINE,
  2847. DBGP("[%3u:%3u]: pPat=%p, Err=%d, Inc=%d, Dec=%d, Pels=%d)"
  2848. ARGW(cxPels)
  2849. ARGW(cyPels)
  2850. ARG(pPattern)
  2851. ARGS(Error)
  2852. ARGS(ErrorInc)
  2853. ARGS(ErrorDec)
  2854. ARGW(LineWidthPels)));
  2855. //
  2856. // The single pel version of modified integer DDA for all octants is as
  2857. // following:
  2858. // ;
  2859. // while (Length--) { ; do until all DeltaX finished
  2860. // ;
  2861. // PlotPoint(x, y); ; Ploting point at (x,y)
  2862. // ;
  2863. // x += xyInc[0]; ; Increment either x or y by one
  2864. // y += xyInc[1]; ; unit depends on which octant.
  2865. // ;
  2866. // if ((Error += ErrorInc) >= 0) { ; adding error terms for shorter
  2867. // ; axis, integer sign operation.
  2868. // x += xyInc[1]; ; adding either x or y by one if
  2869. // y += xyInc[0]; ; 'pel' is closer to the slop.
  2870. // Error -= ErrorDec; ; reset the error term
  2871. // } ;
  2872. // }
  2873. //
  2874. while (Length--) { // do all the DeltaX pels
  2875. ++TotalPels;
  2876. x += xyInc[0]; // x=running number 0-up
  2877. y += xyInc[1]; // y only need 0/1
  2878. if ((Error += ErrorInc) >= 0) {
  2879. x += xyInc[1];
  2880. y += xyInc[0];
  2881. Error -= ErrorDec;
  2882. }
  2883. if (y != yLast) {
  2884. ASSERT(y <= (INT)cyPels);
  2885. DestMask = (BYTE)(0x80 >> (xLast & 0x07)); // starting mask
  2886. pCurPat = pPattern + (xLast >> 3); // byte start
  2887. DestByte = (BYTE)0x00; // start w/0
  2888. DBGP_IF(DBGP_DRAWLINE,
  2889. DBGP("3u: Plot(%3d, %3d) %3d Pels, Next(x,y)=(%3d,%3d), Error=%d"
  2890. ARGS(Length)
  2891. ARGS(xLast)
  2892. ARGS(yLast)
  2893. ARGS(TotalPels)
  2894. ARGW(x)
  2895. ARGW(y)
  2896. ARGS(Error)));
  2897. while (TotalPels--) {
  2898. DestByte |= DestMask;
  2899. if (++xLast >= (INT)cxPels) {
  2900. //
  2901. // If we wrap around, we have get the old data byte back
  2902. // since first byte may already has some on bits.
  2903. //
  2904. *pCurPat = DestByte;
  2905. DestByte = *(pCurPat = pPattern);
  2906. DestMask = (BYTE)0x80;
  2907. xLast = 0;
  2908. } else if (!(DestMask >>= 1)) {
  2909. *pCurPat++ = DestByte;
  2910. DestMask = 0x80;
  2911. DestByte = 0x00;
  2912. }
  2913. }
  2914. //
  2915. // Since we using DestByte as temparory data area, we need to make
  2916. // sure that last modified data byte is saved back to the buffer,
  2917. // to do that we only need to check if Mask=0x80, because if the
  2918. // mask is equal to 0x80 then we just saved the byte, otherwise
  2919. // we are in middle of the byte processing, we could do this by
  2920. // extra checking for (TotalPels == 0) but this should check
  2921. // at outside of the (DestMask >>= 1) loop to reduced the overhead.
  2922. //
  2923. if (DestMask != (BYTE)0x80) {
  2924. *pCurPat = DestByte; // last one if any
  2925. }
  2926. pPattern += NextScanLine; // next scan line start
  2927. xLast = x; // remember this one
  2928. yLast = y; // reset y
  2929. TotalPels = MinPels;
  2930. }
  2931. }
  2932. ASSERT(y == (INT)cyPels);
  2933. }
  2934. LONG
  2935. HTENTRY
  2936. CreateStandardMonoPattern(
  2937. PDEVICECOLORINFO pDeviceColorInfo,
  2938. PSTDMONOPATTERN pStdMonoPat
  2939. )
  2940. /*++
  2941. Routine Description:
  2942. This function create standard pre-defined monochrome pattern to a
  2943. 1 bit per pel bitmap, alignment of each bitmap scan line to the
  2944. specified
  2945. Arguments:
  2946. pDeviceColorInfo - Pointer to the DEVICECOLORINFO data structure, this
  2947. is used to get the device resolution information
  2948. pStdMonoPat - Pointer to the STDMONOPATTERN data structure.
  2949. NOTE: The pStdMonoPat->PatternIndex must be < HT_SMP_0_PERCENT_SCREEN
  2950. Return Value:
  2951. Retrun value will be the size of the final pattern, it will be <= 0 if an
  2952. error occurred and the return value is the halftone error code.
  2953. If the pPattern field in the pStdMonoPat data structure then only the
  2954. pattern size is returned.
  2955. Author:
  2956. 24-May-1991 Fri 12:39:33 created -by- Daniel Chou (danielc)
  2957. Revision History:
  2958. 18-Sep-1991 Wed 18:49:50 updated -by- Daniel Chou (danielc)
  2959. Fixed the bugs for the HORZ_VERT cross lines which has bad LineHeight
  2960. and LineWidh variables,
  2961. adding 2 decimal points accuracy when calculation the device pels to
  2962. prevent run away intermediate result.
  2963. --*/
  2964. {
  2965. LPBYTE pPat;
  2966. LPBYTE pTempPat;
  2967. STDMONOPATTERN StdMonoPat;
  2968. MONOPATRATIO PatRatio;
  2969. WORD DeviceResXDPI;
  2970. WORD DeviceResYDPI;
  2971. WORD DevicePelsDPI;
  2972. DWORD DevPelSub;
  2973. WORD Index;
  2974. WORD Loop;
  2975. WORD LineMode;
  2976. LONG PatSize;
  2977. DWORD YPels2; // retain 2 decimal points
  2978. DWORD LineWidth2; // retain 2 decimal points
  2979. DWORD LineHeight2; // retain 2 decimal points
  2980. DWORD LineSpace2; // retain 2 decimal points
  2981. WORD LineWidthPels;
  2982. WORD LineHeightPels;
  2983. BOOL FlipY;
  2984. BYTE Mask;
  2985. BYTE TempByte;
  2986. StdMonoPat = *pStdMonoPat;
  2987. ASSERTMSG("CreateStdMonoPattern: PatIndex >= HT_SMP_PERCENT_SCREEN(0)",
  2988. StdMonoPat.PatternIndex < HT_SMP_PERCENT_SCREEN(0));
  2989. DeviceResXDPI = pDeviceColorInfo->DeviceResXDPI;
  2990. DeviceResYDPI = pDeviceColorInfo->DeviceResYDPI;
  2991. // DevicePelsDPI = pDeviceColorInfo->DevicePelsDPI;
  2992. DevPelSub = DivFD6(100, pDeviceColorInfo->DevPelRatio) - 100;
  2993. FlipY = (BOOL)((StdMonoPat.Flags & SMP_TOPDOWN) ? FALSE : TRUE);
  2994. if (!StdMonoPat.LineWidth) {
  2995. StdMonoPat.LineWidth = DEFAULT_SMP_LINE_WIDTH;
  2996. }
  2997. if (!StdMonoPat.LinesPerInch) {
  2998. StdMonoPat.LinesPerInch = DEFAULT_SMP_LINES_PER_INCH;
  2999. }
  3000. LineSpace2 = (DWORD)DIVRUNUP((DWORD)DeviceResXDPI * 100L,
  3001. (DWORD)StdMonoPat.LinesPerInch);
  3002. LineWidth2 = (DWORD)DIVRUNUP((DWORD)StdMonoPat.LineWidth *
  3003. (DWORD)DeviceResXDPI,
  3004. 10L);
  3005. switch (StdMonoPat.PatternIndex) {
  3006. case HT_SMP_HORZ_LINE:
  3007. case HT_SMP_VERT_LINE:
  3008. case HT_SMP_HORZ_VERT_CROSS:
  3009. YPels2 = LineSpace2; // default cyPels size
  3010. StdMonoPat.cxPels = (WORD)DIVRUNUP(LineSpace2, 100L);
  3011. if (StdMonoPat.PatternIndex == HT_SMP_HORZ_LINE) {
  3012. // Maximize to the width size of the alignbytes
  3013. StdMonoPat.cxPels = (WORD)StdMonoPat.ScanLineAlignBytes << 3;
  3014. } else if (StdMonoPat.PatternIndex == HT_SMP_VERT_LINE) {
  3015. YPels2 = 800L; // using 8 pels
  3016. }
  3017. break;
  3018. case HT_SMP_DIAG_15_LINE_UP:
  3019. case HT_SMP_DIAG_15_LINE_DOWN:
  3020. case HT_SMP_DIAG_15_CROSS:
  3021. case HT_SMP_DIAG_30_LINE_UP:
  3022. case HT_SMP_DIAG_30_LINE_DOWN:
  3023. case HT_SMP_DIAG_30_CROSS:
  3024. case HT_SMP_DIAG_45_LINE_UP:
  3025. case HT_SMP_DIAG_45_LINE_DOWN:
  3026. case HT_SMP_DIAG_45_CROSS:
  3027. case HT_SMP_DIAG_60_LINE_UP:
  3028. case HT_SMP_DIAG_60_LINE_DOWN:
  3029. case HT_SMP_DIAG_60_CROSS:
  3030. case HT_SMP_DIAG_75_LINE_UP:
  3031. case HT_SMP_DIAG_75_LINE_DOWN:
  3032. case HT_SMP_DIAG_75_CROSS:
  3033. Index = StdMonoPat.PatternIndex - (WORD)HT_SMP_DIAG_15_LINE_UP;
  3034. if (LineMode = (WORD)(Index % 3)) {
  3035. FlipY = !FlipY; // Down or Cross
  3036. }
  3037. PatRatio = MonoPatRatio[Index / 3];
  3038. StdMonoPat.cxPels = (WORD)DIVRUNUP(LineSpace2 * 100L,
  3039. (DWORD)PatRatio.Distance);
  3040. YPels2 = (DWORD)DIVRUNUP((DWORD)PatRatio.YSize * LineSpace2,
  3041. (DWORD)PatRatio.Distance);
  3042. LineWidth2 = (DWORD)DIVRUNUP(LineWidth2 * 10000L,
  3043. (DWORD)PatRatio.Distance);
  3044. break;
  3045. default: // all other percentage density
  3046. //
  3047. // 04-Aug-2000 Fri 10:31:59 updated -by- Daniel Chou (danielc)
  3048. // All other non HT_SMP_xxxx should not be here, we already has
  3049. // a ASSERTMSG at begining of this function
  3050. //
  3051. return(0);
  3052. }
  3053. //
  3054. // Now LineWidth2 = width of the line in pels (2 decimal points) and
  3055. // we have to compensate the size of pels which at most time is greater
  3056. // than its 'resolution', but since the distance between two device pels
  3057. // is assume to be its point 'resolution' so actually we just have to
  3058. // compensate the left/right edges of the total line width, the first
  3059. // and last pels that is.
  3060. //
  3061. // ResPels to reduced = (SizePel / SizeResolution)
  3062. // = (PelDPI / ResDPI) - 1.0
  3063. //
  3064. LineWidth2 -= DevPelSub;
  3065. #if 0
  3066. if (DevicePelsDPI) {
  3067. DBGP("<<< XPels=%ld, ResX=%ld, Width=%ld, Ratio=%s, Sub=%ld, New=%ld"
  3068. ARGDW(DevicePelsDPI) ARGDW(DeviceResXDPI)
  3069. ARGDW(LineWidth2) ARGFD6(pDeviceColorInfo->DevPelRatio, 1, 6)
  3070. ARGDW(DevPelSub) ARGDW(LineWidth2 - DevPelSub));
  3071. LineWidth2 -= (DWORD)DIVRUNUP((DWORD)DevicePelsDPI * 100L,
  3072. (DWORD)DeviceResXDPI) - (DWORD)100;
  3073. DBGP(">>> XPels=%ld, ResX=%ld, Width=%ld"
  3074. ARGDW(DevicePelsDPI) ARGDW(DeviceResXDPI)
  3075. ARGDW(LineWidth2));
  3076. }
  3077. #endif
  3078. //
  3079. // Adjust YPels2 for the non-equal X/Y aspect ratio, the ratio is based
  3080. // one the XDPI
  3081. //
  3082. if (DeviceResXDPI != DeviceResYDPI) {
  3083. YPels2 = (DWORD)DIVRUNUP(YPels2 * (DWORD)DeviceResYDPI,
  3084. (DWORD)DeviceResXDPI);
  3085. }
  3086. //
  3087. // Convert to device pels and check all the zero term, the LineHeightPels
  3088. // only check later for the HORZ/VERT/HORZ_VERT_CROSS line types
  3089. //
  3090. if (!StdMonoPat.cxPels) {
  3091. ++StdMonoPat.cxPels;
  3092. }
  3093. if (!(StdMonoPat.cyPels = (WORD)DIVRUNUP(YPels2, 100))) {
  3094. ++StdMonoPat.cyPels;
  3095. }
  3096. if ((LineWidthPels = (WORD)DIVRUNUP(LineWidth2, 100)) >
  3097. StdMonoPat.cxPels) {
  3098. LineWidthPels = (WORD)(StdMonoPat.cxPels - 1);
  3099. }
  3100. if (!LineWidthPels) {
  3101. ++LineWidthPels;
  3102. }
  3103. //
  3104. // calculate the buffer size for storing the pattern
  3105. //
  3106. StdMonoPat.BytesPerScanLine = (WORD)
  3107. ComputeBytesPerScanLine((UINT)BMF_1BPP,
  3108. (UINT)StdMonoPat.ScanLineAlignBytes,
  3109. (DWORD)StdMonoPat.cxPels);
  3110. PatSize = (LONG)(StdMonoPat.BytesPerScanLine * StdMonoPat.cyPels);
  3111. ASSERTMSG("StdMonoPattern Size Too big", PatSize < 0x10000L);
  3112. if (pPat = StdMonoPat.pPattern) {
  3113. ZeroMemory(pPat, (WORD)PatSize);
  3114. switch (StdMonoPat.PatternIndex) {
  3115. case HT_SMP_VERT_LINE:
  3116. case HT_SMP_HORZ_VERT_CROSS:
  3117. Index = (StdMonoPat.cxPels - (Loop = LineWidthPels)) >> 1;
  3118. pTempPat = pPat + (Index >> 3);
  3119. Mask = (BYTE)(0x80 >> (Index & 0x07));
  3120. TempByte = (BYTE)0;
  3121. //
  3122. // Do this for the first row then copy the rest
  3123. //
  3124. while (Loop--) {
  3125. TempByte |= Mask;
  3126. if ((!(Mask >>= 1)) || (!Loop)) {
  3127. *pTempPat++ = TempByte;
  3128. TempByte = (BYTE)0;
  3129. Mask = (BYTE)0x80;
  3130. }
  3131. }
  3132. for (Index = 0, pTempPat = pPat;
  3133. Index < StdMonoPat.cyPels;
  3134. Index++) {
  3135. CopyMemory(pTempPat, pPat, StdMonoPat.BytesPerScanLine);
  3136. pTempPat += StdMonoPat.BytesPerScanLine;
  3137. }
  3138. //
  3139. // Fall through
  3140. //
  3141. case HT_SMP_HORZ_LINE:
  3142. if (StdMonoPat.PatternIndex != HT_SMP_VERT_LINE) {
  3143. //
  3144. // Set Line Height according to the size of device Y
  3145. // resolution and its pel resolution. (see above for
  3146. // resolution pels reduction)
  3147. //
  3148. LineHeight2 = (DWORD)DIVRUNUP((DWORD)StdMonoPat.LineWidth *
  3149. (DWORD)DeviceResYDPI,
  3150. 10L) - DevPelSub;
  3151. #if 0
  3152. if (DevicePelsDPI) {
  3153. LineHeight2 -= (DWORD)DIVRUNUP((DWORD)DevicePelsDPI * 100L,
  3154. (DWORD)DeviceResYDPI) -
  3155. (DWORD)100;
  3156. }
  3157. #endif
  3158. if ((LineHeightPels = (WORD)DIVRUNUP(LineHeight2, 100)) >=
  3159. StdMonoPat.cyPels) {
  3160. LineHeightPels = (WORD)(StdMonoPat.cyPels - 1);
  3161. }
  3162. if (!LineHeightPels) {
  3163. ++LineHeightPels;
  3164. }
  3165. FillMemory(pPat + (((StdMonoPat.cyPels -
  3166. LineHeightPels) >> 1) *
  3167. StdMonoPat.BytesPerScanLine),
  3168. LineHeightPels * StdMonoPat.BytesPerScanLine,
  3169. 0xff);
  3170. }
  3171. break;
  3172. case HT_SMP_DIAG_15_LINE_UP:
  3173. case HT_SMP_DIAG_15_LINE_DOWN:
  3174. case HT_SMP_DIAG_15_CROSS:
  3175. case HT_SMP_DIAG_30_LINE_UP:
  3176. case HT_SMP_DIAG_30_LINE_DOWN:
  3177. case HT_SMP_DIAG_30_CROSS:
  3178. case HT_SMP_DIAG_45_LINE_UP:
  3179. case HT_SMP_DIAG_45_LINE_DOWN:
  3180. case HT_SMP_DIAG_45_CROSS:
  3181. case HT_SMP_DIAG_60_LINE_UP:
  3182. case HT_SMP_DIAG_60_LINE_DOWN:
  3183. case HT_SMP_DIAG_60_CROSS:
  3184. case HT_SMP_DIAG_75_LINE_UP:
  3185. case HT_SMP_DIAG_75_LINE_DOWN:
  3186. case HT_SMP_DIAG_75_CROSS:
  3187. DrawCornerLine(StdMonoPat.pPattern,
  3188. StdMonoPat.cxPels,
  3189. StdMonoPat.cyPels,
  3190. StdMonoPat.BytesPerScanLine,
  3191. LineWidthPels,
  3192. FlipY);
  3193. if (LineMode == 2) { // cross section
  3194. pTempPat = pPat + ((StdMonoPat.cyPels - 1) *
  3195. StdMonoPat.BytesPerScanLine);
  3196. //
  3197. // Make the up-side-down mirror which create a cross section
  3198. //
  3199. Index = StdMonoPat.cyPels >> 1;
  3200. while (Index--) {
  3201. Loop = StdMonoPat.BytesPerScanLine;
  3202. while (Loop--) {
  3203. *pPat++ = *pTempPat++ = (*pPat | *pTempPat);
  3204. }
  3205. pTempPat -= (StdMonoPat.BytesPerScanLine << 1);
  3206. }
  3207. pPat = StdMonoPat.pPattern; // restore address
  3208. }
  3209. break;
  3210. default: // all other percentage density
  3211. break;
  3212. }
  3213. if (StdMonoPat.Flags & SMP_0_IS_BLACK) {
  3214. Index = (WORD)PatSize;
  3215. while (Index--) {
  3216. *pPat++ ^= 0xff;
  3217. }
  3218. }
  3219. }
  3220. *pStdMonoPat = StdMonoPat;
  3221. return(PatSize);
  3222. }
  3223. LONG
  3224. HTENTRY
  3225. CachedHalftonePattern(
  3226. PDEVICECOLORINFO pDCI,
  3227. PDEVCLRADJ pDevClrAdj,
  3228. PAAPATINFO pAAPI,
  3229. LONG PatX,
  3230. LONG PatY,
  3231. BOOL FlipYPat
  3232. )
  3233. /*++
  3234. Routine Description:
  3235. This function create a cached pattern depends on the source color table,
  3236. if the source color table only has one entry and we are using the pattern
  3237. solid fill then the cached table will be the final color mask bits, else
  3238. the color table will be the color threshold values.
  3239. Note: the cached pattern will rotate both X, Y direction to aligned with
  3240. destination so that first pel/scanline in the cached pattern will
  3241. be corresponsed to the first pel in the destination.
  3242. Arguments:
  3243. pHR - Pointer to the HALFTONERENDER data structure.
  3244. Return Value:
  3245. The return value will be <= 0 if an error occurred and the return value is
  3246. the error code, otherwise the return value is the size of the cached
  3247. pattern allocated.
  3248. Author:
  3249. 05-Mar-1991 Tue 11:08:18 created -by- Daniel Chou (danielc)
  3250. Revision History:
  3251. 07-Jun-1991 Fri 17:23:16 updated -by- Daniel Chou (danielc)
  3252. Fixed pattern solid fill's pattern alignment problems
  3253. --*/
  3254. {
  3255. HTCELL HTCell;
  3256. AAPATINFO AAPI;
  3257. LONG cxPat;
  3258. LONG cbPat;
  3259. LONG x;
  3260. LONG y;
  3261. //
  3262. // If pDCI->HTCell.pThresholds == NULL then we need to make the pattern
  3263. // now
  3264. //
  3265. if (pDCI->HTCell.pThresholds == NULL) {
  3266. ASSERT((pDCI->HTCell.Flags & HTCF_STATIC_PTHRESHOLDS) &&
  3267. (pDCI->HTCell.HTPatIdx < HTPAT_SIZE_USER));
  3268. if (!(Generate_HTSC_WORD(&(pDCI->HTCell)))) {
  3269. return(HTERR_INSUFFICIENT_MEMORY);
  3270. }
  3271. }
  3272. HTCell = pDCI->HTCell;
  3273. //
  3274. // We will always make the pattern width is multiple of 8, this will make
  3275. // the output process faster.
  3276. //
  3277. AAPI.DstOrder = pDevClrAdj->DMI.DstOrder;
  3278. //
  3279. // Figure out the 555 pattern first
  3280. //
  3281. MOD_PAT_XY(x, PatX, CX_RGB555PAT);
  3282. MOD_PAT_XY(y, PatY, CY_RGB555PAT);
  3283. AAPI.pbPat555 = (LPBYTE)RGB555Pat + (CX_SIZE_RGB555PAT * y) + x;
  3284. AAPI.cyNext555 = CX_SIZE_RGB555PAT;
  3285. AAPI.cbEnd555 = CX_RGB555PAT - x - 1;
  3286. if (FlipYPat) {
  3287. AAPI.pbWrap555 = (LPBYTE)RGB555Pat - CX_SIZE_RGB555PAT + x;
  3288. AAPI.pbBeg555 = AAPI.pbWrap555 + CB_RGB555PAT;
  3289. AAPI.cyNext555 = -CX_SIZE_RGB555PAT;
  3290. } else {
  3291. AAPI.pbWrap555 = (LPBYTE)RGB555Pat + CB_RGB555PAT + x;
  3292. AAPI.pbBeg555 = AAPI.pbWrap555 - CB_RGB555PAT;
  3293. AAPI.cyNext555 = CX_SIZE_RGB555PAT;
  3294. }
  3295. DBGP_IF(DBGP_CACHE_PAT,
  3296. DBGP("555: Orgin=(%ld, %ld)->(%ld, %ld), pbPat=%p->%p, cyNext=%ld, cbEnd=%ld, "
  3297. ARGDW(PatX) ARGDW(PatY) ARGDW(x) ARGDW(y)
  3298. ARGPTR(RGB555Pat) ARGPTR(AAPI.pbPat555)
  3299. ARGDW(AAPI.cyNext555) ARGDW(AAPI.cbEnd555)));
  3300. //
  3301. // Figure out the ABC pattern now
  3302. //
  3303. cxPat = (LONG)HTCell.Width * SIZE_PER_PAT;
  3304. cbPat = (LONG)HTCell.Height * cxPat;
  3305. MOD_PAT_XY(x, PatX, HTCell.cxReal);
  3306. MOD_PAT_XY(y, PatY, HTCell.Height);
  3307. x *= SIZE_PER_PAT;
  3308. AAPI.pbPatBGR = (LPBYTE)HTCell.pThresholds + (y * cxPat) + x;
  3309. AAPI.cbWrapBGR = -(LONG)HTCell.cxReal * SIZE_PER_PAT;
  3310. AAPI.cbEndBGR = -AAPI.cbWrapBGR - x;
  3311. DBGP_IF(DBGP_CACHE_PAT,
  3312. DBGP("HTCell=%ld (%ld) x %ld, cbPat=%ld, pbPat=%p, Flags=%04lx"
  3313. ARGDW(HTCell.Width) ARGDW(HTCell.cxReal) ARGDW(HTCell.Height)
  3314. ARGDW(HTCell.Size) ARGPTR(HTCell.pThresholds)
  3315. ARGDW(HTCell.Flags)));
  3316. if (FlipYPat) {
  3317. AAPI.pbWrapBGR = (LPBYTE)HTCell.pThresholds - cxPat + x;
  3318. AAPI.pbBegBGR = AAPI.pbWrapBGR + cbPat;
  3319. AAPI.cyNextBGR = -cxPat;
  3320. } else {
  3321. AAPI.pbWrapBGR = (LPBYTE)HTCell.pThresholds + cbPat + x;
  3322. AAPI.pbBegBGR = AAPI.pbWrapBGR - cbPat;
  3323. AAPI.cyNextBGR = cxPat;
  3324. }
  3325. *pAAPI = AAPI;
  3326. DBGP_IF(DBGP_CACHE_PAT,
  3327. DBGP("BGR[%ld=%ld:%ld:%ld]: Org=(%ld, %ld)->(%ld, %ld), pbPat=%p->%p"
  3328. ARGDW(AAPI.DstOrder.Index) ARGDW(AAPI.DstOrder.Order[0])
  3329. ARGDW(AAPI.DstOrder.Order[1]) ARGDW(AAPI.DstOrder.Order[2])
  3330. ARGDW(PatX) ARGDW(PatY)
  3331. ARGDW(x / SIZE_PER_PAT) ARGDW(y)
  3332. ARGPTR(HTCell.pThresholds) ARGPTR(AAPI.pbPatBGR)));
  3333. DBGP_IF(DBGP_CACHE_PAT,
  3334. DBGP("pbBeg=%p, pbWrap=%p, cyNext=%ld, cbEnd=%ld, cbWrap=%ld"
  3335. ARGPTR(AAPI.pbBegBGR) ARGPTR(AAPI.pbWrapBGR)
  3336. ARGDW(AAPI.cyNextBGR) ARGDW(AAPI.cbEndBGR)
  3337. ARGDW(AAPI.cbWrapBGR)));
  3338. return((LONG)cbPat);
  3339. }