$ od -c -N 50000 [Indigo]<AltoSource>SPLINE.DM!1
0000000  377  \0  \0   S   P   L   I   N   E   1   .   B   C   P   L  \0
0000020  376 001  \0 223 354   /   /       F   i   l   e   :       S   P
0000040    L   I   N   E   1   .   B   C   P   L  \r   /   /       P   .
0000060    B   a   u   d   e   l   a   i   r   e       &       R   .   F
0000100    l   e   g   a   l  \r   /   /       D   e   c   e   m   b   e
0000120    r       5   ,       1   9   7   7           4   :   4   5    
0000140    P   M  \r  \r   /   /       T   h   e       p   r   o   c   e
0000160    d   u   r   e       P   a   r   a   m   e   t   r   i   c   S
0000200    p   l   i   n   e       i   m   p   l   e   m   e   n   t   s
0000220        t   h   e       a   l   g   o   r   i   t   h   m       (
0000240    1   .   2   .   7   )       d   e   s   c   r   i   b   e   d
0000260        i   n  \r   /   /  \t  \t   "   S   p   l   i   n   e    
0000300    C   u   r   v   e       T   e   c   h   n   i   q   u   e   s
0000320    "  \r   /   /  \t  \t   b   y       P   .   B   a   u   d   e
0000340    l   a   i   r   e   ,       R   .   F   l   e   g   a   l   ,
0000360        &       R   .   S   p   r   o   u   l   l  \r   /   /  \t
0000400   \t   X   e   r   o   x       I   n   t   e   r   n   a   l    
0000420    R   e   p   o   r 376 001  \0 337 332   t           (   M   a
0000440    y       1   9   7   7   )  \r  \r   /   /           U   s   e
0000460    s       M   I   C   R   O   C   O   D   E       f   l   o   a
0000500    t   i   n   g       p   o   i   n   t       r   o   u   t   i
0000520    n   e   s  \r  \r   /   /       o   u   t   g   o   i   n   g
0000540        p   r   o   c   e   d   u   r   e   s   :  \r  \r   e   x
0000560    t   e   r   n   a   l       [  \r  \t   P   a   r   a   m   e
0000600    t   r   i   c   S   p   l   i   n   e  \r  \t   P   S   e   r
0000620    r   o   r  \r  \t   ]  \r  \r   /   /       o   u   t   g   o
0000640    i   n   g       s   t   a   t   i   c   s   :  \r  \r   e   x
0000660    t   e   r   n   a   l       [  \r  \t   P   S   z   o   n   e
0000700   \r  \t   ]  \r  \r   s   t   a   t   i   c       [  \r  \t   P
0000720    S   z   o   n   e   =   0  \t  \t   /   /       s   t   o   r
0000740    a   g   e       z   o   n   e  \r  \t   ]  \r  \r   /   /    
0000760    i   n   c   o   m   i   n   g       p   r   o   c   e   d   u
0001000    r   e   s   :  \r  \r   e   x   t   e   r   n   a   l       [
0001020   \r  \t   F   L   D   ;       F   A   D 376 001  \0   F   s   ;
0001040        F   M   L   ;       F   S   T  \t   /   /       m   i   c
0001060    r   o   F   L   O   A   T       (   A   l   t   o       f   l
0001100    o   a   t   i   n   g       p   o   i   n   t       p   a   c
0001120    k   a   g   e   )  \r  \t   F   L   D   I   ;       F   S   B
0001140    ;       F   D   V   ;       F   C   M   ;       F   N   E   G
0001160   \r  \t   F   P   S   e   t   u   p  \r  \r  \t   A   l   l   o
0001200    c   a   t   e  \t  \t   /   /       A   l   t   o       S   Y
0001220    S   T   E   M  \r  \t   F   r   e   e  \r  \t   Z   e   r   o
0001240   \r  \t   ]  \r  \r   /   /       i   n   c   o   m   i   n   g
0001260        s   t   a   t   i   c   s   :  \r  \r   e   x   t   e   r
0001300    n   a   l       [  \r  \t   F   P   w   o   r   k  \t  \t   /
0001320    /       m   i   c   r   o   F   L   O   A   T       (   A   l
0001340    t   o       f   l   o   a   t   i   n   g       p   o   i   n
0001360    t       p   a   c   k   a   g   e   )  \r  \t   ]  \r  \r   /
0001400    /       l   o   c   a   l       d   e   f   i   n   i   t   i
0001420    o   n   s   :  \r  \r   m   a   n   i   f   e   s   t     376
0001440  001  \0 353 343   [  \r  \t   n   a   t   u   r   a   l   S   p
0001460    l   i   n   e   =   0  \r  \t   p   e   r   i   o   d   i   c
0001500    S   p   l   i   n   e   =   1  \r  \t   /   /       f   l   o
0001520    a   t   i   n   g       p   o   i   n   t       r   e   g   i
0001540    s   t   e   r   s   :       1       t   o       4  \r  \t   a
0001560    c   1   =   1   ;       a   c   2   =   2   ;       a   c   3
0001600    =   3   ;       a   c   4   =   4  \r  \t   /   /       c   o
0001620    n   s   t   a   n   t   s   :  \r  \t   z   e   r   o   =   5
0001640    ;       o   n   e   =   6   ;       t   w   o   =   7   ;    
0001660    s   i   x   =   8  \r  \t   n   u   m   F   P   a   c   s   =
0001700    9  \r  \t   ]  \r  \r   s   t   r   u   c   t   u   r   e    
0001720    P   S   V   E   C       [  \r  \t   F   P   w   o   r   k   S
0001740    a   v   e       w   o   r   d  \r  \t   F   P   w   o   r   k
0001760    N   e   w       w   o   r   d  \r  \t   f   p   x       w   o
0002000    r   d  \r  \t   f   p   y       w   o   r   d  \r  \t   a    
0002020    w   o   r   d  \r  \t   b       w   o   r   d  \r  \t   c    
0002040    w   o   r   d 376 001  \0 201 236  \r  \t   r       w   o   r
0002060    d  \r  \t   s       w   o   r   d  \r  \t   ]  \r  \r   m   a
0002100    n   i   f   e   s   t       l   P   S   V   E   C   =   s   i
0002120    z   e       P   S   V   E   C   /   1   6  \r  \r   /   /    
0002140    l   o   c   a   l       s   t   a   t   i   c   s   :  \r  \r
0002160    s   t   a   t   i   c       [  \r  \t   P   S   v   e   c   =
0002200    0  \r  \t   ]  \r  \r  \r  \r   l   e   t       P   a   r   a
0002220    m   e   t   r   i   c   S   p   l   i   n   e   (   n   ,   x
0002240    ,   y   ,   p   1   x   ,   p   2   x   ,   p   3   x   ,   p
0002260    1   y   ,   p   2   y   ,   p   3   y   ,   s   p   l   i   n
0002300    e   T   y   p   e   ,   w   ;       n   u   m   a   r   g   s
0002320        n   a   r   g   s   )       =       v   a   l   o   f    
0002340    [  \r  \r  \t   /   /       d   e   f   a   u   l   t       a
0002360    r   g   u   m   e   n   t   s   ,       g   e   t       s   t
0002400    o   r   a   g   e   ,       c   h   e   c   k       v   a   r
0002420    i   o   u   s       t   h   i   n   g   s  \r  \t   l   e   t
0002440        t   e   m   p   V   e   c   = 376 001  \0 231   )       v
0002460    e   c       l   P   S   V   E   C  \r  \t   i   f       P   S
0002500    i   n   i   t   (   t   e   m   p   V   e   c   )       e   q
0002520        0       r   e   s   u   l   t   i   s       0  \r  \r  \t
0002540    l   e   t       p   1   ,   p   2   ,   p   3   ,   p   =   n
0002560    i   l   ,   n   i   l   ,   n   i   l   ,   n   i   l  \r  \t
0002600    l   e   t       c   ,   r   ,   s   =   0   ,   0   ,   0  \r
0002620   \r  \t   i   f       n       l   s       0       t   h   e   n
0002640        [  \r  \t  \t   /   /       c   o   n   v   e   r   t    
0002660    c   o   o   r   d   i   n   a   t   e   s       f   r   o   m
0002700        i   n   t   e   g   e   r       t   o       f   l   o   a
0002720    t   i   n   g       p   o   i   n   t  \r  \t  \t   n   =   -
0002740    n  \r  \t  \t   l   e   t       f   p   x   =   P   S   a   l
0002760    l   o   c   a   t   e   (   l   v   (   P   S   v   e   c   >
0003000    >   P   S   V   E   C   .   f   p   x   )   ,       2   *   n
0003020    )  \r  \t  \t   l   e   t       f   p   y   =   P   S   a   l
0003040    l   o   c   a   t   e   (   l   v   (   P   S   v   e 376 001
0003060   \0 201 226   c   >   >   P   S   V   E   C   .   f   p   y   )
0003100    ,       2   *   n   )  \r  \t  \t   i   f       (   f   p   x
0003120        e   q       0   )       %       (   f   p   y       e   q
0003140        0   )       r   e   s   u   l   t   i   s       0  \r  \t
0003160   \t   f   o   r       i   =   0       t   o       n   -   1    
0003200    d   o       [  \r  \t  \t  \t   F   S   T   (   F   L   D   I
0003220    (   a   c   1   ,       x   !   i   )   ,       f   p   x   +
0003240    2   *   i   )  \r  \t  \t  \t   F   S   T   (   F   L   D   I
0003260    (   a   c   1   ,       y   !   i   )   ,       f   p   y   +
0003300    2   *   i   )  \r  \t  \t  \t   ]  \r  \t  \t   x   =   f   p
0003320    x  \r  \t  \t   y   =   f   p   y  \r  \t  \t   ]  \r  \r  \t
0003340    s   w   i   t   c   h   o   n       n   a   r   g   s       i
0003360    n   t   o       [  \r  \t  \t   c   a   s   e       9   :  \r
0003400   \t  \t  \t   s   p   l   i   n   e   T   y   p   e   =   n   a
0003420    t   u   r   a   l   S   p   l   i   n   e  \r  \t  \t   c   a
0003440    s   e       1   0   :  \r  \t  \t  \t   w   =   0  \r  \t  \t
0003460    c   a   s 376 001  \0 366   9   e       1   1   :  \r  \t  \t
0003500   \t   i   f       s   p   l   i   n   e   T   y   p   e       n
0003520    e       n   a   t   u   r   a   l   S   p   l   i   n   e    
0003540    &  \r  \t  \t  \t               s   p   l   i   n   e   T   y
0003560    p   e       n   e       p   e   r   i   o   d   i   c   S   p
0003600    l   i   n   e       r   e   s   u   l   t   i   s       P   S
0003620    q   u   i   t   (   P   S   e   r   r   o   r   (   3   )   )
0003640   \r  \t  \t  \t   i   f       n       l   s       3       t   h
0003660    e   n       s   p   l   i   n   e   T   y   p   e   =   n   a
0003700    t   u   r   a   l   S   p   l   i   n   e  \r  \t  \t  \t   e
0003720    n   d   c   a   s   e  \r  \t  \t   d   e   f   a   u   l   t
0003740    :  \r  \t  \t  \t   r   e   s   u   l   t   i   s       P   S
0003760    q   u   i   t   (   P   S   e   r   r   o   r   (   4   )   )
0004000   \r  \t  \t   ]  \r  \r  \t   i   f       s   p   l   i   n   e
0004020    T   y   p   e       e   q       p   e   r   i   o   d   i   c
0004040    S   p   l   i   n   e       t   h   e   n       [  \r  \t  \t
0004060    i   f       (   (   F   C   M 376 001  \0 305   +   (   F   L
0004100    D   (   a   c   1   ,   x   )   ,       x   +   2   *   (   n
0004120    -   1   )   )       n   e       0   )       %  \r  \t  \t    
0004140            (   F   C   M   (   F   L   D   (   a   c   2   ,   y
0004160    )   ,       y   +   2   *   (   n   -   1   )   )       n   e
0004200        0   )   )       r   e   s   u   l   t   i   s       P   S
0004220    q   u   i   t   (   P   S   e   r   r   o   r   (   2   )   )
0004240   \r  \t  \t   c   =   P   S   a   l   l   o   c   a   t   e   (
0004260    l   v   (   P   S   v   e   c   >   >   P   S   V   E   C   .
0004300    c   )   ,       2   *   n   )  \r  \t  \t   r   =   P   S   a
0004320    l   l   o   c   a   t   e   (   l   v   (   P   S   v   e   c
0004340    >   >   P   S   V   E   C   .   r   )   ,       2   *   n   )
0004360   \r  \t  \t   s   =   P   S   a   l   l   o   c   a   t   e   (
0004400    l   v   (   P   S   v   e   c   >   >   P   S   V   E   C   .
0004420    s   )   ,       2   *   n   )  \r  \t  \t   i   f       (   c
0004440        e   q       0   )       %       (   r       e   q       0
0004460    )       %       (   s       e   q       0   )     376 001  \0
0004500    / 024   r   e   s   u   l   t   i   s       0  \r  \t  \t   ]
0004520   \r  \r  \t   l   e   t       a   =   P   S   a   l   l   o   c
0004540    a   t   e   (   l   v   (   P   S   v   e   c   >   >   P   S
0004560    V   E   C   .   a   )   ,       2   *   n   )  \r  \t   l   e
0004600    t       b   =   P   S   a   l   l   o   c   a   t   e   (   l
0004620    v   (   P   S   v   e   c   >   >   P   S   V   E   C   .   b
0004640    )   ,       2   *   n   )  \r  \t   i   f       (   a       e
0004660    q       0   )       %       (   b       e   q       0   )    
0004700    r   e   s   u   l   t   i   s       0  \r  \r  \t   /   /    
0004720    a   (   0   )   =   w   (   0   )  \r  \t   F   S   T   (   F
0004740    L   D   I   (   a   c   1   ,       (   w       ?       (   w
0004760    !   1   )   +   4   ,           4   )   )   ,       a   )  \r
0005000   \r  \t   /   /   a   (   i   )   =   w   (   i   )   -   1   /
0005020    a   (   i   -   1   )           {   i   =   1   ,   2   ,   .
0005040    .   .   ,   n   -   3   }  \r  \t   /   /   w   (   i   )    
0005060    d   e   f   a   u   l   t   s       t   o       4   .        
0005100        { 376 001  \0 255   0   1   =   0   ,   1   ,   .   .   .
0005120    ,   n   -   3   }  \r  \t   f   o   r       i   =   1       t
0005140    o       n   -   3       d   o       [  \r  \t  \t   F   S   T
0005160    (       F   S   B       (   F   L   D   I   (   a   c   4   ,
0005200    (   w       ?       (   w   !   (   i   +   1   )   )   +   4
0005220    ,       4   )   )   ,       F   D   V   (   F   L   D   I   (
0005240    a   c   2   ,   1   )   ,       a   c   1   )   )   ,       a
0005260    +   i   *   2   )  \r  \t  \t   F   L   D   (   a   c   1   ,
0005300    a   c   4   )  \r  \t  \t   ]  \r  \r  \t   i   f       s   p
0005320    l   i   n   e   T   y   p   e       e   q       p   e   r   i
0005340    o   d   i   c   S   p   l   i   n   e       t   h   e   n    
0005360    [  \r  \t  \t   /   /       c   (   0   )   =   1  \r  \t  \t
0005400    F   S   T   (   o   n   e   ,       c   )  \r  \t  \t   /   /
0005420        c   (   i   )   =   -   c   (   i   -   1   )   /   a   (
0005440    i   -   1   )               {   i   =   1   ,   2   ,   .   .
0005460    .   ,   n   -   3   }  \r  \t  \t   f   o   r       i   =   1
0005500        t   o       n   -   3 376 001  \0   )   V       d   o  \r
0005520   \t  \t  \t   F   S   T   (   F   N   E   G   (   F   D   V   (
0005540    F   L   D   (   a   c   1   ,       c   +   2   *   (   i   -
0005560    1   )   )   ,       a   +   2   *   (   i   -   1   )   )   )
0005600    ,       c   +   2   *   i   )  \r  \t  \t   ]  \r  \r  \t   /
0005620    /   d   o       e   v   e   r   y   t   h   i   n   g       t
0005640    w   i   c   e       t   o       g   e   t       x   (   t   )
0005660            a   n   d       y   (   t   )   .  \r  \t   f   o   r
0005700        t   =   1       t   o       2       d   o       [  \r  \t
0005720   \t   t   e   s   t       (       t       e   q       1       )
0005740   \r  \t  \t               i   f   s   o       [       p   =   x
0005760    ;       p   1   =   p   1   x   ;       p   2   =   p   2   x
0006000    ;       p   3   =   p   3   x       ]  \r  \t  \t            
0006020    i   f   n   o   t       [       p   =   y   ;       p   1   =
0006040    p   1   y   ;       p   2   =   p   2   y   ;       p   3   =
0006060    p   3   y       ]  \r  \r  \t  \t   c   o   m   p   u   t   e
0006100    b   c   :  \r  \t  \t   i   f       n       g 376 001  \0   :
0006120  342   e       3       t   h   e   n       t   e   s   t       s
0006140    p   l   i   n   e   T   y   p   e       e   q       n   a   t
0006160    u   r   a   l   S   p   l   i   n   e  \r  \t  \t   i   f   s
0006200    o       [  \r  \t  \t  \t   /   /   b   (   0   )   =   6   *
0006220    (   p   (   2   )   -   2   *   p   (   1   )   +   p   (   0
0006240    )   )  \r  \t  \t  \t   F   S   T   (   F   M   L   (   F   A
0006260    D   (   F   S   B   (   F   S   B   (   F   L   D   (   a   c
0006300    1   ,       p   +   4   )   ,       p   +   2   )   ,       p
0006320    +   2   )   ,       p   )   ,       s   i   x   )   ,       b
0006340    )  \r  \r  \t  \t  \t   /   /   b   (   i   )   =   6   *   (
0006360    p   (   i   +   2   )   -   2   *   p   (   i   +   1   )   +
0006400    p   (   i   )   )   -   b   (   i   -   1   )   /   a   (   i
0006420    -   1   )           {   i   =   1   ,   2   ,   .   .   .   ,
0006440    n   -   3   }  \r  \t  \t  \t   f   o   r       i   =   1    
0006460    t   o       n   -   3       d   o       [  \r  \t  \t  \t  \t
0006500    F   M   L   (   F   L   D   (   a   c   2   ,       p   +   2
0006520    * 376 001  \0 203 256   (   i   +   1   )   )   ,       t   w
0006540    o   )  \r  \t  \t  \t  \t   F   M   L   (   F   A   D   (   F
0006560    S   B   (   F   L   D   (   a   c   1   ,       p   +   2   *
0006600    (   i   +   2   )   )   ,       a   c   2   )   ,       p   +
0006620    2   *   i   )   ,       s   i   x   )  \r  \t  \t  \t  \t   F
0006640    S   T   (   F   S   B   (   a   c   1   ,       F   D   V   (
0006660    F   L   D   (   a   c   2   ,       b   +   2   *   (   i   -
0006700    1   )   )   ,       a   +   (   i   -   1   )   *   2   )   )
0006720    ,       b   +   i   *   2   )  \r  \t  \t  \t  \t   ]  \r  \t
0006740   \t  \t   ]  \r  \t  \t   i   f   n   o   t       [  \r  \t  \t
0006760   \t   /   /       b   (   0   )   =   6   *   (   p   (   1   )
0007000    -   2   *   p   (   0   )   +   p   (   n   -   2   )   )  \r
0007020   \t  \t  \t   F   S   T   (   F   M   L   (   F   A   D   (   F
0007040    S   B   (   F   S   B   (   F   L   D   (   a   c   1   ,    
0007060    p   +   2   )   ,       p   )   ,       p   )   ,       p   +
0007100    2   *   (   n   -   2   )   )   ,       s   i   x   )   ,    
0007120    b   )  \r  \r  \t  \t 376 001  \0   W   I  \t   /   /       b
0007140    (   i   )   =   6   *   (   p   (   i   +   1   )   -   2   *
0007160    p   (   i   )   +   p   (   i   -   1   )   )   -   b   (   i
0007200    -   1   )   /   a   (   i   -   1   )           {   i   =   1
0007220    ,   2   ,   .   .   .   ,   n   -   3   }  \r  \t  \t  \t   f
0007240    o   r       i   =   1       t   o       n   -   3       d   o
0007260        [  \r  \t  \t  \t  \t   F   M   L   (   F   L   D   (   a
0007300    c   2   ,       p   +   2   *   i   )   ,       t   w   o   )
0007320   \r  \t  \t  \t  \t   F   M   L   (   F   A   D   (   F   S   B
0007340    (   F   L   D   (   a   c   1   ,       p   +   2   *   (   i
0007360    +   1   )   )   ,       a   c   2   )   ,       p   +   2   *
0007400    (   i   -   1   )   )   ,       s   i   x   )  \r  \t  \t  \t
0007420   \t   F   S   T   (   F   S   B   (   a   c   1   ,       F   D
0007440    V   (   F   L   D   (   a   c   2   ,       b   +   2   *   (
0007460    i   -   1   )   )   ,       a   +   (   i   -   1   )   *   2
0007500    )   )   ,       b   +   i   *   2   )  \r  \t  \t  \t  \t   ]
0007520   \r  \r  \t  \t  \t   /   /       r   (   n 376 001  \0   D   l
0007540    -   2   )   =   1           a   n   d           s   (   n   -
0007560    2   )   =   0  \r  \t  \t  \t   F   S   T   (   o   n   e   ,
0007600        r   +   2   *   (   n   -   2   )   )  \r  \t  \t  \t   F
0007620    S   T   (   z   e   r   o   ,       s   +   2   *   (   n   -
0007640    2   )   ,       0   )  \r  \t  \t  \t   /   /       r   (   i
0007660    )   =   -   (   r   (   i   +   1   )   +   c   (   i   )   )
0007700    /   a   (   i   )               {   i   =   n   -   3   ,   .
0007720    .   .   ,   1   ,   0   }  \r  \t  \t  \t   /   /       s   (
0007740    i   )   =   (   b   (   i   )   -   s   (   i   +   1   )   )
0007760    /   a   (   i   )               {   i   =   n   -   3   ,   .
0010000    .   .   ,   1   ,   0   }  \r  \t  \t  \t   f   o   r       i
0010020    =   n   -   3       t   o       0       b   y       -   1    
0010040    d   o       [  \r  \t  \t  \t  \t   F   S   T   (   F   D   V
0010060    (   F   N   E   G   (   F   A   D   (   F   L   D   (   a   c
0010100    1   ,       r   +   2   *   (   i   +   1   )   )   ,       c
0010120    +   2   *   i   )   )   ,       a   +   2   *   i   )   ,    
0010140  376 001  \0   @   i   r   +   2   *   i   )  \r  \t  \t  \t  \t
0010160    F   S   T   (   F   D   V   (   F   S   B   (   F   L   D   (
0010200    a   c   1   ,       b   +   2   *   i   )   ,       s   +   2
0010220    *   (   i   +   1   )   )   ,       a   +   2   *   i   )   ,
0010240        s   +   2   *   i   )  \r  \t  \t  \t  \t   ]  \r  \t  \t
0010260   \t   ]  \r  \r  \t  \t   c   o   m   p   u   t   e   p   2   :
0010300   \r  \t  \t   /   /       C   O   M   P   U   T   E       S   E
0010320    C   O   N   D       D   E   R   I   V   A   T   I   V   E   S
0010340   \r  \t  \t   t   e   s   t       s   p   l   i   n   e   T   y
0010360    p   e       e   q       n   a   t   u   r   a   l   S   p   l
0010400    i   n   e  \r  \t  \t   i   f   s   o       [  \r  \t  \t  \t
0010420    /   /       p   2   (   0   )   =   p   2   (   n   -   1   )
0010440    =   0  \r  \t  \t  \t   F   S   T   (   z   e   r   o   ,    
0010460    p   2   )   ;       F   S   T   (   z   e   r   o   ,       p
0010500    2   +   2   *   (   n   -   1   )   )  \r  \t  \t  \t   /   /
0010520        p   2   (   i   )   =   (   b   (   i   -   1   )   -   p
0010540    2   (   i   +   1 376 001  \0   K 006   )   )   /   a   (   i
0010560    -   1   )           {   i   =       n   -   2   ,   .   .   .
0010600    ,   2   ,   1   }  \r  \t  \t  \t   f   o   r       i   =   n
0010620    -   2       t   o       1       b   y       -   1       d   o
0010640   \r  \t  \t  \t  \t   F   S   T   (   F   D   V   (   F   S   B
0010660    (   F   L   D   (   a   c   1   ,       b   +   2   *   (   i
0010700    -   1   )   )   ,       p   2   +   (   i   +   1   )   *   2
0010720    )   ,       a   +   (   i   -   1   )   *   2   )   ,       p
0010740    2   +   2   *   i   )  \r  \t  \t  \t   ]  \r  \t  \t   i   f
0010760    n   o   t       [  \r  \t  \t  \t   /   /       D   2   =   p
0011000    (   n   -   1   )   -   2   *   p   (   n   -   2   )   +   p
0011020    (   n   -   3   )  \r  \t  \t  \t   /   /       a   c   1   =
0011040    p   2   (   n   -   2   )   =   (   6   *   D   2   -   s   (
0011060    0   )   -   s   (   n   -   3   )   )   /   (   r   (   0   )
0011100    +   r   (   n   -   3   )   +   4   )  \r  \t  \t  \t   F   A
0011120    D   (   F   A   D   (   F   L   D   (   a   c   2   ,       r
0011140    )   ,       r   +   2   *   (   n   - 376 001  \0 342 317   3
0011160    )   )   ,       F   L   D   I   (   a   c   1   ,       4   )
0011200    )  \r  \t  \t  \t   F   A   D   (   F   S   B   (   F   L   D
0011220    (   a   c   1   ,       p   +   2   *   (   n   -   1   )   )
0011240    ,       F   M   L   (   F   L   D   (   a   c   3   ,       p
0011260    +   2   *   (   n   -   2   )   )   ,       t   w   o   )   )
0011300    ,       p   +   2   *   (   n   -   3   )   )  \r  \t  \t  \t
0011320    F   S   T   (   F   D   V   (   F   S   B   (   F   S   B   (
0011340    F   M   L   (   a   c   1   ,       s   i   x   )   ,       s
0011360    )   ,       s   +   2   *   (   n   -   3   )   )   ,       a
0011400    c   2   )   ,       p   2   +   2   *   (   n   -   2   )   )
0011420   \r  \r  \t  \t  \t   /   /       p   2   (   i   )   =   r   (
0011440    i   )   *   p   2   (   n   -   2   )       +       s   (   i
0011460    )               {   i   =   0   ,   1   ,   2   ,   .   .   .
0011500    ,   n   -   3   }  \r  \t  \t  \t   f   o   r       i   =   0
0011520        t   o       n   -   3       d   o  \r  \t  \t  \t  \t   F
0011540    S   T   (   F   A   D   (   F   M   L   (   F   L   D   ( 376
0011560  001  \0 302 372   a   c   2   ,       a   c   1   )   ,       r
0011600    +   2   *   i   )   ,       s   +   2   *   i   )   ,       p
0011620    2   +   2   *   i   )  \r  \r  \t  \t  \t   /   /       p   2
0011640    (   n   -   1   )   =   p   2   (   0   )  \r  \t  \t  \t   F
0011660    S   T   (   F   L   D   (   a   c   1   ,       p   2   )   ,
0011700        p   2   +   2   *   (   n   -   1   )   )  \r  \t  \t  \t
0011720    ]  \r  \r  \t  \t   c   o   m   p   u   t   e   p   1   p   3
0011740    :  \r  \t  \t   /   /       C   O   M   P   U   T   E       F
0011760    I   R   S   T       &       T   H   I   R   D       D   E   R
0012000    I   V   A   T   I   V   E   S  \r  \t  \t   /   /       p   1
0012020    (   i   )   =   p   (   i   +   1   )   -   p   (   i   )   -
0012040    (   2   *   p   2   (   i   )   +   p   2   (   i   +   1   )
0012060    )   /   6  \r  \t  \t   /   /       p   3   (   i   )   =   p
0012100    2   (   i   +   1   )   -   p   2   (   i   )           {   i
0012120    =   0   ,   1   ,   2   ,   .   .   .   ,   n   -   2   }  \r
0012140   \t  \t   f   o   r       i   =   0       t   o       n   -   2
0012160        d   o     376 001  \0 216   C   [  \r  \t  \t  \t   F   S
0012200    B   (   F   L   D   (   a   c   1   ,       p   +   2   *   (
0012220    i   +   1   )   )   ,       p   +   2   *   i   )  \r  \t  \t
0012240   \t   F   A   D   (   F   M   L   (   F   L   D   (   a   c   2
0012260    ,       p   2   +   2   *   i   )   ,       t   w   o   )   ,
0012300        p   2   +   (   i   +   1   )   *   2   )  \r  \t  \t  \t
0012320    F   S   T   (   F   S   B   (   a   c   1   ,       F   D   V
0012340    (   a   c   2   ,       s   i   x   )   )   ,       p   1   +
0012360    i   *   2   )  \r  \t  \t  \t   F   S   T   (   F   S   B   (
0012400    F   L   D   (   a   c   1   ,       p   2   +   (   i   +   1
0012420    )   *   2   )   ,       p   2   +   i   *   2   )   ,       p
0012440    3   +   i   *   2   )  \r  \t  \t  \t   ]  \r  \t  \t   ]  \r
0012460   \r  \t   r   e   s   u   l   t   i   s       P   S   q   u   i
0012500    t   (   t   r   u   e   )  \r  \t   ]  \r  \r  \r   a   n   d
0012520        P   S   i   n   i   t   (   p   s   v   )       =       v
0012540    a   l   o   f       [  \r  \t   i   f       P   S   z   o   n
0012560    e       e   q       0       r   e 376 001  \0 210 017   s   u
0012600    l   t   i   s       P   S   e   r   r   o   r   (   0   )  \r
0012620   \t   P   S   v   e   c   =   p   s   v  \r  \t   Z   e   r   o
0012640    (   P   S   v   e   c   ,       l   P   S   V   E   C   )  \r
0012660   \t   /   /       n   e   w       f   l   o   a   t   i   n   g
0012700        p   o   i   n   t       w   o   r   k       a   r   e   a
0012720   \r  \t   l   e   t       F   P   w   o   r   k   N   e   w   =
0012740        A   l   l   o   c   a   t   e   (   P   S   z   o   n   e
0012760    ,       4   *   n   u   m   F   P   a   c   s   +   1   )  \r
0013000   \t   i   f       F   P   w   o   r   k   N   e   w       e   q
0013020        0       r   e   s   u   l   t   i   s       P   S   e   r
0013040    r   o   r   (   1   )  \r  \t   P   S   v   e   c   >   >   P
0013060    S   V   E   C   .   F   P   w   o   r   k   S   a   v   e   =
0013100    F   P   w   o   r   k  \r  \t   P   S   v   e   c   >   >   P
0013120    S   V   E   C   .   F   P   w   o   r   k   N   e   w   =   F
0013140    P   w   o   r   k   N   e   w  \r  \t   F   P   w   o   r   k
0013160    N   e   w   !   0   =   n   u   m   F   P   a   c   s 376 001
0013200   \0 021 223  \r  \t   F   P   S   e   t   u   p   (   F   P   w
0013220    o   r   k   N   e   w   )  \r  \t   F   L   D   I   (   z   e
0013240    r   o   ,   0   )   ;       F   L   D   I   (   o   n   e   ,
0013260        1   )   ;       F   L   D   I   (   t   w   o   ,   2   )
0013300    ;       F   L   D   I   (   s   i   x   ,   6   )  \r  \t   r
0013320    e   s   u   l   t   i   s       t   r   u   e  \r  \t   ]  \r
0013340   \r  \r  \r   a   n   d       P   S   a   l   l   o   c   a   t
0013360    e   (   l   o   c   a   t   i   o   n   ,       m   )       =
0013400        v   a   l   o   f       [  \r  \t   l   e   t       b   =
0013420    A   l   l   o   c   a   t   e   (   P   S   z   o   n   e   ,
0013440        m   )  \r  \t   i   f       b       e   q       0       r
0013460    e   s   u   l   t   i   s       P   S   q   u   i   t   (   P
0013500    S   e   r   r   o   r   (   1   )   )  \r  \t   @   l   o   c
0013520    a   t   i   o   n   =   b  \r  \t   r   e   s   u   l   t   i
0013540    s       b  \r  \t   ]  \r  \r  \r  \r   a   n   d       P   S
0013560    e   r   r   o   r   (   e   r   r   o   r   C   o   d   e   ,
0013600    a   1   , 376 001  \0 323   c   a   2   ,   a   3   ,   a   4
0013620    )       =       v   a   l   o   f       [  \r  \t   (   t   a
0013640    b   l   e   [   #   7   7   4   0   3   ;       #   1   4   0
0013660    1   ]   )       (   "   P   S   .   E   R   R   O   R   S   "
0013700    ,       l   v       e   r   r   o   r   C   o   d   e   )  \r
0013720   \t   r   e   s   u   l   t   i   s       0  \r  \t   ]  \r  \r
0013740   \r   a   n   d       P   S   q   u   i   t   (   r   e   s   u
0013760    l   t   )       =       v   a   l   o   f       [  \r  \t   i
0014000    f       P   S   v   e   c       e   q       0       r   e   s
0014020    u   l   t   i   s       r   e   s   u   l   t  \r  \t   F   P
0014040    S   e   t   u   p   (   P   S   v   e   c   >   >   P   S   V
0014060    E   C   .   F   P   w   o   r   k   S   a   v   e   )  \r  \t
0014100    P   S   v   e   c   >   >   P   S   V   E   C   .   F   P   w
0014120    o   r   k   S   a   v   e   =   0  \r  \t   f   o   r       i
0014140    =   0       t   o       l   P   S   V   E   C   -   1       d
0014160    o       i   f       P   S   v   e   c   !   i       n   e    
0014200    0       t   h   e   n       F 376  \0   4 314   `   r   e   e
0014220    (   P   S   z   o   n   e   ,       P   S   v   e   c   !   i
0014240    )  \r  \t   P   S   v   e   c   =   0  \r  \t   r   e   s   u
0014260    l   t   i   s       r   e   s   u   l   t  \r  \t   ]  \r  \r
0014300   \r 377  \0  \0   S   P   L   I   N   E   2   .   B   C   P   L
0014320   \0 376 001  \0 356 227   /   /       F   i   l   e   :       S
0014340    P   L   I   N   E   2   .   B   C   P   L  \r   /   /       P
0014360    .   B   a   u   d   e   l   a   i   r   e  \r   /   /       D
0014400    e   c   e   m   b   e   r       5   ,       1   9   7   7    
0014420        4   :   4   5       P   M  \r  \r   /   /       T   h   e
0014440        a   l   g   o   r   i   t   h   m   s       i   m   p   l
0014460    e   m   e   n   t   e   d       b   y       t   h   e   s   e
0014500        p   r   o   c   e   d   u   r   e   s       a   r   e    
0014520    d   e   s   c   r   i   b   e   d       i   n  \r   /   /  \t
0014540   \t   "   S   p   l   i   n   e       C   u   r   v   e       T
0014560    e   c   h   n   i   q   u   e   s   "  \r   /   /  \t  \t   b
0014600    y       P   .   B   a   u   d   e   l   a   i   r   e   ,    
0014620    R   .   F   l   e   g   a   l   ,       &       R   .   S   p
0014640    r   o   u   l   l  \r   /   /  \t  \t   X   e   r   o   x    
0014660    I   n   t   e   r   n   a   l       R   e   p   o   r   t    
0014700        (   M   a   y       1   9   7   7   )  \r  \r   /   /    
0014720    U   s   e   s       M 376 001  \0   O 243   I   C   R   O   C
0014740    O   D   E       f   l   o   a   t   i   n   g       p   o   i
0014760    n   t       r   o   u   t   i   n   e   s  \r  \r   /   /    
0015000    o   u   t   g   o   i   n   g       p   r   o   c   e   d   u
0015020    r   e   s   :  \r  \r   e   x   t   e   r   n   a   l       [
0015040   \r  \t   P   a   r   a   m   e   t   r   i   c   S   p   l   i
0015060    n   e  \r  \t   C   u   b   i   c   S   p   l   i   n   e  \r
0015100   \t   P   S   e   r   r   o   r  \r  \t   ]  \r  \r   /   /    
0015120    o   u   t   g   o   i   n   g       s   t   a   t   i   c   s
0015140    :  \r  \r   e   x   t   e   r   n   a   l       [  \r  \t   P
0015160    S   z   o   n   e  \r  \t   ]  \r  \r   s   t   a   t   i   c
0015200        [  \r  \t   P   S   z   o   n   e   =   0  \t  \t   /   /
0015220        s   t   o   r   a   g   e       z   o   n   e  \r  \t   ]
0015240   \r  \r   /   /       i   n   c   o   m   i   n   g       p   r
0015260    o   c   e   d   u   r   e   s   :  \r  \r   e   x   t   e   r
0015300    n   a   l       [  \r  \t   F   L   D   ;       F   A   D   ;
0015320        F   M   L   ;       F   S   T  \t   / 376 001  \0 243   y
0015340    /       m   i   c   r   o   F   L   O   A   T       (   A   l
0015360    t   o       f   l   o   a   t   i   n   g       p   o   i   n
0015400    t       p   a   c   k   a   g   e   )  \r  \t   F   L   D   I
0015420    ;       F   S   B   ;       F   D   V  \r  \t   F   C   M   ;
0015440        F   N   E   G   ;       F   S   N  \r  \t   F   P   S   e
0015460    t   u   p  \r  \r  \t   A   l   l   o   c   a   t   e  \t  \t
0015500    /   /       A   l   t   o       S   Y   S   T   E   M  \r  \t
0015520    F   r   e   e  \r  \t   Z   e   r   o  \r  \t   ]  \r  \r   /
0015540    /       i   n   c   o   m   i   n   g       s   t   a   t   i
0015560    c   s   :  \r  \r   e   x   t   e   r   n   a   l       [  \r
0015600   \t   F   P   w   o   r   k  \t  \t  \t   /   /       m   i   c
0015620    r   o   F   L   O   A   T           (   f   l   o   a   t   i
0015640    n   g       p   o   i   n   t       r   e   g   i   s   t   e
0015660    r   s   )  \r  \t   ]  \r  \r   /   /       l   o   c   a   l
0015700        d   e   f   i   n   i   t   i   o   n   s   :  \r  \r   m
0015720    a   n   i   f   e   s   t       [  \r  \t   n   a   t   u   r
0015740  376 001  \0 017   ~   a   l   S   p   l   i   n   e   =   0  \r
0015760   \t   p   e   r   i   o   d   i   c   S   p   l   i   n   e   =
0016000    1  \r  \t   /   /       f   l   o   a   t   i   n   g       p
0016020    o   i   n   t       r   e   g   i   s   t   e   r   s   :    
0016040    1       t   o       4  \r  \t   a   c   1   =   1   ;       a
0016060    c   2   =   2   ;       a   c   3   =   3   ;       a   c   4
0016100    =   4  \r  \t   /   /       c   o   n   s   t   a   n   t   s
0016120    :  \r  \t   z   e   r   o   =   5   ;       o   n   e   =   6
0016140    ;       t   w   o   =   7   ;       s   i   x   =   8  \r  \t
0016160    n   u   m   F   P   a   c   s   =   9  \r  \t   ]  \r  \r   s
0016200    t   r   u   c   t   u   r   e       P   S   V   E   C       [
0016220   \r  \t   F   P   w   o   r   k   S   a   v   e       w   o   r
0016240    d  \r  \t   F   P   w   o   r   k   N   e   w       w   o   r
0016260    d  \r  \t   f   p   x       w   o   r   d  \r  \t   f   p   y
0016300        w   o   r   d  \r  \t   h       w   o   r   d  \r  \t   a
0016320        w   o   r   d  \r  \t   b       w   o   r   d  \r  \t   c
0016340        w   o   r   d 376 001  \0   7   ;  \r  \t   r       w   o
0016360    r   d  \r  \t   s       w   o   r   d  \r  \t   ]  \r  \r   m
0016400    a   n   i   f   e   s   t       l   P   S   V   E   C   =    
0016420    s   i   z   e       P   S   V   E   C   /   1   6  \r  \r   /
0016440    /       l   o   c   a   l       s   t   a   t   i   c   s   :
0016460   \r  \r   s   t   a   t   i   c       [  \r  \t   P   S   v   e
0016500    c   =   0  \r  \t   ]  \r  \r  \r  \r  \r   l   e   t       P
0016520    a   r   a   m   e   t   r   i   c   S   p   l   i   n   e   (
0016540    n   ,       x   ,       y   ,       d   1   x   ,       d   2
0016560    x   ,       d   3   x   ,       d   1   y   ,       d   2   y
0016600    ,       d   3   y   ,       s   p   l   i   n   e   T   y   p
0016620    e   ,       n   i   l   ;  \r   n   u   m   a   r   g   s    
0016640    n   a   r   g   s   )       =       v   a   l   o   f       [
0016660   \r  \r  \t   /   /       d   e   f   a   u   l   t       a   r
0016700    g   u   m   e   n   t   s   ,       g   e   t       s   t   o
0016720    r   a   g   e   ,       c   h   e   c   k       v   a   r   i
0016740    o   u   s       t   h   i   n   g   s 376 001  \0 037   Z  \r
0016760   \t   l   e   t       t   e   m   p   V   e   c   =   v   e   c
0017000        l   P   S   V   E   C  \r  \t   i   f       P   S   i   n
0017020    i   t   (   t   e   m   p   V   e   c   )       e   q       0
0017040        r   e   s   u   l   t   i   s       0  \r  \r  \t   i   f
0017060        n       l   s       0       t   h   e   n       [  \r  \t
0017100   \t   n   =   -   n  \r  \t  \t   i   f       C   o   n   v   e
0017120    r   t   T   o   F   P   (   n   ,       l   v       x   ,    
0017140    l   v       y   )       e   q       0       r   e   s   u   l
0017160    t   i   s       0  \r  \t  \t   ]  \r  \r  \t   s   w   i   t
0017200    c   h   o   n       n   a   r   g   s       i   n   t   o    
0017220    [  \r  \t  \t   c   a   s   e       9   :  \r  \t  \t  \t   s
0017240    p   l   i   n   e   T   y   p   e   =   n   a   t   u   r   a
0017260    l   S   p   l   i   n   e  \r  \t  \t   c   a   s   e       1
0017300    0   :  \r  \t  \t   c   a   s   e       1   1   :  \r  \t  \t
0017320   \t   i   f       s   p   l   i   n   e   T   y   p   e       n
0017340    e       n   a   t   u   r   a   l   S   p   l   i   n   e 376
0017360  001  \0 224   @       &  \r  \t  \t  \t               s   p   l
0017400    i   n   e   T   y   p   e       n   e       p   e   r   i   o
0017420    d   i   c   S   p   l   i   n   e       r   e   s   u   l   t
0017440    i   s       P   S   q   u   i   t   (   P   S   e   r   r   o
0017460    r   (   3   )   )  \r  \t  \t  \t   i   f       n       l   s
0017500        3       t   h   e   n       s   p   l   i   n   e   T   y
0017520    p   e   =   n   a   t   u   r   a   l   S   p   l   i   n   e
0017540   \r  \t  \t  \t   e   n   d   c   a   s   e  \r  \t  \t   d   e
0017560    f   a   u   l   t   :  \r  \t  \t  \t   r   e   s   u   l   t
0017600    i   s       P   S   q   u   i   t   (   P   S   e   r   r   o
0017620    r   (   4   )   )  \r  \t  \t   ]  \r  \r  \t   /   /       c
0017640    o   m   p   u   t   e       p   a   r   a   m   e   t   r   i
0017660    z   a   t   i   o   n       (   p   o   l   y   g   o   n   a
0017700    l       l   i   n   e       a   p   p   r   o   x   i   m   a
0017720    t   i   o   n   )  \r  \t   l   e   t       h   =   P   S   a
0017740    l   l   o   c   a   t   e   (   l   v   (   P   S   v   e   c
0017760    >   >   P   S 376 001  \0   k 360   V   E   C   .   h   )   ,
0020000        2   *   n   )  \r  \t   i   f       h       e   q       0
0020020        r   e   s   u   l   t   i   s       0  \r  \t   f   o   r
0020040        i   =   0       t   o       n   -   2       d   o       [
0020060   \r  \t  \t   F   S   B   (   F   L   D   (   a   c   2   ,    
0020100    x   +   2   *   (   i   +   1   )   )   ,       x   +   2   *
0020120    i   )  \r  \t  \t   i   f       F   S   N   (   a   c   2   )
0020140        e   q       -   1       t   h   e   n       F   N   E   G
0020160    (   a   c   2   )  \r  \t  \t   F   S   B   (   F   L   D   (
0020200    a   c   3   ,       y   +   2   *   (   i   +   1   )   )   ,
0020220        y   +   2   *   i   )  \r  \t  \t   i   f       F   S   N
0020240    (   a   c   3   )       e   q       -   1       t   h   e   n
0020260        F   N   E   G   (   a   c   3   )  \r  \t  \t   F   D   V
0020300    (   (   F   C   M   (   a   c   2   ,       a   c   3   )    
0020320    e   q       1       ?       a   c   3   ,       a   c   2   )
0020340    ,       t   w   o   )  \r  \t  \t   F   S   T   (   F   A   D
0020360    (   a   c   2   ,       a   c   3 376 001  \0 206 307   )   ,
0020400        h   +   2   *   i   )  \r  \t  \t   ]  \r  \r  \t   /   /
0020420        n   o   w   ,       c   o   m   p   u   t   e       t   h
0020440    e       c   u   b   i   c       s   p   l   i   n   e   s    
0020460    x   (   h   )       &       y   (   h   )  \r  \t   l   e   t
0020500        d   o   n   e   =   C   o   m   p   u   t   e   C   u   b
0020520    i   c   S   p   l   i   n   e   (   n   ,       h   ,       x
0020540    ,       d   1   x   ,       d   2   x   ,       d   3   x   ,
0020560        s   p   l   i   n   e   T   y   p   e   )  \r  \t   i   f
0020600        d   o   n   e       t   h   e   n  \r  \t  \t   d   o   n
0020620    e   =   C   o   m   p   u   t   e   C   u   b   i   c   S   p
0020640    l   i   n   e   (   n   ,       h   ,       y   ,       d   1
0020660    y   ,       d   2   y   ,       d   3   y   ,       s   p   l
0020700    i   n   e   T   y   p   e   )  \r  \r  \t   /   /       r   e
0020720    p   a   r   a   m   e   t   r   i   z   e       t   o       t
0020740    h   e       i   n   t   e   r   v   a   l       [   0   ,    
0020760    1   ]  \r  \t   i   f       d   o   n   e       t   h 376 001
0021000   \0 245 375   e   n       f   o   r       i   =   0       t   o
0021020        n   -   2       d   o       [  \r  \t  \t   F   L   D   (
0021040    a   c   3   ,       F   L   D   (   a   c   1   ,       h   +
0021060    2   *   i   )   )  \r  \t  \t   F   S   T   (   F   M   L   (
0021100    F   L   D   (   a   c   2   ,       d   1   x   +   2   *   i
0021120    )   ,       a   c   1   )   ,       d   1   x   +   2   *   i
0021140    )  \r  \t  \t   F   S   T   (   F   M   L   (   F   L   D   (
0021160    a   c   2   ,       d   1   y   +   2   *   i   )   ,       a
0021200    c   1   )   ,       d   1   y   +   2   *   i   )  \r  \t  \t
0021220    F   M   L   (   a   c   1   ,       a   c   3   )  \r  \t  \t
0021240    F   S   T   (   F   M   L   (   F   L   D   (   a   c   2   ,
0021260        d   2   x   +   2   *   i   )   ,       a   c   1   )   ,
0021300        d   2   x   +   2   *   i   )  \r  \t  \t   F   S   T   (
0021320    F   M   L   (   F   L   D   (   a   c   2   ,       d   2   y
0021340    +   2   *   i   )   ,       a   c   1   )   ,       d   2   y
0021360    +   2   *   i   )  \r  \t  \t   F   M   L   (   a   c   1   ,
0021400        a   c 376 001  \0   W 206   3   )  \r  \t  \t   F   S   T
0021420    (   F   M   L   (   F   L   D   (   a   c   2   ,       d   3
0021440    x   +   2   *   i   )   ,       a   c   1   )   ,       d   3
0021460    x   +   2   *   i   )  \r  \t  \t   F   S   T   (   F   M   L
0021500    (   F   L   D   (   a   c   2   ,       d   3   y   +   2   *
0021520    i   )   ,       a   c   1   )   ,       d   3   y   +   2   *
0021540    i   )  \r  \t  \t   ]  \r  \r  \t   r   e   s   u   l   t   i
0021560    s       P   S   q   u   i   t   (   d   o   n   e   )  \r  \t
0021600    ]  \r  \r  \r  \r   a   n   d       C   u   b   i   c   S   p
0021620    l   i   n   e   (   n   ,   x   ,   y   ,   d   1   y   ,   d
0021640    2   y   ,   d   3   y   ,   s   p   l   i   n   e   T   y   p
0021660    e   ;       n   u   m   a   r   g   s       n   a   r   g   s
0021700    )       =       v   a   l   o   f       [  \r  \r  \t   /   /
0021720        d   e   f   a   u   l   t       a   r   g   u   m   e   n
0021740    t   s   ,       g   e   t       s   t   o   r   a   g   e   ,
0021760        c   h   e   c   k       v   a   r   i   o   u   s       t
0022000    h   i   n   g   s  \r  \t   l 376 001  \0 341 314   e   t    
0022020    t   e   m   p   V   e   c   =   v   e   c       l   P   S   V
0022040    E   C  \r  \t   i   f       P   S   i   n   i   t   (   t   e
0022060    m   p   V   e   c   )       e   q       0       r   e   s   u
0022100    l   t   i   s       0  \r  \r  \t   i   f       n       l   s
0022120        0       t   h   e   n       [  \r  \t  \t   n   =   -   n
0022140   \r  \t  \t   i   f       C   o   n   v   e   r   t   T   o   F
0022160    P   (   n   ,       l   v       x   ,       l   v       y   )
0022200        e   q       0       r   e   s   u   l   t   i   s       0
0022220   \r  \t  \t   ]  \r  \r  \t   s   w   i   t   c   h   o   n    
0022240    n   a   r   g   s       i   n   t   o       [  \r  \t  \t   c
0022260    a   s   e       6   :  \r  \t  \t  \t   s   p   l   i   n   e
0022300    T   y   p   e   =   n   a   t   u   r   a   l   S   p   l   i
0022320    n   e  \r  \t  \t   c   a   s   e       7   :  \r  \t  \t  \t
0022340    i   f       s   p   l   i   n   e   T   y   p   e       n   e
0022360        n   a   t   u   r   a   l   S   p   l   i   n   e       &
0022400   \r  \t  \t  \t               s   p   l   i   n   e 376 001  \0
0022420  034 225   T   y   p   e       n   e       p   e   r   i   o   d
0022440    i   c   S   p   l   i   n   e       r   e   s   u   l   t   i
0022460    s       P   S   q   u   i   t   (   P   S   e   r   r   o   r
0022500    (   3   )   )  \r  \t  \t  \t   i   f       n       l   s    
0022520    3       t   h   e   n       s   p   l   i   n   e   T   y   p
0022540    e   =   n   a   t   u   r   a   l   S   p   l   i   n   e  \r
0022560   \t  \t  \t   e   n   d   c   a   s   e  \r  \t  \t   d   e   f
0022600    a   u   l   t   :  \r  \t  \t  \t   r   e   s   u   l   t   i
0022620    s       P   S   q   u   i   t   (   P   S   e   r   r   o   r
0022640    (   4   )   )  \r  \t  \t   ]  \r  \r  \t   l   e   t       h
0022660    =   P   S   a   l   l   o   c   a   t   e   (   l   v   (   P
0022700    S   v   e   c   >   >   P   S   V   E   C   .   h   )   ,    
0022720    2   *   n   )  \r  \t   i   f       h       e   q       0    
0022740    r   e   s   u   l   t   i   s       0  \r  \t   f   o   r    
0022760    i   =   0       t   o       n   -   2       d   o       F   S
0023000    T   (   F   S   B   (   F   L   D   (   a   c   1   ,       x
0023020    +   2 376 001  \0 317   n   *   (   i   +   1   )   )   ,    
0023040    x   +   2   *   i   )   ,       h   +   2   *   i   )  \r  \r
0023060   \t   /   /       n   o   w   ,       c   o   m   p   u   t   e
0023100   \r  \t   l   e   t       d   o   n   e   =   C   o   m   p   u
0023120    t   e   C   u   b   i   c   S   p   l   i   n   e   (   n   ,
0023140        h   ,       y   ,       d   1   y   ,       d   2   y   ,
0023160        d   3   y   ,       s   p   l   i   n   e   T   y   p   e
0023200    )  \r  \t   i   f       d   o   n   e       e   q       0    
0023220    r   e   s   u   l   t   i   s       0  \r  \t   r   e   s   u
0023240    l   t   i   s       P   S   q   u   i   t   (   )  \r  \t   ]
0023260   \r  \r  \r  \r   a   n   d       C   o   m   p   u   t   e   C
0023300    u   b   i   c   S   p   l   i   n   e   (   n   ,       h   ,
0023320        y   ,       d   1   ,       d   2   ,       d   3   ,    
0023340    s   p   l   i   n   e   T   y   p   e   )       =       v   a
0023360    l   o   f       [  \r  \t   /   /       I   M   P   O   R   T
0023400    A   N   T   :       a   s   s   u   m   e       a   l   l    
0023420    a   r   g   u   m   e   n 376 001  \0 037 001   t   s       a
0023440    r   e       r   i   g   h   t       !   !   !   !  \r  \t   /
0023460    /       O   N   L   Y       c   a   l   l   e   d       b   y
0023500        C   u   b   i   c   S   p   l   i   n   e       &       P
0023520    a   r   a   m   e   t   r   i   c   S   p   l   i   n   e  \r
0023540   \t   l   e   t       c   ,   r   ,   s   =   0   ,   0   ,   0
0023560   \r  \t   i   f       s   p   l   i   n   e   T   y   p   e    
0023600    e   q       p   e   r   i   o   d   i   c   S   p   l   i   n
0023620    e       t   h   e   n       [  \r  \t  \t   i   f       F   C
0023640    M   (   F   L   D   (   a   c   2   ,   y   )   ,       y   +
0023660    2   *   (   n   -   1   )   )       n   e       0       r   e
0023700    s   u   l   t   i   s       P   S   q   u   i   t   (   P   S
0023720    e   r   r   o   r   (   2   )   )  \r  \t  \t   c   =   P   S
0023740    a   l   l   o   c   a   t   e   (   l   v   (   P   S   v   e
0023760    c   >   >   P   S   V   E   C   .   c   )   ,       2   *   n
0024000    )  \r  \t  \t   r   =   P   S   a   l   l   o   c   a   t   e
0024020    (   l   v   (   P   S   v   e   c   >   >   P 376 001  \0 016
0024040    T   S   V   E   C   .   r   )   ,       2   *   n   )  \r  \t
0024060   \t   s   =   P   S   a   l   l   o   c   a   t   e   (   l   v
0024100    (   P   S   v   e   c   >   >   P   S   V   E   C   .   s   )
0024120    ,       2   *   n   )  \r  \t  \t   i   f       (   c       e
0024140    q       0   )       %       (   r       e   q       0   )    
0024160    %       (   s       e   q       0   )       r   e   s   u   l
0024200    t   i   s       0  \r  \t  \t   ]  \r  \r  \t   l   e   t    
0024220    a   =       P   S   a   l   l   o   c   a   t   e   (   l   v
0024240    (   P   S   v   e   c   >   >   P   S   V   E   C   .   a   )
0024260    ,       2   *   n   )  \r  \t   l   e   t       b   =       P
0024300    S   a   l   l   o   c   a   t   e   (   l   v   (   P   S   v
0024320    e   c   >   >   P   S   V   E   C   .   b   )   ,       2   *
0024340    n   )  \r  \t   i   f       (   a       e   q       0   )    
0024360    %       (   b       e   q       0   )       r   e   s   u   l
0024400    t   i   s       0  \r  \r  \t   /   /       c   h   e   c   k
0024420        o   v   e   r   l   a   p   p   i   n   g       k   n   o
0024440    t 376 001  \0 355   Y   s   !  \r  \t   f   o   r       i   =
0024460    0       t   o       n   -   1       d   o  \r  \t  \t   i   f
0024500        F   C   M   (   z   e   r   o   ,       h   +   2   *   i
0024520    )       e   q       0       t   h   e   n       F   S   T   (
0024540    o   n   e   ,       h   +   2   *   i   )  \r  \r  \t   t   e
0024560    s   t       s   p   l   i   n   e   T   y   p   e       e   q
0024600        n   a   t   u   r   a   l   S   p   l   i   n   e  \r  \t
0024620    i   f   s   o       [  \r  \t  \t   /   /       a   (   0   )
0024640    =   2   *   (   h   (   0   )   +   h   (   1   )   )  \r  \t
0024660   \t   F   S   T   (   F   M   L   (   F   A   D   (   F   L   D
0024700    (   a   c   1   ,       h   )   ,       h   +   2   )   ,    
0024720    t   w   o   )   ,       a   )  \r  \t  \t   /   /       a   (
0024740    i   )   =   2   *   (   h   (   i   )   +   h   (   i   +   1
0024760    )   )   -   h   (   i   )   *   h   (   i   )   /   a   (   i
0025000    -   1   )           {   i   =   1   ,   2   ,   .   .   .   ,
0025020    n   -   3   }  \r  \t  \t   f   o   r       i   =   1       t
0025040    o       n   -   3     376 001  \0 272 204   d   o       [  \r
0025060   \t  \t  \t   F   M   L   (   F   A   D   (   F   L   D   (   a
0025100    c   4   ,       h   +   2   *   i   )   ,       h   +   2   *
0025120    (   i   +   1   )   )   ,       t   w   o   )  \r  \t  \t  \t
0025140    F   D   V   (   F   M   L   (   F   L   D   (   a   c   2   ,
0025160    h   +   2   *   i   )   ,       a   c   2   )   ,       a   c
0025200    1   )  \r  \t  \t  \t   F   L   D   (   a   c   1   ,       F
0025220    S   T   (   F   S   B   (   a   c   4   ,       a   c   2   )
0025240    ,       a   +   2   *   i   )   )  \r  \t  \t  \t   ]  \r  \t
0025260   \t   ]  \r  \r  \t   i   f   n   o   t       [  \r  \t  \t   /
0025300    /       a   (   0   )   =   2   *   (   h   (   0   )   +   h
0025320    (   n   -   2   )   )  \r  \t  \t   F   S   T   (   F   M   L
0025340    (   F   A   D   (   F   L   D   (   a   c   1   ,       h   )
0025360    ,       h   +   2   *   (   n   -   2   )   )   ,       t   w
0025400    o   )   ,       a   )  \r  \t  \t   /   /       a   (   i   )
0025420    =   2   *   (   h   (   i   )   +   h   (   i   -   1   )   )
0025440    -   h   (   i   -   1   )   *   h   (   i 376 001  \0   $ 264
0025460    -   1   )   /   a   (   i   -   1   )           {   i   =   1
0025500    ,   2   ,   .   .   .   ,   n   -   3   }  \r  \t  \t   f   o
0025520    r       i   =   1       t   o       n   -   3       d   o    
0025540    [  \r  \t  \t  \t   F   M   L   (   F   A   D   (   F   L   D
0025560    (   a   c   4   ,       h   +   2   *   i   )   ,       h   +
0025600    2   *   (   i   -   1   )   )   ,       t   w   o   )  \r  \t
0025620   \t  \t   F   D   V   (   F   M   L   (   F   L   D   (   a   c
0025640    2   ,   h   +   2   *   (   i   -   1   )   )   ,       a   c
0025660    2   )   ,       a   c   1   )  \r  \t  \t  \t   F   L   D   (
0025700    a   c   1   ,       F   S   T   (   F   S   B   (   a   c   4
0025720    ,       a   c   2   )   ,       a   +   2   *   i   )   )  \r
0025740   \t  \t  \t   ]  \r  \r  \t  \t   /   /       c   (   0   )   =
0025760    h   (   n   -   2   )  \r  \t  \t   F   S   T   (   F   L   D
0026000    (   a   c   1   ,       h   +   2   *   (   n   -   2   )   )
0026020    ,       c   )  \r  \t  \t   /   /       c   (   i   )   =   -
0026040    h   (   i   -   1   )   *   c   (   i   -   1   )   /   a   (
0026060  376 001  \0 361   -   i   -   1   )               {   i   =   1
0026100    ,   2   ,   .   .   .   ,   n   -   3   }  \r  \t  \t   /   /
0026120        N   o   t   i   c   e   :       c   (   i   -   1   )    
0026140    i   s       a   c   1  \r  \t  \t   f   o   r       i   =   1
0026160        t   o       n   -   3       d   o  \r  \t  \t  \t   F   S
0026200    T   (   F   N   E   G   (   F   D   V   (   F   M   L   (   a
0026220    c   1   ,       h   +   2   *   (   i   -   1   )   )   ,    
0026240    a   +   2   *   (   i   -   1   )   )   )   ,       c   +   2
0026260    *   i   )  \r  \t  \t   ]  \r  \r  \t   c   o   m   p   u   t
0026300    e   b   c   :  \r  \t   i   f       n       g   e       3    
0026320    t   h   e   n       t   e   s   t       s   p   l   i   n   e
0026340    T   y   p   e       e   q       n   a   t   u   r   a   l   S
0026360    p   l   i   n   e  \r  \t   i   f   s   o       [  \r  \t  \t
0026400    /   /       f   i   r   s   t   :       D   (   i   )   =   (
0026420    y   (   i   +   1   )   -   y   (   i   )   )   /   h   (   i
0026440    )               {   i   =   0   ,   1   ,   .   .   .   ,   n
0026460    -   2   }  \r  \t 376 001  \0   8   G  \t   /   /       a   n
0026500    d   :       b   (   i   )   =   6   *   (   D   (   i   +   1
0026520    )   -   D   (   i   )   )               {   i   =   0   ,   1
0026540    ,   .   .   .   ,   n   -   3   }  \r  \t  \t   /   /       N
0026560    o   t   i   c   e   :       D   (   i   )       i   s       a
0026600    c   1   ,       D   (   i   +   1   )       i   s       a   c
0026620    2  \r  \t  \t   F   D   V   (   F   S   B   (   F   L   D   (
0026640    a   c   1   ,       y   +   2   )   ,       y   )   ,       h
0026660    )  \r  \t  \t   f   o   r       i   =   0       t   o       n
0026700    -   3       d   o       [  \r  \t  \t  \t   F   D   V   (   F
0026720    S   B   (   F   L   D   (   a   c   2   ,       y   +   2   *
0026740    (   i   +   2   )   )   ,       y   +   2   *   (   i   +   1
0026760    )   )   ,       h   +   2   *   (   i   +   1   )   )  \r  \t
0027000   \t  \t   F   S   T   (   F   M   L   (   F   S   B   (   F   L
0027020    D   (   a   c   3   ,       a   c   2   )   ,       a   c   1
0027040    )   ,       s   i   x   )   ,       b   +   2   *   i   )  \r
0027060   \t  \t  \t   F   L   D   (   a   c   1 376 001  \0 261   w   ,
0027100        a   c   2   )  \r  \t  \t  \t   ]  \r  \t  \t   /   /    
0027120    t   h   e   n   :       b   (   i   )   =   b   (   i   )   -
0027140    h   (   i   )   *   b   (   i   -   1   )   /   a   (   i   -
0027160    1   )           {   i   =   1   ,   2   ,   .   .   .   ,   n
0027200    -   3   }  \r  \t  \t   /   /       N   o   t   i   c   e   :
0027220        b   (   i   -   1   )       i   s       a   c   1  \r  \t
0027240   \t   F   L   D   (   a   c   1   ,       b   )  \r  \t  \t   f
0027260    o   r       i   =   1       t   o       n   -   3       d   o
0027300        [  \r  \t  \t  \t   F   D   V   (   F   M   L   (   F   L
0027320    D   (   a   c   2   ,       a   c   1   )   ,       h   +   2
0027340    *   i   )   ,       a   +   2   *   (   i   -   1   )   )  \r
0027360   \t  \t  \t   F   S   T   (   F   S   B   (   F   L   D   (   a
0027400    c   1   ,       b   +   2   *   i   )   ,       a   c   2   )
0027420    ,       b   +   i   *   2   )  \r  \t  \t  \t   ]  \r  \t  \t
0027440    ]  \r  \r  \t   i   f   n   o   t       [  \r  \t  \t   /   /
0027460        f   i   r   s   t   :       D   (   i   )   =   (   y 376
0027500  001  \0  \v 236   (   i   +   1   )   -   y   (   i   )   )   /
0027520    h   (   i   )               {   i   =   0   ,   1   ,   .   .
0027540    .   ,   n   -   2   }  \r  \t  \t   /   /       a   n   d   :
0027560        b   (   i   )   =   6   *   (   D   (   i   )   -   D   (
0027600    i   -   1   )   )               {   i   =   1   ,   2   ,   .
0027620    .   .   ,   n   -   3   }  \r  \t  \t   /   /       a   n   d
0027640    :       b   (   0   )   =       6   *   (   D   (   0   )   -
0027660    D   (   n   -   2   )   )  \r  \t  \t   /   /       N   o   t
0027700    i   c   e   :       D   (   i   -   1   )       i   s       a
0027720    c   1   ,       D   (   i   )       i   s       a   c   2  \r
0027740   \t  \t   F   D   V   (   F   S   B   (   F   L   D   (   a   c
0027760    1   ,       y   )   ,       y   +   2   *   (   n   -   2   )
0030000    )   ,       h   +   2   *   (   n   -   2   )   )  \r  \t  \t
0030020    f   o   r       i   =   0       t   o       n   -   3       d
0030040    o       [  \r  \t  \t  \t   F   D   V   (   F   S   B   (   F
0030060    L   D   (   a   c   2   ,       y   +   2   *   (   i   +   1
0030100    )   )   ,     376 001  \0 025   T   y   +   2   *   i   )   ,
0030120        h   +   2   *   i   )  \r  \t  \t  \t   F   S   T   (   F
0030140    M   L   (   F   S   B   (   F   L   D   (   a   c   3   ,    
0030160    a   c   2   )   ,       a   c   1   )   ,       s   i   x   )
0030200    ,       b   +   2   *   i   )  \r  \t  \t  \t   F   L   D   (
0030220    a   c   1   ,       a   c   2   )  \r  \t  \t  \t   ]  \r  \t
0030240   \t   /   /       t   h   e   n   :       b   (   i   )   =   b
0030260    (   i   )   -   h   (   i   -   1   )   *   b   (   i   -   1
0030300    )   /   a   (   i   -   1   )           {   i   =   1   ,   2
0030320    ,   .   .   .   ,   n   -   3   }  \r  \t  \t   /   /       N
0030340    o   t   i   c   e   :       b   (   i   -   1   )       i   s
0030360        a   c   1  \r  \t  \t   F   L   D   (   a   c   1   ,    
0030400    b   )  \r  \t  \t   f   o   r       i   =   1       t   o    
0030420    n   -   3       d   o       [  \r  \t  \t  \t   F   D   V   (
0030440    F   M   L   (   F   L   D   (   a   c   2   ,       a   c   1
0030460    )   ,       h   +   2   *   (   i   -   1   )   )   ,       a
0030500    +   2   *   (   i   -   1   )   ) 376 001  \0   |   k  \r  \t
0030520   \t  \t   F   S   T   (   F   S   B   (   F   L   D   (   a   c
0030540    1   ,       b   +   2   *   i   )   ,       a   c   2   )   ,
0030560        b   +   i   *   2   )  \r  \t  \t  \t   ]  \r  \r  \t  \t
0030600    /   /       r   (   n   -   2   )   =   1           a   n   d
0030620            s   (   n   -   2   )   =   0  \r  \t  \t   F   S   T
0030640    (   o   n   e   ,   r   +   2   *   (   n   -   2   )   )  \r
0030660   \t  \t   F   S   T   (   z   e   r   o   ,   s   +   2   *   (
0030700    n   -   2   )   )  \r  \t  \t   /   /       r   (   i   )   =
0030720    -   (   h   (   i   )   *   r   (   i   +   1   )   +   c   (
0030740    i   )   )   /   a   (   i   )               {   i   =   n   -
0030760    3   ,   .   .   .   ,   1   ,   0   }  \r  \t  \t   /   /    
0031000    s   (   i   )   =   (   b   (   i   )   -   h   (   i   )   *
0031020    s   (   i   +   1   )   )   /   a   (   i   )               {
0031040    i   =   n   -   3   ,   .   .   .   ,   1   ,   0   }  \r  \t
0031060   \t   f   o   r       i   =   n   -   3       t   o       0    
0031100    b   y       -   1       d   o       [  \r  \t  \t  \t 376 001
0031120   \0 347 221   F   A   D   (   F   M   L   (   F   L   D   (   a
0031140    c   1   ,       r   +   2   *   (   i   +   1   )   )   ,    
0031160    h   +   2   *   i   )   ,       c   +   2   *   i   )  \r  \t
0031200   \t  \t   F   S   T   (   F   D   V   (   F   N   E   G   (   a
0031220    c   1   )   ,       a   +   2   *   i   )   ,       r   +   2
0031240    *   i   )  \r  \t  \t  \t   F   S   B   (   F   L   D   (   a
0031260    c   1   ,       b   +   2   *   i   )   ,       F   M   L   (
0031300    F   L   D   (   a   c   2   ,       s   +   2   *   (   i   +
0031320    1   )   )   ,       h   +   2   *   i   )   )  \r  \t  \t  \t
0031340    F   S   T   (   F   D   V   (   a   c   1   ,       a   +   2
0031360    *   i   )   ,       s   +   2   *   i   )  \r  \t  \t  \t   ]
0031400   \r  \t  \t   ]  \r  \r  \t   c   o   m   p   u   t   e   d   2
0031420    :  \r  \t   /   /       C   O   M   P   U   T   E       S   E
0031440    C   O   N   D       D   E   R   I   V   A   T   I   V   E   S
0031460   \r  \t   t   e   s   t       s   p   l   i   n   e   T   y   p
0031500    e       e   q       n   a   t   u   r   a   l   S   p   l   i
0031520    n   e  \r 376 001  \0 314 020  \t   i   f   s   o       [  \r
0031540   \t  \t   /   /       d   2   (   0   )   =   d   2   (   n   -
0031560    1   )   =   0  \r  \t  \t   F   S   T   (   z   e   r   o   ,
0031600    d   2   )   ;       F   S   T   (   z   e   r   o   ,   d   2
0031620    +   2   *   (   n   -   1   )   )  \r  \t  \t   /   /       d
0031640    2   (   i   )   =   (   b   (   i   -   1   )   -   h   (   i
0031660    )   *   d   2   (   i   +   1   )   )   /   a   (   i   -   1
0031700    )           {   i   =   n   -   2   ,   .   .   .   ,   2   ,
0031720    1   }  \r  \t  \t   f   o   r       i   =   n   -   2       t
0031740    o       1       b   y       -   1       d   o       [  \r  \t
0031760   \t  \t   F   M   L   (   F   L   D   (   a   c   2   ,       d
0032000    2   +   2   *   (   i   +   1   )   )   ,       h   +   2   *
0032020    i   )  \r  \t  \t  \t   F   S   T   (   F   D   V   (   F   S
0032040    B   (   F   L   D   (   a   c   1   ,       b   +   2   *   (
0032060    i   -   1   )   )   ,       a   c   2   )   ,       a   +   2
0032100    *   (   i   -   1   )   )   ,       d   2   +   2   *   i   )
0032120   \r  \t  \t  \t   ]  \r  \t  \t 376 001  \0 242 201   ]  \r  \r
0032140   \t   i   f   n   o   t       [  \r  \t  \t   /   /       a   c
0032160    1   =   (   6   *   (   D   (   n   -   2   )   -   D   (   n
0032200    -   3   )   )   -   h   (   n   -   2   )   *   s   (   0   )
0032220    -   h   (   n   -   3   )   *   s   (   n   -   3   )   )  \r
0032240   \t  \t   F   D   V   (   F   S   B   (   F   L   D   (   a   c
0032260    1   ,       y   +   2   *   (   n   -   1   )   )   ,       y
0032300    +   2   *   (   n   -   2   )   )   ,       h   +   2   *   (
0032320    n   -   2   )   )  \r  \t  \t   F   S   B   (   a   c   1   ,
0032340        F   D   V   (   F   S   B   (   F   L   D   (   a   c   2
0032360    ,       y   +   2   *   (   n   -   2   )   )   ,       y   +
0032400    2   *   (   n   -   3   )   )   ,       h   +   2   *   (   n
0032420    -   3   )   )   )  \r  \t  \t   F   S   B   (   F   M   L   (
0032440    a   c   1   ,       s   i   x   )   ,       F   M   L   (   F
0032460    L   D   (   a   c   3   ,       s   )   ,       h   +   2   *
0032500    (   n   -   2   )   )   )  \r  \t  \t   F   S   B   (   a   c
0032520    1   ,       F   M   L   (   F   L   D   (   a   c 376 001  \0
0032540  222 245   3   ,       s   +   2   *   (   n   -   3   )   )   ,
0032560        h   +   2   *   (   n   -   3   )   )   )  \r  \r  \t  \t
0032600    /   /       a   c   2   =   (   h   (   n   -   2   )   *   r
0032620    (   0   )   +   h   (   n   -   3   )   *   r   (   n   -   3
0032640    )   +   2   *   (   h   (   n   -   3   )   +   h   (   n   -
0032660    2   )   )   )  \r  \t  \t   F   A   D   (   F   M   L   (   F
0032700    L   D   (   a   c   2   ,       r   )   ,       h   +   2   *
0032720    (   n   -   2   )   )   ,       F   M   L   (   F   L   D   (
0032740    a   c   3   ,       r   +   2   *   (   n   -   3   )   )   ,
0032760        h   +   2   *   (   n   -   3   )   )   )  \r  \t  \t   F
0033000    A   D   (   a   c   2   ,       F   M   L   (   F   A   D   (
0033020    F   L   D   (   a   c   3   ,       h   +   2   *   (   n   -
0033040    3   )   )   ,       h   +   2   *   (   n   -   2   )   )   ,
0033060        t   w   o   )   )  \r  \r  \t  \t   /   /       a   c   1
0033100    =   d   2   (   n   -   2   )   =   a   c   1   /   a   c   2
0033120   \r  \t  \t   F   S   T   (   F   D   V   (   a   c   1   ,    
0033140    a   c 376 001  \0 343   b   2   )   ,       d   2   +   2   *
0033160    (   n   -   2   )   )  \r  \r  \t  \t   /   /       d   2   (
0033200    i   )   =   r   (   i   )   *   d   2   (   n   -   2   )    
0033220    +       s   (   i   )               {   i   =   0   ,   1   ,
0033240    2   ,   .   .   .   ,   n   -   3   }  \r  \t  \t   f   o   r
0033260        i   =   0       t   o       n   -   3       d   o  \r  \t
0033300   \t  \t   F   S   T   (   F   A   D   (   F   M   L   (   F   L
0033320    D   (   a   c   2   ,       a   c   1   )   ,       r   +   2
0033340    *   i   )   ,       s   +   2   *   i   )   ,       d   2   +
0033360    2   *   i   )  \r  \r  \t  \t   /   /       d   2   (   n   -
0033400    1   )   =   d   2   (   0   )  \r  \t  \t   F   S   T   (   F
0033420    L   D   (   a   c   1   ,       d   2   )   ,       d   2   +
0033440    2   *   (   n   -   1   )   )  \r  \t  \t   ]  \r  \r  \t   c
0033460    o   m   p   u   t   e   d   1   d   3   :  \r  \t   /   /    
0033500    C   O   M   P   U   T   E       F   I   R   S   T       &    
0033520    T   H   I   R   D       D   E   R   I   V   A   T   I   V   E
0033540    S  \r  \t   /   /       d 376 001  \0   2 334   1   (   i   )
0033560    =   (   y   (   i   +   1   )   -   y   (   i   )   )   /   h
0033600    (   i   )       -       h   (   i   )   *   (   2   *   d   2
0033620    (   i   )   +   d   2   (   i   +   1   )   )   /   6  \r  \t
0033640    /   /       d   3   (   i   )   =   (   d   2   (   i   +   1
0033660    )   -   d   2   (   i   )   )   /   h   (   i   )            
0033700    {   i   =   0   ,   1   ,   2   ,   .   .   .   ,   n   -   2
0033720    }  \r  \t   f   o   r       i   =   0       t   o       n   -
0033740    2       d   o       [  \r  \t  \t   F   D   V   (   F   S   B
0033760    (   F   L   D   (   a   c   1   ,       y   +   2   *   (   i
0034000    +   1   )   )   ,       y   +   2   *   i   )   ,       h   +
0034020    2   *   i   )  \r  \t  \t   F   A   D   (   F   M   L   (   F
0034040    L   D   (   a   c   2   ,       d   2   +   2   *   i   )   ,
0034060        t   w   o   )   ,       d   2   +   2   *   (   i   +   1
0034100    )   )  \r  \t  \t   F   S   T   (   F   S   B   (   a   c   1
0034120    ,       F   D   V   (   F   M   L   (   a   c   2   ,       h
0034140    +   2   *   i   )   ,       s   i   x   )   ) 376 001  \0   V
0034160    3   ,       d   1   +   2   *   i   )  \r  \t  \t   F   S   T
0034200    (   F   D   V   (   F   S   B   (   F   L   D   (   a   c   1
0034220    ,       d   2   +   2   *   (   i   +   1   )   )   ,       d
0034240    2   +   2   *   i   )   ,       h   +   2   *   i   )   ,    
0034260    d   3   +   2   *   i   )  \r  \t  \t   ]  \r  \r  \t   r   e
0034300    s   u   l   t   i   s       t   r   u   e  \r  \t   ]  \r  \r
0034320   \r   a   n   d       C   o   n   v   e   r   t   T   o   F   P
0034340    (   n   ,       i   n   t   X   l   o   c   ,       i   n   t
0034360    Y   l   o   c   )       =       v   a   l   o   f       [  \r
0034400   \t   /   /       c   o   n   v   e   r   t       c   o   o   r
0034420    d   i   n   a   t   e   s       f   r   o   m       i   n   t
0034440    e   g   e   r       t   o       f   l   o   a   t   i   n   g
0034460        p   o   i   n   t  \r  \t   l   e   t       f   p   x   =
0034500    P   S   a   l   l   o   c   a   t   e   (   l   v   (   P   S
0034520    v   e   c   >   >   P   S   V   E   C   .   f   p   x   )   ,
0034540        2   *   n   )  \r  \t   l   e   t       f   p   y   =   P
0034560    S 376 001  \0 351   u   a   l   l   o   c   a   t   e   (   l
0034600    v   (   P   S   v   e   c   >   >   P   S   V   E   C   .   f
0034620    p   y   )   ,       2   *   n   )  \r  \t   i   f       (   f
0034640    p   x       e   q       0   )       %       (   f   p   y    
0034660    e   q       0   )       r   e   s   u   l   t   i   s       P
0034700    S   q   u   i   t   (   P   S   e   r   r   o   r   (   1   )
0034720    )  \r  \t   f   o   r       i   =   0       t   o       n   -
0034740    1       d   o       [  \r  \t  \t   F   S   T   (   F   L   D
0034760    I   (   a   c   1   ,       (   @   i   n   t   X   l   o   c
0035000    )   !   i   )   ,       f   p   x   +   2   *   i   )  \r  \t
0035020   \t   F   S   T   (   F   L   D   I   (   a   c   1   ,       (
0035040    @   i   n   t   Y   l   o   c   )   !   i   )   ,       f   p
0035060    y   +   2   *   i   )  \r  \t  \t   ]  \r  \t   @   i   n   t
0035100    X   l   o   c   =   f   p   x  \r  \t   @   i   n   t   Y   l
0035120    o   c   =   f   p   y  \r  \t   r   e   s   u   l   t   i   s
0035140        t   r   u   e  \r  \t   ]  \r  \r  \r   a   n   d       P
0035160    S   e   r   r   o   r 376 001  \0   Y 331   (   e   r   r   o
0035200    r   C   o   d   e   ,   a   1   ,   a   2   ,   a   3   ,   a
0035220    4   )       =       v   a   l   o   f       [  \r  \t   (   t
0035240    a   b   l   e   [   #   7   7   4   0   3   ;       #   1   4
0035260    0   1   ]   )       (   "   P   S   .   E   R   R   O   R   S
0035300    "   ,       l   v       e   r   r   o   r   C   o   d   e   )
0035320   \r  \t   r   e   s   u   l   t   i   s       0  \r  \t   ]  \r
0035340   \r  \r   a   n   d       P   S   i   n   i   t   (   p   s   v
0035360    )       =       v   a   l   o   f       [  \r  \t   i   f    
0035400    (   P   S   z   o   n   e       e   q       0   )       r   e
0035420    s   u   l   t   i   s       P   S   e   r   r   o   r   (   0
0035440    )  \r  \t   P   S   v   e   c   =   p   s   v  \r  \t   Z   e
0035460    r   o   (   P   S   v   e   c   ,       l   P   S   V   E   C
0035500    )  \r  \t   /   /       n   e   w       f   l   o   a   t   i
0035520    n   g       p   o   i   n   t       w   o   r   k       a   r
0035540    e   a   :  \r  \t   l   e   t       F   P   w   o   r   k   N
0035560    e   w   =       A   l   l   o   c   a   t 376 001  \0   l 342
0035600    e   (   P   S   z   o   n   e   ,       4   *   n   u   m   F
0035620    P   a   c   s   +   1   )  \r  \t   i   f       F   P   w   o
0035640    r   k   N   e   w       e   q       0       r   e   s   u   l
0035660    t   i   s       P   S   e   r   r   o   r   (   1   )  \r  \t
0035700    P   S   v   e   c   >   >   P   S   V   E   C   .   F   P   w
0035720    o   r   k   S   a   v   e   =   F   P   w   o   r   k  \r  \t
0035740    P   S   v   e   c   >   >   P   S   V   E   C   .   F   P   w
0035760    o   r   k   N   e   w   =   F   P   w   o   r   k   N   e   w
0036000   \r  \t   F   P   w   o   r   k   N   e   w   !   0   =   n   u
0036020    m   F   P   a   c   s  \r  \t   F   P   S   e   t   u   p   (
0036040    F   P   w   o   r   k   N   e   w   )  \r  \t   F   L   D   I
0036060    (   z   e   r   o   ,   0   )   ;       F   L   D   I   (   o
0036100    n   e   ,       1   )   ;       F   L   D   I   (   t   w   o
0036120    ,   2   )   ;       F   L   D   I   (   s   i   x   ,   6   )
0036140   \r  \t   r   e   s   u   l   t   i   s       t   r   u   e  \r
0036160   \t   ]  \r  \r  \r   a   n   d       P   S   a   l   l   o   c
0036200  376 001  \0   ` 265   a   t   e   (   l   o   c   a   t   i   o
0036220    n   ,       m   )       =       v   a   l   o   f       [  \r
0036240   \t   l   e   t       b   =   A   l   l   o   c   a   t   e   (
0036260    P   S   z   o   n   e   ,       m   )  \r  \t   i   f       b
0036300        e   q       0       r   e   s   u   l   t   i   s       P
0036320    S   q   u   i   t   (   P   S   e   r   r   o   r   (   1   )
0036340    )  \r  \t   @   l   o   c   a   t   i   o   n   =   b  \r  \t
0036360    r   e   s   u   l   t   i   s       b  \r  \t   ]  \r  \r  \r
0036400    a   n   d       P   S   q   u   i   t   (   r   e   s   u   l
0036420    t   )       =       v   a   l   o   f       [  \r  \t   i   f
0036440        P   S   v   e   c       e   q       0       r   e   s   u
0036460    l   t   i   s       r   e   s   u   l   t  \r  \t   F   P   S
0036500    e   t   u   p   (   P   S   v   e   c   >   >   P   S   V   E
0036520    C   .   F   P   w   o   r   k   S   a   v   e   )  \r  \t   P
0036540    S   v   e   c   >   >   P   S   V   E   C   .   F   P   w   o
0036560    r   k   S   a   v   e   =   0  \r  \t   f   o   r       i   =
0036600    0       t   o     376  \0   V 241 342   l   P   S   V   E   C
0036620    -   1       d   o       i   f       P   S   v   e   c   !   i
0036640        n   e       0       t   h   e   n       F   r   e   e   (
0036660    P   S   z   o   n   e   ,       P   S   v   e   c   !   i   )
0036700   \r  \t   P   S   v   e   c   =   0  \r  \t   r   e   s   u   l
0036720    t   i   s       r   e   s   u   l   t  \r  \t   ]  \r  \r  \r
0036740  377  \0  \0   S   P   L   I   N   E   3   .   B   C   P   L  \0
0036760  376 001  \0   1 021   /   /       F   i   l   e   :       S   P
0037000    L   I   N   E   3   .   B   C   P   L  \r   /   /       P   .
0037020    B   a   u   d   e   l   a   i   r   e  \r   /   /       D   e
0037040    c   e   m   b   e   r       5   ,       1   9   7   7        
0037060    4   :   4   9       P   M  \r  \r   /   /       T   h   e    
0037100    p   r   o   c   e   d   u   r   e       P   a   r   a   m   e
0037120    t   r   i   c   S   p   l   i   n   e       i   m   p   l   e
0037140    m   e   n   t   s       t   h   e       a   l   g   o   r   i
0037160    t   h   m   s  \r   /   /       f   o   r       l   o   c   a
0037200    l       c   u   b   i   c       s   p   l   i   n   e   s    
0037220    d   e   s   c   r   i   b   e   d       i   n  \r   /   /  \t
0037240   \t   "   S   p   l   i   n   e       C   u   r   v   e       T
0037260    e   c   h   n   i   q   u   e   s   "  \r   /   /  \t  \t   b
0037300    y       P   .   B   a   u   d   e   l   a   i   r   e   ,    
0037320    R   .   F   l   e   g   a   l   ,       &       R   .   S   p
0037340    r   o   u   l   l  \r   /   /  \t  \t   X   e   r   o   x    
0037360    I   n   t   e   r 376 001  \0   ( 254   n   a   l       R   e
0037400    p   o   r   t           (   1   9   7   7   )  \r  \r   /   /
0037420        U   s   e   s       M   I   C   R   O   C   O   D   E   D
0037440        f   l   o   a   t   i   n   g       p   o   i   n   t    
0037460    r   o   u   t   i   n   e   s  \r  \r   /   /       o   u   t
0037500    g   o   i   n   g       p   r   o   c   e   d   u   r   e   s
0037520    :  \r  \r   e   x   t   e   r   n   a   l       [  \r  \t   P
0037540    a   r   a   m   e   t   r   i   c   S   p   l   i   n   e  \r
0037560   \t   P   S   e   r   r   o   r  \r  \t   ]  \r  \r   /   /    
0037600    o   u   t   g   o   i   n   g       s   t   a   t   i   c   s
0037620    :  \r  \r   e   x   t   e   r   n   a   l       [  \r  \t   P
0037640    S   z   o   n   e  \r  \t   ]  \r  \r   s   t   a   t   i   c
0037660        [  \r  \t   P   S   z   o   n   e   =   0  \t  \t   /   /
0037700        s   t   o   r   a   g   e       z   o   n   e  \r  \t   ]
0037720   \r  \r   /   /       i   n   c   o   m   i   n   g       p   r
0037740    o   c   e   d   u   r   e   s   :  \r  \r   e   x   t   e   r
0037760    n   a   l       [  \r  \t   F   L   D 376 001  \0   a   e   ;
0040000        F   A   D   ;       F   M   L   ;       F   S   T  \t   /
0040020    /       F   L   O   A   T       (   A   l   t   o       f   l
0040040    o   a   t   i   n   g       p   o   i   n   t       p   a   c
0040060    k   a   g   e   )  \r  \t   F   L   D   I   ;       F   S   B
0040100    ;       F   D   V  \r  \t   F   C   M   ;       F   N   E   G
0040120    ;       F   T   R  \r  \t   F   P   S   e   t   u   p  \r  \r
0040140   \t   A   l   l   o   c   a   t   e  \t  \t   /   /       A   l
0040160    t   o       S   Y   S   T   E   M  \r  \t   F   r   e   e  \r
0040200   \t   M   o   v   e   B   l   o   c   k  \r  \t   Z   e   r   o
0040220   \r  \t   ]  \r  \r   /   /       i   n   c   o   m   i   n   g
0040240        s   t   a   t   i   c   s   :  \r  \r   e   x   t   e   r
0040260    n   a   l       [  \r  \t   F   P   w   o   r   k  \t  \t  \t
0040300    /   /       F   L   O   A   T           (   f   l   o   a   t
0040320    i   n   g       p   o   i   n   t       a   c   c   u   m   u
0040340    l   a   t   o   r   )  \r  \t   ]  \r  \r   /   /       l   o
0040360    c   a   l       d   e   f   i   n   i   t   i   o   n   s 376
0040400  001  \0 037 320   :  \r  \r   m   a   n   i   f   e   s   t    
0040420    [  \r  \t   n   a   t   u   r   a   l   S   p   l   i   n   e
0040440    =   0  \r  \t   p   e   r   i   o   d   i   c   S   p   l   i
0040460    n   e   =   1  \r  \t   /   /       f   l   o   a   t   i   n
0040500    g       p   o   i   n   t       r   e   g   i   s   t   e   r
0040520    s   :       0       t   o       4  \r  \t   a   c   0   =   0
0040540    ;       a   c   1   =   1   ;       a   c   2   =   2   ;    
0040560    a   c   3   =   3   ;       a   c   4   =   4  \r  \t   /   /
0040600        c   o   n   s   t   a   n   t   s   :  \r  \t   z   e   r
0040620    o   =   5   ;       o   n   e   =   6   ;       t   w   o   =
0040640    7   ;       s   i   x   =   8  \r  \t   n   u   m   F   P   a
0040660    c   s   =   9  \r  \t   /   /       l   o   c   a   l       s
0040700    p   l   i   n   e       t   y   p   e  \r  \t   C   a   t   m
0040720    u   l   l   R   o   m   =   1  \r  \t   F   o   u   r   P   o
0040740    i   n   t   s   =   2  \r  \t   B   s   p   l   i   n   e   1
0040760    =   3  \r  \t   B   s   p   l   i   n   e   2   =   4  \r  \t
0041000    B   s   p   l 376 001  \0 036 214   i   n   e   3   =   5  \r
0041020   \t   H   e   r   m   i   t   =   6  \r  \t   ]  \r  \r   s   t
0041040    r   u   c   t   u   r   e       P   S   V   E   C       [  \r
0041060   \t   F   P   w   o   r   k   S   a   v   e       w   o   r   d
0041100   \r  \t   F   P   w   o   r   k   N   e   w       w   o   r   d
0041120   \r  \t   f   p   x       w   o   r   d  \r  \t   f   p   y    
0041140    w   o   r   d  \r  \t   a       w   o   r   d  \r  \t   ]  \r
0041160   \r   m   a   n   i   f   e   s   t       l   P   S   V   E   C
0041200    =   s   i   z   e       P   S   V   E   C   /   1   6  \r  \r
0041220    /   /       l   o   c   a   l       s   t   a   t   i   c   s
0041240    :  \r  \r   s   t   a   t   i   c       [  \r  \t   /   /    
0041260    w   o   r   k   i   n   g       s   t   o   r   a   g   e  \r
0041300   \t   P   S   v   e   c   =   0  \r  \t   /   /       v   a   r
0041320    i   o   u   s       p   a   r   a   m   e   t   e   r   s  \r
0041340   \t   d   e   f   a   u   l   t   P   S   t   y   p   e   =   B
0041360    s   p   l   i   n   e   3  \r  \t   P   S   c   o   e   f   N
0041400    u   m   s   =   0  \r  \t   P   S 376 001  \0     315   c   o
0041420    e   f   D   e   n   s   =   0  \r  \t   P   S   c   o   e   f
0041440    E   n   d   N   u   m   =   1  \r  \t   P   S   c   o   e   f
0041460    E   n   d   D   e   n   =   1  \r  \t   H   e   r   m   i   t
0041500    C   o   e   f   =   3  \r  \t   ]  \r  \r  \r  \r  \r   l   e
0041520    t       P   a   r   a   m   e   t   r   i   c   S   p   l   i
0041540    n   e   (   n   ,       p   x   ,       p   y   ,       p   1
0041560    x   ,       p   2   x   ,       p   3   x   ,       p   1   y
0041600    ,       p   2   y   ,       p   3   y   ,       e   n   d   C
0041620    o   n   d   i   t   i   o   n   ,       P   S   t   y   p   e
0041640    ;  \r   n   u   m   a   r   g   s       n   a   r   g   s   )
0041660        =       v   a   l   o   f       [  \r  \r  \t   /   /    
0041700    d   e   f   a   u   l   t       a   r   g   u   m   e   n   t
0041720    s   ,       g   e   t       s   t   o   r   a   g   e   ,    
0041740    c   h   e   c   k       v   a   r   i   o   u   s       t   h
0041760    i   n   g   s  \r  \t   l   e   t       t   e   m   p   V   e
0042000    c   =       v   e   c       l   P   S   V   E   C  \r 376 001
0042020   \0 255 241  \t   i   f       P   S   i   n   i   t   (   t   e
0042040    m   p   V   e   c   )       e   q       0       r   e   s   u
0042060    l   t   i   s       0  \r  \r  \r  \t   P   S   c   o   e   f
0042100    N   u   m   s   =       t   a   b   l   e       [       1   ;
0042120        1   ;       1   ;       1   ;       1   ;       1       ]
0042140   \r  \t   P   S   c   o   e   f   D   e   n   s   =       t   a
0042160    b   l   e       [       2   ;       6   ;       1   ;       2
0042200    ;       6   ;       2       ]  \r  \t   l   e   t       c   o
0042220    n   v   e   r   t   X   Y   =       n       l   s       0  \r
0042240   \t   i   f       c   o   n   v   e   r   t   X   Y       t   h
0042260    e   n       n   =   -   n  \r  \t   l   e   t       x   =   P
0042300    S   a   l   l   o   c   a   t   e   (   l   v   (   P   S   v
0042320    e   c   >   >   P   S   V   E   C   .   f   p   x   )   ,    
0042340    2   *   n   +   4   )  \r  \t   l   e   t       y   =   P   S
0042360    a   l   l   o   c   a   t   e   (   l   v   (   P   S   v   e
0042400    c   >   >   P   S   V   E   C   .   f   p   y   )   ,       2
0042420    *   n   + 376 001  \0 300 220   4   )  \r  \t   i   f       (
0042440    x       e   q       0   )       %       (   y       e   q    
0042460    0   )       r   e   s   u   l   t   i   s       0  \r  \r  \t
0042500    t   e   s   t       c   o   n   v   e   r   t   X   Y  \r  \t
0042520    i   f   s   o       [  \r  \t  \t   /   /       c   o   n   v
0042540    e   r   t       c   o   o   r   d   i   n   a   t   e   s    
0042560    f   r   o   m       i   n   t   e   g   e   r       t   o    
0042600    f   l   o   a   t   i   n   g       p   o   i   n   t  \r  \t
0042620   \t   f   o   r       i   =   0       t   o       n   -   1    
0042640    d   o       [  \r  \t  \t  \t   F   S   T   (   F   L   D   I
0042660    (   a   c   1   ,       x   !   i   )   ,       p   x   +   2
0042700    *   (   i   +   1   )   )  \r  \t  \t  \t   F   S   T   (   F
0042720    L   D   I   (   a   c   1   ,       y   !   i   )   ,       p
0042740    y   +   2   *   (   i   +   1   )   )  \r  \t  \t  \t   ]  \r
0042760   \t  \t   ]  \r  \t   i   f   n   o   t       [  \r  \t  \t   M
0043000    o   v   e   B   l   o   c   k   (   x   +   2   ,       p   x
0043020    ,       2   *   n   )  \r  \t 376 001  \0   y   P  \t   M   o
0043040    v   e   B   l   o   c   k   (   y   +   2   ,       p   y   ,
0043060        2   *   n   )  \r  \t  \t   ]  \r  \r  \t   s   w   i   t
0043100    c   h   o   n       n   a   r   g   s       i   n   t   o    
0043120    [  \r  \t  \t   c   a   s   e       9   :  \r  \t  \t  \t   e
0043140    n   d   C   o   n   d   i   t   i   o   n   =   n   a   t   u
0043160    r   a   l   S   p   l   i   n   e  \r  \t  \t   c   a   s   e
0043200        1   0   :  \r  \t  \t  \t   P   S   t   y   p   e   =   d
0043220    e   f   a   u   l   t   P   S   t   y   p   e  \r  \t  \t   c
0043240    a   s   e       1   1   :  \r  \t  \t  \t   i   f       e   n
0043260    d   C   o   n   d   i   t   i   o   n       n   e       n   a
0043300    t   u   r   a   l   S   p   l   i   n   e       &  \r  \t  \t
0043320   \t               e   n   d   C   o   n   d   i   t   i   o   n
0043340        n   e       p   e   r   i   o   d   i   c   S   p   l   i
0043360    n   e       r   e   s   u   l   t   i   s       P   S   q   u
0043400    i   t   (   P   S   e   r   r   o   r   (   3   )   )  \r  \t
0043420   \t  \t   i   f       n       l   s       3       t 376 001  \0
0043440  206 347   h   e   n       e   n   d   C   o   n   d   i   t   i
0043460    o   n   =   n   a   t   u   r   a   l   S   p   l   i   n   e
0043500   \r  \t  \t  \t   i   f       P   S   t   y   p   e       e   q
0043520        0       t   h   e   n       P   S   t   y   p   e   =   d
0043540    e   f   a   u   l   t   P   S   t   y   p   e  \r  \t  \t  \t
0043560    e   n   d   c   a   s   e  \r  \t  \t   d   e   f   a   u   l
0043600    t   :  \r  \t  \t  \t   r   e   s   u   l   t   i   s       P
0043620    S   q   u   i   t   (   P   S   e   r   r   o   r   (   4   )
0043640    )  \r  \t  \t   ]  \r  \r  \t   t   e   s   t       e   n   d
0043660    C   o   n   d   i   t   i   o   n       e   q       p   e   r
0043700    i   o   d   i   c   S   p   l   i   n   e  \r  \t   i   f   s
0043720    o       [  \r  \t  \t   i   f       (   (   F   C   M   (   F
0043740    L   D   (   a   c   1   ,       x   +   2   )   ,       x   +
0043760    2   *   n   )       n   e       0   )       %  \r  \t  \t    
0044000            (   F   C   M   (   F   L   D   (   a   c   2   ,    
0044020    y   +   2   )   ,       y   +   2   *   n   )       n   e    
0044040    0   ) 376 001  \0 300 021   )       r   e   s   u   l   t   i
0044060    s       P   S   q   u   i   t   (   P   S   e   r   r   o   r
0044100    (   2   )   )  \r  \t  \t   M   o   v   e   B   l   o   c   k
0044120    (   x   ,       x   +   2   *   (   n   -   1   )   ,       2
0044140    )  \r  \t  \t   M   o   v   e   B   l   o   c   k   (   y   ,
0044160        y   +   2   *   (   n   -   1   )   ,       2   )  \r  \t
0044200   \t   M   o   v   e   B   l   o   c   k   (   x   +   2   *   (
0044220    n   +   1   )   ,       x   +   4   ,       2   )  \r  \t  \t
0044240    M   o   v   e   B   l   o   c   k   (   y   +   2   *   (   n
0044260    +   1   )   ,       y   +   4   ,       2   )  \r  \t  \t   ]
0044300   \r  \t   i   f   n   o   t       [  \r  \t  \t   /   /       a
0044320    c   3   =   b   =   P   S   c   o   e   f   E   n   d   N   u
0044340    m   /   P   S   c   o   e   f   E   n   d   D   e   n  \r  \t
0044360   \t   F   D   V   (   F   L   D   I   (   a   c   3   ,       P
0044400    S   c   o   e   f   E   n   d   N   u   m   )   ,       F   L
0044420    D   I   (   a   c   2   ,       P   S   c   o   e   f   E   n
0044440    d   D   e   n   )   )  \r 376 001  \0 312   B  \t  \t   /   /
0044460        x   (   0   )   =   x   (   1   )   +   b   *   (   x   (
0044500    1   )   -   x   (   2   )   )  \r  \t  \t   F   S   T   (   F
0044520    A   D   (   F   M   L   (   F   S   B   (   F   L   D   (   a
0044540    c   1   ,       x   +   2   )   ,       x   +   4   )   ,    
0044560    a   c   3   )   ,       x   +   2   )   ,       x   )  \r  \t
0044600   \t   F   S   T   (   F   A   D   (   F   M   L   (   F   S   B
0044620    (   F   L   D   (   a   c   1   ,       y   +   2   )   ,    
0044640    y   +   4   )   ,       a   c   3   )   ,       y   +   2   )
0044660    ,       y   )  \r  \t  \t   /   /       x   (   n   +   1   )
0044700    =   x   (   n   )   +   b   *   (   x   (   n   )   -   x   (
0044720    n   -   1   )   )  \r  \t  \t   F   S   T   (   F   A   D   (
0044740    F   M   L   (   F   S   B   (   F   L   D   (   a   c   1   ,
0044760        x   +   2   *   n   )   ,       x   +   2   *   (   n   -
0045000    1   )   )   ,       a   c   3   )   ,       x   +   2   *   n
0045020    )   ,       x   +   2   *   (   n   +   1   )   )  \r  \t  \t
0045040    F   S   T   (   F   A   D   (   F   M   L   ( 376 001  \0 035
0045060    j   F   S   B   (   F   L   D   (   a   c   1   ,       y   +
0045100    2   *   n   )   ,       y   +   2   *   (   n   -   1   )   )
0045120    ,       a   c   3   )   ,       y   +   2   *   n   )   ,    
0045140    y   +   2   *   (   n   +   1   )   )  \r  \t  \t   ]  \r  \r
0045160   \t   l   e   t       a   =   P   S   a   l   l   o   c   a   t
0045200    e   (   l   v   (   P   S   v   e   c   >   >   P   S   V   E
0045220    C   .   a   )   ,       3   2   )  \r  \t   i   f       (   a
0045240        e   q       0   )       r   e   s   u   l   t   i   s    
0045260    0  \r  \t   Z   e   r   o   (   a   ,       3   2   )  \r  \t
0045300    l   e   t       c   =   n   i   l  \r  \t   l   e   t       s
0045320    a   v   e   X   Y   =   f   a   l   s   e  \r  \t   F   D   V
0045340    (   F   L   D   I   (   a   c   2   ,       P   S   c   o   e
0045360    f   N   u   m   s   !   (   P   S   t   y   p   e   -   1   )
0045400    )   ,       F   L   D   I   (   a   c   3   ,       P   S   c
0045420    o   e   f   D   e   n   s   !   (   P   S   t   y   p   e   -
0045440    1   )   )   )  \r  \t   t   e   s   t       P   S   t   y   p
0045460    e 376 001  \0 215   k       e   q       C   a   t   m   u   l
0045500    l   R   o   m  \r  \t   i   f   n   o   t       [  \r  \t  \t
0045520    s   w   i   t   c   h   o   n       P   S   t   y   p   e    
0045540    i   n   t   o       [  \r  \t  \t   c   a   s   e       F   o
0045560    u   r   P   o   i   n   t   s   :  \r  \t  \t  \t   c   =   t
0045600    a   b   l   e       [  \r  \t  \t  \t  \t   -   1   ;        
0045620    3   ;       -   3   ;           1   ;  \r  \t  \t  \t  \t    
0045640    3   ;       -   6   ;           3   ;           0   ;  \r  \t
0045660   \t  \t  \t   -   2   ;       -   3   ;           6   ;       -
0045700    1   ;  \r  \t  \t  \t  \t       0   ;           6   ;        
0045720    0   ;           0       ]  \r  \t  \t  \t   e   n   d   c   a
0045740    s   e  \r  \t  \t   c   a   s   e       B   s   p   l   i   n
0045760    e   1   :  \r  \t  \t  \t   c   =   t   a   b   l   e       [
0046000   \r  \t  \t  \t  \t       0   ;           0   ;           0   ;
0046020            0   ;  \r  \t  \t  \t  \t       0   ;           0   ;
0046040            0   ;           0   ;  \r  \t  \t  \t  \t       0   ;
0046060        -   1   ;         376 001  \0 314 351   1   ;           0
0046100    ;  \r  \t  \t  \t  \t       0   ;           1   ;           0
0046120    ;           0       ]  \r  \t  \t  \t   e   n   d   c   a   s
0046140    e  \r  \t  \t   c   a   s   e       B   s   p   l   i   n   e
0046160    2   :  \r  \t  \t  \t   c   =   t   a   b   l   e       [  \r
0046200   \t  \t  \t  \t       0   ;           0   ;           0   ;    
0046220        0   ;  \r  \t  \t  \t  \t       1   ;       -   2   ;    
0046240        1   ;           0   ;  \r  \t  \t  \t  \t   -   2   ;    
0046260        2   ;           0   ;           0   ;  \r  \t  \t  \t  \t
0046300        1   ;           1   ;           0   ;           0       ]
0046320   \r  \t  \t  \t   s   a   v   e   X   Y   =   t   r   u   e  \r
0046340   \t  \t  \t   e   n   d   c   a   s   e  \r  \t  \t   c   a   s
0046360    e       B   s   p   l   i   n   e   3   :  \r  \t  \t  \t   c
0046400    =   t   a   b   l   e       [  \r  \t  \t  \t  \t   -   1   ;
0046420            3   ;       -   3   ;           1   ;  \r  \t  \t  \t
0046440   \t       3   ;       -   6   ;           3   ;           0   ;
0046460   \r  \t  \t  \t  \t   -   3   ;           0 376 001  \0   { 350
0046500    ;           3   ;           0   ;  \r  \t  \t  \t  \t       1
0046520    ;           4   ;           1   ;           0       ]  \r  \t
0046540   \t  \t   s   a   v   e   X   Y   =   t   r   u   e  \r  \t  \t
0046560   \t   e   n   d   c   a   s   e  \r  \t  \t   c   a   s   e    
0046600    H   e   r   m   i   t   :  \r  \t  \t  \t   c   =   t   a   b
0046620    l   e       [  \r  \t  \t  \t  \t       0   ;           0   ;
0046640            0   ;           0   ;  \r  \t  \t  \t  \t       0   ;
0046660            0   ;           0   ;           0   ;  \r  \t  \t  \t
0046700   \t       0   ;           0   ;           0   ;           0   ;
0046720   \r  \t  \t  \t  \t       1   ;           1   ;           0   ;
0046740            0       ]  \r  \t  \t  \t   c   !   0   =   2   -   H
0046760    e   r   m   i   t   C   o   e   f  \r  \t  \t  \t   c   !   2
0047000    =   H   e   r   m   i   t   C   o   e   f   -   2  \r  \t  \t
0047020   \t   c   !   4   =   2   *   H   e   r   m   i   t   C   o   e
0047040    f   -   3  \r  \t  \t  \t   c   !   5   =   -   H   e   r   m
0047060    i   t   C   o   e   f  \r  \t  \t  \t   c   !   6   =   3   -
0047100  376 001  \0 371  \r   H   e   r   m   i   t   C   o   e   f  \r
0047120   \t  \t  \t   c   !   8   =   -   H   e   r   m   i   t   C   o
0047140    e   f  \r  \t  \t  \t   c   !   9   =   H   e   r   m   i   t
0047160    C   o   e   f  \r  \t  \t  \t   s   a   v   e   X   Y   =   t
0047200    r   u   e  \r  \t  \t  \t   e   n   d   c   a   s   e  \r  \t
0047220   \t  \t   ]  \r  \t  \t   f   o   r       i   =   0       t   o
0047240        1   5       d   o       [  \r  \t  \t  \t   F   S   T   (
0047260    F   M   L   (   F   L   D   I   (   a   c   1   ,       c   !
0047300    i   )   ,       a   c   2   )   ,       a   +   2   *   i   )
0047320   \r  \t  \t  \t   ]  \r  \t  \t   ]  \r  \t   i   f   s   o    
0047340    [  \r  \t  \t   /   /       c   a   s   e       C   a   t   m
0047360    u   l   l   R   o   m   :  \r  \t  \t   F   S   T   (   F   S
0047400    T   (   a   c   2   ,       a   +   6   )   ,       a   +   2
0047420    0   )  \r  \t  \t   F   S   T   (   F   S   T   (   F   S   T
0047440    (   F   N   E   G   (   F   L   D   (   a   c   1   ,       a
0047460    c   2   )   )   ,       a   )   ,       a   +   1   4   )   ,
0047500        a   +   1   6 376 001  \0 346 253   )  \r  \t  \t   F   S
0047520    T   (   F   N   E   G   (   F   S   T   (   F   S   B   (   F
0047540    L   D   I   (   a   c   1   ,       2   )   ,       a   c   2
0047560    )   ,       a   +   2   )   )   ,       a   +   4   )  \r  \t
0047600   \t   F   S   T   (   F   N   E   G   (   F   S   B   (   F   L
0047620    D   I   (   a   c   1   ,       3   )   ,       a   c   2   )
0047640    )   ,       a   +   1   0   )  \r  \t  \t   F   S   T   (   F
0047660    S   B   (   F   L   D   I   (   a   c   1   ,       3   )   ,
0047700        F   S   T   (   F   A   D   (   a   c   2   ,       a   c
0047720    2   )   ,       a   +   8   )   )   ,       a   +   1   2   )
0047740   \r  \t  \t   F   S   T   (   o   n   e   ,       a   +   2   6
0047760    )  \r  \t  \t   ]  \r  \t   f   o   r       i   =   0       t
0050000    o       3       d   o       [  \r  \t  \t   F   S   T   (   F
0050020    M   L   (   F   L   D   (   a   c   1   ,       a   +   2   *
0050040    i   )   ,       s   i   x   )   ,       a   +   2   *   i   )
0050060   \r  \t  \t   F   S   T   (   F   M   L   (   F   L   D   (   a
0050100    c   1   ,       a   +   2   *   (   i 376 001  \0 206 255   +
0050120    4   )   )   ,       t   w   o   )   ,       a   +   2   *   (
0050140    i   +   4   )   )  \r  \t  \t   ]  \r  \r  \t   /   /   d   o
0050160        e   v   e   r   y   t   h   i   n   g       t   w   i   c
0050200    e       t   o       g   e   t       x   (   t   )       a   n
0050220    d       y   (   t   )   .  \r  \t   l   e   t       p   1   ,
0050240    p   2   ,   p   3   ,   p   ,   s   =   n   i   l   ,   n   i
0050260    l   ,   n   i   l   ,   n   i   l   ,   n   i   l  \r  \t   f
0050300    o   r       t   =   1       t   o       2       d   o       [
0050320   \r  \t  \t   t   e   s   t       (   t       e   q       1   )
0050340   \r  \t  \t               i   f   s   o       [       s   =   p
0050360    x   ;       p   =   x   ;       p   1   =   p   1   x   ;    
0050400    p   2   =   p   2   x   ;       p   3   =   p   3   x       ]
0050420   \r  \t  \t               i   f   n   o   t       [       s   =
0050440    p   y   ;       p   =   y   ;       p   1   =   p   1   y   ;
0050460        p   2   =   p   2   y   ;       p   3   =   p   3   y    
0050500    ]  \r  \t  \t   f   o   r       i   =   0       t   o     376
0050520  001  \0   d   ^   n   -   1       d   o       [  \r  \t  \t  \t
0050540    F   L   D   I   (   a   c   1   ,       0   )   ;       F   L
0050560    D   I   (   a   c   2   ,       0   )  \r  \t  \t  \t   F   L
0050600    D   I   (   a   c   3   ,       0   )   ;       F   L   D   I
0050620    (   a   c   4   ,       0   )      \r  \t  \t  \t   f   o   r
0050640        j   =   0       t   o       3       d   o       [  \r  \t
0050660   \t  \t  \t   F   A   D   (   a   c   4   ,       F   M   L   (
0050700    F   L   D   (   a   c   0   ,       a   +   2   *   j   )   ,
0050720        p   +   2   *   j   )   )  \r  \t  \t  \t  \t   F   A   D
0050740    (   a   c   3   ,       F   M   L   (   F   L   D   (   a   c
0050760    0   ,       a   +   2   *   (   j   +   4   )   )   ,       p
0051000    +   2   *   j   )   )  \r  \t  \t  \t  \t   F   A   D   (   a
0051020    c   2   ,       F   M   L   (   F   L   D   (   a   c   0   ,
0051040        a   +   2   *   (   j   +   8   )   )   ,       p   +   2
0051060    *   j   )   )  \r  \t  \t  \t  \t   F   A   D   (   a   c   1
0051100    ,       F   M   L   (   F   L   D   (   a   c   0   ,       a
0051120    +   2   *   ( 376 001  \0 276 301   j   +   1   2   )   )   ,
0051140        p   +   2   *   j   )   )  \r  \t  \t  \t  \t   ]      \r
0051160   \t  \t  \t   F   S   T   (   a   c   4   ,       p   3   +   2
0051200    *   i   )  \r  \t  \t  \t   F   S   T   (   a   c   3   ,    
0051220    p   2   +   2   *   i   )  \r  \t  \t  \t   F   S   T   (   a
0051240    c   2   ,       p   1   +   2   *   i   )  \r  \t  \t  \t   i
0051260    f       s   a   v   e   X   Y       t   h   e   n       t   e
0051300    s   t       c   o   n   v   e   r   t   X   Y  \r  \t  \t  \t
0051320   \t   i   f   s   o       s   !   i   =   F   T   R   (   a   c
0051340    1   )  \r  \t  \t  \t  \t   i   f   n   o   t       F   S   T
0051360    (   a   c   1   ,       s   +   2   *   i   )      \r  \t  \t
0051400   \t   p   =   p   +   2  \r  \t  \t  \t   ]  \r  \t  \t   ]  \r
0051420   \t   r   e   s   u   l   t   i   s       P   S   q   u   i   t
0051440    (   t   r   u   e   )  \r  \t   ]  \r  \r  \r   a   n   d    
0051460    P   S   i   n   i   t   (   p   s   v   )       =       v   a
0051500    l   o   f       [  \r  \t   i   f       P   S   z   o   n   e
0051520        e   q       0       r   e   s 376 001  \0   9 367   u   l
0051540    t   i   s       P   S   e   r   r   o   r   (   0   )  \r  \t
0051560    P   S   v   e   c   =   p   s   v  \r  \t   Z   e   r   o   (
0051600    P   S   v   e   c   ,       l   P   S   V   E   C   )  \r  \t
0051620    /   /       n   e   w       f   l   o   a   t   i   n   g    
0051640    p   o   i   n   t       w   o   r   k       a   r   e   a  \r
0051660   \t   l   e   t       F   P   w   o   r   k   N   e   w   =    
0051700    A   l   l   o   c   a   t   e   (   P   S   z   o   n   e   ,
0051720        4   *   n   u   m   F   P   a   c   s   +   1   )  \r  \t
0051740    i   f       F   P   w   o   r   k   N   e   w       e   q    
0051760    0       r   e   s   u   l   t   i   s       P   S   e   r   r
0052000    o   r   (   1   )  \r  \t   P   S   v   e   c   >   >   P   S
0052020    V   E   C   .   F   P   w   o   r   k   S   a   v   e   =   F
0052040    P   w   o   r   k  \r  \t   P   S   v   e   c   >   >   P   S
0052060    V   E   C   .   F   P   w   o   r   k   N   e   w   =   F   P
0052100    w   o   r   k   N   e   w  \r  \t   F   P   w   o   r   k   N
0052120    e   w   !   0   =   n   u   m   F   P   a   c   s  \r 376 001
0052140   \0 273   =  \t   F   P   S   e   t   u   p   (   F   P   w   o
0052160    r   k   N   e   w   )  \r  \t   F   L   D   I   (   z   e   r
0052200    o   ,   0   )   ;       F   L   D   I   (   o   n   e   ,    
0052220    1   )   ;       F   L   D   I   (   t   w   o   ,   2   )   ;
0052240        F   L   D   I   (   s   i   x   ,   6   )  \r  \t   r   e
0052260    s   u   l   t   i   s       t   r   u   e  \r  \t   ]  \r  \r
0052300   \r  \r   a   n   d       P   S   a   l   l   o   c   a   t   e
0052320    (   l   o   c   a   t   i   o   n   ,       m   )       =    
0052340    v   a   l   o   f       [  \r  \t   l   e   t       b   =   A
0052360    l   l   o   c   a   t   e   (   P   S   z   o   n   e   ,    
0052400    m   )  \r  \t   i   f       b       e   q       0       r   e
0052420    s   u   l   t   i   s       P   S   q   u   i   t   (   P   S
0052440    e   r   r   o   r   (   1   )   )  \r  \t   @   l   o   c   a
0052460    t   i   o   n   =   b  \r  \t   r   e   s   u   l   t   i   s
0052500        b  \r  \t   ]  \r  \r  \r  \r   a   n   d       P   S   e
0052520    r   r   o   r   (   e   r   r   o   r   C   o   d   e   ,   a
0052540    1   ,   a 376 001  \0 212 275   2   ,   a   3   ,   a   4   )
0052560        =       v   a   l   o   f       [  \r  \t   (   t   a   b
0052600    l   e   [   #   7   7   4   0   3   ;       #   1   4   0   1
0052620    ]   )       (   "   P   S   .   E   R   R   O   R   S   "   ,
0052640        l   v       e   r   r   o   r   C   o   d   e   )  \r  \t
0052660    r   e   s   u   l   t   i   s       0  \r  \t   ]  \r  \r  \r
0052700    a   n   d       P   S   q   u   i   t   (   r   e   s   u   l
0052720    t   )       =       v   a   l   o   f       [  \r  \t   i   f
0052740        P   S   v   e   c       e   q       0       r   e   s   u
0052760    l   t   i   s       r   e   s   u   l   t  \r  \t   F   P   S
0053000    e   t   u   p   (   P   S   v   e   c   >   >   P   S   V   E
0053020    C   .   F   P   w   o   r   k   S   a   v   e   )  \r  \t   P
0053040    S   v   e   c   >   >   P   S   V   E   C   .   F   P   w   o
0053060    r   k   S   a   v   e   =   0  \r  \t   f   o   r       i   =
0053100    0       t   o       l   P   S   V   E   C   -   1       d   o
0053120        i   f       P   S   v   e   c   !   i       n   e       0
0053140        t   h   e   n       F   r 376  \0   3   ' 206   e   e   (
0053160    P   S   z   o   n   e   ,       P   S   v   e   c   !   i   )
0053200   \r  \t   P   S   v   e   c   =   0  \r  \t   r   e   s   u   l
0053220    t   i   s       r   e   s   u   l   t  \r  \t   ]  \r  \r  \r
0053240  377  \0  \0   D   R   A   W   S   P   L   I   N   E   .   B   C
0053260    P   L  \0 376 001  \0   K   %   /   /       D   e   c   e   m
0053300    b   e   r       1   9   ,       1   9   7   7           1   1
0053320    :   1   5       A   M  \r  \r  \r   /   /       o   u   t   g
0053340    o   i   n   g       p   r   o   c   e   d   u   r   e   s   :
0053360   \r  \r   e   x   t   e   r   n   a   l       [  \r  \t   I   n
0053400    i   t   S   p   l   i   n   e  \r  \t   D   e   f   i   n   e
0053420    A   r   e   a  \r  \t   G   e   t   B   r   u   s   h  \r  \t
0053440    D   r   a   w   S   p   l   i   n   e  \r  \t   ]  \r        
0053460   \r  \r   /   /       o   u   t   g   o   i   n   g       s   t
0053500    a   t   i   c   s   :  \r  \r  \r  \r   /   /       i   n   c
0053520    o   m   i   n   g       p   r   o   c   e   d   u   r   e   s
0053540    :  \r  \r   e   x   t   e   r   n   a   l       [  \r  \t   M
0053560    o   v   e   B   l   o   c   k  \t  \t   /   /       S   Y   S
0053600    T   E   M  \r  \t   S   e   t   B   l   o   c   k  \r  \t   Z
0053620    e   r   o  \r  \t   A   l   l   o   c   a   t   e  \r  \t   F
0053640    r   e   e  \r  \r  \t   P   a   r   a   m   e   t   r   i   c
0053660    S   p   l   i   n   e  \t   / 376 001  \0   E 002   /       S
0053700    P   L   I   N   E   1       o   r       S   P   L   I   N   E
0053720    2       o   r       S   P   L   I   N   E   3  \r  \r  \t   F
0053740    L   D   ;       F   S   T   ;       F   T   R   ;       F   L
0053760    D   I  \t   /   /       m   i   c   r   o   F   L   O   A   T
0054000   \r  \t   F   N   E   G   ;       F   A   D   ;       F   S   B
0054020    ;       F   M   L  \r  \t   F   D   V   ;       F   C   M   ;
0054040        F   S   N  \r  \t   F   S   T   D   P   ;       F   L   D
0054060    D   P  \r  \t   D   P   A   D   ;       D   P   S   B  \r  \t
0054100    F   P   S   e   t   u   p  \r  \r  \t   L   o   a   d   P   a
0054120    c   k   e   d   R   A   M  \t  \t   /   /       R   E   A   D
0054140    P   R   A   M  \r  \t  \r  \t   M   i   c   r   o   F   l   o
0054160    a   t   R   a   m   I   m   a   g   e  \t   /   /       m   i
0054200    c   r   o   F   L   O   A   T   M   C  \r  \t   ]  \r  \r  \r
0054220    /   /       i   n   c   o   m   i   n   g       s   t   a   t
0054240    i   c   s   :  \r  \r   e   x   t   e   r   n   a   l       [
0054260   \r  \t   s   y   s   Z   o   n   e  \t  \t  \t   / 376 001  \0
0054300  030 200   /       S   Y   S   T   E   M  \r  \r  \t   P   S   z
0054320    o   n   e  \t  \t  \t   /   /       S   P   L   I   N   E   1
0054340        o   r       S   P   L   I   N   E   2       o   r       S
0054360    P   L   I   N   E   3  \r  \r  \t   F   P   w   o   r   k  \t
0054400   \t  \t   /   /       m   i   c   r   o   F   L   O   A   T  \r
0054420   \t   ]  \r  \r  \r   /   /       l   o   c   a   l       s   t
0054440    a   t   i   c   s   :  \r  \r   s   t   a   t   i   c       [
0054460   \r  \t   D   S   n   o   S   p   a   c   e   =   0  \r  \t   /
0054500    /       c   u   r   r   e   n   t       &       n   e   x   t
0054520        c   o   m   p   u   t   e   d       p   o   i   n   t   s
0054540   \r  \t   D   S   v   e   c  \r  \t   D   S   c   u   r   X  \r
0054560   \t   D   S   c   u   r   Y  \r  \t   D   S   n   e   w   X  \r
0054600   \t   D   S   n   e   w   Y  \r  \t   /   /       c   l   i   p
0054620    p   i   n   g       l   i   m   i   t   s  \r  \t   D   S   m
0054640    i   n   X  \r  \t   D   S   m   a   x   X  \r  \t   D   S   m
0054660    i   n   Y  \r  \t   D   S   m   a   x   Y  \r  \t   D   S   b
0054700    m   h 376 001  \0 324 245  \r  \t   /   /       b   r   u   s
0054720    h       h   e   i   g   h   t       (   b   r   u   s   h    
0054740    w   i   d   t   h       D   S   b   w       i   s       a    
0054760    c   o   n   s   t   a   n   t   )  \r  \t   D   S   b   h  \r
0055000   \t   /   /       s   p   l   i   n   e       c   o   m   p   u
0055020    t   a   t   i   o   n       p   a   r   a   m   e   t   e   r
0055040    s  \r  \t   D   S   c   o   m   p   u   t   e   R   a   n   g
0055060    e   =   6   4  \r  \t   D   S   n   u   m   R   a   t   e   =
0055100    3  \r  \t   D   S   d   e   n   R   a   t   e   =   2  \r  \t
0055120    D   S   b   b   c   =   0  \r  \t   ]  \r  \r  \r   /   /    
0055140    l   o   c   a   l       d   e   f   i   n   i   t   i   o   n
0055160    s  \r  \r   m   a   n   i   f   e   s   t       D   S   b   w
0055200    =   1   6  \r  \r   s   t   r   u   c   t   u   r   e       B
0055220    B   C       [  \r  \t   f   u   n   c   t   i   o   n       w
0055240    o   r   d  \r  \t   s   p   a   r   e       w   o   r   d  \r
0055260   \t   D   B   C   A       w   o   r   d  \r  \t   D   B   M   R
0055300        w   o   r   d  \r  \t 376 001  \0 237 353   D   L   X    
0055320    w   o   r   d  \r  \t   D   T   Y       w   o   r   d  \r  \t
0055340    D   W       w   o   r   d  \r  \t   D   H       w   o   r   d
0055360   \r  \t   S   B   C   A       w   o   r   d  \r  \t   S   B   M
0055400    R       w   o   r   d  \r  \t   S   L   X       w   o   r   d
0055420   \r  \t   S   T   Y       w   o   r   d  \r  \t   g   r   a   y
0055440    ^   0   ,   3       w   o   r   d  \r  \t   ]  \r  \r   m   a
0055460    n   i   f   e   s   t       [  \r  \t   l   B   B   C   =    
0055500    s   i   z   e       B   B   C   /   1   6  \r  \r  \t   B   B
0055520    C   r   e   p   l   a   c   e   =   0  \r  \t   B   B   C   p
0055540    a   i   n   t   =   1  \r  \t   B   B   C   i   n   v   e   r
0055560    t   =   2  \r  \t   B   B   C   e   r   a   s   e   =   3  \r
0055600   \r  \t   B   B   S   b   i   t   m   a   p   =   0  \r  \t   B
0055620    B   S   n   e   g   B   i   t   m   a   p   =   4  \r  \t   B
0055640    B   S   b   r   u   s   h   =   8  \r  \t   B   B   S   g   r
0055660    a   y   =       1   2  \r  \t   ]  \r  \r   s   t   r   u   c
0055700    t   u   r   e       A   R   E   A       [  \r 376 001  \0 241
0055720  216  \t   @   B   B   C  \r  \t   m   i   n   X       w   o   r
0055740    d  \t  \t   /   /       a   l   l       c   o   o   r   d   i
0055760    n   a   t   e   s       r   e   l   a   t   i   v   e       t
0056000    o       b   i   t   m   a   p  \r  \t   m   a   x   X       w
0056020    o   r   d  \r  \t   m   i   n   Y       w   o   r   d  \r  \t
0056040    m   a   x   Y       w   o   r   d  \r  \t   X   0       w   o
0056060    r   d  \t  \t  \t   /   /       b   i   t   m   a   p       c
0056100    o   o   r   d   i   n   a   t   e       o   f   f   s   e   t
0056120   \r  \t   Y   0       w   o   r   d  \r  \t   b   m   H   e   i
0056140    g   h   t       w   o   r   d  \r  \t   ]  \r  \r   m   a   n
0056160    i   f   e   s   t       l   A   R   E   A   =       s   i   z
0056200    e       A   R   E   A   /   1   6  \r  \r   s   t   r   u   c
0056220    t   u   r   e       D   S   V   E   C       [  \r  \t   x   T
0056240    a   b   l   e       w   o   r   d  \r  \t   y   T   a   b   l
0056260    e       w   o   r   d  \r  \t   d   T   a   b   l   e       w
0056300    o   r   d  \r  \t   F   P   w   o   r   k   S   a   v   e    
0056320    w 376 001  \0 030 226   o   r   d  \r  \t   F   P   w   o   r
0056340    k   N   e   w       w   o   r   d  \r  \t   ]  \r  \r   m   a
0056360    n   i   f   e   s   t       l   D   S   V   E   C   =       s
0056400    i   z   e       D   S   V   E   C   /   1   6  \r  \r  \r   /
0056420    /  \t       f   l   o   a   t   i   n   g       p   o   i   n
0056440    t       r   e   g   i   s   t   e   r   s   :  \r   m   a   n
0056460    i   f   e   s   t       [  \r  \t   /   /       s   h   a   r
0056500    e   d       b   y       D   r   a   w   S   p   l   i   n   e
0056520        &       D   r   a   w   P   o   i   n   t  \r  \t   t   0
0056540    =   0   ;       t   1   =   1   ;       t   2   =   2   ;    
0056560    t   3   =   3  \r  \t   /   /       u   s   e   d       b   y
0056600        D   r   a   w   S   p   l   i   n   e       o   n   l   y
0056620   \r  \t   X   =   8   ;       Y   =   9  \r  \t   d   1   X   =
0056640    1   0   ;       d   2   X   =   1   1   ;       d   3   X   =
0056660    1   2  \r  \t   d   1   Y   =   1   3   ;       d   2   Y   =
0056700    1   4   ;       d   3   Y   =   1   5  \r  \r  \t   n   u   m
0056720    F   P   a   c   s   = 376 001  \0 303 023   1   6  \r  \t   ]
0056740   \r  \f  \r   l   e   t       I   n   i   t   S   p   l   i   n
0056760    e   (   z   o   n   e   ;       n   u   m   a   r   g   s    
0057000    n   a   r   g   s   )       b   e       [  \r  \t   P   S   z
0057020    o   n   e   =   (   (   n   a   r   g   s       n   e       1
0057040    )       %       (   z   o   n   e       e   q       0   )   )
0057060        ?       s   y   s   Z   o   n   e   ,       z   o   n   e
0057100   \r  \t   L   o   a   d   P   a   c   k   e   d   R   A   M   (
0057120    M   i   c   r   o   F   l   o   a   t   R   a   m   I   m   a
0057140    g   e   )  \r  \t   l   e   t       F   P   a   c   s   =   A
0057160    l   l   o   c   a   t   e   (   P   S   z   o   n   e   ,    
0057200    3   2   *   4   +   1   ,       l   v       D   S   n   o   S
0057220    p   a   c   e   )  \r  \t   i   f       F   P   a   c   s    
0057240    e   q       0       r   e   t   u   r   n  \r  \t   F   P   a
0057260    c   s   !   0   =   3   2  \r  \t   F   P   S   e   t   u   p
0057300    (   F   P   a   c   s   )  \r  \t   ]  \r  \r  \r  \r   a   n
0057320    d       D   e   f   i   n   e   A   r   e 376 001  \0   7   w
0057340    a   (   b   i   t   m   a   p   ,       w   o   r   d   W   i
0057360    d   t   h   ,       s   c   a   n   C   o   u   n   t   ,    
0057400    X   w   ,       Y   w   ,  \r  \t   X   l   e   f   t   ,    
0057420    Y   b   o   t   t   o   m   ,       w   i   d   t   h   ,    
0057440    h   e   i   g   h   t   ;       n   u   m   a   r   g   s    
0057460    n   a   r   g   s   )       =       v   a   l   o   f       [
0057500    D   e   f   i   n   e   A   r   e   a  \r  \t   s   w   i   t
0057520    c   h   o   n       n   a   r   g   s       i   n   t   o    
0057540    [  \r  \t  \t   c   a   s   e       1   :  \r  \t  \t   c   a
0057560    s   e       2   :  \r  \t  \t  \t   r   e   s   u   l   t   i
0057600    s       0  \r  \t  \t   c   a   s   e       3   :  \r  \t  \t
0057620   \t   X   w   =   0  \r  \t  \t   c   a   s   e       4   :  \r
0057640   \t  \t  \t   Y   w   =   0  \r  \t  \t   c   a   s   e       5
0057660    :  \r  \t  \t  \t   X   l   e   f   t   =   0  \r  \t  \t   c
0057700    a   s   e       6   :  \r  \t  \t  \t   Y   b   o   t   t   o
0057720    m   =   0  \r  \t  \t   c   a   s   e       7   :  \r  \t  \t
0057740  376 001  \0 276 204  \t   w   i   d   t   h   =   0  \r  \t  \t
0057760    c   a   s   e       8   :  \r  \t  \t  \t   h   e   i   g   h
0060000    t   =   0  \r  \t  \t   ]  \r  \t   i   f       P   S   z   o
0060020    n   e       e   q       0       r   e   s   u   l   t   i   s
0060040        0  \r  \t   /   /       e   v   e   n       a   d   d   r
0060060    e   s   s       f   o   r       B   B   C       b   l   o   c
0060100    k  \r  \t   l   e   t       a   r   e   a   =   A   l   l   o
0060120    c   a   t   e   (   P   S   z   o   n   e   ,       l   A   R
0060140    E   A   ,       l   v       D   S   n   o   S   p   a   c   e
0060160    ,       -   1   )  \r  \t   i   f       a   r   e   a       e
0060200    q       0       r   e   s   u   l   t   i   s       0  \r  \t
0060220    Z   e   r   o   (   a   r   e   a   ,       l   A   R   E   A
0060240    )  \r  \t  \r  \t   i   f       w   i   d   t   h       l   e
0060260        0       t   h   e   n       w   i   d   t   h   =   1   6
0060300    *   w   o   r   d   W   i   d   t   h  \r  \t   i   f       h
0060320    e   i   g   h   t       l   e       0       t   h   e   n    
0060340    h   e   i   g   h 376 001  \0 002   |   t   =   s   c   a   n
0060360    C   o   u   n   t  \r  \t   i   f       X   w       l   s    
0060400    0       t   h   e   n       X   w   =   0  \r  \t   i   f    
0060420    Y   w       l   s       0       t   h   e   n       Y   w   =
0060440    0  \r  \t   l   e   t       X   r   i   g   h   t   =   X   w
0060460    +   w   i   d   t   h   -   1  \r  \t   l   e   t       Y   t
0060500    o   p   =   Y   w   +   h   e   i   g   h   t   -   1  \r  \t
0060520    i   f       X   r   i   g   h   t       g   e       1   6   *
0060540    w   o   r   d   W   i   d   t   h       t   h   e   n       X
0060560    r   i   g   h   t   =   1   6   *   w   o   r   d   W   i   d
0060600    t   h   -   1  \r  \t   i   f       Y   t   o   p       g   e
0060620        h   e   i   g   h   t       t   h   e   n       Y   t   o
0060640    p   =   h   e   i   g   h   t   -   1  \r  \t   a   r   e   a
0060660    >   >   A   R   E   A   .   S   B   M   R   =   1  \r  \t   a
0060700    r   e   a   >   >   A   R   E   A   .   D   B   C   A   =   b
0060720    i   t   m   a   p  \r  \t   a   r   e   a   >   >   A   R   E
0060740    A   .   D   B   M   R   =   w   o   r 376 001  \0 206   ^   d
0060760    W   i   d   t   h  \r  \t   a   r   e   a   >   >   A   R   E
0061000    A   .   X   0   =   X   l   e   f   t   -   X   w  \r  \t   a
0061020    r   e   a   >   >   A   R   E   A   .   Y   0   =   Y   b   o
0061040    t   t   o   m   -   Y   w  \r  \t   a   r   e   a   >   >   A
0061060    R   E   A   .   m   i   n   X   =   X   w  \r  \t   a   r   e
0061100    a   >   >   A   R   E   A   .   m   a   x   X   =   X   r   i
0061120    g   h   t  \r  \t   a   r   e   a   >   >   A   R   E   A   .
0061140    m   i   n   Y   =   Y   w  \r  \t   a   r   e   a   >   >   A
0061160    R   E   A   .   m   a   x   Y   =   Y   t   o   p  \r  \t   a
0061200    r   e   a   >   >   A   R   E   A   .   b   m   H   e   i   g
0061220    h   t   =   s   c   a   n   C   o   u   n   t   -   1  \r  \t
0061240    r   e   s   u   l   t   i   s       a   r   e   a  \r  \t   ]
0061260    D   e   f   i   n   e   A   r   e   a  \r  \r  \r  \r   a   n
0061300    d       D   r   a   w   S   p   l   i   n   e   (   a   r   e
0061320    a   ,       n   ,       k   X   T   a   b   l   e   ,       k
0061340    Y   T   a   b   l   e   ,       b   r   u   s   h   ,     376
0061360  001  \0   V 245   d   r   a   w   M   o   d   e   ,       c   y
0061400    c   l   i   c   ;       n   u   m   a   r   g   s       n   a
0061420    r   g   s   )       =       v   a   l   o   f       [   D   r
0061440    a   w   S   p   l   i   n   e  \r  \t   /   /   r   e   t   u
0061460    r   n   s       0       i   f       i   t       d   o   e   s
0061500        n   o   t       w   o   r   k   ,       e   l   s   e    
0061520    |   n   |  \r  \r  \t   s   w   i   t   c   h   o   n       n
0061540    a   r   g   s       i   n   t   o       [  \r  \t  \t   c   a
0061560    s   e       4   :  \r  \t  \t  \t   b   r   u   s   h   =   0
0061600   \r  \t  \t   c   a   s   e       5   :  \r  \t  \t  \t   d   r
0061620    a   w   M   o   d   e   =   1  \t  \t   /   /       p   a   i
0061640    n   t  \r  \t  \t   c   a   s   e       6   :  \r  \t  \t  \t
0061660    c   y   c   l   i   c   =   f   a   l   s   e  \r  \t  \t   ]
0061700   \r  \r  \t   i   f       (   n   a   r   g   s       l   s    
0061720    3   )       %       (   a   r   e   a       e   q       0   )
0061740        %       (   P   S   z   o   n   e       e   q       0   )
0061760        r   e   s 376 001  \0   # 031   u   l   t   i   s       0
0062000   \r  \t   i   f       b   r   u   s   h       e   q       0    
0062020    t   h   e   n       b   r   u   s   h   =   G   e   t   B   r
0062040    u   s   h   (   0   ,       0   )  \r  \r  \t   l   e   t    
0062060    v   =   v   e   c       l   D   S   V   E   C  \r  \t   D   S
0062100    v   e   c   =   v  \r  \t   Z   e   r   o   (   D   S   v   e
0062120    c   ,       l   D   S   V   E   C   )  \r  \r  \t   l   e   t
0062140        F   P   w   o   r   k   N   e   w   =   A   l   l   o   c
0062160    a   t   e   (   P   S   z   o   n   e   ,       4   *   n   u
0062200    m   F   P   a   c   s   +   1   ,       l   v       D   S   n
0062220    o   S   p   a   c   e   )  \r  \t   i   f       F   P   w   o
0062240    r   k   N   e   w       e   q       0       r   e   s   u   l
0062260    t   i   s       Q   u   i   t   D   r   a   w   S   p   l   i
0062300    n   e   (   0   )  \r  \t   F   P   w   o   r   k   N   e   w
0062320    !   0   =   n   u   m   F   P   a   c   s  \r  \t   D   S   v
0062340    e   c   >   >   D   S   V   E   C   .   F   P   w   o   r   k
0062360    N   e   w   =   F   P   w   o   r 376 001  \0 342   o   k   N
0062400    e   w  \r  \t   D   S   v   e   c   >   >   D   S   V   E   C
0062420    .   F   P   w   o   r   k   S   a   v   e   =   F   P   w   o
0062440    r   k  \r  \t   F   P   S   e   t   u   p   (   F   P   w   o
0062460    r   k   N   e   w   )  \r  \r  \t   l   e   t       x   T   a
0062500    b   l   e   ,       y   T   a   b   l   e   =       0   ,   0
0062520   \r  \t   l   e   t       f   p   X   0   =   v   e   c       2
0062540   \r  \t   l   e   t       f   p   Y   0   =   v   e   c       2
0062560   \r  \t   l   e   t       X   0   =   a   r   e   a   >   >   A
0062600    R   E   A   .   X   0  \r  \t   l   e   t       Y   0   =   a
0062620    r   e   a   >   >   A   R   E   A   .   Y   0  \r  \t   F   S
0062640    T   (   F   L   D   I   (   t   0   ,       X   0   )   ,    
0062660    f   p   X   0   )  \r  \t   F   S   T   (   F   L   D   I   (
0062700    t   1   ,       Y   0   )   ,       f   p   Y   0   )  \r  \t
0062720    t   e   s   t       n       l   s       0  \r  \t   i   f   s
0062740    o       [  \r  \t  \t   /   /       c   o   n   v   e   r   t
0062760        t   o       f   l   o   a   t   i   n   g       p 376 001
0063000   \0 377   ]   o   i   n   t       &       t   r   a   n   s   l
0063020    a   t   e       t   o       (   X   0   ,       Y   0   )    
0063040    o   r   i   g   i   n  \r  \t  \t   n   =   -   n  \r  \t  \t
0063060    x   T   a   b   l   e   =   A   l   l   o   c   a   t   e   (
0063100    P   S   z   o   n   e   ,       2   *   n   ,       l   v    
0063120    D   S   n   o   S   p   a   c   e   )  \r  \t  \t   i   f    
0063140    x   T   a   b   l   e       e   q       0       r   e   s   u
0063160    l   t   i   s       Q   u   i   t   D   r   a   w   S   p   l
0063200    i   n   e   (   0   )  \r  \t  \t   D   S   v   e   c   >   >
0063220    D   S   V   E   C   .   x   T   a   b   l   e   =   x   T   a
0063240    b   l   e  \r  \t  \t   y   T   a   b   l   e   =   A   l   l
0063260    o   c   a   t   e   (   P   S   z   o   n   e   ,       2   *
0063300    n   ,       l   v       D   S   n   o   S   p   a   c   e   )
0063320   \r  \t  \t   i   f       y   T   a   b   l   e       e   q    
0063340    0       r   e   s   u   l   t   i   s       Q   u   i   t   D
0063360    r   a   w   S   p   l   i   n   e   (   0   )  \r  \t  \t   D
0063400    S   v   e 376 001  \0 303 201   c   >   >   D   S   V   E   C
0063420    .   y   T   a   b   l   e   =   y   T   a   b   l   e  \r  \t
0063440   \t   f   o   r       k   =   0       t   o       n   -   1    
0063460    d   o       [  \r  \t  \t  \t   F   S   T   (   F   L   D   I
0063500    (   t   0   ,       k   X   T   a   b   l   e   !   k   -   X
0063520    0   )   ,       x   T   a   b   l   e   +   2   *   k   )  \r
0063540   \t  \t  \t   F   S   T   (   F   L   D   I   (   t   1   ,    
0063560    k   Y   T   a   b   l   e   !   k   -   Y   0   )   ,       y
0063600    T   a   b   l   e   +   2   *   k   )  \r  \t  \t  \t   ]  \r
0063620   \t  \t   ]  \r  \t   i   f   n   o   t       [  \r  \t  \t   /
0063640    /       t   r   a   n   s   l   a   t   e       t   o       (
0063660    X   0   ,       Y   0   )       o   r   i   g   i   n  \r  \t
0063700   \t   x   T   a   b   l   e   =   k   X   T   a   b   l   e  \r
0063720   \t  \t   y   T   a   b   l   e   =   k   Y   T   a   b   l   e
0063740   \r  \t  \t   i   f       (   X   0       n   e       0   )    
0063760    %       (   Y   0       n   e       0   )       t   h   e   n
0064000        f   o   r       k   =   0 376 001  \0   n 242       t   o
0064020        n   -   1       d   o       [  \r  \t  \t  \t   F   S   T
0064040    (   F   S   B   (   F   L   D   (   t   0   ,       x   T   a
0064060    b   l   e   +   2   *   k   )   ,       f   p   X   0   )   ,
0064100        x   T   a   b   l   e   +   2   *   k   )  \r  \t  \t  \t
0064120    F   S   T   (   F   S   B   (   F   L   D   (   t   1   ,    
0064140    y   T   a   b   l   e   +   2   *   k   )   ,       f   p   Y
0064160    0   )   ,       y   T   a   b   l   e   +   2   *   k   )  \r
0064200   \t  \t  \t   ]  \r  \t  \t   ]  \r  \r  \t   D   S   b   h   =
0064220    b   r   u   s   h   !   0  \r  \t   D   S   m   i   n   X   =
0064240    a   r   e   a   >   >   A   R   E   A   .   m   i   n   X    
0064260    -       D   S   b   w  \r  \t   D   S   m   a   x   X   =   a
0064300    r   e   a   >   >   A   R   E   A   .   m   a   x   X  \r  \t
0064320    D   S   m   i   n   Y   =   a   r   e   a   >   >   A   R   E
0064340    A   .   m   i   n   Y  \r  \t   D   S   m   a   x   Y   =   a
0064360    r   e   a   >   >   A   R   E   A   .   m   a   x   Y       +
0064400        D   S   b   h  \r  \t   D   S   b   m   h   = 376 001  \0
0064420    _   z   a   r   e   a   >   >   A   R   E   A   .   b   m   H
0064440    e   i   g   h   t  \r  \t   D   S   b   b   c   =   a   r   e
0064460    a  \r  \t   D   S   b   b   c   >   >   B   B   C   .   S   B
0064500    C   A   =   b   r   u   s   h   +   1  \r  \t   D   S   b   b
0064520    c   >   >   B   B   C   .   f   u   n   c   t   i   o   n   =
0064540    d   r   a   w   M   o   d   e       &       3  \r  \r  \t   /
0064560    /       i   s       i   t       s   i   m   p   l   y       a
0064600        d   o   t       ?   ?  \r  \t   D   S   n   e   w   X   =
0064620    F   T   R   (   F   L   D   (   t   0   ,       x   T   a   b
0064640    l   e   )   )  \r  \t   D   S   n   e   w   Y   =   F   T   R
0064660    (   F   L   D   (   t   0   ,       y   T   a   b   l   e   )
0064700    )  \r  \t   i   f       n       e   q       1       t   h   e
0064720    n       [  \r  \t  \t   D   r   a   w   P   o   i   n   t   (
0064740    )  \r  \t  \t   r   e   s   u   l   t   i   s       Q   u   i
0064760    t   D   r   a   w   S   p   l   i   n   e   (   1   )  \r  \t
0065000   \t   ]  \r  \r  \t   l   e   t       x   2   =   F   T   R   (
0065020    F   L 376 001  \0   / 311   D   (   t   0   ,       x   T   a
0065040    b   l   e   +   2   )   )  \r  \t   l   e   t       y   2   =
0065060    F   T   R   (   F   L   D   (   t   0   ,       y   T   a   b
0065100    l   e   +   2   )   )  \r  \t   i   f       D   S   n   e   w
0065120    Y       g   r       y   2       t   h   e   n       [       l
0065140    e   t       t   =   D   S   n   e   w   Y   ;       D   S   n
0065160    e   w   Y   =   y   2   ;       y   2   =   t       ]  \r  \t
0065200    i   f       D   S   n   e   w   X       g   r       x   2    
0065220    t   h   e   n       [       l   e   t       t   =   D   S   n
0065240    e   w   X   ;       D   S   n   e   w   X   =   x   2   ;    
0065260    x   2   =   t       ]  \r  \r  \t   /   /       i   s       i
0065300    t       a       v   e   r   t   i   c   a   l       l   i   n
0065320    e       ?  \r  \t   i   f       (   n       e   q       2   )
0065340        &       (   D   S   n   e   w   X       e   q       x   2
0065360    )       t   h   e   n       [  \r  \t  \t   i   f       (   D
0065400    S   n   e   w   X       l   s       D   S   m   i   n   X   )
0065420        %       (   D   S   n 376 001  \0 362   M   e   w   X    
0065440    g   r       D   S   m   a   x   X   )       %  \r  \t  \t  \t
0065460    (   D   S   n   e   w   Y       g   r       D   S   m   a   x
0065500    Y   )       %       (   y   2       l   s       D   S   m   i
0065520    n   Y   )       r   e   s   u   l   t   i   s       2  \r  \t
0065540   \t   i   f       D   S   n   e   w   Y       l   s       D   S
0065560    m   i   n   Y       t   h   e   n       D   S   n   e   w   Y
0065600    =   D   S   m   i   n   Y  \r  \t  \t   i   f       y   2    
0065620    g   r       D   S   m   a   x   Y       t   h   e   n       y
0065640    2   =   D   S   m   a   x   Y  \r  \t  \t   f   o   r       y
0065660    =   D   S   n   e   w   Y       t   o       y   2       d   o
0065700        [  \r  \t  \t  \t   D   S   n   e   w   Y   =   y  \r  \t
0065720   \t  \t   D   r   a   w   P   o   i   n   t   (   )  \r  \t  \t
0065740   \t   ]  \r  \t  \t   r   e   s   u   l   t   i   s       Q   u
0065760    i   t   D   r   a   w   S   p   l   i   n   e   (   2   )  \r
0066000   \t  \t   ]  \r  \r  \t   /   /       i   s       i   t       a
0066020        h   o   r   i   z   o   n   t   a   l     376 001  \0   Y
0066040  033   l   i   n   e       ?  \r  \t   i   f       (   n       e
0066060    q       2   )       &       (   D   S   n   e   w   Y       e
0066100    q       y   2   )       t   h   e   n       [  \r  \t  \t   i
0066120    f       (   D   S   n   e   w   X       g   r       D   S   m
0066140    a   x   X   )       %       (   x   2       l   s       D   S
0066160    m   i   n   X   )       %  \r  \t  \t  \t   (   D   S   n   e
0066200    w   Y       g   r       D   S   m   a   x   Y   )       %    
0066220    (   D   S   n   e   w   Y       l   s       D   S   m   i   n
0066240    Y   )       r   e   s   u   l   t   i   s       2  \r  \t  \t
0066260    i   f       D   S   n   e   w   X       l   s       D   S   m
0066300    i   n   X       t   h   e   n       D   S   n   e   w   X   =
0066320    D   S   m   i   n   X  \r  \t  \t   i   f       x   2       g
0066340    r       D   S   m   a   x   X       t   h   e   n       x   2
0066360    =   D   S   m   a   x   X  \r  \t  \t   f   o   r       x   =
0066400    D   S   n   e   w   X       t   o       x   2       d   o    
0066420    [  \r  \t  \t  \t   D   S   n   e   w   X   =   x  \r  \t  \t
0066440   \t 376 001  \0   3 250   D   r   a   w   P   o   i   n   t   (
0066460    )  \r  \t  \t  \t   ]  \r  \t  \t   r   e   s   u   l   t   i
0066500    s       Q   u   i   t   D   r   a   w   S   p   l   i   n   e
0066520    (   2   )  \r  \t  \t   ]  \r  \r  \t   /   /       i   s    
0066540    i   t       a       d   i   a   g   o   n   a   l       l   i
0066560    n   e       ?  \r  \t   i   f       n       e   q       2    
0066600    t   h   e   n       [  \r  \t  \t   D   r   a   w   P   o   i
0066620    n   t   (   )  \r  \t  \t   D   S   c   u   r   X   =   D   S
0066640    n   e   w   X  \r  \t  \t   D   S   c   u   r   Y   =   D   S
0066660    n   e   w   Y  \r  \t  \t   D   S   n   e   w   X   =   x   2
0066700   \r  \t  \t   D   S   n   e   w   Y   =   y   2  \r  \t  \t   C
0066720    h   e   c   k   A   n   d   D   r   a   w   P   o   i   n   t
0066740    (   )  \r  \t  \t   r   e   s   u   l   t   i   s       Q   u
0066760    i   t   D   r   a   w   S   p   l   i   n   e   (   2   )  \r
0067000   \t  \t   ]  \r  \r  \t   /   /       t   h   e   n   ,       i
0067020    t       i   s       a       c   u   r   v   e  \r  \t   l   e
0067040    t       d   n   =   2 376 001  \0 321   W   *   n  \r  \r  \t
0067060    /   /       t   a   b   l   e       f   o   r       d   e   r
0067100    i   v   a   t   i   v   e   s  \r  \t   l   e   t       d   T
0067120    a   b   l   e   =   A   l   l   o   c   a   t   e   (   P   S
0067140    z   o   n   e   ,       n   *   1   2   ,       l   v       D
0067160    S   n   o   S   p   a   c   e   )  \r  \t   i   f       d   T
0067200    a   b   l   e       e   q       0       r   e   s   u   l   t
0067220    i   s       Q   u   i   t   D   r   a   w   S   p   l   i   n
0067240    e   (   0   )  \r  \t   D   S   v   e   c   >   >   D   S   V
0067260    E   C   .   d   T   a   b   l   e   =   d   T   a   b   l   e
0067300   \r  \t  \r  \t   /   /       s   p   l   i   n   e       c   o
0067320    m   p   u   t   a   t   i   o   n   :  \r  \t   /   /       P
0067340    a   r   a   m   e   t   r   i   c   S   p   l   i   n   e   (
0067360    n   ,   X   ,   Y   ,   X   '   ,   X   '   '   ,   X   '   '
0067400    '   ,   Y   '   ,   Y   '   '   ,   Y   '   '   '   )  \r  \t
0067420    l   e   t       P   S   d   o   n   e   =   P   a   r   a   m
0067440    e   t   r   i   c   S   p   l   i   n   e 376 001  \0 035 312
0067460    (   n   ,       x   T   a   b   l   e   ,       y   T   a   b
0067500    l   e   ,       d   T   a   b   l   e   ,       d   T   a   b
0067520    l   e   +   d   n   ,       d   T   a   b   l   e   +   2   *
0067540    d   n   ,      \r  \t  \t   d   T   a   b   l   e   +   3   *
0067560    d   n   ,       d   T   a   b   l   e   +   4   *   d   n   ,
0067600        d   T   a   b   l   e   +   5   *   d   n   ,  \r  \t  \t
0067620    (   c   y   c   l   i   c       ?       1   ,       0   )   )
0067640   \r  \r  \t   i   f       P   S   d   o   n   e       e   q    
0067660    0       r   e   s   u   l   t   i   s       Q   u   i   t   D
0067700    r   a   w   S   p   l   i   n   e   (   0   )  \r  \r  \t   D
0067720    S   n   e   w   X   =   F   T   R   (   F   L   D   (   t   0
0067740    ,   x   T   a   b   l   e   )   )  \r  \t   D   S   n   e   w
0067760    Y   =   F   T   R   (   F   L   D   (   t   1   ,   y   T   a
0070000    b   l   e   )   )  \r  \t   D   S   c   u   r   X   =   D   S
0070020    n   e   w   X  \r  \t   D   S   c   u   r   Y   =   D   S   n
0070040    e   w   Y  \r  \t   D   r   a   w   P   o   i   n   t   (   )
0070060  376 001  \0 357 333  \r  \r  \t   l   e   t       t   w   o   =
0070100    v   e   c       2   ;               F   S   T   (   F   L   D
0070120    I   (   t   0   ,   2   )   ,   t   w   o   )  \r  \t   l   e
0070140    t       t   h   r   e   e   =   v   e   c       2   ;       F
0070160    S   T   (   F   L   D   I   (   t   0   ,   3   )   ,   t   h
0070200    r   e   e   )  \r  \t   l   e   t       s   i   x   =   v   e
0070220    c       2   ;               F   S   T   (   F   L   D   I   (
0070240    t   0   ,   6   )   ,   s   i   x   )  \r  \r  \t   f   o   r
0070260        k   =   0       t   o       n   -   2       d   o       [
0070300   \r  \t           /   /       k   n   o   t       k  \r  \t    
0070320        l   e   t       k   X   ,   k   Y   =   x   T   a   b   l
0070340    e   +   2   *   k   ,   y   T   a   b   l   e   +   2   *   k
0070360   \r  \t           /   /       e   s   t   i   m   a   t   e    
0070400    s   t   e   p   p   i   n   g       p   a   r   a   m   e   t
0070420    e   r   s  \r  \t           l   e   t       m   1   =   F   T
0070440    R   (   F   L   D   (   t   0   ,   k   X   )   )   -   F   T
0070460    R   (   F   L   D 376 001  \0 035 340   (   t   1   ,   k   X
0070500    +   2   )   )  \r  \t           i   f       m   1       l   s
0070520        0       t   h   e   n       m   1   =   -   m   1  \r  \t
0070540            l   e   t       m   2   =   F   T   R   (   F   L   D
0070560    (   t   2   ,   k   Y   )   )   -   F   T   R   (   F   L   D
0070600    (   t   3   ,   k   Y   +   2   )   )  \r  \t           i   f
0070620        m   2       l   s       0       t   h   e   n       m   2
0070640    =   -   m   2  \r  \t           l   e   t       m   =   (   (
0070660    (   m   1       g   r       m   2   )       ?       m   1   ,
0070700        m   2   )   *   D   S   n   u   m   R   a   t   e   )   /
0070720    D   S   d   e   n   R   a   t   e  \r  \t           l   e   t
0070740        n   i   ,   r   =   1   ,   m  \r  \t           i   f    
0070760    m       g   r       D   S   c   o   m   p   u   t   e   R   a
0071000    n   g   e       t   h   e   n       [       r   =   D   S   c
0071020    o   m   p   u   t   e   R   a   n   g   e   ;       n   i   =
0071040    m   /   r   ;       m   =   n   i   *   r       ]  \r  \t    
0071060        /   /       c   o   n   s   t   a 376 001  \0 025 225   n
0071100    t   s  \r  \t           l   e   t       f   n   i   =   v   e
0071120    c       2   ;       F   S   T   (   F   L   D   I   (   t   0
0071140    ,   n   i   )   ,       f   n   i   )  \r  \t           t   e
0071160    s   t       m       e   q       0  \r  \t           i   f   s
0071200    o       F   L   D   I   (   t   1   ,   0   )  \r  \t        
0071220    i   f   n   o   t       F   D   V   (   F   L   D   I   (   t
0071240    1   ,   1   )   ,       F   L   D   I   (   t   0   ,   m   )
0071260    )  \r  \t           l   e   t       d   e   l   t   a   =   v
0071300    e   c       2   ;           F   S   T   (   t   1   ,   d   e
0071320    l   t   a   )  \r  \t           l   e   t       d   e   l   t
0071340    a   2   =   v   e   c       2   ;       F   S   T   (   F   M
0071360    L   (   t   1   ,   d   e   l   t   a   )   ,       d   e   l
0071400    t   a   2   )  \r  \t           l   e   t       d   e   l   t
0071420    a   3   =   v   e   c       2   ;       F   S   T   (   F   M
0071440    L   (   t   1   ,   d   e   l   t   a   )   ,       d   e   l
0071460    t   a   3   )  \r  \t           /   /       d   e   r   i 376
0071500  001  \0 266       v   a   t   i   v   e   s       -       f   l
0071520    o   a   t   i   n   g       p   o   i   n   t       -  \r  \t
0071540            l   e   t       k   X   1   =   d   T   a   b   l   e
0071560    +   2   *   k  \r  \t           l   e   t       k   X   2   =
0071600    k   X   1   +   d   n  \r  \t           l   e   t       k   X
0071620    3   =   k   X   2   +   d   n  \r  \t           l   e   t    
0071640    k   Y   1   =   k   X   3   +   d   n  \r  \t           l   e
0071660    t       k   Y   2   =   k   Y   1   +   d   n  \r  \t        
0071700    l   e   t       k   Y   3   =   k   Y   2   +   d   n  \r  \t
0071720            /   /       s   t   a   r   t   i   n   g       d   e
0071740    r   i   v   a   t   i   v   e   s       o   f       s   u   b
0071760    i   n   t   e   r   v   a   l   s       -       f   l   o   a
0072000    t   i   n   g       p   o   i   n   t       -  \r  \t        
0072020    l   e   t       X   1   =   v   e   c       2   ;       l   e
0072040    t       X   2   =   v   e   c       2   ;       l   e   t    
0072060    X   3   =   v   e   c       2  \r  \t           l   e   t    
0072100    Y   1   =   v 376 001  \0   T 370   e   c       2   ;       l
0072120    e   t       Y   2   =   v   e   c       2   ;       l   e   t
0072140        Y   3   =   v   e   c       2  \r  \t           /   /    
0072160    s   t   a   r   t       a   t       k   n   o   t       k  \r
0072200   \t           F   L   D   (   X   ,   k   X   )   ;           F
0072220    L   D   (   Y   ,   k   Y   )  \r  \t           X   1   !   0
0072240    =   k   X   1   !   0   ;       X   1   !   1   =   k   X   1
0072260    !   1  \r  \t           Y   1   !   0   =   k   Y   1   !   0
0072300    ;       Y   1   !   1   =   k   Y   1   !   1  \r  \t        
0072320    X   2   !   0   =   k   X   2   !   0   ;       X   2   !   1
0072340    =   k   X   2   !   1  \r  \t           Y   2   !   0   =   k
0072360    Y   2   !   0   ;       Y   2   !   1   =   k   Y   2   !   1
0072400   \r  \t           X   3   !   0   =   k   X   3   !   0   ;    
0072420    X   3   !   1   =   k   X   3   !   1  \r  \t           Y   3
0072440    !   0   =   k   Y   3   !   0   ;       Y   3   !   1   =   k
0072460    Y   3   !   1  \r  \t           /   /       3   r   d       d
0072500    e   r   i   v   a   t   i   v   e 376 001  \0 376   >   s    
0072520    &       d   i   f   f   e   r   e   n   c   e   s       a   r
0072540    e       c   o   n   s   t   a   n   t  \r  \t           F   M
0072560    L   (   F   L   D   (   d   3   X   ,   d   e   l   t   a   3
0072600    )   ,       X   3   )  \r  \t           F   M   L   (   F   L
0072620    D   (   d   3   Y   ,   d   e   l   t   a   3   )   ,       Y
0072640    3   )  \r  \t           /   /       f   o   r   w   a   r   d
0072660        d   i   f   f   e   r   e   n   c   e       c   o   m   p
0072700    u   t   a   t   i   o   n       i   n       s   u   b   i   n
0072720    t   e   r   v   a   l  \r  \t           f   o   r       i   =
0072740    1       t   o       n   i       d   o       [  \r  \t        
0072760            /   /       f   l   o   a   t   i   n   g       p   o
0073000    i   n   t       c   o   m   p   u   t   a   t   i   o   n    
0073020    o   f       i   n   i   t   i   a   l       v   a   l   u   e
0073040    s       (   b   l   a   h   h   !   )  \r  \t                
0073060    F   M   L   (   F   L   D   (   d   2   X   ,   d   e   l   t
0073100    a   2   )   ,   X   2   )  \r  \t                   F 376 001
0073120   \0   V 335   M   L   (   F   L   D   (   d   1   X   ,   d   e
0073140    l   t   a   )   ,   X   1   )  \r  \t                   F   A
0073160    D   (   d   1   X   ,   F   D   V   (   F   L   D   (   t   0
0073200    ,   d   2   X   )   ,   t   w   o   )   )  \r  \t            
0073220        F   A   D   (   d   1   X   ,   F   D   V   (   F   L   D
0073240    (   t   0   ,   d   3   X   )   ,   s   i   x   )   )  \r  \t
0073260                    F   M   L   (   F   L   D   (   d   2   Y   ,
0073300    d   e   l   t   a   2   )   ,   Y   2   )  \r  \t            
0073320        F   M   L   (   F   L   D   (   d   1   Y   ,   d   e   l
0073340    t   a   )   ,   Y   1   )  \r  \t                   F   A   D
0073360    (   d   1   Y   ,   F   D   V   (   F   L   D   (   t   0   ,
0073400    d   2   Y   )   ,   t   w   o   )   )  \r  \t                
0073420    F   A   D   (   d   1   Y   ,   F   D   V   (   F   L   D   (
0073440    t   0   ,   d   3   Y   )   ,   s   i   x   )   )  \r  \t    
0073460                F   A   D   (   d   2   X   ,   d   3   X   )   ;
0073500                    F   A   D   (   d   2   Y   ,   d   3   Y   )
0073520   \r  \t     376 001  \0   B 224               /   /       d   o
0073540    u   b   l   e       p   r   e   c   i   s   i   o   n       f
0073560    i   x   e   d       p   o   i   n   t       v   a   r   i   a
0073600    b   l   e   s  \r  \t                   l   e   t       d   p
0073620    X   =   v   e   c       2   ;       l   e   t       d   p   d
0073640    1   X   =   v   e   c       2   ;       l   e   t       d   p
0073660    d   2   X   =   v   e   c       2   ;       l   e   t       d
0073700    p   d   3   X   =   v   e   c       2  \r  \t                
0073720    l   e   t       d   p   Y   =   v   e   c       2   ;       l
0073740    e   t       d   p   d   1   Y   =   v   e   c       2   ;    
0073760    l   e   t       d   p   d   2   Y   =   v   e   c       2   ;
0074000        l   e   t       d   p   d   3   Y   =   v   e   c       2
0074020   \r  \t                   /   /       i   n   i   t   i   a   l
0074040        v   a   l   u   e   s  \r  \t                   F   S   T
0074060    D   P   (   X   ,   d   p   X   )   ;       F   S   T   D   P
0074100    (   d   1   X   ,   d   p   d   1   X   )   ;       F   S   T
0074120    D   P   (   d   2   X   ,   d 376 001  \0   E   =   p   d   2
0074140    X   )   ;       F   S   T   D   P   (   d   3   X   ,   d   p
0074160    d   3   X   )  \r  \t                   F   S   T   D   P   (
0074200    Y   ,   d   p   Y   )   ;       F   S   T   D   P   (   d   1
0074220    Y   ,   d   p   d   1   Y   )   ;       F   S   T   D   P   (
0074240    d   2   Y   ,   d   p   d   2   Y   )   ;       F   S   T   D
0074260    P   (   d   3   Y   ,   d   p   d   3   Y   )  \r  \t        
0074300            /   /       c   o   m   p   u   t   e  \r  \t        
0074320            f   o   r       j   =   1       t   o       r       d
0074340    o       [  \r  \t  \t   D   S   n   e   w   X   =   D   P   A
0074360    D   (   d   p   X   ,   d   p   d   1   X   )  \r  \t  \t   D
0074400    S   n   e   w   Y   =   D   P   A   D   (   d   p   Y   ,   d
0074420    p   d   1   Y   )  \r  \t  \t   D   P   A   D   (   d   p   d
0074440    1   X   ,   d   p   d   2   X   )   ;       D   P   A   D   (
0074460    d   p   d   1   Y   ,   d   p   d   2   Y   )  \r  \t  \t   D
0074500    P   A   D   (   d   p   d   2   X   ,   d   p   d   3   X   )
0074520    ;       D   P   A   D   (   d   p   d   2   Y   , 376 001  \0
0074540    4 026   d   p   d   3   Y   )  \r  \t  \t   C   h   e   c   k
0074560    A   n   d   D   r   a   w   P   o   i   n   t   (   )  \r  \t
0074600   \t   ]  \r  \t                   /   /       n   o   w   ,    
0074620    n   e   x   t       i   n   t   e   r   v   a   l       o   r
0074640        n   e   x   t       k   n   o   t  \r  \t                
0074660    t   e   s   t       i       e   q       n   i  \r  \t        
0074700            i   f   s   o       [  \r  \t  \t   /   /       n   e
0074720    x   t       k   n   o   t  \r  \t  \t   D   S   n   e   w   X
0074740    =   F   T   R   (   F   L   D   (   t   0   ,   k   X   +   2
0074760    )   )  \r  \t  \t   D   S   n   e   w   Y   =   F   T   R   (
0075000    F   L   D   (   t   0   ,   k   Y   +   2   )   )  \r  \t  \t
0075020    ]  \r  \t                   i   f   n   o   t       [  \r  \t
0075040   \t   /   /       s   t   a   r   t   i   n   g       p   o   i
0075060    n   t       o   f       n   e   x   t       i   n   t   e   r
0075100    v   a   l  \r  \t  \t   F   D   V   (   F   L   D   I   (   t
0075120    1   ,   i   )   ,   f   n   i   )  \r  \t  \t   F   D   V   (
0075140    F   L 376 001  \0   z 201   D   (   t   2   ,   t   1   )   ,
0075160    t   w   o   )  \r  \t  \t   F   D   V   (   F   L   D   (   t
0075200    3   ,   t   1   )   ,   t   h   r   e   e   )  \r  \t  \t   F
0075220    S   T   (   F   A   D   (   F   M   L   (   F   L   D   (   t
0075240    0   ,   k   X   3   )   ,   t   1   )   ,   k   X   2   )   ,
0075260    X   2   )  \r  \t  \t   F   S   T   (   F   A   D   (   F   M
0075300    L   (   F   L   D   (   t   0   ,   k   Y   3   )   ,   t   1
0075320    )   ,   k   Y   2   )   ,   Y   2   )  \r  \t  \t   F   S   T
0075340    (   F   A   D   (   F   M   L   (   F   A   D   (   F   M   L
0075360    (   F   L   D   (   t   0   ,   k   X   3   )   ,   t   2   )
0075400    ,   k   X   2   )   ,   t   1   )   ,   k   X   1   )   ,   X
0075420    1   )  \r  \t  \t   F   S   T   (   F   A   D   (   F   M   L
0075440    (   F   A   D   (   F   M   L   (   F   L   D   (   t   0   ,
0075460    k   Y   3   )   ,   t   2   )   ,   k   Y   2   )   ,   t   1
0075500    )   ,   k   Y   1   )   ,   Y   1   )  \r  \t  \t   D   S   n
0075520    e   w   X   =   F   T   R   (   F   A   D   (   F   M   L   (
0075540    F   A   D   (   F   M   L 376 001  \0 250 017   (   F   A   D
0075560    (   F   M   L   (   F   L   D   (   X   ,   k   X   3   )   ,
0075600    t   3   )   ,   k   X   2   )   ,   t   2   )   ,   k   X   1
0075620    )   ,   t   1   )   ,   k   X   )   )  \r  \t  \t   D   S   n
0075640    e   w   Y   =   F   T   R   (   F   A   D   (   F   M   L   (
0075660    F   A   D   (   F   M   L   (   F   A   D   (   F   M   L   (
0075700    F   L   D   (   Y   ,   k   Y   3   )   ,   t   3   )   ,   k
0075720    Y   2   )   ,   t   2   )   ,   k   Y   1   )   ,   t   1   )
0075740    ,   k   Y   )   )  \r      \t  \t   ]      \r  \t            
0075760        C   h   e   c   k   A   n   d   D   r   a   w   P   o   i
0076000    n   t   (   )  \r  \t                   ]  \r  \t           ]
0076020   \r  \r  \t   r   e   s   u   l   t   i   s       Q   u   i   t
0076040    D   r   a   w   S   p   l   i   n   e   (   n   )  \r  \t   ]
0076060    D   r   a   w   S   p   l   i   n   e  \r  \r  \r  \r   a   n
0076100    d       Q   u   i   t   D   r   a   w   S   p   l   i   n   e
0076120    (   r   )       =       v   a   l   o   f       [  \r  \t   F
0076140    P   S   e   t   u   p   (   D   S   v   e   c 376 001  \0 351
0076160  267   >   >   D   S   V   E   C   .   F   P   w   o   r   k   S
0076200    a   v   e   )  \r  \t   D   S   v   e   c   >   >   D   S   V
0076220    E   C   .   F   P   w   o   r   k   S   a   v   e   =   0  \r
0076240   \t   f   o   r       i   =   0       t   o       l   D   S   V
0076260    E   C   -   1       d   o  \r  \t  \t   i   f       D   S   v
0076300    e   c   !   i       n   e       0       t   h   e   n       F
0076320    r   e   e   (   P   S   z   o   n   e   ,       D   S   v   e
0076340    c   !   i   )  \r  \t   r   e   s   u   l   t   i   s       r
0076360   \r  \t   ]  \r  \r  \f  \r   /   /   *   *   *   *   *   *   *
0076400    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
*
0076460    *   *   *   *   *   *   *   *   *   *  \r   /   /       p   o
0076500    i   n   t       d   r   a   w   /   e   r   a   s   e       p
0076520    r   o   c   e   d   u   r   e   s  \r   /   /   *   *   *   *
0076540    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
0076560    * 376 001  \0 002   6   *   *   *   *   *   *   *   *   *   *
0076600    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
*
0076640    *   *  \r  \r  \r   a   n   d       C   h   e   c   k   A   n
0076660    d   D   r   a   w   P   o   i   n   t   (   )       b   e    
0076700    [   C   h   e   c   k   A   n   d   D   r   a   w   P   o   i
0076720    n   t  \r  \t   l   e   t       d   e   l   t   a   X   =   (
0076740    D   S   n   e   w   X       g   r       D   S   c   u   r   X
0076760    )       ?       D   S   n   e   w   X   -   D   S   c   u   r
0077000    X   ,       D   S   c   u   r   X   -   D   S   n   e   w   X
0077020   \r  \t   l   e   t       d   e   l   t   a   Y   =   (   D   S
0077040    n   e   w   Y       g   r       D   S   c   u   r   Y   )    
0077060    ?       D   S   n   e   w   Y   -   D   S   c   u   r   Y   ,
0077100        D   S   c   u   r   Y   -   D   S   n   e   w   Y  \r  \t
0077120    /   /       s   a   m   e       p   o   i   n   t   s       ?
0077140   \r  \t   u   n   l   e   s   s       d   e   l   t   a   X    
0077160    %       d   e   l   t 376 001  \0 016 364   a   Y       r   e
0077200    t   u   r   n  \r  \t   /   /       g   a   p       ?  \r  \t
0077220    t   e   s   t       d   e   l   t   a   X       g   r       1
0077240        %       d   e   l   t   a   Y       g   r       1  \r  \t
0077260    i   f   s   o       [  \r  \t  \t   /   /   l   i   n   e   a
0077300    r       i   n   t   e   r   p   o   l   a   t   i   o   n  \r
0077320   \t  \t   l   e   t       x   =   v   e   c       2   ;       l
0077340    e   t       d   p   d   X   =   v   e   c       2  \r  \t  \t
0077360    l   e   t       y   =   v   e   c       2   ;       l   e   t
0077400        d   p   d   Y   =   v   e   c       2  \r  \t  \t   l   e
0077420    t       m   =   (   d   e   l   t   a   X       g   r       d
0077440    e   l   t   a   Y   )       ?       d   e   l   t   a   X   ,
0077460        d   e   l   t   a   Y  \r  \t  \t   F   L   D   I   (   t
0077500    0   ,       m   )  \r  \t  \t   F   S   T   D   P   (   F   D
0077520    V   (   F   L   D   I   (   t   1   ,       D   S   n   e   w
0077540    X   -   D   S   c   u   r   X   )   ,       t   0   )   ,    
0077560    d   p   d   X   )  \r  \t  \t   F   S   T 376 001  \0 366  \t
0077600    D   P   (   F   D   V   (   F   L   D   I   (   t   2   ,    
0077620    D   S   n   e   w   Y   -   D   S   c   u   r   Y   )   ,    
0077640    t   0   )   ,       d   p   d   Y   )  \r  \t  \t   x   !   0
0077660    =   D   S   c   u   r   X   ;       x   !   1   =   0  \r  \t
0077700   \t   y   !   0   =   D   S   c   u   r   Y   ;       y   !   1
0077720    =   0  \r  \t  \t   f   o   r       i   =   1       t   o    
0077740    m       d   o       [  \r  \t  \t  \t   D   S   n   e   w   X
0077760    =   D   P   A   D   (   x   ,       d   p   d   X   )  \r  \t
0100000   \t  \t   D   S   n   e   w   Y   =   D   P   A   D   (   y   ,
0100020        d   p   d   Y   )  \r  \t  \t  \t   D   r   a   w   P   o
0100040    i   n   t   (   )  \r  \t  \t  \t   ]  \r  \t  \t   ]  \r  \t
0100060    i   f   n   o   t       D   r   a   w   P   o   i   n   t   (
0100100    )  \r  \t   D   S   c   u   r   X   =   D   S   n   e   w   X
0100120   \r  \t   D   S   c   u   r   Y   =   D   S   n   e   w   Y  \r
0100140   \t   ]   C   h   e   c   k   A   n   d   D   r   a   w   P   o
0100160    i   n   t  \r  \r  \r  \r  \r   a   n   d       D   r   a   w
0100200  376 001  \0 017 350   P   o   i   n   t   (   )       b   e    
0100220    [   D   r   a   w   P   o   i   n   t  \r  \t   l   e   t    
0100240    x   =   D   S   n   e   w   X   -   D   S   b   w   /   2  \r
0100260   \t   l   e   t       y   =   D   S   n   e   w   Y   +   D   S
0100300    b   h   /   2  \r  \t   i   f       (   x       l   e       D
0100320    S   m   i   n   X   )       %       (   x       g   r       D
0100340    S   m   a   x   X   )  \r  \t       %       (   y       l   s
0100360        D   S   m   i   n   Y   )       %       (   y       g   e
0100400        D   S   m   a   x   Y   )       r   e   t   u   r   n  \r
0100420   \t   t   e   s   t       x       l   s       (   D   S   m   i
0100440    n   X   +   D   S   b   w   )  \r  \t   i   f   s   o       [
0100460   \r  \t  \t   D   S   b   b   c   >   >   B   B   C   .   D   L
0100500    X   =       D   S   m   i   n   X   +   D   S   b   w  \r  \t
0100520   \t   D   S   b   b   c   >   >   B   B   C   .   D   W   =    
0100540    x   -   D   S   m   i   n   X  \r  \t  \t   D   S   b   b   c
0100560    >   >   B   B   C   .   S   L   X   =       D   S   m   i   n
0100600    X   +   D   S   b 376 001  \0   G 233   w   -   x  \r  \t  \t
0100620    ]  \r  \t   i   f   n   o   t       [  \r  \t  \t   D   S   b
0100640    b   c   >   >   B   B   C   .   D   L   X   =       x  \r  \t
0100660   \t   D   S   b   b   c   >   >   B   B   C   .   D   W   =    
0100700    (   (   x       g   r       (   D   S   m   a   x   X   -   D
0100720    S   b   w   )   )       ?       (   D   S   m   a   x   X   -
0100740    x   +   1   )   ,       D   S   b   w   )  \r  \t  \t   D   S
0100760    b   b   c   >   >   B   B   C   .   S   L   X   =       0  \r
0101000   \t  \t   ]  \r  \t   t   e   s   t       y       g   r       (
0101020    D   S   m   a   x   Y   -   D   S   b   h   )  \r  \t   i   f
0101040    s   o       [  \r  \t  \t   D   S   b   b   c   >   >   B   B
0101060    C   .   D   T   Y   =       D   S   b   m   h   -   D   S   m
0101100    a   x   Y   +   D   S   b   h  \r  \t  \t   D   S   b   b   c
0101120    >   >   B   B   C   .   S   T   Y   =       y   -   D   S   m
0101140    a   x   Y   +   D   S   b   h  \r  \t  \t   D   S   b   b   c
0101160    >   >   B   B   C   .   D   H   =       D   S   m   a   x   Y
0101200    -   y  \r  \t  \t   ]  \r  \t   i   f 376 001  \0 037 232   n
0101220    o   t       [  \r  \t  \t   D   S   b   b   c   >   >   B   B
0101240    C   .   D   T   Y   =       D   S   b   m   h   -   y  \r  \t
0101260   \t   D   S   b   b   c   >   >   B   B   C   .   S   T   Y   =
0101300        0  \r  \t  \t   D   S   b   b   c   >   >   B   B   C   .
0101320    D   H   =       (   y       l   s       (   D   S   m   i   n
0101340    Y   +   D   S   b   h   )   )       ?       y   -   D   S   m
0101360    i   n   Y   +   1   ,       D   S   b   h  \r  \t  \t   ]  \r
0101400   \t   D   S   B   i   t   B   l   t   (   D   S   b   b   c   )
0101420   \r  \t   ]   D   r   a   w   P   o   i   n   t  \r  \r  \r  \r
0101440    a   n   d       D   S   B   i   t   B   l   t   (   b   b   c
0101460    )       b   e       [  \r  \t   D   S   B   i   t   B   l   t
0101500    =       t   a   b   l   e       [  \r  \t  \t   #   0   5   5
0101520    0   0   1   ;  \t  \t   /   /       s   t   a       3   ,   1
0101540    ,   2  \r  \t  \t   #   1   4   5   0   0   0   ;  \t  \t   /
0101560    /       m   o   v       2   ,   1  \r  \t  \t   #   1   1   1
0101600    0   0   0   ;  \t  \t   /   /       m   o   v       0   , 376
0101620  001  \0   # 340   2  \r  \t  \t   #   0   4   5   0   0   1   ;
0101640   \t  \t   /   /       s   t   a       1   ,   1   ,   2  \r  \t
0101660   \t   #   1   2   6   4   0   0   ;  \t  \t   /   /       s   u
0101700    b       1   ,   1  \r  \t  \t   #   0   6   1   0   2   4   ;
0101720   \t  \t   /   /       B   i   t   B   l   t  \r  \t  \t   #   0
0101740    3   1   0   0   1   ;  \t  \t   /   /       l   d   a       2
0101760    ,   1   ,   2  \r  \t  \t   #   0   3   5   0   0   1   ;  \t
0102000   \t   /   /       l   d   a       3   ,   1   ,   2  \r  \t  \t
0102020    #   0   0   1   4   0   1   ;  \t  \t   /   /           j   m
0102040    p       1   ,   3  \r  \t  \t   ]  \r  \t   D   S   B   i   t
0102060    B   l   t   (   b   b   c   )  \r  \t   ]  \r  \r  \r  \r   a
0102100    n   d       G   e   t   B   r   u   s   h   (   b   r   u   s
0102120    h   S   h   a   p   e   ,       b   r   u   s   h   S   i   z
0102140    e   )       =       v   a   l   o   f       [  \r  \t   /   /
0102160        r   e   t   u   r   n   s       a       p   o   i   n   t
0102200    e   r       t   o       t   h   e       b   r   u   s   h    
0102220    p   a   t   t 376 001  \0   h 301   e   r   n       (   1   6
0102240        w   i   d   e   ,       H       h   e   i   g   h   t   )
0102260   \r  \t   /   /       T   h   e       b   r   u   s   h       p
0102300    a   t   t   e   r   n       i   s       s   t   o   r   e   d
0102320        a   s   :  \r  \t   /   /  \t  \t  \t   H       w   o   r
0102340    d  \r  \t   /   /  \t  \t  \t   b   i   t   P   a   t   t   e
0102360    r   n   ^   1   ,   H       w   o   r   d  \r  \t   /   /  \r
0102400   \t   /   /       V   a   l   u   e   s       f   o   r       b
0102420    r   u   s   h   S   h   a   p   e       a   r   e   :  \r  \t
0102440    /   /  \t  \t   0   =       r   o   u   n   d       b   r   u
0102460    s   h  \r  \t   /   /  \t  \t   1   =       r   e   c   t   a
0102500    n   g   u   l   a   r       b   r   u   s   h  \r  \t   /   /
0102520   \t  \t   2   =       h   o   r   i   z   o   n   t   a   l    
0102540    b   a   r       b   r   u   s   h  \r  \t   /   /  \t  \t   3
0102560    =       v   e   r   t   i   c   a   l       b   a   r       b
0102600    r   u   s   h  \r  \t   /   /  \t  \t   4   =       d   i   a
0102620    g   o   n   a   l       b   a   r 376 001  \0 273   T       b
0102640    r   u   s   h  \r  \t   /   /  \r  \t   /   /       b   r   u
0102660    s   h   S   i   z   e       i   s       a   n   y       v   a
0102700    l   u   e       b   e   t   w   e   e   n       1       a   n
0102720    d       1   6   ,       w   h   i   c   h       w   i   l   l
0102740        b   e       r   o   u   n   d   e   d  \r  \t   /   /    
0102760    t   o       t   h   e       v   a   l   u   e   s       1   ,
0103000        2   ,       4   ,       8   ,       1   6   .  \r  \r  \t
0103020    l   e   t       b   r   u   s   h   T   a   b   l   e   =    
0103040    t   a   b   l   e       [  \r  \t  \t   /   /       d   o   t
0103060        1   :  \r  \t  \t   1   ;       #   2   0   0   ;  \r  \t
0103100   \t   /   /       d   o   t       2   :  \r  \t  \t   2   ;    
0103120    #   6   0   0   ;       #   6   0   0   ;  \r  \t  \t   /   /
0103140        d   o   t       4   :  \r  \t  \t   4   ;       #   6   0
0103160    0   ;       #   1   7   0   0   ;       #   1   7   0   0   ;
0103200        #   6   0   0   ;  \r  \t  \t   /   /       d   o   t    
0103220    8   :  \r  \t  \t   8   ;       #   1   7   0   0   ; 376 001
0103240   \0 236 316       #   3   7   4   0   ;       #   7   7   6   0
0103260    ;       #   7   7   6   0   ;       #   7   7   6   0   ;    
0103300    #   7   7   6   0   ;       #   3   7   4   0   ;       #   1
0103320    7   0   0   ;  \r  \t  \t   /   /       d   o   t       1   6
0103340    :  \r  \t  \t   1   6   ;       #   3   7   4   0   ;       #
0103360    1   7   7   7   0   ;       #   3   7   7   7   4   ;       #
0103400    7   7   7   7   6   ;       #   7   7   7   7   6   ;       #
0103420    1   7   7   7   7   7   ;       #   1   7   7   7   7   7   ;
0103440        #   1   7   7   7   7   7   ;      \r  \t  \t   #   1   7
0103460    7   7   7   7   ;       #   1   7   7   7   7   7   ;       #
0103500    1   7   7   7   7   7   ;       #   7   7   7   7   6   ;    
0103520    #   7   7   7   7   6   ;       #   3   7   7   7   4   ;    
0103540    #   1   7   7   7   0   ;       #   3   7   4   0   ;  \r  \r
0103560   \t  \t   /   /       r   e   c   t       4   :  \r  \t  \t   4
0103600    ;       #   1   7   0   0   ;       #   1   7   0   0   ;    
0103620    #   1   7   0   0   ;       #   1   7   0   0   ;  \r  \t  \t
0103640    /   /     376 001  \0 213 177   r   e   c   t       8   :  \r
0103660   \t  \t   8   ;       #   7   7   6   0   ;       #   7   7   6
0103700    0   ;       #   7   7   6   0   ;       #   7   7   6   0   ;
0103720        #   7   7   6   0   ;       #   7   7   6   0   ;       #
0103740    7   7   6   0   ;       #   7   7   6   0   ;  \r  \t  \t   /
0103760    /       r   e   c   t       1   6   :  \r  \t  \t   1   6   ;
0104000        #   1   7   7   7   7   7   ;       #   1   7   7   7   7
0104020    7   ;       #   1   7   7   7   7   7   ;       #   1   7   7
0104040    7   7   7   ;       #   1   7   7   7   7   7   ;       #   1
0104060    7   7   7   7   7   ;       #   1   7   7   7   7   7   ;    
0104100    #   1   7   7   7   7   7   ;      \r  \t  \t   #   1   7   7
0104120    7   7   7   ;       #   1   7   7   7   7   7   ;       #   1
0104140    7   7   7   7   7   ;       #   1   7   7   7   7   7   ;    
0104160    #   1   7   7   7   7   7   ;       #   1   7   7   7   7   7
0104200    ;       #   1   7   7   7   7   7   ;       #   1   7   7   7
0104220    7   7   ;  \r  \r  \t  \t   /   /       h   o   r       2   :
0104240   \r  \t  \t   1   ;       #   6 376 001  \0 274   !   0   0   ;
0104260   \r  \t  \t   /   /       h   o   r       4   :  \r  \t  \t   1
0104300    ;       #   1   7   0   0   ;  \r  \t  \t   /   /       h   o
0104320    r       8   :  \r  \t  \t   1   ;       #   7   7   6   0   ;
0104340   \r  \t  \t   /   /       h   o   r       1   6   :  \r  \t  \t
0104360    1   ;       #   1   7   7   7   7   ;  \r  \r  \t  \t   /   /
0104400        v   e   r       2   :  \r  \t  \t   2   ;       #   4   0
0104420    0   ;       #   4   0   0   ;  \r  \t  \t   /   /       v   e
0104440    r       4   :  \r  \t  \t   4   ;       #   4   0   0   ;    
0104460    #   4   0   0   ;       #   4   0   0   ;       #   4   0   0
0104500    ;  \r  \t  \t   /   /       v   e   r       8   :  \r  \t  \t
0104520    8   ;       #   4   0   0   ;       #   4   0   0   ;       #
0104540    4   0   0   ;       #   4   0   0   ;       #   4   0   0   ;
0104560        #   4   0   0   ;       #   4   0   0   ;       #   4   0
0104600    0   ;  \r  \t  \t   /   /       v   e   r       1   6   :  \r
0104620   \t  \t   1   6   ;       #   4   0   0   ;       #   4   0   0
0104640    ;       #   4   0   0   ;       #   4   0   0   ; 376 001  \0
0104660  274 322       #   4   0   0   ;       #   4   0   0   ;       #
0104700    4   0   0   ;       #   4   0   0   ;  \r  \t  \t   #   4   0
0104720    0   ;       #   4   0   0   ;       #   4   0   0   ;       #
0104740    4   0   0   ;       #   4   0   0   ;       #   4   0   0   ;
0104760        #   4   0   0   ;       #   4   0   0   ;  \r  \r  \t  \t
0105000    /   /       d   i   a   g       2   :  \r  \t  \t   2   ;    
0105020    #   2   0   0   ;       #   4   0   0   ;  \r  \t  \t   /   /
0105040        d   i   a   g       4   ;  \r  \t  \t   4   ;       #   1
0105060    0   0   ;       #   2   0   0   ;       #   4   0   0   ;    
0105100    #   1   0   0   0   ;  \r  \t  \t   /   /       d   i   a   g
0105120        8   :  \r  \t  \t   8   ;       #   2   0   ;       #   4
0105140    0   ;       #   1   0   0   ;       #   2   0   0   ;       #
0105160    4   0   0   ;       #   1   0   0   0   ;       #   2   0   0
0105200    0   ;       #   4   0   0   0   ;  \r  \t  \t   /   /       d
0105220    i   a   g       1   6   :  \r  \t  \t   1   6   ;       1   ;
0105240        2   ;       4   ;       #   1   0   ;       #   2   0   ;
0105260        # 376 001  \0   k 265   4   0   ;       #   1   0   0   ;
0105300        #   2   0   0   ;  \r  \t  \t   #   4   0   0   ;       #
0105320    1   0   0   0   ;       #   2   0   0   0   ;       #   4   0
0105340    0   0   ;       #   1   0   0   0   0   ;       #   2   0   0
0105360    0   0   ;       #   4   0   0   0   0   ;       #   1   0   0
0105400    0   0   0  \r  \t  \t   ]  \r  \r  \t   m   a   n   i   f   e
0105420    s   t       [  \r  \t  \t   d   o   t   1   =   0   ;       d
0105440    o   t   2   =   d   o   t   1   +   2   ;       d   o   t   4
0105460    =   d   o   t   2   +   3   ;       d   o   t   8   =   d   o
0105500    t   4   +   5   ;       d   o   t   1   6   =   d   o   t   8
0105520    +   9  \r  \t  \t   r   e   c   t   1   =   d   o   t   1   ;
0105540        r   e   c   t   2   =   d   o   t   2   ;       r   e   c
0105560    t   4   =   d   o   t   1   6   +   1   7   ;       r   e   c
0105600    t   8   =   r   e   c   t   4   +   5   ;       r   e   c   t
0105620    1   6   =   r   e   c   t   8   +   9  \r  \t  \t   h   o   r
0105640    1   =   d   o   t   1   ;       h   o   r   2   =   r   e   c
0105660    t   1   6   +   1   7   ; 376 001  \0   M 222       h   o   r
0105700    4   =   h   o   r   2   +   2   ;       h   o   r   8   =   h
0105720    o   r   4   +   2   ;       h   o   r   1   6   =   h   o   r
0105740    8   +   2  \r  \t  \t   v   e   r   1   =   d   o   t   1   ;
0105760        v   e   r   2   =   h   o   r   1   6   +   2   ;       v
0106000    e   r   4   =   v   e   r   2   +   3   ;       v   e   r   8
0106020    =   v   e   r   4   +   5   ;       v   e   r   1   6   =   v
0106040    e   r   8   +   9  \r  \t  \t   d   i   a   g   1   =   d   o
0106060    t   1   ;       d   i   a   g   2   =   v   e   r   1   6   +
0106100    1   7   ;       d   i   a   g   4   =   d   i   a   g   2   +
0106120    3   ;       d   i   a   g   8   =   d   i   a   g   4   +   5
0106140    ;       d   i   a   g   1   6   =   d   i   a   g   8   +   9
0106160   \r  \t  \t   ]  \r  \r  \t   l   e   t       b   r   u   s   h
0106200    I   n   d   e   x   T   a   b   l   e       =       t   a   b
0106220    l   e       [  \r  \t  \t   d   o   t   1   ;       d   o   t
0106240    2   ;       d   o   t   4   ;       d   o   t   8   ;       d
0106260    o   t   1   6   ;  \r  \t  \t   r   e   c   t 376 001  \0 333
0106300    D   1   ;       r   e   c   t   2   ;       r   e   c   t   4
0106320    ;       r   e   c   t   8   ;       r   e   c   t   1   6   ;
0106340   \r  \t  \t   h   o   r   1   ;       h   o   r   2   ;       h
0106360    o   r   4   ;       h   o   r   8   ;       h   o   r   1   6
0106400    ;  \r  \t  \t   v   e   r   1   ;       v   e   r   2   ;    
0106420    v   e   r   4   ;       v   e   r   8   ;       v   e   r   1
0106440    6   ;  \r  \t  \t   d   i   a   g   1   ;       d   i   a   g
0106460    2   ;       d   i   a   g   4   ;       d   i   a   g   8   ;
0106500        d   i   a   g   1   6   ;  \r  \t  \t   ]  \r  \r  \t   l
0106520    e   t       w   i   d   t   h   R   o   u   n   d   i   n   g
0106540    T   a   b   l   e       =       t   a   b   l   e       [  \r
0106560   \t  \t   0   ;       0   ;       1   ;       1   ;       2   ;
0106600        2   ;       2   ;       3   ;       3   ;       3   ;    
0106620    3   ;       3   ;       4   ;       4   ;       4   ;       4
0106640    ;       4       ]  \r  \r  \t   i   f       b   r   u   s   h
0106660    S   i   z   e       g   r       1   6       t   h   e   n    
0106700    b 376  \0 252 301  \n   r   u   s   h   S   i   z   e   =   1
0106720    6  \r  \t   i   f       (   b   r   u   s   h   S   h   a   p
0106740    e       l   s       0   )       %       (   b   r   u   s   h
0106760    S   h   a   p   e       g   r       4   )       t   h   e   n
0107000        b   r   u   s   h   S   h   a   p   e   =   0  \r  \t   r
0107020    e   s   u   l   t   i   s       (   b   r   u   s   h   T   a
0107040    b   l   e       +  \r  \t  \t   b   r   u   s   h   I   n   d
0107060    e   x   T   a   b   l   e   !   (   5   *   b   r   u   s   h
0107100    S   h   a   p   e       +       w   i   d   t   h   R   o   u
0107120    n   d   i   n   g   T   a   b   l   e   !   b   r   u   s   h
0107140    S   i   z   e   )   )  \r  \t   ]  \r  \r  \r  \r  \t  \t  \r
0107160  374                                                            
0107161