;******************************* ;* POSTER GENERATION PROGRAM * ;* A L F PRODUCTS INC. * ;******************************* ;; ORG 400H ;* THE 'GO' ROUTINE READS (AND ECHOES) AN INPUT LINE. ;* RETURN (M) ENDS THE LINE. CANCEL (X) PRINTS BACKSLASH ;* AND ALLOWS LINE INPUT TO BE RESTARTED, BACKSPACE (H) ;* BACKSPACES OR PRINTS BACKSLASH IF NO CHARS LEFT TO ;* BACK UP, ACKNOWLEDGE (F) REPRINTS THE LINE SO FAR, ;* AND SUB (Z) CAUSES THE NEXT CHAR TO ECHO BUT BE IGNORED. ;* ALL OTHER CONTROLS AND RUBOUT ECHO BUT ARE IGNOTED. ;* BUFFER FULL CAUSES LINE REPRINT. BUFFER LENGTH IS READ ;* FROM 'INLEN', 0=256. BUFFER LOCATION IS READ FROM 'INBUF' ;* PARITY IS MASKED TO 0 ON INPUT. ;* CHARS ARE STORED IN BUFFER, RETURN IS STORED AS '377. HL ;* POINTS TO THE NEXT AVAILABLE BYTE IN THE BUFFER DURING ;* LINE INPUT, C IS THE # OF BYTES INPUT SO FAR. D IS ;* NORMALLY 0, SET TO 377 TO IGNORE NEXT CHAR (SUB). GO: lhld 6 sphl ;; LXI SP,0 ; SET STACK POINTER MVI A,':' ; OUTPUT A :. CALL OUTC LHLD INBUF MVI C,0 GO6: CALL INCLR ; INCLR GET RID OF POSSIBLE GARBAGE. GO1: MVI D,0 GO8: CALL INC CALL OUTC INR D JZ GO1 ANI 127 CPI 127 JZ GO1 ; RUBOUT. CPI 'M'-64 JZ GO7 ; RETURN. CPI 'X'-64 JZ GO5 ; RESTART. CPI 'H'-64 JZ GO4 ; BACKSPACE. CPI 'F'-64 JZ GO3 ; REPRINT. CPI 'Z'-64 JZ GO9 ; SUB. CPI ' ' JC GO1 ; CONTROL CHARS. MOV B,A LDA INLEN INR C CMP C JZ GO2 ; BUFFER FULL. MOV M,B INX H JMP GO1 ; ALL WENT WELL. GO2: DCR C ; (BUFFER FULL.) GO3: MVI M,0 ; (REPRINT.) END MARKER. CALL CRLF LHLD INBUF GO10: XRA A ORA M JZ GO6 CALL OUTC INX H JMP GO10 GO4: XRA A ; (BACKSPACE.) ORA C JZ GO5 ; NOTHING TO BACK UP. DCR C DCX H JMP GO1 GO5: MVI A,92 ; (RESTART.) CALL OUTC CALL CRLF JMP GO GO9: MVI D,255 ; (SUB.) JMP GO8 CRLF: MVI A,'M'-64 ; PRINT RETURN LINEFEED CALL OUTC XRA A STA SPACE ; RESET 'SPACE' COUNT. MVI A,'J'-64 JMP OUTC GO7: MVI M,255 ; (RETURN.) ;* END OF LINE. SET LINE POINTER TO 1ST CHAR ;* & PRINT LINEFEED. LHLD INBUF MVI A,'J'-64 CALL OUTC XRA A STA SPACE ; INITIALIZE 'SPACE'. ;* FIRST CHECK TO SEE THAT ALL INPUT CHARS EXIST ;* IN THE DATA. FORMAT OF FIRST PART OF TABLE IS ;* A LIST OF AVAILABLE CHARS FOLLOWED BY A 0. ;* B IS NORMALLY 0, IS SET TO -1 IF ERROE FOUND. ;* (BAD CHARS ARE PRINTED.) DE IS TABLE POINTER, ;* HL IS BUFFER POINTER. MVI B,0 CHK: LXI D,TABLE CHK3: LDAX D ORA A JNZ CHK1 ;* NOT IN TABLE. END OF BUFFER OR BAD CHAR? XRA A ORA M JM CHK2 ; END OF BUFFER. MVI B,255 ; BAD CHARACTER FOUND. INX H CALL OUTC JMP CHK ;* CHECK TABLE ENTRY. CHK1: CMP M ; FOUND IN TABLE? INX D JNZ CHK3 ; NOT YET. INX H ; FOUND. JMP CHK ; CKECK NEXT. ;* ALL CHARS CHECKED. ANY BAD ONES? CHK2: INR B JNZ PRNT ; NO BAD ONES. ;* BAD CHARS FOUND, CRLF AND GO BACK TO INPUT. CALL CRLF JMP GO ;* ;* PRINT THE POSTER. ;* PRNT: INX D ; DE POINTS TO THE SECOND HALS OF THE TABLE. LHLD INBUF ; HL POINTS TO INPUT BUFFER ;* SECOND HALF OF TABLE CONTAINS MANY ENTRIES, EACH ;* CONSISTS OF: (1) THE CHAR FOR WHICH DATA FOLLOWS, ;* (2) THE LENGTH OF THE DATA FOLLOWING, AND (3) ;* THE DATA. WHEN ITEM (1) IS 0, END-OF-TABLE IS FOUND. XCHG ;* DE WILL BE THE BUFFER POINTER, HL THE TABLE POINTER. FIND1: LDAX D ; END OF BUFFER? ORA A JM DONE ; YES. PUSH H ; NO, SAVE TABLE POINTER MVI B,0 ; FOR DAD B. FIND2: XRA A ORA M JNZ FIND3 ;* END-OF-TABLE FOUND (ERROR). SKIP CHAR AND PROCEED. NEXT: POP H ; RECOVER TABLE POINTER. INX D JMP FIND1 ;* LOOK FOR CORRECT DATA. FIND3: LDAX D CMP M ; MATCH? JZ FIND4 ; YES, DATA FOUND. INX H MOV C,M ; NO MATCH, LOAD LENGTH INTO BC. INX H DAD B ; SKIP OVER DATA. JMP FIND2 ; TRY NEXT DATA. FIND4: INX H MOV C,M INX H ;* CORRECT DATA FOUND. HL NOW POINTS TO DATA, C IS LENGTH ;* OF DATA. FOR EACH LINE, FIRST BYTE IS NUMBER OF BACKGROUN ;* CHARS TO PRINT, NEXT BYTE IS NUMBER OF FOREGROUND CHARS ;* TO PRINT, THEN BACKGROUND, ETC. WHEN TOTAL CHARS IN LINE ;* SO FAR IS 72, CRLF AND START NEXT LINE. PRECEED EACH ;* CHAR WITH A FEW LINE OF BACKGROUND. PUSH D LDA GAP ; # OF LINES BETWEEN MOV D,A PRNT1: MVI E,72 PRNT2: LDA BACK CALL OUTP DCR E JNZ PRNT2 CALL CRLF DCR D JNZ PRNT1 ;* GAP PRINTED. PROCEED WITH CHAR. REMEMBER DE IS ON STACK. PRNT3: LDA BACK MOV D,A LDA FORE MOV E,A ; AT NEW LINE: D IS BACK, E IS FORE MVI B,0 ; B IS CHAR COUNT SO FAR. PRNT5: MOV A,M ; GET COUNT. PUSH H MOV H,A ADD B MOV B,A ; UPDATE COUNT SO FAR. PRNT4: MOV A,D ; GET CHAR TO PRINT. CALL OUTP DCR H JNZ PRNT4 MOV A,D MOV D,E MOV E,A ; SWITCH BACK & FORE. POP H INX H DCR C ; ONE MORE BYTE OF DATA USED. MVI A,71 CMP B ; LINE DONE? JNC PRNT5 ; NO. ;* END OF LINE REACHED. END OF WHOLE CHAR TOO? CALL CRLF DCR C INR C JNZ PRNT3 ;* END OF WHOLE CHAR. POP D JMP NEXT ;* END OF POSTER. PRINT TRAILING GAP. DONE: LDA GAP ; # OF LINES. MOV A,D DONE1: MVI E,72 DONE2: LDA BACK CALL OUTP DCR E JNZ DONE2 CALL CRLF DCR D JNZ DONE1 ;* GAP PRINTED. GO BACK TO INPUT. JMP GO ;* OUTP ROUTINE PRINTS BUT SKIPS SPACES. SPACES ARE ;* COUNTED SO THEY CAN BE PRINTED IF NECESSARY, BUT ;* TRAILING SPACES WILL NEVER BE PRINTED. COUNT OF ;* SPACES LEFT IS IN 'SPACE'. OUTP: CPI ' ' JZ OUTP1 PUSH PSW LDA SPACE INR A OUTP2: DCR A STA SPACE JZ OUTP3 MVI A,' ' CALL OUTC LDA SPACE JMP OUTP2 OUTP3: POP PSW JMP OUTC ;* SPACE FOUND. JUST COUNT IT. OUTP1: LDA SPACE INR A STA SPACE MVI A,' ' ; JUST TO BE NICE RET ;* CONSTANTS, BUFFERS, TABLES, AND I/O ROUTINES. PSW EQU 6 SP EQU 6 GAP: DB 4 BACK: DB ' ' FORE: DB '@' INLEN: DB 72 INBUF: DW BUF inc: call inclr ora a jz inc ret inclr: push b push d push h mvi e,0ffh mvi c,6 call 5 pop h pop d pop b ret outc: push psw push b push d push h mov e,a mvi c,6 call 5 pop h pop d pop b pop psw ret .comment * INC: IN 126 ANI 1 JZ INC INCLR: IN 127 RET OUTC: PUSH PSW OUTC1: IN 126 ANI 128 JZ OUTC1 POP PSW OUT 127 RET * SPACE: DS 1 BUF: DS 72 bop: ;;TABLE EQU 600H org 600h TABLE: db 101o,102o,103o,104o,105o,106o,107o,110o,111o,112o,113o,114o,115o,116o,117o,120o db 121o,122o,123o,124o,125o,126o,127o,130o,131o,132o,061o,062o,063o,064o,065o,066o db 067o,070o,071o,040o,056o,054o,073o,077o,041o,072o,042o,047o,050o,051o,055o,000o db 101o,077o,006o,046o,034o,006o,050o,032o,006o,052o,030o,030o,006o,014o,010o,026o db 030o,006o,016o,010o,024o,030o,006o,020o,010o,022o,030o,006o,022o,006o,022o,030o db 006o,022o,006o,022o,030o,006o,022o,006o,022o,030o,006o,020o,010o,022o,030o,006o db 016o,010o,024o,030o,006o,014o,010o,026o,006o,052o,030o,006o,050o,032o,006o,046o db 034o,102o,125o,006o,060o,022o,006o,060o,022o,006o,060o,022o,006o,006o,022o,006o db 014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o db 022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o db 006o,022o,006o,014o,006o,022o,006o,006o,020o,010o,014o,006o,022o,006o,006o,016o db 012o,014o,006o,022o,006o,006o,014o,014o,014o,006o,022o,006o,060o,022o,010o,024o db 004o,024o,024o,012o,020o,010o,020o,026o,103o,105o,012o,050o,026o,010o,054o,024o db 006o,060o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o,044o db 006o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o db 022o,006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o,022o db 006o,010o,040o,010o,022o,010o,010o,034o,010o,024o,012o,010o,030o,010o,026o,104o db 077o,006o,060o,022o,006o,060o,022o,006o,060o,022o,006o,006o,044o,006o,022o,006o db 006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o db 044o,006o,022o,006o,006o,044o,006o,022o,006o,010o,040o,010o,022o,010o,010o,034o db 010o,024o,012o,010o,030o,010o,026o,014o,044o,030o,016o,040o,032o,020o,034o,034o db 105o,127o,006o,060o,022o,006o,060o,022o,006o,060o,022o,006o,006o,022o,006o,014o db 006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o db 006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o db 022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o db 014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,044o,006o,022o,006o db 006o,044o,006o,022o,006o,006o,044o,006o,022o,106o,077o,006o,060o,022o,006o,060o db 022o,006o,060o,022o,036o,006o,014o,006o,022o,036o,006o,014o,006o,022o,036o,006o db 014o,006o,022o,036o,006o,014o,006o,022o,036o,006o,014o,006o,022o,036o,006o,014o db 006o,022o,036o,006o,014o,006o,022o,036o,006o,014o,006o,022o,036o,006o,014o,006o db 022o,060o,006o,022o,060o,006o,022o,060o,006o,022o,107o,113o,012o,050o,026o,010o db 054o,024o,006o,060o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,006o db 006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o db 044o,006o,022o,006o,006o,014o,006o,022o,006o,022o,006o,006o,014o,006o,022o,006o db 022o,006o,006o,014o,006o,022o,006o,022o,006o,030o,020o,010o,022o,010o,026o,016o db 010o,024o,012o,024o,014o,010o,026o,110o,055o,006o,060o,022o,006o,060o,022o,006o db 060o,022o,036o,006o,044o,036o,006o,044o,036o,006o,044o,036o,006o,044o,036o,006o db 044o,036o,006o,044o,036o,006o,044o,036o,006o,044o,036o,006o,044o,006o,060o,022o db 006o,060o,022o,006o,060o,022o,111o,047o,006o,006o,044o,006o,022o,006o,006o,044o db 006o,022o,006o,006o,044o,006o,022o,006o,060o,022o,006o,060o,022o,006o,060o,022o db 006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,112o db 044o,012o,010o,066o,010o,010o,070o,006o,010o,072o,006o,006o,074o,006o,006o,074o db 006o,006o,074o,006o,006o,074o,006o,006o,074o,006o,006o,074o,006o,060o,022o,010o db 056o,022o,012o,054o,022o,113o,110o,006o,060o,022o,006o,060o,022o,006o,060o,022o db 030o,010o,050o,032o,010o,046o,034o,010o,044o,034o,012o,042o,032o,016o,040o,030o db 022o,036o,026o,010o,006o,010o,034o,024o,010o,012o,010o,032o,022o,010o,016o,010o db 030o,020o,010o,022o,010o,026o,016o,010o,026o,010o,024o,014o,010o,032o,010o,022o db 012o,010o,036o,006o,022o,010o,010o,042o,004o,022o,006o,010o,046o,002o,022o,114o db 055o,006o,060o,022o,006o,060o,022o,006o,060o,022o,006o,006o,074o,006o,006o,074o db 006o,006o,074o,006o,006o,074o,006o,006o,074o,006o,006o,074o,006o,006o,074o,006o db 006o,074o,006o,006o,074o,006o,006o,074o,006o,006o,074o,006o,006o,074o,115o,077o db 006o,060o,022o,006o,060o,022o,006o,060o,022o,056o,010o,022o,054o,010o,024o,052o db 010o,026o,050o,010o,030o,046o,010o,032o,044o,010o,034o,044o,006o,036o,044o,006o db 036o,044o,006o,036o,044o,010o,034o,046o,010o,032o,050o,010o,030o,052o,010o,026o db 054o,010o,024o,056o,010o,022o,006o,060o,022o,006o,060o,022o,006o,060o,022o,116o db 077o,006o,060o,022o,006o,056o,024o,006o,054o,026o,050o,010o,030o,046o,010o,032o db 044o,010o,034o,042o,010o,036o,040o,010o,040o,036o,010o,042o,034o,010o,044o,032o db 010o,046o,030o,010o,050o,026o,010o,052o,024o,010o,054o,022o,010o,056o,020o,010o db 060o,016o,010o,062o,014o,010o,064o,012o,054o,022o,010o,056o,022o,006o,060o,022o db 117o,077o,012o,050o,026o,010o,054o,024o,006o,060o,022o,006o,006o,044o,006o,022o db 006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,006o db 006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o db 044o,006o,022o,006o,006o,044o,006o,022o,006o,060o,022o,010o,054o,024o,012o,050o db 026o,120o,077o,006o,060o,022o,006o,060o,022o,006o,060o,022o,036o,006o,014o,006o db 022o,036o,006o,014o,006o,022o,036o,006o,014o,006o,022o,036o,006o,014o,006o,022o db 036o,006o,014o,006o,022o,036o,006o,014o,006o,022o,036o,006o,014o,006o,022o,036o .comment * db 006o,014o,006o,022o,036o,006o,014o,006o,022o,036o,030o,022o,040o,024o,024o,042o db 020o,026o,121o,103o,026o,026o,034o,024o,032o,032o,022o,036o,030o,020o,010o,022o db 010o,026o,016o,010o,026o,010o,024o,014o,010o,032o,010o,022o,014o,006o,036o,006o db 022o,014o,006o,036o,006o,022o,014o,006o,036o,006o,022o,014o,014o,026o,010o,022o 012'140 db 014o,012o,026o,010o,024o,014o,010o,026o,010o,026o,012o,046o,030o,010o,010o,004o 012'160 db 032o,032o,006o,010o,010o,026o,034o,122o,144o,006o,060o,022o,006o,060o,022o,006o 012'200 db 060o,022o,034o,010o,014o,006o,022o,032o,012o,014o,006o,022o,030o,014o,014o,006o 012'220 db 022o,026o,016o,014o,006o,022o,024o,010o,002o,006o,014o,006o,022o,022o,010o,004o 012'240 db 006o,014o,006o,022o,020o,010o,006o,006o,014o,006o,022o,016o,010o,010o,006o,014o 012'260 db 006o,022o,014o,010o,012o,006o,014o,006o,022o,012o,010o,014o,006o,014o,006o,022o 012'300 db 010o,010o,016o,006o,014o,006o,022o,006o,010o,020o,006o,014o,006o,022o,006o,006o 012'320 db 022o,030o,022o,006o,004o,026o,024o,024o,006o,002o,032o,020o,026o,123o,135o,006o 012'340 db 006o,026o,020o,026o,006o,006o,024o,024o,024o,006o,006o,022o,030o,022o,006o,006o 012'360 db 022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o oi3'00o db 014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o 013'020 db 022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o 013'040 db 006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,036o,014o 013'060 db 006o,022o,010o,032o,016o,006o,022o,012o,026o,020o,006o,022o,124o,055o,060o,006o Oi3'ioo db 022o,060o,006o,022o,060o,006o,022o,060o,006o,022o,060o,006o,022o,060o,006o,022o 013'120 db 006o,060o,022o,006o,060o,022o,006o,060o,022o,060o,006o,022o,060o,006o,022o,060o 013'140 db 006o,022o,060o,006o,022o,060o,006o,022o,060o,006o,022o,125o,055o,012o,054o,022o 013'160 db 010o,056o,022o,006o,060o,022o,006o,006o,074o,006o,006o,074o,006o,006o,074o,006o 013'200 db 006o,074o,006o,006o,074o,006o,006o,074o,006o,006o,074o,006o,006o,074o,006o,006o 013'220 db 074o,006o,060o,022o,010o,036o,022o,012o,054o,022o,126o,055o,020o,046o,022o,016o 013'240 db 050o,022o,014o,052o,022o,012o,010o,066o,010o,010o,070o,006o,010o,072o,006o,006o 013'260 db 074o,006o,006o,074o,006o,006o,074o,006o,010o,072o,010o,010o,070o,012o,010o,066o oi3'3oo db 014o,052o,022o,016o,050o,022o,020o,046o,022o,127o,077o,006o,060o,022o,006o,060o 013'320 db 022o,006o,060o,022o,006o,010o,072o,010o,010o,070o,012o,010o,066o,014o,010o,064o 013'340 db 016o,010o,062o,020o,010o,060o,022o,006o,060o,022o,006o,060o,022o,006o,060o,020o 013'360 db 010o,060o,016o,010o,062o,014o,010o,064o,012o,010o,066o,010o,010o,070o,006o,010o oi4'ooo db 072o,006o,060o,022o,006o,060o,022o,006o,060o,022o,130o,137o,006o,010o,040o,010o 014'020 db 022o,010o,010o,034o,010o,024o,012o,010o,030o,010o,026o,014o,010o,024o,010o,030o 014'040 db 0t6o,010o,020o,010o,032o,020o,010o,014o,010o,034o,022o,010o,010o,010o,036o,024o 014'060 db 010o,004o,010o,040o,026o,020o,042o,030o,014o,044o,030o,014o,044o,030o,014o,044o oi4'ioo db 026o,020o,042o,024o,010o,004o,010o,040o,022o,010o,010o,010o,036o,020o,010o,014o 014'120 db 010o,034o,016o,010o,020o,010o,032o,014o,010o,024o,010o,030o,012o,010o,030o,010o 014'140 db 026o,010o,010o,034o,010o,024o,006o,010o,040o,010o,022o,131o,055o,056o,010o,022o 014'160 db 054o,010o,024o,052o,010o,026o,050o,010o,030o,046o,010o,032o,044o,010o,034o,006o 014'200 db 044o,036o,006o,044o,036o,006o,044o,036o,044o,010o,034o,046o,010o,032o,050o,010o 014'220 db 030o,052o,010o,026o,054o,010o,024o,056o,010o,022o,132o,203o,006o,010o,042o,006o 014'240 db 022o,006o,012o,040o,006o,022o,006o,014o,036o,006o,022o,006o,016o,034o,006o,022o 014'260 db 006o,006o,002o,010o,032o,006o,022o,006o,006o,004o,010o,030o,006o,022o,006o,006o 014'300 db 006o,010o,026o,006o,022o,006o,006o,010o,010o,024o,006o,022o,006o,006o,012o,010o 014'320 db 022o,006o,022o,006o,006o,014o,010o,020o,006o,022o,006o,006o,016o,010o,016o,006o 014'340 db 022o,006o,006o,020o,010o,014o,006o,022o,006o,006o,022o,010o,012o,006o,022o,006o 014'360 db 006o,024o,010o,010o,006o,022o,006o,006o,026o,010o,006o,006o,022o,006o,006o,030o ois'ooo db 010o,004o,006o,022o,006o,006o,032o,010o,002o,006o,022o,006o,006o,034o,016o,022o 015'020 db 006o,006o,036o,014o,022o,006o,006o,040o,012o,022o,006o,006o,042o,010o,022o,061o 015'040 db 041o,006o,006o,036o,010o,026o,006o,006o,040o,010o,024o,006o,006o,042o,010o,022o oir'06o db 006o,060o,022o,006o,060o,022o,006o,060o,022o,006o,006o,074o,006o,006o,074o,006o ois'ioo db 006o,074o,062o,135o,006o,024o,020o,010o,026o,006o,026o,020o,010o,024o,006o,030o 013'120 db 020o,010o,022o,006o,006o,014o,006o,022o,006o,022o,006o,006o,014o,006o,022o,006o 015'140 db 022o,006o,006o,014o,006o,022o,006o,022o,006o,006o,014o,006o,022o,006o,022o,006o 013'160 db 006o,014o,006o,022o,006o,022o,006o,006o,014o,006o,022o,006o,022o,006o,006o,014o 015'200 db 006o,022o,006o,022o,006o,006o,014o,006o,022o,006o,022o,006o,006o,014o,006o,022o 015'220 db 006o,022o,006o,006o,014o,036o,022o,006o,006o,016o,032o,024o,006o,006o,020o,026o 015'240 db 026o,063o,131o,012o,010o,036o,006o,022o,010o,010o,040o,006o,022o,006o,010o,042o 015'260 db 006o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o,022o,006o,006o,044o,006o 015'300 db 022o,006o,006o,026o,004o,012o,006o,022o,006o,006o,024o,010o,010o,006o,022o,006o 015'300 db 006o,022o,014o,006o,006o,022o,006o,006o,020o,020o,004o,006o,022o,006o,006o,016o OIS'340 db 010o,004o,010o,002o,006o,022o,006o,006o,014o,010o,010o,016o,022o,006o,030o,014o 015'360 db 014o,022o,010o,024o,020o,012o,022o,012o,020o,024o,010o,022o,064o,067o,036o,010o oiá'ooo db 042o,036o,012o,040o,036o,014o,036o,036o,016o,034o,036o,006o,002o,010o,032o,036o oi6'02o db 006o,004o,010o,030o,036o,006o,006o,010o,026o,036o,006o,010o,010o,024o,036o,006o 016'040 db 012o,010o,022o,006o,060o,022o,006o,060o,022o,006o,060o,022o,036o,006o,044o,036o 016'060 db 006o,044o,036o,006o,044o,065o,135o,012o,010o,014o,030o,022o,010o,010o,016o,030o oió'ioo db 022o,006o,010o,020o,030o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o 016'120 db 006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o 016'140 db 006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o 016'160 db 006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o 016'200 db 022o,006o,014o,006o,022o,006o,036o,014o,006o,022o,010o,032o,016o,006o,022o,012o 016'220 db 026o,020o,006o,022o,066o,127o,012o,050o,026o,010o,054o,024o,006o,060o,022o,006o 016'240 db 006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o 016'260 db 006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o 016'300 db 006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o 016'320 db 006o,006o,022o,006o,014o,006o,022o,006o,006o,022o,006o,014o,006o,022o,006o,036o 016'340 db 012o,010o,022o,010o,032o,012o,010o,024o,012o,026o,012o,010o,026o,067o,071o,060o 016'360 db 006o,022o,060o,006o,022o,060o,006o,022o,060o,006o,022o,060o,006o,022o,060o,006o oi7'Ooo db 022o,006o,032o,020o,006o,022o,006o,034o,016o,006o,022o,006o,036o,014o,006o,022o 017'020 db 036o,010o,012o,006o,022o,040o,010o,010o,006o,022o,042o,010o,006o,006o,022o,044o 017'040 db 022o,022o,046o,020o,022o,050o,016o,022o,070o,131o,012o,020o,010o,020o,026o,010o 017'060 db 024o,004o,024o,024o,006o,060o,022o,006o,006o,014o,014o,014o,006o,022o,006o,006o 017'ioo db 014o,012o,016o,006o,022o,006o,006o,014o,010o,020o,006o,022o,006o,006o,014o,006o 017'120 db 022o,006o,022o,006o,006o,014o,006o,022o,006o,022o,006o,006o,014o,006o,022o,006o 017'140 db 022o,006o,006o,014o,010o,020o,006o,022o,006o,006o,014o,012o,016o,006o,022o,006o 017'160 db 006o,014o,014o,014o,006o,022o,006o,060o,022o,010o,024o,004o,024o,024o,012o,020o 017'200 db 010o,020o,026o,071o,127o,012o,010o,012o,026o,026o,010o,010o,012o,032o,024o,006o 017'220 db 010o,012o,036o,022o,006o,006o,014o,006o,022o,006o,022o,006o,006o,014o,006o,022o 017'240 db 006o,022o,006o,006o,014o,006o,022o,006o,022o,006o,006o,014o,006o,022o,006o,022o 017'260 db 006o,006o,014o,006o,022o,006o,022o,006o,006o,014o,006o,022o,006o,022o,006o,006o 017'300 db 014o,006o,022o,006o,022o,006o,006o,014o,006o,022o,006o,022o,006o,006o,014o,006o 017'320 db 022o,006o,022o,006o,060o,022o,010o,054o,024o,012o,050o,026o,040o,022o,110o,HOo 017'340 db 110o,110o,110o,110o,110o,HOo,110o,110o,110o,110o,110o,110o,110o,110o,110o,110o 017'360 db 056o,022o,012o,004o,072o,010o,010o,070o,006o,014o,066o,006o,014o,066o,010o,010o 020'000 db 070o,012o,004o,072o,054o,025o,006o,002o,100o,006o,004o,076o,006o,006o,074o,006o 020'020 db 014o,066o,010o,012o,066o,012o,010o,066o,110o,110o,110o,073o,037o,006o,002o,100o 020'040 db 006o,004o,076o,006o,006o,074o,006o,014o,004o,004o,056o,010o,012o,002o,010o,054o 020'060 db 012o,024o,052o,022o,014o,052o,024o,010o,054o,026o,004o,056o,077o,077o,052o,010o 020'100 db 026o,054o,010o,024o,056o,010o,022o,060o,006o,022o,060o,006o,022o,060o,006o,022o 020'120 db 006o,006o,006o,016o,020o,006o,022o,006o,006o,006o,020o,016o,006o,022o,006o,006o 020'140 db 006o,022o,014o,006o,022o,036o,006o,014o,006o,022o,036o,006o,014o,006o,022o,036o 020'160 db 006o,014o,006o,022o,036o,030o,022o,040o,024o,024o,042o,020o,026o,041o,017o,006o 020'200 db 006o,006o,044o,022o,006o,006o,006o,044o,022o,006o,006o,006o,044o,022o,072o,032o 020'220 db 012o,004o,010o,004o,056o,010o,010o,004o,010o,054o,006o,030o,052o,006o,030o,052o 020'240 db 010o,010o,004o,010o,054o,012o,004o,010o,004o,056o,042o,025o,052o,014o,022o,052o 020'260 db 014o,022o,052o,014o,022o,110o,110o,110o,052o,014o,022o,052o,014o,022o,052o,014o 020'300 db 022o,047o,022o,052o,002o,034o,052o,004o,032o,052o,006o,030o,052o,014o,022o,054o 020'320 db 012o,022o,056o,010o,022o,050o,047o,020o,034o,034o,016o,040o,032o,014o,044o,030o 020'340 db 012o,010o,030o,010o,026o,010o,010o,034o,010o,024o,006o,010o,040o,010o,022o,006o 020'360 db 006o,044o,006o,022o,006o,004o,050o,004o,022o,006o,002o,054o,002o,022o,051o,047o 021'000 db 006o,002o,054o,002o,022o,006o,004o,050o,004o,022o,006o,006o,044o,006o,022o,006o 021'020 db 010o,040o,010o,022o,010o,010o,034o,010o,024o,012o,010o,030o,010o,026o,014o,044o 021'040 db 030o,016o,040o,032o,020o,034o,034o,055o,044o,036o,006o,044o,036o,006o,044o,036o 021'060 db 006o,044o,036o,006o,044o,036o,006o,044o,036o,006o,044o,036o,006o,044o,036o,006o 021'ioo db 044o,036o,006o,044o,036o,006o,044o,036o,006o,044o,036o,006o,044o,000o * end