Change the kernel dev_t, representing a pointer to a specinfo structure,
[dragonfly.git] / sys / net / i4b / driver / i4b_tel.c
CommitLineData
984263bc
MD
1/*
2 * Copyright (c) 1997, 2001 Hellmuth Michaelis. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 * SUCH DAMAGE.
24 *
25 *---------------------------------------------------------------------------
26 *
27 * i4b_tel.c - device driver for ISDN telephony
28 * --------------------------------------------
29 *
30 * $FreeBSD: src/sys/i4b/driver/i4b_tel.c,v 1.10.2.4 2001/12/16 15:12:57 hm Exp $
b13267a5 31 * $DragonFly: src/sys/net/i4b/driver/i4b_tel.c,v 1.14 2006/09/10 01:26:39 dillon Exp $
984263bc
MD
32 *
33 * last edit-date: [Sat Aug 11 18:07:05 2001]
34 *
35 *---------------------------------------------------------------------------*/
36
1f2de5d4 37#include "use_i4btel.h"
984263bc
MD
38
39#if NI4BTEL > 0
40
41#undef I4BTELDEBUG
42
43#include <sys/param.h>
44#include <sys/systm.h>
45
46#include <sys/ioccom.h>
47#include <sys/poll.h>
48
49#include <sys/conf.h>
50#include <sys/uio.h>
51#include <sys/kernel.h>
52#include <sys/mbuf.h>
53#include <sys/socket.h>
54#include <net/if.h>
f18302b6 55#include <sys/thread2.h>
984263bc
MD
56#include <sys/tty.h>
57
58#ifdef DEVFS
59#include <sys/devfsext.h>
60#endif
61
1f2de5d4
MD
62#include <net/i4b/include/machine/i4b_ioctl.h>
63#include <net/i4b/include/machine/i4b_tel_ioctl.h>
64#include <net/i4b/include/machine/i4b_debug.h>
984263bc 65
1f2de5d4
MD
66#include "../include/i4b_global.h"
67#include "../include/i4b_mbuf.h"
68#include "../include/i4b_l3l4.h"
69#include "../layer4/i4b_l4.h"
984263bc
MD
70
71/* minor number: lower 6 bits = unit number */
72
73#define UNITBITS 6
74#define UNITMASK 0x3f
75#define UNIT(n) (minor(n) & UNITMASK)
76
77/* minor number: upper 2 bits = function number */
78
79#define FUNCMASK 0x03
80#define FUNC(n) (((minor(n)) >> UNITBITS) & FUNCMASK)
81
82#define FUNCTEL 0 /* 0 = normal i4btel device */
83#define FUNCDIAL 1 /* 1 = i4bteld dialout device */
84
85#define NOFUNCS 2 /* number of device classes */
86
87typedef struct {
88
89 /* used only in func = FUNCTEL */
90
91 drvr_link_t drvr_linktab; /* driver linktab */
92 isdn_link_t *isdn_linktab; /* isdn linktab */
93 int audiofmt; /* audio format conversion */
94 u_char *rcvttab; /* conversion table on read */
95 u_char *wcvttab; /* conversion table on write */
96 call_desc_t *cdp; /* call descriptor pointer */
97
98 /* used only in func = FUNCDIAL */
99
100 char result; /* result code for dial dev */
101
102 /* used in func = FUNCDIAL and func = FUNCTEL*/
103
104 int devstate; /* state of this unit */
105#define ST_IDLE 0x00 /* idle */
106#define ST_CONNECTED 0x01 /* isdn connected state */
107#define ST_ISOPEN 0x02 /* userland opened */
108#define ST_RDWAITDATA 0x04 /* userland read waiting */
109#define ST_WRWAITEMPTY 0x08 /* userland write waiting */
110#define ST_TONE 0x10 /* tone generator */
111
112 struct selinfo selp; /* select / poll */
113
114 struct i4b_tel_tones tones;
115 int toneidx;
116 int toneomega;
117 int tonefreq;
118
119} tel_sc_t;
120
121static tel_sc_t tel_sc[NI4BTEL][NOFUNCS];
122
123/* forward decl */
124
125static void tel_rx_data_rdy(int unit);
126static void tel_tx_queue_empty(int unit);
127static void tel_init_linktab(int unit);
128static void tel_connect(int unit, void *cdp);
129static void tel_disconnect(int unit, void *cdp);
130static void tel_tone(tel_sc_t *sc);
131
132/* audio format conversion tables */
133static unsigned char a2u_tab[];
134static unsigned char u2a_tab[];
135static unsigned char bitreverse[];
136static u_char sinetab[];
137
138#define PDEVSTATIC static
139
140PDEVSTATIC d_open_t i4btelopen;
141PDEVSTATIC d_close_t i4btelclose;
142PDEVSTATIC d_read_t i4btelread;
fef8985e 143PDEVSTATIC d_write_t i4btelwrite;
984263bc
MD
144PDEVSTATIC d_ioctl_t i4btelioctl;
145
984263bc
MD
146PDEVSTATIC d_poll_t i4btelpoll;
147#define POLLFIELD i4btelpoll
984263bc
MD
148
149#define CDEV_MAJOR 56
150
fef8985e
MD
151static struct dev_ops i4btel_ops = {
152 { "i4btel", CDEV_MAJOR, 0 },
153 .d_open = i4btelopen,
154 .d_close = i4btelclose,
155 .d_read = i4btelread,
156 .d_write = i4btelwrite,
157 .d_ioctl = i4btelioctl,
158 .d_poll = POLLFIELD,
984263bc
MD
159};
160
161PDEVSTATIC void i4btelinit(void *unused);
162PDEVSTATIC void i4btelattach(void *);
163
164PSEUDO_SET(i4btelattach, i4b_tel);
165
166/*===========================================================================*
167 * DEVICE DRIVER ROUTINES
168 *===========================================================================*/
169
170/*---------------------------------------------------------------------------*
171 * initialization at kernel load time
172 *---------------------------------------------------------------------------*/
173PDEVSTATIC void
174i4btelinit(void *unused)
175{
fef8985e 176 dev_ops_add(&i4btel_ops, 0, 0);
984263bc
MD
177}
178
179SYSINIT(i4bteldev, SI_SUB_DRIVERS,
180 SI_ORDER_MIDDLE+CDEV_MAJOR, &i4btelinit, NULL);
181
182/*---------------------------------------------------------------------------*
183 * interface attach routine
184 *---------------------------------------------------------------------------*/
185PDEVSTATIC void
186i4btelattach(void *dummy)
187{
188 int i, j;
189
190 printf("i4btel: %d ISDN telephony interface device(s) attached\n", NI4BTEL);
191
192 for(i=0; i < NI4BTEL; i++)
193 {
194 for(j=0; j < NOFUNCS; j++)
195 {
196 tel_sc[i][j].devstate = ST_IDLE;
197 tel_sc[i][j].audiofmt = CVT_NONE;
198 tel_sc[i][j].rcvttab = 0;
199 tel_sc[i][j].wcvttab = 0;
200 tel_sc[i][j].result = 0;
201
202 switch(j)
203 {
204 case FUNCTEL: /* normal i4btel device */
fef8985e 205 make_dev(&i4btel_ops, i,
984263bc
MD
206 UID_ROOT, GID_WHEEL,
207 0600, "i4btel%d", i);
208 break;
209
210 case FUNCDIAL: /* i4bteld dialout device */
fef8985e 211 make_dev(&i4btel_ops, i+(1<<UNITBITS),
984263bc
MD
212 UID_ROOT, GID_WHEEL,
213 0600, "i4bteld%d", i);
214 break;
215 }
216 }
217 tel_init_linktab(i);
218 }
219}
220
221/*---------------------------------------------------------------------------*
222 * open tel device
223 *---------------------------------------------------------------------------*/
224PDEVSTATIC int
fef8985e 225i4btelopen(struct dev_open_args *ap)
984263bc 226{
b13267a5 227 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
228 int unit = UNIT(dev);
229 int func = FUNC(dev);
230
231 tel_sc_t *sc;
232
233 if(unit >= NI4BTEL)
234 return(ENXIO);
235
236 sc = &tel_sc[unit][func];
237
238 if(sc->devstate & ST_ISOPEN)
239 return(EBUSY);
240
241 sc->devstate |= ST_ISOPEN;
242
243 if(func == FUNCDIAL)
244 {
245 sc->result = 0;
246 }
247
248 return(0);
249}
250
251/*---------------------------------------------------------------------------*
252 * close tel device
253 *---------------------------------------------------------------------------*/
254PDEVSTATIC int
fef8985e 255i4btelclose(struct dev_close_args *ap)
984263bc 256{
b13267a5 257 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
258 int unit = UNIT(dev);
259 int func = FUNC(dev);
260 tel_sc_t *sc;
261 int error = 0;
984263bc
MD
262
263 if(unit > NI4BTEL)
264 return(ENXIO);
265
266 sc = &tel_sc[unit][func];
267
f18302b6 268 crit_enter();
984263bc
MD
269 sc->devstate &= ~ST_TONE;
270
271 if((func == FUNCTEL) &&
272 (sc->isdn_linktab != NULL && sc->isdn_linktab->tx_queue != NULL))
273 {
274 while(!(IF_QEMPTY(sc->isdn_linktab->tx_queue)))
275 {
276 sc->devstate |= ST_WRWAITEMPTY;
277
278 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
377d4740 279 PCATCH, "wtcl", 0)) != 0)
984263bc
MD
280 {
281 break;
282 }
283 }
284 sc->devstate &= ~ST_WRWAITEMPTY;
285 }
286
287 sc->devstate &= ~ST_ISOPEN;
f18302b6 288 crit_exit();
984263bc
MD
289 wakeup((caddr_t) &sc->tones);
290
291 return(error);
292}
293
294/*---------------------------------------------------------------------------*
295 * i4btelioctl - device driver ioctl routine
296 *---------------------------------------------------------------------------*/
297PDEVSTATIC int
fef8985e 298i4btelioctl(struct dev_ioctl_args *ap)
984263bc 299{
b13267a5 300 cdev_t dev = ap->a_head.a_dev;
984263bc
MD
301 int unit = UNIT(dev);
302 int func = FUNC(dev);
303 int error = 0;
304 struct mbuf *m;
984263bc
MD
305
306 tel_sc_t *sc = &tel_sc[unit][func];
307
308 if(func == FUNCTEL)
309 {
fef8985e 310 switch(ap->a_cmd)
984263bc
MD
311 {
312 case I4B_TEL_GETAUDIOFMT:
fef8985e 313 *(int *)ap->a_data = sc->audiofmt;
984263bc
MD
314 break;
315
316 case I4B_TEL_SETAUDIOFMT:
fef8985e 317 switch (*(int *)ap->a_data)
984263bc
MD
318 {
319 case CVT_NONE:
320 sc->rcvttab = 0;
321 sc->wcvttab = 0;
322 break;
323 case CVT_ALAW2ULAW:
324 /* ISDN: a-law */
325 /* user: u-law */
326 sc->rcvttab = a2u_tab;
327 sc->wcvttab = u2a_tab;
328 break;
329 case CVT_ULAW2ALAW:
330 /* ISDN: u-law */
331 /* user: a-law */
332 sc->rcvttab = u2a_tab;
333 sc->wcvttab = a2u_tab;
334 break;
335 default:
336 error = ENODEV;
337 break;
338 }
339 if(error == 0)
fef8985e 340 sc->audiofmt = *(int *)ap->a_data;
984263bc
MD
341 break;
342
343 case I4B_TEL_EMPTYINPUTQUEUE:
f18302b6 344 crit_enter();
984263bc
MD
345 while((sc->devstate & ST_CONNECTED) &&
346 (sc->devstate & ST_ISOPEN) &&
347 !IF_QEMPTY(sc->isdn_linktab->rx_queue))
348 {
349 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
350 if(m)
351 i4b_Bfreembuf(m);
352 }
f18302b6 353 crit_exit();
984263bc
MD
354 break;
355
356 case I4B_TEL_VR_REQ:
357 {
358 msg_vr_req_t *mvr;
359
fef8985e 360 mvr = (msg_vr_req_t *)ap->a_data;
984263bc
MD
361
362 mvr->version = VERSION;
363 mvr->release = REL;
364 mvr->step = STEP;
365 break;
366 }
367 case I4B_TEL_TONES:
368 {
369 struct i4b_tel_tones *tt;
370
fef8985e 371 tt = (struct i4b_tel_tones *)ap->a_data;
f18302b6 372 crit_enter();
984263bc
MD
373 while ((sc->devstate & ST_TONE) &&
374 sc->tones.duration[sc->toneidx] != 0) {
375 if((error = tsleep((caddr_t) &sc->tones,
377d4740 376 PCATCH, "rtone", 0 )) != 0) {
f18302b6 377 crit_exit();
984263bc
MD
378 return(error);
379 }
380 }
381 if(!(sc->devstate & ST_ISOPEN)) {
f18302b6 382 crit_exit();
984263bc
MD
383 return (EIO);
384 }
385 if(!(sc->devstate & ST_CONNECTED)) {
f18302b6 386 crit_exit();
984263bc
MD
387 return (EIO);
388 }
389
390 sc->tones = *tt;
391 sc->toneidx = 0;
392 sc->tonefreq = tt->frequency[0];
393 sc->devstate |= ST_TONE;
f18302b6 394 crit_exit();
984263bc
MD
395 tel_tone(sc);
396 break;
397 }
398
399 default:
400 error = ENOTTY;
401 break;
402 }
403 }
404 else if(func == FUNCDIAL)
405 {
fef8985e 406 switch(ap->a_cmd)
984263bc
MD
407 {
408 default:
409 error = ENOTTY;
410 break;
411 }
412 }
413 return(error);
414}
415
416/*---------------------------------------------------------------------------*
417 * read from tel device
418 *---------------------------------------------------------------------------*/
419PDEVSTATIC int
fef8985e 420i4btelread(struct dev_read_args *ap)
984263bc 421{
b13267a5 422 cdev_t dev = ap->a_head.a_dev;
fef8985e 423 struct uio *uio = ap->a_uio;
984263bc
MD
424 int unit = UNIT(dev);
425 int func = FUNC(dev);
426
427 struct mbuf *m;
984263bc
MD
428 int error = 0;
429
430 tel_sc_t *sc = &tel_sc[unit][func];
431
432 if(!(sc->devstate & ST_ISOPEN))
433 return(EIO);
434
435 if(func == FUNCTEL)
436 {
f18302b6 437 crit_enter();
984263bc
MD
438
439 while((sc->devstate & ST_ISOPEN) &&
440 (sc->devstate & ST_CONNECTED) &&
441 IF_QEMPTY(sc->isdn_linktab->rx_queue))
442 {
443 sc->devstate |= ST_RDWAITDATA;
444
445 NDBGL4(L4_TELDBG, "i4btel%d, queue empty!", unit);
446
984263bc 447 if((error = tsleep((caddr_t) &sc->isdn_linktab->rx_queue,
377d4740 448 PCATCH, "rtel", 0 )) != 0)
984263bc
MD
449 {
450 sc->devstate &= ~ST_RDWAITDATA;
f18302b6 451 crit_exit();
984263bc
MD
452 return(error);
453 }
454 }
455
456 if(!(sc->devstate & ST_ISOPEN))
457 {
f18302b6 458 crit_exit();
984263bc
MD
459 return(EIO);
460 }
461
462 if(!(sc->devstate & ST_CONNECTED))
463 {
f18302b6 464 crit_exit();
984263bc
MD
465 return(EIO);
466 }
467
468
fd81ccf9 469 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
984263bc
MD
470
471 if(m && m->m_len > 0)
472 {
94332c29 473 int i;
984263bc
MD
474
475 for(i = 0; i < m->m_len; i++)
476 {
477 /* always reverse bit order from line */
478 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
479
480 /* convert if necessary */
481 if(sc->rcvttab)
482 mtod(m,u_char *)[i] = sc->rcvttab[mtod(m,u_char *)[i]];
483 }
484 error = uiomove(m->m_data, m->m_len, uio);
485
486 NDBGL4(L4_TELDBG, "i4btel%d, mbuf (%d bytes), uiomove %d!", unit, m->m_len, error);
487 }
488 else
489 {
490 NDBGL4(L4_TELDBG, "i4btel%d, empty mbuf from queue!", unit);
491 error = EIO;
492 }
493
494 if(m)
495 i4b_Bfreembuf(m);
496
f18302b6 497 crit_exit();
984263bc
MD
498 }
499 else if(func == FUNCDIAL)
500 {
f18302b6 501 crit_enter();
984263bc
MD
502 while((sc->result == 0) && (sc->devstate & ST_ISOPEN))
503 {
504 sc->devstate |= ST_RDWAITDATA;
505
506 if((error = tsleep((caddr_t) &sc->result,
377d4740 507 PCATCH, "rtel1", 0 )) != 0)
984263bc
MD
508 {
509 sc->devstate &= ~ST_RDWAITDATA;
f18302b6 510 crit_exit();
984263bc
MD
511 return(error);
512 }
513 }
514
515 if(!(sc->devstate & ST_ISOPEN))
516 {
f18302b6 517 crit_exit();
984263bc
MD
518 return(EIO);
519 }
520
521 if(sc->result != 0)
522 {
523 error = uiomove(&sc->result, 1, uio);
524 sc->result = 0;
525 }
526 else
527 {
528 error = EIO;
529 }
530
f18302b6 531 crit_exit();
984263bc
MD
532 }
533 return(error);
534}
535
536/*---------------------------------------------------------------------------*
537 * write to tel device
538 *---------------------------------------------------------------------------*/
539PDEVSTATIC int
fef8985e 540i4btelwrite(struct dev_write_args *ap)
984263bc 541{
b13267a5 542 cdev_t dev = ap->a_head.a_dev;
fef8985e 543 struct uio *uio = ap->a_uio;
984263bc
MD
544 int unit = UNIT(dev);
545 int func = FUNC(dev);
546 struct mbuf *m;
984263bc
MD
547 int error = 0;
548 tel_sc_t *sc = &tel_sc[unit][func];
549
550 if(!(sc->devstate & ST_ISOPEN))
551 {
552 return(EIO);
553 }
554
555 if(func == FUNCTEL)
556 {
f18302b6 557 crit_enter();
984263bc
MD
558
559 if(!(sc->devstate & ST_CONNECTED)) {
f18302b6 560 crit_exit();
984263bc
MD
561 return(EIO);
562 }
563
564 sc->devstate &= ~ST_TONE;
fd81ccf9 565 while((IF_QFULL(sc->isdn_linktab->tx_queue)) &&
984263bc
MD
566 (sc->devstate & ST_ISOPEN))
567 {
568 sc->devstate |= ST_WRWAITEMPTY;
569
984263bc 570 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
377d4740 571 PCATCH, "wtel", 0)) != 0)
984263bc
MD
572 {
573 sc->devstate &= ~ST_WRWAITEMPTY;
f18302b6 574 crit_exit();
984263bc
MD
575 return(error);
576 }
577 }
984263bc
MD
578
579 if(!(sc->devstate & ST_ISOPEN))
580 {
f18302b6 581 crit_exit();
984263bc
MD
582 return(EIO);
583 }
584
585 if(!(sc->devstate & ST_CONNECTED))
586 {
f18302b6 587 crit_exit();
984263bc
MD
588 return(EIO);
589 }
590
591 if((m = i4b_Bgetmbuf(BCH_MAX_DATALEN)) != NULL)
592 {
94332c29 593 int i;
984263bc
MD
594
595 m->m_len = min(BCH_MAX_DATALEN, uio->uio_resid);
596
597 error = uiomove(m->m_data, m->m_len, uio);
598
599 for(i = 0; i < m->m_len; i++)
600 {
601 /* convert if necessary */
602 if(sc->wcvttab)
603 mtod(m,u_char *)[i] = sc->wcvttab[mtod(m,u_char *)[i]];
604
605 /* always reverse bitorder to line */
606 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
607 }
608
984263bc
MD
609 if(IF_QFULL(sc->isdn_linktab->tx_queue))
610 m_freem(m);
611 else
612 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
984263bc
MD
613 (*sc->isdn_linktab->bch_tx_start)(sc->isdn_linktab->unit, sc->isdn_linktab->channel);
614 }
615
f18302b6 616 crit_exit();
984263bc
MD
617 }
618 else if(func == FUNCDIAL)
619 {
620#define CMDBUFSIZ 80
621 char cmdbuf[CMDBUFSIZ];
622 int len = min(CMDBUFSIZ-1, uio->uio_resid);
623
624 error = uiomove(cmdbuf, len, uio);
625
626 if(cmdbuf[0] == CMD_DIAL)
627 {
628 i4b_l4_dialoutnumber(BDRV_TEL, unit, len-1, &cmdbuf[1]);
629 }
630 else if(cmdbuf[0] == CMD_HUP)
631 {
632 i4b_l4_drvrdisc(BDRV_TEL, unit);
633 }
634 else if(cmdbuf[0] == CMD_KEYP)
635 {
636 i4b_l4_keypad(BDRV_TEL, unit, len-1, &cmdbuf[1]);
637 }
638 }
639 else
640 {
641 error = EIO;
642 }
643
644 return(error);
645}
646
647/*---------------------------------------------------------------------------*
648 *
649 *---------------------------------------------------------------------------*/
650#define NTONESAMP 32
651static void
652tel_tone(tel_sc_t *sc)
653{
654 struct mbuf *m;
655 u_char *p;
656 int i;
657
658 if((m = i4b_Bgetmbuf(NTONESAMP)) == NULL) {
659 printf("no mbuf in tel_tone\n");
660 return;
661 }
662 p = m->m_data;
663 m->m_len = 0;
664 for (i = 0; i < NTONESAMP && (sc->devstate & ST_TONE); i++) {
665
666 if (sc->tones.duration[sc->toneidx] > 0) {
667 if (--sc->tones.duration[sc->toneidx] == 0) {
668 sc->toneidx++;
669 if (sc->toneidx == I4B_TEL_MAXTONES) {
670 sc->devstate &= ~ST_TONE;
671 sc->toneomega = 0;
672 sc->tonefreq = 0;
673 } else if (sc->tones.frequency[sc->toneidx] == 0 &&
674 sc->tones.duration[sc->toneidx] == 0) {
675 sc->devstate &= ~ST_TONE;
676 sc->toneomega = 0;
677 sc->tonefreq = 0;
678 } else {
679 sc->tonefreq = sc->tones.frequency[sc->toneidx];
680 }
681 if (sc->tones.duration[sc->toneidx] == 0) {
682 wakeup((caddr_t) &sc->tones);
683 }
684 }
685 }
686
687 sc->toneomega += sc->tonefreq;
688 if (sc->toneomega >= 8000)
689 sc->toneomega -= 8000;
690 *p++ = bitreverse[sinetab[sc->toneomega]];
691 m->m_len++;
692 }
693 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
694 (*sc->isdn_linktab->bch_tx_start)(sc->isdn_linktab->unit, sc->isdn_linktab->channel);
695}
696
984263bc
MD
697/*---------------------------------------------------------------------------*
698 * device driver poll
699 *---------------------------------------------------------------------------*/
700PDEVSTATIC int
fef8985e 701i4btelpoll(struct dev_poll_args *ap)
984263bc 702{
b13267a5 703 cdev_t dev = ap->a_head.a_dev;
984263bc 704 int revents = 0; /* Events we found */
984263bc
MD
705 int unit = UNIT(dev);
706 int func = FUNC(dev);
707
708 tel_sc_t *sc = &tel_sc[unit][func];
709
f18302b6 710 crit_enter();
984263bc
MD
711
712 if(!(sc->devstate & ST_ISOPEN))
713 {
714 NDBGL4(L4_TELDBG, "i4btel%d, !ST_ISOPEN", unit);
f18302b6 715 crit_exit();
fef8985e 716 ap->a_events = 0;
984263bc
MD
717 return(0);
718 }
719
720 if(func == FUNCTEL)
721 {
722 /*
723 * Writes are OK if we are connected and the
724 * transmit queue can take them
725 */
726
fef8985e 727 if((ap->a_events & (POLLOUT|POLLWRNORM)) &&
984263bc
MD
728 (sc->devstate & ST_CONNECTED) &&
729 (sc->isdn_linktab != NULL) &&
fd81ccf9 730 (!IF_QFULL(sc->isdn_linktab->tx_queue)))
984263bc
MD
731 {
732 NDBGL4(L4_TELDBG, "i4btel%d, POLLOUT", unit);
fef8985e 733 revents |= (ap->a_events & (POLLOUT|POLLWRNORM));
984263bc
MD
734 }
735
736 /* ... while reads are OK if we have any data */
737
fef8985e 738 if((ap->a_events & (POLLIN|POLLRDNORM)) &&
984263bc
MD
739 (sc->devstate & ST_CONNECTED) &&
740 (sc->isdn_linktab != NULL) &&
741 (!IF_QEMPTY(sc->isdn_linktab->rx_queue)))
742 {
743 NDBGL4(L4_TELDBG, "i4btel%d, POLLIN", unit);
fef8985e 744 revents |= (ap->a_events & (POLLIN|POLLRDNORM));
984263bc
MD
745 }
746
747 if(revents == 0)
748 {
749 NDBGL4(L4_TELDBG, "i4btel%d, selrecord", unit);
fef8985e 750 selrecord(curthread, &sc->selp);
984263bc
MD
751 }
752 }
753 else if(func == FUNCDIAL)
754 {
fef8985e 755 if(ap->a_events & (POLLOUT|POLLWRNORM))
984263bc
MD
756 {
757 NDBGL4(L4_TELDBG, "i4bteld%d, POLLOUT", unit);
fef8985e 758 revents |= (ap->a_events & (POLLOUT|POLLWRNORM));
984263bc
MD
759 }
760
fef8985e 761 if(ap->a_events & (POLLIN|POLLRDNORM))
984263bc
MD
762 {
763 NDBGL4(L4_TELDBG, "i4bteld%d, POLLIN, result = %d", unit, sc->result);
764 if(sc->result != 0)
fef8985e 765 revents |= (ap->a_events & (POLLIN|POLLRDNORM));
984263bc
MD
766 }
767
768 if(revents == 0)
769 {
770 NDBGL4(L4_TELDBG, "i4bteld%d, selrecord", unit);
fef8985e 771 selrecord(curthread, &sc->selp);
984263bc
MD
772 }
773 }
f18302b6 774 crit_exit();
fef8985e
MD
775 ap->a_events = revents;
776 return (0);
984263bc
MD
777}
778
984263bc
MD
779/*===========================================================================*
780 * ISDN INTERFACE ROUTINES
781 *===========================================================================*/
782
783/*---------------------------------------------------------------------------*
784* this routine is called from L4 handler at connect time
785 *---------------------------------------------------------------------------*/
786static void
787tel_connect(int unit, void *cdp)
788{
789 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
790
791 /* audio device */
792
793 sc->cdp = (call_desc_t *)cdp;
794
795 sc->devstate |= ST_CONNECTED;
796
797 /* dialer device */
798
799 sc = &tel_sc[unit][FUNCDIAL];
800
801 if(sc->devstate == ST_ISOPEN)
802 {
803 sc->result = RSP_CONN;
804
805 if(sc->devstate & ST_RDWAITDATA)
806 {
807 sc->devstate &= ~ST_RDWAITDATA;
808 wakeup((caddr_t) &sc->result);
809 }
810 selwakeup(&sc->selp);
811 }
812}
813
814/*---------------------------------------------------------------------------*
815 * this routine is called from L4 handler at disconnect time
816 *---------------------------------------------------------------------------*/
817static void
818tel_disconnect(int unit, void *cdp)
819{
820/* call_desc_t *cd = (call_desc_t *)cdp; */
821
822 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
823
824 /* audio device */
825
826 sc->devstate &= ~ST_CONNECTED;
827
828 if(sc->devstate & ST_RDWAITDATA)
829 {
830 sc->devstate &= ~ST_RDWAITDATA;
831 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
832 }
833
834 if(sc->devstate & ST_WRWAITEMPTY)
835 {
836 sc->devstate &= ~ST_WRWAITEMPTY;
837 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
838 }
839
840 /* dialer device */
841
842 sc = &tel_sc[unit][FUNCDIAL];
843
844 if(sc->devstate & ST_ISOPEN)
845 {
846 sc->result = RSP_HUP;
847
848 if(sc->devstate & ST_RDWAITDATA)
849 {
850 sc->devstate &= ~ST_RDWAITDATA;
851 wakeup((caddr_t) &sc->result);
852 }
853 selwakeup(&sc->selp);
854
855 if (sc->devstate & ST_TONE) {
856 sc->devstate &= ~ST_TONE;
857 wakeup((caddr_t) &sc->tones);
858 }
859 }
860}
861
862/*---------------------------------------------------------------------------*
863 * feedback from daemon in case of dial problems
864 *---------------------------------------------------------------------------*/
865static void
866tel_dialresponse(int unit, int status, cause_t cause)
867{
868 tel_sc_t *sc = &tel_sc[unit][FUNCDIAL];
869
870 NDBGL4(L4_TELDBG, "i4btel%d, status=%d, cause=0x%4x", unit, status, cause);
871
872 if((sc->devstate == ST_ISOPEN) && status)
873 {
874 sc->result = RSP_NOA;
875
876 if(sc->devstate & ST_RDWAITDATA)
877 {
878 sc->devstate &= ~ST_RDWAITDATA;
879 wakeup((caddr_t) &sc->result);
880 }
881 selwakeup(&sc->selp);
882 }
883}
884
885/*---------------------------------------------------------------------------*
886 * interface up/down
887 *---------------------------------------------------------------------------*/
888static void
889tel_updown(int unit, int updown)
890{
891}
892
893/*---------------------------------------------------------------------------*
894 * this routine is called from the HSCX interrupt handler
895 * when a new frame (mbuf) has been received and was put on
896 * the rx queue.
897 *---------------------------------------------------------------------------*/
898static void
899tel_rx_data_rdy(int unit)
900{
901 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
902
903 if(sc->devstate & ST_RDWAITDATA)
904 {
905 sc->devstate &= ~ST_RDWAITDATA;
906 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
907 }
908 selwakeup(&sc->selp);
909}
910
911/*---------------------------------------------------------------------------*
912 * this routine is called from the HSCX interrupt handler
913 * when the last frame has been sent out and there is no
914 * further frame (mbuf) in the tx queue.
915 *---------------------------------------------------------------------------*/
916static void
917tel_tx_queue_empty(int unit)
918{
919 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
920
921 if(sc->devstate & ST_WRWAITEMPTY)
922 {
923 sc->devstate &= ~ST_WRWAITEMPTY;
924 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
925 }
926 if(sc->devstate & ST_TONE) {
927 tel_tone(sc);
928 } else {
929 selwakeup(&sc->selp);
930 }
931}
932
933/*---------------------------------------------------------------------------*
934 * this routine is called from the HSCX interrupt handler
935 * each time a packet is received or transmitted.
936 *---------------------------------------------------------------------------*/
937static void
938tel_activity(int unit, int rxtx)
939{
940 if(tel_sc[unit][FUNCTEL].cdp)
941 tel_sc[unit][FUNCTEL].cdp->last_active_time = SECOND;
942}
943
944/*---------------------------------------------------------------------------*
945 * return this drivers linktab address
946 *---------------------------------------------------------------------------*/
947drvr_link_t *
948tel_ret_linktab(int unit)
949{
950 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
951
952 tel_init_linktab(unit);
953 return(&sc->drvr_linktab);
954}
955
956/*---------------------------------------------------------------------------*
957 * setup the isdn_linktab for this driver
958 *---------------------------------------------------------------------------*/
959void
960tel_set_linktab(int unit, isdn_link_t *ilt)
961{
962 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
963 sc->isdn_linktab = ilt;
964}
965
966/*---------------------------------------------------------------------------*
967 * initialize this drivers linktab
968 *---------------------------------------------------------------------------*/
969static void
970tel_init_linktab(int unit)
971{
972 tel_sc_t *sc = &tel_sc[unit][FUNCTEL];
973
974 sc->drvr_linktab.unit = unit;
975 sc->drvr_linktab.bch_rx_data_ready = tel_rx_data_rdy;
976 sc->drvr_linktab.bch_tx_queue_empty = tel_tx_queue_empty;
977 sc->drvr_linktab.bch_activity = tel_activity;
978 sc->drvr_linktab.line_connected = tel_connect;
979 sc->drvr_linktab.line_disconnected = tel_disconnect;
980 sc->drvr_linktab.dial_response = tel_dialresponse;
981 sc->drvr_linktab.updown_ind = tel_updown;
982}
983
984/*===========================================================================*
985 * AUDIO FORMAT CONVERSION (produced by running g711conv)
986 *===========================================================================*/
987
988/*---------------------------------------------------------------------------*
989 * A-law to u-law conversion
990 *---------------------------------------------------------------------------*/
991static unsigned char a2u_tab[256] = {
992/* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
993/* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
994/* 10 */ 0x39, 0x3a, 0x37, 0x38, 0x3d, 0x3e, 0x3b, 0x3c,
995/* 18 */ 0x31, 0x32, 0x30, 0x30, 0x35, 0x36, 0x33, 0x34,
996/* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
997/* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
998/* 30 */ 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d,
999/* 38 */ 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15,
1000/* 40 */ 0x62, 0x63, 0x60, 0x61, 0x66, 0x67, 0x64, 0x65,
1001/* 48 */ 0x5d, 0x5d, 0x5c, 0x5c, 0x5f, 0x5f, 0x5e, 0x5e,
1002/* 50 */ 0x74, 0x76, 0x70, 0x72, 0x7c, 0x7e, 0x78, 0x7a,
1003/* 58 */ 0x6a, 0x6b, 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d,
1004/* 60 */ 0x48, 0x49, 0x46, 0x47, 0x4c, 0x4d, 0x4a, 0x4b,
1005/* 68 */ 0x40, 0x41, 0x3f, 0x3f, 0x44, 0x45, 0x42, 0x43,
1006/* 70 */ 0x56, 0x57, 0x54, 0x55, 0x5a, 0x5b, 0x58, 0x59,
1007/* 78 */ 0x4f, 0x4f, 0x4e, 0x4e, 0x52, 0x53, 0x50, 0x51,
1008/* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1009/* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1010/* 90 */ 0xb9, 0xba, 0xb7, 0xb8, 0xbd, 0xbe, 0xbb, 0xbc,
1011/* 98 */ 0xb1, 0xb2, 0xb0, 0xb0, 0xb5, 0xb6, 0xb3, 0xb4,
1012/* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1013/* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1014/* b0 */ 0x9a, 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d,
1015/* b8 */ 0x92, 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95,
1016/* c0 */ 0xe2, 0xe3, 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5,
1017/* c8 */ 0xdd, 0xdd, 0xdc, 0xdc, 0xdf, 0xdf, 0xde, 0xde,
1018/* d0 */ 0xf4, 0xf6, 0xf0, 0xf2, 0xfc, 0xfe, 0xf8, 0xfa,
1019/* d8 */ 0xea, 0xeb, 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed,
1020/* e0 */ 0xc8, 0xc9, 0xc6, 0xc7, 0xcc, 0xcd, 0xca, 0xcb,
1021/* e8 */ 0xc0, 0xc1, 0xbf, 0xbf, 0xc4, 0xc5, 0xc2, 0xc3,
1022/* f0 */ 0xd6, 0xd7, 0xd4, 0xd5, 0xda, 0xdb, 0xd8, 0xd9,
1023/* f8 */ 0xcf, 0xcf, 0xce, 0xce, 0xd2, 0xd3, 0xd0, 0xd1
1024};
1025
1026/*---------------------------------------------------------------------------*
1027 * u-law to A-law conversion
1028 *---------------------------------------------------------------------------*/
1029static unsigned char u2a_tab[256] = {
1030/* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
1031/* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
1032/* 10 */ 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d,
1033/* 18 */ 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35,
1034/* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
1035/* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
1036/* 30 */ 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12,
1037/* 38 */ 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x6a,
1038/* 40 */ 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d, 0x62, 0x63,
1039/* 48 */ 0x60, 0x61, 0x66, 0x67, 0x64, 0x65, 0x7a, 0x78,
1040/* 50 */ 0x7e, 0x7f, 0x7c, 0x7d, 0x72, 0x73, 0x70, 0x71,
1041/* 58 */ 0x76, 0x77, 0x74, 0x75, 0x4b, 0x49, 0x4f, 0x4d,
1042/* 60 */ 0x42, 0x43, 0x40, 0x41, 0x46, 0x47, 0x44, 0x45,
1043/* 68 */ 0x5a, 0x5b, 0x58, 0x59, 0x5e, 0x5f, 0x5c, 0x5d,
1044/* 70 */ 0x52, 0x52, 0x53, 0x53, 0x50, 0x50, 0x51, 0x51,
1045/* 78 */ 0x56, 0x56, 0x57, 0x57, 0x54, 0x54, 0x55, 0x55,
1046/* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1047/* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1048/* 90 */ 0xba, 0xbb, 0xb8, 0xb9, 0xbe, 0xbf, 0xbc, 0xbd,
1049/* 98 */ 0xb2, 0xb3, 0xb0, 0xb1, 0xb6, 0xb7, 0xb4, 0xb5,
1050/* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1051/* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1052/* b0 */ 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d, 0x92,
1053/* b8 */ 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95, 0xea,
1054/* c0 */ 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed, 0xe2, 0xe3,
1055/* c8 */ 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5, 0xfa, 0xf8,
1056/* d0 */ 0xfe, 0xff, 0xfc, 0xfd, 0xf2, 0xf3, 0xf0, 0xf1,
1057/* d8 */ 0xf6, 0xf7, 0xf4, 0xf5, 0xcb, 0xc9, 0xcf, 0xcd,
1058/* e0 */ 0xc2, 0xc3, 0xc0, 0xc1, 0xc6, 0xc7, 0xc4, 0xc5,
1059/* e8 */ 0xda, 0xdb, 0xd8, 0xd9, 0xde, 0xdf, 0xdc, 0xdd,
1060/* f0 */ 0xd2, 0xd2, 0xd3, 0xd3, 0xd0, 0xd0, 0xd1, 0xd1,
1061/* f8 */ 0xd6, 0xd6, 0xd7, 0xd7, 0xd4, 0xd4, 0xd5, 0xd5
1062};
1063
1064/*---------------------------------------------------------------------------*
1065 * reverse bits in a byte
1066 *---------------------------------------------------------------------------*/
1067static unsigned char bitreverse[256] = {
1068/* 00 */ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
1069/* 08 */ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
1070/* 10 */ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
1071/* 18 */ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
1072/* 20 */ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
1073/* 28 */ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
1074/* 30 */ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
1075/* 38 */ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
1076/* 40 */ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
1077/* 48 */ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
1078/* 50 */ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
1079/* 58 */ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
1080/* 60 */ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
1081/* 68 */ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
1082/* 70 */ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
1083/* 78 */ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
1084/* 80 */ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
1085/* 88 */ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
1086/* 90 */ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
1087/* 98 */ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
1088/* a0 */ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
1089/* a8 */ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
1090/* b0 */ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
1091/* b8 */ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
1092/* c0 */ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
1093/* c8 */ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
1094/* d0 */ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
1095/* d8 */ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
1096/* e0 */ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
1097/* e8 */ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
1098/* f0 */ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
1099/* f8 */ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
1100};
1101
1102static u_char sinetab[8000] = { 213, 213, 213, 213, 213, 213, 213, 212,
1103212, 212, 212, 212, 212, 215, 215, 215, 215, 215, 215, 214, 214,
1104214, 214, 214, 214, 209, 209, 209, 209, 209, 209, 209, 208, 208,
1105208, 208, 208, 208, 211, 211, 211, 211, 211, 211, 210, 210, 210,
1106210, 210, 210, 221, 221, 221, 221, 221, 221, 220, 220, 220, 220,
1107220, 220, 220, 223, 223, 223, 223, 223, 223, 222, 222, 222, 222,
1108222, 222, 217, 217, 217, 217, 217, 217, 216, 216, 216, 216, 216,
1109216, 216, 219, 219, 219, 219, 219, 219, 218, 218, 218, 218, 218,
1110218, 197, 197, 197, 197, 197, 197, 196, 196, 196, 196, 196, 196,
1111196, 199, 199, 199, 199, 199, 199, 198, 198, 198, 198, 198, 198,
1112193, 193, 193, 193, 193, 193, 192, 192, 192, 192, 192, 192, 192,
1113195, 195, 195, 195, 195, 195, 194, 194, 194, 194, 194, 194, 205,
1114205, 205, 205, 205, 205, 204, 204, 204, 204, 204, 204, 204, 207,
1115207, 207, 207, 207, 207, 206, 206, 206, 206, 206, 206, 201, 201,
1116201, 201, 201, 201, 200, 200, 200, 200, 200, 200, 200, 203, 203,
1117203, 203, 203, 203, 202, 202, 202, 202, 202, 202, 245, 245, 245,
1118245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 244, 244, 244,
1119244, 244, 244, 244, 244, 244, 244, 244, 244, 247, 247, 247, 247,
1120247, 247, 247, 247, 247, 247, 247, 247, 247, 246, 246, 246, 246,
1121246, 246, 246, 246, 246, 246, 246, 246, 246, 241, 241, 241, 241,
1122241, 241, 241, 241, 241, 241, 241, 241, 240, 240, 240, 240, 240,
1123240, 240, 240, 240, 240, 240, 240, 240, 243, 243, 243, 243, 243,
1124243, 243, 243, 243, 243, 243, 243, 243, 242, 242, 242, 242, 242,
1125242, 242, 242, 242, 242, 242, 242, 242, 253, 253, 253, 253, 253,
1126253, 253, 253, 253, 253, 253, 253, 253, 252, 252, 252, 252, 252,
1127252, 252, 252, 252, 252, 252, 252, 255, 255, 255, 255, 255, 255,
1128255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 254, 254, 254,
1129254, 254, 254, 254, 254, 254, 254, 249, 249, 249, 249, 249, 249,
1130249, 249, 249, 249, 249, 249, 249, 248, 248, 248, 248, 248, 248,
1131248, 248, 248, 248, 248, 248, 248, 251, 251, 251, 251, 251, 251,
1132251, 251, 251, 251, 251, 251, 251, 250, 250, 250, 250, 250, 250,
1133250, 250, 250, 250, 250, 250, 250, 229, 229, 229, 229, 229, 229,
1134229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1135229, 229, 229, 229, 229, 229, 229, 228, 228, 228, 228, 228, 228,
1136228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1137228, 228, 228, 228, 228, 228, 228, 228, 231, 231, 231, 231, 231,
1138231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1139231, 231, 231, 231, 231, 231, 231, 231, 231, 230, 230, 230, 230,
1140230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1141230, 230, 230, 230, 230, 230, 230, 230, 230, 225, 225, 225, 225,
1142225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1143225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 224, 224,
1144224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1145224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 227,
1146227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1147227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1148227, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1149226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1150226, 226, 226, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1151237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1152237, 237, 237, 237, 237, 236, 236, 236, 236, 236, 236, 236, 236,
1153236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1154236, 236, 236, 236, 236, 236, 236, 236, 239, 239, 239, 239, 239,
1155239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1156239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238,
1157238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1158238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1159238, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1160233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1161233, 233, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232,
1162232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1163232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 235, 235, 235,
1164235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1165235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1166235, 235, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1167234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1168234, 234, 234, 234, 234, 234, 234, 149, 149, 149, 149, 149, 149,
1169149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1170149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1171149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1172149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1173149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148,
1174148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1175148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1176148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1177148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1178148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 151, 151, 151,
1179151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1180151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1181151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1182151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1183151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1184151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1185150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1186150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1187150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1188150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1189150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1190150, 150, 150, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1191145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1192145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1193145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1194145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1195145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1196145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144,
1197144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1198144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1199144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1200144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1201144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1202144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1203144, 144, 144, 144, 144, 144, 144, 144, 144, 147, 147, 147, 147,
1204147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1205147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1206147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1207147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1208147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1209147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1210147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1211147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146,
1212146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1213146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1214146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1215146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1216146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1217146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1218146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1219146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1220146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1221146, 146, 146, 146, 146, 146, 157, 157, 157, 157, 157, 157, 157,
1222157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1223157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1224157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1225157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1226157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1227157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1228157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1229157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1230157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1231157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1232157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1233157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1234157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1235156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1236156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1237156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1238156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1239156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1240156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1241156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1242156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1243156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1244156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1245156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1246156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1247156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1248156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1249156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1250156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1251156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1252156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1253156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1254156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1255156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1256156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1257156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1258156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1259156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1260156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1261156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1262156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1263156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1264156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1265156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1266156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1267156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1268156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1269156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1270156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1271156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1272156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1273156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1274156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1275156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1276156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1277156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157,
1278157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1279157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1280157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1281157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1282157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1283157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1284157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1285157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1286157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1287157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1288157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1289157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1290157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1291157, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1292146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1293146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1294146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1295146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1296146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1297146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1298146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1299146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1300146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147,
1301147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1302147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1303147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1304147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1305147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1306147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1307147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1308147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144,
1309144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1310144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1311144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1312144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1313144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1314144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1315144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145,
1316145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1317145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1318145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1319145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1320145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1321145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1322145, 145, 145, 145, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1323150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1324150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1325150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1326150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1327150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1328150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1329151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1330151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1331151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1332151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1333151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 148, 148, 148,
1334148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1335148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1336148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1337148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1338148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1339149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1340149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1341149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1342149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1343149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1344234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1345234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1346234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 235,
1347235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1348235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 232, 232, 232,
1349232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1350232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1351232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1352233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1353233, 233, 233, 233, 233, 233, 238, 238, 238, 238, 238, 238, 238,
1354238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1355238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239,
1356239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1357239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 236,
1358236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1359236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1360236, 236, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1361237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1362237, 237, 237, 237, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1363226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1364226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227,
1365227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1366227, 227, 227, 227, 227, 227, 227, 227, 224, 224, 224, 224, 224,
1367224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1368224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225,
1369225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1370225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 230, 230,
1371230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1372230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 231, 231,
1373231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1374231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 228,
1375228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1376228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1377229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1378229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1379250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
1380251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
1381248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
1382249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
1383254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
1384255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
1385252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 253,
1386253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 242,
1387242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 243,
1388243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 240,
1389240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 241,
1390241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 246, 246,
1391246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 247,
1392247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 244, 244,
1393244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245,
1394245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 202, 202, 202,
1395202, 202, 202, 203, 203, 203, 203, 203, 203, 200, 200, 200, 200,
1396200, 200, 200, 201, 201, 201, 201, 201, 201, 206, 206, 206, 206,
1397206, 206, 207, 207, 207, 207, 207, 207, 204, 204, 204, 204, 204,
1398204, 204, 205, 205, 205, 205, 205, 205, 194, 194, 194, 194, 194,
1399194, 195, 195, 195, 195, 195, 195, 192, 192, 192, 192, 192, 192,
1400192, 193, 193, 193, 193, 193, 193, 198, 198, 198, 198, 198, 198,
1401199, 199, 199, 199, 199, 199, 196, 196, 196, 196, 196, 196, 196,
1402197, 197, 197, 197, 197, 197, 218, 218, 218, 218, 218, 218, 219,
1403219, 219, 219, 219, 219, 216, 216, 216, 216, 216, 216, 216, 217,
1404217, 217, 217, 217, 217, 222, 222, 222, 222, 222, 222, 223, 223,
1405223, 223, 223, 223, 220, 220, 220, 220, 220, 220, 220, 221, 221,
1406221, 221, 221, 221, 210, 210, 210, 210, 210, 210, 211, 211, 211,
1407211, 211, 211, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209,
1408209, 209, 209, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215,
1409215, 215, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213,
1410213, 213, 90, 90, 90, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84,
141184, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 81, 81, 81,
141281, 81, 81, 81, 80, 80, 80, 80, 80, 80, 83, 83, 83, 83, 83, 83,
141382, 82, 82, 82, 82, 82, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92,
141492, 92, 92, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 89,
141589, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 91, 91, 91, 91,
141691, 91, 90, 90, 90, 90, 90, 90, 69, 69, 69, 69, 69, 69, 68, 68,
141768, 68, 68, 68, 68, 71, 71, 71, 71, 71, 71, 70, 70, 70, 70, 70,
141870, 65, 65, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 67, 67,
141967, 67, 67, 67, 66, 66, 66, 66, 66, 66, 77, 77, 77, 77, 77, 77,
142076, 76, 76, 76, 76, 76, 76, 79, 79, 79, 79, 79, 79, 78, 78, 78,
142178, 78, 78, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72,
142275, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 117, 117, 117, 117,
1423117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116,
1424116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 119,
1425119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118,
1426118, 118, 118, 118, 118, 118, 118, 118, 113, 113, 113, 113, 113,
1427113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112,
1428112, 112, 112, 112, 112, 112, 112, 115, 115, 115, 115, 115, 115,
1429115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114,
1430114, 114, 114, 114, 114, 114, 114, 125, 125, 125, 125, 125, 125,
1431125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124,
1432124, 124, 124, 124, 124, 124, 124, 127, 127, 127, 127, 127, 127,
1433127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126,
1434126, 126, 126, 126, 126, 126, 121, 121, 121, 121, 121, 121, 121,
1435121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120,
1436120, 120, 120, 120, 120, 120, 123, 123, 123, 123, 123, 123, 123,
1437123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122,
1438122, 122, 122, 122, 122, 122, 101, 101, 101, 101, 101, 101, 101,
1439101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1440101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100,
1441100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1442100, 100, 100, 100, 100, 100, 100, 103, 103, 103, 103, 103, 103,
1443103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1444103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102,
1445102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1446102, 102, 102, 102, 102, 102, 102, 102, 102, 97, 97, 97, 97, 97,
144797, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
144897, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
144996, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
145096, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
145199, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98,
145298, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
145398, 98, 98, 98, 98, 98, 98, 98, 98, 109, 109, 109, 109, 109, 109,
1454109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1455109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108,
1456108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1457108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111,
1458111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1459111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1460111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1461110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1462110, 110, 110, 110, 110, 110, 105, 105, 105, 105, 105, 105, 105,
1463105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1464105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104,
1465104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1466104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1467104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1468107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1469107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106,
1470106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1471106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 21,
147221, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
147321, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
147421, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
147521, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
147620, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
147720, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
147820, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
147920, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
148020, 20, 20, 20, 20, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
148123, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
148223, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
148323, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
148423, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22,
148522, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
148622, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
148722, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
148822, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
148922, 22, 22, 22, 22, 22, 22, 22, 22, 22, 17, 17, 17, 17, 17, 17,
149017, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
149117, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
149217, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
149317, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
149417, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16,
149516, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
149616, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
149716, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
149816, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
149916, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
150016, 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19,
150119, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
150219, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
150319, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
150419, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
150519, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
150619, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
150719, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
150818, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
150918, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151018, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151118, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151218, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151318, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151418, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
151518, 18, 18, 18, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151829, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
151929, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152029, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152129, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152229, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152429, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152529, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
152629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 28,
152728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
152928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
153928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
154928, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155028, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155128, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155228, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155328, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155428, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155528, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155628, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155728, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155828, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
155928, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156029, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156129, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156229, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156329, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156429, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156529, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156629, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156729, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156829, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
156929, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
157029, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 18, 18, 18, 18, 18,
157118, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157218, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157318, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157418, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157518, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157618, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157718, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
157818, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19,
157919, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158019, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158119, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158219, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158319, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158419, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
158519, 19, 19, 19, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
158616, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
158716, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
158816, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
158916, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
159016, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
159116, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
159217, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
159317, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
159417, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
159517, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
159617, 17, 17, 17, 17, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
159722, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
159822, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
159922, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
160022, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
160122, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
160223, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
160323, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
160423, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
160523, 23, 23, 23, 23, 23, 23, 23, 23, 23, 20, 20, 20, 20, 20, 20,
160620, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
160720, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
160820, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
160920, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
161021, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
161121, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
161221, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
161321, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1614106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1615106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1616106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107,
1617107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1618107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 104, 104,
1619104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1620104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1621104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1622105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1623105, 105, 105, 105, 105, 105, 110, 110, 110, 110, 110, 110, 110,
1624110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1625110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111,
1626111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1627111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1628108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1629108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1630108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1631109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1632109, 109, 109, 109, 109, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
163398, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
163498, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
163599, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 96, 96,
163696, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
163796, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97,
163897, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
163997, 97, 97, 97, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1640102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1641102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1642103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1643103, 103, 103, 103, 103, 100, 100, 100, 100, 100, 100, 100, 100,
1644100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1645100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101,
1646101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1647101, 101, 101, 101, 101, 101, 122, 122, 122, 122, 122, 122, 122,
1648122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123,
1649123, 123, 123, 123, 123, 123, 120, 120, 120, 120, 120, 120, 120,
1650120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121,
1651121, 121, 121, 121, 121, 121, 126, 126, 126, 126, 126, 126, 126,
1652126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127,
1653127, 127, 127, 127, 127, 124, 124, 124, 124, 124, 124, 124, 124,
1654124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125,
1655125, 125, 125, 125, 125, 114, 114, 114, 114, 114, 114, 114, 114,
1656114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115,
1657115, 115, 115, 115, 115, 112, 112, 112, 112, 112, 112, 112, 112,
1658112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113,
1659113, 113, 113, 113, 118, 118, 118, 118, 118, 118, 118, 118, 118,
1660118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119,
1661119, 119, 119, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
1662116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
1663117, 117, 117, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 72,
166472, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 78, 78, 78, 78,
166578, 78, 79, 79, 79, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 77,
166677, 77, 77, 77, 77, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67,
166767, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 70, 70,
166870, 70, 70, 70, 71, 71, 71, 71, 71, 71, 68, 68, 68, 68, 68, 68,
166968, 69, 69, 69, 69, 69, 69, 90, 90, 90, 90, 90, 90, 91, 91, 91,
167091, 91, 91, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89,
167194, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92,
167292, 92, 93, 93, 93, 93, 93, 93, 93, 82, 82, 82, 82, 82, 82, 83,
167383, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81,
167481, 81, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 84, 84,
167584, 84, 84, 84, 85, 85, 85, 85, 85, 85, 90, 90, 90 };
1676
1677/*===========================================================================*/
1678
1679#endif /* NI4BTEL > 0 */