2 * models for the xss chess screensavers
5 * glChess - A 3D chess interface
7 * Copyright (C) 2006 John-Paul Gignac <jjgignac@users.sf.net>
9 * Copyright (C) 2002 Robert Ancell <bob27@users.sourceforge.net>
10 * Michael Duelli <duelli@users.sourceforge.net>
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 /* chessmodels.c: Contains the code for piece model creation */
31 #endif /* HAVE_CONFIG_H */
43 #endif /* HAVE_JWZGLES */
45 #include "chessmodels.h"
48 #define ENDOFDATA 65535
52 #define VERTICES 65533
54 #define TRIANGLES 65531
55 #define POLARQUADSTRIP 65530
56 #define QUADSTRIP 65529
58 /* Special spin-related commands */
62 #define STEPDOWN 65525
63 #define SETBACKREF 65524
66 static unsigned short classic_pawn_data[] = {
68 350,0,SEAM,350,200,SEAM,250,300,SEAM,250,400,SEAM,150,600,SEAM,100,880,
69 SEAM,180,880,SEAM,100,920,SEAM,200,1160,SEAM,100,1340,0,1340,
73 static unsigned short classic_rook_data[] = {
75 380,0,SEAM,380,200,SEAM,260,500,SEAM,200,1020,SEAM,280,1020,SEAM,280,1360,SEAM,220,1360,SEAM,220,1300,0,1300,
79 static unsigned short classic_knight_data[] = {
81 410,0,SEAM,410,200,SEAM,200,360,SEAM,200,480,260,580,
84 260,580,260, -260,580,260, -260,580,-80, 260,580,-80, 80,1620,400,
85 100,1680,340, -100,1680,340, -80,1620,400, 100,1680,340, 100,1680,300,
86 -100,1680,300, -100,1680,340, 100,1680,300, 50,1680,160, -50,1680,160,
87 -100,1680,300, 50,1680,160, 100,1680,20, -100,1680,20, -50,1680,160,
88 100,1680,20, 100,1680,-20, -100,1680,-20, -100,1680,20, 100,1680,-20,
89 40,1680,-110, -40,1680,-110, -100,1680,-20, 40,1680,-110,
90 100,1680,-200, -100,1680,-200, -40,1680,-110, 100,1680,-200,
91 100,1680,-440, -100,1680,-440, -100,1680,-200, -100,1680,-440,
92 100,1680,-440, 100,1500,-440, -100,1500,-440, -100,1500,-440,
93 100,1500,-440, 55,1480,-280, -55,1480,-280, -100,1680,300, -50,1680,160,
94 -100,1400,130, -120,1380,240, -50,1680,160, -80,1680,20, -120,1380,20,
95 -100,1400,130, -83,1660,20, -80,1680,20, -100,1680,-20, -100,1660,-38,
96 -120,1380,20, -88,1620,20, -100,1620,-74, -120,1360,-20, -120,1360,-20,
97 -100,1620,-74, -100,1580,-110, -60,1400,-140, -100,1680,-200,
98 -55,1480,-280, -60,1400,-140, -100,1580,-110, -100,1680,-200,
99 -100,1680,-440, -100,1500,-440, -55,1480,-280, 100,1680,300,
100 120,1380,240, 100,1400,130, 50,1680,160, 50,1680,160, 100,1400,130,
101 120,1380,20, 80,1680,20, 83,1660,20, 100,1660,-38, 100,1680,-20,
102 80,1680,20, 120,1380,20, 120,1360,-20, 100,1620,-74, 88,1620,20,
103 120,1360,-20, 60,1400,-140, 100,1580,-110, 100,1620,-74, 100,1680,-200,
104 100,1580,-110, 60,1400,-140, 55,1480,-280, 100,1680,-200, 55,1480,-280,
105 100,1500,-440, 100,1680,-440, 88,1620,20, 100,1620,-74, 80,1640,-56,
106 61,1640,20, 61,1640,20, 80,1640,-56, 100,1660,-38, 83,1660,20,
107 -88,1620,20, -61,1640,20, -80,1640,-56, -100,1620,-74, -61,1640,20,
108 -83,1660,20, -100,1660,-38, -80,1640,-56, 35,1780,-80, 35,1780,-440,
109 -35,1780,-440, -35,1780,-80, 35,1780,-80, 35,1680,-80, 35,1680,-440,
110 35,1780,-440, -35,1780,-80, -35,1780,-440, -35,1680,-440, -35,1680,-80,
111 35,1780,-80, -35,1780,-80, -35,1680,-80, 35,1680,-80, 35,1780,-440,
112 35,1680,-440, -35,1680,-440, -35,1780,-440, -100,1400,130, -120,1380,20,
113 120,1380,20, 100,1400,130, -100,1400,130, 100,1400,130, 120,1380,240,
114 -120,1380,240, -260,580,-80, -55,1480,-280, 0,1500,-360, 0,780,-400,
115 260,580,-80, 0,780,-400, 0,1500,-360, 55,1480,-280, -50,1380,40,
116 -200,880,400, 200,880,400, 50,1380,40, -200,880,400, -260,580,260,
117 260,580,260, 200,880,400, -50,1380,40, -140,1220,-40, -260,580,260,
118 -200,880,400, -140,1220,-40, -114,1220,-222, -260,580,-80, -260,580,260,
119 -55,1480,-280, -114,1220,-222, -140,1220,-40, -60,1400,-140,
120 50,1380,40, 200,880,400, 260,580,260, 140,1220,-40, 140,1220,-40,
121 260,580,260, 260,580,-80, 114,1220,-222, 55,1480,-280, 60,1400,-140,
122 140,1220,-40, 114,1220,-222, 260,580,-80, 144,580,-260, 0,780,-400,
123 144,580,-260, -144,580,-260, 0,780,-400, -260,580,-80, 0,780,-400,
124 -144,580,-260, 0,1400,400, 80,1620,400, -80,1620,400, 0,1400,400,
125 -80,1620,400, -120,1380,240, -120,1380,240, -80,1620,400, -100,1680,340,
126 -120,1380,240, -100,1680,340, -100,1680,300, 0,1400,400, 120,1380,240,
127 80,1620,400, 120,1380,240, 100,1680,340, 80,1620,400, 120,1380,240,
128 100,1680,300, 100,1680,340, 0,1400,400, -120,1380,240, 120,1380,240,
129 -60,1400,-140, -140,1220,-40, -45,1380,-20, -45,1380,-20, -140,1220,-40,
130 -50,1380,40, 60,1400,-140, 45,1380,-20, 140,1220,-40, 45,1380,-20,
131 50,1380,40, 140,1220,-40, 60,1400,-140, 120,1360,-20, 45,1380,-20,
132 50,1380,40, 45,1380,-20, 120,1360,-20, 50,1380,40, 120,1360,-20,
133 120,1380,20, -60,1400,-140, -45,1380,-20, -120,1360,-20, -50,1380,40,
134 -120,1360,-20, -45,1380,-20, -50,1380,40, -120,1380,20, -120,1360,-20,
135 88,1620,20, 61,1640,20, 83,1660,20, 100,1620,-74, 100,1660,-38,
136 80,1640,-56, -88,1620,20, -83,1660,20, -61,1640,20, -100,1620,-74,
137 -80,1640,-56, -100,1660,-38, -40,1680,-110, -100,1680,-200,
138 -100,1580,-110, -100,1680,-20, -40,1680,-110, -100,1580,-110,
139 40,1680,-110, 100,1580,-110, 100,1680,-200, 100,1680,-20, 100,1580,-110,
142 QUADS, 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18,19,
143 20,21,22,23, 24,25,26,27, 28,29,30,31, 32,33,34,35, 36,37,38,39,
144 40,41,42,43, 44,45,46,47, 48,49,50,51, 52,53,54,55, 56,57,58,59,
145 60,61,62,63, 64,65,66,67, 68,69,70,71, 72,73,74,75, 76,77,78,79,
146 80,81,82,83, 84,85,86,87, 88,89,90,91, 92,93,94,95, 96,97,98,99,
147 100,101,102,103, 104,105,106,107, 108,109,110,111, 112,113,114,115,
148 116,117,118,119, 120,121,122,123, 124,125,126,127, 128,129,130,131,
149 132,133,134,135, 136,137,138,139, 140,141,142,143, 144,145,146,147,
150 148,149,150,151, 152,153,154,155, 156,157,158,159, 160,161,162,163,
151 164,165,166,167, 168,169,170,171, 172,173,174,175, 176,177,178,179,
154 TRIANGLES, 184,185,186, 187,188,189, 190,191,192, 193,194,195,
155 196,197,198, 199,200,201, 202,203,204, 205,206,207, 208,209,210,
156 211,212,213, 214,215,216, 217,218,219, 220,221,222, 223,224,225,
157 226,227,228, 229,230,231, 232,233,234, 235,236,237, 238,239,240,
158 241,242,243, 244,245,246, 247,248,249, 250,251,252, 253,254,255,
159 256,257,258, 259,260,261, 262,263,264, 265,266,267, 268,269,270,
164 static unsigned short classic_bishop_data[] = {
166 400,0,SEAM,400,200,SEAM,250,300,SEAM,250,400,SEAM,150,700,SEAM,120,940,
167 SEAM,250,940,SEAM,170,1100,SEAM,170,1220,SEAM,220,1320,SEAM,220,1480,
168 SEAM,100,1600,SEAM,80,1700,SEAM,120,1770,SEAM,80,1840,0,1840,
172 static unsigned short classic_queen_data[] = {
174 480,0,SEAM,480,220,SEAM,340,400,SEAM,340,500,SEAM,180,800,SEAM,140,1180,
175 SEAM,290,1180,SEAM,180,1360,SEAM,180,1520,SEAM,200,1780,SEAM,270,1920,
176 SEAM,240,2000,SEAM,170,2000,SEAM,95,2080,SEAM,70,2080,SEAM,90,2140,
181 static unsigned short classic_king_data[] = {
183 500,0,SEAM,500,200,SEAM,350,300,SEAM,350,460,SEAM,200,760,SEAM,140,1260,
184 SEAM,300,1260,SEAM,200,1460,SEAM,200,1560,SEAM,280,1910,SEAM,160,1970,
185 SEAM,160,2010,0,2010,
188 -30,2010,35, 30,2010,35, 30,2310,35, -30,2310,35, -90,2110,35,
189 -30,2110,35, -30,2210,35, -90,2210,35, 90,2110,35, 90,2210,35,
190 30,2210,35, 30,2110,35, 30,2010,-35, -30,2010,-35, -30,2310,-35,
191 30,2310,-35, -30,2110,-35, -90,2110,-35, -90,2210,-35, -30,2210,-35,
192 30,2110,-35, 30,2210,-35, 90,2210,-35, 90,2110,-35, -90,2110,35,
193 -90,2210,35, -90,2210,-35, -90,2110,-35, -30,2010,35, -30,2110,35,
194 -30,2110,-35, -30,2010,-35, -30,2210,30, -30,2310,30, -30,2310,-30,
195 -30,2210,-30, 90,2110,-35, 90,2210,-35, 90,2210,35, 90,2110,35,
196 30,2010,-35, 30,2110,-35, 30,2110,35, 30,2010,35, 30,2210,-35,
197 30,2310,-35, 30,2310,35, 30,2210,35, -90,2210,-35, -90,2210,35,
198 -30,2210,35, -30,2210,-35, 30,2210,-35, 30,2210,35, 90,2210,35,
199 90,2210,-35, -30,2310,-35, -30,2310,35, 30,2310,35, 30,2310,-35,
201 QUADS, 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18,19,
202 20,21,22,23, 24,25,26,27, 28,29,30,31, 32,33,34,35, 36,37,38,39,
203 40,41,42,43, 44,45,46,47, 48,49,50,51, 52,53,54,55, 56,57,58,59,
208 static unsigned short knight_data[] = {
209 VERTICES, SETBACKREF,0, 7910,8863,0, 7790,8863,1326, 7433,8863,2611,
210 6850,8863,3817, 6059,8863,4907, 5084,8863,5847, 3955,8863,6611,
211 2705,8863,7173, 1373,8863,7517, 0,8863,7633, -1373,8863,7517,
212 -2705,8863,7173, -3955,8863,6611, -5084,8863,5847, -6059,8863,4907,
213 -6850,8863,3817, -7433,8863,2611, -7790,8863,1326, -7910,8863,0,
214 -7790,8863,-1326, -7433,8863,-2611, -6850,8863,-3817,
215 -6059,8863,-4907, -5066,8863,-5896, -3955,8863,-6611,
216 -2705,8863,-7173, -1373,8863,-7517, 0,8863,-7633, 1373,8863,-7517,
217 2705,8863,-7173, 3955,8863,-6611, 5066,8863,-5896, 6059,8863,-4907,
218 6850,8863,-3817, 7433,8863,-2611, 7790,8863,-1326, -1183,11744,7939,
219 -1183,12003,7939, -1183,14019,6547, -1183,16307,5288,
220 -1183,16555,5281, -1183,20128,2191, -1134,20304,2131,
221 -1183,20516,2156, -1417,21874,1842, -1417,23109,2185,
222 -1417,23961,3121, -1417,24001,4252, 0,23917,5637, -1418,23893,5418,
223 -1151,23389,6664, -1151,23501,6906, -1151,23806,6987,
224 -1151,24102,6987, -1151,24209,7189, -1151,24371,7513,
225 -1151,24605,7715, -1151,24939,7674, -1313,25568,7149,
226 -1313,25695,7149, -1598,26707,7610, 0,26837,7841, 0,27354,8076,
227 -1598,27262,7839, -1598,27842,7723, 0,27919,7998, 0,28449,7606,
228 -1598,28309,7303, -1302,28414,6723, 0,28544,6980, 0,28540,6197,
229 -1187,28523,5990, -1304,28447,4204, -1158,28789,1627,
230 -561,28931,-1220, -357,29608,-1244, -357,30527,-1441,
231 -357,31249,-1837, -357,31511,-2627, -357,31511,-3484,
232 -357,31118,-4143, -357,30264,-4538, -436,29406,-5256, 0,29409,-5243,
233 -2207,29018,-6763, -914,28658,-6964, 0,26292,-7237, -1305,26324,-7143,
234 -806,23401,-6784, -812,20723,-6228, -796,16757,-6210,
235 -1559,24934,7435, -1566,24633,7460, -1531,24429,7334,
236 -1475,24293,7131, -1440,24203,7004, -1372,23935,7015,
237 -1364,23606,6868, -1389,23515,6705, -1687,28010,6952,
238 -1687,27926,7343, -1687,27629,7491, -1687,27324,7552,
239 -1687,27032,7432, -1687,26791,7148, -1642,27135,7165,
240 -1642,27254,7304, -1642,27397,7364, -1642,27546,7334,
241 -1642,27693,7261, -1642,27737,7088, -1611,10591,8159,
242 -888,9327,-8560, -4491,13292,1032, -3840,15084,786, -3412,17397,397,
243 -2937,20005,-35, -5108,11669,1240, -6344,10251,1395, -6345,10246,1248,
244 -5109,11664,1092, -2964,20022,-132, -3413,17393,250, -3841,15079,638,
245 -4491,13288,885, -3743,13207,-535, -3085,15092,-710, -2727,17642,-878,
246 -2569,20636,-797, -4348,11575,-324, -5584,10108,-169,
247 -5403,10079,-1732, -4167,11644,-1888, -2465,20842,-2651,
248 -2522,18130,-2392, -2905,15407,-2077, -3562,13227,-1951,
249 -3901,13568,-3294, -3243,15993,-3519, -2861,18863,-3735,
250 -2776,22447,-4309, -4486,11792,-3132, -5783,9930,-2931,
251 -5783,9930,-3054, -4486,11792,-3255, -2776,22438,-4430,
252 -2861,18863,-3858, -3243,15993,-3641, -3901,13568,-3417,
253 -6199,9466,4558, -5766,10642,5726, -5228,11829,6090, -4801,12891,6048,
254 -4155,14560,5246, -3546,16847,3719, -3334,17643,2937,
255 -2860,20062,1230, -4822,12054,7102, -5325,10909,7208,
256 -5732,9938,6026, -4026,14701,5522, -2852,20170,1447, -3319,17801,3175,
257 -3538,16955,3935, -4090,13256,1679, -2874,20073,676, -3706,15083,1464,
258 -3301,17348,1117, -5931,10206,1996, -4695,11624,1840,
259 -4445,11658,2844, -5681,10240,3000, -3074,17398,2202,
260 -3456,15117,2468, -3840,13290,2683, -4642,13358,4019,
261 -4257,15194,3908, -6017,10188,3746, -5237,11714,4039,
262 -5621,11218,5077, -5026,12862,5058, -5134,10861,-3154,
263 -4193,12680,-3336, -2832,20609,-4118, -3052,17428,-3750,
264 -3572,14780,-3529, -3579,14774,-3623, -3059,17422,-3843,
265 -2839,20596,-4211, -4200,12674,-3429, -5141,10855,-3248,
266 -3908,13562,-3510, -3250,15987,-3735, -2868,18857,-3952,
267 -4492,11786,-3348, -5789,9924,-3148, -4817,11321,-3298,
268 -5465,10389,-3198, -4054,13118,-3470, -4346,12230,-3389,
269 -2853,19681,-4056, -2825,21511,-4367, -3155,16705,-3789,
270 -2963,18140,-3897, -3744,14168,-3567, -3415,15381,-3679,
271 -845,13482,-6604, -945,10997,-7893, -981,11110,-7735,
272 -859,13469,-6526, -899,9307,-8439, -813,16486,-6146, -832,20681,-6100,
273 -826,23358,-6656, -882,10149,-8148, -913,12323,-7139,
274 -822,14910,-6353, -817,18235,-6210, -827,21937,-6382,
275 -846,21937,-6341, -841,14912,-6313, -931,12326,-7098,
276 -901,10152,-8107, -844,23359,-6615, -851,20681,-6059,
277 -831,16487,-6105, -919,9307,-8399, -869,13482,-6492, -999,11113,-7694,
278 -860,9726,-8255, -942,10578,-7958, -962,11715,-7413, -900,12896,-6796,
279 -863,14065,-6404, -818,15760,-6221, -828,17367,-6171,
280 -854,19800,-5994, -848,21309,-6200, -843,22566,-6482,
281 -3407,15409,-3785, -3736,14196,-3673, -2911,18365,-4048,
282 -3147,16733,-3895, -2726,21608,-4455, -2808,19905,-4191,
283 -4338,12259,-3495, -4046,13146,-3576, -5457,10418,-3304,
284 -4809,11349,-3404, -4484,11815,-3454, -2715,22288,-4534,
285 -2832,19035,-4066, -3242,16015,-3841, -3900,13590,-3616,
286 -5133,10883,-3354, -4171,12742,-3524, -2803,20773,-4339,
287 -3051,17450,-3949, -3571,14803,-3729, -4979,11072,-3368,
288 -5619,10185,-3279, -4119,12924,-3556, -4411,12037,-3475,
289 -2801,20363,-4269, -2721,21826,-4489, -3099,17092,-3922,
290 -2887,18618,-4038, -3653,14499,-3701, -3325,15712,-3813,
291 -3489,15106,-3757, -3818,13893,-3645, -3011,17758,-3971,
292 -3194,16374,-3868, -2755,21085,-4385, -2815,19494,-4139,
293 -4265,12481,-3515, -3973,13368,-3596, -5304,10595,-3318,
294 -4664,11477,-3407, -5441,10207,-3361, -5350,10338,-3375,
295 -5139,10672,-3428, -5058,10742,-3431, -4831,11101,-3457,
296 -4742,11228,-3470, -4516,11559,-3504, -4423,11693,-3518,
297 -4277,12079,-3558, -4232,12180,-3571, -4138,12522,-3597,
298 -4094,12603,-3609, -3979,12935,-3675, -3943,13043,-3671,
299 -3852,13383,-3699, -3813,13496,-3705, -3692,13947,-3767,
300 -3653,14073,-3790, -3506,14587,-3772, -3467,14685,-3777,
301 -3349,15192,-3888, -3308,15317,-3887, -3162,15800,-3957,
302 -3119,15954,-3961, -3009,16528,-3946, -3002,16637,-3937,
303 -2914,17260,-4014, -2909,17347,-4006, -2834,17893,-4049,
304 -2813,18060,-4060, -2760,18849,-4232, -2746,18968,-4242,
305 -850,22569,-6438, -855,21313,-6156, -861,19804,-5949,
306 -834,17371,-6127, -824,15765,-6176, -869,14070,-6360,
307 -906,12901,-6751, -968,11720,-7368, -948,10645,-7895, -865,9731,-8211,
308 -1006,11164,-7630, -875,13487,-6447, -926,9310,-8354,
309 -837,16490,-6061, -857,20684,-6015, -867,23379,-6515,
310 -907,10157,-8062, -937,12331,-7053, -847,14917,-6268,
311 -842,18236,-6111, -852,21941,-6297, -885,9891,-8156, -985,10905,-7724,
312 -947,11969,-7255, -885,13125,-6649, -858,14493,-6314,
313 -839,16049,-6111, -836,17735,-6083, -859,20244,-5982,
314 -891,21559,-6157, -848,22883,-6508, -851,22255,-6367,
315 -856,20999,-6085, -867,19042,-6000, -836,16930,-6094,
316 -835,15341,-6222, -880,13646,-6405, -916,12540,-6953,
317 -981,11337,-7564, -927,10370,-7988, -932,9518,-8285, -931,9583,-8174,
318 -863,9671,-8145, -892,9982,-8037, -903,10075,-7996, -952,10454,-7865,
319 -961,10550,-7832, -1008,10963,-7617, -1018,11105,-7567,
320 -996,11458,-7405, -992,11582,-7342, -972,12080,-7057,
321 -968,12210,-6984, -935,12620,-6792, -931,12759,-6714,
322 -914,13199,-6441, -910,13346,-6359, -915,13767,-6194,
323 -910,13941,-6175, -890,14633,-6107, -886,14783,-6091,
324 -864,15476,-6035, -859,15645,-6017, -870,16062,-5957,
325 -873,16231,-5936, -853,17048,-5965, -861,17185,-5974,
326 -879,17812,-5997, -885,17961,-5997, -851,18486,-6138,
327 -865,18526,-5933, -872,18761,-5875, -870,19337,-5971,
328 -864,19470,-5784, -937,19590,-5786, -833,19023,-6126,
329 -851,20344,-5894, -851,20576,-5912, -855,21086,-5973,
330 -854,21224,-6003, -871,21651,-6070, -852,21853,-6116,
331 -850,22332,-6224, -849,22490,-6259, -831,22924,-6338,
332 -834,23240,-6364, -2743,19661,-4287, -2740,19863,-4312,
333 -2723,20501,-4469, -2705,20711,-4503, -2661,21262,-4565,
334 -2658,21427,-4593, -2687,22088,-4631, -2695,22209,-4643,
335 -2774,23170,-4392, -2633,23103,-4527, -2681,22439,-4516,
336 -2656,22665,-4573, -2552,22727,-4653, -2534,23015,-4628,
337 -2607,23397,-4556, -2759,23681,-4398, -2740,24136,-4370,
338 -2610,24100,-4580, -2412,24481,-5089, -2671,24389,-4569,
339 -2397,24935,-5652, -2562,25022,-5528, -939,23708,-6566,
340 -1009,24359,-6776, -1095,24912,-6886, -1049,24117,-6493,
341 -990,23894,-6415, -2290,23837,-4814, -2312,23612,-4723,
342 -2183,24804,-5574, -2191,24632,-5391, -1156,24771,-6650,
343 -1154,24624,-6586, -1104,24526,-6656, -1281,9161,-8432,
344 -2524,9161,-8046, -3691,9161,-7572, -4745,9161,-6945,
345 -5662,9127,-6096, -3697,9192,-7581, -2531,9192,-8056,
346 -4753,9183,-6951, -5664,9161,-6101, -5664,9185,-6101,
347 -4753,9207,-6951, -2531,9216,-8055, -3697,9216,-7581,
348 -3684,9232,-7560, -2518,9232,-8034, -4740,9223,-6930,
349 -5651,9200,-6080, -2828,20259,1366, -2798,20256,1187, -2820,20237,692,
350 -2843,20292,-25, -2874,20473,735, -2975,20508,90, -2474,20772,-759,
351 -2660,20879,-691, -2471,21553,-1445, -2498,22175,-1940,
352 -2471,24346,-2830, -2556,22373,-1903, -2528,21595,-1351,
353 -2493,24314,-2936, -2576,22239,-2123, -2548,21461,-1571,
354 -2823,20635,1307, -2741,20503,1328, -1490,23972,5392,
355 -1489,24080,4226, -1489,24040,3095, -1489,23188,2159,
356 -1489,21953,1816, -2479,22156,182, -1515,23830,2117, -1605,24415,3131,
357 -1599,24460,4263, -1580,24357,5431, -1448,23885,6743,
358 -1252,24770,5442, -1271,24873,4274, -1277,24828,3142,
359 -1389,24618,2016, -1479,24733,1993, -1301,25010,3165,
360 -1295,25055,4297, -1391,24890,5460, -1512,25216,5507,
361 -1602,25353,4317, -1608,25308,3186, -1979,23458,-29, -1320,25312,1928,
362 -1495,25055,546, -2438,25790,-488, -1605,25585,5599, -1583,26793,6150,
363 -1850,26272,4298, -1578,27435,7117, -1658,27625,6884,
364 -1671,27398,6846, -1678,27176,6937, -1715,27784,6626,
365 -1744,27323,6551, -1753,26904,6776, -1884,28809,-1688,
366 -1555,28655,1620, -1658,28252,4204, -1581,28263,5997,
367 -1567,28312,6790, -1935,27827,4220, -1818,28249,1603,
368 -1570,27742,6195, -1532,27288,6120, -2038,27074,4245, -1418,28416,228,
369 -413,30264,-4539, -424,31094,-4152, -418,31478,-3497,
370 -410,31453,-2653, -410,31190,-1863, -410,30468,-1467,
371 -410,29550,-1270, -411,31041,-1902, -448,31253,-2696,
372 -449,31323,-3466, -425,31182,-3496, -411,31060,-2738,
373 -387,30899,-1932, -316,30806,-1957, -335,30952,-2766,
374 -353,31089,-3521, -322,31007,-3540, -303,30871,-2786,
375 -284,30725,-1976, -304,30630,-1993, -323,30776,-2802,
376 -342,30912,-3557, -396,30843,-3565, -378,30707,-2811,
377 -358,30561,-2001, -414,30477,-2013, -433,30623,-2822,
378 -452,30759,-3576, -474,30560,-3616, -456,30424,-2861,
379 -436,30278,-2052, -349,30194,-2077, -368,30340,-2886,
380 -386,30477,-3641, -309,30389,-3665, -291,30253,-2911,
381 -271,30107,-2102, -267,29996,-2124, -286,30142,-2933,
382 -305,30278,-3688, -376,30179,-3700, -357,30043,-2945,
383 -338,29897,-2136, -420,29789,-2150, -439,29935,-2959,
384 -458,30071,-3713, -500,29883,-3751, -463,29601,-2187,
385 -470,30974,-4049, -462,30153,-4391, -466,30563,-4220,
386 -410,30009,-1368, -725,29372,-3225, -677,29335,-5130,
387 -908,29205,-3300, -632,29533,-4803, -2587,28768,-3408,
388 -2730,28611,-3456, -2404,28568,-6916, -2413,28849,-6612,
389 -1904,26715,1801, -1394,25919,831, -2224,27270,-3994,
390 -2730,28438,-3011, -2587,28570,-2864, -2826,28152,-3163,
391 -2476,28668,-6523, -2476,28433,-6776, -2787,28338,-3507,
392 -2216,27658,-3972, -2207,27950,-5907, -2311,28216,-6128,
393 -2320,27876,-3971, -2311,28118,-6301, -2311,27845,-6252,
394 -2320,27703,-3749, -2320,27084,-3798, -2320,26986,-4070,
395 -2698,26705,-4014, -2557,26974,-3547, -2557,27739,-3485,
396 -2572,27738,-6362, -2436,28204,-6533, -2436,28421,-6303,
397 -2556,28092,-3822, -2431,28142,-6975, -2544,27863,-6726,
398 -2266,28229,-1686, -1939,28156,-1065, -2569,27943,-2270,
399 -2381,27545,-1682, -2799,27594,-3104, -2750,27866,-2738,
400 -2539,27578,-6309, -2720,26853,-3133, -2788,26461,-3776,
401 -1061,27543,-7078, -1780,27941,135, -1859,27747,-527, -1756,27784,691,
402 -1855,27001,736, -1950,26711,19, -1964,27006,-630, -2342,26955,-1898,
403 -2595,25515,-3113, -2147,27855,132, -2126,27722,601, -2213,27691,-428,
404 -2210,27061,639, -2290,26816,34, -2302,27065,-515, -2347,27680,100,
405 -2335,27602,376, -2386,27584,-229, -2385,27213,398, -2432,27069,42,
406 -2439,27215,-281, -2481,27452,103, -1786,24263,399, -2278,24851,-562,
407 -2372,25143,-1163, 7383,9172,0, 7270,9172,-1487, 6937,9172,-2929,
408 6393,9172,-4281, 1282,9172,-8433, 0,9172,-8563, 1301,9439,8159,
409 2371,9313,7844, 3857,9286,7355, 4477,9172,6559, 5704,9174,5179,
410 6393,9172,4281, 6937,9172,2929, 7270,9172,1487, -7270,9172,-1487,
411 -6937,9172,-2929, -6393,9172,-4281, -1282,9172,-8433, 0,9339,8274,
412 -1301,9439,8159, -2371,9313,7844, -3857,9286,7355, -4477,9172,6559,
413 -5704,9174,5179, -6393,9172,4281, -6937,9172,2929, -7270,9172,1487,
414 -796,9467,8260, 0,9503,8356, 0,9667,8438, -796,9666,8325,
415 -807,10584,8327, -7383,9172,0, 796,9467,8260, 796,9666,8325,
416 807,10584,8327, 0,10584,8457, 0,11744,8130, 1183,11744,7939,
417 1183,12003,7939, 0,12003,8130, 0,14019,6737, 1183,14019,6547,
418 1183,16307,5288, 0,16307,5479, 0,16555,5472, 1183,16555,5281,
419 1183,20128,2191, 0,20128,2382, 0,20304,2322, 1134,20304,2131,
420 1183,20516,2156, 0,20516,2346, 0,21898,2060, 1417,21874,1842,
421 1417,23109,2185, 0,23133,2404, 0,23985,3339, 1417,23961,3121,
422 1417,24001,4252, 0,24025,4470, 1418,23893,5418, 1151,23389,6664,
423 0,23394,6882, 0,23506,7125, 1151,23501,6906, 1151,23806,6987,
424 0,23811,7205, 0,24107,7205, 1151,24102,6987, 1151,24209,7189,
425 0,24213,7407, 0,24376,7731, 1151,24371,7513, 1151,24605,7715,
426 0,24610,7933, 0,24944,7892, 1151,24939,7674, 1313,25568,7149,
427 0,25562,7367, 0,25689,7367, 1313,25695,7149, 1598,26707,7610,
428 1598,27262,7839, 1598,27842,7723, 1598,28309,7303, 1302,28414,6723,
429 1187,28523,5990, 1304,28447,4204, 0,28469,4435, 0,28654,1893,
430 1158,28789,1627, 561,28931,-1220, 0,29310,-864, 0,29574,-1062,
431 357,29608,-1244, 357,30527,-1441, 0,30496,-1259, 0,31221,-1655,
432 357,31249,-1837, 357,31511,-2627, 0,31485,-2445, 0,31485,-3302,
433 357,31511,-3484, 357,31118,-4143, 0,31089,-3961, 0,30233,-4356,
434 357,30264,-4538, 436,29406,-5256, 0,29018,-6407, 2207,29018,-6763,
435 914,28658,-6964, 0,28472,-7040, 1305,26324,-7143, 806,23401,-6784,
436 0,23246,-6890, 0,20735,-6319, 812,20723,-6228, 796,16757,-6210,
437 0,17171,-6133, 1559,24934,7435, 1566,24633,7460, 1531,24429,7334,
438 1475,24293,7131, 1440,24203,7004, 1372,23935,7015, 1364,23606,6868,
439 1389,23515,6705, 1687,28010,6952, 1687,27926,7343, 1687,27629,7491,
440 1687,27324,7552, 1687,27032,7432, 1687,26791,7148, 1642,27135,7165,
441 1642,27254,7304, 1642,27397,7364, 1642,27546,7334, 1642,27693,7261,
442 1642,27737,7088, 1611,10591,8159, 888,9327,-8560, 4491,13292,1032,
443 3840,15084,786, 3412,17397,397, 2937,20005,-35, 5108,11669,1240,
444 6344,10251,1395, 6345,10246,1248, 5109,11664,1092, 2964,20022,-132,
445 3413,17393,250, 3841,15079,638, 4491,13288,885, 3743,13207,-535,
446 3085,15092,-710, 2727,17642,-878, 2569,20636,-797, 4348,11575,-324,
447 5584,10108,-169, 5403,10079,-1732, 4167,11644,-1888,
448 2465,20842,-2651, 2522,18130,-2392, 2905,15407,-2077,
449 3562,13227,-1951, 3901,13568,-3294, 3243,15993,-3519,
450 2861,18863,-3735, 2776,22447,-4309, 4486,11792,-3132, 5783,9930,-2931,
451 5783,9930,-3054, 4486,11792,-3255, 2776,22438,-4430, 2861,18863,-3858,
452 3243,15993,-3641, 3901,13568,-3417, 6199,9466,4558, 5766,10642,5726,
453 5228,11829,6090, 4801,12891,6048, 4155,14560,5246, 3546,16847,3719,
454 3334,17643,2937, 2860,20062,1230, 4822,12054,7102, 5325,10909,7208,
455 5732,9938,6026, 4026,14701,5522, 2852,20170,1447, 3319,17801,3175,
456 3538,16955,3935, 4090,13256,1679, 2874,20073,676, 3706,15083,1464,
457 3301,17348,1117, 5931,10206,1996, 4695,11624,1840, 4445,11658,2844,
458 5681,10240,3000, 3074,17398,2202, 3456,15117,2468, 3840,13290,2683,
459 4642,13358,4019, 4257,15194,3908, 6017,10188,3746, 5237,11714,4039,
460 5621,11218,5077, 5026,12862,5058, 5134,10861,-3154, 4193,12680,-3336,
461 2832,20609,-4118, 3052,17428,-3750, 3572,14780,-3529,
462 3579,14774,-3623, 3059,17422,-3843, 2839,20596,-4211,
463 4200,12674,-3429, 5141,10855,-3248, 3908,13562,-3510,
464 3250,15987,-3735, 2868,18857,-3952, 4492,11786,-3348, 5789,9924,-3148,
465 4817,11321,-3298, 5465,10389,-3198, 4054,13118,-3470,
466 4346,12230,-3389, 2853,19681,-4056, 2825,21511,-4367,
467 3155,16705,-3789, 2963,18140,-3897, 3744,14168,-3567,
468 3415,15381,-3679, 0,14037,-6616, 845,13482,-6604, 945,10997,-7893,
469 0,11066,-7866, 981,11110,-7735, 859,13469,-6526, 899,9307,-8439,
470 813,16486,-6146, 832,20681,-6100, 826,23358,-6656, 882,10149,-8148,
471 913,12323,-7139, 822,14910,-6353, 817,18235,-6210, 827,21937,-6382,
472 846,21937,-6341, 841,14912,-6313, 931,12326,-7098, 901,10152,-8107,
473 844,23359,-6615, 851,20681,-6059, 831,16487,-6105, 919,9307,-8399,
474 869,13482,-6492, 999,11113,-7694, 860,9726,-8255, 942,10578,-7958,
475 962,11715,-7413, 900,12896,-6796, 863,14065,-6404, 818,15760,-6221,
476 828,17367,-6171, 854,19800,-5994, 848,21309,-6200, 843,22566,-6482,
477 3407,15409,-3785, 3736,14196,-3673, 2911,18365,-4048,
478 3147,16733,-3895, 2726,21608,-4455, 2808,19905,-4191,
479 4338,12259,-3495, 4046,13146,-3576, 5457,10418,-3304,
480 4809,11349,-3404, 4484,11815,-3454, 2715,22288,-4534,
481 2832,19035,-4066, 3242,16015,-3841, 3900,13590,-3616,
482 5133,10883,-3354, 4171,12742,-3524, 2803,20773,-4339,
483 3051,17450,-3949, 3571,14803,-3729, 4979,11072,-3368,
484 5619,10185,-3279, 4119,12924,-3556, 4411,12037,-3475,
485 2801,20363,-4269, 2721,21826,-4489, 3099,17092,-3922,
486 2887,18618,-4038, 3653,14499,-3701, 3325,15712,-3813,
487 3489,15106,-3757, 3818,13893,-3645, 3011,17758,-3971,
488 3194,16374,-3868, 2755,21085,-4385, 2815,19494,-4139,
489 4265,12481,-3515, 3973,13368,-3596, 5304,10595,-3318,
490 4664,11477,-3407, 5441,10207,-3361, 5350,10338,-3375,
491 5139,10672,-3428, 5058,10742,-3431, 4831,11101,-3457,
492 4742,11228,-3470, 4516,11559,-3504, 4423,11693,-3518,
493 4277,12079,-3558, 4232,12180,-3571, 4138,12522,-3597,
494 4094,12603,-3609, 3979,12935,-3675, 3943,13043,-3671,
495 3852,13383,-3699, 3813,13496,-3705, 3692,13947,-3767,
496 3653,14073,-3790, 3506,14587,-3772, 3467,14685,-3777,
497 3349,15192,-3888, 3308,15317,-3887, 3162,15800,-3957,
498 3119,15954,-3961, 3009,16528,-3946, 3002,16637,-3937,
499 2914,17260,-4014, 2909,17347,-4006, 2834,17893,-4049,
500 2813,18060,-4060, 2760,18849,-4232, 2746,18968,-4242, 850,22569,-6438,
501 855,21313,-6156, 860,19804,-5949, 834,17371,-6127, 824,15765,-6176,
502 869,14070,-6360, 906,12901,-6751, 968,11720,-7368, 948,10645,-7895,
503 865,9731,-8211, 1006,11164,-7630, 875,13487,-6447, 926,9310,-8354,
504 837,16490,-6061, 857,20684,-6015, 867,23379,-6515, 907,10157,-8062,
505 937,12331,-7053, 847,14917,-6268, 842,18236,-6111, 852,21941,-6297,
506 885,9891,-8156, 985,10905,-7724, 947,11969,-7255, 885,13125,-6649,
507 858,14493,-6314, 839,16049,-6111, 836,17735,-6083, 859,20244,-5982,
508 891,21559,-6157, 848,22883,-6508, 851,22255,-6367, 856,20999,-6085,
509 867,19042,-6000, 836,16930,-6094, 835,15341,-6222, 880,13646,-6405,
510 916,12540,-6953, 981,11337,-7564, 927,10370,-7988, 932,9518,-8285,
511 931,9583,-8174, 863,9671,-8145, 892,9982,-8037, 903,10075,-7996,
512 952,10454,-7865, 961,10550,-7832, 1008,10963,-7617, 1018,11105,-7567,
513 996,11458,-7405, 992,11582,-7342, 972,12080,-7057, 968,12210,-6984,
514 935,12620,-6792, 931,12759,-6714, 914,13199,-6441, 910,13346,-6359,
515 915,13767,-6194, 910,13941,-6175, 890,14633,-6107, 886,14783,-6091,
516 864,15476,-6035, 859,15645,-6017, 870,16062,-5957, 873,16231,-5936,
517 853,17048,-5965, 861,17185,-5974, 879,17812,-5997, 885,17961,-5997,
518 851,18486,-6138, 865,18526,-5933, 872,18761,-5875, 870,19337,-5971,
519 864,19470,-5784, 937,19590,-5786, 833,19023,-6126, 851,20344,-5894,
520 851,20576,-5912, 855,21086,-5973, 854,21224,-6003, 871,21651,-6070,
521 852,21853,-6116, 850,22332,-6224, 849,22490,-6259, 831,22924,-6338,
522 834,23240,-6364, 2743,19661,-4287, 2740,19863,-4312, 2723,20501,-4469,
523 2705,20711,-4503, 2661,21262,-4565, 2658,21427,-4593,
524 2687,22088,-4631, 2695,22209,-4643, 2774,23170,-4392,
525 2633,23103,-4527, 2681,22439,-4516, 2656,22665,-4573,
526 2552,22727,-4653, 2534,23015,-4628, 2607,23397,-4556,
527 2759,23681,-4398, 2740,24136,-4370, 2610,24100,-4580,
528 2412,24481,-5089, 2671,24389,-4569, 2397,24935,-5652,
529 2562,25022,-5528, 939,23708,-6566, 1009,24359,-6776, 1095,24912,-6886,
530 1049,24117,-6493, 990,23894,-6415, 2290,23837,-4814, 2312,23612,-4723,
531 2183,24804,-5574, 2191,24632,-5391, 1156,24771,-6650,
532 1154,24624,-6586, 1104,24526,-6656, 0,9161,-8562, 1281,9161,-8432,
533 2524,9161,-8046, 3691,9161,-7572, 4745,9161,-6945, 5662,9127,-6096,
534 3697,9192,-7581, 2531,9192,-8056, 4753,9183,-6951, 5664,9161,-6101,
535 5664,9185,-6101, 4753,9207,-6951, 2531,9216,-8055, 3697,9216,-7581,
536 3684,9232,-7560, 2518,9232,-8034, 4740,9223,-6930, 5651,9200,-6080,
537 2828,20259,1366, 2798,20256,1187, 2820,20237,692, 2843,20292,-25,
538 2874,20473,735, 2975,20508,90, 2474,20772,-759, 2660,20879,-691,
539 2471,21553,-1445, 2498,22175,-1940, 2471,24346,-2830,
540 2556,22373,-1903, 2528,21595,-1351, 2493,24314,-2936,
541 2576,22239,-2123, 2548,21461,-1571, 2823,20635,1307, 2741,20503,1328,
542 1490,23972,5392, 1489,24080,4226, 1489,24040,3095, 1489,23188,2159,
543 1489,21953,1816, 2479,22156,182, 1515,23830,2117, 1605,24415,3131,
544 1599,24460,4263, 1580,24357,5431, 1448,23885,6743, 1252,24770,5442,
545 1271,24873,4274, 1277,24828,3142, 1389,24618,2016, 1479,24733,1993,
546 1301,25010,3165, 1295,25055,4297, 1391,24890,5460, 1512,25216,5507,
547 1602,25353,4317, 1608,25308,3186, 1979,23458,-29, 1320,25312,1928,
548 1495,25055,546, 2438,25790,-488, 1605,25585,5599, 1583,26793,6150,
549 1850,26272,4298, 1578,27435,7117, 1658,27625,6884, 1671,27398,6846,
550 1678,27176,6937, 1715,27784,6626, 1744,27323,6551, 1753,26904,6776,
551 1884,28809,-1688, 1555,28655,1620, 1658,28252,4204, 1581,28263,5997,
552 1567,28312,6790, 1935,27827,4220, 1818,28249,1603, 1570,27742,6195,
553 1532,27288,6120, 2038,27074,4245, 1418,28416,228, 413,30264,-4539,
554 424,31094,-4152, 418,31478,-3497, 410,31453,-2653, 410,31190,-1863,
555 410,30468,-1467, 410,29550,-1270, 411,31041,-1902, 448,31253,-2696,
556 449,31323,-3466, 425,31182,-3496, 411,31060,-2738, 387,30899,-1932,
557 316,30806,-1957, 335,30952,-2766, 353,31089,-3521, 322,31007,-3540,
558 303,30871,-2786, 284,30725,-1976, 304,30630,-1993, 323,30776,-2802,
559 342,30912,-3557, 396,30843,-3565, 378,30707,-2811, 358,30561,-2001,
560 414,30477,-2013, 433,30623,-2822, 452,30759,-3576, 474,30560,-3616,
561 456,30424,-2861, 436,30278,-2052, 349,30194,-2077, 368,30340,-2886,
562 386,30477,-3641, 309,30389,-3665, 291,30253,-2911, 271,30107,-2102,
563 267,29996,-2124, 286,30142,-2933, 305,30278,-3688, 376,30179,-3700,
564 357,30043,-2945, 338,29897,-2136, 420,29789,-2150, 439,29935,-2959,
565 458,30071,-3713, 500,29883,-3751, 463,29601,-2187, 470,30974,-4049,
566 462,30153,-4391, 466,30563,-4220, 410,30009,-1368, 725,29372,-3225,
567 677,29335,-5130, 908,29205,-3300, 632,29533,-4803, 2587,28768,-3408,
568 2730,28611,-3456, 2404,28568,-6916, 2413,28849,-6612,
569 1904,26715,1801, 1394,25919,831, 2224,27270,-3994, 2730,28438,-3011,
570 2587,28570,-2864, 2826,28152,-3163, 2476,28668,-6523,
571 2476,28433,-6776, 2787,28338,-3507, 2216,27658,-3972,
572 2207,27950,-5907, 2311,28216,-6128, 2320,27876,-3971,
573 2311,28118,-6301, 2311,27845,-6252, 2320,27703,-3749,
574 2320,27084,-3798, 2320,26986,-4070, 2698,26705,-4014,
575 2557,26974,-3547, 2557,27739,-3485, 2572,27738,-6362,
576 2436,28204,-6533, 2436,28421,-6303, 2556,28092,-3822,
577 2431,28142,-6975, 2544,27863,-6726, 2266,28229,-1686,
578 1939,28156,-1065, 2569,27943,-2270, 2381,27545,-1682,
579 2799,27594,-3104, 2750,27866,-2738, 2539,27578,-6309,
580 2720,26853,-3133, 2788,26461,-3776, 1061,27543,-7078, 1780,27941,135,
581 1859,27747,-527, 1756,27784,691, 1855,27001,736, 1950,26711,19,
582 1964,27006,-630, 2342,26955,-1898, 2595,25515,-3113, 2147,27855,132,
583 2126,27722,601, 2213,27691,-428, 2210,27061,639, 2290,26816,34,
584 2302,27065,-515, 2347,27680,100, 2335,27602,376, 2386,27584,-229,
585 2385,27213,398, 2432,27069,42, 2439,27215,-281, 2481,27452,103,
586 1786,24263,399, 2278,24851,-562, 2372,25143,-1163, -2567,23141,-2607,
587 -2513,23156,-2494, 2513,23156,-2494, 2567,23141,-2607,
589 TRIANGLES, 657,656,159, 100,506,99, 1003,900,995, 1048,1009,901,
590 1051,901,1009, 1070,1073,1071, 1070,803,808, 1071,1077,1070,
591 1072,1006,1073, 1072,808,915, 1073,808,1072, 1077,1071,1076,
592 1078,1283,1127, 1081,1078,1079, 1081,1079,1080, 1083,1082,1086,
593 1083,747,1274, 1084,888,1085, 1085,878,1086, 1085,1086,1095,
594 1086,747,1083, 1093,1095,1086, 1094,1095,1093, 658,657,149,
595 1101,637,32, 1103,638,1108, 1105,637,1101, 1106,637,1105,
596 1108,638,1111, 111,36,158, 111,653,665, 111,665,36, 1110,858,1112,
597 1111,988,1110, 1111,638,891, 1111,891,988, 1112,858,1113,
598 1113,637,1106, 1117,779,784, 112,214,207, 112,651,210, 1124,1297,1154,
599 1125,1123,1128, 1125,1302,1154, 1127,1077,1078, 1129,791,796,
600 1130,1118,1137, 1136,1130,1137, 1137,1118,1119, 1137,1119,1121,
601 1137,1121,1126, 1142,758,759, 1142,759,760, 1142,760,761,
602 1147,1146,1154, 1150,755,756, 1150,756,757, 1154,1302,1124,
603 1155,1147,1154, 1155,1297,1156, 1155,1154,1297, 1156,1240,1155,
604 1156,1298,1157, 1157,1240,1156, 1157,1299,1273, 1157,1282,1281,
605 1158,1151,1152, 1161,768,1164, 1162,773,1161, 1162,1161,1163,
606 1163,1161,1164, 1165,1172,762, 1168,726,1178, 1168,1267,1266,
607 1169,1178,725, 1171,1172,1165, 1171,720,1172, 1171,1165,1175,
608 1178,1169,1174, 1178,1174,1278, 1179,1229,1228, 118,660,168,
609 1180,1229,1179, 1185,726,1226, 1186,1183,1184, 1186,1184,1191,
610 119,660,118, 1191,1184,1192, 1192,1184,1197, 1197,1184,1198,
611 1198,1184,1203, 1203,1184,1204, 121,116,451, 1210,1209,1230,
612 1215,1210,1230, 1216,1215,1230, 1221,1216,1230, 1222,1185,1226,
613 1222,1221,1230, 1223,1222,1226, 1224,1223,1225, 1225,1223,1226,
614 1226,726,1231, 1227,1188,1189, 1227,1189,1194, 1227,1194,1195,
615 1227,1195,1200, 1227,1200,1201, 1227,1201,1206, 1228,1224,1225,
616 1228,1225,1234, 1229,1207,1212, 1229,1212,1213, 1229,1213,1218,
617 1229,1218,1219, 1229,1219,1224, 1229,1180,1227, 1229,1224,1228,
618 1230,729,1185, 1230,1185,1222, 1231,1225,1226, 1232,1179,1234,
619 1233,744,1232, 1234,1179,1228, 1234,1225,1231, 1235,744,1233,
620 1237,744,1238, 1239,1155,1240, 1240,1157,1239, 1243,1168,1266,
621 1248,1241,1249, 1250,1249,1252, 1252,1249,1253, 1254,1248,1251,
622 1256,1241,1255, 1259,1244,1270, 1264,745,1237, 1265,1260,1272,
623 1267,1168,1178, 1267,1178,1277, 1269,1282,1270, 1270,1282,1273,
624 1271,1268,1269, 1271,1269,1270, 1273,1283,1274, 1274,1078,1081,
625 1274,1081,1083, 1274,747,1275, 1275,745,1264, 1275,1264,1265,
626 1275,1265,1272, 1275,1272,1274, 1276,1178,1278, 1277,1178,1276,
627 1280,1157,1281, 1281,1269,1277, 1282,1157,1273, 1282,1269,1281,
628 1283,1078,1274, 1292,1290,1296, 1295,1292,1296, 1296,1290,1291,
629 1296,1291,1293, 1296,1293,1294, 1296,1294,1295, 1297,1298,1156,
630 1297,1124,1298, 1298,1124,1299, 1299,1124,1273, 1299,1157,1298,
631 660,659,168, 133,128,463, 137,182,141, 138,185,137, 139,184,138,
632 140,183,139, 141,181,142, 141,182,144, 142,181,143, 143,649,142,
633 143,197,195, 144,196,181, 144,199,194, 145,183,140, 145,201,183,
634 145,140,405, 146,184,139, 146,139,183, 146,203,184, 147,185,138,
635 147,138,184, 147,205,185, 148,198,182, 148,137,185, 149,657,159,
636 150,149,159, 151,150,157, 152,151,157, 153,152,157, 157,150,158,
637 157,38,160, 157,37,38, 158,150,159, 160,153,157, 160,39,163,
638 160,38,39, 162,41,161, 163,39,40, 168,659,171, 172,155,156,
639 176,153,154, 176,154,155, 177,658,149, 179,149,150, 179,150,151,
640 180,152,153, 181,197,143, 181,141,144, 181,196,190, 182,199,144,
641 182,137,148, 182,198,189, 183,200,146, 184,202,147, 185,204,148,
642 186,204,185, 186,267,204, 186,185,205, 187,202,184, 187,265,202,
643 187,184,203, 188,200,183, 188,263,200, 188,183,201, 189,275,199,
644 189,261,255, 190,277,197, 190,259,254, 191,276,198, 191,148,204,
645 192,205,147, 192,147,202, 192,268,205, 193,203,146, 193,146,200,
646 193,266,203, 194,278,196, 194,262,249, 196,259,190, 196,144,194,
647 196,278,248, 197,181,190, 197,260,195, 197,277,247, 198,261,189,
648 198,148,191, 198,276,246, 199,182,189, 199,262,194, 199,275,245,
649 200,274,193, 201,273,188, 202,272,192, 203,271,187, 204,270,191,
650 205,269,186, 206,215,209, 206,216,90, 207,215,206, 207,214,208,
651 208,231,215, 208,230,228, 209,233,216, 209,232,227, 210,229,214,
652 210,651,226, 211,235,217, 211,234,225, 212,237,218, 212,236,224,
653 212,386,236, 213,238,223, 213,421,88, 214,230,208, 214,112,210,
654 214,229,222, 215,207,208, 215,232,209, 215,231,221, 216,206,209,
655 216,234,211, 216,233,220, 217,90,211, 217,386,212, 218,89,212,
656 218,238,213, 218,237,219, 219,342,238, 219,340,331, 220,346,234,
657 220,336,329, 221,348,232, 221,334,328, 222,350,230, 222,332,327,
658 223,341,326, 224,343,237, 224,339,325, 225,345,235, 225,337,324,
659 226,351,229, 226,651,445, 227,347,233, 227,335,322, 228,349,231,
660 228,333,321, 229,332,222, 229,210,226, 229,351,320, 230,214,222,
661 230,333,228, 230,350,319, 231,334,221, 231,208,228, 231,349,318,
662 232,215,221, 232,335,227, 232,348,317, 233,336,220, 233,209,227,
663 233,347,316, 234,216,220, 234,337,225, 234,346,315, 235,211,225,
664 235,345,314, 236,339,224, 236,383,313, 236,344,383, 237,340,219,
665 237,212,224, 237,343,312, 238,218,219, 238,341,223, 238,342,311,
666 239,269,205, 239,205,268, 240,270,204, 240,204,267, 241,271,203,
667 241,203,266, 242,272,202, 242,202,265, 243,273,201, 243,201,264,
668 244,274,200, 244,200,263, 250,145,407, 251,266,193, 251,193,274,
669 252,268,192, 252,192,272, 253,191,270, 256,263,188, 256,188,273,
670 257,265,187, 257,187,271, 258,267,186, 258,186,269, 259,196,248,
671 22,650,435, 260,197,247, 261,198,246, 262,199,245, 21,650,22,
672 275,189,255, 276,191,253, 277,190,254, 278,194,249, 323,226,445,
673 330,217,235, 330,235,338, 332,229,320, 333,230,319, 334,231,318,
674 335,232,317, 336,233,316, 337,234,315, 338,235,314, 339,236,313,
675 664,653,661, 340,237,312, 341,238,311, 342,219,331, 343,224,325,
676 344,236,386, 345,225,324, 346,220,329, 347,227,322, 348,221,328,
677 349,228,321, 665,653,664, 350,222,327, 351,226,323, 380,217,330,
678 405,408,145, 405,412,406, 406,408,405, 407,145,408, 408,341,407,
679 411,406,412, 413,412,461, 414,413,416, 415,414,416, 416,413,608,
680 418,87,421, 418,416,608, 419,223,326, 420,213,223, 420,223,419,
681 421,417,418, 421,213,420, 421,430,428, 421,87,88, 428,430,429,
682 430,421,420, 435,650,439, 439,650,440, 440,650,447, 442,651,437,
683 444,195,323, 444,323,445, 445,651,442, 446,195,444, 447,650,195,
684 447,195,446, 453,452,471, 455,453,471, 460,455,471, 461,617,413,
685 462,457,459, 465,43,44, 471,452,464, 471,464,470, 486,485,492,
686 488,458,1301, 488,631,458, 488,1301,459, 488,480,481, 488,481,489,
687 489,574,490, 490,631,489, 490,574,491, 490,632,631, 491,632,490,
688 495,105,106, 495,106,107, 495,107,108, 495,108,109, 495,109,110,
689 495,110,496, 497,495,496, 498,105,495, 498,495,497, 499,506,505,
690 505,68,71, 506,68,505, 506,67,68, 508,503,512, 509,499,505,
691 512,74,502, 512,502,601, 513,563,514, 518,517,520, 518,564,76,
692 519,75,564, 519,74,75, 523,522,561, 525,518,520, 526,518,525,
693 528,523,561, 529,528,561, 531,518,526, 532,518,531, 534,529,561,
694 535,534,561, 537,518,532, 538,518,537, 540,535,561, 546,541,563,
695 547,546,563, 552,547,563, 553,552,563, 556,519,564, 558,553,563,
696 559,557,558, 559,558,562, 560,74,519, 560,519,556, 560,556,557,
697 560,557,559, 560,559,565, 561,514,563, 562,563,513, 562,558,563,
698 562,513,568, 564,543,544, 564,544,549, 564,549,550, 564,550,555,
699 564,555,556, 565,74,560, 565,559,568, 566,84,567, 567,84,569,
700 568,559,562, 568,513,566, 571,85,598, 571,84,85, 572,84,571,
701 573,491,574, 574,489,573, 583,575,582, 585,582,588, 586,583,584,
702 587,583,586, 589,575,590, 598,85,609, 599,598,609, 653,111,654,
703 600,601,502, 600,502,577, 603,602,605, 604,578,593, 604,616,603,
704 604,603,605, 606,594,599, 606,599,609, 607,633,491, 607,616,604,
705 607,491,616, 607,458,633, 608,87,418, 608,617,607, 608,606,609,
706 608,413,617, 609,87,608, 609,86,87, 610,512,611, 611,512,601,
707 611,603,615, 612,508,512, 612,512,610, 615,616,491, 615,491,614,
708 615,603,616, 625,624,630, 627,625,630, 628,627,630, 629,628,630,
709 630,624,626, 630,626,629, 631,488,489, 632,458,631, 632,491,633,
710 633,458,632, 639,651,112, 641,774,640, 32,637,33, 667,640,668,
711 668,640,669, 669,640,774, 67,506,100, 672,669,774, 676,673,820,
712 677,676,823, 680,677,826, 688,685,1131, 712,711,754, 720,719,1172,
713 721,720,1171, 725,1178,726, 729,726,1185, 729,1230,730, 73,512,503,
714 730,1230,1184, 74,512,73, 743,82,83, 745,744,1237, 745,743,744,
715 745,1275,746, 746,85,743, 746,743,745, 746,609,85, 746,1275,86,
716 747,86,1275, 748,747,1086, 748,883,751, 748,1086,878, 751,882,752,
717 752,881,870, 76,564,75, 762,1172,763, 763,1172,719, 769,768,1161,
718 770,769,1161, 771,770,1161, 772,771,1161, 773,772,1161, 774,641,642,
719 775,638,639, 781,647,782, 655,654,111, 800,848,801, 801,847,802,
720 801,848,810, 802,846,803, 802,847,809, 803,846,808, 804,845,800,
721 805,844,804, 805,636,806, 806,844,805, 806,860,844, 807,845,804,
722 807,804,844, 807,862,845, 808,1073,1070, 809,863,846, 809,866,856,
723 810,865,847, 810,868,855, 811,800,845, 811,867,848, 812,644,645,
724 812,645,840, 813,812,842, 814,813,842, 816,815,843, 817,816,839,
725 818,817,839, 819,818,835, 820,813,814, 820,814,815, 820,815,816,
726 820,816,823, 821,672,774, 821,813,820, 822,642,643, 822,643,644,
727 822,644,812, 822,812,813, 822,813,821, 823,676,820, 824,681,825,
728 826,677,823, 83,742,743, 831,646,647, 831,647,781, 834,646,831,
729 844,859,807, 845,861,811, 846,864,808, 846,802,809, 846,863,851,
730 847,866,809, 847,801,810, 847,865,850, 848,868,810, 848,800,811,
731 848,867,849, 849,934,868, 849,932,923, 85,84,743, 850,936,866,
732 850,930,922, 851,938,864, 851,928,921, 852,861,845, 852,926,861,
733 852,845,862, 853,859,844, 853,924,859, 853,844,860, 854,811,861,
734 854,935,867, 855,937,865, 855,933,917, 856,939,863, 856,931,916,
735 857,862,807, 857,807,859, 857,927,862, 858,637,1113, 858,860,806,
736 858,925,860, 859,943,857, 86,609,746, 860,942,853, 861,941,854,
737 862,940,852, 863,928,851, 863,809,856, 863,939,909, 864,846,851,
738 864,938,908, 865,930,850, 865,810,855, 865,937,907, 866,847,850,
739 866,931,856, 866,936,906, 867,932,849, 867,811,854, 867,935,905,
740 868,848,849, 868,933,855, 868,934,904, 870,880,871, 871,879,775,
741 873,879,871, 873,895,879, 873,871,880, 874,880,870, 874,897,880,
742 874,870,881, 875,638,775, 875,775,879, 876,881,752, 876,899,881,
743 876,752,882, 877,882,751, 877,1051,882, 877,751,883, 878,883,748,
744 878,903,883, 879,894,875, 88,218,213, 880,896,873, 881,898,874,
745 882,900,876, 883,902,877, 884,902,883, 884,1005,902, 884,883,903,
746 885,898,881, 885,1001,898, 885,881,899, 886,896,880, 886,999,896,
747 886,880,897, 887,894,879, 887,997,894, 887,879,895, 888,878,1085,
748 888,903,878, 888,1006,903, 889,901,877, 889,1004,901, 889,877,902,
749 89,217,212, 89,218,88, 890,899,876, 890,1002,899, 890,876,900,
750 891,638,875, 891,875,894, 892,897,874, 892,1000,897, 892,874,898,
751 893,895,873, 893,998,895, 893,873,896, 894,1016,891, 895,1015,887,
752 896,1014,893, 897,1013,886, 898,1012,892, 899,1011,885, 656,655,159,
753 90,216,211, 90,217,89, 900,1010,890, 900,882,995, 901,1051,877,
754 902,1008,889, 903,1007,884, 91,57,58, 910,940,862, 910,862,927,
755 911,941,861, 911,861,926, 912,942,860, 912,860,925, 913,943,859,
756 913,859,924, 914,927,857, 914,857,943, 918,854,941, 919,924,853,
757 919,853,942, 920,926,852, 920,852,940, 928,863,909, 929,864,908,
758 93,92,484, 930,865,907, 931,866,906, 932,867,905, 933,868,904,
759 934,849,923, 935,854,918, 936,850,922, 937,855,917, 938,851,921,
760 939,856,916, 94,93,484, 96,95,476, 97,96,476, 976,903,1006,
761 976,1007,903, 977,902,1005, 977,1008,902, 978,901,1004, 978,1048,901,
762 979,900,1003, 979,1010,900, 98,97,476, 980,899,1002, 980,1011,899,
763 981,898,1001, 981,1012,898, 982,897,1000, 982,1013,897, 983,1014,896,
764 983,896,999, 984,1015,895, 984,895,998, 985,1016,894, 985,894,997,
765 986,893,1014, 986,998,893, 987,892,1012, 987,1000,892, 988,891,1016,
766 988,858,1110, 989,890,1010, 989,1002,890, 99,506,499, 990,889,1008,
767 990,1004,889, 991,888,1084, 991,1006,888, 992,887,1015, 992,997,887,
768 993,886,1013, 993,999,886, 994,885,1011, 994,1001,885, 995,882,1045,
769 996,884,1007, 996,1005,884,
771 QUADS, 648,666,130,131, 648,649,20,19, 657,658,15,14,
772 1000,987,1032,1031, 1001,994,1036,1035, 1002,989,1040,1039,
773 1003,995,1044,1043, 1004,990,1053,1052, 1005,996,1057,1056,
774 1006,991,1061,1060, 1007,976,1059,1058, 1008,977,1055,1054,
775 1009,906,973,1047, 101,64,67,100, 1010,979,1042,1041,
776 1011,980,1038,1037, 1012,981,1034,1033, 1013,982,1030,1029,
777 1014,983,1026,1025, 1015,984,1022,1021, 1016,985,1018,1017,
778 102,63,64,101, 103,60,63,102, 104,59,60,103, 1045,882,1051,1009,
779 1045,1009,1047,1046, 1048,978,1050,1049, 105,104,103,106,
780 106,103,102,107, 1061,991,1071,1075, 1062,939,1004,1052,
781 1062,1052,1053,1063, 1063,909,939,1062, 1064,928,1008,1054,
782 1064,1054,1055,1065, 1065,921,928,1064, 1066,938,1005,1056,
783 1066,1056,1057,1067, 1067,908,938,1066, 1068,929,1007,1058,
784 1068,1058,1059,1069, 1069,915,929,1068, 107,102,101,108,
785 1071,991,1084,1076, 1072,915,976,1006, 1073,1006,1060,1074,
786 1074,1060,1061,1075, 1075,1071,1073,1074, 1078,1077,1076,1079,
787 108,101,100,109, 1080,1079,1085,1095, 1081,1080,1082,1083,
788 1082,1080,1092,1091, 1084,1085,1087,1088, 1085,1079,1089,1087,
789 1086,1082,1091,1093, 1088,1087,1089,1090, 1089,1079,1076,1090,
790 109,100,99,110, 1090,1076,1084,1088, 1092,1080,1095,1094,
791 1093,1091,1092,1094, 1096,27,26,431, 1097,638,1103,1098,
792 658,659,16,15, 110,99,499,496, 1100,1099,1102,1104,
793 1101,1100,1104,1105, 1102,1099,1098,1103, 1106,1105,1104,1107,
794 1107,1104,1102,1109, 1109,1102,1103,1108, 1110,1109,1108,1111,
795 1112,1107,1109,1110, 1113,1106,1107,1112, 1115,819,828,1116,
796 1117,784,791,1120, 1118,1116,1117,1119, 1119,1117,1120,1121,
797 1120,791,1129,1122, 1121,1120,1122,1126, 1122,1123,1125,1126,
798 1126,1125,1154,1137, 1127,1124,1302,1303, 1128,1123,1122,1129,
799 1128,803,1070,1303, 1129,796,803,1128, 113,114,123,124,
800 1130,1115,1116,1118, 1131,1114,1115,1130, 1132,1133,1140,1141,
801 1133,1134,1139,1140, 1134,1135,1138,1139, 1136,688,1131,1130,
802 1138,1135,1136,1137, 1138,1137,1154,1146, 1139,1138,1146,1145,
803 114,115,122,123, 1140,1139,1145,1144, 1141,1140,1144,1143,
804 1142,761,1132,1141, 1143,758,1142,1141, 1143,1144,1149,1150,
805 1144,1145,1148,1149, 1145,1146,1147,1148, 1148,1147,1155,1153,
806 1149,1148,1153,1152, 115,116,121,122, 115,114,166,167,
807 1150,757,758,1143, 1150,1149,1152,1151, 1151,754,755,1150,
808 1158,712,754,1151, 1158,1152,1160,1159, 1160,1152,1153,1155,
809 1160,1155,1239,1177, 1165,762,773,1162, 1165,1162,1163,1166,
810 1166,1163,1164,1167, 1167,1159,1176,1166, 1169,1170,1173,1174,
811 1173,1170,1171,1175, 1174,1173,1177,1239, 1175,1165,1166,1176,
812 1176,1159,1160,1177, 1177,1173,1175,1176, 1182,1183,1186,1187,
813 1187,1186,1191,1190, 1188,1181,1182,1187, 1189,1188,1187,1190,
814 119,118,117,120, 1190,1191,1192,1193, 1193,1192,1197,1196,
815 1194,1189,1190,1193, 1195,1194,1193,1196, 1196,1197,1198,1199,
816 1199,1198,1203,1202, 659,660,17,16, 659,658,177,171, 120,117,113,124,
817 1200,1195,1196,1199, 1201,1200,1199,1202, 1202,1203,1204,1205,
818 1204,1184,1230,1209, 1205,1204,1209,1208, 1206,1201,1202,1205,
819 1207,1206,1205,1208, 1208,1209,1210,1211, 1211,1210,1215,1214,
820 1212,1207,1208,1211, 1213,1212,1211,1214, 1214,1215,1216,1217,
821 1217,1216,1221,1220, 1218,1213,1214,1217, 1219,1218,1217,1220,
822 122,121,128,127, 1220,1221,1222,1223, 1224,1219,1220,1223,
823 1227,1180,1181,1188, 1227,1206,1207,1229, 123,122,127,126,
824 1231,726,1168,1233, 1233,1168,1243,1235, 1234,1231,1233,1232,
825 1236,1235,1243,1242, 1236,1242,1244,1247, 1237,1238,1245,1246,
826 1238,744,1235,1236, 1239,1157,1280,1279, 124,123,126,125,
827 1244,1242,1271,1270, 1245,1238,1236,1247, 1246,1245,1262,1261,
828 1247,1244,1259,1263, 1249,1241,1256,1253, 125,126,135,136,
829 1251,1248,1249,1250, 1251,1250,1262,1263, 1254,1251,1263,1259,
830 1255,1241,1248,1254, 1257,1256,1255,1258, 1258,1255,1254,1259,
831 126,127,134,135, 1260,1253,1256,1257, 1261,1252,1253,1260,
832 1262,1250,1252,1261, 1262,1245,1247,1263, 1264,1237,1246,1265,
833 1265,1246,1261,1260, 1268,1243,1266,1269, 1269,1266,1267,1277,
834 127,128,133,134, 1271,1242,1243,1268, 1272,1260,1257,1274,
835 1273,1258,1259,1270, 1273,1124,1127,1283, 1274,1257,1258,1273,
836 1278,1174,1239,1279, 128,121,451,454, 1284,1276,1278,1285,
837 1285,1278,1279,1287, 1286,1277,1276,1284, 1287,1279,1280,1288,
838 1288,1280,1281,1289, 1289,1281,1277,1286, 129,120,124,125,
839 1290,1284,1285,1291, 1291,1285,1287,1293, 1292,1286,1284,1290,
840 1293,1287,1288,1294, 1294,1288,1289,1295, 1295,1289,1286,1292,
841 660,666,18,17, 130,666,660,119, 130,119,120,129, 1301,458,461,1300,
842 1301,1300,462,459, 1303,1070,1077,1127, 1303,1302,1125,1128,
843 131,130,129,132, 132,129,125,136, 134,133,140,139, 135,134,139,138,
844 136,135,138,137, 140,133,463,462, 141,132,136,137, 142,131,132,141,
845 154,153,160,163, 158,36,37,157, 159,655,111,158, 161,156,155,162,
846 161,41,42,448, 162,155,154,163, 163,40,41,162, 164,113,117,169,
847 164,169,170,174, 165,116,115,167, 165,156,449,450, 166,114,113,164,
848 167,166,173,172, 169,117,118,168, 170,169,168,171, 172,156,165,167,
849 173,166,164,174, 174,170,178,175, 175,178,179,180, 176,155,172,173,
850 176,173,174,175, 177,149,179,178, 178,170,171,177, 179,151,152,180,
851 180,153,176,175, 649,648,131,142, 649,650,21,20, 201,145,250,264,
852 206,90,753,869, 207,206,869,872, 263,256,400,399, 264,250,404,403,
853 265,257,306,305, 266,251,310,309, 267,258,298,297, 268,252,302,301,
854 269,239,300,299, 270,240,296,295, 271,241,308,307, 272,242,304,303,
855 273,243,402,401, 274,244,398,397, 279,260,247,280, 280,247,320,353,
856 281,277,254,282, 282,254,327,355, 283,259,248,284, 284,248,319,357,
857 285,278,249,286, 286,249,321,359, 287,262,245,288, 288,245,318,361,
858 289,275,255,290, 19,18,666,648, 290,255,328,363, 291,261,246,292,
859 292,246,317,365, 293,276,253,294, 294,253,322,367, 296,240,316,369,
860 298,258,329,371, 650,649,143,195, 300,239,315,373, 302,252,324,375,
861 304,242,314,377, 306,257,330,379, 308,241,344,382, 661,653,652,662,
862 310,251,313,385, 311,250,407,341, 312,256,273,340, 313,251,274,339,
863 314,242,265,338, 315,239,268,337, 316,240,267,336, 317,246,276,335,
864 318,245,275,334, 319,248,278,333, 662,667,668,663, 320,247,277,332,
865 321,249,262,349, 322,253,270,347, 323,195,260,351, 324,252,272,345,
866 325,244,263,343, 327,254,259,350, 328,255,261,348, 329,258,269,346,
867 663,668,669,670, 330,257,271,380, 331,243,264,342, 332,277,281,354,
868 333,278,285,358, 334,275,289,362, 335,276,293,366, 336,267,297,370,
869 337,268,301,374, 338,265,305,378, 339,274,397,387, 664,661,662,663,
870 340,273,401,391, 342,264,403,393, 343,263,399,389, 344,241,266,383,
871 345,272,303,376, 346,269,299,372, 347,270,295,368, 348,261,291,364,
872 349,262,287,360, 665,664,663,670, 350,259,283,356, 351,260,279,352,
873 352,279,280,353, 353,320,351,352, 354,281,282,355, 355,327,332,354,
874 356,283,284,357, 357,319,350,356, 358,285,286,359, 359,321,333,358,
875 36,665,670,671, 360,287,288,361, 361,318,349,360, 362,289,290,363,
876 363,328,334,362, 364,291,292,365, 365,317,348,364, 366,293,294,367,
877 367,322,335,366, 368,295,296,369, 369,316,347,368, 37,36,671,674,
878 370,297,298,371, 371,329,336,370, 372,299,300,373, 373,315,346,372,
879 374,301,302,375, 375,324,337,374, 376,303,304,377, 377,314,345,376,
880 378,305,306,379, 379,330,338,378, 38,37,674,675, 380,271,307,381,
881 381,307,308,382, 382,344,380,381, 383,266,309,384, 384,309,310,385,
882 385,313,383,384, 386,217,380,344, 388,325,339,387, 388,387,397,398,
883 39,38,675,678, 390,312,343,389, 390,389,399,400, 392,331,340,391,
884 392,391,401,402, 394,311,342,393, 394,393,403,404, 395,341,408,409,
885 396,326,341,395, 396,395,409,410, 398,244,325,388, 40,39,678,679,
886 400,256,312,390, 402,243,331,392, 404,250,311,394, 405,140,462,1300,
887 406,326,396,410, 408,406,410,409, 41,40,679,682, 411,412,413,414,
888 411,414,424,425, 412,405,1300,461, 417,415,416,418, 419,326,406,411,
889 419,411,425,423, 42,41,682,683, 420,414,415,430, 422,420,419,423,
890 424,414,420,422, 424,422,423,425, 426,417,421,428, 427,415,417,426,
891 427,426,428,429, 43,42,683,686, 430,415,427,429, 431,651,639,1096,
892 431,26,25,432, 432,25,24,433, 432,433,436,437, 433,24,23,434,
893 434,23,22,435, 436,433,434,438, 436,438,441,443, 437,651,431,432,
894 437,436,443,442, 438,434,435,439, 438,439,440,441, 44,43,686,687,
895 441,440,447,446, 442,443,444,445, 443,441,446,444, 448,42,43,465,
896 449,156,161,448, 449,448,465,464, 45,44,687,690, 450,449,464,452,
897 451,116,165,450, 451,450,452,453, 454,451,453,455, 456,454,455,460,
898 456,457,462,463, 459,457,456,460, 46,45,690,691, 461,458,607,617,
899 463,128,454,456, 465,44,470,464, 466,98,476,475, 466,49,50,98,
900 467,47,49,466, 468,46,47,467, 469,45,46,468, 47,46,691,694,
901 470,44,45,469, 470,469,472,471, 472,469,468,473, 473,468,467,474,
902 474,467,466,475, 476,95,477,475, 478,474,475,477, 479,473,474,478,
903 48,695,696,697, 480,472,473,479, 481,480,479,482, 482,479,478,483,
904 483,478,477,484, 486,483,484,485, 487,482,483,486, 487,486,494,489,
905 488,459,460,471, 488,471,472,480, 489,481,482,487, 49,47,694,48,
906 492,58,59,493, 493,59,104,501, 494,486,492,493, 494,493,510,511,
907 497,496,499,500, 498,497,500,501, 652,640,667,662, 652,653,10,9,
908 50,49,48,697, 500,499,509,510, 501,104,105,498, 502,74,565,567,
909 504,72,73,503, 505,71,72,504, 505,504,507,509, 507,504,503,508,
910 509,507,511,510, 51,50,697,698, 510,493,501,500, 511,507,508,573,
911 513,81,82,566, 514,80,81,513, 515,79,80,514, 515,514,561,522,
912 516,78,79,515, 516,515,522,521, 517,77,78,516, 518,76,77,517,
913 52,51,698,701, 520,517,516,521, 521,522,523,524, 524,523,528,527,
914 525,520,521,524, 526,525,524,527, 527,528,529,530, 53,52,701,702,
915 530,529,534,533, 531,526,527,530, 532,531,530,533, 533,534,535,536,
916 536,535,540,539, 537,532,533,536, 538,537,536,539, 539,540,541,542,
917 54,53,702,705, 541,540,561,563, 542,541,546,545, 543,538,539,542,
918 544,543,542,545, 545,546,547,548, 548,547,552,551, 549,544,545,548,
919 55,54,705,706, 550,549,548,551, 551,552,553,554, 554,553,558,557,
920 555,550,551,554, 556,555,554,557, 56,55,706,709, 564,518,538,543,
921 566,82,743,84, 567,565,568,566, 569,84,572,570, 57,56,709,710,
922 570,572,579,581, 573,489,494,511, 573,508,612,613, 577,502,567,569,
923 577,569,570,576, 577,576,605,602, 578,576,570,581, 579,572,571,580,
924 58,57,710,713, 580,571,598,599, 581,579,596,597, 582,575,589,588,
925 583,582,585,584, 586,584,596,595, 587,586,595,594, 588,589,592,593,
926 589,590,591,592, 59,58,713,714, 590,575,583,587, 590,587,594,591,
927 591,594,606,608, 592,591,608,607, 593,578,581,597, 593,592,607,604,
928 595,580,599,594, 596,579,580,595, 596,584,585,597, 597,585,588,593,
929 653,654,11,10, 60,59,714,61, 600,577,602,603, 601,600,603,611,
930 605,576,578,604, 61,716,717,62, 610,611,620,618, 611,615,623,620,
931 612,610,618,619, 613,612,619,621, 614,491,573,613, 614,613,621,622,
932 615,614,622,623, 618,620,626,624, 619,618,624,625, 62,717,718,65,
933 620,623,629,626, 621,619,625,627, 622,621,627,628, 623,622,628,629,
934 63,60,61,62, 639,638,1097,1096, 64,63,62,65, 647,634,793,782,
935 1,647,646,2, 2,646,645,3, 65,718,719,66, 3,645,644,4, 4,644,643,5,
936 5,643,642,6, 6,642,641,7, 7,641,640,8, 8,640,652,9, 28,27,1096,1097,
937 29,28,1097,1098, 66,719,720,69, 30,29,1098,1099, 31,30,1099,1100,
938 32,31,1100,1101, 33,637,636,34, 34,636,635,35, 35,635,634,0,
939 0,634,647,1, 67,64,65,66, 670,669,672,671, 671,672,673,674,
940 673,672,821,820, 674,673,676,675, 675,676,677,678, 678,677,680,679,
941 679,680,681,682, 68,67,66,69, 681,680,826,825, 682,681,684,683,
942 683,684,685,686, 684,681,824,1114, 685,684,1114,1131,
943 686,685,688,687, 687,688,689,690, 689,688,1136,1135, 69,720,721,70,
944 690,689,692,691, 691,692,693,694, 692,689,1135,1134,
945 693,692,1134,1133, 694,693,695,48, 695,693,1133,1132,
946 696,695,1132,761, 697,696,699,698, 698,699,700,701, 699,696,761,760,
947 654,655,12,11, 70,721,722,723, 700,699,760,759, 701,700,703,702,
948 702,703,704,705, 703,700,759,758, 704,703,758,757, 705,704,707,706,
949 706,707,708,709, 707,704,757,756, 708,707,756,755, 709,708,711,710,
950 71,68,69,70, 710,711,712,713, 711,708,755,754, 713,712,715,714,
951 714,715,716,61, 715,712,1158,1159, 716,715,767,766, 717,716,766,765,
952 718,717,765,764, 719,718,764,763, 72,71,70,723, 722,721,1171,1170,
953 723,722,725,724, 724,725,726,727, 725,722,1170,1169, 727,726,729,728,
954 728,729,730,731, 73,72,723,724, 731,730,733,732, 732,733,734,735,
955 733,730,1184,1183, 734,733,1183,1182, 735,734,737,736,
956 736,737,738,739, 737,734,1182,1181, 738,737,1181,1180,
957 739,738,741,740, 74,73,724,727, 740,741,742,83, 741,738,1180,1179,
958 742,741,1179,1232, 743,742,1232,744, 749,748,751,750, 75,74,727,728,
959 750,751,752,753, 753,752,870,869, 76,75,728,731, 762,763,772,773,
960 763,764,771,772, 764,765,770,771, 765,766,769,770, 766,767,768,769,
961 767,715,1159,1167, 768,767,1167,1164, 77,76,731,732, 774,642,822,821,
962 775,639,872,871, 776,780,783,787, 776,777,829,827, 778,779,828,830,
963 78,77,732,735, 780,781,782,783, 780,776,827,832, 781,780,832,831,
964 783,782,793,792, 784,779,778,785, 785,778,777,786, 786,777,776,787,
965 787,783,792,788, 788,792,795,799, 789,786,787,788, 79,78,735,736,
966 790,785,786,789, 791,784,785,790, 792,793,794,795, 793,634,635,794,
967 794,635,636,805, 795,794,805,804, 796,791,790,797, 797,790,789,798,
968 798,789,788,799, 799,795,804,800, 655,656,13,12, 80,79,736,739,
969 801,798,799,800, 802,797,798,801, 803,796,797,802, 806,636,637,858,
970 81,80,739,740, 815,814,842,843, 817,818,825,826, 818,819,824,825,
971 82,81,740,83, 823,816,817,826, 824,819,1115,1114, 827,829,836,837,
972 828,779,1117,1116, 828,819,835,830, 829,777,778,830, 831,832,833,834,
973 833,832,827,837, 834,833,841,840, 835,818,839,836, 836,829,830,835,
974 837,836,839,838, 839,816,843,838, 840,645,646,834, 841,833,837,838,
975 842,812,840,841, 842,841,838,843, 86,747,748,749, 869,870,871,872,
976 872,639,112,207, 88,87,86,749, 89,88,749,750, 656,657,14,13,
977 90,89,750,753, 91,58,492,485, 910,927,952,953, 911,926,956,957,
978 912,925,944,945, 913,924,948,949, 914,943,950,951, 915,808,864,929,
979 918,941,958,959, 919,942,946,947, 92,91,485,484, 92,56,57,91,
980 920,940,954,955, 924,919,992,1015, 925,858,988,1016, 926,920,993,1013,
981 927,914,986,1014, 928,909,990,1008, 929,908,996,1007, 93,55,56,92,
982 930,907,979,1003, 931,906,1009,1048, 932,905,981,1001,
983 933,904,980,1002, 934,923,994,1011, 935,918,987,1012,
984 936,922,995,1045, 937,917,989,1010, 938,921,977,1005,
985 939,916,978,1004, 94,54,55,93, 940,910,983,999, 941,911,982,1000,
986 942,912,985,997, 943,913,984,998, 944,925,1016,1017,
987 945,944,1017,1018, 946,942,997,1019, 947,946,1019,1020,
988 948,924,1015,1021, 949,948,1021,1022, 95,94,484,477, 95,53,54,94,
989 950,943,998,1023, 951,950,1023,1024, 952,927,1014,1025,
990 953,952,1025,1026, 954,940,999,1027, 955,954,1027,1028,
991 956,926,1013,1029, 957,956,1029,1030, 958,941,1000,1031,
992 959,958,1031,1032, 96,52,53,95, 960,935,1012,1033, 961,960,1033,1034,
993 961,905,935,960, 962,932,1001,1035, 963,962,1035,1036,
994 963,923,932,962, 964,934,1011,1037, 965,964,1037,1038,
995 965,904,934,964, 966,933,1002,1039, 967,966,1039,1040,
996 967,917,933,966, 968,937,1010,1041, 969,968,1041,1042,
997 969,907,937,968, 97,51,52,96, 970,930,1003,1043, 971,970,1043,1044,
998 971,922,930,970, 972,936,1045,1046, 973,972,1046,1047,
999 973,906,936,972, 974,931,1048,1049, 975,974,1049,1050,
1000 975,916,931,974, 976,915,1069,1059, 977,921,1065,1055,
1001 978,916,975,1050, 979,907,969,1042, 98,50,51,97, 980,904,965,1038,
1002 981,905,961,1034, 982,911,957,1030, 983,910,953,1026,
1003 984,913,949,1022, 985,912,945,1018, 986,914,951,1024,
1004 987,918,959,1032, 989,917,967,1040, 990,909,1063,1053,
1005 992,919,947,1020, 993,920,955,1028, 994,923,963,1036,
1006 995,922,971,1044, 996,908,1067,1057, 997,992,1020,1019,
1007 998,986,1024,1023, 999,993,1028,1027,
1009 /* The base of the knight */
1011 9510,0, 9510,756, SEAM, 9134,1129, 9447,1487,
1012 9447,1951, 9103,2371, STEPDOWN, 8211,3083,
1013 7167,4242, 6662,5664, 7040,7142, STEPUP, SEAM, 7935,8560,
1019 static unsigned short bishop_data[] = {
1020 VERTICES, SETBACKREF,0, 5233,26960,0, 5154,26960,909, 4918,26960,1790,
1021 4532,26960,2617, 4009,26960,3364, 3364,26960,4009, 2617,26960,4532,
1022 1790,26960,4918, 909,26960,5154, 0,26833,5233, -909,26960,5154,
1023 -1790,26960,4918, -2617,26960,4532, -3364,26960,4009,
1024 -4009,26960,3364, -4532,26960,2617, -4918,26960,1790,
1025 -5154,26960,909, -5233,26960,0, -5154,26960,-909, -4918,26960,-1790,
1026 -4532,26960,-2617, -4009,26960,-3364, -3364,26960,-4009,
1027 -2617,26960,-4532, -1790,26960,-4918, -909,26960,-5154, 0,26833,-5233,
1028 909,26960,-5154, 1790,26960,-4918, 2617,26960,-4532, 3364,26960,-4009,
1029 4009,26960,-3364, 4532,26960,-2617, 4918,26960,-1790, 5154,26960,-909,
1030 SETBACKREF,1, 3812,31178,0, 3765,31144,729, 3624,31040,1435,
1031 3395,30872,2153, 3084,30642,2820, 2701,30360,3389, 2076,29899,4102,
1032 1492,30015,4340, 845,30033,4442, 0,30044,4511, -657,30063,4443,
1033 -1481,30081,4214, -2190,30081,3884, -2830,30081,3435,
1034 -3383,30081,2883, -3831,30081,2242, -4162,30081,1534,
1035 -4364,30081,779, -4432,30081,0, -4364,30081,-779, -4162,30081,-1534,
1036 -3831,30081,-2242, -3383,30081,-2883, -2830,30081,-3435,
1037 -2190,30081,-3884, -1481,30081,-4214, -657,30063,-4443, 0,30044,-4511,
1038 845,30033,-4442, 1492,30015,-4340, 2076,29899,-4102, 2701,30360,-3388,
1039 3084,30642,-2820, 3395,30872,-2153, 3624,31040,-1435, 3765,31144,-729,
1040 240,28546,-4957, 884,29021,-4784, 1490,29467,-4537, 2076,29899,-4102,
1041 2701,30360,-3388, 3084,30642,-2820, 3395,30872,-2153,
1042 3624,31040,-1435, 3765,31144,-729, 2177,28477,4637, 1021,27605,5037,
1043 1021,27605,-5042, 2170,28478,-4644, 0,26833,-5233, 0,26833,5233,
1044 -3153,28619,-3758, 240,28546,4957, 884,29021,4784, 2076,29899,4102,
1045 2701,30360,3389, 3084,30642,2820, 3395,30872,2153, 3624,31040,1435,
1046 3765,31144,729, -719,28582,4883, 4863,28569,977, 4560,28569,1925,
1047 4064,28569,2815, 3465,28569,3723, 2622,28569,4448, 2621,28583,-4401,
1048 3473,28588,-3691, 4064,28569,-2815, 4560,28569,-1925, 4863,28569,-977,
1049 4965,28569,0, -1678,28619,4610, -3153,28619,3758, -2453,28619,4248,
1050 -4248,28619,2453, -3758,28619,3153, -4831,28619,852, -4906,28619,0,
1051 -4831,28619,-852, -4610,28619,-1678, -4248,28619,-2453,
1052 -3758,28619,-3153, -1678,28619,-4610, -2453,28619,-4248,
1053 -644,27895,5037, -644,27895,-5037, -4610,28619,1678, -719,28582,-4883,
1054 2170,28478,-4644, 1021,27605,-5042, 1021,27605,5037, 2177,28477,4637,
1055 0,26833,-5233, 0,26833,5233, -644,27895,-5037, -644,27895,5037,
1056 -644,27895,5037, -644,27895,-5037, 1490,29467,-4537, 884,29021,-4784,
1057 240,28546,-4957, 240,28546,4957, 884,29021,4784, 3812,31178,0,
1058 4349,30116,-867, 4197,30001,-1705, 3948,29813,-2492, 3610,29558,-3203,
1059 3193,29244,-3817, 2711,28880,-4315, 4349,30116,-867, 4197,30001,-1705,
1060 3948,29813,-2492, 3610,29558,-3203, 3193,29244,-3817,
1061 2711,28880,-4315, 1608,28047,-4906, 1608,28047,4901, 2711,28880,4310,
1062 3193,29244,3812, 3610,29558,3198, 3948,29813,2487, 4197,30001,1701,
1063 4349,30116,862, 4401,30155,-176, 1490,29467,4537, 1490,29467,4537,
1064 4401,30155,-176, 4349,30116,862, 4197,30001,1701, 3948,29813,2487,
1065 3610,29558,3198, 3193,29244,3812, 2711,28880,4310, 1608,28047,4901,
1068 TRIANGLES, 8,127,9, 7,128,154, 2,98,3, 121,96,10, 121,10,9, 121,138,96,
1069 122,27,26, 27,126,28, 66,135,65, 162,42,43, 165,164,141, 80,140,95,
1070 103,151,150, 102,125,152, 101,155,128, 100,157,156, 124,137,122,
1071 33,105,34, 29,153,125, 26,124,122,
1073 QUADS, 22,118,87,23, 21,117,118,22, 20,116,117,21, 19,115,116,20,
1074 18,114,115,19, 17,113,114,18, 16,123,113,17, 15,111,123,16, 14,112,111,15,
1075 13,109,112,14, 12,110,109,13, 11,108,110,12, 7,154,127,8, 110,108,47,48,
1076 135,136,64,65, 136,137,63,64, 138,139,44,45, 139,162,43,44, 109,110,48,49,
1077 147,161,107,106, 166,165,141,142, 167,166,142,143, 168,167,143,144,
1078 169,168,144,145, 112,109,49,50, 170,169,145,146, 171,81,84,172,
1079 111,112,50,51, 72,88,133,134, 73,89,88,72, 74,163,89,73, 75,90,163,74,
1080 76,91,90,75, 77,92,91,76, 78,93,92,77, 79,94,93,78, 80,95,94,79,
1081 81,170,146,84, 82,171,172,83, 86,82,83,85, 130,129,131,132, 123,111,51,52,
1082 113,123,52,53, 114,113,53,54, 115,114,54,55, 116,115,55,56, 117,116,56,57,
1083 118,117,57,58, 87,118,58,59, 120,87,59,60, 119,120,60,61, 107,161,160,97,
1084 106,107,0,35, 105,148,147,106, 105,106,35,34, 104,149,148,105,
1085 104,105,33,32, 103,150,149,104, 103,104,32,31, 102,152,151,103,
1086 102,103,31,30, 101,128,7,6, 100,101,6,5, 100,156,155,101, 99,100,5,4,
1087 99,158,157,100, 98,99,4,3, 98,159,158,99, 97,98,2,1, 97,160,159,98,
1088 96,108,11,10, 96,138,45,46, 124,119,61,62, 47,108,96,46, 63,137,124,62,
1089 0,107,97,1, 29,125,102,30, 28,126,153,29, 25,119,124,26, 24,120,119,25,
1092 /* Everything above the slit */
1094 8870,0,8870,731,SEAM,8519,1091,8811,1438,8811,1886,8626,2292,
1095 STEPDOWN,6989,2980,5927,4133,5548,5735,
1096 STEPUP,5388,7642,5228,7807,STEPDOWN,4427,8149,4057,8434,
1097 3493,9185,2816,13524,SEAM,2690,18532,5301,18690,
1098 STEPUP,6810,19005,6861,19277,6804,19625,STEPDOWN,6502,19845,
1099 SEAM,4305,20394,STEPUP,4796,20522,4924,20759,4778,20979,
1100 STEPDOWN,SEAM,3727,21207,SEAM,3726,22181,STEPUP,SEAM,4546,22705,
1101 SEAM,3846,23385,4718,24227,5226,25516,STEPUP,BACKREF,0,
1103 /* Everything below the slit */
1105 BACKREF,1,STEPDOWN,3548,31590,STEPDOWN,2724,32633,SEAM,1581,33500,
1106 2013,33901,STEPUP,2281,34500,2281,34936,STEPDOWN,1947,35372,
1107 STEPDOWN,1233,35734,STEPDOWN,0,35891,
1112 static unsigned short king_data[] = {
1114 11378,0,11378,856,SEAM,10928,1152,
1115 11302,1684,11302,2209,11065,2684,
1116 STEPDOWN,8964,3490,7603,4841,7116,6717,
1117 STEPUP,6911,8950,6705,9144,STEPDOWN,5678,9545,5204,9878,
1118 4481,10758,3696,14808,SEAM,3065,26979,
1119 5813,27155,STEPUP,7145,27507,7424,27812,7352,28288,7131,28533,
1120 5477,28882,5397,29010,5406,29363,4903,29934,
1121 STEPDOWN,SEAM,3944,30227,
1122 SEAM,3974,31478,4703,31849,STEPUP,4832,32092,4756,32370,
1123 SEAM,3975,32620,6899,39055,6877,39351,2833,39514,
1124 2786,39612,2786,39807,2734,39856,STEPDOWN,STEPDOWN,2590,39905,0,39969,
1127 QUADSTRIP,-1613,39866,0,-1543,39866,702,-1651,40481,0,-1580,40590,702,
1128 -1531,40917,0,-1465,41008,702,
1129 QUADSTRIP,-1531,40917,0,-1465,41008,702,-2956,41104,0,-2829,41187,702,
1130 -3075,41520,0,-2943,41585,702,-3075,43849,0,-2943,43805,702,
1131 -2862,44347,0,-2739,44282,702,-1116,44636,0,-1068,44554,702,
1132 QUADSTRIP,-1116,44636,0,-1068,44554,702,-1102,45692,0,-1054,45576,702,
1133 -973,45829,0,-973,45747,702,973,45829,0,973,45747,702,1102,45692,0,
1134 1054,45576,702,1116,44636,0,1068,44554,702,
1135 QUADSTRIP,1116,44636,0,1068,44554,702,2862,44347,0,2739,44282,702,
1136 3075,43849,0,2943,43805,702,3075,41520,0,2943,41585,702,2956,41104,0,
1137 2829,41187,702,1531,40917,0,1465,41008,702,
1138 QUADSTRIP,1531,40917,0,1465,41008,702,1651,40481,0,1580,40590,702,
1139 1613,39866,0,1543,39866,702,
1140 QUADSTRIP,-1543,39866,702,1543,39866,702,-1580,40590,702,
1141 1580,40590,702,-1465,41008,702,1465,41008,702,-2829,41187,702,
1142 2829,41187,702,-2943,41585,702,2943,41585,702,-2943,43805,702,
1143 2943,43805,702,-2739,44282,702,2739,44282,702,-1068,44554,702,
1144 1068,44554,702,-1054,45576,702,1054,45576,702,-973,45747,702,
1146 QUADSTRIP,-1543,39866,-702,BACKREF,0,0,-1580,40590,-702,BACKREF,0,2,
1147 -1465,41008,-702,BACKREF,0,4,
1148 QUADSTRIP,-1465,41008,-702,BACKREF,0,6,-2829,41187,-702,BACKREF,0,8,
1149 -2943,41585,-702,BACKREF,0,10,-2943,43805,-702,BACKREF,0,12,
1150 -2739,44282,-702,BACKREF,0,14,-1068,44554,-702,BACKREF,0,16,
1151 QUADSTRIP,-1068,44554,-702,BACKREF,0,18,-1054,45576,-702,
1152 BACKREF,0,20,-973,45747,-702,BACKREF,0,22,973,45747,-702,BACKREF,0,24,
1153 1054,45576,-702,BACKREF,0,26,1068,44554,-702,BACKREF,0,28,
1154 QUADSTRIP,1068,44554,-702,BACKREF,0,30,2739,44282,-702,
1155 BACKREF,0,32,2943,43805,-702,BACKREF,0,34,2943,41585,-702,BACKREF,0,36,
1156 2829,41187,-702,BACKREF,0,38,1465,41008,-702,BACKREF,0,40,
1157 QUADSTRIP,1465,41008,-702,BACKREF,0,42,1580,40590,-702,
1158 BACKREF,0,44,1543,39866,-702,BACKREF,0,46,
1159 QUADSTRIP,1543,39866,-702,-1543,39866,-702,1580,40590,-702,
1160 -1580,40590,-702,1465,41008,-702,-1465,41008,-702,2829,41187,-702,
1161 -2829,41187,-702,2943,41585,-702,-2943,41585,-702,2943,43805,-702,
1162 -2943,43805,-702,2739,44282,-702,-2739,44282,-702,1068,44554,-702,
1163 -1068,44554,-702,1054,45576,-702,-1054,45576,-702,973,45747,-702,
1168 static unsigned short queen_data[] = {
1170 11092,0,11092,914,SEAM,10653,1284,
1171 11018,1798,11018,2358,10787,2866,
1172 STEPDOWN,8739,3726,7412,5168,6937,7171,
1173 STEPUP,6737,9556,6537,9762,STEPDOWN,5536,10191,5073,10546,
1174 4368,11485,3678,15137,SEAM,3259,26879,
1175 5966,27091,STEPUP,7332,27515,7619,27882,7545,28455,7317,28751,
1176 5654,29177,5538,29326,5542,29982,5377,30278,
1177 STEPDOWN,SEAM,4194,30585,
1178 SEAM,4226,31822,5002,32218,STEPUP,5139,32477,5058,32774,
1179 SEAM,4227,33040,STEPDOWN,4421,34778,5042,36612,5874,38429,
1180 STEPUP,SEAM,PATTERN,3,6018,39660,6018,39660,6804,39977,
1181 SEAM,PATTERN,3,5015,41139,5015,41139,5673,41460,
1183 STEPDOWN,SEAM,1381,41188,
1184 1396,42332,STEPDOWN,1082,43072,481,43476,0,43543,
1188 static unsigned short pawn_data[] = {
1191 SEAM,7102,910,7345,1199,7345,1572,7191,1910,
1192 STEPDOWN,5826,2484,4941,3446,4625,4781,
1193 STEPUP,4492,6371,4358,6508,
1194 STEPDOWN,3691,6794,2912,7657,2473,10091,
1196 STEPUP,4518,15697,4695,15900,4649,16218,4509,16382,
1197 STEPDOWN,SEAM,3150,16755,STEPUP,3858,17678,4303,18752,4455,19905,
1198 4303,21058,3858,22132,
1199 STEPDOWN,3150,23055,2227,23763,STEPDOWN,1153,24208,0,24360,
1203 static unsigned short rook_data[] = {
1205 9374,0,9374,756,SEAM,9003,1062,9311,1487,
1206 9311,1951,9116,2371,8521,3083,6701,5807,SEAM,6009,7595,
1207 6167,7812,6138,8066,5926,8460,5216,12608,
1212 /* SEAM,PATTERN,5,6103,26819,6143,27971,6143,27971,6143,27971,6103,26819, */
1213 /* SEAM,PATTERN,5, 5020,26819,5053,27971,5053,27971,5053,27971, 5020,26819, */
1219 5020,26819,5020,26114,4906,25858,0,25666,
1221 POLARQUADSTRIP,20,BACKREF,0,1,1,6143,27971,BACKREF,0,2,2,6143,27971,
1222 BACKREF,0,3,3,6143,27971,BACKREF,0,4,4,6143,27971,
1223 POLARQUADSTRIP,20,BACKREF,0,6,6,6143,27971,BACKREF,0,7,7,6143,27971,
1224 BACKREF,0,8,8,6143,27971,BACKREF,0,9,9,6143,27971,
1225 POLARQUADSTRIP,20,BACKREF,0,11,11,6143,27971,BACKREF,0,12,12,6143,27971,
1226 BACKREF,0,13,13,6143,27971,BACKREF,0,14,14,6143,27971,
1227 POLARQUADSTRIP,20,BACKREF,0,16,16,6143,27971,BACKREF,0,17,17,6143,27971,
1228 BACKREF,0,18,18,6143,27971,BACKREF,0,19,19,6143,27971,
1230 POLARQUADSTRIP,20,1,5053,27971,BACKREF,1,1,2,5053,27971,BACKREF,1,2,
1231 3,5053,27971,BACKREF,1,3,4,5053,27971,BACKREF,1,4,
1232 POLARQUADSTRIP,20,6,5053,27971,BACKREF,1,6,7,5053,27971,BACKREF,1,7,
1233 8,5053,27971,BACKREF,1,8,9,5053,27971,BACKREF,1,9,
1234 POLARQUADSTRIP,20,11,5053,27971,BACKREF,1,11,12,5053,27971,BACKREF,1,12,
1235 13,5053,27971,BACKREF,1,13,14,5053,27971,BACKREF,1,14,
1236 POLARQUADSTRIP,20,16,5053,27971,BACKREF,1,16,17,5053,27971,BACKREF,1,17,
1237 18,5053,27971,BACKREF,1,18,19,5053,27971,BACKREF,1,19,
1239 POLARQUADSTRIP,20,1,5020,26819,1,6103,26819,
1240 0,5020,26819,0,6103,26819,19,5020,26819,19,6103,26819,
1241 POLARQUADSTRIP,20,6,5020,26819,6,6103,26819,
1242 5,5020,26819,5,6103,26819,4,5020,26819,4,6103,26819,
1243 POLARQUADSTRIP,20,11,5020,26819,11,6103,26819,
1244 10,5020,26819,10,6103,26819,9,5020,26819,9,6103,26819,
1245 POLARQUADSTRIP,20,16,5020,26819,16,6103,26819,
1246 15,5020,26819,15,6103,26819,14,5020,26819,14,6103,26819,
1248 POLARQUADSTRIP,20,1,5053,27971,1,6143,27971,1,5020,26819,1,6103,26819,
1249 POLARQUADSTRIP,20,4,5020,26819,4,6103,26819,4,5053,27971,4,6143,27971,
1250 POLARQUADSTRIP,20,6,5053,27971,6,6143,27971,6,5020,26819,6,6103,26819,
1251 POLARQUADSTRIP,20,9,5020,26819,9,6103,26819,9,5053,27971,9,6143,27971,
1252 POLARQUADSTRIP,20,11,5053,27971,11,6143,27971,11,5020,26819,11,6103,26819,
1253 POLARQUADSTRIP,20,14,5020,26819,14,6103,26819,14,5053,27971,14,6143,27971,
1254 POLARQUADSTRIP,20,16,5053,27971,16,6143,27971,16,5020,26819,16,6103,26819,
1255 POLARQUADSTRIP,20,19,5020,26819,19,6103,26819,19,5053,27971,19,6143,27971,
1257 POLARQUADSTRIP,20,1,6143,27971,1,5053,27971,2,6143,27971,2,5053,27971,
1258 3,6143,27971,3,5053,27971,4,6143,27971,4,5053,27971,
1259 POLARQUADSTRIP,20,6,6143,27971,6,5053,27971,7,6143,27971,7,5053,27971,
1260 8,6143,27971,8,5053,27971,9,6143,27971,9,5053,27971,
1261 POLARQUADSTRIP,20,11,6143,27971,11,5053,27971,12,6143,27971,12,5053,27971,
1262 13,6143,27971,13,5053,27971,14,6143,27971,14,5053,27971,
1263 POLARQUADSTRIP,20,16,6143,27971,16,5053,27971,17,6143,27971,17,5053,27971,
1264 18,6143,27971,18,5053,27971,19,6143,27971,19,5053,27971,
1269 static double piece_size;
1272 enumerate_ring_vertices( int steps, unsigned short *data, void *h,
1273 void (*process_vertex)(void *h,double x,double y,double z))
1276 unsigned short *pts = data;
1277 double dtheta = M_PI * 2 / steps;
1279 if( data[0] == PATTERN) {
1284 if( pts[0] == 0) steps = 1;
1286 for( i=0; i < steps; i++) {
1287 double r = pts[(i % patlen)*2] * piece_size;
1288 double y = pts[(i % patlen)*2+1] * piece_size;
1289 double theta = dtheta * i;
1291 process_vertex( h, r * cos(theta), y, r * sin(theta));
1294 return pts + patlen * 2 - data;
1298 enumerate_vertices( unsigned short *data, void *h,
1299 void (*process_vertex)(void *h,double x,double y,double z))
1302 if( data[0] == SPIN) {
1307 while(data[0] <= SEAM) {
1308 if( data[0] == SETBACKREF || data[0] == BACKREF) {
1311 } else if( data[0] == STEPUP) {
1315 } else if( data[0] == STEPDOWN) {
1319 } else if( data[0] == SEAM) {
1321 /* Visit seam vertices twice */
1322 enumerate_ring_vertices( steps, data,
1324 data += enumerate_ring_vertices( steps, data,
1327 data += enumerate_ring_vertices( steps, data,
1331 } else if( data[0] == POLARQUADSTRIP) {
1332 int steps = data[1];
1336 dtheta = M_PI * 2 / steps;
1338 while(data[0] <= SEAM) {
1339 if( data[0] != BACKREF) {
1340 double theta = dtheta * data[0];
1341 double r = data[1] * piece_size;
1342 double y = data[2] * piece_size;
1343 process_vertex( h, r * cos(theta), y, r * sin(theta));
1347 } else if( data[0] == QUADSTRIP || data[0] == VERTICES) {
1350 while(data[0] <= SEAM) {
1351 if( data[0] == SETBACKREF) {
1356 if( data[0] != BACKREF) {
1357 double x = (signed short)data[0] * piece_size;
1358 double y = data[1] * piece_size;
1359 double z = (signed short)data[2] * piece_size;
1360 process_vertex( h, x, y, z);
1364 } else if( data[0] == QUADS || data[0] == TRIANGLES) {
1366 while( data[0] <= SEAM) data++;
1374 enumerate_ring_faces( int basevertex, int steps,
1375 int prevbase, int prevsteps, void *h, int *count_ret,
1376 void (*process_face)(void *h,int v1,int v2,int v3,int v4))
1381 for( i=0; i < prevsteps; i++) {
1385 prevbase + (i ? i-1 : prevsteps-1),
1387 if (count_ret) (*count_ret)++;
1389 } else if( steps == prevsteps) {
1390 for( i=0; i < steps; i++) {
1394 prevbase + (i ? i-1 : steps-1),
1395 basevertex + (i ? i-1 : steps-1));
1396 if (count_ret) (*count_ret)++;
1401 while( j < prevsteps && steps*(1+2*j) < prevsteps*(1+2*i)) {
1403 basevertex + (i%steps),
1404 prevbase + ((j+1)%prevsteps),
1407 if (count_ret) (*count_ret)++;
1410 if( i == steps) break;
1413 basevertex + ((i+1)%steps),
1414 prevbase + (j%prevsteps),
1416 if (count_ret) (*count_ret)++;
1422 enumerate_faces( unsigned short *data, void *h, int *count_ret,
1423 void (*process_face)(void *h,int v1,int v2,int v3,int v4))
1425 int basevertex = 0, startofvertices = 0;
1429 if( data[0] == SPIN) {
1431 int prevsteps = -1,prevbase = 0;
1436 while( data[0] <= SEAM) {
1437 if( data[0] == SETBACKREF) {
1438 backrefs[data[1]] = basevertex;
1443 if( data[0] == STEPUP) {
1447 } else if( data[0] == STEPDOWN) {
1453 if( data[0] == BACKREF) {
1454 if( prevsteps != -1) {
1455 enumerate_ring_faces( backrefs[data[1]], steps,
1456 prevbase, prevsteps, h,
1457 count_ret, process_face);
1460 prevbase = backrefs[data[1]];
1464 if( data[0] == SEAM) {
1469 if( data[0] == PATTERN) {
1470 data += 2 + data[1]*2;
1472 if( data[0] == 0) steps = 1;
1476 if( prevsteps != -1) {
1477 enumerate_ring_faces( basevertex, steps,
1478 prevbase, prevsteps, h,
1479 count_ret, process_face);
1482 if( isseam) basevertex += steps;
1483 prevbase = basevertex;
1484 basevertex += steps;
1489 } else if( data[0] == POLARQUADSTRIP || data[0] == QUADSTRIP) {
1490 int v0=-1,v1=0,v2,v3;
1491 if( data[0] == POLARQUADSTRIP) data += 2;
1493 while(data[0] <= SEAM) {
1494 if( data[0] == BACKREF) {
1495 v2 = backrefs[data[1]]+data[2];
1500 if( data[3] == BACKREF) {
1501 v3 = backrefs[data[4]]+data[5];
1508 process_face( h, v0, v1, v3, v2);
1509 if (count_ret) (*count_ret)++;
1514 } else if( data[0] == VERTICES) {
1516 startofvertices = basevertex;
1517 while( data[0] <= SEAM) {
1518 if( data[0] == SETBACKREF) {
1519 backrefs[data[1]] = basevertex;
1526 } else if( data[0] == QUADS) {
1528 while( data[0] <= SEAM) {
1530 data[0] + startofvertices,
1531 data[1] + startofvertices,
1532 data[2] + startofvertices,
1533 data[3] + startofvertices);
1534 if (count_ret) (*count_ret)++;
1537 } else if( data[0] == TRIANGLES) {
1539 while( data[0] <= SEAM) {
1541 data[0] + startofvertices,
1542 data[1] + startofvertices,
1543 data[2] + startofvertices, -1);
1544 if (count_ret) (*count_ret)++;
1554 normalize( float v[3]) {
1555 float d = sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
1558 /* The direction is undefined - normalize it anyway */
1571 normcrossprod( float v1[3], float v2[3], float out[3])
1573 out[0] = v1[1] * v2[2] - v1[2] * v2[1];
1574 out[1] = v1[2] * v2[0] - v1[0] * v2[2];
1575 out[2] = v1[0] * v2[1] - v1[1] * v2[0];
1579 #define vectordiff(v1,v2,out) \
1580 ((out)[0] = (v1)[0] - (v2)[0], \
1581 (out)[1] = (v1)[1] - (v2)[1], \
1582 (out)[2] = (v1)[2] - (v2)[2])
1584 #define vectoradd(v1,v2) \
1585 ((v1)[0] += (v2)[0], \
1586 (v1)[1] += (v2)[1], \
1589 static int numverts;
1590 static float *vertices;
1591 static float *normals;
1594 count_vertex( void *dummy, double x, double y, double z)
1600 add_normal( void *dummy, int v1, int v2, int v3, int v4)
1602 float surfnormal[3],d1[3],d2[3];
1605 vectordiff( vertices + 3 * v2, vertices + 3 * v1, d1);
1606 vectordiff( vertices + 3 * v3, vertices + 3 * v1, d2);
1607 normcrossprod( d1, d2, surfnormal);
1608 vectoradd( normals + 3 * v1, surfnormal);
1609 vectoradd( normals + 3 * v2, surfnormal);
1610 vectoradd( normals + 3 * v3, surfnormal);
1612 vectordiff( vertices + 3 * v2, vertices + 3 * v1, d1);
1613 vectordiff( vertices + 3 * v4, vertices + 3 * v1, d2);
1614 normcrossprod( d1, d2, surfnormal);
1615 vectoradd( normals + 3 * v1, surfnormal);
1616 vectordiff( vertices + 3 * v3, vertices + 3 * v2, d1);
1617 vectordiff( vertices + 3 * v1, vertices + 3 * v2, d2);
1618 normcrossprod( d1, d2, surfnormal);
1619 vectoradd( normals + 3 * v2, surfnormal);
1620 vectordiff( vertices + 3 * v4, vertices + 3 * v3, d1);
1621 vectordiff( vertices + 3 * v2, vertices + 3 * v3, d2);
1622 normcrossprod( d1, d2, surfnormal);
1623 vectoradd( normals + 3 * v3, surfnormal);
1624 vectordiff( vertices + 3 * v1, vertices + 3 * v4, d1);
1625 vectordiff( vertices + 3 * v3, vertices + 3 * v4, d2);
1626 normcrossprod( d1, d2, surfnormal);
1627 vectoradd( normals + 3 * v4, surfnormal);
1632 collect_vertex( void *curvert, double x, double y, double z)
1634 (*(float**)curvert)[0] = x;
1635 (*(float**)curvert)[1] = y;
1636 (*(float**)curvert)[2] = z;
1637 (*(float**)curvert) += 3;
1641 draw_face( void *dummy, int v1, int v2, int v3, int v4)
1643 glBegin( v4 == -1 ? GL_TRIANGLES : GL_QUADS);
1644 glNormal3f( normals[v1*3], normals[v1*3+1], normals[v1*3+2]);
1645 glVertex3f( vertices[v1*3], vertices[v1*3+1], vertices[v1*3+2]);
1646 glNormal3f( normals[v2*3], normals[v2*3+1], normals[v2*3+2]);
1647 glVertex3f( vertices[v2*3], vertices[v2*3+1], vertices[v2*3+2]);
1648 glNormal3f( normals[v3*3], normals[v3*3+1], normals[v3*3+2]);
1649 glVertex3f( vertices[v3*3], vertices[v3*3+1], vertices[v3*3+2]);
1651 glNormal3f( normals[v4*3], normals[v4*3+1], normals[v4*3+2]);
1652 glVertex3f( vertices[v4*3], vertices[v4*3+1], vertices[v4*3+2]);
1658 draw_piece( unsigned short *piece_data)
1664 /* Count how many vertices this piece has */
1665 enumerate_vertices( piece_data, NULL, count_vertex);
1667 /* Allocate memory for the vertices and for the vertex normals */
1668 vertices = malloc( sizeof(float) * 3 * numverts);
1669 normals = malloc( sizeof(float) * 3 * numverts);
1670 if( !vertices || !normals) exit(1);
1672 /* Collect the vertex coordinates */
1674 enumerate_vertices( piece_data, &curvert, collect_vertex);
1676 /* Zero out the normals */
1677 for( i=0; i < numverts * 3; i++) {
1681 /* Add up all the face normals at each vertex */
1682 enumerate_faces( piece_data, NULL, NULL, add_normal);
1684 /* Normalize the vertex normals */
1685 for( i=0; i < numverts; i++) {
1686 normalize( normals + i * 3);
1689 /* Now draw the faces */
1690 enumerate_faces( piece_data, NULL, &count, draw_face);
1695 if (count <= 1) abort();
1699 void chessmodels_gen_lists( int classic, int poly_count[PIECES]) {
1701 Bool queen_only_p = classic < 0;
1702 if (classic < 0) classic = 0;
1704 piece_size = classic ? 0.095 / 100 : 0.3 / 8192;
1706 glGenLists (20); /* this is horrible! List numbers are hardcoded! */
1708 glNewList(QUEEN, GL_COMPILE);
1709 poly_count[QUEEN] = draw_piece( classic ? classic_queen_data : queen_data);
1712 if (queen_only_p) return;
1714 glNewList(KING, GL_COMPILE);
1715 poly_count[KING] = draw_piece( classic ? classic_king_data : king_data);
1718 glNewList(BISHOP, GL_COMPILE);
1719 poly_count[BISHOP] = draw_piece( classic ? classic_bishop_data : bishop_data);
1722 glNewList(KNIGHT, GL_COMPILE);
1723 poly_count[KNIGHT] = draw_piece( classic ? classic_knight_data : knight_data);
1726 glNewList(ROOK, GL_COMPILE);
1727 poly_count[ROOK] = draw_piece( classic ? classic_rook_data : rook_data);
1730 glNewList(PAWN, GL_COMPILE);
1731 poly_count[PAWN] = draw_piece( classic ? classic_pawn_data : pawn_data);