$ od -c -N 50000 [Indigo]<Chipmonk>route.dm!1
0000000  377  \0  \0   R   o   u   t   e   D   e   f   s   .   m   e   s
0000020    a  \0 373 233   ,   h 363  \0  \0 376 001  \0 376 205   -   -
0000040    r   o   u   t   e   d   e   f   s   .   m   e   s   a  \r  \r
0000060    D   I   R   E   C   T   O   R   Y           I   O   D   e   f
0000100    s   ;  \r  \r   R   o   u   t   e   D   e   f   s   :   D   E
0000120    F   I   N   I   T   I   O   N   S       =       B   E   G   I
0000140    N  \r  \r   -   -   R   O   U   T   E   D   E   F   S  \r  \r
0000160    C   i   r   c   u   i   t   :   T   Y   P   E   =   I   N   T
0000200    E   G   E   R   ;  \r   R   u   n   N   o   :   T   Y   P   E
0000220    =   I   N   T   E   G   E   R   ;  \r   b   i   g   R   u   n
0000240    :   R   u   n   N   o   =   1   0   0   0   0   ;  \r   E   v
0000260    e   n   t   N   o   :   T   Y   P   E   =   I   N   T   E   G
0000300    E   R   ;  \r   C   h   a   n   n   e   l   N   o   :   T   Y
0000320    P   E   =   I   N   T   E   G   E   R   ;  \r   I   n   t   e
0000340    r   N   o   :   T   Y   P   E   =   I   N   T   E   G   E   R
0000360    ;  \r   L   a   m   b   d   a   :   T   Y   P   E   =   I   N
0000400    T   E   G   E   R   ;  \r   b   i   g   L   a   m   b   d   a
0000420    :   L   a   m   b   d   a   =   3   2   0   0   0   ; 376 001
0000440   \0 335  \a  \r   N   e   t   N   o   :   T   Y   P   E   =   I
0000460    N   T   E   G   E   R   ;  \r   J   o   i   n   T   y   p   e
0000500    :   T   Y   P   E   =   I   N   T   E   G   E   R   ;  \r   I
0000520    n   t   e   r   T   y   p   e   :   T   Y   P   E   =   I   N
0000540    T   E   G   E   R   ;  \r   n   o   O   f   f   s   e   t   :
0000560    I   N   T   E   G   E   R   =   1   0   0   0   ;  \r  \r   C
0000600    o   o   r   d   L   :   T   Y   P   E   =   R   E   C   O   R
0000620    D   [   x   ,   y   :   I   N   T   E   G   E   R   _   0   ]
0000640    ;       -   -   i   n       l   a   m   b   d   a  \r   C   o
0000660    o   r   d   C   :   T   Y   P   E   =   R   E   C   O   R   D
0000700    [   x   ,   y   :   I   N   T   E   G   E   R   _   0   ]   ;
0000720        -   -   i   n       e   v   e   n   t   s  \r   n   i   l
0000740    G   :   L   i   n   k   =   [   ]   ;  \r   o   u   t   O   f
0000760    S   i   g   h   t   :   C   o   o   r   d   L   =   [   -   2
0001000    0   ,   -   2   0   ]   ;  \r  \r   B   o   o   l   P   t   r
0001020    :   T   Y   P   E   =   P   O   I   N   T   E   R       T   O
0001040        B   O 376 001  \0 321 200   O   L   E   A   N   ;  \r   P
0001060    r   o   c   e   d   u   r   e   D   e   s   c   r   i   p   t
0001100    o   r   :   T   Y   P   E   =   R   E   C   O   R   D   [   d
0001120    o   i   t   ,   p   r   i   n   t   I   t   :   P   R   O   C
0001140    E   D   U   R   E   ,   e   n   a   b   l   e   r   :   B   o
0001160    o   l   P   t   r   ]   ;  \r   W   h   e   r   e   :   T   Y
0001200    P   E   =   {   t   o   p   ,   b   o   t   t   o   m   ,   l
0001220    e   f   t   ,   r   i   g   h   t   }   _   t   o   p   ;  \r
0001240    W   h   a   t   :   T   Y   P   E   =   {   b   l   u   e   ,
0001260    r   e   d   ,   b   o   t   h   }   ;  \r   L   e   v   e   l
0001300    :   T   Y   P   E   =   {   r   e   d   ,   b   l   u   e   }
0001320    ;  \r   C   o   n   n   K   i   n   d   :   T   Y   P   E   =
0001340    {   n   o   n   e   ,   l   e   f   t   ,   r   i   g   h   t
0001360    ,   t   e   e   ,   e   d   g   e   }   _   n   o   n   e   ;
0001400   \r   S   i   d   e   :   T   Y   P   E   =   {   n   ,   s   ,
0001420    e   ,   w   ,   x   }   _   x   ;  \r   T   u   r   n   :   T
0001440    Y   P   E   =   {   s   e   , 376 001  \0 242 370   s   w   ,
0001460    n   e   ,   n   w   ,   h   o   r   ,   v   e   r   t   }   ;
0001500        -   -   r   e   l   a   t   i   v   e       t   o       i
0001520    n   t   e   r  \r   R   e   c   t   K   i   n   d   :   T   Y
0001540    P   E   =   {   n   o   n   e   ,   c   e   l   l   ,   c   h
0001560    a   n   n   e   l   ,   i   n   t   e   r   ,   c   u   l   D
0001600    e   S   a   c   R   ,   c   u   l   D   e   S   a   c   L   ,
0001620    b   o   x   ,   b   e   n   d   5   ,   b   e   n   d   9   ,
0001640    b   e   n   d   6   ,   b   e   n   d   1   0   ,   w   a   l
0001660    l   L   ,   w   a   l   l   R   }   ;  \r   O   r   i   e   n
0001700    t   :   T   Y   P   E   =   {   u   n   k   n   o   w   n   ,
0001720    h   o   r   ,   v   e   r   t   ,   i   n   t   e   r   ,   b
0001740    e   n   d   }   ;  \r   H   u   g   g   e   r   s   :   T   Y
0001760    P   E   =   R   E   C   O   R   D   [   c   h   ,   n   ,   s
0002000    ,   e   ,   w   :   S   i   d   e   _   x   ,   v   a   l   i
0002020    d   :   B   O   O   L   E   A   N   _   F   A   L   S   E   ]
0002040    ;  \r   L   e   v   e   l   e   r   s   :   T   Y 376 001  \0
0002060  313 301   P   E   =   R   E   C   O   R   D   [   n   ,   s   ,
0002100    e   ,   w   :   [   0   .   .   6   ]   _   0   ]   ;  \r   M
0002120    a   r   g   i   n   s   :   T   Y   P   E   =   R   E   C   O
0002140    R   D   [   n   ,   s   ,   e   ,   w   :   [   0   .   .   1
0002160    6   )   _   3   ]   ;  \r  \r   -   -   L   O   O   K       H
0002200    E   R   E       !   !  \r  \r   P   r   o   b   l   e   m   :
0002220    T   Y   P   E   =   R   E   C   O   R   D   [   c   e   l   l
0002240    s   :   C   e   l   l   L   i   s   t   P   t   r   _   N   I
0002260    L   ,       c   h   i   p   S   i   z   e   :   C   o   o   r
0002300    d   L   _   [   ]   ,  \r           w   i   r   e   l   i   s
0002320    t   :   N   e   t   L   i   s   t   P   t   r   _   N   I   L
0002340    ]   ;  \r  \r   R   e   c   t   a   n   g   l   e   :   T   Y
0002360    P   E   =   R   E   C   O   R   D   [  \r           p   o   s
0002400    :   C   o   o   r   d   L   ,                                
0002420                                                -   -   R   e   c
0002440    t   a   n   g   l   e   .   C   r   e   a   t   e   R   e   c
0002460    t   a 376 001  \0   7 177   n   g   l   e   ,       R   e   c
0002500    t   l   e   s   s   .   C   o   m   p   r   e   s   s  \r    
0002520        s   i   z   e   L   :   C   o   o   r   d   L   ,        
0002540                                                                -
0002560    -   R   e   c   t   a   n   g   l   e   .   C   r   e   a   t
0002600    e   R   e   c   t   a   n   g   l   e   ,       R   e   c   t
0002620    l   e   s   s   .   C   o   m   p   r   e   s   s  \r        
0002640    l   :   L   i   n   k   _   [   ]   ,                        
0002660                                                            -   -
0002700    R   e   c   t   l   e   s   s   .   C   r   e   a   t   e   S
0002720    e   c   o   n   d   a   r   y   L   i   s   t   s  \r        
0002740    n   ,   s   ,   e   ,   w   :   R   e   c   t   a   n   g   l
0002760    e   P   t   r   _   N   I   L   ,                       -   -
0003000    R   e   c   t   l   e   s   s   .   C   o   m   p   r   e   s
0003020    s  \r           n   w   ,   s   w   ,   n   e   ,   s   e   ,
0003040    e   n   ,   w   n   ,   e   s   ,   w   s   :   L   a   m   b
0003060    d   a   _   0   ,  \r     376 001  \0 241 335       n   S   o
0003100    u   r   c   e   ,   s   S   o   u   r   c   e   ,            
0003120                                                -   -   R   e   c
0003140    t   a   n   g   l   e   .   C   r   e   a   t   e   R   e   c
0003160    t   a   n   g   l   e  \r           w   S   o   u   r   c   e
0003200    ,   e   S   o   u   r   c   e   :   B   O   O   L   E   A   N
0003220    _   F   A   L   S   E   ,   -   -   R   e   c   t   a   n   g
0003240    l   e   .   C   r   e   a   t   e   R   e   c   t   a   n   g
0003260    l   e  \r           c   h   a   n   n   e   l   N   o   :   C
0003300    h   a   n   n   e   l   N   o   _   0   ,                    
0003320                -   -   R   e   c   t   a   n   g   l   e   .   C
0003340    r   e   a   t   e   R   e   c   t   a   n   g   l   e  \r    
0003360        s   i   z   e   C   :   C   o   o   r   d   C   ,        
0003400                                                                -
0003420    -   R   e   c   t   l   e   s   s   .   C   o   m   p   u   t
0003440    e   S   i   z   e   C  \r           j   u   n   c   t   i   o
0003460    n   :   J   u   n   c   t   i   o   n   P   t 376 001  \0 273
0003500    u   r   _   N   I   L   ,                       -   -   R   e
0003520    c   t   l   e   s   s   .   C   r   e   a   t   e   S   e   c
0003540    o   n   d   a   r   y   L   i   s   t   s  \r           e   v
0003560    e   n   t   s   :   E   v   e   n   t   L   i   s   t   P   t
0003600    r   _   N   I   L   ,                           -   -   R   e
0003620    c   t   a   n   g   l   e   .   A   d   d   E   v   e   n   t
0003640    ,       R   e   c   t   l   e   s   s   .   C   o   m   p   r
0003660    e   s   s  \r           o   r   i   e   n   t   :   O   r   i
0003700    e   n   t   _   u   n   k   n   o   w   n   ,                
0003720                    -   -   R   e   c   t   l   e   s   s   .   M
0003740    a   r   k   N   a   t   u   r   e   A   n   d   O   r   i   e
0003760    n   t   A   n   d   W   h   e   r   e  \r           n   a   t
0004000    u   r   e   :   R   e   c   t   K   i   n   d   _   n   o   n
0004020    e   ,                                       -   -   R   e   c
0004040    t   l   e   s   s   .   M   a   r   k   N   a   t   u   r   e
0004060    A   n   d   O   r   i   e   n   t   A   n   d   W   h   e   r
0004100    e 376 001  \0 315 037  \r           r   u   n   s   :   R   u
0004120    n   L   i   s   t   P   t   r   _   N   I   L   ,            
0004140                                -   -   R   u   n   s   .   A   d
0004160    d   R   u   n  \r           c   o   n   n   s   :   C   o   n
0004200    n   L   i   s   t   P   t   r   _   N   I   L   ,  \r        
0004220    l   e   v   e   l   e   r   s   :   L   e   v   e   l   e   r
0004240    s   ,                                                   -   -
0004260    R   e   c   t   l   e   s   s   .   *   M   a   k   e   L   e
0004300    v   e   l   e   r   s   *  \r           m   a   r   g   i   n
0004320    s   :   M   a   r   g   i   n   s   ,  \r           u   s   e
0004340    d   :   I   N   T   E   G   E   R   _   0   ,  \r           a
0004360    v   a   i   l   :   I   N   T   E   G   E   R   _   0   ,  \r
0004400            u   s   e   d   C   i   r   c   u   i   t   :   I   N
0004420    T   E   G   E   R   _   0  \r           ]   ;  \r  \r   E   v
0004440    e   n   t   :   T   Y   P   E   =   R   E   C   O   R   D   [
0004460   \r           i   n   d   e   x   :   I   N   T   E   G   E   R
0004500    _   -   1   ,         376 001  \0   H 257                    
0004520                                -   -   R   e   c   t   l   e   s
0004540    s   .   S   e   t   E   v   e   n   t   N   u   m   b   e   r
0004560    s  \r           c   i   r   c   u   i   t   :   C   i   r   c
0004600    u   i   t   _   0   ,                                        
0004620                -   -   R   e   c   t   a   n   g   l   e   .   A
0004640    d   d   E   v   e   n   t  \r           w   h   e   r   e   :
0004660    W   h   e   r   e   ,                                        
0004700                                        -   -   R   e   c   t   l
0004720    e   s   s   .   x   x   x  \r           s   i   d   e   :   S
0004740    i   d   e   ,                                                
0004760                                        -   -   R   e   c   t   a
0005000    n   g   l   e   .   A   d   d   E   v   e   n   t  \r        
0005020    l   e   v   e   l   :   W   h   a   t   _   b   o   t   h   ,
0005040   \r           o   f   f   s   e   t   :   L   a   m   b   d   a
0005060    _   n   o   O   f   f   s   e   t   ,                        
0005100            -   -   R   e   c   t   a   n   g 376 001  \0   \   Q
0005120    l   e   .   A   d   d   E   v   e   n   t   ,       R   e   c
0005140    t   l   e   s   s   .   A   d   j   u   s   t   O   f   f   s
0005160    e   t  \r           n   e   t   :   N   e   t   P   t   r   _
0005200    N   I   L   ,                                                
0005220                    -   -   R   e   c   t   a   n   g   l   e   .
0005240    A   d   d   E   v   e   n   t  \r           o   p   p   o   s
0005260    i   t   e   :   E   v   e   n   t   P   t   r   _   N   I   L
0005300    ,                                       -   -   R   e   c   t
0005320    l   e   s   s   .   S   e   t   E   v   e   n   t   N   u   m
0005340    b   e   r   s  \r           n   e   x   t   ,   p   r   e   v
0005360    :   E   v   e   n   t   P   t   r   _   N   I   L   ,        
0005400                            -   -   R   e   c   t   l   e   s   s
0005420    .   S   e   t   n   e   x   t   A   n   d   P   r   e   v   E
0005440    v   e   n   t   s  \r           c   o   n   n   :   C   o   n
0005460    n   P   t   r   _   N   I   L                                
0005500                                -   -   C   o   n   n   .   M   a
0005520  376 001  \0 346 325   k   e   E   d   g   e   C   o   n   n  \r
0005540            ]   ;  \r  \r   -   -           S   o   u   r   c   e
0005560    1       =       R   u   n   s   .   M   a   k   e   R   u   n
0005600    ,       R   u   n   s   .   F   i   x   U   p   J   u   n   c
0005620    t   i   o   n   W   i   t   h   I   n   t   e   r   s   ,    
0005640    C   r   o   s   s   e   s   .   S   p   l   i   t   C   o   n
0005660   \r  \r   R   u   n   :   T   Y   P   E   =   R   E   C   O   R
0005700    D   [  \r           c   i   r   c   u   i   t   :   C   i   r
0005720    c   u   i   t   _   0   ,                                    
0005740                    -   -   S   o   u   r   c   e   1  \r        
0005760    r   u   n   :   R   u   n   N   o   _   0   ,                
0006000                                                                -
0006020    -   R   u   n   s   .   A   s   s   i   g   n   C   u   l   D
0006040    e   S   a   c   /   T   o   p   D   o   w   n   /   B   o   t
0006060    t   o   m   U   p   R   u   n   N   o  \r           s   t   a
0006100    r   t   ,   e   n   d   :   E   v   e   n   t   N   o   _   0
0006120    ,                 376 001  \0 206 002                        
0006140        -   -   S   o   u   r   c   e   1  \r           s   t   a
0006160    r   t   O   f   f   ,   e   n   d   O   f   f   :   I   N   T
0006200    E   G   E   R   _   0   ,                       -   -   C   r
0006220    o   s   s   e   s   .   S   e   t   R   u   n   O   f   f   s
0006240    e   t  \r           c   h   a   n   :   R   e   c   t   a   n
0006260    g   l   e   P   t   r   _   N   I   L   ,                    
0006300                    -   -   S   o   u   r   c   e   1  \r        
0006320    p   a   t   h   :   P   a   t   h   P   t   r   _   N   I   L
0006340    ,                                                           -
0006360    -   R   u   n   s   .   M   a   k   e   R   u   n   /   F   i
0006400    x   U   p   J   u   n   c   t   i   o   n   W   i   t   h   I
0006420    n   t   e   r   s  \r           o   r   d   e   r   :   B   O
0006440    O   L   E   A   N   _   F   A   L   S   E   ,  \r           s
0006460    t   U   ,   s   t   D   ,   s   t   L   :   B   O   O   L   E
0006500    A   N   _   F   A   L   S   E   ,                       -   -
0006520    R   u   n   s   .   M   a   k   e   R 376 001  \0   Q 232   u
0006540    n   /   F   i   x   U   p   J   u   n   c   t   i   o   n   W
0006560    i   t   h   I   n   t   e   r   s   ,  \r           e   n   d
0006600    U   ,   e   n   d   D   ,   e   n   d   L   :   B   O   O   L
0006620    E   A   N   _   F   A   L   S   E   ,           -   -   R   u
0006640    n   s   .   M   a   k   e   R   u   n   /   F   i   x   U   p
0006660    J   u   n   c   t   i   o   n   W   i   t   h   I   n   t   e
0006700    r   s  \r           s   t   a   r   t   O   f   f   X   ,   e
0006720    n   d   O   f   f   X   :   L   a   m   b   d   a   _   0   ,
0006740   \r           s   t   a   r   t   C   o   n   n   ,   e   n   d
0006760    C   o   n   n   :   C   o   n   n   P   t   r   _   N   I   L
0007000            -   -   C   o   n   n   .   M   a   k   e   .   .   C
0007020    o   n   n   ,       C   r   o   s   s   e   s   .   S   p   l
0007040    i   t   C   o   n  \r           ]   ;  \r  \r   -   -       C
0007060    r   o   s   s   e   s   .   S   p   l   i   t   C   o   n   n
0007100        c   o   p   i   e   s       a       w   h   o   l   e    
0007120    c   o   n   n   ,       a   s       w   e   l   l       a 376
0007140  001  \0 310 314   s       c   h   a   n   g   i   n   g       f
0007160    i   e   l   d   s  \r  \r   C   o   n   n   :   T   Y   P   E
0007200    =   R   E   C   O   R   D   [  \r           c   i   r   c   u
0007220    i   t   :   C   i   r   c   u   i   t   _   0   ,            
0007240                                            -   -   C   o   n   n
0007260    .   M   a   k   e   .   .   C   o   n   n  \r           s   t
0007300    a   r   t   ,   e   n   d   :   R   u   n   N   o   _   0   ,
0007320                                                        -   -   C
0007340    o   n   n   .   M   a   k   e   .   .   C   o   n   n   ,    
0007360    C   r   o   s   s   e   s   .   S   p   l   i   t  \r        
0007400    e   v   e   n   t   :   E   v   e   n   t   N   o   _   0   ,
0007420                                                                -
0007440    -   C   o   n   n   .   M   a   k   e   .   .   C   o   n   n
0007460   \r           l   e   v   e   l   :   L   e   v   e   l   _   r
0007500    e   d   ,                                                    
0007520            -   -   C   o   n   n   .   F   i   x   J   o   g   C
0007540    o   l   o   r 376 001  \0 274   F  \r           s   t   a   r
0007560    t   K   i   n   d   ,   e   n   d   K   i   n   d   :   C   o
0007600    n   n   K   i   n   d   ,                   -   -   C   r   o
0007620    s   s   e   s   .   I   n   i   t   C   o   n   n   ,       C
0007640    r   o   s   s   e   s   .   S   p   l   i   t  \r           o
0007660    f   f   s   e   t   :   I   N   T   E   G   E   R   _   n   o
0007700    O   f   f   s   e   t   ,                               -   -
0007720    C   o   n   n   .   O   f   f   s   e   t   .   .  \r        
0007740    e   v   e   n   t   P   t   r   :   E   v   e   n   t   P   t
0007760    r   _   N   I   L   ,                                       -
0010000    -   C   o   n   n   .   M   a   k   e   .   .   C   o   n   n
0010020   \r           l   a   m   b   d   a   X   :   L   a   m   b   d
0010040    a   _   -   1   ,  \r           s   t   a   r   t   R   u   n
0010060    ,   e   n   d   R   u   n   :   R   u   n   P   t   r   _   N
0010100    I   L   ,                   -   -   C   o   n   n   .   M   a
0010120    k   e   .   .   C   o   n   n  \r           c   l   o   s   e
0010140    S   ,   c   l   o   s   e   E   : 376 001  \0 340 312   B   O
0010160    O   L   E   A   N   _   F   A   L   S   E                   -
0010200    -   C   o   n   n   .   F   i   x   J   o   g   C   o   l   o
0010220    r  \r           ]   ;  \r  \r   C   e   l   l   :   T   Y   P
0010240    E   =   R   E   C   O   R   D   [   s   i   z   e   L   ,   p
0010260    o   s   :   C   o   o   r   d   L   _   [   ]   ,       s   i
0010300    g   n   a   l   s   :   S   i   g   n   a   l   L   i   s   t
0010320    P   t   r   _   N   I   L   ,  \r                   c   e   l
0010340    l   N   o   :   I   N   T   E   G   E   R   _   0   ]   ;  \r
0010360    S   i   g   n   a   l   :   T   Y   P   E   =   R   E   C   O
0010400    R   D   [   n   a   m   e   :   S   T   R   I   N   G   _   N
0010420    I   L   ,   c   i   r   c   u   i   t   :   C   i   r   c   u
0010440    i   t   _   0   ,   s   i   d   e   :   S   i   d   e   _   n
0010460    ,  \r                   l   e   v   e   l   :   W   h   a   t
0010500    _   b   o   t   h   ,   o   f   f   s   e   t   :   L   a   m
0010520    b   d   a   _   0   ,   n   e   t   :   N   e   t   P   t   r
0010540    _   N   I   L   ]   ;  \r   N   e   t   :   T   Y   P 376 001
0010560   \0 356   \   E   =   R   E   C   O   R   D   [   n   u   m   b
0010600    e   r   :   C   i   r   c   u   i   t   _   0   ,   n   a   m
0010620    e   :   S   T   R   I   N   G   _   N   I   L   ,   n   e   t
0010640    N   o   :   N   e   t   N   o   _   0   ]   ;  \r   L   i   n
0010660    k   :   T   Y   P   E   =   R   E   C   O   R   D   [   c   h
0010700    a   n   n   e   l   :   R   e   c   t   a   n   g   l   e   P
0010720    t   r   _   N   I   L   ,   i   n   t   e   r   :   R   e   c
0010740    t   a   n   g   l   e   P   t   r   _   N   I   L   ]   ;  \r
0010760    T   o   p   o   l   o   g   y   :   T   Y   P   E   =   R   E
0011000    C   O   R   D   [   o   n   e   ,   t   w   o   :   R   e   c
0011020    t   a   n   g   l   e   P   t   r   _   N   I   L   ,   o   n
0011040    e   T   o   T   w   o   :   S   i   d   e   _   e   ]   ;  \r
0011060    P   a   t   h   :   T   Y   P   E   =   R   E   C   O   R   D
0011100    [   n   ,   s   ,   e   ,   w   :   P   a   t   h   P   t   r
0011120    _   N   I   L   ,  \r           c   h   a   n   n   e   l   :
0011140    R   e   c   t   a   n   g   l   e   P   t   r   _   N   I   L
0011160    ,       i 376 001  \0 330  \0   n   t   e   r   :   R   e   c
0011200    t   a   n   g   l   e   P   t   r   _   N   I   L   ,  \r    
0011220        i   n   d   e   x   :   E   v   e   n   t   P   t   r   _
0011240    N   I   L   ,       p   a   t   h   N   o   :   I   N   T   E
0011260    G   E   R   _   0   ,       s   t   a   r   t   e   d   :   B
0011300    O   O   L   E   A   N   _   F   A   L   S   E   ,  \r        
0011320    c   i   r   c   u   i   t   :   C   i   r   c   u   i   t   _
0011340    -   1   ,       w   i   r   e   :   I   W   i   r   e   P   t
0011360    r   ,       h   u   g   g   e   r   s   :   H   u   g   g   e
0011400    r   s   _   [   ]   ]   ;  \r   P   a   t   h   w   a   y   :
0011420    T   Y   P   E   =   R   E   C   O   R   D   [   c   i   r   c
0011440    u   i   t   :   C   i   r   c   u   i   t   _   0   ,   p   a
0011460    t   h   :   P   a   t   h   L   i   s   t   P   t   r   _   N
0011500    I   L   ]   ;  \r   S   i   l   i   c   o   n   :   T   Y   P
0011520    E   =   R   E   C   O   R   D   [   p   o   s   ,   p   o   s
0011540    2   :   C   o   o   r   d   L   _   [   0   ,   0   ]   ,   l
0011560    e   v   e   l   :   W   h   a 376 001  \0   u   ]   t   _   b
0011600    o   t   h   ,  \r           s   o   l   i   d   :   B   O   O
0011620    L   E   A   N   _   F   A   L   S   E   ,       c   i   r   c
0011640    u   i   t   :   C   i   r   c   u   i   t   _   0   ]   ;  \r
0011660    J   u   n   c   t   i   o   n   :   T   Y   P   E   =   R   E
0011700    C   O   R   D   [   i   w   i   r   e   s   :   I   W   i   r
0011720    e   L   i   s   t   P   t   r   _   N   I   L   ,   n   e   ,
0011740    n   w   ,   s   e   ,   s   w   :   B   r   i   d   g   e   _
0011760    [   ]   ,       b   r   i   d   g   e   N   S   ,   b   r   i
0012000    d   g   e   E   W   :   R   u   n   N   o   _   0   ]   ;  \r
0012020    I   W   i   r   e   :   T   Y   P   E   =   R   E   C   O   R
0012040    D   [   t   y   p   e   :   I   n   t   e   r   T   y   p   e
0012060    _   0   ,   e   y   ,   w   y   ,   n   x   ,   s   x   :   R
0012100    u   n   N   o   _   -   1   ,  \r           c   i   r   c   u
0012120    i   t   :   C   i   r   c   u   i   t   _   -   1   ,   h   :
0012140    H   u   g   g   e   r   s   _   [   ]   ,   b   e   1   ,   b
0012160    e   2   ,   b   n   1   ,   b   n   2   :   B   O 376 001  \0
0012200  304   b   O   L   E   A   N   _   F   A   L   S   E   ,  \r    
0012220        p   a   t   h   :   P   a   t   h   P   t   r   ]   ;  \r
0012240    B   r   i   d   g   e   :   T   Y   P   E   =   R   E   C   O
0012260    R   D   [   x   ,   y   :   R   u   n   N   o   _   -   1   ,
0012300    h   o   r   :   B   O   O   L   E   A   N   _   T   R   U   E
0012320    ]   ;  \r  \r   -   -   p   l   a   c   e       a   n   d    
0012340    g   r   i   d       i   n   t   e   r   n   a   l       t   o
0012360        P   a   t   h   s   ,       h   e   r   e       o   n   l
0012400    y       f   o   r       a   l   l   o   c   a   t   i   o   n
0012420   \r  \r   P   l   a   c   e   :   T   Y   P   E   =   R   E   C
0012440    O   R   D   [   p   o   s   :   C   o   o   r   d   L   _   [
0012460    0   ,   0   ]   ,   s   c   o   r   e   :   L   a   m   b   d
0012500    a   _   0   ,   c   i   r   c   u   i   t   :   C   i   r   c
0012520    u   i   t   _   0   ,  \r           b   a   c   k   ,   n   ,
0012540    s   ,   e   ,   w   :   P   l   a   c   e   P   t   r   _   N
0012560    I   L   ,       p   e   r   m   :   B   O   O   L   E   A   N
0012600    _   F 376 001  \0   u 223   A   L   S   E   ,       d   o   n
0012620    e   :   B   O   O   L   E   A   N   _   F   A   L   S   E   ,
0012640   \r           u   n   ,   u   s   ,   u   e   ,   u   w   :   R
0012660    e   c   t   a   n   g   l   e   P   t   r   _   N   I   L   ]
0012700    ;  \r   G   r   i   d   :   T   Y   P   E   =   R   E   C   O
0012720    R   D   [   a   ,   b   :   P   l   a   c   e   P   t   r   _
0012740    N   I   L   ,   a   b   o   v   e   ,   b   e   l   o   w   :
0012760    L   i   n   k   _   n   i   l   G   ,   h   o   r   ,   d   o
0013000    n   e   ,   h   i   ,   l   o   :   B   O   O   L   E   A   N
0013020    _   F   A   L   S   E   ]   ;  \r  \r  \r  \r   R   e   c   t
0013040    a   n   g   l   e   P   t   r   :   T   Y   P   E   =   L   O
0013060    N   G       P   O   I   N   T   E   R       T   O       R   e
0013100    c   t   a   n   g   l   e   _   N   I   L   ;  \r   C   o   n
0013120    n   P   t   r   :   T   Y   P   E   =   L   O   N   G       P
0013140    O   I   N   T   E   R       T   O       C   o   n   n   _   N
0013160    I   L   ;  \r   E   v   e   n   t   P   t   r   :   T   Y   P
0013200    E   =   L   O   N   G     376 001  \0 304 244   P   O   I   N
0013220    T   E   R       T   O       E   v   e   n   t   _   N   I   L
0013240    ;  \r   R   u   n   P   t   r   :   T   Y   P   E   =   L   O
0013260    N   G       P   O   I   N   T   E   R       T   O       R   u
0013300    n   _   N   I   L   ;  \r   C   e   l   l   P   t   r   :   T
0013320    Y   P   E   =   L   O   N   G       P   O   I   N   T   E   R
0013340        T   O       C   e   l   l   _   N   I   L   ;  \r   S   i
0013360    g   n   a   l   P   t   r   :   T   Y   P   E   =   L   O   N
0013400    G       P   O   I   N   T   E   R       T   O       S   i   g
0013420    n   a   l   _   N   I   L   ;  \r   N   e   t   P   t   r   :
0013440    T   Y   P   E   =   L   O   N   G       P   O   I   N   T   E
0013460    R       T   O       N   e   t   _   N   I   L   ;  \r   T   o
0013500    p   o   l   o   g   y   P   t   r   :   T   Y   P   E   =   L
0013520    O   N   G       P   O   I   N   T   E   R       T   O       T
0013540    o   p   o   l   o   g   y   _   N   I   L   ;  \r   P   a   t
0013560    h   P   t   r   :   T   Y   P   E   =   L   O   N   G       P
0013600    O   I   N   T   E   R       T   O       P   a 376 001  \0   N
0013620    u   t   h   _   N   I   L   ;  \r   P   a   t   h   w   a   y
0013640    P   t   r   :   T   Y   P   E   =   L   O   N   G       P   O
0013660    I   N   T   E   R       T   O       P   a   t   h   w   a   y
0013700    _   N   I   L   ;  \r   P   l   a   c   e   P   t   r   :   T
0013720    Y   P   E   =   L   O   N   G       P   O   I   N   T   E   R
0013740        T   O       P   l   a   c   e   _   N   I   L   ;  \r   G
0013760    r   i   d   P   t   r   :   T   Y   P   E   =   L   O   N   G
0014000        P   O   I   N   T   E   R       T   O       G   r   i   d
0014020    _   N   I   L   ;  \r   S   i   l   i   c   o   n   P   t   r
0014040    :   T   Y   P   E   =   L   O   N   G       P   O   I   N   T
0014060    E   R       T   O       S   i   l   i   c   o   n   _   N   I
0014100    L   ;  \r   J   u   n   c   t   i   o   n   P   t   r   :   T
0014120    Y   P   E   =   L   O   N   G       P   O   I   N   T   E   R
0014140        T   O       J   u   n   c   t   i   o   n   _   N   I   L
0014160    ;  \r   I   W   i   r   e   P   t   r   :   T   Y   P   E   =
0014200    L   O   N   G       P   O   I   N   T   E   R       T   O    
0014220    I 376 001  \0 271 235   W   i   r   e   _   N   I   L   ;  \r
0014240   \r   R   e   c   t   a   n   g   l   e   L   i   s   t   :   T
0014260    Y   P   E   =   R   E   C   O   R   D   [   h   :   R   e   c
0014300    t   a   n   g   l   e   P   t   r   ,   t   :   R   e   c   t
0014320    a   n   g   l   e   L   i   s   t   P   t   r   ]   ;  \r   C
0014340    o   n   n   L   i   s   t   :   T   Y   P   E   =   R   E   C
0014360    O   R   D   [   h   :   C   o   n   n   P   t   r   ,   t   :
0014400    C   o   n   n   L   i   s   t   P   t   r   ]   ;  \r   E   v
0014420    e   n   t   L   i   s   t   :   T   Y   P   E   =   R   E   C
0014440    O   R   D   [   h   :   E   v   e   n   t   P   t   r   ,   t
0014460    :   E   v   e   n   t   L   i   s   t   P   t   r   ]   ;  \r
0014500    R   u   n   L   i   s   t   :   T   Y   P   E   =   R   E   C
0014520    O   R   D   [   h   :   R   u   n   P   t   r   ,   t   :   R
0014540    u   n   L   i   s   t   P   t   r   ]   ;  \r   C   e   l   l
0014560    L   i   s   t   :   T   Y   P   E   =   R   E   C   O   R   D
0014600    [   h   :   C   e   l   l   P   t   r   ,   t   :   C   e   l
0014620    l   L   i   s   t   P 376 001  \0 264   "   t   r   ]   ;  \r
0014640    S   i   g   n   a   l   L   i   s   t   :   T   Y   P   E   =
0014660    R   E   C   O   R   D   [   h   :   S   i   g   n   a   l   P
0014700    t   r   ,   t   :   S   i   g   n   a   l   L   i   s   t   P
0014720    t   r   ]   ;  \r   N   e   t   L   i   s   t   :   T   Y   P
0014740    E   =   R   E   C   O   R   D   [   h   :   N   e   t   P   t
0014760    r   ,   t   :   N   e   t   L   i   s   t   P   t   r   ]   ;
0015000   \r   T   o   p   o   l   o   g   y   L   i   s   t   :   T   Y
0015020    P   E   =   R   E   C   O   R   D   [   h   :   T   o   p   o
0015040    l   o   g   y   P   t   r   ,   t   :   T   o   p   o   l   o
0015060    g   y   L   i   s   t   P   t   r   ]   ;  \r   P   a   t   h
0015100    L   i   s   t   :   T   Y   P   E   =   R   E   C   O   R   D
0015120    [   h   :   P   a   t   h   P   t   r   ,   t   :   P   a   t
0015140    h   L   i   s   t   P   t   r   ]   ;  \r   P   a   t   h   w
0015160    a   y   L   i   s   t   :   T   Y   P   E   =   R   E   C   O
0015200    R   D   [   h   :   P   a   t   h   w   a   y   P   t   r   ,
0015220    t   :   P   a   t   h   w   a   y   L   i 376 001  \0 037   b
0015240    s   t   P   t   r   ]   ;  \r   P   l   a   c   e   L   i   s
0015260    t   :   T   Y   P   E   =   R   E   C   O   R   D   [   h   :
0015300    P   l   a   c   e   P   t   r   ,   t   :   P   l   a   c   e
0015320    L   i   s   t   P   t   r   ]   ;  \r   G   r   i   d   L   i
0015340    s   t   :   T   Y   P   E   =   R   E   C   O   R   D   [   h
0015360    :   G   r   i   d   P   t   r   ,   t   :   G   r   i   d   L
0015400    i   s   t   P   t   r   ]   ;  \r   S   i   l   i   c   o   n
0015420    L   i   s   t   :   T   Y   P   E   =   R   E   C   O   R   D
0015440    [   h   :   S   i   l   i   c   o   n   P   t   r   ,   t   :
0015460    S   i   l   i   c   o   n   L   i   s   t   P   t   r   ]   ;
0015500   \r   I   W   i   r   e   L   i   s   t   :   T   Y   P   E   =
0015520    R   E   C   O   R   D   [   h   :   I   W   i   r   e   P   t
0015540    r   ,   t   :   I   W   i   r   e   L   i   s   t   P   t   r
0015560    ]   ;  \r  \r   R   e   c   t   a   n   g   l   e   L   i   s
0015600    t   P   t   r   :   T   Y   P   E   =   L   O   N   G       P
0015620    O   I   N   T   E   R       T   O       R   e   c   t   a   n
0015640  376 001  \0 255 321   g   l   e   L   i   s   t   ;  \r   C   o
0015660    n   n   L   i   s   t   P   t   r   :   T   Y   P   E   =   L
0015700    O   N   G       P   O   I   N   T   E   R       T   O       C
0015720    o   n   n   L   i   s   t   ;  \r   E   v   e   n   t   L   i
0015740    s   t   P   t   r   :   T   Y   P   E   =   L   O   N   G    
0015760    P   O   I   N   T   E   R       T   O       E   v   e   n   t
0016000    L   i   s   t   ;  \r   R   u   n   L   i   s   t   P   t   r
0016020    :   T   Y   P   E   =   L   O   N   G       P   O   I   N   T
0016040    E   R       T   O       R   u   n   L   i   s   t   ;  \r   C
0016060    e   l   l   L   i   s   t   P   t   r   :   T   Y   P   E   =
0016100    L   O   N   G       P   O   I   N   T   E   R       T   O    
0016120    C   e   l   l   L   i   s   t   ;  \r   S   i   g   n   a   l
0016140    L   i   s   t   P   t   r   :   T   Y   P   E   =   L   O   N
0016160    G       P   O   I   N   T   E   R       T   O       S   i   g
0016200    n   a   l   L   i   s   t   ;  \r   N   e   t   L   i   s   t
0016220    P   t   r   :   T   Y   P   E   =   L   O   N   G       P   O
0016240    I   N   T   E   R 376 001  \0   W 264       T   O       N   e
0016260    t   L   i   s   t   ;  \r   T   o   p   o   l   o   g   y   L
0016300    i   s   t   P   t   r   :   T   Y   P   E   =   L   O   N   G
0016320        P   O   I   N   T   E   R       T   O       T   o   p   o
0016340    l   o   g   y   L   i   s   t   ;  \r   P   a   t   h   L   i
0016360    s   t   P   t   r   :   T   Y   P   E   =   L   O   N   G    
0016400    P   O   I   N   T   E   R       T   O       P   a   t   h   L
0016420    i   s   t   ;  \r   P   a   t   h   w   a   y   L   i   s   t
0016440    P   t   r   :   T   Y   P   E   =   L   O   N   G       P   O
0016460    I   N   T   E   R       T   O       P   a   t   h   w   a   y
0016500    L   i   s   t   ;  \r   P   l   a   c   e   L   i   s   t   P
0016520    t   r   :   T   Y   P   E   =   L   O   N   G       P   O   I
0016540    N   T   E   R       T   O       P   l   a   c   e   L   i   s
0016560    t   ;  \r   G   r   i   d   L   i   s   t   P   t   r   :   T
0016600    Y   P   E   =   L   O   N   G       P   O   I   N   T   E   R
0016620        T   O       G   r   i   d   L   i   s   t   ;  \r   S   i
0016640    l   i   c   o   n   L   i   s   t   P 376 001  \0 275   o   t
0016660    r   :   T   Y   P   E   =   L   O   N   G       P   O   I   N
0016700    T   E   R       T   O       S   i   l   i   c   o   n   L   i
0016720    s   t   ;  \r   I   W   i   r   e   L   i   s   t   P   t   r
0016740    :   T   Y   P   E   =   L   O   N   G       P   O   I   N   T
0016760    E   R       T   O       I   W   i   r   e   L   i   s   t   ;
0017000   \r  \r   C   t   l   P   r   o   c   :   T   Y   P   E   =   P
0017020    R   O   C   E   D   U   R   E       R   E   T   U   R   N   S
0017040    [   I   N   T   E   G   E   R   ]   ;  \r  \r  \r   -   -    
0017060    E   N   D       O   F       T   Y   P   E       D   E   C   L
0017100    A   R   A   T   I   O   N   S  \r  \r   -   -   C   t   l    
0017120    P   r   o   c   s       c   a   l   l   e   d       b   y    
0017140    R   o   u   t   e   C   o   n   t   r   o   l  \r  \r   C   r
0017160    e   a   t   e   C   e   l   l   s   :   C   t   l   P   r   o
0017200    c   ;   -   -   R   o   u   t   e   C   e   l   l   s  \r   C
0017220    r   e   a   t   e   R   e   c   t   a   n   g   l   e   s   :
0017240    C   t   l   P   r   o   c   ;   -   -   R   o   u   t   e 376
0017260  001  \0 322 253   R   e   c   t   a   n   g   l   e  \r   R   e
0017300    c   t   L   e   s   s   :   C   t   l   P   r   o   c   ;    
0017320    -   -   R   o   u   t   e   R   e   c   t   L   e   s   s  \r
0017340    M   a   k   e   L   e   v   e   l   e   r   s   :   C   t   l
0017360    P   r   o   c   ;       -   -   R   o   u   t   e   R   e   c
0017400    t   L   e   s   s  \r   C   r   e   a   t   e   T   o   p   o
0017420    l   o   g   y   :   C   t   l   P   r   o   c   ;   -   -   R
0017440    o   u   t   e   T   o   p   o   l   o   g   y  \r   C   h   a
0017460    n   n   e   l   L   e   v   e   l   R   o   u   t   i   n   g
0017500    :   C   t   l   P   r   o   c   ;   -   -   R   o   u   t   e
0017520    P   a   t   h   s   2  \r   M   a   k   e   H   u   g   s   :
0017540    C   t   l   P   r   o   c   ;   -   -   R   o   u   t   e   H
0017560    u   g   s  \r   R   o   u   t   e   I   n   t   e   r   s   e
0017600    c   t   i   o   n   s   :   C   t   l   P   r   o   c   ;   -
0017620    -   R   o   u   t   e   I   n   t   e   r  \r   T   h   e   M
0017640    a   i   n   S   h   o   w   I   s   R   o   u   t   e   R   u
0017660    n   s   I   n 376 001  \0 313 345   C   h   a   n   n   e   l
0017700    s   :   C   t   l   P   r   o   c   ;   -   -   R   o   u   t
0017720    e   R   u   n   s  \r   I   n   s   t   a   l   l   C   r   o
0017740    s   s   C   h   a   n   n   e   l   C   o   n   n   e   c   t
0017760    i   o   n   s   :   C   t   l   P   r   o   c   ;   -   -   R
0020000    o   u   t   e   C   o   n   n  \r   I   n   s   t   a   l   l
0020020    I   n   t   e   r   n   a   l   C   o   n   t   a   c   t   s
0020040    :   C   t   l   P   r   o   c   ;   -   -   R   o   u   t   e
0020060    C   r   o   s   s   e   s  \r   D   o   S   i   l   i   c   o
0020100    n   :   C   t   l   P   r   o   c   ;       -   -   R   o   u
0020120    t   e   S   i   l   i   c   o   n  \r   C   h   e   c   k   L
0020140    a   y   o   u   t   :   C   t   l   P   r   o   c   ;       -
0020160    -   R   o   u   t   e   C   h   e   c   k   e   r  \r  \r   -
0020200    -   m   i   s   c  \r  \r   R   e   d   u   c   e   P   a   t
0020220    h   :   P   R   O   C   E   D   U   R   E   ;   -   -   R   o
0020240    u   t   e   P   a   t   h   s   1  \r   G   e   t   I   n   p
0020260    u   t   :   P   R   O   C   E   D 376 001  \0 257 177   U   R
0020300    E   ;       -   -   f   r   o   m       R   o   u   t   e   P
0020320    a   r   s   e  \r  \r   -   -   t   h   e       f   o   l   l
0020340    o   w   i   n   g       a   r   e       a   l   l       i   m
0020360    p   l   e   m   e   n   t   e   d       i   n       u   t   i
0020400    l   i   t   i   e   s  \r  \r   E   n   u   m   e   r   a   t
0020420    e   C   h   a   n   n   e   l   s   :   P   R   O   C   E   D
0020440    U   R   E   [   P   R   O   C   E   D   U   R   E   [   R   e
0020460    c   t   a   n   g   l   e   P   t   r   ]   ]   ;  \r   E   n
0020500    u   m   e   r   a   t   e   I   n   t   e   r   s   :   P   R
0020520    O   C   E   D   U   R   E   [   P   R   O   C   E   D   U   R
0020540    E   [   R   e   c   t   a   n   g   l   e   P   t   r   ]   ]
0020560    ;  \r   E   n   u   m   e   r   a   t   e   R   e   c   t   a
0020600    n   g   l   e   s   :   P   R   O   C   E   D   U   R   E   [
0020620    P   R   O   C   E   D   U   R   E   [   R   e   c   t   a   n
0020640    g   l   e   P   t   r   ]   ]   ;  \r   E   n   u   m   e   r
0020660    a   t   e   S   i   g   n   a   l   s   :   P   R   O 376 001
0020700   \0   s 267   C   E   D   U   R   E   [   c   :   C   e   l   l
0020720    P   t   r   ,   x   :   P   R   O   C   E   D   U   R   E   [
0020740    C   e   l   l   P   t   r   ,   S   i   g   n   a   l   P   t
0020760    r   ]   ]   ;  \r   E   n   u   m   e   r   a   t   e   C   e
0021000    l   l   s   :   P   R   O   C   E   D   U   R   E   [   P   R
0021020    O   C   E   D   U   R   E   [   C   e   l   l   P   t   r   ]
0021040    ]   ;  \r   E   n   u   m   e   r   a   t   e   C   o   n   n
0021060    s   :   P   R   O   C   E   D   U   R   E   [   R   e   c   t
0021100    a   n   g   l   e   P   t   r   ,   P   R   O   C   E   D   U
0021120    R   E   [   R   e   c   t   a   n   g   l   e   P   t   r   ,
0021140    C   o   n   n   P   t   r   ]   ]   ;  \r   E   n   u   m   e
0021160    r   a   t   e   E   v   e   n   t   s   :   P   R   O   C   E
0021200    D   U   R   E   [   R   e   c   t   a   n   g   l   e   P   t
0021220    r   ,   P   R   O   C   E   D   U   R   E   [   R   e   c   t
0021240    a   n   g   l   e   P   t   r   ,   E   v   e   n   t   P   t
0021260    r   ]   ]   ;  \r   E   n   u   m   e   r   a   t   e   R   u
0021300    n   s   : 376 001  \0 006  \r   P   R   O   C   E   D   U   R
0021320    E   [   R   e   c   t   a   n   g   l   e   P   t   r   ,   P
0021340    R   O   C   E   D   U   R   E   [   R   e   c   t   a   n   g
0021360    l   e   P   t   r   ,   R   u   n   P   t   r   ]   ]   ;  \r
0021400    E   n   u   m   e   r   a   t   e   A   l   l   S   i   g   n
0021420    a   l   s   :   P   R   O   C   E   D   U   R   E   [   P   R
0021440    O   C   E   D   U   R   E   [   C   e   l   l   P   t   r   ,
0021460    S   i   g   n   a   l   P   t   r   ]   ]   ;  \r   E   n   u
0021500    m   e   r   a   t   e   A   l   l   R   u   n   s   :   P   R
0021520    O   C   E   D   U   R   E   [   c   :   P   R   O   C   E   D
0021540    U   R   E   [   R   e   c   t   a   n   g   l   e   P   t   r
0021560    ,   R   u   n   P   t   r   ]   ]   ;  \r   E   n   u   m   e
0021600    r   a   t   e   A   l   l   C   o   n   n   s   :   P   R   O
0021620    C   E   D   U   R   E   [   c   a   l   l   :   P   R   O   C
0021640    E   D   U   R   E   [   R   e   c   t   a   n   g   l   e   P
0021660    t   r   ,   C   o   n   n   P   t   r   ]   ]   ;  \r   E   n
0021700    u   m   e   r   a   t   e   S 376 001  \0 360 300   i   l   i
0021720    c   o   n   :   P   R   O   C   E   D   U   R   E   [   c   a
0021740    l   l   :   P   R   O   C   E   D   U   R   E   [   S   i   l
0021760    i   c   o   n   P   t   r   ]   ]   ;  \r  \r  \r  \r   I   n
0022000    i   t   S   t   o   r   a   g   e   ,   R   e   t   u   r   n
0022020    S   t   o   r   a   g   e   :   P   R   O   C   E   D   U   R
0022040    E   ;  \r   A   l   l   o   c   a   t   e   L   i   s   t   :
0022060    P   R   O   C   E   D   U   R   E       R   E   T   U   R   N
0022100    S   [   L   O   N   G       P   O   I   N   T   E   R   ]   ;
0022120   \r   A   l   l   o   c   a   t   e   R   e   c   t   a   n   g
0022140    l   e   :   P   R   O   C   E   D   U   R   E       R   E   T
0022160    U   R   N   S   [   R   e   c   t   a   n   g   l   e   P   t
0022200    r   ]   ;  \r   -   -   A   l   l   o   c   a   t   e   C   h
0022220    a   n   n   e   l   :   P   R   O   C   E   D   U   R   E    
0022240    R   E   T   U   R   N   S   [   C   h   a   n   n   e   l   P
0022260    t   r   ]   ;  \r   A   l   l   o   c   a   t   e   E   v   e
0022300    n   t   :   P   R   O   C   E   D   U   R   E     376 001  \0
0022320    T 277   R   E   T   U   R   N   S   [   E   v   e   n   t   P
0022340    t   r   ]   ;  \r   A   l   l   o   c   a   t   e   R   u   n
0022360    :   P   R   O   C   E   D   U   R   E       R   E   T   U   R
0022400    N   S   [   R   u   n   P   t   r   ]   ;  \r   A   l   l   o
0022420    c   a   t   e   C   o   n   n   :   P   R   O   C   E   D   U
0022440    R   E       R   E   T   U   R   N   S   [   C   o   n   n   P
0022460    t   r   ]   ;  \r   A   l   l   o   c   a   t   e   C   e   l
0022500    l   :   P   R   O   C   E   D   U   R   E       R   E   T   U
0022520    R   N   S   [   C   e   l   l   P   t   r   ]   ;  \r   A   l
0022540    l   o   c   a   t   e   S   i   g   n   a   l   :   P   R   O
0022560    C   E   D   U   R   E       R   E   T   U   R   N   S   [   S
0022600    i   g   n   a   l   P   t   r   ]   ;  \r   A   l   l   o   c
0022620    a   t   e   N   e   t   :   P   R   O   C   E   D   U   R   E
0022640        R   E   T   U   R   N   S   [   N   e   t   P   t   r   ]
0022660    ;  \r   A   l   l   o   c   a   t   e   T   o   p   o   l   o
0022700    g   y   :   P   R   O   C   E   D   U   R   E       R   E   T
0022720    U   R 376 001  \0 225 352   N   S   [   T   o   p   o   l   o
0022740    g   y   P   t   r   ]   ;  \r   A   l   l   o   c   a   t   e
0022760    P   a   t   h   w   a   y   :   P   R   O   C   E   D   U   R
0023000    E       R   E   T   U   R   N   S   [   P   a   t   h   w   a
0023020    y   P   t   r   ]   ;  \r   A   l   l   o   c   a   t   e   P
0023040    l   a   c   e   :   P   R   O   C   E   D   U   R   E       R
0023060    E   T   U   R   N   S   [   P   l   a   c   e   P   t   r   ]
0023100    ;  \r   A   l   l   o   c   a   t   e   P   a   t   h   :   P
0023120    R   O   C   E   D   U   R   E       R   E   T   U   R   N   S
0023140    [   P   a   t   h   P   t   r   ]   ;  \r   A   l   l   o   c
0023160    a   t   e   G   r   i   d   :   P   R   O   C   E   D   U   R
0023200    E       R   E   T   U   R   N   S   [   G   r   i   d   P   t
0023220    r   ]   ;  \r   A   l   l   o   c   a   t   e   S   i   l   i
0023240    c   o   n   :   P   R   O   C   E   D   U   R   E       R   E
0023260    T   U   R   N   S   [   S   i   l   i   c   o   n   P   t   r
0023300    ]   ;  \r   A   l   l   o   c   a   t   e   I   W   i   r   e
0023320    :   P   R   O   C   E   D 376 001  \0 375 374   U   R   E    
0023340    R   E   T   U   R   N   S   [   I   W   i   r   e   P   t   r
0023360    ]   ;  \r   A   l   l   o   c   a   t   e   J   u   n   c   t
0023400    i   o   n   :   P   R   O   C   E   D   U   R   E       R   E
0023420    T   U   R   N   S   [   J   u   n   c   t   i   o   n   P   t
0023440    r   ]   ;  \r  \r   F   r   e   e   L   i   s   t   :   P   R
0023460    O   C   E   D   U   R   E   [   L   O   N   G       P   O   I
0023500    N   T   E   R   ]   ;  \r   F   r   e   e   P   l   a   c   e
0023520    :   P   R   O   C   E   D   U   R   E   [   P   l   a   c   e
0023540    P   t   r   ]   ;  \r   F   r   e   e   P   a   t   h   :   P
0023560    R   O   C   E   D   U   R   E   [   P   a   t   h   P   t   r
0023600    ]   ;  \r   F   r   e   e   P   a   t   h   w   a   y   :   P
0023620    R   O   C   E   D   U   R   E   [   P   a   t   h   w   a   y
0023640    P   t   r   ]   ;  \r   F   r   e   e   G   r   i   d   :   P
0023660    R   O   C   E   D   U   R   E   [   G   r   i   d   P   t   r
0023700    ]   ;  \r   F   r   e   e   R   u   n   :   P   R   O   C   E
0023720    D   U   R   E   [   R   u   n   P   t   r   ] 376 001  \0 326
0023740    D   ;  \r   F   r   e   e   C   o   n   n   :   P   R   O   C
0023760    E   D   U   R   E   [   C   o   n   n   P   t   r   ]   ;  \r
0024000    F   r   e   e   J   u   n   c   t   i   o   n   :   P   R   O
0024020    C   E   D   U   R   E   [   J   u   n   c   t   i   o   n   P
0024040    t   r   ]   ;  \r   F   r   e   e   S   i   l   i   c   o   n
0024060    :   P   R   O   C   E   D   U   R   E   [   S   i   l   i   c
0024100    o   n   P   t   r   ]   ;  \r  \r   R   e   t   u   r   n   :
0024120    P   R   O   C   E   D   U   R   E   ;  \r   S   h   o   w   L
0024140    a   b   e   l   :   P   R   O   C   E   D   U   R   E   [   S
0024160    T   R   I   N   G   ]   ;  \r   S   h   o   w   S   t   r   i
0024200    n   g   :   P   R   O   C   E   D   U   R   E   [   S   T   R
0024220    I   N   G   ]   ;  \r   S   h   o   w   C   h   a   r   :   P
0024240    R   O   C   E   D   U   R   E   [   C   H   A   R   A   C   T
0024260    E   R   ]   ;  \r   S   h   o   w   D   e   c   i   m   a   l
0024300    :   P   R   O   C   E   D   U   R   E   [   i   :   I   N   T
0024320    E   G   E   R   ,   s   :   S   T   R   I   N   G   _   N   I
0024340    L 376 001  \0 215 254   ]   ;  \r   S   h   o   w   C   i   r
0024360    c   u   i   t   :   P   R   O   C   E   D   U   R   E   [   c
0024400    :   C   i   r   c   u   i   t   ]       R   E   T   U   R   N
0024420    S   [   C   H   A   R   A   C   T   E   R   ]   ;  \r   S   a
0024440    m   e   S   t   r   i   n   g   :   P   U   B   L   I   C    
0024460    P   R   O   C   E   D   U   R   E   [   a   ,   b   :   S   T
0024500    R   I   N   G   ]       R   E   T   U   R   N   S   [   B   O
0024520    O   L   E   A   N   ]   ;  \r   W   r   i   t   e   P   o   i
0024540    n   t   :   P   R   O   C   E   D   U   R   E   [   x   ,   y
0024560    :   I   N   T   E   G   E   R   ]   ;  \r   S   h   o   w   P
0024600    o   i   n   t   :   P   R   O   C   E   D   U   R   E   [   s
0024620    :   S   T   R   I   N   G   ,   x   ,   y   :   I   N   T   E
0024640    G   E   R   ]   ;  \r   S   h   o   w   W   i   r   e   :   P
0024660    R   O   C   E   D   U   R   E   [   S   i   l   i   c   o   n
0024700    P   t   r   ]   ;  \r   C   l   e   a   r   :   P   R   O   C
0024720    E   D   U   R   E   [   s   :   S   T   R   I   N   G   ]   ;
0024740   \r   M   a   k   e   T 376 001  \0   a 270   y   p   e   :   P
0024760    R   O   C   E   D   U   R   E   [   n   ,   e   ,   s   ,   w
0025000    :   B   O   O   L   E   A   N   ]       R   E   T   U   R   N
0025020    S   [   I   n   t   e   r   T   y   p   e   ]   ;  \r  \r   -
0025040    -   f   r   o   m       R   o   u   t   e   M   a   k   e   B
0025060    l   u   e  \r  \r   M   a   k   e   B   l   u   e   :   P   R
0025100    O   C   E   D   U   R   E   ;  \r  \r   -   -   f   r   o   m
0025120        R   o   u   t   e   S   i   l   i   c   o   n  \r  \r   M
0025140    a   k   e   B   l   u   e   W   i   r   e   :   P   R   O   C
0025160    E   D   U   R   E   [   h   o   r   :   B   O   O   L   E   A
0025200    N   ,   x   ,   y   ,   l   :   L   a   m   b   d   a   ]   ;
0025220   \r   M   a   k   e   R   e   d   W   i   r   e   :   P   R   O
0025240    C   E   D   U   R   E   [   h   o   r   :   B   O   O   L   E
0025260    A   N   ,   x   ,   y   ,   l   :   L   a   m   b   d   a   ]
0025300    ;  \r   M   a   k   e   C   o   n   t   a   c   t   :   P   R
0025320    O   C   E   D   U   R   E   [   x   ,   y   :   L   a   m   b
0025340    d   a   ]   ;  \r  \r   -   -   f   r   o 376 001  \0 273 326
0025360    m       R   o   u   t   e   I   n   t   e   r  \r  \r   I   n
0025400    t   e   r   S   i   l   i   c   o   n   :   P   R   O   C   E
0025420    D   U   R   E   [   i   n   t   e   r   :   R   e   c   t   a
0025440    n   g   l   e   P   t   r   ]   ;  \r   W   h   e   r   e   I
0025460    s   :   P   R   O   C   E   D   U   R   E   [   P   a   t   h
0025500    P   t   r   ,   S   i   d   e   ,   R   u   n   N   o   ]    
0025520    R   E   T   U   R   N   S   [   R   u   n   N   o   ]   ;  \r
0025540   \r   -   -   f   r   o   m       R   o   u   t   e   C   h   i
0025560    p   m   o   n   k   P   l   o   t  \r  \r   S   t   a   r   t
0025600    P   l   o   t   ,   E   n   d   P   l   o   t   :   P   R   O
0025620    C   E   D   U   R   E   ;  \r   P   l   o   t   C   e   l   l
0025640    :   P   R   O   C   E   D   U   R   E   [   C   e   l   l   P
0025660    t   r   ]   ;  \r   P   l   o   t   B   l   u   e   W   i   r
0025700    e   :   P   R   O   C   E   D   U   R   E   [   h   o   r   :
0025720    B   O   O   L   E   A   N   ,   x   ,   y   ,   l   :   L   a
0025740    m   b   d   a   ]   ;  \r   P   l   o   t   R   e   d   W   i
0025760  376 001  \0 233 276   r   e   :   P   R   O   C   E   D   U   R
0026000    E   [   h   o   r   :   B   O   O   L   E   A   N   ,   x   ,
0026020    y   ,   l   :   L   a   m   b   d   a   ]   ;  \r   P   l   o
0026040    t   B   l   u   e   R   e   d   C   o   n   t   a   c   t   :
0026060    P   R   O   C   E   D   U   R   E   [   x   ,   y   :   L   a
0026100    m   b   d   a   ]   ;  \r   G   e   t   C   h   i   p   m   o
0026120    n   k   S   t   r   i   n   g   :   P   R   O   C   E   D   U
0026140    R   E   [   r   e   s   u   l   t   ,   p   r   o   m   p   t
0026160    1   :   S   T   R   I   N   G   ,   p   r   o   m   p   t   2
0026200    ,   p   r   o   m   p   t   3   :   S   T   R   I   N   G   _
0026220    N   I   L   ]   ;  \r   I   n   t   e   r   r   u   p   t   :
0026240    E   R   R   O   R   ;       -   -   r   a   i   s   e   d    
0026260    b   y       G   e   t   C   h   i   p   m   o   n   k   S   t
0026300    r   i   n   g       w   h   e   n       p   u   s   h       t
0026320    h   e       r   i   g   h   t   m   o   s   t  \r            
0026340                                                            -   -
0026360    u   n   l   a   b 376 001  \0   ~ 301   e   l   e   d       k
0026400    e   y   ,       a   s   k   i   n   g       t   o       a   b
0026420    o   r   t   ;  \r  \r   a   l   l   P   a   t   h   s   :   P
0026440    a   t   h   L   i   s   t   P   t   r   ;       -   -   b   e
0026460    t   w   e   e   n       p   a   t   h   s   1       a   n   d
0026500        p   a   t   h   s   2  \r  \r   -   -   a   l   l       g
0026520    l   o   b   a   l       v   a   r   i   a   b   l   e   s    
0026540    a   r   e       i   m   p   l   e   m   e   n   t   e   d    
0026560    i   n       U   t   i   l   i   t   i   e   s  \r  \r   c   h
0026600    a   n   n   e   l   s   :   R   e   c   t   a   n   g   l   e
0026620    L   i   s   t   P   t   r   ;                   -   -   R   e
0026640    c   t   l   e   s   s   .   M   a   k   e   S   e   c   o   n
0026660    d   a   r   y   L   i   s   t   s  \r   p   r   o   b   l   e
0026700    m   :   P   r   o   b   l   e   m   ;  \r   e   x   a   m   p
0026720    l   e   :   I   N   T   E   G   E   R   ;  \r   c   h   i   p
0026740    m   o   n   k   ,   p   l   o   t   ,   p   r   i   n   t   :
0026760    B   O   O   L   E   A   N   ;  \r   i 376 001  \0   y 230   n
0027000    t   e   r   s   :   R   e   c   t   a   n   g   l   e   L   i
0027020    s   t   P   t   r   ;                           -   -   R   e
0027040    c   t   l   e   s   s   .   M   a   k   e   S   e   c   o   n
0027060    d   a   r   y   L   i   s   t   s  \r   t   o   p   o   l   o
0027100    g   y   :   T   o   p   o   l   o   g   y   L   i   s   t   P
0027120    t   r   ;  \r   p   a   t   h   s   :   P   a   t   h   w   a
0027140    y   L   i   s   t   P   t   r   ;  \r   l   a   y   o   u   t
0027160    :   S   i   l   i   c   o   n   L   i   s   t   P   t   r   ;
0027200   \r   r   e   c   t   a   n   g   l   e   s   :   R   e   c   t
0027220    a   n   g   l   e   L   i   s   t   P   t   r   ;           -
0027240    -   R   e   c   t   a   n   g   l   e   .   N   e   w   R   e
0027260    c   t  \r  \r  \r   E   N   D   .  \r  \r   T   i   m   i   n
0027300    g  \r  \r   k   e   y       P   a   r   a   m   e   t   e   r
0027320    s   :           C   :       #   c   e   l   l   s            
0027340    E   :       #   e   v   e   n   t   s       (   s   o   u   r
0027360    c   e   s   )       k   1   :       #       c   h   a   n 376
0027400  001  \0   x   h   n   e   l   s   /   c   i   r   c   u   i   t
0027420    =       2  \r   d   e   r   i   v   e   d       p   a   r   s
0027440    :  \r           R   E   C   T   :       #       r   e   c   t
0027460    a   n   g   l   e   s                       =       4   C  \r
0027500            C   H   A   N   :       #       c   h   a   n   n   e
0027520    l   s                               =       2   C  \r        
0027540    I   N   T   E   R   :       #       i   n   t   e   r   s   e
0027560    c   t   i   o   n   s       =       2   C  \r           R   U
0027600    N   S   :       #       r   u   n   s       /       c   h   a
0027620    n   n   e   l       =       E   /   2   C  \r           C   O
0027640    N   N   :       #       c   o   n   n   s       /       c   h
0027660    a   n   n   e   l   =       E   /   C  \r           S   I   L
0027700    I   C   O   N   :       #       m   a   s   k       o   b   j
0027720    e   c   t   s   =       1   6   E  \r  \r   C   r   o   s   s
0027740    e   s   :       C   H   A   N       (   C   O   N   N   *   C
0027760    O   N   N   *   R   U   N   )       =       E       (   E   /
0030000    C   )   *   * 376  \0 273   }   j   2  \r   C   h   e   c   k
0030020    e   r   :       (   S   I   L   I   C   O   N       +       A
0030040    L   L   S   I   G   N   A   L   S   )       s   q   u   a   r
0030060    e   d       =       (   1   7   E   )   *   *   2  \r   I   n
0030100    t   e   r   :               I   N   T   E   R       (   A   L
0030120    L   P   A   T   H   S       +       I   W   I   R   E   S   )
0030140        =       E       (   4   C   +   8   )  \r   M   a   k   e
0030160    B   l   u   e   :       S   I   L   I   C   O   N   (   S   I
0030200    L   I   C   O   N       +       L   I   S   T   (   L   I   S
0030220    T   +   C   E   L   L   )   )       =       1   6   E   (   1
0030240    6   E       +       *   1   0   (   C   +   1   0   )   )  \r
0030260    S   i   l   i   c   o   n   :       E   (   E   /   C   +   2
0030300    0   )  \r  \r 377  \0  \0   R   o   u   t   e   U   t   i   l
0030320    i   t   i   e   s   .   m   e   s   a  \0 373 233   9 244   Q
0030340   \0  \0 376 001  \0   G 226   -   -   r   o   u   t   e   U   t
0030360    i   l   i   t   i   e   s   .   m   e   s   a  \r  \r   D   I
0030400    R   E   C   T   O   R   Y           Z   o   n   e   A   l   l
0030420    o   c   D   e   f   s   ,       R   o   u   t   e   D   e   f
0030440    s   ,       I   O   D   e   f   s   ;  \r  \r   R   o   u   t
0030460    e   U   t   i   l   i   t   i   e   s   :   P   R   O   G   R
0030500    A   M       I   M   P   O   R   T   S       Z   o   n   e   A
0030520    l   l   o   c   D   e   f   s   ,       I   O   D   e   f   s
0030540        E   X   P   O   R   T   S       R   o   u   t   e   D   e
0030560    f   s   =   B   E   G   I   N  \r   O   P   E   N       R   o
0030600    u   t   e   D   e   f   s   ;  \r  \r  \r   E   r   r   o   r
0030620    :   S   I   G   N   A   L   =   C   O   D   E   ;  \r  \r   c
0030640    h   a   n   n   e   l   s   :   P   U   B   L   I   C       R
0030660    e   c   t   a   n   g   l   e   L   i   s   t   P   t   r   _
0030700    N   I   L   ;  \r   p   r   o   b   l   e   m   :   P   U   B
0030720    L   I   C       P   r   o   b   l   e   m   _   [   c   e   l
0030740    l   s   :   N   I   L   , 376 001  \0   } 231   c   h   i   p
0030760    S   i   z   e   :   [   0   ,   0   ]   ,   w   i   r   e   l
0031000    i   s   t   :   N   I   L   ]   ;  \r   e   x   a   m   p   l
0031020    e   :   P   U   B   L   I   C       I   N   T   E   G   E   R
0031040    _   1   ;  \r   c   h   i   p   m   o   n   k   ,   p   l   o
0031060    t   ,   p   r   i   n   t   :   P   U   B   L   I   C       B
0031100    O   O   L   E   A   N   ;  \r   i   n   t   e   r   s   :   P
0031120    U   B   L   I   C       R   e   c   t   a   n   g   l   e   L
0031140    i   s   t   P   t   r   _   N   I   L   ;  \r   t   o   p   o
0031160    l   o   g   y   :   P   U   B   L   I   C       T   o   p   o
0031200    l   o   g   y   L   i   s   t   P   t   r   _   N   I   L   ;
0031220   \r   p   a   t   h   s   :   P   U   B   L   I   C       P   a
0031240    t   h   w   a   y   L   i   s   t   P   t   r   _   N   I   L
0031260    ;  \r   l   a   y   o   u   t   :   P   U   B   L   I   C    
0031300    S   i   l   i   c   o   n   L   i   s   t   P   t   r   _   N
0031320    I   L   ;  \r   r   e   c   t   a   n   g   l   e   s   :   P
0031340    U   B   L   I   C       R   e   c   t   a   n 376 001  \0   U
0031360  371   g   l   e   L   i   s   t   P   t   r   _   N   I   L   ;
0031400   \r  \r   E   n   u   m   e   r   a   t   e   C   h   a   n   n
0031420    e   l   s   :   P   U   B   L   I   C       P   R   O   C   E
0031440    D   U   R   E   [   c   :   P   R   O   C   E   D   U   R   E
0031460    [   R   e   c   t   a   n   g   l   e   P   t   r   ]   ]   =
0031500   \r   {   F   O   R       l   :   R   e   c   t   a   n   g   l
0031520    e   L   i   s   t   P   t   r   _   c   h   a   n   n   e   l
0031540    s   ,   l   .   t       U   N   T   I   L       l   =   N   I
0031560    L       D   O       c   [   l   .   h   ]   ;       E   N   D
0031600    L   O   O   P   }   ;  \r  \r   E   n   u   m   e   r   a   t
0031620    e   I   n   t   e   r   s   :   P   U   B   L   I   C       P
0031640    R   O   C   E   D   U   R   E   [   c   :   P   R   O   C   E
0031660    D   U   R   E   [   R   e   c   t   a   n   g   l   e   P   t
0031700    r   ]   ]   =  \r   {   F   O   R       l   :   R   e   c   t
0031720    a   n   g   l   e   L   i   s   t   P   t   r   _   i   n   t
0031740    e   r   s   ,   l   .   t       U   N   T   I   L       l   =
0031760    N 376 001  \0   [ 277   I   L       D   O       c   [   l   .
0032000    h   ]   ;       E   N   D   L   O   O   P   }   ;  \r  \r   E
0032020    n   u   m   e   r   a   t   e   R   e   c   t   a   n   g   l
0032040    e   s   :   P   U   B   L   I   C       P   R   O   C   E   D
0032060    U   R   E   [   c   :   P   R   O   C   E   D   U   R   E   [
0032100    R   e   c   t   a   n   g   l   e   P   t   r   ]   ]   =  \r
0032120    {   F   O   R       l   :   R   e   c   t   a   n   g   l   e
0032140    L   i   s   t   P   t   r   _   r   e   c   t   a   n   g   l
0032160    e   s   ,   l   .   t       U   N   T   I   L       l   =   N
0032200    I   L       D   O       c   [   l   .   h   ]   ;       E   N
0032220    D   L   O   O   P   }   ;  \r  \r   E   n   u   m   e   r   a
0032240    t   e   C   e   l   l   s   :   P   U   B   L   I   C       P
0032260    R   O   C   E   D   U   R   E   [   c   a   l   l   :   P   R
0032300    O   C   E   D   U   R   E   [   C   e   l   l   P   t   r   ]
0032320    ]   =  \r   {   F   O   R       l   :   C   e   l   l   L   i
0032340    s   t   P   t   r   _   p   r   o   b   l   e   m   .   c   e
0032360    l   l   s   ,   l   . 376 001  \0 250 201   t       U   N   T
0032400    I   L       l   =   N   I   L       D   O       c   a   l   l
0032420    [   l   .   h   ]   ;       E   N   D   L   O   O   P   }   ;
0032440   \r  \r   E   n   u   m   e   r   a   t   e   A   l   l   S   i
0032460    g   n   a   l   s   :   P   U   B   L   I   C       P   R   O
0032500    C   E   D   U   R   E   [   c   a   l   l   :   P   R   O   C
0032520    E   D   U   R   E   [   C   e   l   l   P   t   r   ,   S   i
0032540    g   n   a   l   P   t   r   ]   ]   =   B   E   G   I   N  \r
0032560    F   O   R       l   :   C   e   l   l   L   i   s   t   P   t
0032600    r   _   p   r   o   b   l   e   m   .   c   e   l   l   s   ,
0032620    l   .   t       U   N   T   I   L       l   =   N   I   L    
0032640    D   O  \r           F   O   R       l   2   :   S   i   g   n
0032660    a   l   L   i   s   t   P   t   r   _   l   .   h   .   s   i
0032700    g   n   a   l   s   ,   l   2   .   t       U   N   T   I   L
0032720        l   2   =   N   I   L  \r               D   O       c   a
0032740    l   l   [   l   .   h   ,   l   2   .   h   ]   ;       E   N
0032760    D   L   O   O   P   ;       E   N   D   L 376 001  \0 276 005
0033000    O   O   P   ;  \r   E   N   D   ;  \r  \r   E   n   u   m   e
0033020    r   a   t   e   S   i   g   n   a   l   s   :   P   U   B   L
0033040    I   C       P   R   O   C   E   D   U   R   E   [   c   :   C
0033060    e   l   l   P   t   r   ,   x   :   P   R   O   C   E   D   U
0033100    R   E   [   C   e   l   l   P   t   r   ,   S   i   g   n   a
0033120    l   P   t   r   ]   ]   =  \r           {   F   O   R       l
0033140    :   S   i   g   n   a   l   L   i   s   t   P   t   r   _   c
0033160    .   s   i   g   n   a   l   s   ,   l   .   t       U   N   T
0033200    I   L       l   =   N   I   L       D   O       x   [   c   ,
0033220    l   .   h   ]   ;       E   N   D   L   O   O   P   }   ;  \r
0033240   \r   E   n   u   m   e   r   a   t   e   C   o   n   n   s   :
0033260    P   U   B   L   I   C       P   R   O   C   E   D   U   R   E
0033300    [   r   :   R   e   c   t   a   n   g   l   e   P   t   r   ,
0033320   \r                           c   :   P   R   O   C   E   D   U
0033340    R   E   [   R   e   c   t   a   n   g   l   e   P   t   r   ,
0033360    C   o   n   n   P   t   r   ]   ]   =  \r   {   F   O   R    
0033400  376 001  \0   b 315   l   :   C   o   n   n   L   i   s   t   P
0033420    t   r   _   r   .   c   o   n   n   s   ,       l   .   t    
0033440    U   N   T   I   L       l   =   N   I   L       D   O       c
0033460    [   r   ,   l   .   h   ]   ;       E   N   D   L   O   O   P
0033500    }   ;  \r  \r   E   n   u   m   e   r   a   t   e   E   v   e
0033520    n   t   s   :   P   U   B   L   I   C       P   R   O   C   E
0033540    D   U   R   E   [   r   :   R   e   c   t   a   n   g   l   e
0033560    P   t   r   ,  \r                   c   :   P   R   O   C   E
0033600    D   U   R   E   [   R   e   c   t   a   n   g   l   e   P   t
0033620    r   ,   E   v   e   n   t   P   t   r   ]   ]   =  \r   {   F
0033640    O   R       l   :   E   v   e   n   t   L   i   s   t   P   t
0033660    r   _   r   .   e   v   e   n   t   s   ,       l   .   t    
0033700    U   N   T   I   L       l   =   N   I   L       D   O       c
0033720    [   r   ,   l   .   h   ]   ;       E   N   D   L   O   O   P
0033740    }   ;  \r  \r   E   n   u   m   e   r   a   t   e   R   u   n
0033760    s   :   P   U   B   L   I   C       P   R   O   C   E   D   U
0034000    R   E   [   r   : 376 001  \0       s   R   e   c   t   a   n
0034020    g   l   e   P   t   r   ,  \r                   c   :   P   R
0034040    O   C   E   D   U   R   E   [   R   e   c   t   a   n   g   l
0034060    e   P   t   r   ,   R   u   n   P   t   r   ]   ]   =  \r   {
0034100    F   O   R       l   :   R   u   n   L   i   s   t   P   t   r
0034120    _   r   .   r   u   n   s   ,   l   .   t       U   N   T   I
0034140    L       l   =   N   I   L       D   O       c   [   r   ,   l
0034160    .   h   ]   ;       E   N   D   L   O   O   P   }   ;  \r  \r
0034200    E   n   u   m   e   r   a   t   e   A   l   l   R   u   n   s
0034220    :   P   U   B   L   I   C       P   R   O   C   E   D   U   R
0034240    E   [   c   :   P   R   O   C   E   D   U   R   E   [   R   e
0034260    c   t   a   n   g   l   e   P   t   r   ,   R   u   n   P   t
0034300    r   ]   ]   =   B   E   G   I   N  \r           t   e   m   p
0034320    :   P   R   O   C   E   D   U   R   E   [   r   :   R   e   c
0034340    t   a   n   g   l   e   P   t   r   ]   =   {   E   n   u   m
0034360    e   r   a   t   e   R   u   n   s   [   r   ,   c   ]   }   ;
0034400   \r           E   n   u   m   e   r   a 376 001  \0   ! 342   t
0034420    e   C   h   a   n   n   e   l   s   [   t   e   m   p   ]   ;
0034440   \r           E   N   D   ;  \r  \r   E   n   u   m   e   r   a
0034460    t   e   A   l   l   C   o   n   n   s   :   P   U   B   L   I
0034500    C       P   R   O   C   E   D   U   R   E   [   c   a   l   l
0034520    :   P   R   O   C   E   D   U   R   E   [   R   e   c   t   a
0034540    n   g   l   e   P   t   r   ,   C   o   n   n   P   t   r   ]
0034560    ]   =   B   E   G   I   N  \r   C   m   1   :   P   R   O   C
0034600    E   D   U   R   E   [   r   e   c   t   :   R   e   c   t   a
0034620    n   g   l   e   P   t   r   ]   =   {   E   n   u   m   e   r
0034640    a   t   e   C   o   n   n   s   [   r   e   c   t   ,   c   a
0034660    l   l   ]   }   ;  \r   E   n   u   m   e   r   a   t   e   C
0034700    h   a   n   n   e   l   s   [   C   m   1   ]   ;  \r   E   N
0034720    D   ;  \r  \r   E   n   u   m   e   r   a   t   e   S   i   l
0034740    i   c   o   n   :   P   U   B   L   I   C       P   R   O   C
0034760    E   D   U   R   E   [   c   a   l   l   :   P   R   O   C   E
0035000    D   U   R   E   [   S   i   l   i   c   o   n   P   t   r 376
0035020  001  \0 325   )   ]   ]   =   B   E   G   I   N  \r   F   O   R
0035040        l   :   S   i   l   i   c   o   n   L   i   s   t   P   t
0035060    r   _   l   a   y   o   u   t   ,   l   .   t       U   N   T
0035100    I   L       l   =   N   I   L  \r           D   O       I   F
0035120        l   .   h   .   p   o   s   #   o   u   t   O   f   S   i
0035140    g   h   t       T   H   E   N       c   a   l   l   [   l   .
0035160    h   ]   ;       E   N   D   L   O   O   P   ;  \r   E   N   D
0035200    ;  \r  \r   R   e   t   u   r   n   :   P   U   B   L   I   C
0035220        P   R   O   C   E   D   U   R   E   =   {   S   h   o   w
0035240    C   h   a   r   [   '  \r   ]   }   ;  \r  \r   S   h   o   w
0035260    S   t   r   i   n   g   :   P   U   B   L   I   C       P   R
0035300    O   C   E   D   U   R   E   [   s   :   S   T   R   I   N   G
0035320    ]   =   B   E   G   I   N  \r   I   F       ~   c   h   i   p
0035340    m   o   n   k       T   H   E   N       I   O   D   e   f   s
0035360    .   W   r   i   t   e   S   t   r   i   n   g   [   s   ]   ;
0035400   \r   E   N   D   ;  \r  \r   S   h   o   w   C   h   a   r   :
0035420    P   U   B   L 376 001  \0 036 327   I   C       P   R   O   C
0035440    E   D   U   R   E   [   c   :   C   H   A   R   A   C   T   E
0035460    R   ]   =   B   E   G   I   N  \r   I   F       ~   c   h   i
0035500    p   m   o   n   k       T   H   E   N       I   O   D   e   f
0035520    s   .   W   r   i   t   e   C   h   a   r   [   c   ]   ;  \r
0035540    E   N   D   ;  \r  \r  \r   S   h   o   w   L   a   b   e   l
0035560    :   P   U   B   L   I   C       P   R   O   C   E   D   U   R
0035600    E   [   s   :   S   T   R   I   N   G   ]   =   B   E   G   I
0035620    N  \r   R   e   t   u   r   n   [   ]   ;       R   e   t   u
0035640    r   n   [   ]   ;       S   h   o   w   S   t   r   i   n   g
0035660    [   s   ]   ;       R   e   t   u   r   n   [   ]   ;  \r   E
0035700    N   D   ;  \r  \r   S   h   o   w   C   i   r   c   u   i   t
0035720    :   P   U   B   L   I   C       P   R   O   C   E   D   U   R
0035740    E   [   c   :   C   i   r   c   u   i   t   ]       R   E   T
0035760    U   R   N   S   [   C   H   A   R   A   C   T   E   R   ]   =
0036000    B   E   G   I   N  \r   s   :   I   N   T   E   G   E   R   =
0036020    c   -   1   ;  \r   R   E   T   U 376 001  \0   ! 245   R   N
0036040    [   S   E   L   E   C   T       c       F   R   O   M  \r    
0036060        0   =   >   '   0   ,       I   N       [   1   .   .   2
0036100    6   )   =   >   '   A       +       s   ,       E   N   D   C
0036120    A   S   E   =   >   '   2   ]   ;  \r   E   N   D   ;  \r  \r
0036140    S   h   o   w   D   e   c   i   m   a   l   :   P   U   B   L
0036160    I   C       P   R   O   C   E   D   U   R   E   [   i   :   I
0036200    N   T   E   G   E   R   ,   s   :   S   T   R   I   N   G   _
0036220    N   I   L   ]   =   B   E   G   I   N  \r   I   F       c   h
0036240    i   p   m   o   n   k       T   H   E   N       R   E   T   U
0036260    R   N   ;  \r   I   F       s   #   N   I   L       T   H   E
0036300    N       I   O   D   e   f   s   .   W   r   i   t   e   S   t
0036320    r   i   n   g   [   s   ]   ;  \r   I   O   D   e   f   s   .
0036340    W   r   i   t   e   D   e   c   i   m   a   l   [   i   ]   ;
0036360   \r   E   N   D   ;  \r  \r   S   a   m   e   S   t   r   i   n
0036400    g   :   P   U   B   L   I   C       P   R   O   C   E   D   U
0036420    R   E   [   a   ,   b   :   S   T   R   I   N   G   ] 376 001
0036440   \0   % 316       R   E   T   U   R   N   S   [   B   O   O   L
0036460    E   A   N   ]   =   B   E   G   I   N  \r   I   F       a   .
0036500    l   e   n   g   t   h   #   b   .   l   e   n   g   t   h    
0036520    T   H   E   N       R   E   T   U   R   N   [   F   A   L   S
0036540    E   ]   ;  \r   F   O   R       i   :   C   A   R   D   I   N
0036560    A   L       I   N       [   0   .   .   a   .   l   e   n   g
0036600    t   h   )  \r           D   O       I   F       a   [   i   ]
0036620    #   b   [   i   ]       T   H   E   N       R   E   T   U   R
0036640    N   [   F   A   L   S   E   ]   ;       E   N   D   L   O   O
0036660    P   ;  \r   R   E   T   U   R   N   [   T   R   U   E   ]   ;
0036700   \r   E   N   D   ;  \r  \r   C   l   e   a   r   :   P   U   B
0036720    L   I   C       P   R   O   C   E   D   U   R   E   [   s   :
0036740    S   T   R   I   N   G   ]   =   B   E   G   I   N  \r   F   O
0036760    R       i   :   C   A   R   D   I   N   A   L       I   N    
0037000    [   0   .   .   s   .   l   e   n   g   t   h   _   s   .   m
0037020    a   x   l   e   n   g   t   h   )       D   O       s   [   i
0037040    ]   _   ' 376 001  \0 224 033       ;       E   N   D   L   O
0037060    O   P   ;  \r   E   N   D   ;  \r  \r   S   h   o   w   P   o
0037100    i   n   t   :   P   U   B   L   I   C       P   R   O   C   E
0037120    D   U   R   E   [   s   :   S   T   R   I   N   G   ,   x   ,
0037140    y   :   I   N   T   E   G   E   R   ]   =   B   E   G   I   N
0037160        O   P   E   N       I   O   D   e   f   s   ;  \r   I   F
0037200        c   h   i   p   m   o   n   k       T   H   E   N       R
0037220    E   T   U   R   N   ;  \r   W   r   i   t   e   S   t   r   i
0037240    n   g   [   s   ]   ;  \r   W   r   i   t   e   C   h   a   r
0037260    [   '   [   ]   ;  \r   W   r   i   t   e   D   e   c   i   m
0037300    a   l   [   x   ]   ;  \r   W   r   i   t   e   S   t   r   i
0037320    n   g   [   "       ,       "   ]   ;  \r   W   r   i   t   e
0037340    D   e   c   i   m   a   l   [   y   ]   ;  \r   W   r   i   t
0037360    e   C   h   a   r   [   '   ]   ]   ;  \r   E   N   D   ;  \r
0037400   \r   S   h   o   w   W   i   r   e   :   P   U   B   L   I   C
0037420        P   R   O   C   E   D   U   R   E   [   s   :   S   i   l
0037440    i   c   o   n   P   t   r   ] 376 001  \0   K 311   =   B   E
0037460    G   I   N  \r   S   h   o   w   S   t   r   i   n   g   [   S
0037500    E   L   E   C   T       s   .   l   e   v   e   l       F   R
0037520    O   M  \r                   r   e   d   =   >   "       r   e
0037540    d       "   ,       b   l   u   e   =   >   "       b   l   u
0037560    e   "   ,       E   N   D   C   A   S   E   =   >   "       b
0037600    o   t   h   "   ]   ;  \r   S   h   o   w   P   o   i   n   t
0037620    [   "       l   o   c       "   ,   s   .   p   o   s   .   x
0037640    ,   s   .   p   o   s   .   y   ]   ;  \r   S   h   o   w   P
0037660    o   i   n   t   [   "           "   ,   s   .   p   o   s   2
0037700    .   x   ,   s   .   p   o   s   2   .   y   ]   ;  \r   E   N
0037720    D   ;  \r  \r   W   r   i   t   e   P   o   i   n   t   :   P
0037740    U   B   L   I   C       P   R   O   C   E   D   U   R   E   [
0037760    x   ,   y   :   I   N   T   E   G   E   R   ]   =   B   E   G
0040000    I   N       O   P   E   N       I   O   D   e   f   s   ;  \r
0040020    I   F       c   h   i   p   m   o   n   k       T   H   E   N
0040040        R   E   T   U   R   N   ;  \r   W   r   i   t 376 001  \0
0040060    O 021   e   C   h   a   r   [   '   [   ]   ;  \r   W   r   i
0040100    t   e   D   e   c   i   m   a   l   [   x   ]   ;  \r   W   r
0040120    i   t   e   S   t   r   i   n   g   [   "       ,       "   ]
0040140    ;  \r   W   r   i   t   e   D   e   c   i   m   a   l   [   y
0040160    ]   ;  \r   W   r   i   t   e   C   h   a   r   [   '   ]   ]
0040200    ;  \r   E   N   D   ;  \r  \r   M   a   k   e   T   y   p   e
0040220    :   P   U   B   L   I   C       P   R   O   C   E   D   U   R
0040240    E   [   n   ,   e   ,   s   ,   w   :   B   O   O   L   E   A
0040260    N   ]       R   E   T   U   R   N   S   [   I   n   t   e   r
0040300    T   y   p   e   ]   =   B   E   G   I   N  \r   R   E   T   U
0040320    R   N   [   (   I   F       n       T   H   E   N       1    
0040340    E   L   S   E       0   )   +   (   I   F       e       T   H
0040360    E   N       4       E   L   S   E       0   )  \r       +   (
0040400    I   F       s       T   H   E   N       2       E   L   S   E
0040420        0   )   +   (   I   F       w       T   H   E   N       8
0040440        E   L   S   E       0   )   ]   ;  \r   E   N   D   ;  \r
0040460   \r   - 376 001  \0 246   x   -       A   L   L   O   C   A   T
0040500    I   O   N   S  \r  \r   L   i   s   t   E   n   t   r   y   :
0040520    T   Y   P   E   =   R   E   C   O   R   D   [   a   :   L   O
0040540    N   G       P   O   I   N   T   E   R   ,   b   :   L   O   N
0040560    G       P   O   I   N   T   E   R       T   O       L   i   s
0040600    t   E   n   t   r   y   ]   ;  \r  \r   z   o   n   e   :   U
0040620    N   C   O   U   N   T   E   D       Z   O   N   E   ;  \r  \r
0040640    R   e   t   u   r   n   S   t   o   r   a   g   e   :   P   U
0040660    B   L   I   C       P   R   O   C   E   D   U   R   E   =  \r
0040700            {   z   o   n   e   _   Z   o   n   e   A   l   l   o
0040720    c   D   e   f   s   .   D   e   s   t   r   o   y   A   n   X
0040740    M   Z   o   n   e   [   z   o   n   e   ]   }   ;  \r  \r   I
0040760    n   i   t   S   t   o   r   a   g   e   :   P   U   B   L   I
0041000    C       P   R   O   C   E   D   U   R   E   =  \r           {
0041020    z   o   n   e   _   Z   o   n   e   A   l   l   o   c   D   e
0041040    f   s   .   G   e   t   A   n   X   M   Z   o   n   e   [   ]
0041060    }   ;  \r  \r   c   n   t 376 001  \0   k 313   L   i   s   t
0041100    :   I   N   T   E   G   E   R   _   4   0   0   0   ;  \r   A
0041120    l   l   o   c   a   t   e   L   i   s   t   :   P   U   B   L
0041140    I   C       P   R   O   C   E   D   U   R   E       R   E   T
0041160    U   R   N   S   [   L   O   N   G       P   O   I   N   T   E
0041200    R   ]   =   B   E   G   I   N  \r           x   :   L   O   N
0041220    G       P   O   I   N   T   E   R       T   O       L   i   s
0041240    t   E   n   t   r   y   _   z   o   n   e   .   N   E   W   [
0041260    L   i   s   t   E   n   t   r   y   ]   ;  \r           I   F
0041300        (   c   n   t   L   i   s   t   _   c   n   t   L   i   s
0041320    t   -   1   )   <   0       T   H   E   N       E   r   r   o
0041340    r   ;  \r           x   ^   _   [   N   I   L   ,   N   I   L
0041360    ]   ;  \r           R   E   T   U   R   N   [   x   ]   ;  \r
0041400            E   N   D   ;  \r   F   r   e   e   L   i   s   t   :
0041420    P   U   B   L   I   C       P   R   O   C   E   D   U   R   E
0041440    [   y   :   L   O   N   G       P   O   I   N   T   E   R   ]
0041460    =  \r       {   x   :   L   O   N   G       P 376 001  \0 310
0041500  325   O   I   N   T   E   R       T   O       L   i   s   t   E
0041520    n   t   r   y   _   y   ;  \r       z   o   n   e   .   F   R
0041540    E   E   [   @   x   ]   ;       c   n   t   E   v   e   n   t
0041560    _   c   n   t   E   v   e   n   t   +   1   }   ;  \r  \r   c
0041600    n   t   E   v   e   n   t   :   I   N   T   E   G   E   R   _
0041620    5   0   0   ;  \r   A   l   l   o   c   a   t   e   E   v   e
0041640    n   t   :   P   U   B   L   I   C       P   R   O   C   E   D
0041660    U   R   E       R   E   T   U   R   N   S   [   x   :   E   v
0041700    e   n   t   P   t   r   ]   =  \r       {   x   _   z   o   n
0041720    e   .   N   E   W   [   E   v   e   n   t   _   [   ]   ]   ;
0041740        I   F       (   c   n   t   E   v   e   n   t   _   c   n
0041760    t   E   v   e   n   t   -   1   )   <   0       T   H   E   N
0042000        E   r   r   o   r   }   ;  \r   F   r   e   e   E   v   e
0042020    n   t   :   P   U   B   L   I   C       P   R   O   C   E   D
0042040    U   R   E   [   x   :   E   v   e   n   t   P   t   r   ]   =
0042060   \r       {   z   o   n   e   .   F   R   E   E   [   @   x   ]
0042100    ; 376 001  \0 031   T       c   n   t   E   v   e   n   t   _
0042120    c   n   t   E   v   e   n   t   +   1   }   ;  \r  \r   c   n
0042140    t   N   e   t   :   I   N   T   E   G   E   R   _   6   0   0
0042160    ;  \r   A   l   l   o   c   a   t   e   N   e   t   :   P   U
0042200    B   L   I   C       P   R   O   C   E   D   U   R   E       R
0042220    E   T   U   R   N   S   [   x   :   N   e   t   P   t   r   ]
0042240    =  \r       {   x   _   z   o   n   e   .   N   E   W   [   N
0042260    e   t   _   [   ]   ]   ;       I   F       (   c   n   t   N
0042300    e   t   _   c   n   t   N   e   t   -   1   )   <   0       T
0042320    H   E   N       E   r   r   o   r   }   ;  \r   F   r   e   e
0042340    N   e   t   :   P   U   B   L   I   C       P   R   O   C   E
0042360    D   U   R   E   [   x   :   N   e   t   P   t   r   ]   =  \r
0042400        {   z   o   n   e   .   F   R   E   E   [   @   x   ]   ;
0042420        c   n   t   N   e   t   _   c   n   t   N   e   t   +   1
0042440    }   ;  \r  \r   c   n   t   P   a   t   h   w   a   y   :   I
0042460    N   T   E   G   E   R   _   3   0   0   ;  \r   A   l   l   o
0042500    c   a   t   e   P   a 376 001  \0 314 037   t   h   w   a   y
0042520    :   P   U   B   L   I   C       P   R   O   C   E   D   U   R
0042540    E       R   E   T   U   R   N   S   [   x   :   P   a   t   h
0042560    w   a   y   P   t   r   ]   =  \r       {   x   _   z   o   n
0042600    e   .   N   E   W   [   P   a   t   h   w   a   y   _   [   ]
0042620    ]   ;       I   F       (   c   n   t   P   a   t   h   w   a
0042640    y   _   c   n   t   P   a   t   h   w   a   y   -   1   )   <
0042660    0       T   H   E   N       E   r   r   o   r   }   ;  \r   F
0042700    r   e   e   P   a   t   h   w   a   y   :   P   U   B   L   I
0042720    C       P   R   O   C   E   D   U   R   E   [   x   :   P   a
0042740    t   h   w   a   y   P   t   r   ]   =  \r       {   z   o   n
0042760    e   .   F   R   E   E   [   @   x   ]   ;       c   n   t   P
0043000    a   t   h   w   a   y   _   c   n   t   P   a   t   h   w   a
0043020    y   +   1   }   ;  \r  \r   c   n   t   J   u   n   c   t   i
0043040    o   n   :   I   N   T   E   G   E   R   _   3   0   0   ;  \r
0043060    A   l   l   o   c   a   t   e   J   u   n   c   t   i   o   n
0043100    :   P   U   B   L   I   C       P   R   O 376 001  \0  \0   b
0043120    C   E   D   U   R   E       R   E   T   U   R   N   S   [   x
0043140    :   J   u   n   c   t   i   o   n   P   t   r   ]   =  \r    
0043160    {   x   _   z   o   n   e   .   N   E   W   [   J   u   n   c
0043200    t   i   o   n   _   [   ]   ]   ;       I   F       (   c   n
0043220    t   J   u   n   c   t   i   o   n   _   c   n   t   J   u   n
0043240    c   t   i   o   n   -   1   )   <   0       T   H   E   N    
0043260    E   r   r   o   r   }   ;  \r   F   r   e   e   J   u   n   c
0043300    t   i   o   n   :   P   U   B   L   I   C       P   R   O   C
0043320    E   D   U   R   E   [   x   :   J   u   n   c   t   i   o   n
0043340    P   t   r   ]   =  \r       {   z   o   n   e   .   F   R   E
0043360    E   [   @   x   ]   ;       c   n   t   J   u   n   c   t   i
0043400    o   n   _   c   n   t   J   u   n   c   t   i   o   n   +   1
0043420    }   ;  \r  \r   c   n   t   C   e   l   l   :   I   N   T   E
0043440    G   E   R   _   1   2   5   ;  \r   A   l   l   o   c   a   t
0043460    e   C   e   l   l   :   P   U   B   L   I   C       P   R   O
0043500    C   E   D   U   R   E       R   E   T   U   R   N   S   [   x
0043520  376 001  \0 033   y   :   C   e   l   l   P   t   r   ]   =  \r
0043540        {   x   _   z   o   n   e   .   N   E   W   [   C   e   l
0043560    l   _   [   ]   ]   ;       I   F       (   c   n   t   C   e
0043600    l   l   _   c   n   t   C   e   l   l   -   1   )   <   0    
0043620    T   H   E   N       E   r   r   o   r   }   ;  \r   F   r   e
0043640    e   C   e   l   l   :   P   U   B   L   I   C       P   R   O
0043660    C   E   D   U   R   E   [   x   :   C   e   l   l   P   t   r
0043700    ]   =  \r       {   z   o   n   e   .   F   R   E   E   [   @
0043720    x   ]   ;       c   n   t   C   e   l   l   _   c   n   t   C
0043740    e   l   l   +   1   }   ;  \r  \r   c   n   t   S   i   g   n
0043760    a   l   :   I   N   T   E   G   E   R   _   1   0   0   0   ;
0044000   \r   A   l   l   o   c   a   t   e   S   i   g   n   a   l   :
0044020    P   U   B   L   I   C       P   R   O   C   E   D   U   R   E
0044040        R   E   T   U   R   N   S   [   x   :   S   i   g   n   a
0044060    l   P   t   r   ]   =  \r       {   x   _   z   o   n   e   .
0044100    N   E   W   [   S   i   g   n   a   l   _   [   ]   ]   ;    
0044120    I   F       (   c 376 001  \0   Q   6   n   t   S   i   g   n
0044140    a   l   _   c   n   t   S   i   g   n   a   l   -   1   )   <
0044160    0       T   H   E   N       E   r   r   o   r   }   ;  \r   F
0044200    r   e   e   S   i   g   n   a   l   :   P   U   B   L   I   C
0044220        P   R   O   C   E   D   U   R   E   [   x   :   S   i   g
0044240    n   a   l   P   t   r   ]   =  \r       {   z   o   n   e   .
0044260    F   R   E   E   [   @   x   ]   ;       c   n   t   S   i   g
0044300    n   a   l   _   c   n   t   S   i   g   n   a   l   +   1   }
0044320    ;  \r  \r   c   n   t   S   i   l   i   c   o   n   :   I   N
0044340    T   E   G   E   R   _   4   0   0   0   ;  \r   A   l   l   o
0044360    c   a   t   e   S   i   l   i   c   o   n   :   P   U   B   L
0044400    I   C       P   R   O   C   E   D   U   R   E       R   E   T
0044420    U   R   N   S   [   x   :   S   i   l   i   c   o   n   P   t
0044440    r   ]   =  \r       {   x   _   z   o   n   e   .   N   E   W
0044460    [   S   i   l   i   c   o   n   _   [   ]   ]   ;       I   F
0044500        (   c   n   t   S   i   l   i   c   o   n   _   c   n   t
0044520    S   i   l   i   c   o   n   -   1   ) 376 001  \0 237 022   <
0044540    0       T   H   E   N       E   r   r   o   r   }   ;  \r   F
0044560    r   e   e   S   i   l   i   c   o   n   :   P   U   B   L   I
0044600    C       P   R   O   C   E   D   U   R   E   [   x   :   S   i
0044620    l   i   c   o   n   P   t   r   ]   =  \r       {   z   o   n
0044640    e   .   F   R   E   E   [   @   x   ]   ;       c   n   t   S
0044660    i   l   i   c   o   n   _   c   n   t   S   i   l   i   c   o
0044700    n   +   1   }   ;  \r  \r   c   n   t   P   a   t   h   :   I
0044720    N   T   E   G   E   R   _   1   0   0   0   ;  \r   A   l   l
0044740    o   c   a   t   e   P   a   t   h   :   P   U   B   L   I   C
0044760        P   R   O   C   E   D   U   R   E       R   E   T   U   R
0045000    N   S   [   x   :   P   a   t   h   P   t   r   ]   =  \r    
0045020    {   x   _   z   o   n   e   .   N   E   W   [   P   a   t   h
0045040    _   [   ]   ]   ;       I   F       (   c   n   t   P   a   t
0045060    h   _   c   n   t   P   a   t   h   -   1   )   <   0       T
0045100    H   E   N       E   r   r   o   r   }   ;  \r   F   r   e   e
0045120    P   a   t   h   :   P   U   B   L   I   C       P   R   O 376
0045140  001  \0 235 237   C   E   D   U   R   E   [   x   :   P   a   t
0045160    h   P   t   r   ]   =  \r       {   z   o   n   e   .   F   R
0045200    E   E   [   @   x   ]   ;       c   n   t   P   a   t   h   _
0045220    c   n   t   P   a   t   h   +   1   }   ;  \r  \r   c   n   t
0045240    R   e   c   t   a   n   g   l   e   :   I   N   T   E   G   E
0045260    R   _   4   0   0   ;  \r   A   l   l   o   c   a   t   e   R
0045300    e   c   t   a   n   g   l   e   :   P   U   B   L   I   C    
0045320    P   R   O   C   E   D   U   R   E       R   E   T   U   R   N
0045340    S   [   x   :   R   e   c   t   a   n   g   l   e   P   t   r
0045360    ]   =  \r       {   x   _   z   o   n   e   .   N   E   W   [
0045400    R   e   c   t   a   n   g   l   e   _   [   ]   ]   ;       I
0045420    F       (   c   n   t   R   e   c   t   a   n   g   l   e   _
0045440    c   n   t   R   e   c   t   a   n   g   l   e   -   1   )   <
0045460    0       T   H   E   N       E   r   r   o   r   }   ;  \r   F
0045500    r   e   e   R   e   c   t   a   n   g   l   e   :   P   U   B
0045520    L   I   C       P   R   O   C   E   D   U   R   E   [   x   :
0045540    R   e   c   t 376 001  \0   9   n   a   n   g   l   e   P   t
0045560    r   ]   =  \r       {   z   o   n   e   .   F   R   E   E   [
0045600    @   x   ]   ;       c   n   t   R   e   c   t   a   n   g   l
0045620    e   _   c   n   t   R   e   c   t   a   n   g   l   e   +   1
0045640    }   ;  \r  \r   c   n   t   P   l   a   c   e   :   I   N   T
0045660    E   G   E   R   _   4   0   0   ;  \r   A   l   l   o   c   a
0045700    t   e   P   l   a   c   e   :   P   U   B   L   I   C       P
0045720    R   O   C   E   D   U   R   E       R   E   T   U   R   N   S
0045740    [   x   :   P   l   a   c   e   P   t   r   ]   =  \r       {
0045760    x   _   z   o   n   e   .   N   E   W   [   P   l   a   c   e
0046000    _   [   ]   ]   ;       I   F       (   c   n   t   P   l   a
0046020    c   e   _   c   n   t   P   l   a   c   e   -   1   )   <   0
0046040        T   H   E   N       E   r   r   o   r   }   ;  \r   F   r
0046060    e   e   P   l   a   c   e   :   P   U   B   L   I   C       P
0046100    R   O   C   E   D   U   R   E   [   x   :   P   l   a   c   e
0046120    P   t   r   ]   =  \r       {   z   o   n   e   .   F   R   E
0046140    E   [   @   x   ]   ;       c   n 376 001  \0 255 237   t   P
0046160    l   a   c   e   _   c   n   t   P   l   a   c   e   +   1   }
0046200    ;  \r  \r   c   n   t   G   r   i   d   :   I   N   T   E   G
0046220    E   R   _   3   0   0   ;  \r   A   l   l   o   c   a   t   e
0046240    G   r   i   d   :   P   U   B   L   I   C       P   R   O   C
0046260    E   D   U   R   E       R   E   T   U   R   N   S   [   x   :
0046300    G   r   i   d   P   t   r   ]   =  \r       {   x   _   z   o
0046320    n   e   .   N   E   W   [   G   r   i   d   _   [   ]   ]   ;
0046340        I   F       (   c   n   t   G   r   i   d   _   c   n   t
0046360    G   r   i   d   -   1   )   <   0       T   H   E   N       E
0046400    r   r   o   r   }   ;  \r   F   r   e   e   G   r   i   d   :
0046420    P   U   B   L   I   C       P   R   O   C   E   D   U   R   E
0046440    [   x   :   G   r   i   d   P   t   r   ]   =  \r       {   z
0046460    o   n   e   .   F   R   E   E   [   @   x   ]   ;       c   n
0046500    t   G   r   i   d   _   c   n   t   G   r   i   d   +   1   }
0046520    ;  \r  \r   c   n   t   T   o   p   o   l   o   g   y   :   I
0046540    N   T   E   G   E   R   _   5   0   0   ;  \r   A   l 376 001
0046560   \0   j   +   l   o   c   a   t   e   T   o   p   o   l   o   g
0046600    y   :   P   U   B   L   I   C       P   R   O   C   E   D   U
0046620    R   E       R   E   T   U   R   N   S   [   x   :   T   o   p
0046640    o   l   o   g   y   P   t   r   ]   =  \r       {   x   _   z
0046660    o   n   e   .   N   E   W   [   T   o   p   o   l   o   g   y
0046700    _   [   ]   ]   ;       I   F       (   c   n   t   T   o   p
0046720    o   l   o   g   y   _   c   n   t   T   o   p   o   l   o   g
0046740    y   -   1   )   <   0       T   H   E   N       E   r   r   o
0046760    r   }   ;  \r   F   r   e   e   T   o   p   o   l   o   g   y
0047000    :   P   U   B   L   I   C       P   R   O   C   E   D   U   R
0047020    E   [   x   :   T   o   p   o   l   o   g   y   P   t   r   ]
0047040    =  \r       {   z   o   n   e   .   F   R   E   E   [   @   x
0047060    ]   ;       c   n   t   T   o   p   o   l   o   g   y   _   c
0047100    n   t   T   o   p   o   l   o   g   y   +   1   }   ;  \r  \r
0047120    c   n   t   C   o   n   n   :   I   N   T   E   G   E   R   _
0047140    5   0   0   ;  \r   A   l   l   o   c   a   t   e   C   o   n
0047160    n   :   P 376 001  \0   7 343   U   B   L   I   C       P   R
0047200    O   C   E   D   U   R   E       R   E   T   U   R   N   S   [
0047220    x   :   C   o   n   n   P   t   r   ]   =  \r       {   x   _
0047240    z   o   n   e   .   N   E   W   [   C   o   n   n   _   [   ]
0047260    ]   ;       I   F       (   c   n   t   C   o   n   n   _   c
0047300    n   t   C   o   n   n   -   1   )   <   0       T   H   E   N
0047320        E   r   r   o   r   }   ;  \r   F   r   e   e   C   o   n
0047340    n   :   P   U   B   L   I   C       P   R   O   C   E   D   U
0047360    R   E   [   x   :   C   o   n   n   P   t   r   ]   =  \r    
0047400    {   z   o   n   e   .   F   R   E   E   [   @   x   ]   ;    
0047420    c   n   t   C   o   n   n   _   c   n   t   C   o   n   n   +
0047440    1   }   ;  \r  \r   c   n   t   R   u   n   :   I   N   T   E
0047460    G   E   R   _   5   0   0   ;  \r   A   l   l   o   c   a   t
0047500    e   R   u   n   :   P   U   B   L   I   C       P   R   O   C
0047520    E   D   U   R   E       R   E   T   U   R   N   S   [   x   :
0047540    R   u   n   P   t   r   ]   =  \r       {   x   _   z   o   n
0047560    e   .   N   E   W   [   R   u 376 001  \0 177   @   n   _   [
0047600    ]   ]   ;       I   F       (   c   n   t   R   u   n   _   c
0047620    n   t   R   u   n   -   1   )   <   0       T   H   E   N    
0047640    E   r   r   o   r   }   ;  \r   F   r   e   e   R   u   n   :
0047660    P   U   B   L   I   C       P   R   O   C   E   D   U   R   E
0047700    [   x   :   R   u   n   P   t   r   ]   =  \r       {   z   o
0047720    n   e   .   F   R   E   E   [   @   x   ]   ;       c   n   t
0047740    R   u   n   _   c   n   t   R   u   n   +   1   }   ;  \r  \r
0047760    c   n   t   I   W   i   r   e   :   I   N   T   E   G   E   R
0050000    _   1   0   0   0   ;  \r   A   l   l   o   c   a   t   e   I
0050020    W   i   r   e   :   P   U   B   L   I   C       P   R   O   C
0050040    E   D   U   R   E       R   E   T   U   R   N   S   [   x   :
0050060    I   W   i   r   e   P   t   r   ]   =  \r       {   x   _   z
0050100    o   n   e   .   N   E   W   [   I   W   i   r   e   _   [   ]
0050120    ]   ;       I   F       (   c   n   t   I   W   i   r   e   _
0050140    c   n   t   I   W   i   r   e   -   1   )   <   0       T   H
0050160    E   N       E   r   r   o   r   }   ;  \r   F   r 376 001  \0
0050200    \ 273   e   e   I   W   i   r   e   :   P   U   B   L   I   C
0050220        P   R   O   C   E   D   U   R   E   [   x   :   I   W   i
0050240    r   e   P   t   r   ]   =  \r       {   z   o   n   e   .   F
0050260    R   E   E   [   @   x   ]   ;       c   n   t   I   W   i   r
0050300    e   _   c   n   t   I   W   i   r   e   +   1   }   ;  \r  \r
0050320    E   N   D   .  \r  \r   A   l   l   o   c   a   t   e   L   i
0050340    s   t   :   P   U   B   L   I   C       P   R   O   C   E   D
0050360    U   R   E       R   E   T   U   R   N   S   [   L   O   N   G
0050400        P   O   I   N   T   E   R   ]   =   B   E   G   I   N  \r
0050420    a   n   s   :   L   O   N   G       P   O   I   N   T   E   R
0050440        T   O       L   i   s   t   E   n   t   r   y   _   f   r
0050460    e   e   L   i   s   t   ;  \r   f   r   e   e   L   i   s   t
0050500    _   a   n   s   .   b   ;  \r   a   n   s   ^   _   [   N   I
0050520    L   ,   N   I   L   ]   ;  \r   R   E   T   U   R   N   [   a
0050540    n   s   ]   ;  \r   E   N   D   ;  \r  \r   F   r   e   e   L
0050560    i   s   t   :   P   U   B   L   I   C       P   R   O   C   E
0050600    D   U 376  \0   Z 263   ]   R   E   [   x   :   P   O   I   N
0050620    T   E   R   ]   =   B   E   G   I   N  \r   a   n   s   :   P
0050640    O   I   N   T   E   R       T   O       L   i   s   t   E   n
0050660    t   r   y   =   x   ;  \r   a   n   s   ^   _   [   N   I   L
0050700    ,   f   r   e   e   L   i   s   t   ]   ;  \r   f   r   e   e
0050720    L   i   s   t   _   a   n   s   ;  \r   E   N   D   ;  \r  \r
0050740   \r 377  \0  \0   R   o   u   t   e   C   h   i   p   m   o   n
0050760    k   P   l   o   t   .   m   e   s   a  \0 373 232 347 331 351
0051000   \0  \0 376 001  \0 027   +   -   -       R   o   u   t   e   C
0051020    h   i   p   m   o   n   k   P   l   o   t   .   m   e   s   a
0051040   \r   -   -       c   e   l   l       s   u   b   r   o   u   t
0051060    i   n   e   s       t   o       r   u   n       w   i   t   h
0051100    i   n       C   h   i   p   m   o   n   k  \r  \r   -   -    
0051120    l   a   s   t       c   h   a   n   g   e   d       b   y    
0051140    W       C   r   o   w   t   h   e   r   ,       M   a   y    
0051160    1   0   ,       1   9   8   3           9   :   4   3       A
0051200    M  \r   -   -       w   r   i   t   t   e   n       b   y    
0051220    E   .       M   c   C   r   e   i   g   h   t   ,       S   e
0051240    p   t   e   m   b   e   r       1   6   ,       1   9   8   2
0051260            1   :   4   6       P   M  \r  \r   D   I   R   E   C
0051300    T   O   R   Y  \r           C   h   i   p   U   s   e   r   I
0051320    n   t   ,  \r           p   p   d   d   d   e   f   s   ,  \r
0051340            p   p   d   d   e   f   s   ,  \r           p   p   d
0051360    e   f   s   ,  \r           R   o   u   t   e   D   e   f   s
0051400    ,  \r           S   t   r 376 001  \0 247 367   i   n   g   D
0051420    e   f   s   ;  \r  \r   R   o   u   t   e   C   h   i   p   m
0051440    o   n   k   P   l   o   t   :       P   R   O   G   R   A   M
0051460   \r           I   M   P   O   R   T   S       C   h   i   p   U
0051500    s   e   r   I   n   t   ,       p   p   d   d   d   e   f   s
0051520    ,       p   p   d   d   e   f   s   ,  \r                   p
0051540    p   d   e   f   s   ,       R   o   u   t   e   D   e   f   s
0051560    ,       S   t   r   i   n   g   D   e   f   s  \r           E
0051600    X   P   O   R   T   S       R   o   u   t   e   D   e   f   s
0051620        =  \r           B   E   G   I   N  \r  \r  \r           G
0051640    e   t   C   h   i   p   m   o   n   k   S   t   r   i   n   g
0051660    :       P   U   B   L   I   C       P   R   O   C   E   D   U
0051700    R   E   [  \r                   r   e   s   u   l   t   ,    
0051720    p   r   o   m   p   t   1   :       S   T   R   I   N   G   ,
0051740   \r                   p   r   o   m   p   t   2   ,       p   r
0051760    o   m   p   t   3   :       S   T   R   I   N   G       _    
0052000    N   I   L   ]       =  \r                     376 001  \0   "
0052020  353       B   E   G   I   N  \r                           s   :
0052040        S   T   R   I   N   G       _  \r                        
0052060            C   h   i   p   U   s   e   r   I   n   t   .   R   e
0052100    q   u   e   s   t   S   t   r   i   n   g   [   p   r   o   m
0052120    p   t   1   ,       p   r   o   m   p   t   2   ,       p   r
0052140    o   m   p   t   3  \r                                   !    
0052160    C   h   i   p   U   s   e   r   I   n   t   .   P   u   n   t
0052200        =   >       G   O   T   O       P   u   n   t   e   d   ]
0052220    ;  \r                           r   e   s   u   l   t   .   l
0052240    e   n   g   t   h       _       0   ;  \r                    
0052260        S   t   r   i   n   g   D   e   f   s   .   A   p   p   e
0052300    n   d   S   t   r   i   n   g   [   t   o   :       r   e   s
0052320    u   l   t   ,       f   r   o   m   :       s   ]   ;  \r    
0052340                        p   p   d   e   f   s   .   F   r   e   e
0052360    S   t   r   i   n   g   [   s   ]   ;  \r                    
0052400        E   X   I   T   S  \r                                   P
0052420    u 376 001  \0   ( 241   n   t   e   d       =   >       E   R
0052440    R   O   R       R   o   u   t   e   D   e   f   s   .   I   n
0052460    t   e   r   r   u   p   t   ;  \r                           E
0052500    N   D   ;       -   -       o   f       G   e   t   C   h   i
0052520    p   m   o   n   k   S   t   r   i   n   g  \r  \r  \r        
0052540    P   l   o   t   C   e   l   l   :           P   U   B   L   I
0052560    C       P   R   O   C   E   D   U   R   E       [   c   e   l
0052600    l   :       R   o   u   t   e   D   e   f   s   .   C   e   l
0052620    l   P   t   r   ]       =  \r                   B   E   G   I
0052640    N       O   P   E   N       p   p   d   e   f   s   ;  \r    
0052660                c   e   l   l   O   b   :       o   b   P   t   r
0052700        _       N   I   L   ;  \r                   o   b   1   :
0052720        o   b   P   t   r       _       N   I   L   ;  \r        
0052740            i   t   e   m   C   o   u   n   t   :       I   N   T
0052760    E   G   E   R       _       0   ;  \r                   i   t
0053000    e   m   L   i   s   t   :       l   i   s   t   P   t   r    
0053020    _       N   I   L   ; 376 001  \0   `   /  \r                
0053040    i   t   e   m   1   :       l   i   s   t   P   t   r       _
0053060    N   I   L   ;  \r                   s   x   :       l   o   c
0053100    N   u   m       =       L   a   m   b   d   a   *   c   e   l
0053120    l   .   s   i   z   e   L   .   x   ;  \r                   s
0053140    y   :       l   o   c   N   u   m       =       L   a   m   b
0053160    d   a   *   c   e   l   l   .   s   i   z   e   L   .   y   ;
0053200   \r                   F   O   R       s   :       R   o   u   t
0053220    e   D   e   f   s   .   S   i   g   n   a   l   L   i   s   t
0053240    P   t   r       _       c   e   l   l   .   s   i   g   n   a
0053260    l   s   ,       s   .   t  \r                           W   H
0053300    I   L   E       s   #   N   I   L       D   O  \r            
0053320                s   i   g   n   a   l   :       R   o   u   t   e
0053340    D   e   f   s   .   S   i   g   n   a   l   P   t   r       =
0053360        s   .   h   ;  \r                           o   b   :    
0053400    o   b   P   t   r       =  \r                                
0053420    S   E   L   E   C   T       s   i   g   n 376 001  \0 336 022
0053440    a   l   .   l   e   v   e   l       F   R   O   M  \r        
0053460                                    b   l   u   e       =   >    
0053500    p   p   d   d   d   e   f   s   .   m   a   k   e   W   i   r
0053520    e   [   l   e   n   :       3   *   L   a   m   b   d   a   ,
0053540   \r                                                   w   i   d
0053560    :       3   *   L   a   m   b   d   a   ,       l   :       m
0053600    e   t   ]   ,  \r                                           r
0053620    e   d       =   >       p   p   d   d   d   e   f   s   .   m
0053640    a   k   e   W   i   r   e   [   l   e   n   :       2   *   L
0053660    a   m   b   d   a   ,  \r                                    
0053700                w   i   d   :       2   *   L   a   m   b   d   a
0053720    ,       l   :       p   o   l   ]   ,  \r                    
0053740                        E   N   D   C   A   S   E       -   -   b
0053760    o   t   h   -   -       =   >       p   p   d   d   d   e   f
0054000    s   .   m   a   k   e   P   o   l   y   c   o   n   [   0   ]
0054020    ;  \r                           i   t   e   m   :       l   i
0054040  376 001  \0   ~ 374   s   t   P   t   r       =       p   p   d
0054060    d   d   e   f   s   .   m   a   k   e   L   i   s   t   [   p
0054100    :       o   b   ,  \r                                   x   :
0054120        (   S   E   L   E   C   T       s   i   g   n   a   l   .
0054140    s   i   d   e       F   R   O   M  \r                        
0054160                    n   ,       s       =   >       L   a   m   b
0054200    d   a   *   s   i   g   n   a   l   .   o   f   f   s   e   t
0054220    ,  \r                                           e       =   >
0054240        s   x   -   o   b   .   s   i   z   e   [   0   ]   ,  \r
0054260                                            E   N   D   C   A   S
0054300    E       -   -   w   ,       x   -   -       =   >       0   )
0054320    ,  \r                                   y   :       (   S   E
0054340    L   E   C   T       s   i   g   n   a   l   .   s   i   d   e
0054360        F   R   O   M  \r                                        
0054400    e   ,       w       =   >       s   y   -   L   a   m   b   d
0054420    a   *   s   i   g   n   a   l   .   o   f   f   s   e   t   -
0054440    o   b   .   s   i 376 001  \0 214   H   z   e   [   1   ]   ,
0054460   \r                                           n       =   >    
0054500    0   ,  \r                                           E   N   D
0054520    C   A   S   E       -   -   s   ,       x   -   -       =   >
0054540        s   y   -   o   b   .   s   i   z   e   [   1   ]   )   ,
0054560   \r                                   o   :       0   ,       r
0054600    e   f   l   :       0   ]   ;  \r                           I
0054620    F       s   i   g   n   a   l   .   n   a   m   e   #   N   I
0054640    L       A   N   D       s   i   g   n   a   l   .   n   a   m
0054660    e   .   l   e   n   g   t   h   >   0       T   H   E   N  \r
0054700                                    B   E   G   I   N  \r        
0054720                            t   p   :       L   O   N   G       P
0054740    O   I   N   T   E   R       T   O       t   e   x   t       p
0054760    p   d   e   f   s   .   p   r   o   p       =  \r            
0055000                                p   p   d   d   e   f   s   .   a
0055020    l   o   c   T   e   x   t   P   r   o   p   [   ]   ;  \r    
0055040                                t   p   . 376 001  \0   x  \r   s
0055060        _       n   e   w   S   t   r   i   n   g   [   s   i   g
0055100    n   a   l   .   n   a   m   e   ]   ;  \r                    
0055120                p   p   d   d   d   e   f   s   .   p   u   t   P
0055140    r   o   p   [   i   t   e   m   ,       t   p   ]   ;  \r    
0055160                                E   N   D   ;  \r                
0055200            i   t   e   m   L   i   s   t       _       p   p   d
0055220    d   e   f   s   .   i   n   s   e   r   t   L   i   s   t   [
0055240    i   t   e   m   L   i   s   t   ,       i   t   e   m   ]   ;
0055260   \r                           i   t   e   m   C   o   u   n   t
0055300        _       i   t   e   m   C   o   u   n   t   +   1   ;  \r
0055320                            E   N   D   L   O   O   P   ;  \r    
0055340                o   b   1       _       p   p   d   d   d   e   f
0055360    s   .   m   a   k   e   W   i   r   e   [   l   e   n   :    
0055400    s   y   ,       w   i   d   :       1   *   L   a   m   b   d
0055420    a   ,       l   :       p   o   l   ]   ;  \r                
0055440    i   t   e   m   1       _       p   p   d   d   d   e   f 376
0055460  001  \0 264 231   s   .   m   a   k   e   L   i   s   t   [   p
0055500    :       o   b   1   ,       x   :       0   ,       y   :    
0055520    0   ,       o   :       0   ,       r   e   f   l   :       0
0055540    ]   ;  \r                   i   t   e   m   L   i   s   t    
0055560    _       p   p   d   d   e   f   s   .   i   n   s   e   r   t
0055600    L   i   s   t   [   i   t   e   m   L   i   s   t   ,       i
0055620    t   e   m   1   ]   ;  \r                   i   t   e   m   1
0055640        _       p   p   d   d   d   e   f   s   .   m   a   k   e
0055660    L   i   s   t   [   p   :       o   b   1   ,       x   :    
0055700    s   x   -   1   ,       y   :       0   ,       o   :       0
0055720    ,       r   e   f   l   :       0   ]   ;  \r                
0055740    i   t   e   m   L   i   s   t       _       p   p   d   d   e
0055760    f   s   .   i   n   s   e   r   t   L   i   s   t   [   i   t
0056000    e   m   L   i   s   t   ,       i   t   e   m   1   ]   ;  \r
0056020                    o   b   1       _       p   p   d   d   d   e
0056040    f   s   .   m   a   k   e   W   i   r   e   [   l   e   n   :
0056060        s   x   , 376 001  \0   l 272       w   i   d   :       1
0056100    *   L   a   m   b   d   a   ,       l   :       p   o   l   ]
0056120    ;  \r                   i   t   e   m   1       _       p   p
0056140    d   d   d   e   f   s   .   m   a   k   e   L   i   s   t   [
0056160    p   :       o   b   1   ,       x   :       0   ,       y   :
0056200        0   ,       o   :       2   ,       r   e   f   l   :    
0056220    0   ]   ;  \r                   i   t   e   m   L   i   s   t
0056240        _       p   p   d   d   e   f   s   .   i   n   s   e   r
0056260    t   L   i   s   t   [   i   t   e   m   L   i   s   t   ,    
0056300    i   t   e   m   1   ]   ;  \r                   i   t   e   m
0056320    1       _       p   p   d   d   d   e   f   s   .   m   a   k
0056340    e   L   i   s   t   [   p   :       o   b   1   ,       x   :
0056360        0   ,       y   :       s   y   -   1   ,       o   :    
0056400    2   ,       r   e   f   l   :       0   ]   ;  \r            
0056420        i   t   e   m   L   i   s   t       _       p   p   d   d
0056440    e   f   s   .   i   n   s   e   r   t   L   i   s   t   [   i
0056460    t   e   m   L   i   s   t   ,     376 001  \0 345 372   i   t
0056500    e   m   1   ]   ;  \r                   i   t   e   m   C   o
0056520    u   n   t       _       i   t   e   m   C   o   u   n   t   +
0056540    4   ;  \r                   c   e   l   l   O   b       _    
0056560    p   p   d   d   d   e   f   s   .   m   a   k   e   C   e   l
0056600    l   [   s   x   :       s   x   ,       s   y   :       s   y
0056620    ,       c   n   t   :       i   t   e   m   C   o   u   n   t
0056640    ,       p   t   r   :       i   t   e   m   L   i   s   t   ]
0056660    ;  \r                   m   a   s   t   e   r   L   i   s   t
0056700        _       p   p   d   d   e   f   s   .   i   n   s   e   r
0056720    t   L   i   s   t   [   m   a   s   t   e   r   L   i   s   t
0056740    ,  \r                           p   p   d   d   d   e   f   s
0056760    .   m   a   k   e   L   i   s   t   [   p   :       c   e   l
0057000    l   O   b   ,       x   :       L   a   m   b   d   a   *   c
0057020    e   l   l   .   p   o   s   .   x   ,  \r                    
0057040                y   :       -   L   a   m   b   d   a   *   c   e
0057060    l   l   .   p   o   s   .   y   -   s   y   ,  \r     376 001
0057100   \0 023 235                               o   :       0   ,    
0057120    r   e   f   l   :       0   ]   ]   ;  \r                   p
0057140    p   d   d   e   f   s   .   d   C   h   a   n   g   e       _
0057160        T   R   U   E   ;  \r                   E   N   D   ;    
0057200        -   -       o   f       P   l   o   t   C   e   l   l  \r
0057220   \r  \r           r   o   u   t   e   L   i   s   t   :       p
0057240    p   d   e   f   s   .   l   i   s   t   P   t   r       _    
0057260    N   I   L   ;  \r  \r           S   t   a   r   t   P   l   o
0057300    t   :       P   U   B   L   I   C       P   R   O   C   E   D
0057320    U   R   E       =       {   r   o   u   t   e   L   i   s   t
0057340        _       N   I   L   }   ;  \r  \r           E   n   d   P
0057360    l   o   t   :       P   U   B   L   I   C       P   R   O   C
0057400    E   D   U   R   E       =  \r                   B   E   G   I
0057420    N       O   P   E   N       p   p   d   e   f   s   ;  \r    
0057440                m   i   x   ,       m   i   y   ,       m   a   x
0057460    ,       m   a   y   :       l   o   c   N   u   m   ;  \r    
0057500              376 001  \0   r 354   c   o   u   n   t   :       I
0057520    N   T   E   G   E   R       _       0   ;  \r                
0057540    l   p   :       L   O   N   G       P   O   I   N   T   E   R
0057560        T   O       l   i   s   t   ;  \r                   c   e
0057600    l   l   O   b   :       o   b   P   t   r   ;  \r            
0057620        [   m   i   x   ,       m   i   y   ,       m   a   x   ,
0057640        m   a   y   ]       _       m   i   n   m   a   x   [   r
0057660    o   u   t   e   L   i   s   t   ]   ;  \r                   m
0057700    i   x       _       0   ;  \r                   m   i   y    
0057720    _       -   L   a   m   b   d   a   *   R   o   u   t   e   D
0057740    e   f   s   .   p   r   o   b   l   e   m   .   c   h   i   p
0057760    S   i   z   e   .   y   ;  \r                   m   a   x    
0060000    _       L   a   m   b   d   a   *   R   o   u   t   e   D   e
0060020    f   s   .   p   r   o   b   l   e   m   .   c   h   i   p   S
0060040    i   z   e   .   x   ;  \r                   m   a   y       _
0060060        0   ;  \r                   F   O   R       l   i   s   t
0060100    :       l   i   s   t   P   t 376 001  \0   V 023   r       _
0060120        r   o   u   t   e   L   i   s   t   ,       l   i   s   t
0060140    .   n   x   t       W   H   I   L   E       l   i   s   t   #
0060160    N   I   L       D   O  \r                           l   i   s
0060200    t   .   l   x       _       l   i   s   t   .   l   x   -   m
0060220    i   x   ;  \r                           l   i   s   t   .   l
0060240    y       _       l   i   s   t   .   l   y   -   m   i   y   ;
0060260   \r                           c   o   u   n   t       _       c
0060300    o   u   n   t   +   1   ;  \r                           E   N
0060320    D   L   O   O   P   ;  \r                   c   e   l   l   O
0060340    b       _       p   p   d   d   d   e   f   s   .   m   a   k
0060360    e   C   e   l   l   [   s   x   :       m   a   x   -   m   i
0060400    x   ,       s   y   :       m   a   y   -   m   i   y   ,  \r
0060420                            c   n   t   :       c   o   u   n   t
0060440    ,       p   t   r   :       r   o   u   t   e   L   i   s   t
0060460    ]   ;  \r                   m   a   s   t   e   r   L   i   s
0060500    t       _       p   p   d   d   e   f   s   .   i 376 001  \0
0060520  331 260   n   s   e   r   t   L   i   s   t   [   m   a   s   t
0060540    e   r   L   i   s   t   ,  \r                           l   p
0060560    _   p   p   d   d   d   e   f   s   .   m   a   k   e   L   i
0060600    s   t   [   p   :       c   e   l   l   O   b   ,       x   :
0060620        m   i   x   ,       y   :       m   i   y   ,  \r        
0060640                            o   :       0   ,       r   e   f   l
0060660    :       0   ]   ]   ;  \r                   p   p   d   d   e
0060700    f   s   .   d   C   h   a   n   g   e       _       T   R   U
0060720    E   ;  \r                   r   o   u   t   e   L   i   s   t
0060740        _       N   I   L   ;  \r                   E   N   D   ;
0060760   \r  \r           P   l   o   t   B   l   u   e   W   i   r   e
0061000    :       P   U   B   L   I   C       P   R   O   C   E   D   U
0061020    R   E   [   h   o   r   :       B   O   O   L   E   A   N   ,
0061040   \r                   x   ,   y   ,   l   :       R   o   u   t
0061060    e   D   e   f   s   .   L   a   m   b   d   a   ]       =  \r
0061100                    B   E   G   I   N       O   P   E   N       p
0061120    p   d 376 001  \0 370 202   e   f   s   ;  \r                
0061140    i   t   e   m   :       l   i   s   t   P   t   r   ;  \r    
0061160                w   i   r   e   :       o   b   P   t   r   ;  \r
0061200                    I   F       l   <   =   0       T   H   E   N
0061220        E   R   R   O   R   ;  \r                   w   i   r   e
0061240        _       p   p   d   d   d   e   f   s   .   m   a   k   e
0061260    W   i   r   e   [   l   e   n   :       L   a   m   b   d   a
0061300    *   l   ,       w   i   d   :       3   *   L   a   m   b   d
0061320    a   ,       l   :       m   e   t   ]   ;  \r                
0061340    i   t   e   m       _       p   p   d   d   d   e   f   s   .
0061360    m   a   k   e   L   i   s   t   [   p   :       w   i   r   e
0061400    ,       x   :       L   a   m   b   d   a   *   x   ,  \r    
0061420                        y   :       -   L   a   m   b   d   a   *
0061440    y   -   w   i   r   e   .   s   i   z   e   [   I   F       h
0061460    o   r       T   H   E   N       0       E   L   S   E       1
0061500    ]   ,  \r                           o   :       (   I   F    
0061520    h   o   r       T   H   E 376 001  \0 273 350   N       2    
0061540    E   L   S   E       0   )   ,       r   e   f   l   :       0
0061560    ]   ;  \r                   r   o   u   t   e   L   i   s   t
0061600        _       p   p   d   d   e   f   s   .   i   n   s   e   r
0061620    t   L   i   s   t   [   r   o   u   t   e   L   i   s   t   ,
0061640        i   t   e   m   ]   ;  \r                   E   N   D   ;
0061660        -   -       o   f       P   l   o   t   B   l   u   e   W
0061700    i   r   e  \r  \r           P   l   o   t   R   e   d   W   i
0061720    r   e   :       P   U   B   L   I   C       P   R   O   C   E
0061740    D   U   R   E   [   h   o   r   :       B   O   O   L   E   A
0061760    N   ,  \r                   x   ,   y   ,   l   :       R   o
0062000    u   t   e   D   e   f   s   .   L   a   m   b   d   a   ]    
0062020    =  \r                   B   E   G   I   N       O   P   E   N
0062040        p   p   d   e   f   s   ;  \r                   i   t   e
0062060    m   :       l   i   s   t   P   t   r   ;  \r                
0062100    w   i   r   e   :       o   b   P   t   r   ;  \r            
0062120        I   F       l   <   =   0       T   H   E 376 001  \0   /
0062140    $   N       E   R   R   O   R   ;  \r                   w   i
0062160    r   e       _       p   p   d   d   d   e   f   s   .   m   a
0062200    k   e   W   i   r   e   [   l   e   n   :       L   a   m   b
0062220    d   a   *   l   ,       w   i   d   :       2   *   L   a   m
0062240    b   d   a   ,       l   :       p   o   l   ]   ;  \r        
0062260            i   t   e   m       _       p   p   d   d   d   e   f
0062300    s   .   m   a   k   e   L   i   s   t   [   p   :       w   i
0062320    r   e   ,       x   :       L   a   m   b   d   a   *   x   ,
0062340   \r                           y   :       -   L   a   m   b   d
0062360    a   *   y   -   w   i   r   e   .   s   i   z   e   [   I   F
0062400        h   o   r       T   H   E   N       0       E   L   S   E
0062420        1   ]   ,  \r                           o   :       (   I
0062440    F       h   o   r       T   H   E   N       2       E   L   S
0062460    E       0   )   ,       r   e   f   l   :       0   ]   ;  \r
0062500                    r   o   u   t   e   L   i   s   t       _    
0062520    p   p   d   d   e   f   s   .   i   n   s   e   r   t   L   i
0062540    s 376 001  \0 271 367   t   [   r   o   u   t   e   L   i   s
0062560    t   ,       i   t   e   m   ]   ;  \r                   E   N
0062600    D   ;       -   -       o   f       P   l   o   t   R   e   d
0062620    W   i   r   e  \r  \r  \r           P   l   o   t   B   l   u
0062640    e   R   e   d   C   o   n   t   a   c   t   :       P   U   B
0062660    L   I   C       P   R   O   C   E   D   U   R   E   [   x   ,
0062700    y   :       R   o   u   t   e   D   e   f   s   .   L   a   m
0062720    b   d   a   ]       =  \r                   B   E   G   I   N
0062740        O   P   E   N       p   p   d   e   f   s   ;  \r        
0062760            i   t   e   m   :       l   i   s   t   P   t   r   ;
0063000   \r                   c   o   n   t   :       o   b   P   t   r
0063020        =       p   p   d   d   d   e   f   s   .   m   a   k   e
0063040    P   o   l   y   c   o   n   [   0   ]   ;  \r                
0063060    i   t   e   m       _       p   p   d   d   d   e   f   s   .
0063100    m   a   k   e   L   i   s   t   [   p   :       c   o   n   t
0063120    ,       x   :       L   a   m   b   d   a   *   x   ,  \r    
0063140                        y 376  \0 310   "   C   :       -   L   a
0063160    m   b   d   a   *   y   -   c   o   n   t   .   s   i   z   e
0063200    [   1   ]   ,       o   :       0   ,       r   e   f   l   :
0063220        0   ]   ;  \r                   r   o   u   t   e   L   i
0063240    s   t       _       p   p   d   d   e   f   s   .   i   n   s
0063260    e   r   t   L   i   s   t   [   r   o   u   t   e   L   i   s
0063300    t   ,       i   t   e   m   ]   ;  \r                   E   N
0063320    D   ;       -   -       o   f       P   l   o   t   B   l   u
0063340    e   R   e   d   C   o   n   t   a   c   t  \r  \r  \r        
0063360    I   n   t   e   r   r   u   p   t   :       P   U   B   L   I
0063400    C       E   R   R   O   R       =       C   O   D   E   ;  \r
0063420   \r  \r           E   N   D   .       -   -       o   f       R
0063440    o   u   t   e   C   h   i   p   m   o   n   k   P   l   o   t
0063460   \r  \r  \r 377  \0  \0   R   o   u   t   e   P   a   r   s   e
0063500    .   m   e   s   a  \0 373 233   ,   m  \v  \0  \0 376 001  \0
0063520  227  \0   -   -   R   o   u   t   e   P   a   r   s   e   .   m
0063540    e   s   a  \r  \r   D   I   R   E   C   T   O   R   Y  \r    
0063560        I   O   D   e   f   s   :       F   R   O   M       "   I
0063600    O   D   e   f   s   "   ,  \r           S   e   g   m   e   n
0063620    t   D   e   f   s   :       F   R   O   M       "   S   e   g
0063640    m   e   n   t   D   e   f   s   "   ,  \r           R   o   u
0063660    t   e   D   e   f   s   :   F   R   O   M       "   R   o   u
0063700    t   e   D   e   f   s   "   ,  \r           S   t   r   i   n
0063720    g   D   e   f   s   :   F   R   O   M       "   S   t   r   i
0063740    n   g   D   e   f   s   "   ,  \r           S   y   s   t   e
0063760    m   D   e   f   s   :       F   R   O   M       "   S   y   s
0064000    t   e   m   D   e   f   s   "   ,  \r           S   t   r   e
0064020    a   m   D   e   f   s   :       F   R   O   M       "   S   t
0064040    r   e   a   m   D   e   f   s   "   ;  \r  \r   R   o   u   t
0064060    e   P   a   r   s   e   :   P   R   O   G   R   A   M       I
0064100    M   P   O   R   T   S       S   e   g   m   e   n   t   D   e
0064120    f   s 376 001  \0   t   Q   ,       S   t   r   i   n   g   D
0064140    e   f   s   ,       I   O   D   e   f   s   ,       S   y   s
0064160    t   e   m   D   e   f   s   ,       S   t   r   e   a   m   D
0064200    e   f   s   ,       R   o   u   t   e   D   e   f   s       E
0064220    X   P   O   R   T   S       R   o   u   t   e   D   e   f   s
0064240    =   B   E   G   I   N       O   P   E   N       R   o   u   t
0064260    e   D   e   f   s   ;  \r  \r   E   r   r   o   r   :   S   I
0064300    G   N   A   L   =   C   O   D   E   ;  \r   D   o   n   e   :
0064320    S   I   G   N   A   L   =   C   O   D   E   ;  \r   F   e   e
0064340    d   :   C   H   A   R   A   C   T   E   R   =   1   4   C   ;
0064360   \r   T   a   b   :   C   H   A   R   A   C   T   E   R   =   '
0064400   \t   ;  \r   C   o   m   m   a   :   C   H   A   R   A   C   T
0064420    E   R   =   '   ,   ;  \r   S   Q   :   C   H   A   R   A   C
0064440    T   E   R   =   '   '   ;  \r   G   e   t   s   :   C   H   A
0064460    R   A   C   T   E   R   =   '   _   ;  \r   l   P   a   r   e
0064500    n   :   C   H   A   R   A   C   T   E   R   =   '   (   ;  \r
0064520    r   P   a   r   e   n   : 376 001  \0 241  \v   C   H   A   R
0064540    A   C   T   E   R   =   '   )   ;  \r   P   l   u   s   :   C
0064560    H   A   R   A   C   T   E   R   =   '   +   ;  \r   M   i   n
0064600    u   s   :   C   H   A   R   A   C   T   E   R   =   '   -   ;
0064620   \r   D   e   l   :   C   H   A   R   A   C   T   E   R   =   3
0064640    7   7   C   ;  \r  \r  \r   c   e   l   l   C   o   d   e   :
0064660    I   N   T   E   G   E   R   =   -   1   ;  \r   p   o   s   C
0064700    o   d   e   :   I   N   T   E   G   E   R   =   -   2   ;  \r
0064720    s   i   z   e   C   o   d   e   :   I   N   T   E   G   E   R
0064740    =   -   3   ;  \r   e   n   d   F   i   l   e   C   o   d   e
0064760    :   I   N   T   E   G   E   R   =   -   4   ;  \r   n   a   m
0065000    e   C   o   d   e   :   I   N   T   E   G   E   R   =   -   5
0065020    ;  \r   s   i   d   e   C   o   d   e   :   I   N   T   E   G
0065040    E   R   =   -   6   ;  \r   l   e   v   e   l   C   o   d   e
0065060    :   I   N   T   E   G   E   R   =   -   7   ;  \r   o   f   f
0065100    s   e   t   C   o   d   e   :   I   N   T   E   G   E   R   =
0065120    -   8   ;  \r   n   o   r   t   h   C   o   d 376 001  \0 032
0065140  260   e   :   I   N   T   E   G   E   R   =   -   9   ;  \r   s
0065160    o   u   t   h   C   o   d   e   :   I   N   T   E   G   E   R
0065200    =   -   1   0   ;  \r   e   a   s   t   C   o   d   e   :   I
0065220    N   T   E   G   E   R   =   -   1   1   ;  \r   w   e   s   t
0065240    C   o   d   e   :   I   N   T   E   G   E   R   =   -   1   2
0065260    ;  \r   r   e   d   C   o   d   e   :   I   N   T   E   G   E
0065300    R   =   -   1   3   ;  \r   b   l   u   e   C   o   d   e   :
0065320    I   N   T   E   G   E   R   =   -   1   4   ;  \r   b   o   t
0065340    h   C   o   d   e   :   I   N   T   E   G   E   R   =   -   1
0065360    5   ;  \r   c   h   i   p   C   o   d   e   :   I   N   T   E
0065400    G   E   R   =   -   1   6   ;  \r   l   e   f   t   B   r   a
0065420    c   k   e   t   C   o   d   e   :   I   N   T   E   G   E   R
0065440    =   -   1   7   ;  \r   r   i   g   h   t   B   r   a   c   k
0065460    e   t   C   o   d   e   :   I   N   T   E   G   E   R   =   -
0065500    1   8   ;  \r   c   o   m   m   a   C   o   d   e   :   I   N
0065520    T   E   G   E   R   =   -   1   9   ;  \r   n   e   t   C   o
0065540    d 376 001  \0 270   :   e   :   I   N   T   E   G   E   R   =
0065560    -   2   0   ;  \r   t   i   e   C   o   d   e   :   I   N   T
0065600    E   G   E   R   =   -   2   1   ;  \r  \r   R   e   t   :   C
0065620    H   A   R   A   C   T   E   R   =   '  \r   ;  \r   S   p   a
0065640    c   e   :   C   H   A   R   A   C   T   E   R   =   '       ;
0065660   \r  \r   i   n   n   s   t   r   e   a   m   :   S   t   r   e
0065700    a   m   D   e   f   s   .   D   i   s   k   H   a   n   d   l
0065720    e   _   N   I   L   ;  \r  \r   f   i   l   e   N   a   m   e
0065740    :   S   T   R   I   N   G   _       [   5   0   ]   ;  \r  \r
0065760    G   e   t   I   n   p   u   t   :   P   U   B   L   I   C    
0066000    P   R   O   C   E   D   U   R   E   =   {   G   e   t   I   n
0066020    p   u   t   F   i   l   e   ;       P   a   r   s   e   }   ;
0066040   \r  \r   G   e   t   I   n   p   u   t   F   i   l   e   :   P
0066060    R   O   C   E   D   U   R   E   =   B   E   G   I   N  \r   F
0066100    O   R       i   :   I   N   T   E   G   E   R       I   N    
0066120    [   0   .   .   1   0   0   0   )       D   O  \r   g   o   o
0066140    d   :   B   O   O   L 376 001  \0   a   *   E   A   N   _   T
0066160    R   U   E   ;  \r   I   F       c   h   i   p   m   o   n   k
0066200        T   H   E   N       G   e   t   C   h   i   p   m   o   n
0066220    k   S   t   r   i   n   g   [   f   i   l   e   N   a   m   e
0066240    ,   "   "   L   ,       "   i   n   p   u   t       f   i   l
0066260    e       n   a   m   e   =       "   L   ,   "   "   L   ]  \r
0066300    E   L   S   E       B   E   G   I   N  \r           I   F    
0066320    i   #   0       T   H   E   N       I   O   D   e   f   s   .
0066340    W   r   i   t   e   S   t   r   i   n   g   [   "           n
0066360    o       s   u   c   h       f   i   l   e   !   "   L   ]   ;
0066400   \r           A   s   k   F   o   r   F   i   l   e   N   a   m
0066420    e   [   "   i   n   p   u   t       f   i   l   e       n   a
0066440    m   e   =       "   ]   ;  \r           -   -   I   F       f
0066460    i   l   e   N   a   m   e   .   l   e   n   g   t   h   =   0
0066500        T   H   E   N       I   m   a   g   e   D   e   f   s   .
0066520    S   t   o   p   M   e   s   a   [   ]   ;  \r           E   N
0066540    D   ;  \r   F   i   x   E   x   t   e   n 376 001  \0   L   h
0066560    s   i   o   n   [   f   i   l   e   N   a   m   e   ,   "   .
0066600    t   x   t   "   L   ]   ;  \r   i   n   n   s   t   r   e   a
0066620    m   _   S   t   r   e   a   m   D   e   f   s   .   N   e   w
0066640    B   y   t   e   S   t   r   e   a   m   [   f   i   l   e   N
0066660    a   m   e   ,   S   t   r   e   a   m   D   e   f   s   .   R
0066700    e   a   d  \r                       !   S   e   g   m   e   n
0066720    t   D   e   f   s   .   F   i   l   e   N   a   m   e   E   r
0066740    r   o   r   =   >   {   g   o   o   d   _   F   A   L   S   E
0066760    ;       C   O   N   T   I   N   U   E   }   ]   ;  \r        
0067000    I   F       g   o   o   d       T   H   E   N       E   X   I
0067020    T   ;  \r           E   N   D   L   O   O   P   ;  \r   E   N
0067040    D   ;  \r  \r   F   i   x   E   x   t   e   n   s   i   o   n
0067060    :       P   R   O   C   E   D   U   R   E       [   s   ,    
0067100    e   x   t   :       S   T   R   I   N   G   ]   =   B   E   G
0067120    I   N  \r   F   O   R       i   :       C   A   R   D   I   N
0067140    A   L       I   N       [   0   .   .   s   .   l   e   n   g
0067160  376 001  \0 362 315   t   h   )       D   O       I   F       s
0067200    [   i   ]       =       '   .       T   H   E   N       R   E
0067220    T   U   R   N   ;       E   N   D   L   O   O   P   ;  \r   S
0067240    t   r   i   n   g   D   e   f   s   .   A   p   p   e   n   d
0067260    S   t   r   i   n   g   [   t   o   :       s   ,       f   r
0067300    o   m   :       e   x   t   ]   ;  \r   E   N   D   ;  \r  \r
0067320    A   s   k   F   o   r   F   i   l   e   N   a   m   e   :   P
0067340    R   O   C   E   D   U   R   E   [   s   :   S   T   R   I   N
0067360    G   ]   =       B   E   G   I   N       O   P   E   N       I
0067400    O   D   e   f   s   ;  \r   W   r   i   t   e   C   h   a   r
0067420    [   R   e   t   ]   ;  \r   W   r   i   t   e   S   t   r   i
0067440    n   g   [   s   ]   ;  \r   R   e   a   d   I   D   [   f   i
0067460    l   e   N   a   m   e       !   R   u   b   o   u   t   =   >
0067500    R   E   T   R   Y   ;   ]   ;  \r   E   N   D   ;  \r  \r   P
0067520    a   r   s   e   :   P   R   O   C   E   D   U   R   E   =   B
0067540    E   G   I   N  \r   D   i   c   t   I   n   i   t   [   ]   ;
0067560   \r   R   e   a   d 376 001  \0 207 354   T   h   e   F   i   l
0067600    e   [   ]   ;  \r   i   n   n   s   t   r   e   a   m   .   d
0067620    e   s   t   r   o   y   [   i   n   n   s   t   r   e   a   m
0067640    ]   ;  \r   E   N   D   ;  \r  \r   n   e   x   t   N   e   t
0067660    N   o   :   N   e   t   N   o   ;  \r  \r   R   e   a   d   T
0067700    h   e   F   i   l   e   :   P   R   O   C   E   D   U   R   E
0067720    =   B   E   G   I   N  \r   c   e   l   l   :   C   e   l   l
0067740    P   t   r   _   N   I   L   ;  \r   s   i   g   n   a   l   :
0067760    S   i   g   n   a   l   P   t   r   _   N   I   L   ;  \r   n
0070000    e   t   N   u   m   b   e   r   :   I   N   T   E   G   E   R
0070020    _   0   ;  \r   t   :   I   N   T   E   G   E   R   ;  \r   p
0070040    r   o   b   l   e   m   _   [   ]   ;  \r   h   o   l   d   _
0070060    F   A   L   S   E   ;  \r   n   e   x   t   N   e   t   N   o
0070100    _   1   ;  \r   D   O       S   E   L   E   C   T       t   _
0070120    G   e   t   T   o   k   e   n   [   ]       F   R   O   M  \r
0070140            >   0   =   >   E   r   r   o   r   ;  \r           =
0070160    0   =   >   E   r   r   o   r   ;  \r 376 001  \0 301   b    
0070200        c   h   i   p   C   o   d   e   =   >   p   r   o   b   l
0070220    e   m   .   c   h   i   p   S   i   z   e   _   R   e   a   d
0070240    P   o   i   n   t   [   ]   ;  \r           c   e   l   l   C
0070260    o   d   e   =   >   B   E   G   I   N  \r                    
0070300        c   e   l   l   N   o   :   I   N   T   E   G   E   R   _
0070320    N   u   m   b   e   r   [   ]   ;  \r                        
0070340    c   e   l   l   _   N   I   L   ;       s   i   g   n   a   l
0070360    _   N   I   L   ;  \r                           F   O   R    
0070400    c   l   :   C   e   l   l   L   i   s   t   P   t   r   _   p
0070420    r   o   b   l   e   m   .   c   e   l   l   s   ,   c   l   .
0070440    t       U   N   T   I   L       c   l   =   N   I   L       D
0070460    O  \r                                   I   F       c   l   .
0070500    h   .   c   e   l   l   N   o   =   c   e   l   l   N   o    
0070520    T   H   E   N       {   c   e   l   l   _   c   l   .   h   ;
0070540        E   X   I   T   }   ;       E   N   D   L   O   O   P   ;
0070560   \r                           I   F       c   e   l   l   = 376
0070600  001  \0 270 226   N   I   L       T   H   E   N       B   E   G
0070620    I   N  \r                                           c   e   l
0070640    l   L   i   s   t   :   C   e   l   l   L   i   s   t   P   t
0070660    r   _   A   l   l   o   c   a   t   e   L   i   s   t   [   ]
0070700    ;  \r                                           c   e   l   l
0070720    _   A   l   l   o   c   a   t   e   C   e   l   l   [   ]   ;
0070740   \r                                           c   e   l   l   .
0070760    c   e   l   l   N   o   _   c   e   l   l   N   o   ;  \r    
0071000                                        c   e   l   l   L   i   s
0071020    t   ^   _   [   c   e   l   l   ,   p   r   o   b   l   e   m
0071040    .   c   e   l   l   s   ]   ;  \r                            
0071060                p   r   o   b   l   e   m   .   c   e   l   l   s
0071100    _   c   e   l   l   L   i   s   t   ;  \r                    
0071120                E   N   D   ;  \r                           E   N
0071140    D   ;  \r           e   n   d   F   i   l   e   C   o   d   e
0071160    =   >   R   E   T   U   R   N   ;  \r           p   o   s   C
0071200    o   d   e   = 376 001  \0 340   }   >   I   F       c   e   l
0071220    l   =   N   I   L       T   H   E   N       E   r   r   o   r
0071240        E   L   S   E       c   e   l   l   .   p   o   s   _   R
0071260    e   a   d   P   o   i   n   t   [   ]   ;  \r           s   i
0071300    z   e   C   o   d   e   =   >   I   F       c   e   l   l   =
0071320    N   I   L       T   H   E   N       E   r   r   o   r       E
0071340    L   S   E       c   e   l   l   .   s   i   z   e   L   _   R
0071360    e   a   d   P   o   i   n   t   [   ]   ;  \r           n   a
0071400    m   e   C   o   d   e   =   >   B   E   G   I   N  \r        
0071420            j   :   S   T   R   I   N   G   _   R   e   a   d   N
0071440    a   m   e   [   ]   ;  \r                   s   i   g   n   a
0071460    l   L   i   s   t   :   S   i   g   n   a   l   L   i   s   t
0071500    P   t   r   _   A   l   l   o   c   a   t   e   L   i   s   t
0071520    [   ]   ;  \r                   I   F       c   e   l   l   =
0071540    N   I   L       T   H   E   N       E   r   r   o   r   ;  \r
0071560                    F   O   R       s   l   :   S   i   g   n   a
0071600    l   L   i   s   t   P   t   r   _ 376 001  \0   F 304   c   e
0071620    l   l   .   s   i   g   n   a   l   s   ,   s   l   .   t    
0071640    U   N   T   I   L       s   l   =   N   I   L       D   O  \r
0071660                            s   :   S   i   g   n   a   l   P   t
0071700    r   =   s   l   .   h   ;  \r                           I   F
0071720        S   a   m   e   S   t   r   i   n   g   [   j   ,   s   .
0071740    n   a   m   e   ]       T   H   E   N       E   r   r   o   r
0071760    ;  \r                           E   N   D   L   O   O   P   ;
0072000   \r                   s   i   g   n   a   l   _   A   l   l   o
0072020    c   a   t   e   S   i   g   n   a   l   [   ]   ;  \r        
0072040            s   i   g   n   a   l   .   n   a   m   e   _   j   ;
0072060   \r                   s   i   g   n   a   l   L   i   s   t   ^
0072100    _   [   s   i   g   n   a   l   ,   c   e   l   l   .   s   i
0072120    g   n   a   l   s   ]   ;  \r                   c   e   l   l
0072140    .   s   i   g   n   a   l   s   _   s   i   g   n   a   l   L
0072160    i   s   t   ;  \r                   E   N   D   ;  \r        
0072200    s   i   d   e   C   o   d   e   =   >   I   F       s 376 001
0072220   \0   > 234   i   g   n   a   l   =   N   I   L       T   H   E
0072240    N       E   r   r   o   r       E   L   S   E       s   i   g
0072260    n   a   l   .   s   i   d   e   _   R   e   a   d   S   i   d
0072300    e   [   ]   ;  \r           l   e   v   e   l   C   o   d   e
0072320    =   >   I   F       s   i   g   n   a   l   =   N   I   L    
0072340    T   H   E   N       E   r   r   o   r       E   L   S   E    
0072360    s   i   g   n   a   l   .   l   e   v   e   l   _   R   e   a
0072400    d   L   e   v   e   l   [   ]   ;  \r           o   f   f   s
0072420    e   t   C   o   d   e   =   >   I   F       s   i   g   n   a
0072440    l   =   N   I   L       T   H   E   N       E   r   r   o   r
0072460        E   L   S   E       s   i   g   n   a   l   .   o   f   f
0072500    s   e   t   _   N   u   m   b   e   r   [   ]   ;  \r        
0072520    n   e   t   C   o   d   e   =   >   n   e   t   N   u   m   b
0072540    e   r   _   n   e   t   N   u   m   b   e   r   +   1   ;  \r
0072560            t   i   e   C   o   d   e   =   >   B   E   G   I   N
0072600   \r                   s   :   S   T   R   I   N   G   _   R   e
0072620    a   d   N 376 001  \0   3 213   a   m   e   [   ]   ;  \r    
0072640                n   e   t   L   i   s   t   :   N   e   t   L   i
0072660    s   t   P   t   r   _   A   l   l   o   c   a   t   e   L   i
0072700    s   t   [   ]   ;  \r                   n   e   t   :   N   e
0072720    t   P   t   r   _   A   l   l   o   c   a   t   e   N   e   t
0072740    [   ]   ;  \r                   n   e   t   ^   _   [   n   e
0072760    t   N   u   m   b   e   r   ,   s   ,   n   e   x   t   N   e
0073000    t   N   o   ]   ;  \r                   n   e   x   t   N   e
0073020    t   N   o   _   n   e   x   t   N   e   t   N   o   +   1   ;
0073040   \r                   n   e   t   L   i   s   t   ^   _   [   n
0073060    e   t   ,   p   r   o   b   l   e   m   .   w   i   r   e   l
0073100    i   s   t   ]   ;  \r                   p   r   o   b   l   e
0073120    m   .   w   i   r   e   l   i   s   t   _   n   e   t   L   i
0073140    s   t   ;  \r                   E   N   D   ;  \r           E
0073160    N   D   C   A   S   E   =   >   E   r   r   o   r   ;  \r    
0073200        E   N   D   L   O   O   P   ;  \r   E   N   D   ;  \r  \r
0073220    R   e   a   d   P   o   i   n 376 001  \0 334   `   t   :   P
0073240    R   O   C   E   D   U   R   E       R   E   T   U   R   N   S
0073260    [   c   :   C   o   o   r   d   L   ]   =   B   E   G   I   N
0073300   \r   t   :   I   N   T   E   G   E   R   _   G   e   t   T   o
0073320    k   e   n   [   ]   ;  \r   I   F       t   #   l   e   f   t
0073340    B   r   a   c   k   e   t   C   o   d   e       T   H   E   N
0073360        E   r   r   o   r   ;  \r   c   .   x   _   N   u   m   b
0073400    e   r   [   ]   ;  \r   t   _   G   e   t   T   o   k   e   n
0073420    [   ]   ;  \r   I   F       t   #   c   o   m   m   a   C   o
0073440    d   e       T   H   E   N       E   r   r   o   r   ;  \r   c
0073460    .   y   _   N   u   m   b   e   r   [   ]   ;  \r   t   _   G
0073500    e   t   T   o   k   e   n   [   ]   ;  \r   I   F       t   #
0073520    r   i   g   h   t   B   r   a   c   k   e   t   C   o   d   e
0073540        T   H   E   N       E   r   r   o   r   ;  \r   E   N   D
0073560    ;  \r  \r   R   e   a   d   N   a   m   e   :   P   R   O   C
0073600    E   D   U   R   E       R   E   T   U   R   N   S   [   S   T
0073620    R   I   N   G   ]   =   {   R   E   T   U   R   N 376 001  \0
0073640  324 212   [   G   e   t   R   e   a   l   W   o   r   d   s   [
0073660    ]   ]   }   ;  \r  \r   R   e   a   d   S   i   d   e   :   P
0073700    R   O   C   E   D   U   R   E       R   E   T   U   R   N   S
0073720    [   S   i   d   e   ]   =   B   E   G   I   N  \r   t   :   I
0073740    N   T   E   G   E   R   _   G   e   t   T   o   k   e   n   [
0073760    ]   ;  \r   S   E   L   E   C   T       t       F   R   O   M
0074000   \r           n   o   r   t   h   C   o   d   e   =   >   R   E
0074020    T   U   R   N   [   n   ]   ;  \r           s   o   u   t   h
0074040    C   o   d   e   =   >   R   E   T   U   R   N   [   s   ]   ;
0074060   \r           e   a   s   t   C   o   d   e   =   >   R   E   T
0074100    U   R   N   [   e   ]   ;  \r           w   e   s   t   C   o
0074120    d   e   =   >   R   E   T   U   R   N   [   w   ]   ;  \r    
0074140        E   N   D   C   A   S   E   =   >   {   E   r   r   o   r
0074160    ;       R   E   T   U   R   N   [   n   ]   }   ;  \r   E   N
0074200    D   ;  \r  \r   R   e   a   d   L   e   v   e   l   :   P   R
0074220    O   C   E   D   U   R   E       R   E   T   U   R   N   S   [
0074240    W   h 376 001  \0 235 030   a   t   ]   =   B   E   G   I   N
0074260   \r   t   :   I   N   T   E   G   E   R   _   G   e   t   T   o
0074300    k   e   n   [   ]   ;  \r   S   E   L   E   C   T       t    
0074320    F   R   O   M  \r           r   e   d   C   o   d   e   =   >
0074340    R   E   T   U   R   N   [   r   e   d   ]   ;  \r           b
0074360    l   u   e   C   o   d   e   =   >   R   E   T   U   R   N   [
0074400    b   l   u   e   ]   ;  \r           b   o   t   h   C   o   d
0074420    e   =   >   R   E   T   U   R   N   [   b   o   t   h   ]   ;
0074440   \r           E   N   D   C   A   S   E   =   >   {   E   r   r
0074460    o   r   ;       R   E   T   U   R   N   [   b   o   t   h   ]
0074500    }   ;  \r   E   N   D   ;  \r  \r   -   -   /   /   /   /   /
0074520    /       m   a   n   a   g   e       t   o   k   e   n   s    
0074540    a   n   d       d   i   c   t   i   o   n   a   r   y  \r  \r
0074560    d   i   c   t   :   A   R   R   A   Y       [   0   .   .   1
0074600    0   0   )       O   F       D   i   c   t   _   A   L   L   [
0074620    [   N   I   L   ,   0   ]   ]   ;  \r   d   i   c   t   M   a
0074640    x   :   I   N   T   E   G 376 001  \0 344 342   E   R   =   L
0074660    E   N   G   T   H   [   d   i   c   t   ]   ;  \r   d   i   c
0074700    t   E   n   d   :   I   N   T   E   G   E   R   _   0   ;  \r
0074720    d   i   c   t   B   a   s   e   :   I   N   T   E   G   E   R
0074740    _   4   ;  \r   D   i   c   t   :   T   Y   P   E   =   R   E
0074760    C   O   R   D   [   s   :   S   T   R   I   N   G   ,   v   :
0075000    I   N   T   E   G   E   R   ]   ;  \r  \r   D   i   c   t   I
0075020    n   i   t   :   P   R   O   C   E   D   U   R   E   =   B   E
0075040    G   I   N  \r   d   i   c   t   [   0   ]   _   [   "   c   e
0075060    l   l   "   ,   c   e   l   l   C   o   d   e   ]   ;  \r   d
0075100    i   c   t   [   1   ]   _   [   "   p   o   s   "   ,   p   o
0075120    s   C   o   d   e   ]   ;  \r   d   i   c   t   [   2   ]   _
0075140    [   "   s   i   z   e   "   ,   s   i   z   e   C   o   d   e
0075160    ]   ;  \r   d   i   c   t   [   3   ]   _   [   "   e   n   d
0075200    "   ,   e   n   d   F   i   l   e   C   o   d   e   ]   ;  \r
0075220    d   i   c   t   [   4   ]   _   [   "   n   a   m   e   "   ,
0075240    n   a   m   e   C   o   d   e   ]   ;  \r   d 376 001  \0 200
0075260   \0   i   c   t   [   5   ]   _   [   "   s   i   d   e   "   ,
0075300    s   i   d   e   C   o   d   e   ]   ;  \r   d   i   c   t   [
0075320    6   ]   _   [   "   l   e   v   e   l   "   ,   l   e   v   e
0075340    l   C   o   d   e   ]   ;  \r   d   i   c   t   [   7   ]   _
0075360    [   "   o   f   f   s   e   t   "   ,   o   f   f   s   e   t
0075400    C   o   d   e   ]   ;  \r   d   i   c   t   [   8   ]   _   [
0075420    "   n   "   ,   n   o   r   t   h   C   o   d   e   ]   ;  \r
0075440    d   i   c   t   [   9   ]   _   [   "   s   "   ,   s   o   u
0075460    t   h   C   o   d   e   ]   ;  \r   d   i   c   t   [   1   0
0075500    ]   _   [   "   e   "   ,   e   a   s   t   C   o   d   e   ]
0075520    ;  \r   d   i   c   t   [   1   1   ]   _   [   "   w   "   ,
0075540    w   e   s   t   C   o   d   e   ]   ;  \r   d   i   c   t   [
0075560    1   2   ]   _   [   "   r   e   d   "   ,   r   e   d   C   o
0075600    d   e   ]   ;  \r   d   i   c   t   [   1   3   ]   _   [   "
0075620    b   l   u   e   "   ,   b   l   u   e   C   o   d   e   ]   ;
0075640   \r   d   i   c   t   [   1   4   ]   _   [   "   b   o   t   h
0075660    " 376 001  \0 372 305   ,   b   o   t   h   C   o   d   e   ]
0075700    ;  \r   d   i   c   t   [   1   5   ]   _   [   "   c   h   i
0075720    p   "   ,   c   h   i   p   C   o   d   e   ]   ;  \r   d   i
0075740    c   t   [   1   6   ]   _   [   "   n   e   t   "   ,   n   e
0075760    t   C   o   d   e   ]   ;  \r   d   i   c   t   [   1   7   ]
0076000    _   [   "   t   i   e   "   ,   t   i   e   C   o   d   e   ]
0076020    ;  \r   d   i   c   t   E   n   d   _   1   8   ;  \r   E   N
0076040    D   ;  \r  \r   G   e   t   T   o   k   e   n   :   P   R   O
0076060    C   E   D   U   R   E       R   E   T   U   R   N   S   [   I
0076100    N   T   E   G   E   R   ]   =   B   E   G   I   N       D   O
0076120   \r           t   :   S   T   R   I   N   G   _   G   e   t   R
0076140    e   a   l   W   o   r   d   s   [   ]   ;  \r           I   F
0076160        t   =   N   I   L       T   H   E   N       R   E   T   U
0076200    R   N   [   e   n   d   F   i   l   e   C   o   d   e   ]   ;
0076220   \r           S   E   L   E   C   T       t   [   0   ]       F
0076240    R   O   M  \r                   '   [   =   >   R   E   T   U
0076260    R   N   [   l   e   f 376 001  \0   - 363   t   B   r   a   c
0076300    k   e   t   C   o   d   e   ]   ;  \r                   '   ]
0076320    =   >   R   E   T   U   R   N   [   r   i   g   h   t   B   r
0076340    a   c   k   e   t   C   o   d   e   ]   ;  \r                
0076360    '   ,   =   >   R   E   T   U   R   N   [   c   o   m   m   a
0076400    C   o   d   e   ]   ;  \r                   E   N   D   C   A
0076420    S   E   =   >   R   E   T   U   R   N   [   L   o   o   k   u
0076440    p   [   t   ]   ]   ;  \r           E   N   D   L   O   O   P
0076460    ;       E   N   D   ;  \r  \r   L   o   o   k   u   p   :   P
0076500    R   O   C   E   D   U   R   E   [   s   :   S   T   R   I   N
0076520    G   ]       R   E   T   U   R   N   S   [   z   :   I   N   T
0076540    E   G   E   R   ]   =   B   E   G   I   N  \r           z   _
0076560    d   i   c   t   E   n   d   ;  \r           F   O   R       i
0076600    :   I   N   T   E   G   E   R       I   N       [   0   .   .
0076620    z   )       D   O  \r                   I   F       S   a   m
0076640    e   S   t   r   i   n   g   [   s   ,   d   i   c   t   [   i
0076660    ]   .   s   ]       T   H   E   N       R 376 001  \0 353 271
0076700    E   T   U   R   N   [   d   i   c   t   [   i   ]   .   v   ]
0076720    ;  \r                   E   N   D   L   O   O   P   ;  \r    
0076740        d   i   c   t   [   z   ]   _   [   s   ,   z   -   d   i
0076760    c   t   B   a   s   e   ]   ;  \r           d   i   c   t   E
0077000    n   d   _   d   i   c   t   E   n   d   +   1   ;  \r        
0077020    R   E   T   U   R   N   [   d   i   c   t   [   z   ]   .   v
0077040    ]   ;  \r           E   N   D   ;  \r  \r   L   o   o   k   u
0077060    p   2   :   P   U   B   L   I   C       P   R   O   C   E   D
0077100    U   R   E   [   z   :   I   N   T   E   G   E   R   ]       R
0077120    E   T   U   R   N   S   [   S   T   R   I   N   G   ]   =   B
0077140    E   G   I   N  \r           R   E   T   U   R   N   [   d   i
0077160    c   t   [   z   +   d   i   c   t   B   a   s   e   ]   .   s
0077200    ]   ;  \r           E   N   D   ;  \r  \r   h   o   l   d   :
0077220    B   O   O   L   E   A   N   ;       h   o   l   d   C   :   C
0077240    H   A   R   A   C   T   E   R   _   '       ;  \r  \r   G   e
0077260    t   R   e   a   l   W   o   r   d   s   :   P   R   O   C   E
0077300  376 001  \0 206 027   D   U   R   E       R   E   T   U   R   N
0077320    S   [   t   :   S   T   R   I   N   G   ]   =   B   E   G   I
0077340    N  \r           s   :   S   T   R   I   N   G   _   G   e   t
0077360    F   r   e   e   S   t   r   i   n   g   [   ]   ;  \r        
0077400    c   :   C   H   A   R   A   C   T   E   R   ;       s   .   l
0077420    e   n   g   t   h   _   0   ;       t   _   N   I   L   ;  \r
0077440            I   F       h   o   l   d       T   H   E   N       {
0077460    h   o   l   d   _   F   A   L   S   E   ;       s   [   0   ]
0077500    _   h   o   l   d   C   ;       s   .   l   e   n   g   t   h
0077520    _   1   ;       R   E   T   U   R   N   [   s   ]   }   ;    
0077540   \r           D   O  \r                   I   F       i   n   n
0077560    s   t   r   e   a   m   .   e   n   d   o   f   [   i   n   n
0077600    s   t   r   e   a   m   ]       T   H   E   N       R   E   T
0077620    U   R   N   [   N   I   L   ]   ;  \r                   S   E
0077640    L   E   C   T       c   _   G   e   t   C   h   a   r   [   ]
0077660        F   R   O   M  \r                           S   p   a   c
0077700    e   ,   R   e   t 376 001  \0 361 217   ,   T   a   b   =   >
0077720    I   F       s   .   l   e   n   g   t   h       >   0       T
0077740    H   E   N       R   E   T   U   R   N   [   s   ]       E   L
0077760    S   E       s   .   l   e   n   g   t   h   _   0   ;  \r    
0100000                        I   N       [   '   a   .   .   '   z   ]
0100020    ,   S   Q   ,   G   e   t   s   ,   l   P   a   r   e   n   ,
0100040    r   P   a   r   e   n   ,   P   l   u   s   ,   M   i   n   u
0100060    s   ,       I   N       [   '   0   .   .   '   9   ]   =   >
0100100   \r                                                           {
0100120    s   [   s   .   l   e   n   g   t   h   ]   _   c   ;       s
0100140    .   l   e   n   g   t   h   _   s   .   l   e   n   g   t   h
0100160    +   1   }   ;  \r                           I   N       [   '
0100200    A   .   .   '   Z   ]   =   >       {   s   [   s   .   l   e
0100220    n   g   t   h   ]   _   c   -   '   A   +   '   a   ;       s
0100240    .   l   e   n   g   t   h   _   s   .   l   e   n   g   t   h
0100260    +   1   }   ;  \r                           '   [   ,   '   ]
0100300    ,   '   ,   =   >       I   F       s 376 001  \0   L   W   .
0100320    l   e   n   g   t   h   =   0       T   H   E   N       {   s
0100340    [   0   ]   _   c   ;       s   .   l   e   n   g   t   h   _
0100360    1   ;       R   E   T   U   R   N   [   s   ]   ;   }  \r    
0100400                                                                 
0100420                E   L   S   E       {   h   o   l   d   _   T   R
0100440    U   E   ;       h   o   l   d   C   _   c   ;       R   E   T
0100460    U   R   N   [   s   ]   }   ;  \r                           E
0100500    N   D   C   A   S   E   =   >   E   r   r   o   r   ;   -   -
0100520    i   l   l   e   g   a   l       c   h   a   r   a   c   t   e
0100540    r  \r                   E   N   D   L   O   O   P   ;  \r    
0100560        E   N   D   ;  \r  \r   N   u   m   b   e   r   :   P   R
0100600    O   C   E   D   U   R   E       R   E   T   U   R   N   S   [
0100620    I   N   T   E   G   E   R   ]   =   B   E   G   I   N  \r    
0100640        f   o   u   n   d   ,   m   i   n   :   B   O   O   L   E
0100660    A   N   _   F   A   L   S   E   ;           c   :   C   H   A
0100700    R   A   C   T   E   R   ;  \r           i   :   I   N   T 376
0100720  001  \0 225 215   E   G   E   R   _   0   ;  \r           D   O
0100740   \r                   S   E   L   E   C   T       c   _   G   e
0100760    t   C   h   a   r   [   ]       F   R   O   M  \r            
0101000                S   p   a   c   e   ,   R   e   t   ,   T   a   b
0101020    ,   C   o   m   m   a   =   >   I   F       f   o   u   n   d
0101040        T   H   E   N       R   E   T   U   R   N   [   I   F    
0101060    m   i   n       T   H   E   N       -   i       E   L   S   E
0101100        i   ]   ;  \r                           I   N       [   '
0101120    0   .   .   '   9   ]   =   >   {   i   _   i   *   1   0   +
0101140    (   c   -   '   0   )   ;       f   o   u   n   d   _   T   R
0101160    U   E   }   ;  \r                           M   i   n   u   s
0101200    =   >       m   i   n   _   T   R   U   E   ;  \r            
0101220                E   N   D   C   A   S   E   =   >   E   r   r   o
0101240    r   ;   -   -   i   l   l   e   g   a   l       c   h   a   r
0101260    a   c   t   e   r  \r                   E   N   D   L   O   O
0101300    P   ;  \r           E   N   D   ;  \r  \r   S   u   c   k   :
0101320    P   R   O   C 376 001  \0 301   i   E   D   U   R   E   =  \r
0101340            {   U   N   T   I   L       S   E   L   E   C   T    
0101360    G   e   t   [   ]       F   R   O   M       R   e   t   =   >
0101400    T   R   U   E   ,       E   N   D   C   A   S   E   =   >   F
0101420    A   L   S   E       D   O       E   N   D   L   O   O   P   }
0101440    ;  \r  \r   h   e   l   d   :   C   H   A   R   A   C   T   E
0101460    R   _   D   e   l   ;  \r  \r   G   e   t   C   h   a   r   :
0101500    P   R   O   C   E   D   U   R   E       R   E   T   U   R   N
0101520    S   [   c   :   C   H   A   R   A   C   T   E   R   ]   =   B
0101540    E   G   I   N  \r           I   F       h   e   l   d   #   D
0101560    e   l       T   H   E   N       {   c   _   h   e   l   d   ;
0101600        h   e   l   d   _   D   e   l   }       E   L   S   E    
0101620    c   _   G   e   t   [   ]   ;  \r           I   F       c   =
0101640    M   i   n   u   s       A   N   D       (   h   e   l   d   _
0101660    G   e   t   [   ]   )   =   M   i   n   u   s       T   H   E
0101700    N       {   S   u   c   k   [   ]   ;           h   e   l   d
0101720    _   D   e   l   ;           c   _ 376 001  \0   $   K   R   e
0101740    t   }   ;  \r           E   N   D   ;  \r  \r   G   e   t   :
0101760    P   R   O   C   E   D   U   R   E       R   E   T   U   R   N
0102000    S   [   c   :   C   H   A   R   A   C   T   E   R   ]   =   -
0102020    -   I   N   L   I   N   E   -   -   B   E   G   I   N  \r    
0102040        c   _   i   n   n   s   t   r   e   a   m   .   g   e   t
0102060    [   i   n   n   s   t   r   e   a   m   ]   ;  \r           E
0102100    N   D   ;  \r  \r   e   m   p   t   i   e   s   :   A   R   R
0102120    A   Y       [   0   .   .   2   0   0   )       O   F       S
0102140    T   R   I   N   G   _   A   L   L   [   N   I   L   ]   ;  \r
0102160    e   m   p   t   y   E   n   d   :   I   N   T   E   G   E   R
0102200    _   0   ;  \r  \r   G   e   t   F   r   e   e   S   t   r   i
0102220    n   g   :   P   R   O   C   E   D   U   R   E       R   E   T
0102240    U   R   N   S   [   s   :   S   T   R   I   N   G   ]   =   B
0102260    E   G   I   N  \r           I   F       e   m   p   t   y   E
0102300    n   d   =   0       T   H   E   N       R   E   T   U   R   N
0102320    [   S   y   s   t   e   m   D   e   f   s   .   A   l 376 001
0102340   \0 276 035   l   o   c   a   t   e   H   e   a   p   S   t   r
0102360    i   n   g   [   1   0   ]   ]   ;  \r           e   m   p   t
0102400    y   E   n   d   _   e   m   p   t   y   E   n   d   -   1   ;
0102420   \r           R   E   T   U   R   N   [   e   m   p   t   i   e
0102440    s   [   e   m   p   t   y   E   n   d   ]   ]   ;  \r        
0102460    E   N   D   ;  \r  \r   F   r   e   e   S   t   r   i   n   g
0102500    :   P   R   O   C   E   D   U   R   E   [   s   :   S   T   R
0102520    I   N   G   ]   =   B   E   G   I   N  \r           I   F    
0102540    e   m   p   t   y   E   n   d   <   2   0   0       T   H   E
0102560    N       {       e   m   p   t   i   e   s   [   e   m   p   t
0102600    y   E   n   d   ]   _   s   ;       e   m   p   t   y   E   n
0102620    d   _   e   m   p   t   y   E   n   d   +   1   }  \r        
0102640                                                                 
0102660    E   L   S   E       S   y   s   t   e   m   D   e   f   s   .
0102700    F   r   e   e   H   e   a   p   S   t   r   i   n   g   [   s
0102720    ]   ;  \r           E   N   D   ;  \r  \r   E   N   D   .   .
0102740   \r  \r  \r 376  \0 002  \r 017  \r  \r 377  \0  \0   R   o   u
0102760    t   e   C   e   l   l   s   .   m   e   s   a  \0 373 232 347
0103000  330 330  \0  \0 376 001  \0 227   P   -   -   r   o   u   t   e
0103020    C   e   l   l   s   .   m   e   s   a  \r  \r   D   I   R   E
0103040    C   T   O   R   Y           R   o   u   t   e   D   e   f   s
0103060    ;  \r  \r   R   o   u   t   e   C   e   l   l   s   :   P   R
0103100    O   G   R   A   M       I   M   P   O   R   T   S       R   o
0103120    u   t   e   D   e   f   s       E   X   P   O   R   T   S    
0103140    R   o   u   t   e   D   e   f   s   =   B   E   G   I   N  \r
0103160    O   P   E   N       R   o   u   t   e   D   e   f   s   ;  \r
0103200   \r   E   r   r   o   r   :   S   I   G   N   A   L   =   C   O
0103220    D   E   ;  \r  \r   C   r   e   a   t   e   C   e   l   l   s
0103240    :   P   U   B   L   I   C       C   t   l   P   r   o   c   =
0103260    B   E   G   I   N  \r   G   e   t   I   n   p   u   t   [   ]
0103300    ;  \r   E   n   u   m   e   r   a   t   e   A   l   l   S   i
0103320    g   n   a   l   s   [   M   a   k   e   C   e   l   l   s   ]
0103340    ;  \r   I   F       p   r   o   b   l   e   m   .   c   h   i
0103360    p   S   i   z   e   .   x   <   =   0       O   R       p   r
0103400    o   b   l   e   m   .   c   h   i 376 001  \0   - 314   p   S
0103420    i   z   e   .   y   <   =   0       T   H   E   N       E   r
0103440    r   o   r   ;  \r   E   n   u   m   e   r   a   t   e   C   e
0103460    l   l   s   [   C   h   e   c   k   C   e   l   l   s   ]   ;
0103500   \r   E   n   u   m   e   r   a   t   e   A   l   l   S   i   g
0103520    n   a   l   s   [   C   h   e   c   k   S   i   g   n   a   l
0103540    s   ]   ;  \r   C   h   e   c   k   N   e   t   s   [   ]   ;
0103560   \r   S   h   o   w   L   a   b   e   l   [   "   C   E   L   L
0103600    S   "   ]   ;  \r   S   h   o   w   P   o   i   n   t   [   "
0103620    c   h   i   p       =       "   ,   p   r   o   b   l   e   m
0103640    .   c   h   i   p   S   i   z   e   .   x   ,   p   r   o   b
0103660    l   e   m   .   c   h   i   p   S   i   z   e   .   y   ]   ;
0103700   \r   R   e   t   u   r   n   [   ]   ;  \r   E   n   u   m   e
0103720    r   a   t   e   C   e   l   l   s   [   S   h   o   w   C   e
0103740    l   l   s   ]   ;  \r   S   h   o   w   N   e   t   s   ;  \r
0103760    R   E   T   U   R   N   [   -   1   ]   ;  \r   E   N   D   ;
0104000   \r  \r   M   a   k   e   C   e   l   l   s   :   P   R 376 001
0104020   \0 345 346   O   C   E   D   U   R   E   [   c   :   C   e   l
0104040    l   P   t   r   ,   s   :   S   i   g   n   a   l   P   t   r
0104060    ]   =   B   E   G   I   N  \r   F   O   R       n   l   :   N
0104100    e   t   L   i   s   t   P   t   r   _   p   r   o   b   l   e
0104120    m   .   w   i   r   e   l   i   s   t   ,   n   l   .   t    
0104140    U   N   T   I   L       n   l   =   N   I   L       D   O  \r
0104160            n   :   N   e   t   P   t   r   =   n   l   .   h   ;
0104200   \r           I   F       S   a   m   e   S   t   r   i   n   g
0104220    [   s   .   n   a   m   e   ,   n   .   n   a   m   e   ]    
0104240    T   H   E   N       {   s   .   c   i   r   c   u   i   t   _
0104260    n   .   n   u   m   b   e   r   ;       s   .   n   e   t   _
0104300    n   ;       E   X   I   T   }   ;  \r           E   N   D   L
0104320    O   O   P   ;  \r   E   N   D   ;  \r  \r   C   h   e   c   k
0104340    C   e   l   l   s   :   P   R   O   C   E   D   U   R   E   [
0104360    c   :   C   e   l   l   P   t   r   ]   =   B   E   G   I   N
0104400   \r   O   v   e   r   l   a   p   :   P   R   O   C   E   D   U
0104420    R   E   [ 376 001  \0 005 247   c   2   :   C   e   l   l   P
0104440    t   r   ]   =   B   E   G   I   N  \r           I   F       c
0104460    =   c   2       T   H   E   N       R   E   T   U   R   N   ;
0104500   \r           I   F                   c   .   p   o   s   .   x
0104520    <   c   2   .   p   o   s   .   x   +   c   2   .   s   i   z
0104540    e   L   .   x  \r                   A   N   D       c   2   .
0104560    p   o   s   .   x   <   c   .   p   o   s   .   x   +   c   .
0104600    s   i   z   e   L   .   x  \r                   A   N   D    
0104620    c   .   p   o   s   .   y   <   c   2   .   p   o   s   .   y
0104640    +   c   2   .   s   i   z   e   L   .   y  \r                
0104660    A   N   D       c   2   .   p   o   s   .   y   <   c   .   p
0104700    o   s   .   y   +   c   .   s   i   z   e   L   .   y  \r    
0104720                T   H   E   N       E   r   r   o   r   ;  \r    
0104740        E   N   D   ;  \r   I   F       c   .   s   i   z   e   L
0104760    .   x   <   =   0       O   R       c   .   s   i   z   e   L
0105000    .   y   <   =   0       T   H   E   N       E   r   r   o   r
0105020    ;  \r   I   F       c   .   p 376 001  \0 025   6   o   s   .
0105040    x   <   0           O   R       c   .   p   o   s   .   y   <
0105060    0       T   H   E   N       E   r   r   o   r   ;  \r   I   F
0105100        c   .   p   o   s   .   x   +   c   .   s   i   z   e   L
0105120    .   x   >   p   r   o   b   l   e   m   .   c   h   i   p   S
0105140    i   z   e   .   x       T   H   E   N       E   r   r   o   r
0105160    ;  \r   I   F       c   .   p   o   s   .   y   +   c   .   s
0105200    i   z   e   L   .   y   >   p   r   o   b   l   e   m   .   c
0105220    h   i   p   S   i   z   e   .   y       T   H   E   N       E
0105240    r   r   o   r   ;  \r   E   n   u   m   e   r   a   t   e   C
0105260    e   l   l   s   [   O   v   e   r   l   a   p   ]   ;  \r   E
0105300    N   D   ;  \r  \r   C   h   e   c   k   S   i   g   n   a   l
0105320    s   :   P   R   O   C   E   D   U   R   E   [   c   :   C   e
0105340    l   l   P   t   r   ,   s   :   S   i   g   n   a   l   P   t
0105360    r   ]   =   B   E   G   I   N  \r   g   o   o   d   :   B   O
0105400    O   L   E   A   N   _   F   A   L   S   E   ;  \r   S   E   L
0105420    E   C   T       s   .   s   i   d   e       F   R 376 001  \0
0105440  357   :   O   M  \r           n   ,   s   =   >   I   F       s
0105460    .   o   f   f   s   e   t       N   O   T       I   N       [
0105500    0   .   .   c   .   s   i   z   e   L   .   x   )       T   H
0105520    E   N       E   r   r   o   r   ;  \r           e   ,   w   =
0105540    >   I   F       s   .   o   f   f   s   e   t       N   O   T
0105560        I   N       [   0   .   .   c   .   s   i   z   e   L   .
0105600    y   )       T   H   E   N       E   r   r   o   r   ;  \r    
0105620        E   N   D   C   A   S   E   =   >   E   r   r   o   r   ;
0105640   \r   F   O   R       n   l   :   N   e   t   L   i   s   t   P
0105660    t   r   _   p   r   o   b   l   e   m   .   w   i   r   e   l
0105700    i   s   t   ,   n   l   .   t       U   N   T   I   L       n
0105720    l   =   N   I   L       O   R       g   o   o   d       D   O
0105740   \r           n   :   N   e   t   P   t   r   =   n   l   .   h
0105760    ;  \r           g   o   o   d   _   S   a   m   e   S   t   r
0106000    i   n   g   [   n   .   n   a   m   e   ,   s   .   n   a   m
0106020    e   ]   ;  \r           E   N   D   L   O   O   P   ;  \r   I
0106040    F     376 001  \0 366   ?   ~   g   o   o   d       T   H   E
0106060    N       E   r   r   o   r   ;  \r   E   N   D   ;  \r  \r   C
0106100    h   e   c   k   N   e   t   s   :   P   R   O   C   E   D   U
0106120    R   E   =   B   E   G   I   N  \r   F   O   R       n   l   :
0106140    N   e   t   L   i   s   t   P   t   r   _   p   r   o   b   l
0106160    e   m   .   w   i   r   e   l   i   s   t   ,   n   l   .   t
0106200        U   N   T   I   L       n   l   =   N   I   L       D   O
0106220   \r           n   :   N   e   t   P   t   r   =   n   l   .   h
0106240    ;  \r           g   o   o   d   :   B   O   O   L   E   A   N
0106260    _   F   A   L   S   E   ;  \r           M   a   t   c   h   :
0106300    P   R   O   C   E   D   U   R   E   [   c   :   C   e   l   l
0106320    P   t   r   ,   s   :   S   i   g   n   a   l   P   t   r   ]
0106340    =  \r                   {   g   o   o   d   _   g   o   o   d
0106360        O   R       S   a   m   e   S   t   r   i   n   g   [   n
0106400    .   n   a   m   e   ,   s   .   n   a   m   e   ]   }   ;  \r
0106420            F   O   R       n   l   2   :   N   e   t   L   i   s
0106440    t   P   t   r   _   p   r 376 001  \0 366 322   o   b   l   e
0106460    m   .   w   i   r   e   l   i   s   t   ,   n   l   2   .   t
0106500        U   N   T   I   L       n   l   2   =   N   I   L       D
0106520    O  \r                   n   2   :   N   e   t   P   t   r   =
0106540    n   l   2   .   h   ;  \r                   I   F       n   .
0106560    n   u   m   b   e   r   =   n   2   .   n   u   m   b   e   r
0106600        T   H   E   N       E   X   I   T   ;  \r                
0106620    R   E   P   E   A   T  \r                   F   I   N   I   S
0106640    H   E   D   =   >   E   r   r   o   r   ;       -   -   o   n
0106660    l   y       o   n   e       e   n   d  \r                   E
0106700    N   D   L   O   O   P   ;  \r           E   n   u   m   e   r
0106720    a   t   e   A   l   l   S   i   g   n   a   l   s   [   M   a
0106740    t   c   h   ]   ;  \r           I   F       ~   g   o   o   d
0106760        T   H   E   N       E   r   r   o   r   ;       -   -   w
0107000    i   r   e   l   i   s   t       n   a   m   e       n   o   t
0107020        i   n       c   e   l   l   s  \r           E   N   D   L
0107040    O   O   P   ;  \r   E   N   D   ;  \r  \r   S 376 001  \0 340
0107060  260   h   o   w   C   e   l   l   s   :   P   R   O   C   E   D
0107100    U   R   E   [   c   :   C   e   l   l   P   t   r   ]   =   B
0107120    E   G   I   N  \r   R   e   t   u   r   n   [   ]   ;  \r   S
0107140    h   o   w   P   o   i   n   t   [   "   s   i   z   e       =
0107160        "   ,   c   .   s   i   z   e   L   .   x   ,   c   .   s
0107200    i   z   e   L   .   y   ]   ;  \r   S   h   o   w   P   o   i
0107220    n   t   [   "           p   o   s       =       "   ,   c   .
0107240    p   o   s   .   x   ,   c   .   p   o   s   .   y   ]   ;  \r
0107260    F   O   R       s   l   :   S   i   g   n   a   l   L   i   s
0107300    t   P   t   r   _   c   .   s   i   g   n   a   l   s   ,   s
0107320    l   .   t       U   N   T   I   L       s   l   =   N   I   L
0107340        D   O  \r                   s   :   S   i   g   n   a   l
0107360    P   t   r   =   s   l   .   h   ;  \r                   R   e
0107400    t   u   r   n   [   ]   ;  \r                   S   h   o   w
0107420    S   t   r   i   n   g   [   "           "   ]   ;  \r        
0107440            S   h   o   w   S   t   r   i   n   g   [   s   .   n
0107460    a 376 001  \0 301   m   m   e   ]   ;  \r                   S
0107500    h   o   w   S   t   r   i   n   g   [   S   E   L   E   C   T
0107520        s   .   s   i   d   e       F   R   O   M  \r            
0107540                n   =   >   "       n       "   ,       s   =   >
0107560    "       s       "   ,       e   =   >   "       e       "   ,
0107600        w   =   >   "       w       "   ,       E   N   D   C   A
0107620    S   E   =   >   "       x       "   ]   ;  \r                
0107640    S   h   o   w   D   e   c   i   m   a   l   [   s   .   o   f
0107660    f   s   e   t   ,   "       p   o   s       =       "   ]   ;
0107700   \r                   E   N   D   L   O   O   P   ;  \r   E   N
0107720    D   ;  \r  \r   S   h   o   w   N   e   t   s   :   P   R   O
0107740    C   E   D   U   R   E   =   B   E   G   I   N  \r   F   O   R
0107760        i   :   I   N   T   E   G   E   R       I   N       [   1
0110000    .   .   1   0   0   0   )       D   O  \r           s   e   e
0110020    n   :   B   O   O   L   E   A   N   _   F   A   L   S   E   ;
0110040   \r           F   O   R       n   l   :   N   e   t   L   i   s
0110060    t   P   t   r   _   p 376  \0 357 203 361   r   o   b   l   e
0110100    m   .   w   i   r   e   l   i   s   t   ,   n   l   .   t    
0110120    U   N   T   I   L       n   l   =   N   I   L       D   O  \r
0110140                    n   :   N   e   t   P   t   r   =   n   l   .
0110160    h   ;  \r                   I   F       n   .   n   u   m   b
0110200    e   r   #   i       T   H   E   N       L   O   O   P   ;  \r
0110220                    I   F       ~   s   e   e   n       T   H   E
0110240    N       {   R   e   t   u   r   n   [   ]   ;       S   h   o
0110260    w   C   h   a   r   [   S   h   o   w   C   i   r   c   u   i
0110300    t   [   i   ]   ]   }   ;  \r                   s   e   e   n
0110320    _   T   R   U   E   ;  \r                   S   h   o   w   S
0110340    t   r   i   n   g   [   "           "   ]   ;  \r            
0110360        S   h   o   w   S   t   r   i   n   g   [   n   .   n   a
0110400    m   e   ]   ;  \r                   E   N   D   L   O   O   P
0110420    ;  \r           E   N   D   L   O   O   P   ;  \r   E   N   D
0110440    ;  \r  \r   E   N   D   .  \r  \r  \r 377  \0  \0   R   o   u
0110460    t   e   R   e   c   t   a   n   g   l   e   .   m   e   s   a
0110500   \0 373 233 003 235   C  \0  \0 376 001  \0   :   +   -   -   r
0110520    o   u   t   e   R   e   c   t   a   n   g   l   e   .   m   e
0110540    s   a  \r  \r   D   I   R   E   C   T   O   R   Y           R
0110560    o   u   t   e   D   e   f   s   ;  \r  \r   R   o   u   t   e
0110600    R   e   c   t   a   n   g   l   e   :   P   R   O   G   R   A
0110620    M       I   M   P   O   R   T   S       R   o   u   t   e   D
0110640    e   f   s       E   X   P   O   R   T   S       R   o   u   t
0110660    e   D   e   f   s   =   B   E   G   I   N  \r   O   P   E   N
0110700        R   o   u   t   e   D   e   f   s   ;  \r  \r   -   -   S
0110720    A   M   P   L   E       E   X   A   M   P   L   E  \r  \r   E
0110740    r   r   o   r   :   S   I   G   N   A   L   =   C   O   D   E
0110760    ;  \r  \r   R   e   c   t   :   T   Y   P   E   =   R   E   C
0111000    O   R   D   [   x   ,   y   ,   x   1   ,   y   1   :   I   N
0111020    T   E   G   E   R   ]   ;  \r  \r   n   e   x   t   C   h   a
0111040    n   n   e   l   N   o   :   C   h   a   n   n   e   l   N   o
0111060    _   0   ;  \r  \r   C   r   e   a   t   e   R   e   c   t   a
0111100    n   g   l   e   s   :   P   U   B   L   I   C     376 001  \0
0111120  353 326   C   t   l   P   r   o   c   =   B   E   G   I   N  \r
0111140    r   e   c   t   a   n   g   l   e   s   _   N   I   L   ;  \r
0111160    n   e   x   t   C   h   a   n   n   e   l   N   o   _   1   ;
0111200   \r   S   h   o   w   L   a   b   e   l   [   "   R   E   C   T
0111220    A   N   G   L   E   S   "   ]   ;  \r   C   r   e   a   t   e
0111240    B   a   r   e   C   h   a   n   n   e   l   s   A   n   d   I
0111260    n   t   e   r   s   [   ]   ;  \r   S   u   b   d   i   v   i
0111300    d   e   I   f   N   e   e   d   e   d   [   ]   ;  \r   E   n
0111320    u   m   e   r   a   t   e   R   e   c   t   a   n   g   l   e
0111340    s   [   A   d   d   E   v   e   n   t   s   T   o   R   e   c
0111360    t   a   n   g   l   e   s   ]   ;  \r   -   -   E   n   u   m
0111400    e   r   a   t   e   R   e   c   t   a   n   g   l   e   s   [
0111420    C   h   e   c   k   R   e   c   t   a   n   g   l   e   s   ]
0111440    ;  \r   R   E   T   U   R   N   [   -   1   ]   ;  \r   E   N
0111460    D   ;  \r  \r   C   r   e   a   t   e   B   a   r   e   C   h
0111500    a   n   n   e   l   s   A   n   d   I   n   t   e   r   s   :
0111520    P   R 376 001  \0 300  \t   O   C   E   D   U   R   E   =   B
0111540    E   G   I   N  \r   F   O   R       y   :   L   a   m   b   d
0111560    a   _   0   ,       N   e   x   t   Y   E   v   e   n   t   [
0111600    y   ]       U   N   T   I   L       y   >   =   p   r   o   b
0111620    l   e   m   .   c   h   i   p   S   i   z   e   .   y       D
0111640    O  \r           F   O   R       x   :   L   a   m   b   d   a
0111660    _   N   e   x   t   X   E   v   e   n   t   [   0   ,   y   ]
0111700    ,       N   e   x   t   X   E   v   e   n   t   [   x   ,   y
0111720    ]       U   N   T   I   L       x   >   =   p   r   o   b   l
0111740    e   m   .   c   h   i   p   S   i   z   e   .   x  \r        
0111760            D   O       D   e   a   l   W   i   t   h   P   o   i
0112000    n   t   [   x   ,   y   ]   ;       E   N   D   L   O   O   P
0112020    ;  \r           E   N   D   L   O   O   P   ;  \r   E   N   D
0112040    ;  \r  \r   -   -   a   n       "   e   v   e   n   t   "    
0112060    i   s       t   h   e       e   d   g   e       o   f       a
0112100        c   e   l   l  \r  \r   N   e   x   t   Y   E   v   e   n
0112120    t   :   P   R   O   C   E 376 001  \0   # 311   D   U   R   E
0112140    [   a   b   o   v   e   :   L   a   m   b   d   a   ]       R
0112160    E   T   U   R   N   S   [   n   e   x   t   :   L   a   m   b
0112200    d   a   ]   =   B   E   G   I   N  \r   n   e   x   t   _   b
0112220    i   g   L   a   m   b   d   a   ;  \r   F   O   R       c   l
0112240    :   C   e   l   l   L   i   s   t   P   t   r   _   p   r   o
0112260    b   l   e   m   .   c   e   l   l   s   ,   c   l   .   t    
0112300    U   N   T   I   L       c   l   =   N   I   L       D   O  \r
0112320            y   :   L   a   m   b   d   a   _   c   l   .   h   .
0112340    p   o   s   .   y   ;       I   F       y   >   a   b   o   v
0112360    e       T   H   E   N       n   e   x   t   _   M   I   N   [
0112400    n   e   x   t   ,   y   ]   ;  \r           y   _   y   +   c
0112420    l   .   h   .   s   i   z   e   L   .   y   ;       I   F    
0112440    y   >   a   b   o   v   e       T   H   E   N       n   e   x
0112460    t   _   M   I   N   [   n   e   x   t   ,   y   ]   ;  \r    
0112500        E   N   D   L   O   O   P   ;  \r   E   N   D   ;  \r  \r
0112520    -   -   N   e   x   t   Y   E   v   e   n   t 376 001  \0   p
0112540  244   :   P   R   O   C   E   D   U   R   E   [   a   b   o   v
0112560    e   :   L   a   m   b   d   a   ]       R   E   T   U   R   N
0112600    S   [   n   e   x   t   :   L   a   m   b   d   a   ]   =   B
0112620    E   G   I   N  \r   -   -   S   u   b   :   P   R   O   C   E
0112640    D   U   R   E   [   c   :   C   e   l   l   P   t   r   ]   =
0112660   \r   -   -           {   y   :   L   a   m   b   d   a   _   c
0112700    .   p   o   s   .   y   ;  \r   -   -           I   F       a
0112720    b   o   v   e   >   =   y       T   H   E   N       y   _   y
0112740    +   c   .   s   i   z   e   L   .   y   ;       I   F       y
0112760    >   a   b   o   v   e       T   H   E   N       n   e   x   t
0113000    _   M   I   N   [   n   e   x   t   ,   y   ]   }   ;  \r   -
0113020    -   n   e   x   t   _   b   i   g   L   a   m   b   d   a   ;
0113040   \r   -   -   E   n   u   m   e   r   a   t   e   C   e   l   l
0113060    s   [   S   u   b   ]   ;  \r   -   -   E   N   D   ;  \r  \r
0113100    N   e   x   t   X   E   v   e   n   t   :   P   R   O   C   E
0113120    D   U   R   E   [   a   t   X   ,   a   t   Y   :   L   a   m
0113140    b 376 001  \0   u  \n   d   a   ]       R   E   T   U   R   N
0113160    S   [   t   h   i   s   :   L   a   m   b   d   a   ]   =   B
0113200    E   G   I   N  \r   k   i   n   d   :   R   e   c   t   K   i
0113220    n   d   _   c   e   l   l   ;  \r   n   e   x   t   :   L   a
0113240    m   b   d   a   _   a   t   X   ;  \r   U   N   T   I   L    
0113260    k   i   n   d   =   n   o   n   e       D   O       t   h   i
0113300    s   _   n   e   x   t   ;       [   n   e   x   t   ,   k   i
0113320    n   d   ]   _   N   e   x   t   X   E   d   g   e   [   n   e
0113340    x   t   ,   a   t   Y   ]   ;       E   N   D   L   O   O   P
0113360    ;  \r   E   N   D   ;  \r  \r   D   e   a   l   W   i   t   h
0113400    P   o   i   n   t   :   P   R   O   C   E   D   U   R   E   [
0113420    x   ,   y   :   L   a   m   b   d   a   ]   =   B   E   G   I
0113440    N  \r   -   -   t   h   e       l   o   w   e   r       l   e
0113460    f   t       c   o   r   n   e   r       o   f       a   n    
0113500    a   s       y   e   t       e   m   p   t   y       r   e   g
0113520    i   o   n  \r   C   l   i   p   S   t   r   a   n   g   e   :
0113540    P   R   O   C   E   D 376 001  \0   p 003   U   R   E   [   c
0113560    e   l   l   :   C   e   l   l   P   t   r   ]   =   B   E   G
0113600    I   N  \r           r   1   :   R   e   c   t   _   [   c   e
0113620    l   l   .   p   o   s   .   x   ,   c   e   l   l   .   p   o
0113640    s   .   y   ,  \r                       c   e   l   l   .   p
0113660    o   s   .   x   +   c   e   l   l   .   s   i   z   e   L   .
0113700    x   ,   c   e   l   l   .   p   o   s   .   y   +   c   e   l
0113720    l   .   s   i   z   e   L   .   y   ]   ;  \r           I   F
0113740        ~   O   v   e   r   l   a   p   [   @   r   0   ,   @   r
0113760    1   ]       T   H   E   N       R   E   T   U   R   N   ;  \r
0114000            I   F       r   1   .   x       N   O   T       I   N
0114020        [   r   0   .   x   .   .   r   0   .   x   1   )       A
0114040    N   D       r   1   .   y       I   N       [   r   0   .   y
0114060    .   .   r   0   .   y   1   )  \r                           T
0114100    H   E   N       E   r   r   o   r   ;  \r           r   0   .
0114120    x   1   _   x   3   _   r   1   .   x   ;       r   0   .   y
0114140    1   _   y   3   _   r   1   .   y   ;  \r 376 001  \0   w 245
0114160            E   N   D   ;  \r   m   a   x   X   :   I   N   T   E
0114200    G   E   R   _   3   2   0   0   0   ;  \r   k   i   n   d   ,
0114220    t   o   p   K   i   n   d   ,   r   i   g   h   t   K   i   n
0114240    d   :   R   e   c   t   K   i   n   d   ;  \r   x   1   ,   y
0114260    1   ,   x   2   ,   y   2   ,   x   3   ,   y   3   :   L   a
0114300    m   b   d   a   ;  \r   r   0   :   R   e   c   t   ;  \r   l
0114320    e   f   t   W   h   i   t   e   ,   b   o   t   t   o   m   W
0114340    h   i   t   e   ,   t   o   p   W   h   i   t   e   ,   r   i
0114360    g   h   t   W   h   i   t   e   :   B   O   O   L   E   A   N
0114400    _   F   A   L   S   E   ;  \r   R   e   t   u   r   n   [   ]
0114420    ;  \r   S   h   o   w   P   o   i   n   t   [   "   e   m   p
0114440    t   y       p   o   i   n   t       =       "   ,   x   ,   y
0114460    ]   ;  \r   [   x   1   ,   b   o   t   t   o   m   W   h   i
0114500    t   e   ,   k   i   n   d   ]   _   F   a   r   X   E   x   t
0114520    e   n   s   i   o   n   [   x   ,   y   ]   ;  \r   I   F    
0114540    k   i   n   d   #   n   o   n   e       T   H   E   N       E
0114560  376 001  \0 224   N   r   r   o   r   ;  \r   [   y   1   ,   l
0114600    e   f   t   W   h   i   t   e   ,   k   i   n   d   ]   _   F
0114620    a   r   Y   E   x   t   e   n   s   i   o   n   [   y   ,   x
0114640    ]   ;  \r   I   F       k   i   n   d   #   n   o   n   e    
0114660    T   H   E   N       E   r   r   o   r   ;  \r   [   x   2   ,
0114700    ,   t   o   p   K   i   n   d   ]   _   F   a   r   X   E   x
0114720    t   e   n   s   i   o   n   [   x   ,   y   1   ]   ;  \r   [
0114740    y   2   ,   ,   r   i   g   h   t   K   i   n   d   ]   _   F
0114760    a   r   Y   E   x   t   e   n   s   i   o   n   [   y   ,   x
0115000    1   ]   ;  \r   x   3   _   M   I   N   [   x   1   ,   x   2
0115020    ]   ;  \r   y   3   _   M   I   N   [   y   1   ,   y   2   ]
0115040    ;  \r   r   0   _   [   x   ,   y   ,   x   3   ,   y   3   ]
0115060    ;  \r   E   n   u   m   e   r   a   t   e   C   e   l   l   s
0115100    [   C   l   i   p   S   t   r   a   n   g   e   ]   ;  \r   t
0115120    o   p   W   h   i   t   e   _   t   o   p   K   i   n   d   #
0115140    c   e   l   l   ;  \r   r   i   g   h   t   W   h   i   t   e
0115160    _   r   i   g   h 376 001  \0 231   B   t   K   i   n   d   #
0115200    c   e   l   l   ;  \r   N   e   w   R   e   c   t   [   [   x
0115220    ,   y   ]   ,   [   x   3   -   x   ,   y   3   -   y   ]   ,
0115240    N   I   L   ]   ;  \r   E   N   D   ;  \r  \r   F   a   r   X
0115260    E   x   t   e   n   s   i   o   n   :   P   R   O   C   E   D
0115300    U   R   E   [   x   ,   y   :   L   a   m   b   d   a   ]  \r
0115320            R   E   T   U   R   N   S   [   x   3   :   L   a   m
0115340    b   d   a   ,   b   e   l   o   w   W   h   i   t   e   :   B
0115360    O   O   L   E   A   N   ,   k   i   n   d   :   R   e   c   t
0115400    K   i   n   d   ]   =   B   E   G   I   N  \r   x   1   ,   x
0115420    2   :   L   a   m   b   d   a   _   p   r   o   b   l   e   m
0115440    .   c   h   i   p   S   i   z   e   .   x   ;  \r   b   e   l
0115460    o   w   W   h   i   t   e   _   F   A   L   S   E   ;  \r   I
0115500    F           y   #   0       T   H   E   N       B   E   G   I
0115520    N  \r           t   e   m   p   :   L   a   m   b   d   a   ;
0115540   \r           [   t   e   m   p   ,   k   i   n   d   ]   _   N
0115560    e   x   t   X   E   d   g   e   [   x 376 001  \0 022 242   ,
0115600    y   -   1   ]   ;  \r           b   e   l   o   w   W   h   i
0115620    t   e   _   k   i   n   d   #   c   e   l   l   ;  \r        
0115640    x   1   _   t   e   m   p   ;  \r           U   N   T   I   L
0115660        k   i   n   d   #   c   e   l   l       D   O       [   t
0115700    e   m   p   ,   k   i   n   d   ]   _   N   e   x   t   X   E
0115720    d   g   e   [   x   1   _   t   e   m   p   ,   y   -   1   ]
0115740    ;       E   N   D   L   O   O   P   ;  \r           E   N   D
0115760    ;  \r   [   x   2   ,   k   i   n   d   ]   _   N   e   x   t
0116000    X   E   d   g   e   [   x   ,   y   ]   ;  \r   x   3   _   M
0116020    I   N   [   x   1   ,   x   2   ]   ;  \r   E   N   D   ;  \r
0116040   \r   F   a   r   Y   E   x   t   e   n   s   i   o   n   :   P
0116060    R   O   C   E   D   U   R   E   [   x   ,   y   :   L   a   m
0116100    b   d   a   ]       -   -   c   a   l   l       w   i   t   h
0116120        [   y   ,   x   ]       !   !   !  \r           R   E   T
0116140    U   R   N   S   [   x   3   :   L   a   m   b   d   a   ,   b
0116160    e   l   o   w   W   h   i   t   e   :   B   O   O   L   E 376
0116200  001  \0 325 302   A   N   ,   k   i   n   d   :   R   e   c   t
0116220    K   i   n   d   ]   =   B   E   G   I   N  \r   x   1   ,   x
0116240    2   :   L   a   m   b   d   a   _   p   r   o   b   l   e   m
0116260    .   c   h   i   p   S   i   z   e   .   y   ;  \r   b   e   l
0116300    o   w   W   h   i   t   e   _   F   A   L   S   E   ;  \r   I
0116320    F           y   #   0       T   H   E   N       B   E   G   I
0116340    N  \r           t   e   m   p   :   L   a   m   b   d   a   ;
0116360   \r           [   t   e   m   p   ,   k   i   n   d   ]   _   N
0116400    e   x   t   Y   E   d   g   e   [   x   ,   y   -   1   ]   ;
0116420   \r           b   e   l   o   w   W   h   i   t   e   _   k   i
0116440    n   d   #   c   e   l   l   ;  \r           x   1   _   t   e
0116460    m   p   ;  \r           U   N   T   I   L       k   i   n   d
0116500    #   c   e   l   l       D   O       [   t   e   m   p   ,   k
0116520    i   n   d   ]   _   N   e   x   t   Y   E   d   g   e   [   x
0116540    1   _   t   e   m   p   ,   y   -   1   ]   ;       E   N   D
0116560    L   O   O   P   ;  \r           E   N   D   ;  \r   [   x   2
0116600    ,   k   i   n 376 001  \0 212 334   d   ]   _   N   e   x   t
0116620    Y   E   d   g   e   [   x   ,   y   ]   ;  \r   x   3   _   M
0116640    I   N   [   x   1   ,   x   2   ]   ;  \r   E   N   D   ;  \r
0116660   \r   N   e   x   t   X   E   d   g   e   :   P   R   O   C   E
0116700    D   U   R   E   [   a   t   X   ,   a   t   Y   :   L   a   m
0116720    b   d   a   ]       R   E   T   U   R   N   S   [   I   N   T
0116740    E   G   E   R   ,   R   e   c   t   K   i   n   d   ]   =   B
0116760    E   G   I   N  \r   -   -   I   F       [   a   t   X   ,   a
0117000    t   Y   ]       i   s       i   n       a       r   e   c   t
0117020    a   n   g   l   e   ,  \r   -   -           T   H   E   N    
0117040    r   e   t   u   r   n       [   r   i   g   h   t   E   d   g
0117060    e   +   1   ,   k   i   n   d   ]       E   L   S   E       r
0117100    e   t   u   r   n       [   f   i   r   s   t   E   d   g   e
0117120        t   o       r   i   g   h   t   ,       n   o   n   e   ]
0117140   \r   b   e   s   t   :   L   a   m   b   d   a   _   b   i   g
0117160    L   a   m   b   d   a   ;  \r   F   O   R       c   l   :   C
0117200    e   l   l   L   i   s   t   P   t 376 001  \0   ; 223   r   _
0117220    p   r   o   b   l   e   m   .   c   e   l   l   s   ,   c   l
0117240    .   t       U   N   T   I   L       c   l   =   N   I   L    
0117260    D   O  \r           p   :   C   o   o   r   d   L   _   c   l
0117300    .   h   .   p   o   s   ;       s   :   C   o   o   r   d   L
0117320    _   c   l   .   h   .   s   i   z   e   L   ;  \r           I
0117340    F       a   t   Y   -   p   .   y       I   N       [   0   .
0117360    .   s   .   y   )       T   H   E   N       S   E   L   E   C
0117400    T       a   t   X   -   p   .   x       F   R   O   M  \r    
0117420                    <   0   =   >   b   e   s   t   _   M   I   N
0117440    [   b   e   s   t   ,   p   .   x   ]   ;       <   s   .   x
0117460    =   >   R   E   T   U   R   N   [   p   .   x   +   s   .   x
0117500    ,   c   e   l   l   ]   ;  \r                       E   N   D
0117520    C   A   S   E   ;  \r           E   N   D   L   O   O   P   ;
0117540   \r   F   O   R       c   l   :   R   e   c   t   a   n   g   l
0117560    e   L   i   s   t   P   t   r   _   r   e   c   t   a   n   g
0117600    l   e   s   ,   c   l   .   t       U   N   T   I   L 376 001
0117620   \0   P 301       c   l   =   N   I   L       D   O  \r        
0117640    r   e   c   t   :   R   e   c   t   a   n   g   l   e   P   t
0117660    r   =   c   l   .   h   ;  \r           p   :   C   o   o   r
0117700    d   L   _   r   e   c   t   .   p   o   s   ;       s   :   C
0117720    o   o   r   d   L   _   r   e   c   t   .   s   i   z   e   L
0117740    ;  \r           I   F       a   t   Y   -   p   .   y       I
0117760    N       [   0   .   .   s   .   y   )       T   H   E   N    
0120000    S   E   L   E   C   T       a   t   X   -   p   .   x       F
0120020    R   O   M  \r                       <   0   =   >   b   e   s
0120040    t   _   M   I   N   [   b   e   s   t   ,   p   .   x   ]   ;
0120060        <   s   .   x   =   >   R   E   T   U   R   N   [   p   .
0120100    x   +   s   .   x   ,   i   n   t   e   r   ]   ;  \r        
0120120                E   N   D   C   A   S   E   ;  \r           E   N
0120140    D   L   O   O   P   ;  \r   R   E   T   U   R   N   [   b   e
0120160    s   t   ,   n   o   n   e   ]   ;  \r   E   N   D   ;  \r  \r
0120200    N   e   x   t   Y   E   d   g   e   :   P   R   O   C   E   D
0120220    U   R   E 376 001  \0   l 273   [   a   t   X   ,   a   t   Y
0120240    :   L   a   m   b   d   a   ]       R   E   T   U   R   N   S
0120260    [   I   N   T   E   G   E   R   ,   R   e   c   t   K   i   n
0120300    d   ]   =   B   E   G   I   N  \r   -   -   c   a   l   l   e
0120320    d       w   i   t   h       [   y   ,   x   ]  \r   b   e   s
0120340    t   :   L   a   m   b   d   a   _   b   i   g   L   a   m   b
0120360    d   a   ;  \r   F   O   R       c   l   :   C   e   l   l   L
0120400    i   s   t   P   t   r   _   p   r   o   b   l   e   m   .   c
0120420    e   l   l   s   ,   c   l   .   t       U   N   T   I   L    
0120440    c   l   =   N   I   L       D   O  \r           p   :   C   o
0120460    o   r   d   L   _   c   l   .   h   .   p   o   s   ;       s
0120500    :   C   o   o   r   d   L   _   c   l   .   h   .   s   i   z
0120520    e   L   ;  \r           I   F       a   t   Y   -   p   .   x
0120540        I   N       [   0   .   .   s   .   x   )       T   H   E
0120560    N       S   E   L   E   C   T       a   t   X   -   p   .   y
0120600        F   R   O   M  \r                       <   0   =   >   b
0120620    e   s   t   _   M   I   N   [ 376 001  \0 340   a   b   e   s
0120640    t   ,   p   .   y   ]   ;       <   s   .   y   =   >   R   E
0120660    T   U   R   N   [   p   .   y   +   s   .   y   ,   c   e   l
0120700    l   ]   ;       E   N   D   C   A   S   E   ;  \r           E
0120720    N   D   L   O   O   P   ;  \r   F   O   R       c   l   :   R
0120740    e   c   t   a   n   g   l   e   L   i   s   t   P   t   r   _
0120760    r   e   c   t   a   n   g   l   e   s   ,   c   l   .   t    
0121000    U   N   T   I   L       c   l   =   N   I   L       D   O  \r
0121020            r   e   c   t   :   R   e   c   t   a   n   g   l   e
0121040    P   t   r   =   c   l   .   h   ;  \r           p   :   C   o
0121060    o   r   d   L   _   r   e   c   t   .   p   o   s   ;       s
0121100    :   C   o   o   r   d   L   _   r   e   c   t   .   s   i   z
0121120    e   L   ;  \r           I   F       a   t   Y   -   p   .   x
0121140        I   N       [   0   .   .   s   .   x   )       T   H   E
0121160    N       S   E   L   E   C   T       a   t   X   -   p   .   y
0121200        F   R   O   M  \r                       <   0   =   >   b
0121220    e   s   t   _   M   I   N   [   b   e   s   t   , 376 001  \0
0121240  301   +   p   .   y   ]   ;       <   s   .   y   =   >   R   E
0121260    T   U   R   N   [   p   .   y   +   s   .   y   ,   i   n   t
0121300    e   r   ]   ;  \r                       E   N   D   C   A   S
0121320    E   ;  \r           E   N   D   L   O   O   P   ;  \r   R   E
0121340    T   U   R   N   [   b   e   s   t   ,   n   o   n   e   ]   ;
0121360   \r   E   N   D   ;  \r  \r   O   v   e   r   l   a   p   :   P
0121400    R   O   C   E   D   U   R   E   [   a   ,   b   :   P   O   I
0121420    N   T   E   R       T   O       R   e   c   t   ]       R   E
0121440    T   U   R   N   S   [   B   O   O   L   E   A   N   ]   =   B
0121460    E   G   I   N  \r   R   E   T   U   R   N   [       a   .   x
0121500    <   b   .   x   1       A   N   D       b   .   x   <   a   .
0121520    x   1       A   N   D       a   .   y   <   b   .   y   1    
0121540    A   N   D       b   .   y   <   a   .   y   1   ]   ;      \r
0121560    E   N   D   ;  \r  \r   S   u   b   d   i   v   i   d   e   I
0121600    f   N   e   e   d   e   d   :   P   R   O   C   E   D   U   R
0121620    E   =   B   E   G   I   N  \r   D   O  \r           p   r   o
0121640    g   r 376 001  \0 325 026   e   s   s   :   B   O   O   L   E
0121660    A   N   _   F   A   L   S   E   ;  \r           F   O   R    
0121700    r   l   :   R   e   c   t   a   n   g   l   e   L   i   s   t
0121720    P   t   r   _   r   e   c   t   a   n   g   l   e   s   ,   r
0121740    l   .   t       U   N   T   I   L       r   l   =   N   I   L
0121760        D   O  \r                   r   e   c   t   :   R   e   c
0122000    t   a   n   g   l   e   P   t   r   =   r   l   .   h   ;  \r
0122020                    t   o   p   :   L   a   m   b   d   a   =   r
0122040    e   c   t   .   p   o   s   .   y   +   r   e   c   t   .   s
0122060    i   z   e   L   .   y   ;  \r                   x   s   :   L
0122100    a   m   b   d   a   =   r   e   c   t   .   p   o   s   .   x
0122120    ;  \r                   x   e   :   L   a   m   b   d   a   _
0122140    x   s   +   r   e   c   t   .   s   i   z   e   L   .   x   ;
0122160   \r                   F   O   R       r   2   :   R   e   c   t
0122200    a   n   g   l   e   L   i   s   t   P   t   r   _   r   e   c
0122220    t   a   n   g   l   e   s   ,   r   2   .   t       U   N   T
0122240    I   L       r   2   =   N 376 001  \0   z 322   I   L       D
0122260    O  \r                           r   e   c   t   2   :   R   e
0122300    c   t   a   n   g   l   e   P   t   r   _   r   2   .   h   ;
0122320   \r                           x   s   2   :   L   a   m   b   d
0122340    a   =   r   e   c   t   2   .   p   o   s   .   x   ;  \r    
0122360                        x   e   2   :   L   a   m   b   d   a   =
0122400    x   s   2   +   r   e   c   t   2   .   s   i   z   e   L   .
0122420    x   ;  \r                           s   p   l   i   t   :   L
0122440    a   m   b   d   a   ;  \r                           I   F    
0122460    t   o   p   #   r   e   c   t   2   .   p   o   s   .   y    
0122500    T   H   E   N       L   O   O   P   ;  \r                    
0122520        S   E   L   E   C   T       T   R   U   E       F   R   O
0122540    M  \r                                   x   e   2       I   N
0122560        (   x   s   .   .   x   e   )   =   >   s   p   l   i   t
0122600    _   x   e   2   ;  \r                                   x   s
0122620    2       I   N       (   x   s   .   .   x   e   )   =   >   s
0122640    p   l   i   t   _   x   s   2   ;  \r         376 001  \0 304
0122660  327                           E   N   D   C   A   S   E   =   >
0122700    L   O   O   P   ;  \r                           B   E   G   I
0122720    N  \r                                   d   x   :   L   a   m
0122740    b   d   a   _   x   e   -   s   p   l   i   t   ;  \r        
0122760                            p   o   s   :   C   o   o   r   d   L
0123000    =   [   s   p   l   i   t   ,   r   e   c   t   .   p   o   s
0123020    .   y   ]   ;  \r                                   s   i   z
0123040    e   L   :   C   o   o   r   d   L   =   [   d   x   ,   r   e
0123060    c   t   .   s   i   z   e   L   .   y   ]   ;  \r            
0123100                        N   e   w   R   e   c   t   [   p   o   s
0123120    ,   s   i   z   e   L   ,   r   l   ]   ;  \r                
0123140                    r   e   c   t   .   s   i   z   e   L   .   x
0123160    _   r   e   c   t   .   s   i   z   e   L   .   x   -   d   x
0123200    ;  \r                                   x   e   _   s   p   l
0123220    i   t   ;  \r                                   p   r   o   g
0123240    r   e   s   s   _   T   R   U   E   ;  \r                    
0123260      376 001  \0 221 304           E   N   D   ;  \r            
0123300                E   N   D   L   O   O   P   ;  \r                
0123320    E   N   D   L   O   O   P   ;  \r           I   F       p   r
0123340    o   g   r   e   s   s       T   H   E   N       L   O   O   P
0123360    ;  \r           F   O   R       r   l   :   R   e   c   t   a
0123400    n   g   l   e   L   i   s   t   P   t   r   _   r   e   c   t
0123420    a   n   g   l   e   s   ,   r   l   .   t       U   N   T   I
0123440    L       r   l   =   N   I   L       D   O  \r                
0123460    r   e   c   t   :   R   e   c   t   a   n   g   l   e   P   t
0123500    r   =   r   l   .   h   ;  \r                   t   o   p   :
0123520    L   a   m   b   d   a   =   r   e   c   t   .   p   o   s   .
0123540    x   +   r   e   c   t   .   s   i   z   e   L   .   x   ;  \r
0123560                    y   s   :   L   a   m   b   d   a   =   r   e
0123600    c   t   .   p   o   s   .   y   ;  \r                   y   e
0123620    :   L   a   m   b   d   a   _   y   s   +   r   e   c   t   .
0123640    s   i   z   e   L   .   y   ;  \r                   F   O   R
0123660        r   2   :   R   e 376 001  \0   $   J   c   t   a   n   g
0123700    l   e   L   i   s   t   P   t   r   _   r   e   c   t   a   n
0123720    g   l   e   s   ,   r   2   .   t       U   N   T   I   L    
0123740    r   2   =   N   I   L       D   O  \r                        
0123760    r   e   c   t   2   :   R   e   c   t   a   n   g   l   e   P
0124000    t   r   _   r   2   .   h   ;  \r                           y
0124020    s   2   :   L   a   m   b   d   a   =   r   e   c   t   2   .
0124040    p   o   s   .   y   ;  \r                           y   e   2
0124060    :   L   a   m   b   d   a   =   y   s   2   +   r   e   c   t
0124100    2   .   s   i   z   e   L   .   y   ;  \r                    
0124120        s   p   l   i   t   :   L   a   m   b   d   a   ;  \r    
0124140                        I   F       t   o   p   #   r   e   c   t
0124160    2   .   p   o   s   .   x       T   H   E   N       L   O   O
0124200    P   ;  \r                           S   E   L   E   C   T    
0124220    T   R   U   E       F   R   O   M  \r                        
0124240            y   e   2       I   N       (   y   s   .   .   y   e
0124260    )   =   >   s   p   l   i   t   _   y   e 376 001  \0 253   {
0124300    2   ;  \r                                   y   s   2       I
0124320    N       (   y   s   .   .   y   e   )   =   >   s   p   l   i
0124340    t   _   y   s   2   ;  \r                                   E
0124360    N   D   C   A   S   E   =   >   L   O   O   P   ;  \r        
0124400                    B   E   G   I   N  \r                        
0124420            d   y   :   L   a   m   b   d   a   _   y   e   -   s
0124440    p   l   i   t   ;  \r                                   p   o
0124460    s   :   C   o   o   r   d   L   =   [   r   e   c   t   .   p
0124500    o   s   .   x   ,   s   p   l   i   t   ]   ;  \r            
0124520                        s   i   z   e   L   :   C   o   o   r   d
0124540    L   =   [   r   e   c   t   .   s   i   z   e   L   .   x   ,
0124560    d   y   ]   ;  \r                                   N   e   w
0124600    R   e   c   t   [   p   o   s   ,   s   i   z   e   L   ,   r
0124620    l   ]   ;  \r                                   r   e   c   t
0124640    .   s   i   z   e   L   .   y   _   r   e   c   t   .   s   i
0124660    z   e   L   .   y   -   d   y   ;  \r                        
0124700  376 001  \0 367 354           y   e   _   s   p   l   i   t   ;
0124720   \r                                   p   r   o   g   r   e   s
0124740    s   _   T   R   U   E   ;  \r                                
0124760    E   N   D   ;  \r                           E   N   D   L   O
0125000    O   P   ;  \r                   E   N   D   L   O   O   P   ;
0125020   \r           I   F       ~   p   r   o   g   r   e   s   s    
0125040    T   H   E   N       E   X   I   T   ;  \r           E   N   D
0125060    L   O   O   P   ;  \r   E   N   D   ;  \r  \r   N   e   w   R
0125100    e   c   t   :   P   R   O   C   E   D   U   R   E   [   p   o
0125120    s   ,   s   i   z   e   :   C   o   o   r   d   L   ,   b   a
0125140    s   e   :   R   e   c   t   a   n   g   l   e   L   i   s   t
0125160    P   t   r   ]   =   B   E   G   I   N  \r   l   i   s   t   :
0125200    R   e   c   t   a   n   g   l   e   L   i   s   t   P   t   r
0125220    _   A   l   l   o   c   a   t   e   L   i   s   t   [   ]   ;
0125240   \r   r   e   c   t   :   R   e   c   t   a   n   g   l   e   P
0125260    t   r   _   A   l   l   o   c   a   t   e   R   e   c   t   a
0125300    n   g   l   e   [ 376 001  \0 346 311   ]   ;  \r   r   e   c
0125320    t   .   c   h   a   n   n   e   l   N   o   _   n   e   x   t
0125340    C   h   a   n   n   e   l   N   o   ;  \r   n   e   x   t   C
0125360    h   a   n   n   e   l   N   o   _   n   e   x   t   C   h   a
0125400    n   n   e   l   N   o   +   1   ;  \r   r   e   c   t   .   p
0125420    o   s   _   p   o   s   ;  \r   r   e   c   t   .   s   i   z
0125440    e   L   _   s   i   z   e   ;  \r   I   F       b   a   s   e
0125460    =   N   I   L       T   H   E   N       {   l   i   s   t   ^
0125500    _   [   r   e   c   t   ,   r   e   c   t   a   n   g   l   e
0125520    s   ]   ;       r   e   c   t   a   n   g   l   e   s   _   l
0125540    i   s   t   }  \r           E   L   S   E       {   l   i   s
0125560    t   ^   _   [   r   e   c   t   ,   b   a   s   e   .   t   ]
0125600    ;       b   a   s   e   .   t   _   l   i   s   t   }   ;  \r
0125620    E   N   D   ;  \r  \r   A   d   d   E   v   e   n   t   s   T
0125640    o   R   e   c   t   a   n   g   l   e   s   :   P   R   O   C
0125660    E   D   U   R   E   [   r   e   c   t   :   R   e   c   t   a
0125700    n   g   l   e   P   t   r   ]   =   B 376 001  \0 216 372   E
0125720    G   I   N  \r   k   :   S   i   d   e   ;  \r   E   w   W   a
0125740    l   l   :   P   R   O   C   E   D   U   R   E   [   c   e   l
0125760    l   :   C   e   l   l   P   t   r   ,   s   :   S   i   g   n
0126000    a   l   P   t   r   ]   =   B   E   G   I   N  \r           l
0126020    :   S   i   d   e   =   I   F       k   =   e       T   H   E
0126040    N       w       E   L   S   E       e   ;  \r           o   f
0126060    f   :   L   a   m   b   d   a   =   s   .   o   f   f   s   e
0126100    t   +   c   e   l   l   .   p   o   s   .   y   -   r   e   c
0126120    t   .   p   o   s   .   y   ;  \r           I   F       s   .
0126140    s   i   d   e   =   k       A   N   D       o   f   f       I
0126160    N       [   0   .   .   r   e   c   t   .   s   i   z   e   L
0126200    .   y   )  \r           T   H   E   N       B   E   G   I   N
0126220   \r           A   d   d   E   v   e   n   t   [   r   e   c   t
0126240    ,   [   ,   s   .   c   i   r   c   u   i   t   ,   I   F    
0126260    k   =   w       T   H   E   N       b   o   t   t   o   m    
0126300    E   L   S   E       t   o   p   ,   l   ,   s   .   l   e 376
0126320  001  \0   b 330   v   e   l   ,   o   f   f   ,   s   .   n   e
0126340    t   ]   ]   ;  \r           I   F       k   =   w       T   H
0126360    E   N       r   e   c   t   .   e   S   o   u   r   c   e   _
0126400    T   R   U   E       E   L   S   E       r   e   c   t   .   w
0126420    S   o   u   r   c   e   _   T   R   U   E   ;  \r           E
0126440    N   D   ;       E   N   D   ;  \r   N   s   W   a   l   l   :
0126460    P   R   O   C   E   D   U   R   E   [   c   e   l   l   :   C
0126500    e   l   l   P   t   r   ,   s   :   S   i   g   n   a   l   P
0126520    t   r   ]   =   B   E   G   I   N  \r           l   :   S   i
0126540    d   e   =   I   F       k   =   s       T   H   E   N       n
0126560        E   L   S   E       s   ;  \r           o   f   f   :   L
0126600    a   m   b   d   a   =   s   .   o   f   f   s   e   t   +   c
0126620    e   l   l   .   p   o   s   .   x   -   r   e   c   t   .   p
0126640    o   s   .   x   ;  \r           I   F       s   .   s   i   d
0126660    e   =   k       A   N   D       o   f   f       I   N       [
0126700    0   .   .   r   e   c   t   .   s   i   z   e   L   .   x   )
0126720   \r           T 376 001  \0 232 027   H   E   N       B   E   G
0126740    I   N  \r           A   d   d   E   v   e   n   t   [   r   e
0126760    c   t   ,   [   ,   s   .   c   i   r   c   u   i   t   ,   I
0127000    F       k   =   n       T   H   E   N       b   o   t   t   o
0127020    m       E   L   S   E       t   o   p   ,   l   ,   s   .   l
0127040    e   v   e   l   ,   o   f   f   ,   s   .   n   e   t   ]   ]
0127060    ;  \r           I   F       k   =   s       T   H   E   N    
0127100    r   e   c   t   .   n   S   o   u   r   c   e   _   T   R   U
0127120    E       E   L   S   E       r   e   c   t   .   s   S   o   u
0127140    r   c   e   _   T   R   U   E   ;  \r           E   N   D   ;
0127160        E   N   D   ;  \r   S   u   b   :   P   R   O   C   E   D
0127200    U   R   E   [   c   e   l   l   :   C   e   l   l   P   t   r
0127220    ]   =   B   E   G   I   N  \r           S   E   L   E   C   T
0127240        T   R   U   E       F   R   O   M  \r                   c
0127260    e   l   l   .   p   o   s   .   x   =   r   e   c   t   .   p
0127300    o   s   .   x   +   r   e   c   t   .   s   i   z   e   L   .
0127320    x   =   >   {   k   _   w   ;     376 001  \0 370 240   E   n
0127340    u   m   e   r   a   t   e   S   i   g   n   a   l   s   [   c
0127360    e   l   l   ,   E   w   W   a   l   l   ]   }   ;  \r        
0127400            c   e   l   l   .   p   o   s   .   x   +   c   e   l
0127420    l   .   s   i   z   e   L   .   x   =   r   e   c   t   .   p
0127440    o   s   .   x   =   >   {   k   _   e   ;       E   n   u   m
0127460    e   r   a   t   e   S   i   g   n   a   l   s   [   c   e   l
0127500    l   ,   E   w   W   a   l   l   ]   }   ;  \r                
0127520    c   e   l   l   .   p   o   s   .   y   =   r   e   c   t   .
0127540    p   o   s   .   y   +   r   e   c   t   .   s   i   z   e   L
0127560    .   y   =   >   {   k   _   s   ;       E   n   u   m   e   r
0127600    a   t   e   S   i   g   n   a   l   s   [   c   e   l   l   ,
0127620    N   s   W   a   l   l   ]   }   ;  \r                   c   e
0127640    l   l   .   p   o   s   .   y   +   c   e   l   l   .   s   i
0127660    z   e   L   .   y   =   r   e   c   t   .   p   o   s   .   y
0127700    =   >   {   k   _   n   ;       E   n   u   m   e   r   a   t
0127720    e   S   i   g   n   a   l   s   [   c   e   l   l   , 376 001
0127740   \0   t   {   N   s   W   a   l   l   ]   }   ;  \r            
0127760        E   N   D   C   A   S   E   ;  \r           E   N   D   ;
0130000   \r   I   F       r   e   c   t   .   e   v   e   n   t   s   #
0130020    N   I   L       T   H   E   N       E   r   r   o   r   ;  \r
0130040    E   n   u   m   e   r   a   t   e   C   e   l   l   s   [   S
0130060    u   b   ]   ;  \r   E   N   D   ;  \r  \r   A   d   d   E   v
0130100    e   n   t   :   P   R   O   C   E   D   U   R   E   [   c   h
0130120    a   n   :   R   e   c   t   a   n   g   l   e   P   t   r   ,
0130140    e   :   E   v   e   n   t   ]   =   B   E   G   I   N  \r   e
0130160    p   :   E   v   e   n   t   P   t   r   _   A   l   l   o   c
0130200    a   t   e   E   v   e   n   t   [   ]   ;  \r   l   i   s   t
0130220    :   E   v   e   n   t   L   i   s   t   P   t   r   _   A   l
0130240    l   o   c   a   t   e   L   i   s   t   [   ]   ;  \r   e   p
0130260    ^   _   e   ;  \r   l   i   s   t   ^   _   [   e   p   ,   c
0130300    h   a   n   .   e   v   e   n   t   s   ]   ;  \r   c   h   a
0130320    n   .   e   v   e   n   t   s   _   l   i   s   t   ;  \r   E
0130340    N   D   ; 376  \0  \b 243 236  \r  \r   E   N   D   .  \r  \r
0130360  377  \0  \0   R   o   u   t   e   R   e   c   t   L   e   s   s
0130400    .   m   e   s   a  \0 373 233   9 245   2  \0  \0 376 001  \0
0130420  224 347   -   -   r   o   u   t   e   R   e   c   t   L   e   s
0130440    s   .   m   e   s   a  \r  \r   -   -   t   r   i   e   s    
0130460    t   o       i   m   p   r   o   v   e       a       v   a   l
0130500    i   d       s   e   t       o   f       r   e   c   t   a   n
0130520    g   l   e   s  \r   -   -   b   y       c   o   m   b   i   n
0130540    i   n   g       a   d   j   a   c   e   n   t       r   e   c
0130560    t   a   n   g   l   e   s       w   h   e   r   e       p   o
0130600    s   s   i   b   l   e  \r   -   -   b   y       m   a   k   i
0130620    n   g       s   e   p   a   r   a   t   e       l   i   s   t
0130640    s       f   o   r       c   h   a   n   n   e   l       a   n
0130660    d       i   n   t   e   r       t   y   p   e   s  \r   -   -
0130700    b   y       d   e   t   e   r   m   i   n   i   n   g       t
0130720    h   e       "   e   v   e   n   t   "       c   o   o   r   d
0130740    i   n   a   t   e       s   y   s   t   e   m  \r   -   -   b
0130760    y       c   o   m   p   u   t   i   n   g       "   l   e   v
0131000    e   l   e   r   s   "   ,       "   n   a   t   u   r   e   "
0131020    ,     376 001  \0 035   '   "   o   r   i   e   n   t   "   ,
0131040        a   n   d       "   w   h   e   r   e   "  \r  \r   D   I
0131060    R   E   C   T   O   R   Y           R   o   u   t   e   D   e
0131100    f   s   ;  \r  \r   R   o   u   t   e   R   e   c   t   L   e
0131120    s   s   :   P   R   O   G   R   A   M       I   M   P   O   R
0131140    T   S       R   o   u   t   e   D   e   f   s       E   X   P
0131160    O   R   T   S       R   o   u   t   e   D   e   f   s   =   B
0131200    E   G   I   N  \r   O   P   E   N       R   o   u   t   e   D
0131220    e   f   s   ;  \r  \r   E   r   r   o   r   :   S   I   G   N
0131240    A   L   =   C   O   D   E   ;  \r  \r   R   e   c   t   L   e
0131260    s   s   :   P   U   B   L   I   C       C   t   l   P   r   o
0131300    c   =   B   E   G   I   N  \r   i   n   t   e   r   s   _   N
0131320    I   L   ;  \r   c   h   a   n   n   e   l   s   _   N   I   L
0131340    ;  \r   E   n   u   m   e   r   a   t   e   O   r   d   e   r
0131360    e   d   R   e   c   t   a   n   g   l   e   P   a   i   r   s
0131400    [   M   a   r   k   N   e   i   g   h   b   o   r   s   ]   ;
0131420   \r   E   n   u   m   e   r 376 001  \0 275   (   a   t   e   R
0131440    e   c   t   a   n   g   l   e   s   [   C   o   m   p   r   e
0131460    s   s   U   D   ]   ;  \r   E   n   u   m   e   r   a   t   e
0131500    R   e   c   t   a   n   g   l   e   s   [   C   o   m   p   r
0131520    e   s   s   L   R   ]   ;  \r   E   n   u   m   e   r   a   t
0131540    e   R   e   c   t   a   n   g   l   e   s   [   M   a   r   k
0131560    N   a   t   u   r   e   A   n   d   O   r   i   e   n   t   A
0131600    n   d   W   h   e   r   e   ]   ;  \r   E   n   u   m   e   r
0131620    a   t   e   R   e   c   t   a   n   g   l   e   s   [   M   a
0131640    k   e   S   e   c   o   n   d   a   r   y   L   i   s   t   s
0131660    ]   ;  \r   E   n   u   m   e   r   a   t   e   C   h   a   n
0131700    n   e   l   s   [   S   e   t   E   v   e   n   t   N   u   m
0131720    b   e   r   s   ]   ;  \r   E   n   u   m   e   r   a   t   e
0131740    C   h   a   n   n   e   l   s   [   S   e   t   N   e   x   t
0131760    A   n   d   P   r   e   v   E   v   e   n   t   s   ]   ;  \r
0132000    E   n   u   m   e   r   a   t   e   R   e   c   t   a   n   g
0132020    l   e   s   [   C   o   m   p   u   t   e   S 376 001  \0   k
0132040    '   i   z   e   C   ]   ;  \r   S   h   o   w   L   a   b   e
0132060    l   [   "   R   E   C   T   L   E   S   S   "   ]   ;  \r   E
0132100    n   u   m   e   r   a   t   e   R   e   c   t   a   n   g   l
0132120    e   s   [   S   h   o   w   R   e   c   t   a   n   g   l   e
0132140    s   ]   ;  \r   S   h   o   w   L   a   b   e   l   [   "   C
0132160    H   A   N   N   E   L   S   "   ]   ;  \r   I   F       ~   c
0132200    h   i   p   m   o   n   k       T   H   E   N       E   n   u
0132220    m   e   r   a   t   e   R   e   c   t   a   n   g   l   e   s
0132240    [   S   h   o   w   C   h   a   n   n   e   l   s   ]   ;  \r
0132260    R   E   T   U   R   N   [   -   1   ]   ;  \r   E   N   D   ;
0132300   \r  \r   E   n   u   m   e   r   a   t   e   O   r   d   e   r
0132320    e   d   R   e   c   t   a   n   g   l   e   P   a   i   r   s
0132340    :   P   R   O   C   E   D   U   R   E  \r           [   c   :
0132360    P   R   O   C   E   D   U   R   E   [   R   e   c   t   a   n
0132400    g   l   e   P   t   r   ,   R   e   c   t   a   n   g   l   e
0132420    P   t   r   ]   ]   =   B   E   G   I   N  \r   F   O   R    
0132440    l 376 001  \0 335   \   :   R   e   c   t   a   n   g   l   e
0132460    L   i   s   t   P   t   r   _   r   e   c   t   a   n   g   l
0132500    e   s   ,   l   .   t       U   N   T   I   L       l   =   N
0132520    I   L       D   O  \r           F   O   R       r   :   R   e
0132540    c   t   a   n   g   l   e   L   i   s   t   P   t   r   _   r
0132560    e   c   t   a   n   g   l   e   s   ,   r   .   t       U   N
0132600    T   I   L       r   =   N   I   L       D   O  \r            
0132620        c   [   l   .   h   ,   r   .   h   ]   ;       E   N   D
0132640    L   O   O   P   ;       E   N   D   L   O   O   P   ;  \r   E
0132660    N   D   ;  \r  \r   M   a   r   k   N   e   i   g   h   b   o
0132700    r   s   :   P   R   O   C   E   D   U   R   E   [   r   e   c
0132720    t   ,   r   e   c   t   2   :   R   e   c   t   a   n   g   l
0132740    e   P   t   r   ]   =   B   E   G   I   N  \r   I   F       r
0132760    e   c   t   2   .   p   o   s   .   y   =   r   e   c   t   .
0133000    p   o   s   .   y   +   r   e   c   t   .   s   i   z   e   L
0133020    .   y  \r                   A   N   D       r   e   c   t   2
0133040    .   p   o   s   .   x 376 001  \0   g 205   <   r   e   c   t
0133060    .   p   o   s   .   x   +   r   e   c   t   .   s   i   z   e
0133100    L   .   x  \r                   A   N   D       r   e   c   t
0133120    .   p   o   s   .   x   <   r   e   c   t   2   .   p   o   s
0133140    .   x   +   r   e   c   t   2   .   s   i   z   e   L   .   x
0133160   \r                   A   N   D       r   e   c   t   .   s   i
0133200    z   e   L   .   x   >   9       A   N   D       r   e   c   t
0133220    2   .   s   i   z   e   L   .   x   >   9  \r                
0133240    T   H   E   N       {   r   e   c   t   .   n   _   r   e   c
0133260    t   2   ;       r   e   c   t   2   .   s   _   r   e   c   t
0133300    }   ;  \r   I   F       r   e   c   t   2   .   p   o   s   .
0133320    x   =   r   e   c   t   .   p   o   s   .   x   +   r   e   c
0133340    t   .   s   i   z   e   L   .   x  \r                   A   N
0133360    D       r   e   c   t   2   .   p   o   s   .   y   <   r   e
0133400    c   t   .   p   o   s   .   y   +   r   e   c   t   .   s   i
0133420    z   e   L   .   y  \r                   A   N   D       r   e
0133440    c   t   .   p   o   s   .   y   <   r   e 376 001  \0 273   }
0133460    c   t   2   .   p   o   s   .   y   +   r   e   c   t   2   .
0133500    s   i   z   e   L   .   y  \r                   A   N   D    
0133520    r   e   c   t   .   s   i   z   e   L   .   y   >   9       A
0133540    N   D       r   e   c   t   2   .   s   i   z   e   L   .   y
0133560    >   9  \r                   T   H   E   N       {   r   e   c
0133600    t   .   e   _   r   e   c   t   2   ;       r   e   c   t   2
0133620    .   w   _   r   e   c   t   }   ;  \r   E   N   D   ;  \r  \r
0133640    C   o   m   p   r   e   s   s   U   D   :   P   R   O   C   E
0133660    D   U   R   E   [   d   :   R   e   c   t   a   n   g   l   e
0133700    P   t   r   ]   =  \r           {   I   F       d   .   n   #
0133720    N   I   L       A   N   D       (   d   .   w   =   N   I   L
0133740        O   R       d   .   n   .   w   =   N   I   L   )       T
0133760    H   E   N       [   ]   _   T   r   y   U   D   [   d   .   n
0134000    ,   d   ]   }   ;  \r   C   o   m   p   r   e   s   s   L   R
0134020    :   P   R   O   C   E   D   U   R   E   [   d   :   R   e   c
0134040    t   a   n   g   l   e   P   t   r   ]   =  \r           {   I
0134060  376 001  \0 214   ~   F       d   .   w   #   N   I   L       A
0134100    N   D       (   d   .   s   =   N   I   L       O   R       d
0134120    .   w   .   s   =   N   I   L   )       T   H   E   N       [
0134140    ]   _   T   r   y   L   R   [   d   .   w   ,   d   ]   }   ;
0134160   \r  \r   T   r   y   U   D   :   P   R   O   C   E   D   U   R
0134200    E   [   u   ,   d   :   R   e   c   t   a   n   g   l   e   P
0134220    t   r   ]       R   E   T   U   R   N   S   [   B   O   O   L
0134240    E   A   N   ]   =   B   E   G   I   N  \r   I   F       u   =
0134260    N   I   L       O   R       u   .   s   #   d       O   R    
0134300    d   .   n   #   u       O   R       u   .   w   S   o   u   r
0134320    c   e       O   R       d   .   w   S   o   u   r   c   e    
0134340    O   R       u   .   e   S   o   u   r   c   e       O   R    
0134360    d   .   e   S   o   u   r   c   e  \r       O   R       u   .
0134400    s   i   z   e   L   .   x   #   d   .   s   i   z   e   L   .
0134420    x       O   R       u   .   p   o   s   .   x   #   d   .   p
0134440    o   s   .   x  \r       O   R       u   .   e   #   N   I   L
0134460        A   N   D     376 001  \0 033 004   d   .   e   #   N   I
0134500    L       A   N   D       ~   T   r   y   U   D   [   u   .   e
0134520    ,   d   .   e   ]  \r       T   H   E   N       R   E   T   U
0134540    R   N   [   F   A   L   S   E   ]   ;  \r   I   F       d   .
0134560    e   =   N   I   L       T   H   E   N       d   .   s   e   _
0134600    d   .   s   i   z   e   L   .   y   +   u   .   s   e   ;  \r
0134620    I   F       d   .   w   =   N   I   L       T   H   E   N    
0134640    d   .   s   w   _   d   .   s   i   z   e   L   .   y   +   u
0134660    .   s   w   ;  \r   I   F       u   .   e   =   N   I   L    
0134700    T   H   E   N       d   .   n   e   _   u   .   s   i   z   e
0134720    L   .   y   +   u   .   n   e   ;  \r   I   F       u   .   w
0134740    =   N   I   L       T   H   E   N       d   .   n   w   _   u
0134760    .   s   i   z   e   L   .   y   +   u   .   n   w   ;  \r   I
0135000    F       d   .   e   =   N   I   L       T   H   E   N       {
0135020    d   .   e   _   u   .   e   ;       I   F       d   .   e   #
0135040    N   I   L       T   H   E   N       d   .   e   .   w   _   d
0135060    }   ;  \r   I   F       d   .   w   = 376 001  \0 230   K   N
0135100    I   L       T   H   E   N       {   d   .   w   _   u   .   w
0135120    ;       I   F       d   .   w   #   N   I   L       T   H   E
0135140    N       d   .   w   .   e   _   d   }   ;  \r   A   d   j   u
0135160    s   t   E   v   e   n   t   O   f   f   s   e   t   s   [   u
0135200    ,   d   .   s   i   z   e   L   .   y   ,   T   R   U   E   ]
0135220    ;  \r   M   e   r   g   e   [   u   ,   d   ]   ;  \r   d   .
0135240    s   i   z   e   L   .   y   _   d   .   s   i   z   e   L   .
0135260    y   +   u   .   s   i   z   e   L   .   y   ;  \r   d   .   n
0135300    _   u   .   n   ;       I   F       d   .   n   #   N   I   L
0135320        T   H   E   N       d   .   n   .   s   _   d   ;  \r   R
0135340    e   m   o   v   e   R   e   c   t   a   n   g   l   e   [   u
0135360    ]   ;  \r   R   E   T   U   R   N   [   T   R   U   E   ]   ;
0135400   \r   E   N   D   ;  \r  \r   T   r   y   L   R   :   P   R   O
0135420    C   E   D   U   R   E   [   l   ,   r   :   R   e   c   t   a
0135440    n   g   l   e   P   t   r   ]       R   E   T   U   R   N   S
0135460    [   B   O   O   L   E   A   N   ]   =   B   E   G   I   N 376
0135500  001  \0   d 325  \r   I   F       l   =   N   I   L       O   R
0135520        l   .   e   #   r       O   R       r   .   w   #   l    
0135540    O   R       l   .   s   S   o   u   r   c   e       O   R    
0135560    r   .   s   S   o   u   r   c   e       O   R       l   .   n
0135600    S   o   u   r   c   e       O   R       r   .   n   S   o   u
0135620    r   c   e  \r       O   R       l   .   s   i   z   e   L   .
0135640    y   #   r   .   s   i   z   e   L   .   y       O   R       l
0135660    .   p   o   s   .   y   #   r   .   p   o   s   .   y  \r    
0135700    O   R       l   .   n   #   N   I   L       A   N   D       r
0135720    .   n   #   N   I   L       A   N   D       ~   T   r   y   L
0135740    R   [   l   .   n   ,   r   .   n   ]  \r       T   H   E   N
0135760        R   E   T   U   R   N   [   F   A   L   S   E   ]   ;  \r
0136000    I   F       r   .   s   =   N   I   L       T   H   E   N    
0136020    r   .   w   s   _   r   .   s   i   z   e   L   .   x   +   l
0136040    .   w   s   ;  \r   I   F       r   .   n   =   N   I   L    
0136060    T   H   E   N       r   .   w   n   _   r   .   s   i   z   e
0136100    L   .   x   + 376 001  \0 206   v   l   .   w   n   ;  \r   I
0136120    F       l   .   s   =   N   I   L       T   H   E   N       r
0136140    .   e   s   _   l   .   s   i   z   e   L   .   x   +   l   .
0136160    e   s   ;  \r   I   F       l   .   n   =   N   I   L       T
0136200    H   E   N       r   .   e   n   _   l   .   s   i   z   e   L
0136220    .   x   +   l   .   e   n   ;  \r   I   F       r   .   n   =
0136240    N   I   L       T   H   E   N       {   r   .   n   _   l   .
0136260    n   ;       I   F       r   .   n   #   N   I   L       T   H
0136300    E   N       r   .   n   .   s   _   r   }   ;  \r   I   F    
0136320    r   .   s   =   N   I   L       T   H   E   N       {   r   .
0136340    s   _   l   .   s   ;       I   F       r   .   s   #   N   I
0136360    L       T   H   E   N       r   .   s   .   n   _   r   }   ;
0136400   \r   A   d   j   u   s   t   E   v   e   n   t   O   f   f   s
0136420    e   t   s   [   r   ,   l   .   s   i   z   e   L   .   x   ,
0136440    F   A   L   S   E   ]   ;  \r   M   e   r   g   e   [   l   ,
0136460    r   ]   ;  \r   r   .   s   i   z   e   L   .   x   _   r   .
0136500    s   i   z   e   L   .   x   +   l 376 001  \0   :   L   .   s
0136520    i   z   e   L   .   x   ;  \r   r   .   p   o   s   .   x   _
0136540    l   .   p   o   s   .   x   ;  \r   r   .   w   _   l   .   w
0136560    ;       I   F       r   .   w   #   N   I   L       T   H   E
0136600    N       r   .   w   .   e   _   r   ;  \r   R   e   m   o   v
0136620    e   R   e   c   t   a   n   g   l   e   [   l   ]   ;  \r   R
0136640    E   T   U   R   N   [   T   R   U   E   ]   ;  \r   E   N   D
0136660    ;  \r  \r   M   e   r   g   e   :   P   R   O   C   E   D   U
0136700    R   E   [   u   ,   d   :   R   e   c   t   a   n   g   l   e
0136720    P   t   r   ]   =   B   E   G   I   N  \r   d   .   e   v   e
0136740    n   t   s   _   A   p   p   e   n   d   L   i   s   t   s   [
0136760    d   .   e   v   e   n   t   s   ,   u   .   e   v   e   n   t
0137000    s   ]   ;  \r   d   .   e   S   o   u   r   c   e   _   d   .
0137020    e   S   o   u   r   c   e       O   R       u   .   e   S   o
0137040    u   r   c   e   ;  \r   d   .   w   S   o   u   r   c   e   _
0137060    d   .   w   S   o   u   r   c   e       O   R       u   .   w
0137100    S   o   u   r   c   e   ;  \r   d   .   n   S   o   u 376 001
0137120   \0 337 211   r   c   e   _   d   .   n   S   o   u   r   c   e
0137140        O   R       u   .   n   S   o   u   r   c   e   ;  \r   d
0137160    .   s   S   o   u   r   c   e   _   d   .   s   S   o   u   r
0137200    c   e       O   R       u   .   s   S   o   u   r   c   e   ;
0137220   \r   E   N   D   ;  \r  \r   A   p   p   e   n   d   L   i   s
0137240    t   s   :   P   R   O   C   E   D   U   R   E   [   a   ,   b
0137260    :   E   v   e   n   t   L   i   s   t   P   t   r   ]       R
0137300    E   T   U   R   N   S   [   E   v   e   n   t   L   i   s   t
0137320    P   t   r   ]   =   B   E   G   I   N  \r   I   F       a   =
0137340    N   I   L       T   H   E   N       R   E   T   U   R   N   [
0137360    b   ]   ;  \r   F   O   R       l   :   E   v   e   n   t   L
0137400    i   s   t   P   t   r   _   a   ,   l   .   t       D   O    
0137420    I   F       l   .   t   =   N   I   L       T   H   E   N    
0137440    {   l   .   t   _   b   ;       R   E   T   U   R   N   [   a
0137460    ]   }   ;       E   N   D   L   O   O   P   ;  \r   E   N   D
0137500    ;  \r  \r   A   d   j   u   s   t   E   v   e   n   t   O   f
0137520    f   s   e 376 001  \0 030 374   t   s   :   P   R   O   C   E
0137540    D   U   R   E   [   r   :   R   e   c   t   a   n   g   l   e
0137560    P   t   r   ,   d   :   L   a   m   b   d   a   ,   u   d   :
0137600    B   O   O   L   E   A   N   ]   =  \r   B   E   G   I   N  \r
0137620    F   O   R       l   :   E   v   e   n   t   L   i   s   t   P
0137640    t   r   _   r   .   e   v   e   n   t   s   ,   l   .   t    
0137660    U   N   T   I   L       l   =   N   I   L       D   O  \r    
0137700        e   :   E   v   e   n   t   P   t   r   =   l   .   h   ;
0137720   \r           I   F       (   S   E   L   E   C   T       e   .
0137740    s   i   d   e       F   R   O   M       n   ,   s   =   >   ~
0137760    u   d   ,       E   N   D   C   A   S   E   =   >   u   d   )
0140000   \r               T   H   E   N       l   .   h   .   o   f   f
0140020    s   e   t   _   l   .   h   .   o   f   f   s   e   t   +   d
0140040    ;  \r           E   N   D   L   O   O   P   ;  \r   E   N   D
0140060    ;  \r  \r   R   e   m   o   v   e   R   e   c   t   a   n   g
0140100    l   e   :   P   R   O   C   E   D   U   R   E   [   r   e   c
0140120    t   :   R   e   c   t   a   n 376 001  \0   m 313   g   l   e
0140140    P   t   r   ]   =   B   E   G   I   N  \r   b   a   c   k   :
0140160    R   e   c   t   a   n   g   l   e   L   i   s   t   P   t   r
0140200    _   N   I   L   ;  \r   I   F       r   e   c   t   =   N   I
0140220    L       T   H   E   N       R   E   T   U   R   N   ;  \r   F
0140240    O   R       r   l   :   R   e   c   t   a   n   g   l   e   L
0140260    i   s   t   P   t   r   _   r   e   c   t   a   n   g   l   e
0140300    s   ,   r   l   .   t       U   N   T   I   L       r   l   =
0140320    N   I   L       D   O  \r           I   F       r   l   .   h
0140340    =   r   e   c   t       T   H   E   N       B   E   G   I   N
0140360   \r                   I   F       b   a   c   k   =   N   I   L
0140400        T   H   E   N       r   e   c   t   a   n   g   l   e   s
0140420    _   r   l   .   t       E   L   S   E       b   a   c   k   .
0140440    t   _   r   l   .   t   ;  \r                   F   r   e   e
0140460    L   i   s   t   [   r   l   ]   ;  \r       -   -       F   r
0140500    e   e   R   e   c   t   a   n   g   l   e   [   r   e   c   t
0140520    ]   ;  \r                   R   E   T   U   R   N 376 001  \0
0140540  340 271   ;  \r                   E   N   D   ;  \r           b
0140560    a   c   k   _   r   l   ;      \r           E   N   D   L   O
0140600    O   P   ;  \r   E   r   r   o   r   ;  \r   E   N   D   ;  \r
0140620   \r   M   a   r   k   N   a   t   u   r   e   A   n   d   O   r
0140640    i   e   n   t   A   n   d   W   h   e   r   e   :   P   R   O
0140660    C   E   D   U   R   E   [   r   e   c   t   :   R   e   c   t
0140700    a   n   g   l   e   P   t   r   ]   =   B   E   G   I   N  \r
0140720    t   y   p   e   :   I   n   t   e   r   T   y   p   e   =   M
0140740    a   k   e   T   y   p   e   [   n   :   r   e   c   t   .   n
0140760    S   o   u   r   c   e   ,       s   :   r   e   c   t   .   s
0141000    S   o   u   r   c   e   ,  \r                                
0141020                                            e   :   r   e   c   t
0141040    .   e   S   o   u   r   c   e   ,       w   :   r   e   c   t
0141060    .   w   S   o   u   r   c   e   ]   ;  \r   t   y   p   e   2
0141100    :   I   n   t   e   r   T   y   p   e   =   M   a   k   e   T
0141120    y   p   e   [   n   :   r   e   c   t   .   n   #   N   I   L
0141140    ,     376 001  \0   ;   M   s   :   r   e   c   t   .   s   #
0141160    N   I   L   ,  \r                                            
0141200                                e   :   r   e   c   t   .   e   #
0141220    N   I   L   ,       w   :   r   e   c   t   .   w   #   N   I
0141240    L   ]   ;  \r   I   F       r   e   c   t   .   n   #   N   I
0141260    L       A   N   D       r   e   c   t   .   n   S   o   u   r
0141300    c   e       T   H   E   N       E   r   r   o   r   ;  \r   I
0141320    F       r   e   c   t   .   s   #   N   I   L       A   N   D
0141340        r   e   c   t   .   s   S   o   u   r   c   e       T   H
0141360    E   N       E   r   r   o   r   ;  \r   I   F       r   e   c
0141400    t   .   e   #   N   I   L       A   N   D       r   e   c   t
0141420    .   e   S   o   u   r   c   e       T   H   E   N       E   r
0141440    r   o   r   ;  \r   I   F       r   e   c   t   .   w   #   N
0141460    I   L       A   N   D       r   e   c   t   .   w   S   o   u
0141500    r   c   e       T   H   E   N       E   r   r   o   r   ;  \r
0141520