$ od -c -N 50000 [Indigo]<AltoSource>RSILSOURCES.DM!2>FontWidths.bcpl
0000000    /   /       F       O       N       T       W       I       D
0000020        T       H       S       -   -       p   u   b   l   i   c
0000040    l   y       d   i   s   t   r   i   b   u   t   e   d       f
0000060    i   l   e   .           (   P   R   E   P   R   E   S   S   )
0000100   \r   /   /       c   a   t   a   l   o   g       n   u   m   b
0000120    e   r       ?   ?   ?  \r   /   /   E   n   c   o   d   e   F
0000140    a   c   e   (   w   e   i   g   h   t   ,   s   l   o   p   e
0000160    ,   e   x   p   a   n   s   i   o   n   )       =   >       8
0000200    -   b   i   t       f   a   c   e       c   o   d   e   .  \r
0000220    /   /  \t   A   n       e   n   t   r   y       t   h   a   t
0000240        i   s       o   m   i   t   t   e   d       o   r       m
0000260    a   d   e       z   e   r   o       i   s       d   e   f   a
0000300    u   l   t   e   d   .  \r   /   /  \t   A   r   g   u   m   e
0000320    n   t   s       a   r   e       u   p   p   e   r       c   a
0000340    s   e       l   e   t   t   e   r   s       (   e   .   g   .
0000360        M       R       R   )  \r   /   /   D   e   c   o   d   e
0000400    F   a   c   e   (   f   a   c   e   ,   l   v   w   e   i   g
0000420    h   t   ,   l   v   s   l   o   p   e   ,   l   v   e   x   p
0000440    a   n   s   i   o   n   )  \r   /   /  \t   T   a   k   e   s
0000460        8   -   b   i   t       f   a   c   e       c   o   d   e
0000500        a   n   d       r   e   t   u   r   n   s       t   h   e
0000520        t   h   r   e   e       d   e   s   c   r   i   p   t   i
0000540    v   e  \r   /   /  \t   l   e   t   t   e   r   s   .  \r   /
0000560    /   L   o   o   k   u   p   F   o   n   t   N   a   m   e   (
0000600    s   ,   n   a   m   e   ,   f   a   c   e   ,   s   i   z   e
0000620    ,   r   o   t   a   t   i   o   n   ,   b   u   f   x   ,   b
0000640    u   f   y   ,   b   o   u   n   d   b   o   x  \r   /   /  \t
0000660   \t   [   ,   b   u   f   f   e   r   l   e   n   g   t   h   ,
0000700    l   v   p   ]   )  \r   /   /  \t   L   o   o   k   s       u
0000720    p       t   h   e       f   o   n   t       n   a   m   e   d
0000740        b   y       n   a   m   e   (   s   t   r   i   n   g   )
0000760    ,   f   a   c   e   (   e   n   c   o   d   e   d       a   s
0001000        a   b   o   v   e   )   ,  \r  \n   /   /  \t   s   i   z
0001020    e   (   <   0       =   >   m   i   c   r   o   n   s   ,    
0001040    >   0       =   >       p   o   i   n   t   s   )   ,       r
0001060    o   t   a   t   i   o   n   (   m   i   n   u   t   e   s   )
0001100    .           R   e   t   u   r   n   s  \r   /   /  \t   t   r
0001120    u   e       i   f       m   a   t   c   h       e   x   i   s
0001140    t   s   ,       f   a   l   s   e       o   t   h   e   r   w
0001160    i   s   e   .           "   s   "       i   s       a       s
0001200    t   r   e   a   m  \r   /   /  \t   w   i   t   h       F   O
0001220    N   T   S   .   W   I   D   T   H   S       o   p   e   n    
0001240    o   n       i   t   .           "   b   u   f   x   "       a
0001260    n   d       "   b   u   f   y   "       w   i   l   l       b
0001300    e       f   i   l   l   e   d  \r   /   /  \t   w   i   t   h
0001320        x       a   n   d       y       w   i   d   t   h   s    
0001340        r   e   s   p   e   c   t   i   v   e   l   y       (   i
0001360    n   d   e   x   e   d       b   y       c   h   a   r       c
0001400    o   d   e   )   .  \r   /   /  \t   "   b   o   u   n   d   b
0001420    o   x   "       i   s       a       4   -   w   o   r   d    
0001440    v   e   c   t   o   r       t   o       r   e   c   e   i   v
0001460    e       t   h   e       b   o   u   n   d   i   n   g       b
0001500    o   x  \r   /   /  \t   (   r   o   t   a   t   i   o   n   s
0001520        o   f       b   o   u   n   d   i   n   g       b   o   x
0001540        a   r   e       n   o   t       p   e   r   f   o   r   m
0001560    e   d   !   )  \r   /   /  \t   "   b   u   f   f   e   r   l
0001600    e   n   g   t   h   "       i   s       t   h   e       l   e
0001620    n   g   t   h       o   f       t   h   e       b   u   f   f
0001640    e   r       (   2   5   6       i   f       o   m   i   t   t
0001660    e   d   )   .  \r   /   /  \t   "   l   v   p   "       i   s
0001700        f   i   l   l   e   d       @       w   i   t   h       f
0001720    a   m   i   l   y       c   o   d   e       (   m   a   y    
0001740    b   e       o   m   i   t   t   e   d   )  \r   /   /   C   a
0001760    l   c   u   l   a   t   e   W   i   d   t   h   s   (   b   e
0002000    s   t   ,   s   ,   s   i   z   ,   r   o   t   ,   b   o   u
0002020    n   d   b   o   x   ,   b   u   f   x   ,   b   u   f   y   ,
0002040    b   u   f   l   )  \r   /   /  \t   I   f       y   o   u    
0002060    h   a   v   e       a       f   i   l   e       y   o   u    
0002100    w   a   n   t       t   o       r   e   a   d       b   y    
0002120    h   a   n   d   ,       u   s   e       t   h   i   s       p
0002140    r   o   c   .  \r   /   /  \t   b   e   s   t       i   s    
0002160    a   n       I   X       e   n   t   r   y       t   o       g
0002200    e   t       w   i   d   t   h   s       f   r   o   m   ;    
0002220    s       i   s       t   h   e       f   i   l   e   ;       r
0002240    o   t  \r   /   /  \t   i   s       t   h   e       r   o   t
0002260    a   t   i   o   n       y   o   u       d   e   s   i   r   e
0002300    ;       b   o   u   n   d   b   o   x       i   s       a    
0002320    v   e   c       4       t   h   a   t       w   i   l   l    
0002340    b   e  \r   /   /  \t   f   i   l   l   e   d       w   i   t
0002360    h       t   h   e       b   o   u   n   d   i   n   g       b
0002400    o   x   ;       b   u   f   x       a   n   d       b   u   f
0002420    y       a   r   e       a   s       f   o   r  \r   /   /  \t
0002440    L   o   o   k   u   p   F   o   n   t   N   a   m   e  \r   /
0002460    /   M   u   l   D   i   v   (   a   ,   b   ,   c   )       =
0002500    >       a   *   b   /   c  \r   /   /  \t   M   u   l   t   i
0002520    p   l   y       a   n   d       s   c   a   l   e   .        
0002540    A   l   l       a   r   g   u   m   e   n   t   s       p   o
0002560    s   i   t   i   v   e       1   6   -   b   i   t       n   u
0002600    m   b   e   r   s   .  \r   /   /  \t   M   a   i   n   t   a
0002620    i   n   s       m   a   x   i   m   u   m       p   r   e   c
0002640    i   s   i   o   n   .  \r   /   /   S   i   g   n   e   d   M
0002660    u   l   D   i   v   (   a   ,   b   ,   c   )  \r   /   /  \t
0002700    S   a   m   e       a   s       M   u   l   D   i   v   ,    
0002720    b   u   t       w   i   l   l       h   a   n   d   l   e    
0002740    s   i   g   n   e   d       n   u   m   b   e   r   s   .  \r
0002760    /   /   C   o   s   (   t   h   e   t   a   ,   l   v   s   i
0003000    g   n   ,   l   v   m   a   g   )  \r   /   /  \t   C   o   m
0003020    p   u   t   e   s       t   h   e       c   o   s   i   n   e
0003040        o   f       t   h   e       a   n   g   l   e       "   t
0003060    h   e   t   a   "       (   i   n       m   i   n   u   t   e
0003100    s   )       a   n   d  \r   /   /  \t   r   e   t   u   r   n
0003120    s       s   i   g   n       (   0       i   f       p   o   s
0003140    i   t   i   v   e   ,       -   1       i   f       n   e   g
0003160    a   t   i   v   e   )       a   n   d       m   a   g   n   i
0003200    t   u   d   e  \r   /   /  \t   (   0       t   o       #   1
0003220    7   7   7   7   7   )  \r  \r  \r   /   /   g   e   t       "
0003240    i   x   .   d   f   s   "           T   H   E       F   O   L
0003260    L   O   W   I   N   G       I   S       A       C   O   P   Y
0003300        I   X   .   D   F   S  \r  \r   /   /       P       R    
0003320    E       P       R       E       S       S                   D
0003340        E       F       I       N       I       T       I       O
0003360        N       S  \r   /   /  \r  \r  \r   /   /       I       N
0003400        D       E       X                       D   e   f   i   n
0003420    i   t   i   o   n   s  \r  \r   s   t   r   u   c   t   u   r
0003440    e       I   X   H   :       [  \r  \t   T   y   p   e  \t   b
0003460    i   t       4  \r  \t   L   e   n   g   t   h  \t   b   i   t
0003500        1   2  \r  \t   ]  \r  \r   s   t   r   u   c   t   u   r
0003520    e       I   X   N   :       [  \t  \t   /   /   F   o   r    
0003540    a       n   a   m   e  \r  \t   @   I   X   H  \r  \t   C   o
0003560    d   e       w   o   r   d  \r  \t   N   a   m   e       w   o
0003600    r   d  \r  \t   c   o   n   t   d       w   o   r   d       9
0003620   \r  \t   ]  \r  \r   s   t   r   u   c   t   u   r   e       I
0003640    X   :       [  \t  \t  \t   /   /   F   o   r       s   p   l
0003660    i   n   e   s   ,       c   h   a   r   a   c   t   e   r   s
0003700   \r  \t   @   I   X   H  \t  \t  \t   /   /   H   e   a   d   e
0003720    r  \r  \t   [       f   a   m       b   y   t   e  \t  \t   /
0003740    /       F   a   m   i   l   y       n   u   m   b   e   r  \r
0003760   \t           f   a   c   e       b   y   t   e  \t  \t   /   /
0004000        F   a   c   e       c   o   d   e  \r  \t   ]       =    
0004020    f   a   m   f   a   c   e       w   o   r   d  \r  \t   b   c
0004040        b   y   t   e  \t  \t  \t   /   /       F   i   r   s   t
0004060        c   h   a   r       n   u   m   b   e   r  \r  \t   e   c
0004100        b   y   t   e  \t  \t  \t   /   /       a   n   d       l
0004120    a   s   t  \r  \t   s   i   z       w   o   r   d  \t  \t   /
0004140    /       F   o   n   t       s   i   z   e       (   1   0    
0004160    m   i   c   r   o   n       u   n   i   t   s   )  \r  \t   r
0004200    o   t   a   t   i   o   n       w   o   r   d  \t  \t   /   /
0004220        R   o   t   a   t   i   o   n       (   a   n   t   i    
0004240    c   l   o   c   k   w   i   s   e   )  \r  \t   s   a       w
0004260    o   r   d       2  \t  \t   /   /   S   t   a   r   t   i   n
0004300    g       a   d   d   r   e   s   s       o   f       d   a   t
0004320    a       p   a   r   t  \r  \t   l   e   n       w   o   r   d
0004340        2  \t  \t   /   /   L   e   n   g   t   h       o   f    
0004360    d   a   t   a       p   a   r   t  \r  \t  \t  \t  \t   /   /
0004400    W   i   d   t   h       t   y   p   e       e   n   d   s    
0004420    h   e   r   e  \r  \t  \t  \t  \t   /   /   S   p   l   i   n
0004440    e       t   y   p   e       e   n   d   s       h   e   r   e
0004460   \r  \t   r   e   s   o   l   u   t   i   o   n   x       w   o
0004500    r   d  \t   /   /       1   0   *   (   n   u   m   b   e   r
0004520        o   f       b   i   t   s   /   i   n   c   h   )  \r  \t
0004540    r   e   s   o   l   u   t   i   o   n   y       w   o   r   d
0004560   \t   /   /                               d   i   t   t   o  \r
0004600   \t   ]  \r  \r   m   a   n   i   f   e   s   t       [  \r   /
0004620    /   I   X   H       t   y   p   e   s  \r  \t   I   X   T   y
0004640    p   e   E   n   d   =   0  \r  \t   I   X   T   y   p   e   N
0004660    a   m   e   =   1  \r  \t   I   X   T   y   p   e   S   p   l
0004700    i   n   e   s   =   2  \r  \t   I   X   T   y   p   e   C   h
0004720    a   r   s   =   3  \r  \t   I   X   T   y   p   e   W   i   d
0004740    t   h   s   =   4  \r   /   /   I   X   H       l   e   n   g
0004760    t   h   s  \r  \t   I   X   L   E   n   d   =   1  \r  \t   I
0005000    X   L   N   a   m   e   =   s   i   z   e       I   X   N   /
0005020    1   6  \r  \t   I   X   L   S   p   l   i   n   e   s   =   9
0005040   \r  \t   I   X   L   C   h   a   r   s   =   1   1  \r  \t   I
0005060    X   L   W   i   d   t   h   s   =   9  \r  \t   I   X   L   M
0005100    a   x   =   1   1  \r  \t   ]  \r  \r   /   /       W       I
0005120        D       T       H               s   e   g   m   e   n   t
0005140        d   e   f   i   n   i   t   i   o   n   s  \r  \r   s   t
0005160    r   u   c   t   u   r   e       W   T   B   :       [  \t  \t
0005200    /   /   W   i   d   t   h       T   a   b   l   e       B   l
0005220    o   c   k  \r  \t   X   L       w   o   r   d  \t  \t  \t   /
0005240    /   X       o   f   f   s   e   t  \r  \t   Y   B       w   o
0005260    r   d  \t  \t  \t   /   /   Y       o   f   f   s   e   t  \r
0005300   \t   X   W       w   o   r   d  \t  \t  \t   /   /       w   i
0005320    d   t   h  \r  \t   Y   H       w   o   r   d  \t  \t  \t   /
0005340    /       h   e   i   g   h   t  \r  \t   X   W   i   d   t   h
0005360    F   i   x   e   d       b   i   t  \r  \t   Y   W   i   d   t
0005400    h   F   i   x   e   d       b   i   t  \r  \t   s   p   a   r
0005420    e       b   i   t       1   4  \r  \t   ]  \r  \r   /   /    
0005440    S       P       L       I       N       E                    
0005460    s   e   g   m   e   n   t       d   e   f   i   n   i   t   i
0005500    o   n   s  \r  \r   s   t   r   u   c   t   u   r   e       S
0005520    p   l   i   n   e   W   i   d   t   h   :       [  \t  \t   /
0005540    /   B   l   o   c   k       d   e   s   c   r   i   b   i   n
0005560    g       s   p   l   i   n   e       w   i   d   t   h   s  \r
0005600   \t   W   X       w   o   r   d       2  \t  \t   /   /   X    
0005620    w   i   d   t   h       -   -       F   P  \r  \t   W   Y    
0005640    w   o   r   d       2  \t  \t   /   /   Y       w   i   d   t
0005660    h       -   -       F   P  \r  \t   X   L       w   o   r   d
0005700        2  \t  \t   /   /   X       l   e   f   t       -   -    
0005720    F   P  \r  \t   Y   B       w   o   r   d       2  \t  \t   /
0005740    /   Y       b   o   t   t   o   m       -   -       F   P  \r
0005760   \t   X   R       w   o   r   d       2  \t  \t   /   /   X    
0006000    r   i   g   h   t       -   -       F   P  \r  \t   Y   T    
0006020    w   o   r   d       2  \t  \t   /   /   Y       t   o   p    
0006040    -   -       F   P  \r  \t   ]  \r  \r   m   a   n   i   f   e
0006060    s   t       S   p   l   i   n   e   W   i   d   t   h   s   i
0006100    z   e   =   s   i   z   e       S   p   l   i   n   e   W   i
0006120    d   t   h   /   1   6  \r  \r   m   a   n   i   f   e   s   t
0006140        [  \r   /   /   C   o   d   e   s       i   n       t   h
0006160    e       h   e   i   g   h   t       e   n   t   r   y       f
0006200    o   r       a       c   h   a   r       t   h   a   t       i
0006220    n   d   i   c   a   t   e       s   o   m   e   t   h   i   n
0006240    g       e   l   s   e  \r  \t   H   N   o   n   E   x   C   o
0006260    d   e   =   -   1  \r  \t   H   S   p   l   i   n   e   C   o
0006300    d   e   =   -   2  \r  \r   /   /   D   L       T   y   p   e
0006320    s       (   f   o   r       S   p   l   i   n   e       F   i
0006340    l   e   )  \r  \t   D   S   p   l   i   n   e   F   o   n   t
0006360    M   o   v   e   T   o   =   1  \r  \t   D   S   p   l   i   n
0006400    e   F   o   n   t   D   r   a   w   T   o   =   2  \r  \t   D
0006420    S   p   l   i   n   e   F   o   n   t   D   r   a   w   C   u
0006440    r   v   e   =   3  \r  \r  \t   D   S   p   l   i   n 345   F
0006460    o   n   t   N   e   w   O   b   j   e   c   t   =   -   1  \r
0006500   \t   D   S   p   l   i   n   e   F   o   n   t   E   n   d   O
0006520    b   j   e   c   t   s   =   -   2  \r  \t   ]  \r  \r  \r   /
0006540    /       C       H       A       R                           s
0006560    e   g   m   e   n   t       d   e   f   i   n   i   t   i   o
0006600    n   s       (   s   c   a   n   -   c   o   n 366   e   r   t
0006620    e   d       c   h   a   r   s   )  \r  \r   s   t   r   u   c
0006640    t   u   r   e       C   h   a   r   W   i   d   t   h   :    
0006660    [  \t  \t   /   /   B   l   o   c   k       d   e   s   c   r
0006700    i   b   i   n   g       c   h   a   r       w   i   d   t   h
0006720    s  \r  \t   W   X       w   o   r   d       2  \t  \t   /   /
0006740    X       w   i   d   t   h       -   -       D   P  \r  \t   W
0006760    Y       w   o   r   d       2  \t  \t   /   /   Y       w   i
0007000    d   t   h       -   -       D   P  \r  \t   X   L       w   o
0007020    r   d  \t  \t  \t   /   /   X       l   e   f   t       (   o
0007040    f   f   s   e   t   )       i   n   t   e   g   e   r  \r  \t
0007060    Y   B       w   o   r   d  \t  \t  \t   /   /   Y       b   o
0007100    t   t   o   m       (   o   f   f   s   e   t   )       i   n
0007120    t   e   g   e   r  \r  \t   W       w   o   r   d  \t  \t  \t
0007140    /   /   W   i   d   t   h       (   i   n   t   e   g   e   r
0007160    )  \r  \t   H       w   o   r   d  \t  \t  \t   /   /   H   e
0007200    i   g   h   t       (   i   n   t   e   g   e   r   )       o
0007220    r       s   p   e   c   i   a   l       c   o   d   e  \r  \t
0007240    ]  \r  \r   m   a   n   i   f   e   s   t       C   h   a   r
0007260    W   i   d   t   h   s   i   z   e   =   s   i   z   e       C
0007300    h   a   r   W   i   d   t   h   /   1   6  \r  \r   s   t   r
0007320    u   c   t   u   r   e       F   H   E   A   D   :       [  \t
0007340   \t   /   /   F   o   n   t       h   e   a   d   e   r   ,    
0007360    s   c   a   n       c   o   n   v   e   r   t   e   d  \r  \t
0007400    h   w       b   i   t       6  \t  \t  \t   /   /   H   e   i
0007420    g   h   t       i   n       w   o   r   d   s  \r  \t   n   s
0007440        b   i   t       1   0  \t  \t  \t   /   /   w   i   d   t
0007460    h       i   n       s   c   a   n       l   i   n   e   s  \r
0007500   \t   ]  \r  \r  \r   /   /   M   i   s   c   .  \r   s   t   r
0007520    u   c   t   u   r   e       C   o   n   v   e   r   t   :    
0007540    [  \r  \t   M   o   n   o   t   o   n   e       w   o   r   d
0007560   \t  \t   /   /   T   r   u   e       i   f       i   n   p   u
0007600    t       t   o       c   o   n   v   e   r   s   i   o   n    
0007620    i   s       m   o   n   o   t   o   n   e  \r  \t   S   p   l
0007640    i   n   e   O   k       w   o   r   d  \t  \t   /   /   T   r
0007660    u   e       i   f       o   u   t   p   u   t       c   a   n
0007700        b   e       s   p   l   i   n   e       (   t   o   o    
0007720    b   i   g   )  \r  \t   B   B   G   o   o   d       w   o   r
0007740    d  \t  \t   /   /   T   r   u   e       i   f       b   o   u
0007760    n   d   i   n   g       b   o   x       w   i   l   l       b
0010000    e       c   o   r   r   e   c   t  \r  \t   P   r   e   s   s
0010020    F   o   n   t   P   a   r   t       w   o   r   d  \t   /   /
0010040    T   r   u   e       i   f       s   c   a   n       c   o   n
0010060    v   e   r   t   i   n   g       a       p   r   e   s   s    
0010100    f   o   n   t       p   a   r   t  \r  \t   L   e   n       w
0010120    o   r   d  \t  \t  \t   /   /  \t   (   i   f       s   o   ,
0010140        t   h   i   s       i   s       t   h   e       l   e   n
0010160    g   t   h   )  \r  \t   ]  \r  \r   m   a   n   i   f   e   s
0010200    t       [  \r  \t   g   o   t   n   a   m   e   =   1  \r  \t
0010220    g   o   t   f   a   c   e   =   2  \r  \t   g   o   t   s   i
0010240    z   e   =   4  \r  \t   g   o   t   r   o   t   a   t   i   o
0010260    n   =   8  \r  \t   g   o   t   i   n   c   l   i   n   e   =
0010300    1   6  \r  \t   g   o   t   r   e   s   o   l   u   t   i   o
0010320    n   =   3   2  \r  \t   g   o   t   r   e   c   o   r   d   =
0010340    6   4  \r  \t   g   o   t   f   a   c   t   o   r   s   =   1
0010360    2   8  \r  \t   ]  \r  \r  \r   /   /   E   N   D       O   F
0010400        I   X   .   D   F   S  \r  \r  \r   /   /       o   u   t
0010420    g   o   i   n   g       p   r   o   c   e   d   u   r   e   s
0010440   \r   e   x   t   e   r   n   a   l  \r  \t   [  \r  \t   E   n
0010460    c   o   d   e   F   a   c   e  \r  \t   L   o   o   k   u   p
0010500    F   o   n   t   N   a   m   e  \r  \t   C   a   l   c   u   l
0010520    a   t   e   W   i   d   t   h   s  \r  \t   D   e   c   o   d
0010540    e   F   a   c   e  \r  \t   G   e   n   L   o   o   k   u   p
0010560   \r  \t   M   u   l   D   i   v  \r  \t   S   i   g   n   e   d
0010600    M   u   l   D   i   v  \r  \t   C   o   s  \r  \t   ]  \r  \r
0010620    /   /       o   u   t   g   o   i   n   g       s   t   a   t
0010640    i   c   s  \r   /   /   e   x   t   e   r   n   a   l  \r   /
0010660    /  \t   [  \r   /   /  \t   ]  \r   /   /   s   t   a   t   i
0010700    c  \r   /   /  \t   [  \r   /   /  \t   ]  \r  \r   /   /    
0010720    i   n   c   o   m   i   n   g       p   r   o   c   e   d   u
0010740    r   e   s  \r   e   x   t   e   r   n   a   l  \r  \t   [  \r
0010760   \t   M   o   v   e   B   l   o   c   k   ;       S   e   t   B
0011000    l   o   c   k   ;   Z   e   r   o  \r  \t   G   e   t   s  \r
0011020   \t   R   e   a   d   B   l   o   c   k  \r  \t   R   e   s   e
0011040    t   s  \r  \t   P   o   s   i   t   i   o   n   P   a   g   e
0011060   \r  \t   P   o   s   i   t   i   o   n   P   t   r  \r  \t   ]
0011100   \r  \r   /   /       i   n   c   o   m   i   n   g       s   t
0011120    a   t   i   c   s  \r   /   /   e   x   t   e   r   n   a   l
0011140   \r   /   /  \t   [  \r   /   /  \t   ]  \r  \r   /   /       i
0011160    n   t   e   r   n   a   l       s   t   a   t   i   c   s  \r
0011200    /   /   s   t   a   t   i   c  \r   /   /  \t   [  \r   /   /
0011220   \t   ]  \r  \r   /   /       F   i   l   e   -   w   i   d   e
0011240        s   t   r   u   c   t   u   r   e       a   n   d       m
0011260    a   n   i   f   e   s   t       d   e   c   l   a   r   a   t
0011300    i   o   n   s   .  \r  \r   s   t   r   u   c   t   u   r   e
0011320        S   T   R   :       [      \r  \t   b   y   t   ^   0   ,
0011340    2   5   5       b   y   t   e  \r  \t   ]  \r  \r   /   /    
0011360    P   r   o   c   e   d   u   r   e   s  \r  \r   l   e   t  \r
0011400   \r   E   n   c   o   d   e   F   a   c   e   (   w   e   i   g
0011420    h   t   ,   s   l   o   p   e   ,   e   x   p   a   n   s   i
0011440    o   n   ;       n   u   m   a   r   g   s       n   )       =
0011460        v   a   l   o   f       [  \r  \t   f   o   r       i   =
0011500    2       t   o       n       b   y       -   1       d   o    
0011520    (   l   v       w   e   i   g   h   t   )   !   i   =   0  \r
0011540   \t   l   e   t       w   =   (   s   e   l   e   c   t   o   n
0011560        w   e   i   g   h   t       i   n   t   o       [  \r  \t
0011600   \t   c   a   s   e       0   :  \r  \t  \t   c   a   s   e    
0011620    $   M   :       c   a   s   e       $   m   :       0  \r  \n
0011640   \t  \t   c   a   s   e       $   B   :       c   a   s   e    
0011660    $   b   :       2  \r  \t  \t   c   a   s   e       $   L   :
0011700        c   a   s   e       $   l   :       4  \r  \t  \t   d   e
0011720    f   a   u   l   t   :       -   1   0   0       ]   )       +
0011740   \r  \t                       (   s   e   l   e   c   t   o   n
0011760        s   l   o   p   e       i   n   t   o       [  \r  \t  \t
0012000    c   a   s   e       0   :  \r  \t  \t   c   a   s   e       $
0012020    R   :       c   a   s   e       $   r   :       0  \r  \t  \t
0012040    c   a   s   e       $   I   :       c   a   s   e       $   i
0012060    :       1  \r  \t  \t   d   e   f   a   u   l   t   :       -
0012100    1   0   0       ]   )       +  \r  \t                       (
0012120    s   e   l   e   c   t   o   n       e   x   p   a   n   s   i
0012140    o   n       i   n   t   o       [  \r  \t  \t   c   a   s   e
0012160        0   :  \r  \t  \t   c   a   s   e       $   R   :       c
0012200    a   s   e       $   r   :       0  \r  \t  \t   c   a   s   e
0012220        $   C   :       c   a   s   e       $   c   :       6  \r
0012240   \t  \t   c   a   s   e       $   E   :       c   a   s   e    
0012260    $   e   :       1   2  \r  \t  \t   d   e   f   a   u   l   t
0012300    :       -   1   0   0       ]   )  \r  \t   i   f       w    
0012320    l   s       0       t   h   e   n       r   e   s   u   l   t
0012340    i   s       -   1  \r  \t   r   e   s   u   l   t   i   s    
0012360    w  \r   ]  \r  \r   a   n   d  \r  \r   D   e   c   o   d   e
0012400    F   a   c   e   (   f   a   c   e   ,   w   ,   s   ,   e   )
0012420        b   e       [  \r  \t   @   s   =   (   t   a   b   l   e
0012440        [       $   R   ;       $   I       ]   )   !   (   f   a
0012460    c   e   &   1   )  \r  \t   f   a   c   e   =   f   a   c   e
0012500        r   s   h   i   f   t       1  \r  \t   @   w   =   (   t
0012520    a   b   l   e       [       $   M   ;       $   B   ;       $
0012540    L       ]   )   !   (   f   a   c   e       r   e   m       3
0012560    )  \r  \t   f   a   c   e   =   f   a   c   e   /   3  \r  \t
0012600    @   e   =   (   t   a   b   l   e       [       $   R   ;    
0012620    $   C   ;       $   E       ]   )   !   (   f   a   c   e    
0012640    r   e   m       3   )  \r   ]  \r  \r   a   n   d  \r  \r   L
0012660    o   o   k   u   p   F   o   n   t   N   a   m   e   (   s   ,
0012700    f   a   m   s   t   r   ,   f   a   c   e   ,   s   i   z   ,
0012720    r   o   t   ,   b   u   f   x   ,   b   u   f   y   ,   b   o
0012740    u   n   d   b   o   x   ,   b   u   f   l   ,   l   v   p   ;
0012760        n   u   m   a   r   g   s       n   a   )       =       v
0013000    a   l   o   f       [  \r  \t   s   i   z   =   (   s   i   z
0013020        l   s       0   )   ?       -   s   i   z   ,   M   u   l
0013040    D   i   v   (   s   i   z   ,   6   3   5   ,   1   8   )  \t
0013060    /   /   p   o   i   n   t   s       t   o       m   i   c   r
0013100    o   n   s  \r  \t   i   f       n   a       e   q       8    
0013120    t   h   e   n       b   u   f   l   =   2   5   6  \r  \t   R
0013140    e   s   e   t   s   (   s   )  \r  \t   l   e   t       p   =
0013160    v   e   c       I   X   L   M   a   x  \r   [  \t   f   w   R
0013200    e   a   d   I   X   (   s   ,   p   )  \t  \t   /   /   R   e
0013220    a   d       a   n       I   X       e   n   t   r   y  \r  \t
0013240    i   f       p   >   >   I   X   H   .   T   y   p   e       e
0013260    q       I   X   T   y   p   e   E   n   d       t   h   e   n
0013300        r   e   s   u   l   t   i   s       f   a   l   s   e  \r
0013320   \t   i   f       p   >   >   I   X   H   .   T   y   p   e    
0013340    e   q       I   X   T   y   p   e   N   a   m   e       t   h
0013360    e   n  \r  \t  \t   [  \r  \t  \t   l   e   t       f   n   d
0013400    =   t   r   u   e  \r  \t  \t   l   e   t       s   t   r   =
0013420    l   v       p   >   >   I   X   N   .   N   a   m   e  \r  \t
0013440   \t   f   o   r       i   =   0       t   o       s   t   r   >
0013460    >   S   T   R   .   b   y   t   ^   0       d   o  \r  \t  \t
0013500        i   f       (   (   s   t   r   >   >   S   T   R   .   b
0013520    y   t   ^   i       x   o   r       f   a   m   s   t   r   >
0013540    > 323   T 322   .   b   y   t   ^   i   )   &   (   n   o   t
0013560        #   4   0   )   )       n   e       0       t   h   e   n
0013600   \r  \t  \t  \t  \t   f   n   d   =   f   a   l   s   e  \r  \t
0013620   \t   i   f       f   n   d       t   h   e   n       b   r   e
0013640    a   k  \r  \t  \t   ]  \r   ]       r   e   p   e   a   t  \r
0013660   \t   l   e   t       f   a   m   =   p   >   >   I   X   N   .
0013700    C   o   d   e  \r  \t   i   f       n   a       e   q       1
0013720    0       t   h   e   n       @   l   v   p   =   f   a   m  \r
0013740   \t   l   e   t       f   o   u   n   d   =   f   a   l   s   e
0013760   \r  \t   l   e   t       b   e   s   t   =   v   e   c       I
0014000    X   L   M   a   x  \r   [  \t   f   w   R   e   a   d   I   X
0014020    (   s   ,   p   )  \r  \t   i   f       p   >   >   I   X   H
0014040    .   T   y   p   e       e   q       I   X   T   y   p   e   E
0014060    n   d       t   h   e   n       b   r   e   a   k  \r  \t   i
0014100    f       p   >   >   I   X   H   .   T   y   p   e       e   q
0014120        I   X   T   y   p   e   W   i   d   t   h   s       t   h
0014140    e   n  \r  \t  \t   [       /   /   f   i   r   s   t       f
0014160    i   x       t   h   e       "   o   f   f       b   y       o
0014200    n   e   "       p   o   s   s   i   b   i   l   i   t   y    
0014220    o   n       s   i   z   e   s  \r  \t  \t           l   e   t
0014240        n   e   w   S   i   z   =   p   >   >   I   X   .   s   i
0014260    z  \r  \t  \t           i   f       (   (   n   e   w   S   i
0014300    z   -   s   i   z   )       e   q       1   )       %       (
0014320    (   n   e   w   S   i   z   -   s   i   z   )       e   q    
0014340    -   1   )       t   h   e   n       n   e   w   S   i   z   =
0014360    s   i   z  \r  \t  \t           i   f       p   >   >   I   X
0014400    .   f   a   m       e   q       f   a   m       &  \r  \t  \t
0014420                p   >   >   I   X   .   f   a   c   e       e   q
0014440        f   a   c   e       &  \r  \t  \t               (   (   n
0014460    e   w   S   i   z       e   q       s   i   z       &       p
0014500    >   >   I   X   .   r   o   t   a   t   i   o   n       e   q
0014520        r   o   t   )       %  \r  \t  \t                   (   p
0014540    >   >   I   X   .   s   i   z       e   q       0   )   )    
0014560    t   h   e   n      \r  \t  \t  \t   [  \r  \t  \t  \t   i   f
0014600        f   o   u   n   d       e   q       f   a   l   s   e    
0014620    %       p   >   >   I   X   .   s   i   z       n   e       0
0014640        t   h   e   n  \r  \t  \t  \t  \t   M   o   v   e   B   l
0014660    o   c   k   (   b   e   s   t   ,   p   ,   I   X   L   M   a
0014700    x   )  \r  \t  \t  \t   f   o   u   n   d   =   t   r   u   e
0014720   \r  \t  \t  \t   ]  \r  \t               ]       /   /   e   n
0014740    d       o   f       i   f       I   X   T   y   p   e   W   i
0014760    d   t   h   s  \r   ]       r   e   p   e   a   t  \r  \t   u
0015000    n   l   e   s   s       f   o   u   n   d       t   h   e   n
0015020        r   e   s   u   l   t   i   s       f   a   l   s   e  \r
0015040   \t   C   a   l   c   u   l   a   t   e   W   i   d   t   h   s
0015060    (   b   e   s   t   ,   s   ,   s   i   z   ,   r   o   t   ,
0015100    b   o   u   n   d   b   o   x   ,   b   u   f   x   ,   b   u
0015120    f   y   ,   b   u   f   l   )  \r  \t   r   e   s   u   l   t
0015140    i   s       t   r   u   e  \r   ]  \r  \r   a   n   d  \r  \r
0015160    C   a   l   c   u   l   a   t   e   W   i   d   t   h   s   (
0015200    b   e   s   t   ,   s   ,   s   i   z   ,   r   o   t   ,   b
0015220    o   u   n   d   b   o   x   ,   b   u   f   x   ,   b   u   f
0015240    y   ,   b   u   f   l   )       b   e  \r   [  \r  \t   S   e
0015260    t   B   l   o   c   k   (   b   u   f   x   ,   -   1   ,   b
0015300    u   f   l   )  \r  \t   S   e   t   B   l   o   c   k   (   b
0015320    u   f   y   ,   -   1   ,   b   u   f   l   )  \r   /   /   P
0015340    o   s   i   t   i   o   n       s       t   o       r   e   a
0015360    d       w   i   d   t   h       t   a   b   l   e  \r  \t   l
0015400    e   t       p   =   l   v       b   e   s   t   >   >   I   X
0015420    .   s   a  \t  \t   /   /   D   P       a   d   d   r   e   s
0015440    s       o   f       f   o   n   t       p   a   r   t   .  \r
0015460   \t   P   o   s   i   t   i   o   n   P   a   g   e   (   s   ,
0015500    (   p   !   0       l   s   h   i   f   t       8   )   +   (
0015520    p   !   1       r   s   h   i   f   t       8   )   +   1   )
0015540   \r  \t   P   o   s   i   t   i   o   n   P   t   r   (   s   ,
0015560    (   (   p   !   1   &   #   3   7   7   )       l   s   h   i
0015600    f   t       1   )   )  \r  \t   l   e   t       w   t   =   v
0015620    e   c       s   i   z   e       W   T   B   /   1   6  \r  \t
0015640    R   e   a   d   B   l   o   c   k   (   s   ,   w   t   ,   (
0015660    s   i   z   e       W   T   B   /   1   6   )   )  \r  \t   M
0015700    o   v   e   B   l   o   c   k   (   b   o   u   n   d   b   o
0015720    x   ,   w   t   ,   4   )  \t  \t   /   /   E   x   t   r   a
0015740    c   t       t   h   e       b   o   u   n   d   i   n   g    
0015760    b   o   x       i   n   f   o  \r  \t   l   e   t       b   c
0016000    =   b   e   s   t   >   >   I   X   .   b   c  \r  \t   l   e
0016020    t       e   c   =   b   e   s   t   >   >   I   X   .   e   c
0016040   \r  \t   i   f       b   u   f   l       l   s       b   c    
0016060    t   h   e   n       r   e   t   u   r   n  \t  \t       /   /
0016100        y   e   s       b   u   t   .   .   .  \r  \t   l   e   t
0016120        e   c   b   =   (   e   c       g   e       b   u   f   l
0016140    )   ?       b   u   f   l   ,   e   c  \r  \r   /   /   N   o
0016160    w       r   e   a   d       e   i   t   h   e   r       o   n
0016200    e       w   o   r   d       o   r       a       n   u   m   b
0016220    e   r       o   f       w   o   r   d   s       f   o   r    
0016240    t   h   e       w   i   d   t   h   s   .  \r  \t   f   o   r
0016260        i   =   0       t   o       1       d   o  \r  \t   [  \r
0016300   \t       l   e   t       b   u   f   p   =   (   l   v       b
0016320    u   f   x   )   !   i   +   b   c  \r  \t       t   e   s   t
0016340        (   (   i       e   q       0   )   ?       w   t   >   >
0016360    W   T   B   .   X   W   i   d   t   h   F   i   x   e   d   ,
0016400    w   t   >   >   W   T   B   .   Y   W   i   d   t   h   F   i
0016420    x   e   d   )  \r  \t       i   f   s   o  \t   [  \r  \t  \t
0016440    l   e   t       v   =   G   e   t   s   (   s   )  \r  \t  \t
0016460    S   e   t   B   l   o   c   k   (   b   u   f   p   ,   v   ,
0016500    e   c   b   -   b   c   +   1   )  \r  \t  \t   ]  \r  \t    
0016520    i   f   n   o   t  \t   [  \r  \t  \t   R   e   a   d   B   l
0016540    o   c   k   (   s   ,   b   u   f   p   ,   e   c   b   -   b
0016560    c   +   1   )  \r  \t  \t   ]  \r  \t   ]  \r  \r   /   /   N
0016600    o   w       d   o       s   c   a   l   i   n   g       i   f
0016620        n   e   e   d   e   d   .  \r  \t   i   f       b   e   s
0016640    t   >   >   I   X   .   s   i   z       n   e       0       t
0016660    h   e   n       r   e   t   u   r   n  \r  \t   f   o   r    
0016700    i   =   b   c       t   o       e   c   b       d   o       i
0016720    f       b   u   f   x   !   i       n   e       #   1   0   0
0016740    0   0   0       t   h   e   n  \r  \t  \t   [  \r  \t  \t   b
0016760    u   f   x   !   i   =   M   u   l   D   i   v   (   b   u   f
0017000    x   !   i   ,   s   i   z   ,   1   0   0   0   )  \r  \t  \t
0017020    b   u   f   y   !   i   =   M   u   l   D   i   v   (   b   u
0017040    f   y   !   i   ,   s   i   z   ,   1   0   0   0   )  \r  \t
0017060   \t   ]  \r  \t   f   o   r       i   =   0       t   o       3
0017100        d   o  \r  \t  \t   b   o   u   n   d   b   o   x   !   i
0017120    =   S   i   g   n   e   d   M   u   l   D   i   v   (   b   o
0017140    u   n   d   b   o   x   !   i   ,   s   i   z   ,   1   0   0
0017160    0   )  \r  \r   /   /   A   n   d       r   o   t   a   t   i
0017200    o   n       i   f       n   e   e   d   e   d   .  \r  \t   i
0017220    f       r   o   t       e   q       0       t   h   e   n    
0017240    r   e   t   u   r   n  \r  \t   l   e   t       c   m   ,   c
0017260    s   ,   s   m   ,   s   s   =   n   i   l   ,   n   i   l   ,
0017300    n   i   l   ,   n   i   l  \r  \t   C   o   s   (   r   o   t
0017320    ,   l   v       c   s   ,   l   v       c   m   )  \t  \t  \t
0017340    /   /   G   e   t       c   o   s   i   n   e  \r  \t   C   o
0017360    s   (   r   o   t   -   9   0   *   6   0   ,   l   v       s
0017400    s   ,   l   v       s   m   )  \t  \t   /   /   a   n   d    
0017420    s   i   n   e  \r  \t   f   o   r       i   =   b   c       t
0017440    o       e   c   b       d   o       i   f       b   u   f   x
0017460    !   i       n   e       #   1   0   0   0   0   0       t   h
0017500    e   n  \r  \t  \t   [  \r  \t  \t   l   e   t       t   =   M
0017520    u   l   D   i   v   (   b   u   f   x   !   i   ,   c   m   ,
0017540    #   1   7   7   7   7   7   )  \r  \t  \t   i   f       c   s
0017560        t   h   e   n       t   =   -   t  \r  \t  \t   l   e   t
0017600        s   =   M   u   l   D   i   v   (   b   u   f   y   !   i
0017620    ,   s   m   ,   #   1   7   7   7   7   7   )  \r  \t  \t   u
0017640    n   l   e   s   s       s   s       t   h   e   n       s   =
0017660    -   s  \r  \t  \t   l   e   t       x   =   t   +   s  \r  \t
0017700   \t   t   =   M   u   l   D   i   v   (   b   u   f   y   !   i
0017720    ,   c   m   ,   #   1   7   7   7   7   7   )  \r  \t  \t   i
0017740    f       c   s       t   h   e   n       t   =   -   t  \r  \t
0017760   \t   s   =   M   u   l   D   i   v   (   b   u   f   x   !   i
0020000    ,   s   m   ,   #   1   7   7   7   7   7   )  \r  \t  \t   i
0020020    f       s   s       t   h   e   n       s   =   -   s  \r  \t
0020040   \t   b   u   f   x   !   i   =   x  \r  \t  \t   b   u   f   y
0020060    !   i   =   t   +   s  \r  \t  \t   ]  \r   ]  \r  \r   a   n
0020100    d  \r  \r   f   w   R   e   a   d   I   X   (   s   ,   p   )
0020120        b   e       [  \r  \t   l   e   t       a   =   G   e   t
0020140    s   (   s   )  \t  \t   /   /   T   y   p   e       w   o   r
0020160    d   .  \r  \t   p   !   0   =   a  \r  \t   l   e   t       l
0020200    =   p   >   >   I   X   H   .   L   e   n   g   t   h  \r  \t
0020220    i   f       l       t   h   e   n       R   e   a   d   B   l
0020240    o   c   k   (   s   ,   p   +   1   ,   l   -   1   )  \r   ]
0020260   \r  \r   a   n   d  \r  \r   M   u   l   D   i   v   (   a   ,
0020300    b   ,   c   )       =       v   a   l   o   f       [  \r   /
0020320    /       R   e   t   u   r   n   s       a   *   b   /   c    
0020340        u   s   i   n   g       u   n   s   i   g   n   e   d    
0020360    a   r   i   t   h   m   e   t   i   c   .  \r           M   u
0020400    l   D   i   v   =   t   a   b   l   e       [  \r  \t   #   5
0020420    5   0   0   1  \t   /   /       S   T   A       3   ,   1   ,
0020440    2  \r  \t   #   1   5   5   0   0   0       /   /       M   O
0020460    V       2   ,   3           s   a   v   e       s   t   a   c
0020500    k       p   o   i   n   t   e   r  \r  \t   #   1   1   1   0
0020520    0   0       /   /       M   O   V       0   ,   2           a
0020540   \r  \t   #   2   1   4   0   3  \t   /   /       L   D   A    
0020560    0   ,   3   ,   3  \r  \t   #   1   0   1   2   2   0  \t   /
0020600    /       M   O   V   Z   R       0   ,   0  \t   c   /   2  \r
0020620   \t   #   6   1   0   2   0           /   /       M   U   L  \r
0020640   \t   #   3   1   4   0   3           /   /       L   D   A    
0020660    2   ,   3   ,   3       c  \r  \t   #   6   1   0   2   1    
0020700        /   /       D   I   V  \r  \t   #   1   0   1   0   1   0
0020720        /   /           M   O   V   #       0   ,   0  \r  \t   #
0020740    1   2   1   0   0   0       /   /       M   O   V       1   ,
0020760    0  \r  \t   #   1   7   1   0   0   0       /   /       M   O
0021000    V       3   ,   2  \r  \t   #   3   5   0   0   1  \t   /   /
0021020        L   D   A       3   ,   1   ,   2  \r  \t   #   1   4   0
0021040    1  \t   /   /       J   M   P       1   ,   3  \r  \t   ]  \r
0021060   \t   r   e   s   u   l   t   i   s       M   u   l   D   i   v
0021100    (   a   ,   b   ,   c   )  \r   ]  \r  \r   a   n   d  \r  \r
0021120    S   i   g   n   e   d   M   u   l   D   i   v   (   a   ,   b
0021140    ,   c   )       =       v   a   l   o   f       [  \r  \t   l
0021160    e   t       s   g   n   =   a       x   o   r       b       x
0021200    o   r       c  \t   /   /   S   i   g   n       b   i   t  \r
0021220   \t   l   e   t       a   b   s   (   x   )   =   (   x       g
0021240    e       0   ?       x   ,   -   x   )  \r  \t   l   e   t    
0021260    r   e   s   =   M   u   l   D   i   v   (   a   b   s   (   a
0021300    )   ,   a   b   s   (   b   )   ,   a   b   s   (   c   )   )
0021320   \r  \t   r   e   s   u   l   t   i   s       (   s   g   n    
0021340    l   s       0   ?       -   r   e   s   ,   r   e   s   )  \r
0021360    ]  \r  \r   a   n   d  \r  \r   C   o   s   (   t   h   e   t
0021400    a   ,   l   v   s   i   g   n   ,   l   v   m   a   g   )    
0021420    b   e       [  \r   /   /   C   a   l   c   u   l   a   t   e
0021440        t   h   e       c   o   s   i   n   e       o   f       t
0021460    h   e       g   i   v   e   n       a   n   g   l   e   ,    
0021500    a   n   d       r   e   t   u   r   n       t   h   e  \r   /
0021520    /       m   a   g   n   i   t   u   d   e       a   s       a
0021540        f   r   a   c   t   i   o   n       o   f       #   1   7
0021560    7   7   7   7       (   l   a   r   g   e   s   t       n   u
0021600    m   b   e   r   )  \r   /   /       A   l   s   o       r   e
0021620    t   u   r   n       s   i   g   n       (   0       i   f    
0021640    p   o   s   i   t   i   v   e   ,       -   1       i   f    
0021660    n   e   g   a   t   i   v   e   )  \r  \r  \t   i   f       t
0021700    h   e   t   a       l   s       0       t   h   e   n       t
0021720    h   e   t   a   =   -   t   h   e   t   a  \r  \t   @   l   v
0021740    s   i   g   n   =   -   (   (   (   t   h   e   t   a   +   9
0021760    0   *   6   0   )   /   (   1   8   0   *   6   0   )   )   &
0022000    1   )  \r  \t   l   e   t       d   =   t   h   e   t   a    
0022020    r   e   m       9   0   *   6   0  \r  \t   i   f       (   (
0022040    t   h   e   t   a   /   (   9   0   *   6   0   )   )   &   1
0022060    )       n   e       0       t   h   e   n       d   =   9   0
0022100    *   6   0   -   d  \r  \t   l   e   t       m   i   n   =   d
0022120        r   e   m       6   0  \t  \t  \t   /   /   M   i   n   u
0022140    t   e   s       p   a   r   t  \r  \t   d   =   d   /   6   0
0022160   \t  \t  \t  \t   /   /   D   e   g   r   e   e   s       p   a
0022200    r   t  \r   /   /   N   o   w       d       i   n       r   a
0022220    n   g   e       0   -   9   0       d   e   g   r   e   e   s
0022240   \r  \r  \t   l   e   t       r   e   t   r   i   e   v   e   c
0022260    o   s   (   d   ,   m   i   n   )       =   v   a   l   o   f
0022300        [  \t   /   /   0       l   e       d       l   e       4
0022320    5  \r  \t  \t   l   e   t       c   o   s   a   r   =   t   a
0022340    b   l   e       [  \r  \t  \t   #   1   7   7   7   7   7   ;
0022360   \r  \t  \t   #   1   7   7   7   6   5   ;       #   1   7   7
0022400    7   2   7   ;       #   1   7   7   6   4   5   ;       #   1
0022420    7   7   5   3   7   ;       #   1   7   7   4   0   5   ;    
0022440   \r  \t  \t   #   1   7   7   2   2   7   ;       #   1   7   7
0022460    0   2   6   ;       #   1   7   6   6   0   1   ;       #   1
0022500    7   6   3   3   0   ;       #   1   7   6   0   3   3   ;    
0022520   \r  \t  \t   #   1   7   5   5   1   2   ;       #   1   7   5
0022540    1   4   6   ;       #   1   7   4   5   5   7   ;       #   1
0022560    7   4   1   4   4   ;       #   1   7   3   5   0   5   ;    
0022600   \r  \t  \t   #   1   7   3   0   2   4   ;       #   1   7   2
0022620    3   1   7   ;       #   1   7   1   5   6   7   ;       #   1
0022640    7   1   0   1   4   ;       #   1   7   0   2   1   6   ;    
0022660   \r  \t  \t   #   1   6   7   3   7   6   ;       #   1   6   6
0022700    5   3   2   ;       #   1   6   5   6   4   5   ;       #   1
0022720    6   4   7   3   5   ;       #   1   6   4   0   0   2   ;    
0022740   \r  \t  \t   #   1   6   3   0   2   6   ;       #   1   6   2
0022760    0   3   0   ;       #   1   6   1   0   0   7   ;       #   1
0023000    5   7   7   4   6   ;       #   1   5   6   6   6   2   ;    
0023020   \r  \t  \t   #   1   5   5   5   5   6   ;       #   1   5   4
0023040    4   3   0   ;       #   1   5   3   2   6   2   ;       #   1
0023060    5   2   0   7   2   ;       #   1   5   0   6   6   3   ;    
0023100   \r  \t  \t   #   1   4   7   4   3   2   ;       #   1   4   6
0023120    1   6   2   ;       #   1   4   4   6   7   2   ;       #   1
0023140    4   3   3   6   2   ;       #   1   4   2   0   3   2   ;    
0023160   \r  \t  \t   #   1   4   0   4   6   3   ;       #   1   3   7
0023200    0   7   5   ;       #   1   3   5   4   7   1   ;       #   1
0023220    3   4   0   4   5   ;       #   1   3   2   4   0   5   ;    
0023240   \r  \t  \t   #   1   3   0   7   4   3   ;  \t   /   /   4   6
0023260        d   e   g   r   e   e   s       b   e   c   a   u   s   e
0023300        o   f       i   n   t   e   r   p   o   l   a   t   i   o
0023320    n  \r  \t  \t   ]  \r  \r  \t  \t   l   e   t       a   =   c
0023340    o   s   a   r   !   d  \t  \t   /   /   F   i   r   s   t    
0023360    a   n   s   w   e   r  \r  \t  \t   i   f       m   i   n    
0023400    n   e       0       t   h   e   n  \t   /   /   M   u   s   t
0023420        i   n   t   e   r   p   o   l   a   t   e  \r  \t  \t    
0023440        [  \r  \t  \t           l   e   t       b   =   c   o   s
0023460    a   r   !   (   d   +   1   )  \r  \t  \t           a   =   a
0023500    -   M   u   l   D   i   v   (   a   -   b   ,   m   i   n   ,
0023520    6   0   )  \t   /   /   C   a   r   e   f   u   l       a   b
0023540    o   u   t       s   i   g   n   s  \r  \t  \t           ]  \r
0023560   \t  \t   r   e   s   u   l   t   i   s       a  \r  \t   ]  \r
0023600   \r  \t   t   e   s   t       d       g   r       4   5       t
0023620    h   e   n  \r  \t  \t   [  \t  \t  \t   /   /   U   s   e    
0023640    h   a   l   f   -   a   n   g   l   e       f   o   r   m   u
0023660    l   a   e  \r  \t  \t   i   f       (   d   &   1   )       n
0023700    e       0       t   h   e   n       m   i   n   =   m   i   n
0023720    +   6   0       /   /   D   i   v   i   d   e       a   n   g
0023740    l   e       b   y       2  \r  \t  \t   l   e   t       a   =
0023760    r   e   t   r   i   e   v   e   c   o   s   (   d       r   s
0024000    h   i   f   t       1   ,   m   i   n       r   s   h   i   f
0024020    t       1   )  \r  \t  \t   a   =   M   u   l   D   i   v   (
0024040    a   ,   a   ,   #   1   7   7   7   7   7   )  \t   /   /    
0024060    c   o   s   ^   2   (   t   h   e   t   a   /   2   )  \r  \t
0024100   \t   a   =   a   -   #   1   0   0   0   0   0  \t  \t   /   /
0024120        c   o   s   ^   2       -   1   /   2  \r  \t  \t   @   l
0024140    v   m   a   g   =   a       l   s   h   i   f   t       1  \t
0024160    /   /   2       c   o   s   ^   2       -   1  \r  \t  \t   ]
0024200   \r  \t   o   r  \t   @   l   v   m   a   g   =   r   e   t   r
0024220    i   e   v   e   c   o   s   (   d   ,   m   i   n   )  \r  \t
0024240   \r   ]  \r  \r  \r  \r                                        
0024246