10 poke 53280,6: poke 53281,0
20 print chr$(31) chr$(147)
30 dim H(4,3,2,2), G(3,3), C(1039)
40 dim A(390), X(390), Y(390)
50 dim D(3), I(3), S(3)
60 dim E(255), B(11), N(1)
100 B(10)=38: B(11)=-38
110 G(0,1)=2: G(1,0)=2: G(1,3)=1
120 G(2,1)=3: G(3,0)=3: G(3,2)=1
130 E(29)=1: E(157)=2: E(17)=3: E(145)=4
140 N(1)=29: c=740
190 for n=0 to 3: read I(n): next
200 for n=0 to 3: read D(n),S(n): next
230 for v=0 to 4
240 for w=0 to 3: read E$: n=0
250 for y=0 to 2
260 for x=0 to 2: n=n+1
270 H(v,w,y,x)=asc(mid$(E$,n))-48
280 next x,y,w,v
300 for y=0 to 24: read E$
310 for x=1 to 40
320 a=asc(mid$(E$,x))-49
330 on a+3 goto 410,400
340 e=e+1
350 A(e)=a: C(f)=e
360 Y(e)=y: X(e)=x
400 poke 55296+f,0
410 poke 1024+f,224
420 f=f+1
430 next x,y
500 y=Y(C(c)): x=X(C(c))
510 for n=0 to 3
520 e=S(n): a=A(C(e))
530 if a>8 goto 580
540 if a<4 then D(n)=G(a,D(n)): goto 580
550 v=Y(C(e))-y: if n=1 or n=3 then v=-v
560 w=X(C(e))-x: if n>1 then w=-w
570 D(n)=H(a-4,D(n),sgn(v)+1,sgn(w)+1)
580 f=e+I(D(n)): if C(f)=0 then f=e+B(a)
590 S(n)=f: b=n+2
600 v=55296+e: w=55296+f
610 poke v,0: poke v-1,0: poke v-40,0: poke v-41,0
620 poke w,b: poke w-1,b: poke w-40,b: poke w-41,b
630 if e=c or f=c goto 630
640 next
700 n=0
710 get E$: if E$="" goto 730
720 N(0)=asc(E$): goto 710
730 if E(N(n)) then f=c+I(E(N(n))-1): if C(f) goto 760
740 if n=0 then n=1: goto 730
750 f=c+B(A(C(c))): if c=f goto 500
760 v=55296+c: w=55296+f
770 N(1)=N(n): c=f
780 poke v,0: poke v-1,0: poke v-40,0: poke v-41,0
790 poke w,7: poke w-1,7: poke w-40,7: poke w-41,7
800 goto 500
1000 data 1,-1,40,-40
1010 data 0,418,1,424,1,498,0,504
1100 data "000000000","222222333"
1110 data "022022022","033033033"
1120 data "222222333","000000000"
1130 data "221221221","331331331"
1140 data "222000000","222111111"
1150 data "000000000","001001001"
1160 data "000000333","111111333"
1170 data "001001001","000000000"
1180 data "222000333","222111333"
1190 data "021021021","031031031"
1200 data "0000000000000000000//0000000000000000000"
1210 data "01::::::7:::::::::2//01:::::::::7::::::2"
1220 data "0://///0:////////0://0:////////0://///0:"
1230 data "0:000000:000000000:000:000000000:000000:"
1240 data "05::::::8::::::7::8:::8::7::::::8::::::6"
1250 data "0:////////////0:////////0:////////////0:"
1260 data "0:0000000/00000:000000000:0000/00000000:"
1270 data "03::::::2/01:::8:::2:1:::8:::2/01::::::4"
1280 data "///////0:/0://////0:0://////0:/0:///////"
1290 data "///////0:/0:/000000:0:00000/0:/0:///////"
1300 data "00000000:00:/01::::4:3::::2/0:00:0000000"
1310 data "0;::::::9::6/0:00000000000:/05::9::::::<"
1320 data "///////0:/0:/03:::::::::::4/0:/0:///////"
1330 data "///////0:/0:////////////////0:/0:///////"
1340 data "00000000:/0:00000000000000000:/0:0000000"
1350 data "01::::::6/05:::::::::::::::::6/05::::::2"
1360 data "0://///0:/0:////////////////0:/0://///0:"
1370 data "0:000000:00:00000000000000000:00:000000:"
1380 data "03::::::9::9:::::::::::::::::9::9::::::4"
1390 data "///////0:/0:////////////////0:/0:///////"
1400 data "00000000:/0:0000000//00000000:/0:0000000"
1410 data "01::::::4/03::::::2//01::::::4/03::::::2"
1420 data "0:///////////////0://0:///////////////0:"
1430 data "0:0000000000000000:000:0000000000000000:"
1440 data "03::::::::::::::::8:::8::::::::::::::::4"