FreeBSD/Linux Kernel Cross Reference
sys/netisdn/i4b_tel.c
1 /*
2 * Copyright (c) 1997, 2000 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 * $Id: i4b_tel.c,v 1.14 2003/09/23 14:15:59 pooka Exp $
31 *
32 * $FreeBSD$
33 *
34 * last edit-date: [Fri Jan 5 11:33:47 2001]
35 *
36 *---------------------------------------------------------------------------*/
37
38 #include <sys/cdefs.h>
39 __KERNEL_RCSID(0, "$NetBSD: i4b_tel.c,v 1.14 2003/09/23 14:15:59 pooka Exp $");
40
41 #include "isdntel.h"
42
43 #if NISDNTEL > 0
44
45 #undef I4BTELDEBUG
46
47 #include <sys/param.h>
48 #include <sys/systm.h>
49
50 #if (defined(__FreeBSD__) && __FreeBSD__ >= 3) || defined(__NetBSD__)
51 #include <sys/ioccom.h>
52 #include <sys/poll.h>
53 #else
54 #include <sys/ioctl.h>
55 #include <sys/fcntl.h>
56 #endif
57
58 #include <sys/conf.h>
59 #include <sys/uio.h>
60 #include <sys/kernel.h>
61 #include <sys/mbuf.h>
62 #include <sys/socket.h>
63 #include <net/if.h>
64 #include <sys/proc.h>
65 #include <sys/tty.h>
66
67 #ifdef __FreeBSD__
68
69 #if defined(__FreeBSD__) && __FreeBSD__ == 3
70 #include "opt_devfs.h"
71 #endif
72
73 #ifdef DEVFS
74 #include <sys/devfsext.h>
75 #endif
76
77 #endif /* __FreeBSD__ */
78
79 #ifdef __bsdi__
80 #include <sys/device.h>
81 #endif
82
83 #ifdef __FreeBSD__
84 #include <machine/i4b_ioctl.h>
85 #include <machine/i4b_tel_ioctl.h>
86 #include <machine/i4b_debug.h>
87 #else
88 #include <netisdn/i4b_ioctl.h>
89 #include <netisdn/i4b_tel_ioctl.h>
90 #include <netisdn/i4b_debug.h>
91 #endif
92
93 #include <netisdn/i4b_global.h>
94 #include <netisdn/i4b_mbuf.h>
95 #include <netisdn/i4b_l3l4.h>
96
97 #include <netisdn/i4b_l4.h>
98
99 /* minor number: lower 6 bits = unit number */
100
101 #include <netisdn/i4b_l4.h>
102
103 #define UNITBITS 6
104 #define UNITMASK 0x3f
105 #define UNIT(n) (minor(n) & UNITMASK)
106
107 /* minor number: upper 2 bits = function number */
108
109 #define FUNCMASK 0x03
110 #define FUNC(n) (((minor(n)) >> UNITBITS) & FUNCMASK)
111
112 #define FUNCTEL 0 /* 0 = normal i4btel device */
113 #define FUNCDIAL 1 /* 1 = i4bteld dialout device */
114
115 #define NOFUNCS 2 /* number of device classes */
116
117 typedef struct tel_softc {
118
119 /* used only in func = FUNCTEL */
120
121 isdn_link_t *isdn_linktab; /* isdn linktab */
122 int audiofmt; /* audio format conversion */
123 u_char *rcvttab; /* conversion table on read */
124 u_char *wcvttab; /* conversion table on write */
125 call_desc_t *cdp; /* call descriptor pointer */
126
127 /* link from FUNCTEL to FUNCDIAL */
128 struct tel_softc * dialer;
129
130 /* used only in func = FUNCDIAL */
131
132 char result; /* result code for dial dev */
133
134 /* used in func = FUNCDIAL and func = FUNCTEL*/
135
136 int devstate; /* state of this unit */
137 #define ST_IDLE 0x00 /* idle */
138 #define ST_CONNECTED 0x01 /* isdn connected state */
139 #define ST_ISOPEN 0x02 /* userland opened */
140 #define ST_RDWAITDATA 0x04 /* userland read waiting */
141 #define ST_WRWAITEMPTY 0x08 /* userland write waiting */
142 #define ST_TONE 0x10 /* tone generator */
143
144 struct selinfo selp; /* select / poll */
145
146 #if defined(__FreeBSD__) && __FreeBSD__ == 3
147 #ifdef DEVFS
148 void *devfs_token; /* token for DEVFS */
149 #endif
150 #endif
151 struct i4b_tel_tones tones;
152 int toneidx;
153 int toneomega;
154 int tonefreq;
155
156 } tel_sc_t;
157
158 static tel_sc_t tel_sc[NISDNTEL][NOFUNCS];
159
160 /* forward decl */
161
162 static void tel_rx_data_rdy(void *softc);
163 static void tel_tx_queue_empty(void *softc);
164 static void tel_connect(void *softc, void *cdp);
165 static void tel_disconnect(void *softc, void *cdp);
166 static void tel_tone(tel_sc_t *sc);
167 static void tel_activity(void *softc, int rxtx);
168 static void tel_updown(void *softc, int updown);
169 static void tel_dialresponse(void *softc, int status, cause_t cause);
170 static void* tel_get_softc(int unit);
171 static void tel_set_linktab(void *softc, isdn_link_t *ilt);
172
173 /* audio format conversion tables */
174 static unsigned char a2u_tab[];
175 static unsigned char u2a_tab[];
176 static unsigned char bitreverse[];
177 static u_char sinetab[];
178
179 #ifndef __FreeBSD__
180 #define PDEVSTATIC /* - not static - */
181 PDEVSTATIC void isdntelattach __P((void));
182 PDEVSTATIC int isdntelioctl __P((dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p));
183
184 int isdntelopen __P((dev_t dev, int flag, int fmt, struct proc *p));
185 int isdntelclose __P((dev_t dev, int flag, int fmt, struct proc *p));
186 int isdntelread __P((dev_t dev, struct uio *uio, int ioflag));
187 int isdntelwrite __P((dev_t dev, struct uio * uio, int ioflag));
188
189 #ifdef OS_USES_POLL
190 int isdntelpoll __P((dev_t dev, int events, struct proc *p));
191 int isdntelkqfilter __P((dev_t dev, struct knote *kn));
192 #else
193 int isdntelsel __P((dev_t dev, int rw, struct proc *p));
194 #endif
195
196 #endif /* __FreeBSD__ */
197
198 #ifdef __NetBSD__
199 const struct cdevsw isdntel_cdevsw = {
200 isdntelopen, isdntelclose, isdntelread, isdntelwrite, isdntelioctl,
201 nostop, notty, isdntelpoll, nommap, isdntelkqfilter,
202 };
203 #endif /* __NetBSD__ */
204
205 #if BSD > 199306 && defined(__FreeBSD__)
206
207 #define PDEVSTATIC static
208 PDEVSTATIC d_open_t i4btelopen;
209 PDEVSTATIC d_close_t i4btelclose;
210 PDEVSTATIC d_read_t i4btelread;
211 PDEVSTATIC d_read_t i4btelwrite;
212 PDEVSTATIC d_ioctl_t i4btelioctl;
213
214 #ifdef OS_USES_POLL
215 PDEVSTATIC d_poll_t i4btelpoll;
216 #define POLLFIELD i4btelpoll
217 #else
218 PDEVSTATIC d_select_t i4btelsel;
219 #define POLLFIELD i4btelsel
220 #endif
221
222 #define CDEV_MAJOR 56
223
224 #if defined(__FreeBSD__) && __FreeBSD__ >= 4
225 static struct cdevsw i4btel_cdevsw = {
226 /* open */ i4btelopen,
227 /* close */ i4btelclose,
228 /* read */ i4btelread,
229 /* write */ i4btelwrite,
230 /* ioctl */ i4btelioctl,
231 /* poll */ POLLFIELD,
232 /* mmap */ nommap,
233 /* strategy */ nostrategy,
234 /* name */ "i4btel",
235 /* maj */ CDEV_MAJOR,
236 /* dump */ nodump,
237 /* psize */ nopsize,
238 /* flags */ 0,
239 /* bmaj */ -1
240 };
241 #else
242 static struct cdevsw i4btel_cdevsw = {
243 i4btelopen, i4btelclose, i4btelread, i4btelwrite,
244 i4btelioctl, nostop, noreset, nodevtotty,
245 POLLFIELD, nommap, NULL, "i4btel", NULL, -1
246 };
247 #endif
248
249 PDEVSTATIC void isdntelinit(void *unused);
250 PDEVSTATIC void isdntelattach(void *);
251
252 PSEUDO_SET(isdntelattach, i4b_tel);
253
254 /*===========================================================================*
255 * DEVICE DRIVER ROUTINES
256 *===========================================================================*/
257
258 /*---------------------------------------------------------------------------*
259 * initialization at kernel load time
260 *---------------------------------------------------------------------------*/
261 PDEVSTATIC void
262 isdntelinit(void *unused)
263 {
264 #if defined(__FreeBSD__) && __FreeBSD__ >= 4
265 cdevsw_add(&i4btel_cdevsw);
266 #else
267 dev_t dev = makedev(CDEV_MAJOR, 0);
268 cdevsw_add(&dev, &i4btel_cdevsw, NULL);
269 #endif
270 }
271
272 SYSINIT(i4bteldev, SI_SUB_DRIVERS,
273 SI_ORDER_MIDDLE+CDEV_MAJOR, &i4btelinit, NULL);
274
275 #endif /* BSD > 199306 && defined(__FreeBSD__) */
276
277 #ifdef __bsdi__
278
279 int i4btelsel(dev_t dev, int rw, struct proc *p);
280 int i4btelmatch(struct device *parent, struct cfdata *cf, void *aux);
281 void dummy_i4btelattach(struct device*, struct device *, void *);
282
283 #define CDEV_MAJOR 62
284
285 static struct cfdriver i4btelcd =
286 { NULL, "i4btel", i4btelmatch, dummy_i4btelattach, DV_DULL,
287 sizeof(struct cfdriver) };
288 struct devsw i4btelsw =
289 { &i4btelcd,
290 i4btelopen, i4btelclose, i4btelread, i4btelwrite,
291 i4btelioctl, i4btelsel, nommap, nostrat,
292 nodump, nopsize, 0, nostop
293 };
294
295 int
296 i4btelmatch(struct device *parent, struct cfdata *cf, void *aux)
297 {
298 NDBGL4(L4_TELDBG, "aux=0x%x", aux);
299 return 1;
300 }
301
302 void
303 dummy_i4btelattach(struct device *parent, struct device *self, void *aux)
304 {
305 NDBGL4(L4_TELDBG, "aux=0x%x", aux);
306 }
307
308 #endif /* __bsdi__ */
309
310 static const struct isdn_l4_driver_functions
311 tel_driver = {
312 tel_rx_data_rdy,
313 tel_tx_queue_empty,
314 tel_activity,
315 tel_connect,
316 tel_disconnect,
317 tel_dialresponse,
318 tel_updown,
319 tel_get_softc,
320 tel_set_linktab,
321 NULL
322 };
323
324 static int isdntel_driver_id = -1;
325
326 /*---------------------------------------------------------------------------*
327 * interface attach routine
328 *---------------------------------------------------------------------------*/
329 PDEVSTATIC void
330 #ifdef __FreeBSD__
331 isdntelattach(void *dummy)
332 #else
333 isdntelattach()
334 #endif
335 {
336 int i, j;
337
338 isdntel_driver_id = isdn_l4_driver_attach("isdntel", NISDNTEL, &tel_driver);
339
340 for(i=0; i < NISDNTEL; i++)
341 {
342 for(j=0; j < NOFUNCS; j++)
343 {
344 tel_sc[i][j].devstate = ST_IDLE;
345 tel_sc[i][j].audiofmt = CVT_NONE;
346 tel_sc[i][j].rcvttab = 0;
347 tel_sc[i][j].wcvttab = 0;
348 tel_sc[i][j].result = 0;
349
350 if (j == FUNCTEL)
351 tel_sc[i][FUNCTEL].dialer = &tel_sc[i][FUNCDIAL];
352 else
353 tel_sc[i][j].dialer = NULL;
354
355 #if defined(__FreeBSD__)
356 #if __FreeBSD__ == 3
357
358 #ifdef DEVFS
359
360 /* XXX */ tel_sc[i][j].devfs_token
361 = devfs_add_devswf(&i4btel_cdevsw, i, DV_CHR,
362 UID_ROOT, GID_WHEEL, 0600,
363 "i4btel%d", i);
364 #endif
365
366 #else
367 switch(j)
368 {
369 case FUNCTEL: /* normal i4btel device */
370 make_dev(&i4btel_cdevsw, i,
371 UID_ROOT, GID_WHEEL,
372 0600, "i4btel%d", i);
373 break;
374
375 case FUNCDIAL: /* i4bteld dialout device */
376 make_dev(&i4btel_cdevsw, i+(1<<UNITBITS),
377 UID_ROOT, GID_WHEEL,
378 0600, "i4bteld%d", i);
379 break;
380 }
381 #endif
382 #endif
383 }
384 }
385 }
386
387 /*---------------------------------------------------------------------------*
388 * open tel device
389 *---------------------------------------------------------------------------*/
390 PDEVSTATIC int
391 isdntelopen(dev_t dev, int flag, int fmt, struct proc *p)
392 {
393 int unit = UNIT(dev);
394 int func = FUNC(dev);
395
396 tel_sc_t *sc;
397
398 if(unit >= NISDNTEL)
399 return(ENXIO);
400
401 sc = &tel_sc[unit][func];
402
403 if(sc->devstate & ST_ISOPEN)
404 return(EBUSY);
405
406 sc->devstate |= ST_ISOPEN;
407
408 if(func == FUNCDIAL)
409 {
410 sc->result = 0;
411 }
412
413 return(0);
414 }
415
416 /*---------------------------------------------------------------------------*
417 * close tel device
418 *---------------------------------------------------------------------------*/
419 PDEVSTATIC int
420 isdntelclose(dev_t dev, int flag, int fmt, struct proc *p)
421 {
422 int unit = UNIT(dev);
423 int func = FUNC(dev);
424 tel_sc_t *sc;
425 int error = 0;
426 int x;
427
428 if(unit > NISDNTEL)
429 return(ENXIO);
430
431 sc = &tel_sc[unit][func];
432
433 x = splnet();
434 sc->devstate &= ~ST_TONE;
435 if((func == FUNCTEL) &&
436 (sc->isdn_linktab != NULL && sc->isdn_linktab->tx_queue != NULL))
437 {
438 while(!(IF_QEMPTY(sc->isdn_linktab->tx_queue)))
439 {
440 sc->devstate |= ST_WRWAITEMPTY;
441
442 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
443 TTIPRI | PCATCH, "wtcl", 0)) != 0)
444 {
445 break;
446 }
447 }
448 sc->devstate &= ~ST_WRWAITEMPTY;
449 }
450
451 sc->devstate &= ~ST_ISOPEN;
452 splx(x);
453 wakeup((caddr_t) &sc->tones);
454
455 return(error);
456 }
457
458 /*---------------------------------------------------------------------------*
459 * i4btelioctl - device driver ioctl routine
460 *---------------------------------------------------------------------------*/
461 PDEVSTATIC int
462 isdntelioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
463 {
464 int unit = UNIT(dev);
465 int func = FUNC(dev);
466 int error = 0;
467 struct mbuf *m;
468 int s;
469
470 tel_sc_t *sc = &tel_sc[unit][func];
471
472 if(func == FUNCTEL)
473 {
474 switch(cmd)
475 {
476 case I4B_TEL_GETAUDIOFMT:
477 *(int *)data = sc->audiofmt;
478 break;
479
480 case I4B_TEL_SETAUDIOFMT:
481 switch (*(int *)data)
482 {
483 case CVT_NONE:
484 sc->rcvttab = 0;
485 sc->wcvttab = 0;
486 break;
487 case CVT_ALAW2ULAW:
488 /* ISDN: A-law */
489 /* user: mu-law */
490 sc->rcvttab = a2u_tab;
491 sc->wcvttab = u2a_tab;
492 break;
493 case CVT_ULAW2ALAW:
494 /* ISDN: mu-law */
495 /* user: A-law */
496 sc->rcvttab = u2a_tab;
497 sc->wcvttab = a2u_tab;
498 break;
499 default:
500 error = ENODEV;
501 break;
502 }
503 if(error == 0)
504 sc->audiofmt = *(int *)data;
505 break;
506
507 case I4B_TEL_EMPTYINPUTQUEUE:
508 s = splnet();
509 while((sc->devstate & ST_CONNECTED) &&
510 (sc->devstate & ST_ISOPEN) &&
511 !IF_QEMPTY(sc->isdn_linktab->rx_queue))
512 {
513 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
514 if(m)
515 i4b_Bfreembuf(m);
516 }
517 splx(s);
518 break;
519
520 case I4B_TEL_VR_REQ:
521 {
522 msg_vr_req_t *mvr;
523
524 mvr = (msg_vr_req_t *)data;
525
526 mvr->version = VERSION;
527 mvr->release = REL;
528 mvr->step = STEP;
529 break;
530 }
531 case I4B_TEL_TONES:
532 {
533 struct i4b_tel_tones *tt;
534
535 tt = (struct i4b_tel_tones *)data;
536 s = splnet();
537 while ((sc->devstate & ST_TONE) &&
538 sc->tones.duration[sc->toneidx] != 0) {
539 if((error = tsleep((caddr_t) &sc->tones,
540 TTIPRI | PCATCH, "rtone", 0 )) != 0) {
541 splx(s);
542 return(error);
543 }
544 }
545 if(!(sc->devstate & ST_ISOPEN)) {
546 splx(s);
547 return (EIO);
548 }
549 if(!(sc->devstate & ST_CONNECTED)) {
550 splx(s);
551 return (EIO);
552 }
553
554 sc->tones = *tt;
555 sc->toneidx = 0;
556 sc->tonefreq = tt->frequency[0];
557 sc->devstate |= ST_TONE;
558 splx(s);
559 tel_tone(sc);
560 break;
561 }
562
563 default:
564 error = ENOTTY;
565 break;
566 }
567 }
568 else if(func == FUNCDIAL)
569 {
570 switch(cmd)
571 {
572 default:
573 error = ENOTTY;
574 break;
575 }
576 }
577 return(error);
578 }
579
580 /*---------------------------------------------------------------------------*
581 * read from tel device
582 *---------------------------------------------------------------------------*/
583 PDEVSTATIC int
584 isdntelread(dev_t dev, struct uio *uio, int ioflag)
585 {
586 int unit = UNIT(dev);
587 int func = FUNC(dev);
588
589 struct mbuf *m;
590 int s;
591 int error = 0;
592
593 tel_sc_t *sc = &tel_sc[unit][func];
594
595 if(!(sc->devstate & ST_ISOPEN))
596 return(EIO);
597
598 if(func == FUNCTEL)
599 {
600 s = splnet();
601 while((sc->devstate & ST_ISOPEN) &&
602 (sc->devstate & ST_CONNECTED) &&
603 IF_QEMPTY(sc->isdn_linktab->rx_queue))
604 {
605 sc->devstate |= ST_RDWAITDATA;
606
607 NDBGL4(L4_TELDBG, "i4btel%d, queue empty!", unit);
608
609 if((error = tsleep((caddr_t) &sc->isdn_linktab->rx_queue,
610 TTIPRI | PCATCH,
611 "rtel", 0 )) != 0)
612 {
613 sc->devstate &= ~ST_RDWAITDATA;
614 splx(s);
615 return(error);
616 }
617 }
618
619 if(!(sc->devstate & ST_ISOPEN))
620 {
621 splx(s);
622 return(EIO);
623 }
624
625 if(!(sc->devstate & ST_CONNECTED))
626 {
627 splx(s);
628 return(EIO);
629 }
630
631
632 IF_DEQUEUE(sc->isdn_linktab->rx_queue, m);
633
634 if(m && m->m_len > 0)
635 {
636 register int i;
637
638 for(i = 0; i < m->m_len; i++)
639 {
640 /* always reverse bit order from line */
641 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
642
643 /* convert if necessary */
644 if(sc->rcvttab)
645 mtod(m,u_char *)[i] = sc->rcvttab[mtod(m,u_char *)[i]];
646 }
647 error = uiomove(m->m_data, m->m_len, uio);
648
649 NDBGL4(L4_TELDBG, "i4btel%d, mbuf (%d bytes), uiomove %d!", unit, m->m_len, error);
650 }
651 else
652 {
653 NDBGL4(L4_TELDBG, "i4btel%d, empty mbuf from queue!", unit);
654 error = EIO;
655 }
656
657 if(m)
658 i4b_Bfreembuf(m);
659
660 splx(s);
661 }
662 else if(func == FUNCDIAL)
663 {
664 s = splnet();
665 while((sc->result == 0) && (sc->devstate & ST_ISOPEN))
666 {
667 sc->devstate |= ST_RDWAITDATA;
668
669 if((error = tsleep((caddr_t) &sc->result,
670 TTIPRI | PCATCH,
671 "rtel1", 0 )) != 0)
672 {
673 sc->devstate &= ~ST_RDWAITDATA;
674 splx(s);
675 return(error);
676 }
677 }
678
679 if(!(sc->devstate & ST_ISOPEN))
680 {
681 splx(s);
682 return(EIO);
683 }
684
685 if(sc->result != 0)
686 {
687 error = uiomove(&sc->result, 1, uio);
688 sc->result = 0;
689 }
690 else
691 {
692 error = EIO;
693 }
694
695 splx(s);
696 }
697 return(error);
698 }
699
700 /*---------------------------------------------------------------------------*
701 * write to tel device
702 *---------------------------------------------------------------------------*/
703 PDEVSTATIC int
704 isdntelwrite(dev_t dev, struct uio * uio, int ioflag)
705 {
706 int unit = UNIT(dev);
707 int func = FUNC(dev);
708 struct mbuf *m;
709 int s;
710 int error = 0;
711 tel_sc_t *sc = &tel_sc[unit][func];
712
713 if(!(sc->devstate & ST_ISOPEN))
714 {
715 return(EIO);
716 }
717
718 if(func == FUNCTEL)
719 {
720 s = splnet();
721
722 if(!(sc->devstate & ST_CONNECTED)) {
723 splx(s);
724 return(EIO);
725 }
726
727 sc->devstate &= ~ST_TONE;
728 while((IF_QFULL(sc->isdn_linktab->tx_queue)) &&
729 (sc->devstate & ST_ISOPEN))
730 {
731 sc->devstate |= ST_WRWAITEMPTY;
732
733 if((error = tsleep((caddr_t) &sc->isdn_linktab->tx_queue,
734 TTIPRI | PCATCH, "wtel", 0)) != 0)
735 {
736 sc->devstate &= ~ST_WRWAITEMPTY;
737 splx(s);
738 return(error);
739 }
740 }
741
742 if(!(sc->devstate & ST_ISOPEN))
743 {
744 splx(s);
745 return(EIO);
746 }
747
748 if(!(sc->devstate & ST_CONNECTED))
749 {
750 splx(s);
751 return(EIO);
752 }
753
754 if((m = i4b_Bgetmbuf(BCH_MAX_DATALEN)) != NULL)
755 {
756 register int i;
757
758 m->m_len = min(BCH_MAX_DATALEN, uio->uio_resid);
759
760 error = uiomove(m->m_data, m->m_len, uio);
761
762 for(i = 0; i < m->m_len; i++)
763 {
764 /* convert if necessary */
765 if(sc->wcvttab)
766 mtod(m,u_char *)[i] = sc->wcvttab[mtod(m,u_char *)[i]];
767
768 /* always reverse bitorder to line */
769 mtod(m,u_char *)[i] = bitreverse[mtod(m,u_char *)[i]];
770 }
771
772 if(IF_QFULL(sc->isdn_linktab->tx_queue))
773 {
774 m_freem(m);
775 }
776 else
777 {
778 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
779 }
780
781 (*sc->isdn_linktab->bchannel_driver->bch_tx_start)(sc->isdn_linktab->l1token, sc->isdn_linktab->channel);
782 }
783
784 splx(s);
785 }
786 else if(func == FUNCDIAL)
787 {
788 tel_sc_t *telsc = &tel_sc[unit][FUNCTEL];
789
790 #define CMDBUFSIZ 80
791 char cmdbuf[CMDBUFSIZ];
792 int len = min(CMDBUFSIZ-1, uio->uio_resid);
793
794 error = uiomove(cmdbuf, len, uio);
795
796 if(cmdbuf[0] == CMD_DIAL)
797 {
798 i4b_l4_dialoutnumber(isdntel_driver_id, unit, len-1, &cmdbuf[1]);
799 }
800 else if(cmdbuf[0] == CMD_HUP)
801 {
802 if (!(telsc->devstate & ST_CONNECTED))
803 error = EIO;
804 else
805 i4b_l4_drvrdisc(telsc->cdp->cdid);
806 }
807 }
808 else
809 {
810 error = EIO;
811 }
812
813 return(error);
814 }
815
816 /*---------------------------------------------------------------------------*
817 *
818 *---------------------------------------------------------------------------*/
819 #define NTONESAMP 32
820 static void
821 tel_tone(tel_sc_t *sc)
822 {
823 struct mbuf *m;
824 u_char *p;
825 int i;
826
827 if((m = i4b_Bgetmbuf(NTONESAMP)) == NULL) {
828 printf("no mbuf in tel_tone\n");
829 return;
830 }
831 p = m->m_data;
832 m->m_len = 0;
833 for (i = 0; i < NTONESAMP && (sc->devstate & ST_TONE); i++) {
834
835 if (sc->tones.duration[sc->toneidx] > 0) {
836 if (--sc->tones.duration[sc->toneidx] == 0) {
837 sc->toneidx++;
838 if (sc->toneidx == I4B_TEL_MAXTONES) {
839 sc->devstate &= ~ST_TONE;
840 sc->toneomega = 0;
841 sc->tonefreq = 0;
842 } else if (sc->tones.frequency[sc->toneidx] == 0 &&
843 sc->tones.duration[sc->toneidx] == 0) {
844 sc->devstate &= ~ST_TONE;
845 sc->toneomega = 0;
846 sc->tonefreq = 0;
847 } else {
848 sc->tonefreq = sc->tones.frequency[sc->toneidx];
849 }
850 if (sc->tones.duration[sc->toneidx] == 0) {
851 wakeup((caddr_t) &sc->tones);
852 }
853 }
854 }
855
856 sc->toneomega += sc->tonefreq;
857 if (sc->toneomega >= 8000)
858 sc->toneomega -= 8000;
859 *p++ = bitreverse[sinetab[sc->toneomega]];
860 m->m_len++;
861 }
862 IF_ENQUEUE(sc->isdn_linktab->tx_queue, m);
863 (*sc->isdn_linktab->bchannel_driver->bch_tx_start)(sc->isdn_linktab->l1token, sc->isdn_linktab->channel);
864 }
865
866
867 #ifdef OS_USES_POLL
868 /*---------------------------------------------------------------------------*
869 * device driver poll
870 *---------------------------------------------------------------------------*/
871 PDEVSTATIC int
872 isdntelpoll(dev_t dev, int events, struct proc *p)
873 {
874 int revents = 0; /* Events we found */
875 int s;
876 int unit = UNIT(dev);
877 int func = FUNC(dev);
878
879 tel_sc_t *sc = &tel_sc[unit][func];
880
881 s = splhigh();
882
883 if(!(sc->devstate & ST_ISOPEN))
884 {
885 NDBGL4(L4_TELDBG, "i4btel%d, !ST_ISOPEN", unit);
886 splx(s);
887 return(0);
888 }
889
890 if(func == FUNCTEL)
891 {
892 /*
893 * Writes are OK if we are connected and the
894 * transmit queue can take them
895 */
896
897 if((events & (POLLOUT|POLLWRNORM)) &&
898 (sc->devstate & ST_CONNECTED) &&
899 (sc->isdn_linktab != NULL) &&
900 (!IF_QFULL(sc->isdn_linktab->tx_queue)))
901 {
902 NDBGL4(L4_TELDBG, "i4btel%d, POLLOUT", unit);
903 revents |= (events & (POLLOUT|POLLWRNORM));
904 }
905
906 /* ... while reads are OK if we have any data */
907
908 if((events & (POLLIN|POLLRDNORM)) &&
909 (sc->devstate & ST_CONNECTED) &&
910 (sc->isdn_linktab != NULL) &&
911 (!IF_QEMPTY(sc->isdn_linktab->rx_queue)))
912 {
913 NDBGL4(L4_TELDBG, "i4btel%d, POLLIN", unit);
914 revents |= (events & (POLLIN|POLLRDNORM));
915 }
916
917 if(revents == 0)
918 {
919 NDBGL4(L4_TELDBG, "i4btel%d, selrecord", unit);
920 selrecord(p, &sc->selp);
921 }
922 }
923 else if(func == FUNCDIAL)
924 {
925 if(events & (POLLOUT|POLLWRNORM))
926 {
927 NDBGL4(L4_TELDBG, "i4bteld%d, POLLOUT", unit);
928 revents |= (events & (POLLOUT|POLLWRNORM));
929 }
930
931 if(events & (POLLIN|POLLRDNORM))
932 {
933 NDBGL4(L4_TELDBG, "i4bteld%d, POLLIN, result = %d", unit, sc->result);
934 if(sc->result != 0)
935 revents |= (events & (POLLIN|POLLRDNORM));
936 }
937
938 if(revents == 0)
939 {
940 NDBGL4(L4_TELDBG, "i4bteld%d, selrecord", unit);
941 selrecord(p, &sc->selp);
942 }
943 }
944 splx(s);
945 return(revents);
946 }
947
948 static void
949 filt_i4btel_detach(struct knote *kn)
950 {
951 tel_sc_t *sc = kn->kn_hook;
952 int s;
953
954 s = splhigh();
955 SLIST_REMOVE(&sc->selp.sel_klist, kn, knote, kn_selnext);
956 splx(s);
957 }
958
959 static int
960 filt_i4btel_telread(struct knote *kn, long hint)
961 {
962 tel_sc_t *sc = kn->kn_hook;
963
964 if ((sc->devstate & ST_CONNECTED) == 0)
965 return (0);
966 if (sc->isdn_linktab == NULL)
967 return (0);
968 if (IF_QEMPTY(sc->isdn_linktab->rx_queue))
969 return (0);
970
971 kn->kn_data = 0; /* XXXLUKEM (thorpej): what to put here? */
972 return (1);
973 }
974
975 static const struct filterops i4btel_telread_filtops =
976 { 1, NULL, filt_i4btel_detach, filt_i4btel_telread };
977
978 static int
979 filt_i4btel_telwrite(struct knote *kn, long hint)
980 {
981 tel_sc_t *sc = kn->kn_hook;
982
983 if ((sc->devstate & ST_CONNECTED) == 0)
984 return (0);
985 if (sc->isdn_linktab == NULL)
986 return (0);
987 if (IF_QFULL(sc->isdn_linktab->tx_queue))
988 return (0);
989
990 kn->kn_data = 0; /* XXXLUKEM (thorpej): what to put here? */
991 return (1);
992 }
993
994 static const struct filterops i4btel_telwrite_filtops =
995 { 1, NULL, filt_i4btel_detach, filt_i4btel_telwrite };
996
997 static int
998 filt_i4btel_dialread(struct knote *kn, long hint)
999 {
1000 tel_sc_t *sc = kn->kn_hook;
1001
1002 if (sc->result == 0)
1003 return (0);
1004
1005 kn->kn_data = 0; /* XXXLUKEM (thorpej): what to put here? */
1006 return (1);
1007 }
1008
1009 static const struct filterops i4btel_dialread_filtops =
1010 { 1, NULL, filt_i4btel_detach, filt_i4btel_dialread };
1011
1012 static const struct filterops i4btel_seltrue_filtops =
1013 { 1, NULL, filt_i4btel_detach, filt_seltrue };
1014
1015 int
1016 isdntelkqfilter(dev_t dev, struct knote *kn)
1017 {
1018 int s;
1019 int unit = UNIT(dev);
1020 int func = FUNC(dev);
1021
1022 struct klist *klist;
1023 tel_sc_t *sc = &tel_sc[unit][func];
1024
1025 switch (kn->kn_filter) {
1026 case EVFILT_READ:
1027 klist = &sc->selp.sel_klist;
1028 if (func == FUNCTEL)
1029 kn->kn_fop = &i4btel_telread_filtops;
1030 else if (func == FUNCDIAL)
1031 kn->kn_fop = &i4btel_dialread_filtops;
1032 else
1033 return (1);
1034 break;
1035
1036 case EVFILT_WRITE:
1037 klist = &sc->selp.sel_klist;
1038 if (func == FUNCTEL)
1039 kn->kn_fop = &i4btel_telwrite_filtops;
1040 else if (func == FUNCDIAL)
1041 kn->kn_fop = &i4btel_seltrue_filtops;
1042 else
1043 return (1);
1044 break;
1045
1046 default:
1047 return (1);
1048 }
1049
1050 kn->kn_hook = sc;
1051
1052 s = splhigh();
1053 SLIST_INSERT_HEAD(klist, kn, kn_selnext);
1054 splx(s);
1055
1056 return (0);
1057 }
1058
1059 #else /* OS_USES_POLL */
1060
1061 /*---------------------------------------------------------------------------*
1062 * device driver select
1063 *---------------------------------------------------------------------------*/
1064 PDEVSTATIC int
1065 i4btelsel(dev_t dev, int rw, struct proc *p)
1066 {
1067 int s;
1068 int unit = UNIT(dev);
1069 int func = FUNC(dev);
1070
1071 tel_sc_t *sc = &tel_sc[unit][func];
1072
1073 s = splhigh();
1074
1075 if (!(sc->devstate & ST_ISOPEN))
1076 {
1077 NDBGL4(L4_TELDBG, "i4btel%d, !ST_ISOPEN", unit);
1078 splx(s);
1079 return(0);
1080 }
1081
1082 if (func == FUNCTEL)
1083 {
1084 /* Don't even bother if we're not connected */
1085 if (!(sc->devstate & ST_CONNECTED) || sc->isdn_linktab == NULL)
1086 {
1087 splx(s);
1088 return 0;
1089 }
1090
1091 if (rw == FREAD)
1092 {
1093 if (!IF_QEMPTY(sc->isdn_linktab->rx_queue))
1094 {
1095 NDBGL4(L4_TELDBG, "i4btel%d, FREAD", unit);
1096 splx(s);
1097 return 1;
1098 }
1099 }
1100 else if (rw == FWRITE)
1101 {
1102 if (!IF_QFULL(sc->isdn_linktab->tx_queue))
1103 {
1104 NDBGL4(L4_TELDBG, "i4btel%d, FWRITE", unit);
1105 splx(s);
1106 return 1;
1107 }
1108 }
1109 }
1110 else if (func == FUNCDIAL)
1111 {
1112 if (rw == FWRITE)
1113 {
1114 NDBGL4(L4_TELDBG, "i4bteld%d, FWRITE", unit);
1115 splx(s);
1116 return 1;
1117 }
1118
1119 if (rw == FREAD)
1120 {
1121 NDBGL4(L4_TELDBG, "i4bteld%d, FREAD, result = %d", unit, sc->result);
1122 if (sc->result != 0)
1123 {
1124 splx(s);
1125 return 1;
1126 }
1127 }
1128 }
1129
1130 NDBGL4(L4_TELDBG, "i4bteld%d, selrecord", unit);
1131 selrecord(p, &sc->selp);
1132 splx(s);
1133 return 0;
1134 }
1135
1136 #endif /* OS_USES_POLL */
1137
1138 /*===========================================================================*
1139 * ISDN INTERFACE ROUTINES
1140 *===========================================================================*/
1141
1142 /*---------------------------------------------------------------------------*
1143 * this routine is called from L4 handler at connect time
1144 *---------------------------------------------------------------------------*/
1145 static void
1146 tel_connect(void *softc, void *cdp)
1147 {
1148 tel_sc_t *sc = softc;
1149
1150 /* audio device */
1151
1152 sc->cdp = (call_desc_t *)cdp;
1153
1154 sc->devstate |= ST_CONNECTED;
1155
1156 /* dialer device */
1157
1158 sc = sc->dialer;
1159
1160 if(sc->devstate == ST_ISOPEN)
1161 {
1162 sc->result = RSP_CONN;
1163
1164 if(sc->devstate & ST_RDWAITDATA)
1165 {
1166 sc->devstate &= ~ST_RDWAITDATA;
1167 wakeup((caddr_t) &sc->result);
1168 }
1169 selnotify(&sc->selp, 0);
1170 }
1171 }
1172
1173 /*---------------------------------------------------------------------------*
1174 * this routine is called from L4 handler at disconnect time
1175 *---------------------------------------------------------------------------*/
1176 static void
1177 tel_disconnect(void *softc, void *cdp)
1178 {
1179 tel_sc_t *sc = softc;
1180
1181 /* audio device */
1182
1183 sc->devstate &= ~ST_CONNECTED;
1184
1185 if(sc->devstate & ST_RDWAITDATA)
1186 {
1187 sc->devstate &= ~ST_RDWAITDATA;
1188 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
1189 }
1190
1191 if(sc->devstate & ST_WRWAITEMPTY)
1192 {
1193 sc->devstate &= ~ST_WRWAITEMPTY;
1194 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
1195 }
1196
1197 /* dialer device */
1198
1199 sc = sc->dialer;
1200
1201 if(sc->devstate & ST_ISOPEN)
1202 {
1203 sc->result = RSP_HUP;
1204
1205 if(sc->devstate & ST_RDWAITDATA)
1206 {
1207 sc->devstate &= ~ST_RDWAITDATA;
1208 wakeup((caddr_t) &sc->result);
1209 }
1210 selnotify(&sc->selp, 0);
1211
1212 if (sc->devstate & ST_TONE) {
1213 sc->devstate &= ~ST_TONE;
1214 wakeup((caddr_t) &sc->tones);
1215 }
1216 }
1217 }
1218
1219 /*---------------------------------------------------------------------------*
1220 * feedback from daemon in case of dial problems
1221 *---------------------------------------------------------------------------*/
1222 static void
1223 tel_dialresponse(void *softc, int status, cause_t cause)
1224 {
1225 tel_sc_t *sc = ((struct tel_softc*)softc)->dialer;
1226
1227 NDBGL4(L4_TELDBG, "status=%d, cause=0x%4x", status, cause);
1228
1229 if((sc->devstate == ST_ISOPEN) && status)
1230 {
1231 sc->result = RSP_NOA;
1232
1233 if(sc->devstate & ST_RDWAITDATA)
1234 {
1235 sc->devstate &= ~ST_RDWAITDATA;
1236 wakeup((caddr_t) &sc->result);
1237 }
1238 selnotify(&sc->selp, 0);
1239 }
1240 }
1241
1242 /*---------------------------------------------------------------------------*
1243 * interface up/down
1244 *---------------------------------------------------------------------------*/
1245 static void
1246 tel_updown(void *softc, int updown)
1247 {
1248 }
1249
1250 /*---------------------------------------------------------------------------*
1251 * this routine is called from the HSCX interrupt handler
1252 * when a new frame (mbuf) has been received and was put on
1253 * the rx queue.
1254 *---------------------------------------------------------------------------*/
1255 static void
1256 tel_rx_data_rdy(void *softc)
1257 {
1258 tel_sc_t *sc = softc;
1259
1260 if(sc->devstate & ST_RDWAITDATA)
1261 {
1262 sc->devstate &= ~ST_RDWAITDATA;
1263 wakeup((caddr_t) &sc->isdn_linktab->rx_queue);
1264 }
1265 selnotify(&sc->selp, 0);
1266 }
1267
1268 /*---------------------------------------------------------------------------*
1269 * this routine is called from the HSCX interrupt handler
1270 * when the last frame has been sent out and there is no
1271 * further frame (mbuf) in the tx queue.
1272 *---------------------------------------------------------------------------*/
1273 static void
1274 tel_tx_queue_empty(void *softc)
1275 {
1276 tel_sc_t *sc = softc;
1277
1278 if(sc->devstate & ST_WRWAITEMPTY)
1279 {
1280 sc->devstate &= ~ST_WRWAITEMPTY;
1281 wakeup((caddr_t) &sc->isdn_linktab->tx_queue);
1282 }
1283 if(sc->devstate & ST_TONE) {
1284 tel_tone(sc);
1285 } else {
1286 selnotify(&sc->selp, 0);
1287 }
1288 }
1289
1290 /*---------------------------------------------------------------------------*
1291 * this routine is called from the HSCX interrupt handler
1292 * each time a packet is received or transmitted.
1293 *---------------------------------------------------------------------------*/
1294 static void
1295 tel_activity(void *softc, int rxtx)
1296 {
1297 struct tel_softc *sc = softc;
1298
1299 if(sc->cdp)
1300 sc->cdp->last_active_time = SECOND;
1301 }
1302
1303 /*---------------------------------------------------------------------------*
1304 * setup the isdn_linktab for this driver
1305 *---------------------------------------------------------------------------*/
1306 static void
1307 tel_set_linktab(void *softc, isdn_link_t *ilt)
1308 {
1309 tel_sc_t *sc = softc;
1310 sc->isdn_linktab = ilt;
1311 }
1312
1313 /*---------------------------------------------------------------------------*
1314 * return the instance
1315 *---------------------------------------------------------------------------*/
1316 static void*
1317 tel_get_softc(int unit)
1318 {
1319 return &tel_sc[unit][FUNCTEL];
1320 }
1321
1322 /*===========================================================================*
1323 * AUDIO FORMAT CONVERSION (produced by running g711conv)
1324 *===========================================================================*/
1325
1326 /*---------------------------------------------------------------------------*
1327 * A-law to mu-law conversion
1328 *---------------------------------------------------------------------------*/
1329 static unsigned char a2u_tab[256] = {
1330 /* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
1331 /* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
1332 /* 10 */ 0x39, 0x3a, 0x37, 0x38, 0x3d, 0x3e, 0x3b, 0x3c,
1333 /* 18 */ 0x31, 0x32, 0x30, 0x30, 0x35, 0x36, 0x33, 0x34,
1334 /* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
1335 /* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
1336 /* 30 */ 0x1a, 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d,
1337 /* 38 */ 0x12, 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15,
1338 /* 40 */ 0x62, 0x63, 0x60, 0x61, 0x66, 0x67, 0x64, 0x65,
1339 /* 48 */ 0x5d, 0x5d, 0x5c, 0x5c, 0x5f, 0x5f, 0x5e, 0x5e,
1340 /* 50 */ 0x74, 0x76, 0x70, 0x72, 0x7c, 0x7e, 0x78, 0x7a,
1341 /* 58 */ 0x6a, 0x6b, 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d,
1342 /* 60 */ 0x48, 0x49, 0x46, 0x47, 0x4c, 0x4d, 0x4a, 0x4b,
1343 /* 68 */ 0x40, 0x41, 0x3f, 0x3f, 0x44, 0x45, 0x42, 0x43,
1344 /* 70 */ 0x56, 0x57, 0x54, 0x55, 0x5a, 0x5b, 0x58, 0x59,
1345 /* 78 */ 0x4f, 0x4f, 0x4e, 0x4e, 0x52, 0x53, 0x50, 0x51,
1346 /* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1347 /* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1348 /* 90 */ 0xb9, 0xba, 0xb7, 0xb8, 0xbd, 0xbe, 0xbb, 0xbc,
1349 /* 98 */ 0xb1, 0xb2, 0xb0, 0xb0, 0xb5, 0xb6, 0xb3, 0xb4,
1350 /* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1351 /* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1352 /* b0 */ 0x9a, 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d,
1353 /* b8 */ 0x92, 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95,
1354 /* c0 */ 0xe2, 0xe3, 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5,
1355 /* c8 */ 0xdd, 0xdd, 0xdc, 0xdc, 0xdf, 0xdf, 0xde, 0xde,
1356 /* d0 */ 0xf4, 0xf6, 0xf0, 0xf2, 0xfc, 0xfe, 0xf8, 0xfa,
1357 /* d8 */ 0xea, 0xeb, 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed,
1358 /* e0 */ 0xc8, 0xc9, 0xc6, 0xc7, 0xcc, 0xcd, 0xca, 0xcb,
1359 /* e8 */ 0xc0, 0xc1, 0xbf, 0xbf, 0xc4, 0xc5, 0xc2, 0xc3,
1360 /* f0 */ 0xd6, 0xd7, 0xd4, 0xd5, 0xda, 0xdb, 0xd8, 0xd9,
1361 /* f8 */ 0xcf, 0xcf, 0xce, 0xce, 0xd2, 0xd3, 0xd0, 0xd1
1362 };
1363
1364 /*---------------------------------------------------------------------------*
1365 * mu-law to A-law conversion
1366 *---------------------------------------------------------------------------*/
1367 static unsigned char u2a_tab[256] = {
1368 /* 00 */ 0x2a, 0x2b, 0x28, 0x29, 0x2e, 0x2f, 0x2c, 0x2d,
1369 /* 08 */ 0x22, 0x23, 0x20, 0x21, 0x26, 0x27, 0x24, 0x25,
1370 /* 10 */ 0x3a, 0x3b, 0x38, 0x39, 0x3e, 0x3f, 0x3c, 0x3d,
1371 /* 18 */ 0x32, 0x33, 0x30, 0x31, 0x36, 0x37, 0x34, 0x35,
1372 /* 20 */ 0x0a, 0x0b, 0x08, 0x09, 0x0e, 0x0f, 0x0c, 0x0d,
1373 /* 28 */ 0x02, 0x03, 0x00, 0x01, 0x06, 0x07, 0x04, 0x05,
1374 /* 30 */ 0x1b, 0x18, 0x19, 0x1e, 0x1f, 0x1c, 0x1d, 0x12,
1375 /* 38 */ 0x13, 0x10, 0x11, 0x16, 0x17, 0x14, 0x15, 0x6a,
1376 /* 40 */ 0x68, 0x69, 0x6e, 0x6f, 0x6c, 0x6d, 0x62, 0x63,
1377 /* 48 */ 0x60, 0x61, 0x66, 0x67, 0x64, 0x65, 0x7a, 0x78,
1378 /* 50 */ 0x7e, 0x7f, 0x7c, 0x7d, 0x72, 0x73, 0x70, 0x71,
1379 /* 58 */ 0x76, 0x77, 0x74, 0x75, 0x4b, 0x49, 0x4f, 0x4d,
1380 /* 60 */ 0x42, 0x43, 0x40, 0x41, 0x46, 0x47, 0x44, 0x45,
1381 /* 68 */ 0x5a, 0x5b, 0x58, 0x59, 0x5e, 0x5f, 0x5c, 0x5d,
1382 /* 70 */ 0x52, 0x52, 0x53, 0x53, 0x50, 0x50, 0x51, 0x51,
1383 /* 78 */ 0x56, 0x56, 0x57, 0x57, 0x54, 0x54, 0x55, 0x55,
1384 /* 80 */ 0xaa, 0xab, 0xa8, 0xa9, 0xae, 0xaf, 0xac, 0xad,
1385 /* 88 */ 0xa2, 0xa3, 0xa0, 0xa1, 0xa6, 0xa7, 0xa4, 0xa5,
1386 /* 90 */ 0xba, 0xbb, 0xb8, 0xb9, 0xbe, 0xbf, 0xbc, 0xbd,
1387 /* 98 */ 0xb2, 0xb3, 0xb0, 0xb1, 0xb6, 0xb7, 0xb4, 0xb5,
1388 /* a0 */ 0x8a, 0x8b, 0x88, 0x89, 0x8e, 0x8f, 0x8c, 0x8d,
1389 /* a8 */ 0x82, 0x83, 0x80, 0x81, 0x86, 0x87, 0x84, 0x85,
1390 /* b0 */ 0x9b, 0x98, 0x99, 0x9e, 0x9f, 0x9c, 0x9d, 0x92,
1391 /* b8 */ 0x93, 0x90, 0x91, 0x96, 0x97, 0x94, 0x95, 0xea,
1392 /* c0 */ 0xe8, 0xe9, 0xee, 0xef, 0xec, 0xed, 0xe2, 0xe3,
1393 /* c8 */ 0xe0, 0xe1, 0xe6, 0xe7, 0xe4, 0xe5, 0xfa, 0xf8,
1394 /* d0 */ 0xfe, 0xff, 0xfc, 0xfd, 0xf2, 0xf3, 0xf0, 0xf1,
1395 /* d8 */ 0xf6, 0xf7, 0xf4, 0xf5, 0xcb, 0xc9, 0xcf, 0xcd,
1396 /* e0 */ 0xc2, 0xc3, 0xc0, 0xc1, 0xc6, 0xc7, 0xc4, 0xc5,
1397 /* e8 */ 0xda, 0xdb, 0xd8, 0xd9, 0xde, 0xdf, 0xdc, 0xdd,
1398 /* f0 */ 0xd2, 0xd2, 0xd3, 0xd3, 0xd0, 0xd0, 0xd1, 0xd1,
1399 /* f8 */ 0xd6, 0xd6, 0xd7, 0xd7, 0xd4, 0xd4, 0xd5, 0xd5
1400 };
1401
1402 /*---------------------------------------------------------------------------*
1403 * reverse bits in a byte
1404 *---------------------------------------------------------------------------*/
1405 static unsigned char bitreverse[256] = {
1406 /* 00 */ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
1407 /* 08 */ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
1408 /* 10 */ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
1409 /* 18 */ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
1410 /* 20 */ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
1411 /* 28 */ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
1412 /* 30 */ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
1413 /* 38 */ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
1414 /* 40 */ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
1415 /* 48 */ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
1416 /* 50 */ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
1417 /* 58 */ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
1418 /* 60 */ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
1419 /* 68 */ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
1420 /* 70 */ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
1421 /* 78 */ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
1422 /* 80 */ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
1423 /* 88 */ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
1424 /* 90 */ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
1425 /* 98 */ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
1426 /* a0 */ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
1427 /* a8 */ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
1428 /* b0 */ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
1429 /* b8 */ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
1430 /* c0 */ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
1431 /* c8 */ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
1432 /* d0 */ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
1433 /* d8 */ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
1434 /* e0 */ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
1435 /* e8 */ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
1436 /* f0 */ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
1437 /* f8 */ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
1438 };
1439
1440 static u_char sinetab[8000] = { 213, 213, 213, 213, 213, 213, 213, 212,
1441 212, 212, 212, 212, 212, 215, 215, 215, 215, 215, 215, 214, 214,
1442 214, 214, 214, 214, 209, 209, 209, 209, 209, 209, 209, 208, 208,
1443 208, 208, 208, 208, 211, 211, 211, 211, 211, 211, 210, 210, 210,
1444 210, 210, 210, 221, 221, 221, 221, 221, 221, 220, 220, 220, 220,
1445 220, 220, 220, 223, 223, 223, 223, 223, 223, 222, 222, 222, 222,
1446 222, 222, 217, 217, 217, 217, 217, 217, 216, 216, 216, 216, 216,
1447 216, 216, 219, 219, 219, 219, 219, 219, 218, 218, 218, 218, 218,
1448 218, 197, 197, 197, 197, 197, 197, 196, 196, 196, 196, 196, 196,
1449 196, 199, 199, 199, 199, 199, 199, 198, 198, 198, 198, 198, 198,
1450 193, 193, 193, 193, 193, 193, 192, 192, 192, 192, 192, 192, 192,
1451 195, 195, 195, 195, 195, 195, 194, 194, 194, 194, 194, 194, 205,
1452 205, 205, 205, 205, 205, 204, 204, 204, 204, 204, 204, 204, 207,
1453 207, 207, 207, 207, 207, 206, 206, 206, 206, 206, 206, 201, 201,
1454 201, 201, 201, 201, 200, 200, 200, 200, 200, 200, 200, 203, 203,
1455 203, 203, 203, 203, 202, 202, 202, 202, 202, 202, 245, 245, 245,
1456 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 244, 244, 244,
1457 244, 244, 244, 244, 244, 244, 244, 244, 244, 247, 247, 247, 247,
1458 247, 247, 247, 247, 247, 247, 247, 247, 247, 246, 246, 246, 246,
1459 246, 246, 246, 246, 246, 246, 246, 246, 246, 241, 241, 241, 241,
1460 241, 241, 241, 241, 241, 241, 241, 241, 240, 240, 240, 240, 240,
1461 240, 240, 240, 240, 240, 240, 240, 240, 243, 243, 243, 243, 243,
1462 243, 243, 243, 243, 243, 243, 243, 243, 242, 242, 242, 242, 242,
1463 242, 242, 242, 242, 242, 242, 242, 242, 253, 253, 253, 253, 253,
1464 253, 253, 253, 253, 253, 253, 253, 253, 252, 252, 252, 252, 252,
1465 252, 252, 252, 252, 252, 252, 252, 255, 255, 255, 255, 255, 255,
1466 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 254, 254, 254,
1467 254, 254, 254, 254, 254, 254, 254, 249, 249, 249, 249, 249, 249,
1468 249, 249, 249, 249, 249, 249, 249, 248, 248, 248, 248, 248, 248,
1469 248, 248, 248, 248, 248, 248, 248, 251, 251, 251, 251, 251, 251,
1470 251, 251, 251, 251, 251, 251, 251, 250, 250, 250, 250, 250, 250,
1471 250, 250, 250, 250, 250, 250, 250, 229, 229, 229, 229, 229, 229,
1472 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1473 229, 229, 229, 229, 229, 229, 229, 228, 228, 228, 228, 228, 228,
1474 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1475 228, 228, 228, 228, 228, 228, 228, 228, 231, 231, 231, 231, 231,
1476 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1477 231, 231, 231, 231, 231, 231, 231, 231, 231, 230, 230, 230, 230,
1478 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1479 230, 230, 230, 230, 230, 230, 230, 230, 230, 225, 225, 225, 225,
1480 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1481 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 224, 224,
1482 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1483 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 227,
1484 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1485 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1486 227, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1487 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1488 226, 226, 226, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1489 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1490 237, 237, 237, 237, 237, 236, 236, 236, 236, 236, 236, 236, 236,
1491 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1492 236, 236, 236, 236, 236, 236, 236, 236, 239, 239, 239, 239, 239,
1493 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1494 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 238, 238,
1495 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1496 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1497 238, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1498 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1499 233, 233, 233, 233, 233, 232, 232, 232, 232, 232, 232, 232, 232,
1500 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1501 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 235, 235, 235,
1502 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1503 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1504 235, 235, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1505 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1506 234, 234, 234, 234, 234, 234, 234, 149, 149, 149, 149, 149, 149,
1507 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1508 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1509 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1510 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1511 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148,
1512 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1513 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1514 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1515 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1516 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 151, 151, 151,
1517 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1518 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1519 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1520 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1521 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1522 151, 151, 151, 151, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1523 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1524 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1525 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1526 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1527 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1528 150, 150, 150, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1529 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1530 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1531 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1532 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1533 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1534 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 144,
1535 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1536 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1537 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1538 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1539 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1540 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1541 144, 144, 144, 144, 144, 144, 144, 144, 144, 147, 147, 147, 147,
1542 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1543 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1544 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1545 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1546 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1547 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1548 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1549 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 146, 146, 146,
1550 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1551 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1552 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1553 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1554 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1555 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1556 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1557 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1558 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1559 146, 146, 146, 146, 146, 146, 157, 157, 157, 157, 157, 157, 157,
1560 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1561 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1562 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1563 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1564 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1565 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1566 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1567 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1568 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1569 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1570 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1571 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1572 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1573 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1574 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1575 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1576 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1577 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1578 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1579 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1580 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1581 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1582 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1583 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1584 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1585 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1586 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1587 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1588 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1589 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1590 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1591 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1592 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1593 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1594 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1595 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1596 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1597 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1598 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1599 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1600 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1601 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1602 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1603 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1604 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1605 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1606 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1607 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1608 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1609 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1610 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1611 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1612 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1613 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1614 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1615 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157,
1616 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1617 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1618 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1619 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1620 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1621 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1622 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1623 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1624 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1625 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1626 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1627 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1628 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1629 157, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1630 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1631 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1632 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1633 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1634 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1635 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1636 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1637 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
1638 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147,
1639 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1640 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1641 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1642 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1643 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1644 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1645 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
1646 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 144, 144,
1647 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1648 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1649 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1650 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1651 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1652 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1653 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 145,
1654 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1655 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1656 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1657 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1658 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1659 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1660 145, 145, 145, 145, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1661 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1662 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1663 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1664 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1665 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1666 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1667 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1668 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1669 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1670 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1671 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 148, 148, 148,
1672 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1673 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1674 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1675 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1676 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
1677 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1678 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1679 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1680 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1681 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
1682 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1683 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1684 234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 235,
1685 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1686 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 232, 232, 232,
1687 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1688 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
1689 232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1690 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1691 233, 233, 233, 233, 233, 233, 238, 238, 238, 238, 238, 238, 238,
1692 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
1693 238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239,
1694 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
1695 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, 236,
1696 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1697 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
1698 236, 236, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1699 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237,
1700 237, 237, 237, 237, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1701 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
1702 226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227,
1703 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
1704 227, 227, 227, 227, 227, 227, 227, 227, 224, 224, 224, 224, 224,
1705 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
1706 224, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225,
1707 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1708 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 230, 230,
1709 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
1710 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 231, 231,
1711 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231,
1712 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 228,
1713 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1714 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
1715 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1716 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
1717 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
1718 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251,
1719 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
1720 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249,
1721 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254,
1722 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
1723 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 253,
1724 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 242,
1725 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 243,
1726 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 240,
1727 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 241,
1728 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 246, 246,
1729 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 247,
1730 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 244, 244,
1731 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245,
1732 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 202, 202, 202,
1733 202, 202, 202, 203, 203, 203, 203, 203, 203, 200, 200, 200, 200,
1734 200, 200, 200, 201, 201, 201, 201, 201, 201, 206, 206, 206, 206,
1735 206, 206, 207, 207, 207, 207, 207, 207, 204, 204, 204, 204, 204,
1736 204, 204, 205, 205, 205, 205, 205, 205, 194, 194, 194, 194, 194,
1737 194, 195, 195, 195, 195, 195, 195, 192, 192, 192, 192, 192, 192,
1738 192, 193, 193, 193, 193, 193, 193, 198, 198, 198, 198, 198, 198,
1739 199, 199, 199, 199, 199, 199, 196, 196, 196, 196, 196, 196, 196,
1740 197, 197, 197, 197, 197, 197, 218, 218, 218, 218, 218, 218, 219,
1741 219, 219, 219, 219, 219, 216, 216, 216, 216, 216, 216, 216, 217,
1742 217, 217, 217, 217, 217, 222, 222, 222, 222, 222, 222, 223, 223,
1743 223, 223, 223, 223, 220, 220, 220, 220, 220, 220, 220, 221, 221,
1744 221, 221, 221, 221, 210, 210, 210, 210, 210, 210, 211, 211, 211,
1745 211, 211, 211, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209,
1746 209, 209, 209, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215,
1747 215, 215, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213,
1748 213, 213, 90, 90, 90, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84,
1749 84, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 81, 81, 81,
1750 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 83, 83, 83, 83, 83, 83,
1751 82, 82, 82, 82, 82, 82, 93, 93, 93, 93, 93, 93, 93, 92, 92, 92,
1752 92, 92, 92, 95, 95, 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, 89,
1753 89, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 91, 91, 91, 91,
1754 91, 91, 90, 90, 90, 90, 90, 90, 69, 69, 69, 69, 69, 69, 68, 68,
1755 68, 68, 68, 68, 68, 71, 71, 71, 71, 71, 71, 70, 70, 70, 70, 70,
1756 70, 65, 65, 65, 65, 65, 65, 64, 64, 64, 64, 64, 64, 64, 67, 67,
1757 67, 67, 67, 67, 66, 66, 66, 66, 66, 66, 77, 77, 77, 77, 77, 77,
1758 76, 76, 76, 76, 76, 76, 76, 79, 79, 79, 79, 79, 79, 78, 78, 78,
1759 78, 78, 78, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72,
1760 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 117, 117, 117, 117,
1761 117, 117, 117, 117, 117, 117, 117, 117, 117, 116, 116, 116, 116,
1762 116, 116, 116, 116, 116, 116, 116, 116, 116, 119, 119, 119, 119,
1763 119, 119, 119, 119, 119, 119, 119, 119, 118, 118, 118, 118, 118,
1764 118, 118, 118, 118, 118, 118, 118, 118, 113, 113, 113, 113, 113,
1765 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112,
1766 112, 112, 112, 112, 112, 112, 112, 115, 115, 115, 115, 115, 115,
1767 115, 115, 115, 115, 115, 115, 115, 114, 114, 114, 114, 114, 114,
1768 114, 114, 114, 114, 114, 114, 114, 125, 125, 125, 125, 125, 125,
1769 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124,
1770 124, 124, 124, 124, 124, 124, 124, 127, 127, 127, 127, 127, 127,
1771 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126,
1772 126, 126, 126, 126, 126, 126, 121, 121, 121, 121, 121, 121, 121,
1773 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120,
1774 120, 120, 120, 120, 120, 120, 123, 123, 123, 123, 123, 123, 123,
1775 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122,
1776 122, 122, 122, 122, 122, 122, 101, 101, 101, 101, 101, 101, 101,
1777 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1778 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100,
1779 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1780 100, 100, 100, 100, 100, 100, 100, 103, 103, 103, 103, 103, 103,
1781 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1782 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102,
1783 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1784 102, 102, 102, 102, 102, 102, 102, 102, 102, 97, 97, 97, 97, 97,
1785 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
1786 97, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
1787 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
1788 96, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
1789 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98,
1790 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
1791 98, 98, 98, 98, 98, 98, 98, 98, 98, 109, 109, 109, 109, 109, 109,
1792 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1793 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108,
1794 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1795 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 111,
1796 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1797 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1798 111, 111, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1799 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1800 110, 110, 110, 110, 110, 110, 105, 105, 105, 105, 105, 105, 105,
1801 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1802 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104,
1803 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1804 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1805 104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1806 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1807 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106,
1808 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1809 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 21,
1810 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1811 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1812 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1813 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1814 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1815 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1816 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1817 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1818 20, 20, 20, 20, 20, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1819 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1820 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1821 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1822 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22,
1823 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1824 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1825 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1826 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1827 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 17, 17, 17, 17, 17, 17,
1828 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1829 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1830 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1831 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1832 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16,
1833 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1834 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1835 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1836 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1837 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1838 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 19, 19, 19, 19, 19, 19,
1839 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1840 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1841 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1842 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1843 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1844 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1845 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1846 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1847 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1848 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1849 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1850 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1851 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1852 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1853 18, 18, 18, 18, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1854 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1855 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1856 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1857 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1858 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1859 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1860 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1861 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1862 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1863 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1864 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 28, 28, 28, 28, 28, 28,
1865 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1866 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1867 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1868 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1869 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1870 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1871 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1872 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1873 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1874 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1875 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1876 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1877 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1878 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1879 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1880 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1881 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1882 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1883 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1884 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1885 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1886 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1887 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1888 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1889 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1890 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1891 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1892 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1893 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1894 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1895 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1896 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1897 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1898 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1899 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1900 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1901 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1902 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1903 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1904 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1905 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1906 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1907 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
1908 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 18, 18, 18, 18, 18,
1909 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1910 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1911 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1912 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1913 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1914 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1915 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1916 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19,
1917 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1918 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1919 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1920 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1921 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1922 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
1923 19, 19, 19, 19, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1924 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1925 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1926 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1927 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1928 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
1929 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1930 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1931 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1932 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1933 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
1934 17, 17, 17, 17, 17, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1935 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1936 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1937 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1938 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
1939 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1940 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1941 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1942 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
1943 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 20, 20, 20, 20, 20, 20,
1944 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1945 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1946 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
1947 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
1948 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1949 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1950 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1951 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
1952 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1953 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
1954 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107,
1955 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
1956 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 104, 104,
1957 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1958 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104,
1959 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1960 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
1961 105, 105, 105, 105, 105, 105, 110, 110, 110, 110, 110, 110, 110,
1962 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
1963 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111,
1964 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1965 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
1966 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1967 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
1968 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1969 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
1970 109, 109, 109, 109, 109, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
1971 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,
1972 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
1973 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 96, 96,
1974 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
1975 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97,
1976 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
1977 97, 97, 97, 97, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1978 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
1979 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1980 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1981 103, 103, 103, 103, 103, 100, 100, 100, 100, 100, 100, 100, 100,
1982 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
1983 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101,
1984 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
1985 101, 101, 101, 101, 101, 101, 122, 122, 122, 122, 122, 122, 122,
1986 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123,
1987 123, 123, 123, 123, 123, 123, 120, 120, 120, 120, 120, 120, 120,
1988 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121,
1989 121, 121, 121, 121, 121, 121, 126, 126, 126, 126, 126, 126, 126,
1990 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127,
1991 127, 127, 127, 127, 127, 124, 124, 124, 124, 124, 124, 124, 124,
1992 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125,
1993 125, 125, 125, 125, 125, 114, 114, 114, 114, 114, 114, 114, 114,
1994 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115,
1995 115, 115, 115, 115, 115, 112, 112, 112, 112, 112, 112, 112, 112,
1996 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113,
1997 113, 113, 113, 113, 118, 118, 118, 118, 118, 118, 118, 118, 118,
1998 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119,
1999 119, 119, 119, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
2000 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
2001 117, 117, 117, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 72,
2002 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 78, 78, 78, 78,
2003 78, 78, 79, 79, 79, 79, 79, 79, 76, 76, 76, 76, 76, 76, 76, 77,
2004 77, 77, 77, 77, 77, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67,
2005 67, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 70, 70,
2006 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 68, 68, 68, 68, 68, 68,
2007 68, 69, 69, 69, 69, 69, 69, 90, 90, 90, 90, 90, 90, 91, 91, 91,
2008 91, 91, 91, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89,
2009 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 92, 92, 92, 92,
2010 92, 92, 93, 93, 93, 93, 93, 93, 93, 82, 82, 82, 82, 82, 82, 83,
2011 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81,
2012 81, 81, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 84, 84,
2013 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 90, 90, 90 };
2014
2015 /*===========================================================================*/
2016
2017 #endif /* NISDNTEL > 0 */
Cache object: 771c2af6d306fc7410788e026df6e81b
|