]> granicus.if.org Git - postgresql/commitdiff
Integrate new IP type from Tom Ivar Helbekkmo.
authorBruce Momjian <bruce@momjian.us>
Sat, 3 Oct 1998 05:41:01 +0000 (05:41 +0000)
committerBruce Momjian <bruce@momjian.us>
Sat, 3 Oct 1998 05:41:01 +0000 (05:41 +0000)
33 files changed:
contrib/README
contrib/ip_and_mac/Makefile [deleted file]
contrib/ip_and_mac/README [deleted file]
contrib/ip_and_mac/README.ORIG [deleted file]
contrib/ip_and_mac/ip.c [deleted file]
contrib/ip_and_mac/ip.sql [deleted file]
contrib/ip_and_mac/ip_orig.c [deleted file]
contrib/ip_and_mac/ipaddr.html [deleted file]
contrib/ip_and_mac/ipi.sql [deleted file]
contrib/ip_and_mac/mac.c [deleted file]
contrib/ip_and_mac/mac.h [deleted file]
contrib/ip_and_mac/mac.sql [deleted file]
contrib/ip_and_mac/t1.sql [deleted file]
contrib/ip_and_mac/test.DATA [deleted file]
contrib/ip_and_mac/test.sql [deleted file]
contrib/ip_and_mac/test1.sql [deleted file]
contrib/ip_and_mac/test2.sql [deleted file]
doc/README.ipaddr [new file with mode: 0644]
src/backend/parser/gram.c
src/backend/utils/adt/Makefile
src/backend/utils/adt/inet_net_ntop.c [new file with mode: 0644]
src/backend/utils/adt/inet_net_pton.c [new file with mode: 0644]
src/backend/utils/adt/ip.c [new file with mode: 0644]
src/backend/utils/adt/mac.c [new file with mode: 0644]
src/include/catalog/pg_amop.h
src/include/catalog/pg_amproc.h
src/include/catalog/pg_opclass.h
src/include/catalog/pg_operator.h
src/include/catalog/pg_proc.h
src/include/catalog/pg_type.h
src/include/utils/builtins.h
src/include/utils/mac.h [new file with mode: 0644]
src/tools/pgindent/pgindent

index b66dd8012c6b5b6b8609c58668d30771cf64814a..88dc7b645ad99b09dc36c026b01eef485541ea0f 100644 (file)
@@ -31,10 +31,6 @@ int8 -
        64-bit integer arithmetic for Postgres
        by Thomas G. Lockhart <Thomas.Lockhart@jpl.nasa.gov>
 
-ip_and_mac -
-       PostgreSQL type extensions for IP and MAC addresses
-       by Tom Ivar Helbekkmo <tih@Hamartun.Priv.NO>
-
 isbn_issn -
        PostgreSQL type extensions for ISBN (books) and ISSN (serials)
        by Garrett A. Wollman <wollman@khavrinen.lcs.mit.edu>
diff --git a/contrib/ip_and_mac/Makefile b/contrib/ip_and_mac/Makefile
deleted file mode 100644 (file)
index 0071eb6..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#      PostgreSQL types for IP and MAC addresses
-#
-#      $Id: Makefile,v 1.5 1998/06/16 05:35:10 momjian Exp $
-
-all: ip.so mac.so
-
-ip.so: ip.o
-       ld -Bshareable -o ip.so ip.o
-
-ip.o: ip.c
-       cc -g -O -fPIC -I/usr/local/pgsql/include -c ip.c
-
-mac.so: mac.o
-       ld -Bshareable -o mac.so mac.o
-
-mac.o: mac.c mac.h
-       cc -g -O -fPIC -I/usr/local/pgsql/include -c mac.c
-
-install: ip.so mac.so
-       install -c ip.so mac.so /usr/local/pgsql/contrib/ip_and_macs
-
-clean:
-       rm -f *.o *.so *.b
-#
-#      eof
-#
diff --git a/contrib/ip_and_mac/README b/contrib/ip_and_mac/README
deleted file mode 100644 (file)
index c946f20..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-
-This directory contain 2 new classes - macaddr to store mac addresses
-written by (Bergen, Norway, 1998-01-31, Tom Ivar Helbekkmo
-(tih@Hamartun.Priv.NO)), and ipaddr type and ipaddr_ops operator class,
-rewritten by me (alex@relcom.EU.net, Aleksei Roudnev, Moscow, Russia,
-25.05.98) and written first by Bergen.
-
-To see the description of macaddr type, read README.ORIG file. To see
-the description of ipaddr type, read ipaddr.html file.
-                                           ^^^^^^^^^^^
-
-This ipaddr type differ slightly from the original one. First, if you
-input '193.124.23.0' it sets /24 prefix instead of /32 (this is in
-accordance to CISCO's notification and our internal data bases and
-records); if you input '0.0.0.0' it's '0.0.0.0/0' (default) but not NULL
-or NOADDR value.
-
-Then, you can store ADDRESS/PREFIX pair, even if ADDRESS is not the
-subnet address (for example, you can store interface address and mask at
-the single attribute). This allow us to determine, for example, which
-interfaces/routers are accessible by connected network for our interface
-(select * from database where '193.124.23.4' @ interface_address);
-
-Then, it have been written a few new functions and a few operators
-(addr1 @ addr - TRUE if addr1 is the part of subnet addr2);
-'ipaddr_print' function allow you to convert address to any form you
-want; and so on.
-
-And then, I add ipi.sql setup script and test1.sql + test2.sql test
-scripts to allow and test indexing by this new class.
-
-This ipaddr type/opclass are used for our internal IP ROUTING and
-ACCOUNTING data base, and I hope it shpuld be usefull for more people.
-
-For those who like crazy tasks, I propose to realise 'RTREE' indexing
-method to allow effectively use '@' operation for the binding statistic
-records to the customers etc networks. Note 'ipaddr' type can be written
-as 'start,end' coordination pair and it's possible to define all '<<,
-&<, @@, etc graphical operators over this type.
-
-
-25.05.1998, Aleksei Roudnev, alex@relcom.EU.net, Relcom, Moscow, Russia. /+7-095-194-1995.
-==========================================================================================
diff --git a/contrib/ip_and_mac/README.ORIG b/contrib/ip_and_mac/README.ORIG
deleted file mode 100644 (file)
index d0e4f43..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-PostgreSQL type extensions for IP and MAC addresses.
----------------------------------------------------
-
-$Id: README.ORIG,v 1.2 1998/06/16 05:35:10 momjian Exp $
-
-I needed to record IP and MAC level ethernet addresses in a data
-base, and I really didn't want to store them as plain strings, with
-no enforced error checking, so I put together the accompanying code
-as my first experiment with adding a data type to PostgreSQL.  I
-then thought that this might be useful to others, both directly and
-as a very simple example of how to do this sort of thing, so here
-it is, in the hope that it will be useful.
-
-IP addresses are implemented as a 6 byte struct (this may be 1 byte
-more than is useful, but I figured that since it has to be at least 5,
-it might as well be an even number of bytes) that contains the four
-byte address and a mask width.  The external representation of an IP
-address looks like '158.37.96.15/32' (or just '158.37.96.15', which is
-understood to mean the same thing).  This address happens to be part
-of a subnet where I work; '158.37.96.0/24', which itself is a part of
-the larger subnet allocated to our site, which is '158.37.96.0/21',
-which again, if you go by the old book, is part of the class "B" net
-called '158.37.0.0/16'.
-
-Input and output functions are supplied, along with the "normal" <,
-<=, =, >=, > and <> operators, which all do what you expect.  In
-addition, there is a function to check whether a given address is a
-member of a given subnet: ipaddr_in_net(addr, net), and functions to
-return the netmask and the broadcast address of a given network:
-ipaddr_mask(net) and ipaddr_bcast(net).
-
-MAC level ethernet addresses are implemented as a 6 byte struct that
-contains the address as unsigned chars.  Several input forms are
-accepted; the following are all the same address: '08002b:010203',
-'08002b-010203', '0800.2b01.0203', '08-00-2b-01-02-03' and
-'08:00:2b:01:02:03'.  Upper and lower case is accepted for the digits
-'a' through 'f'.  Output is always in the latter of the given forms.
-
-As with IP addresses, input and output functions are supplied as well
-as the "normal" operators, which do what you expect.  As an extra
-feature, a function macaddr_manuf() is defined, which returns the name
-of the manufacturer as a string.  This is currently held in a
-hard-coded struct internal to the C module -- it might be smarter to
-put this information into an actual data base table, and look up the
-manufacturer there.  (Another TODO, for both new data types, is to
-interface them to indices.  If anyone can explain this to me in a way
-that is easier to understand than the current documentation, I would
-be most grateful!)
-
-I don't know what changes are needed to the Makefile for other systems
-than the one I'm running (NetBSD 1.3), but anyway: to install on a BSD
-system: fix the path names in the SQL files and the Makefile if you
-need to, then make, make install, slurp the SQL files into psql or
-whatever, and you're off.  Enjoy!
-
-Bergen, Norway, 1998-01-31, Tom Ivar Helbekkmo (tih@Hamartun.Priv.NO).
diff --git a/contrib/ip_and_mac/ip.c b/contrib/ip_and_mac/ip.c
deleted file mode 100644 (file)
index 0b56375..0000000
+++ /dev/null
@@ -1,448 +0,0 @@
-/*
- *     PostgreSQL type definitions for IP addresses.
- *
- *     $Id: ip.c,v 1.5 1998/06/16 05:35:10 momjian Exp $
- */
-
-#include <stdio.h>
-
-#include <postgres.h>
-#include <utils/palloc.h>
-
-/*
- *     This is the internal storage format for IP addresses:
- */
-
-typedef struct ipaddr
-{
-       uint32          address;
-       int16           width;
-}                      ipaddr;
-
-/*
- *     Various forward declarations:
- */
-
-ipaddr    *ipaddr_in(char *str);
-char      *ipaddr_out(ipaddr * addr);
-
-bool           ipaddr_lt(ipaddr * a1, ipaddr * a2);
-bool           ipaddr_le(ipaddr * a1, ipaddr * a2);
-bool           ipaddr_eq(ipaddr * a1, ipaddr * a2);
-bool           ipaddr_ge(ipaddr * a1, ipaddr * a2);
-bool           ipaddr_gt(ipaddr * a1, ipaddr * a2);
-
-bool           ipaddr_ne(ipaddr * a1, ipaddr * a2);
-
-int4           ipaddr_cmp(ipaddr * a1, ipaddr * a2);
-
-bool           ipaddr_in_net(ipaddr * a1, ipaddr * a2);
-ipaddr    *ipaddr_mask(ipaddr * a);
-ipaddr    *ipaddr_bcast(ipaddr * a);
-
-/*
- *     Build a mask of a given width:
- */
-
-unsigned long
-build_mask(unsigned char bits)
-{
-       unsigned long mask = 0;
-       int                     i;
-
-       for (i = 0; i < bits; i++)
-               mask = (mask >> 1) | 0x80000000;
-       return mask;
-}
-
-/*
- *     IP address reader.      Note how the count returned by sscanf()
- *     is used to determine whether the mask size was specified.
- */
-
-ipaddr *
-ipaddr_in(char *str)
-{
-       int                     a,
-                               b,
-                               c,
-                               d,
-                               w;
-       ipaddr     *result;
-       int                     count;
-
-       if (strlen(str) > 0)
-       {
-
-               count = sscanf(str, "%d.%d.%d.%d/%d", &a, &b, &c, &d, &w);
-
-               if (count < 4)
-               {
-                       elog(ERROR, "ipaddr_in: error in parsing \"%s\"", str);
-                       return (NULL);
-               }
-               if ( count == 3 ) {
-                      d = 0;
-                      count = 4;
-               };
-               if (count == 4)
-               {
-                       w = 32;
-                       if ( a >= 192 && a < 224 && d == 0 ) w = 24;
-                       if ( a >= 128 && a < 192 && d == 0 && c == 0 ) w = 16;
-                       if ( a > 0    && a < 128 && c == 0 && b == 0 && a < 128 ) w = 8;
-                       if ( a == 0 && b == 0 && c == 0 && d == 0 ) w = 0;
-               };
-               if ((a < 0) || (a > 255) || (b < 0) || (b > 255) ||
-                       (c < 0) || (c > 255) || (d < 0) || (d > 255) ||
-                       (w < 0) || (w > 32))
-               {
-                       elog(ERROR, "ipaddr_in: illegal address \"%s\"", str);
-                       return (NULL);
-               }
-       }
-       else
-       {
-               a = b = c = d = w = 255;  /* special case for missing address */
-       }
-
-       result = (ipaddr *) palloc(sizeof(ipaddr));
-
-       result->address = (uint32) ((a << 24) | (b << 16) | (c << 8) | d);
-       result->width = w;
-
-       return (result);
-}
-
-/*
- *     IP address output function.  Note mask size specification
- *     generated only for subnets, not for plain host addresses.
- */
-
-char *
-ipaddr_out(ipaddr * addr)
-{
-       char       *result;
-       int a, b, c, d, w;
-       if (addr == NULL)
-               return (NULL);
-
-       result = (char *) palloc(32);
-
-       w = addr->width;
-       a = (addr->address >> 24) & 0xff;
-       b = (addr->address >> 16) & 0xff;
-       c = (addr->address >>  8) & 0xff;
-       d = (addr->address >>  0) & 0xff;
-       /* Check by missing address (w > 32 )  */
-       if ( w >= 0 && w <= 32  )
-       {
-               /* In case of NATURAL network don't output the prefix */
-               if ( (a == 0  && b == 0 && c == 0 && d == 0 && w ==  0 ) ||
-                    (a < 128 && b == 0 && c == 0 && d == 0 && w ==  8 ) ||
-                    (a < 192           && c == 0 && d == 0 && w == 16 ) ||
-                    (a < 224                     && d == 0 && w == 24 ) ||
-                    ( d != 0 ) ) w = -1;
-               if (w == -1 )
-                       sprintf(result, "%d.%d.%d.%d",a,b,c,d);
-               else
-                       sprintf(result, "%d.%d.%d.%d/%d",a,b,c,d,w);
-       }
-       else
-       {
-               result[0] = 0;                  /* special case for missing address */
-       }
-       return (result);
-}
-
-/*
- * Print ipaddr by format
- * %A - address
- * %M - maska
- * %P - prefix
- * %B - negated maska
- */
-# define TXT_LEN_0 4
-text *
-ipaddr_print(ipaddr * addr, text *fmt)
-{
-       text       *result;
-       char *p, *op;
-       uint32          aaa;
-       int a, b, c, d;
-       if (addr == NULL)
-               return (NULL);
-
-       result = (text  *) palloc( sizeof(text) + 64 );
-
-       /* Check by missing address (w > 32 )  */
-       for ( p = fmt->vl_dat, op = result->vl_dat; *p && (p - fmt->vl_dat) < (fmt->vl_len - TXT_LEN_0)  && (op - result->vl_dat) < 48; p++) {
-              if ( *p != '%' ) {
-                      *op++ = *p;
-                      continue;
-              };
-              p++;
-              if ( *p == 'A' )
-              {
-                      aaa = addr->address;
-                      goto pta;
-              };
-              if ( *p == 'M' ) {
-                      aaa = build_mask(addr->width);
-                      goto pta;
-              }
-              if ( *p == 'B' ) {
-                      aaa = build_mask(32 - addr->width) >> addr->width;
-                      goto pta;
-              }
-              if ( *p == 'P' ) {
-                      sprintf(op,"%d",addr->width);
-                      while ( *op) op++;
-                      continue;
-              };
-              *op++ = *p;
-              continue;
-pta:
-              a = (aaa >> 24) & 0xff;
-              b = (aaa >> 16) & 0xff;
-              c = (aaa >>  8) & 0xff;
-              d = (aaa >>  0) & 0xff;
-              sprintf(op, "%d.%d.%d.%d",a,b,c,d);
-              while ( *op ) op++;
-              continue;
-       };
-       *op = 0;
-       result->vl_len = (op - result->vl_dat) + TXT_LEN_0;
-       return (result);
-}
-
-/*
- *     Boolean tests for magnitude.
- */
-
-bool
-ipaddr_lt(ipaddr * a1, ipaddr * a2)
-{
-       if ( a1->address == a2->address ) return(a1->width <  a2->width);
-       return (a1->address < a2->address);
-};
-
-bool
-ipaddr_le(ipaddr * a1, ipaddr * a2)
-{
-       if ( a1->address == a2->address ) return(a1->width <= a2->width);
-       return (a1->address <= a2->address);
-};
-
-bool
-ipaddr_eq(ipaddr * a1, ipaddr * a2)
-{
-       if ( a1->address == a2->address ) return(a1->width == a2->width);
-       return (a1->address == a2->address);
-};
-
-bool
-ipaddr_ge(ipaddr * a1, ipaddr * a2)
-{
-       if ( a1->address == a2->address ) return(a1->width >= a2->width);
-       return (a1->address >= a2->address);
-};
-
-bool
-ipaddr_gt(ipaddr * a1, ipaddr * a2)
-{
-       if ( a1->address == a2->address ) return(a1->width > a2->width);
-       return (a1->address > a2->address);
-};
-
-bool
-ipaddr_ne(ipaddr * a1, ipaddr * a2)
-{
-       if ( a1->address == a2->address ) return(a1->width != a2->width);
-       return (a1->address != a2->address);
-};
-
-/*
- *     Comparison function for sorting:
- */
-
-int4
-ipaddr_cmp(ipaddr * a1, ipaddr * a2)
-{
-       if (a1->address < a2->address)
-               return -1;
-       else if (a1->address > a2->address)
-               return 1;
-       else
-       {
-           if (a1->width < a2->width)
-                   return -1;
-           else if (a1->width > a2->width)
-                   return 1;
-       }
-       return 0;
-}
-
-/*
- *      The number of hosts in the network
- */
-int4
-ipaddr_len(ipaddr * a)
-{
-       if ( a->width > 32 || a->width < 0 ) return(0);
-       return(1 << (32 - a->width));
-}
-
-/*
- *      The number of network bits
- */
-int4
-ipaddr_pref(ipaddr * a)
-{
-       if ( a->width > 32 || a->width < 0 ) return(0);
-       return(a->width);
-}
-
-/*
- *      The host addr as an integer
- */
-int4
-ipaddr_integer(ipaddr * a)
-{
-       return(a->address);
-}
-
-/*
- *     Test whether an address is within a given subnet:
- */
-
-bool
-ipaddr_in_net(ipaddr * a1, ipaddr * a2)
-{
-       uint32          maskbits;
-
-       if (a1->width < a2->width)
-               return FALSE;
-       if ((a1->width == 32) && (a2->width == 32))
-               return ipaddr_eq(a1, a2);
-       maskbits = build_mask(a2->width);
-       if ((a1->address & maskbits) == (a2->address & maskbits))
-               return TRUE;
-       return FALSE;
-}
-
-/*
- *      Test whether an address is the network or a host in the network:
- */
-
-bool
-ipaddr_is_net(ipaddr * a)
-{
-       uint32          maskbits;
-
-       if (a->width == 32)
-               return FALSE;
-       maskbits = build_mask(a->width);
-       if ( (a->address & maskbits) == a->address )
-               return TRUE;
-       return FALSE;
-}
-
-/*
- *     Pick out just the mask of a network:
- */
-
-ipaddr *
-ipaddr_mask(ipaddr * a)
-{
-       ipaddr     *result;
-
-       result = (ipaddr *) palloc(sizeof(ipaddr));
-       result->address = build_mask(a->width);
-       result->width = 32;
-
-       return result;
-}
-
-/*
- *     Return the broadcast address of a network:
- */
-
-ipaddr *
-ipaddr_bcast(ipaddr * a)
-{
-       ipaddr     *result;
-
-       result = (ipaddr *) palloc(sizeof(ipaddr));
-       result->address = a->address;
-       result->address |= (build_mask(32 - a->width) >> a->width);
-       result->width = 32;
-
-       return result;
-}
-
-/*
- *      Return the base network of the address/network:
- */
-
-ipaddr *
-ipaddr_net(ipaddr * a)
-{
-       ipaddr     *result;
-
-       result = (ipaddr *) palloc(sizeof(ipaddr));
-       result->address = a->address;
-       result->address &= build_mask(a->width);
-       result->width = a->width;
-
-       return result;
-}
-
-/*
- * Compose ipaddr from ADDR and PREFIX
- */
-ipaddr *
-ipaddr_compose(int4 addr, int4 pref)
-{
-       ipaddr     *result;
-
-       result = (ipaddr *) palloc(sizeof(ipaddr));
-       if ( pref < 0 || pref > 32 ) {
-              pref = 255;
-              addr = 0;
-       };
-       result->address = addr;
-       result->width = pref;
-       return result;
-}
-
-/*
- *      Plus and Minus operators
- */
-ipaddr *
-ipaddr_plus(ipaddr * a, int4 i)
-{
-       ipaddr     *result;
-
-       result = (ipaddr *) palloc(sizeof(ipaddr));
-       result->address = a->address + i;
-       result->width = a->width;
-
-       return result;
-}
-
-ipaddr *
-ipaddr_minus(ipaddr * a, int4 i)
-{
-       ipaddr     *result;
-
-       result = (ipaddr *) palloc(sizeof(ipaddr));
-       result->address = a->address - i;
-       result->width = a->width;
-
-       return result;
-}
-
-/*
- *     eof
- */
diff --git a/contrib/ip_and_mac/ip.sql b/contrib/ip_and_mac/ip.sql
deleted file mode 100644 (file)
index 2d402bd..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
---
---     PostgreSQL code for IP addresses.
---
---     $Id: ip.sql,v 1.5 1998/06/16 05:35:10 momjian Exp $
---      Invoced from  1998/02/14 17:58:04 scrappy
---
---      New - INPUT/OUTPUT, functions, indexing by btree, test.
---      PART # 1 - ip.sql - load new type, functions and operators.
---      Then you should execute ipi.sql - add ipaddr_ops class to allow indexing.
-
-load '/usr/local/pgsql/contrib/ip_and_macs/ip.so';
-
---
---     Input and output functions and the type itself:
---      Note - we input 193.124.23.1 as /32, and 193.124.23.0 as /24.
---      We output /24 network withouth /24 suffix, and /32 hosts wothouth suffixes
---      if it is not '0' address of /24 network.
---      Just the same, we threat 0.0.0.0 as 0.0.0.0/0 == DEFAULT.
---
-
-create function ipaddr_in(opaque)
-       returns opaque
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
-
-
-create function ipaddr_out(opaque)
-       returns opaque
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
-create type ipaddr (
-       internallength = 6,
-       externallength = variable,
-       input = ipaddr_in,
-       output = ipaddr_out
-);
-
---
--- Print address by format
--- %A - address
--- %P - /Pref
--- %M - maska
--- %B - reversed maska
-drop function ipaddr_print;
-create function ipaddr_print(ipaddr, text)
-       returns text
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-);
-
---
---     The various boolean tests:
---      In case if addresseas are equal, we compare prefix length
---      It means 193.124.23.0/24 < 193.124.23.0/32
---
-
-create function ipaddr_lt(ipaddr, ipaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
-create function ipaddr_le(ipaddr, ipaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
-create function ipaddr_eq(ipaddr, ipaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
-create function ipaddr_ge(ipaddr, ipaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
-create function ipaddr_gt(ipaddr, ipaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
-create function ipaddr_ne(ipaddr, ipaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
--- Test if a1 is in net a2
--- Return TRUE if a1 is IN a2 subnet or if a1 == a2
---
-create function ipaddr_in_net(ipaddr, ipaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
--- Return the network from the host/network address. This means
--- 193.124.23.4/24 -> 193.124.23.0/24.
--- This allow to use interface address (with the real netmask) to create
--- network, and to link interfaces and addresses belongs to the same network.
---
-
- create function ipaddr_net(ipaddr)
-       returns ipaddr
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
--- Return TRUE if addr describe NETWORK, not host in the network
--- It's equivalent to ipaddr_net(a) == a
---
-
- create function ipaddr_is_net(ipaddr)
-       returns boolean
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
--- Return the number of the hosts in the network
---
-
- create function ipaddr_len(ipaddr)
-       returns int4
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
--- Return the prefix length of the network
---
-
- create function ipaddr_pref(ipaddr)
-       returns int4
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
--- Convert network into the integer.
--- Can be used for 'compose' function
---
-
- create function ipaddr_integer(ipaddr)
-       returns int4
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
--- Compose ipaddr from the ADDRESS and PREF
--- ipaddr_compose(ipaddr_integer(a),ipaddr_pref(a)) == a
---
-
- create function ipaddr_compose(int4,int4)
-       returns ipaddr
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
--- Return MASK for the network
---
-
- create function ipaddr_mask(ipaddr)
-       returns ipaddr
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
--- Return BROADCAST address for the network
---
-
- create function ipaddr_bcast(ipaddr)
-       returns ipaddr
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
--- Compare 2 addresses. First, compare addresses, then, compare prefixes (if the addresses
--- are the same).
---
-
- create function ipaddr_cmp(ipaddr,ipaddr)
-       returns int4
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
--- Plus and Minus operators
---
-
- create function ipaddr_plus(ipaddr,int4)
-       returns ipaddr
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
- create function ipaddr_minus(ipaddr,int4)
-       returns ipaddr
-       as '/usr/local/pgsql/contrib/ip_and_macs/ip.so'
-       language 'c';
-
---
---     Now the operators.  Note how some of the parameters to some
---     of the 'create operator' commands are commented out.  This
---     is because they reference as yet undefined operators, and
---     will be implicitly defined when those are, further down.
---
-
--- drop operator < ( ipaddr, ipaddr);
-create operator < (
-       leftarg = ipaddr,
-       rightarg = ipaddr,
---     negator = >=,
-       procedure = ipaddr_lt,
-       restrict = intltsel,
-       join = intltjoinsel
-);
-
--- drop operator <= (ipaddr,ipaddr);
-create operator <= (
-       leftarg = ipaddr,
-       rightarg = ipaddr,
---     negator = >,
-       procedure = ipaddr_le,
-       restrict = intltsel,
-       join = intltjoinsel
-);
-
--- drop operator = (ipaddr,ipaddr);
-create operator = (
-       leftarg = ipaddr,
-       rightarg = ipaddr,
-       commutator = =,
---     negator = <>,
-       restrict = eqsel,
-       join = eqjoinsel,
-       procedure = ipaddr_eq
-);
-
-
--- drop operator >= (ipaddr,ipaddr);
-create operator >= (
-       leftarg = ipaddr,
-       rightarg = ipaddr,
-       negator = <,
-       procedure = ipaddr_ge,
-       restrict = intgtsel,
-       join = intgtjoinsel
-);
-
--- drop operator > (ipaddr,ipaddr);
-create operator > (
-       leftarg = ipaddr,
-       rightarg = ipaddr,
-       negator = <=,
-       procedure = ipaddr_gt,
-       restrict = intgtsel,
-       join = intgtjoinsel
-);
-
--- drop operator <> (ipaddr,ipaddr);
-create operator <> (
-       leftarg = ipaddr,
-       rightarg = ipaddr,
-       negator = =,
-       procedure = ipaddr_ne,
-       restrict = neqsel,
-       join = neqjoinsel
-);
-
-create operator @ (
-       leftarg = ipaddr,
-       rightarg = ipaddr,
-       procedure = ipaddr_in_net
-);
-
-create operator + (
-       leftarg = ipaddr,
-       rightarg = int4,
-       procedure = ipaddr_plus
-);
-
-create operator - (
-       leftarg = ipaddr,
-       rightarg = int4,
-       procedure = ipaddr_minus
-);
-
--- *****************************************************************************************
--- * For now, you have: input/output (remember, '193.124.23.0' means /24 network,          *
--- *                                            '193.124.23.1' means /32 host)             *
--- * <, <=, = <>, >=, > relational operations; host @ net (host is the part of the net) op *
--- * varchar ipaddr_print(addr, '%A/%P %M %B') - print by pattern function                 *
--- * ipaddr ipaddr_mask(a),ipaddr_bcast(a),ipaddr_net(a) functions (mask,bcast, start addr)*
--- * int4 ipaddr_len(a) - lenght of subnet; ipaddr_pref(a) - prefix length,                *
--- * int4 ipaddr_integer(a) - integer value; ipaddr ipaddr_compose(integer_addr,pref_len)  *
--- *                                                compose ipaddr from addr and mask      *
--- * '+' and '-' operators (ipaddr = ipaddr + integer),(ipaddr = ipaddr - integer) ops     *
--- *****************************************************************************************
--- *   R E A D    T H I S    T E X T   B E F O R E   E X I T I N G :                       *
--- *       Now you should execute ipi.sql to allow BTREE indexing on this class.           *
--- *****************************************************************************************
--- eof
diff --git a/contrib/ip_and_mac/ip_orig.c b/contrib/ip_and_mac/ip_orig.c
deleted file mode 100644 (file)
index 316e824..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- *     PostgreSQL type definitions for IP addresses.
- *
- *     $Id: ip_orig.c,v 1.1 1998/06/16 05:35:11 momjian Exp $
- */
-
-#include <stdio.h>
-
-#include <postgres.h>
-#include <utils/palloc.h>
-
-/*
- *     This is the internal storage format for IP addresses:
- */
-
-typedef struct ipaddr
-{
-       uint32          address;
-       int16           width;
-}                      ipaddr;
-
-/*
- *     Various forward declarations:
- */
-
-ipaddr    *ipaddr_in(char *str);
-char      *ipaddr_out(ipaddr * addr);
-
-bool           ipaddr_lt(ipaddr * a1, ipaddr * a2);
-bool           ipaddr_le(ipaddr * a1, ipaddr * a2);
-bool           ipaddr_eq(ipaddr * a1, ipaddr * a2);
-bool           ipaddr_ge(ipaddr * a1, ipaddr * a2);
-bool           ipaddr_gt(ipaddr * a1, ipaddr * a2);
-
-bool           ipaddr_ne(ipaddr * a1, ipaddr * a2);
-
-int4           ipaddr_cmp(ipaddr * a1, ipaddr * a2);
-
-bool           ipaddr_in_net(ipaddr * a1, ipaddr * a2);
-ipaddr    *ipaddr_mask(ipaddr * a);
-ipaddr    *ipaddr_bcast(ipaddr * a);
-
-/*
- *     Build a mask of a given width:
- */
-
-unsigned long
-build_mask(unsigned char bits)
-{
-       unsigned long mask = 0;
-       int                     i;
-
-       for (i = 0; i < bits; i++)
-               mask = (mask >> 1) | 0x80000000;
-       return mask;
-}
-
-/*
- *     IP address reader.      Note how the count returned by sscanf()
- *     is used to determine whether the mask size was specified.
- */
-
-ipaddr *
-ipaddr_in(char *str)
-{
-       int                     a,
-                               b,
-                               c,
-                               d,
-                               w;
-       ipaddr     *result;
-       int                     count;
-
-       if (strlen(str) > 0)
-       {
-
-               count = sscanf(str, "%d.%d.%d.%d/%d", &a, &b, &c, &d, &w);
-
-               if (count < 4)
-               {
-                       elog(ERROR, "ipaddr_in: error in parsing \"%s\"", str);
-                       return (NULL);
-               }
-
-               if (count == 4)
-                       w = 32;
-
-               if ((a < 0) || (a > 255) || (b < 0) || (b > 255) ||
-                       (c < 0) || (c > 255) || (d < 0) || (d > 255) ||
-                       (w < 0) || (w > 32))
-               {
-                       elog(ERROR, "ipaddr_in: illegal address \"%s\"", str);
-                       return (NULL);
-               }
-       }
-       else
-       {
-               a = b = c = d = w = 0;  /* special case for missing address */
-       }
-
-       result = (ipaddr *) palloc(sizeof(ipaddr));
-
-       result->address = (uint32) ((a << 24) | (b << 16) | (c << 8) | d);
-       result->address &= build_mask(w);
-       result->width = w;
-
-       return (result);
-}
-
-/*
- *     IP address output function.  Note mask size specification
- *     generated only for subnets, not for plain host addresses.
- */
-
-char *
-ipaddr_out(ipaddr * addr)
-{
-       char       *result;
-
-       if (addr == NULL)
-               return (NULL);
-
-       result = (char *) palloc(32);
-
-       if (addr->address > 0)
-       {
-               if (addr->width == 32)
-                       sprintf(result, "%d.%d.%d.%d",
-                                       (addr->address >> 24) & 0xff,
-                                       (addr->address >> 16) & 0xff,
-                                       (addr->address >> 8) & 0xff,
-                                       addr->address & 0xff);
-               else
-                       sprintf(result, "%d.%d.%d.%d/%d",
-                                       (addr->address >> 24) & 0xff,
-                                       (addr->address >> 16) & 0xff,
-                                       (addr->address >> 8) & 0xff,
-                                       addr->address & 0xff,
-                                       addr->width);
-       }
-       else
-       {
-               result[0] = 0;                  /* special case for missing address */
-       }
-       return (result);
-}
-
-/*
- *     Boolean tests for magnitude.
- */
-
-bool
-ipaddr_lt(ipaddr * a1, ipaddr * a2)
-{
-       return (a1->address < a2->address);
-};
-
-bool
-ipaddr_le(ipaddr * a1, ipaddr * a2)
-{
-       return (a1->address <= a2->address);
-};
-
-bool
-ipaddr_eq(ipaddr * a1, ipaddr * a2)
-{
-       return (a1->address == a2->address);
-};
-
-bool
-ipaddr_ge(ipaddr * a1, ipaddr * a2)
-{
-       return (a1->address >= a2->address);
-};
-
-bool
-ipaddr_gt(ipaddr * a1, ipaddr * a2)
-{
-       return (a1->address > a2->address);
-};
-
-bool
-ipaddr_ne(ipaddr * a1, ipaddr * a2)
-{
-       return (a1->address != a2->address);
-};
-
-/*
- *     Comparison function for sorting:
- */
-
-int4
-ipaddr_cmp(ipaddr * a1, ipaddr * a2)
-{
-       if (a1->address < a2->address)
-               return -1;
-       else if (a1->address > a2->address)
-               return 1;
-       else
-               return 0;
-}
-
-/*
- *     Test whether an address is within a given subnet:
- */
-
-bool
-ipaddr_in_net(ipaddr * a1, ipaddr * a2)
-{
-       uint32          maskbits;
-
-       if (a1->width < a2->width)
-               return FALSE;
-       if ((a1->width == 32) && (a2->width == 32))
-               return ipaddr_eq(a1, a2);
-       maskbits = build_mask(a2->width);
-       if ((a1->address & maskbits) == (a2->address & maskbits))
-               return TRUE;
-       return FALSE;
-}
-
-/*
- *     Pick out just the mask of a network:
- */
-
-ipaddr *
-ipaddr_mask(ipaddr * a)
-{
-       ipaddr     *result;
-
-       result = (ipaddr *) palloc(sizeof(ipaddr));
-       result->address = build_mask(a->width);
-       result->width = 32;
-
-       return result;
-}
-
-/*
- *     Return the broadcast address of a network:
- */
-
-ipaddr *
-ipaddr_bcast(ipaddr * a)
-{
-       ipaddr     *result;
-
-       result = (ipaddr *) palloc(sizeof(ipaddr));
-       result->address = a->address;
-       result->address |= (build_mask(32 - a->width) >> a->width);
-       result->width = 32;
-
-       return result;
-}
-
-/*
- *     eof
- */
diff --git a/contrib/ip_and_mac/ipaddr.html b/contrib/ip_and_mac/ipaddr.html
deleted file mode 100644 (file)
index 8b7d3eb..0000000
+++ /dev/null
@@ -1,488 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<HTML>
-<HEAD>
-   <TITLE></TITLE>
-   <META NAME="GENERATOR" CONTENT="Mozilla/3.04Gold (X11; I; FreeBSD 2.2.5-RELEASE i386) [Netscape]">
-</HEAD>
-<BODY>
-
-<H2>New object class for the IP ADDRESSES manipulations.</H2>
-
-<H3>1. Description:</H3>
-
-<UL>
-<P>Type name: <B>ipaddr<BR>
-</B>Data lenght: <B>6 bytes<BR>
-</B>Data context: <B>ip address and prefix length</B></P>
-</UL>
-
-<H3><B>2. How to install:</B></H3>
-
-<UL>
-<P>Use script <B>ip.sql </B>to add new type, new functions and operators
-to the data base.</P>
-
-<P>Use script <B>ipi.sql </B>to add new type and new operator class ipaddr_ops
-to the index system and allow indexing by this new type (with search by
-'<B>&gt;</B>', '<B>&gt;=</B>', '<B>&lt;</B>', '<B>&lt;=</B>', '<B>=</B>'
-boolean operators).</P>
-
-<P>Use scripts '<B>test1.sql'</B> and '<B>test2.sql'</B> (edit second script
-first) to check if indexing work properly.</P>
-</UL>
-
-<H3>3. Input / output formsts.</H3>
-
-<P>New type stores IP address and IP prefix in the single data attribute.
-To input data, you should use the form</P>
-
-<UL>
-<P><B><I>DDD</I>.<I>DDD</I>.<I>DDD</I>.<I>DDD</I>/<I>P</I>P</B></P>
-</UL>
-
-<P>for the address <B>DDD.DDD.DDD.DDD</B> and prefix <B>PP</B> (prefix
-is len from 0 (for 0.0.0.0) to 32 (for 255.255.255.255)). You can miss
-/PP n two cases:</P>
-
-<UL>
-<LI>You enter host address (this means /32 prefix) and this is not the
-address of the natural class A, B or C network.</LI>
-
-<LI>You enter natural class A, B, C network with the /8, /16 and /24 prefix.</LI>
-</UL>
-
-<P>For example, <B>193.124.23.0</B> should be read as '<B>193.124.23.0/24</B>'
-network, and '<B>193.124.23.1</B>' should be read as <B>/32 </B>host address.
-To enter interface address <B>193.124.23.6/24</B>, you should use exact
-form '<B>193.124.23.6/24'</B>.</P>
-
-<P>The address '0.0.0.0' means '0.0.0.0/0', this is <B>default</B> in terms
-of routers.</P>
-
-<P><B>ipaddr</B> type data are printed just in the same form (to allow
-input/output compatibility) - <B>193.124.23.0/24</B> should be printed
-as '<B>193.124.23.0</B>' and '<B>193.124.23.1/32</B>' should be printed
-as '<B>193.124.23.1</B>'.</P>
-
-<P>There is special function to convert ipaddr data into string by the
-format:</P>
-
-<UL>
-<P>char ipaddr_print(ipaddr,format)</P>
-</UL>
-
-<P>format consist of plain text and %C special characters:</P>
-
-<UL>
-<P><B>%A</B> - address in form ddd.ddd.ddd.ddd,<BR>
-<B>%M </B>- network mask in form ddd.ddd.ddd.ddd,<BR>
-<B>%B </B>- negated mask ('0.0.0.7' for '/29' prefix, for example),<BR>
-<B>%P</B> - prefix (withouth '/' delimiter).</P>
-</UL>
-
-<H3>4. Operators.</H3>
-
-<TABLE ALIGN=ABSCENTER BORDER=2 CELLSPACING=0 CELLPADDING=0 >
-<TR>
-<TD>Left argument<BR>
-A1</TD>
-
-<TD>Op</TD>
-
-<TD>Right argument<BR>
-A2</TD>
-
-<TD>Result<BR>
-R</TD>
-
-<TD>Description</TD>
-</TR>
-
-<TR>
-<TD>ipaddr</TD>
-
-<TD>&lt;</TD>
-
-<TD>ipaddr</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare addresses, if they are equal, compare prefixes,</TD>
-</TR>
-
-<TR>
-<TD>ipaddr</TD>
-
-<TD>&lt;=</TD>
-
-<TD>ipaddr</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare addresses, if they are equal, compare prefixes,</TD>
-</TR>
-
-<TR>
-<TD>ipaddr</TD>
-
-<TD>=</TD>
-
-<TD>ipaddr</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare addresses, if they are equal, compare prefixes,</TD>
-</TR>
-
-<TR>
-<TD>ipaddr</TD>
-
-<TD>&gt;=</TD>
-
-<TD>ipaddr</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare addresses, if they are equal, compare prefixes,</TD>
-</TR>
-
-<TR>
-<TD>ipaddr</TD>
-
-<TD>&gt;</TD>
-
-<TD>ipaddr</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare addresses, if they are equal, compare prefixes,</TD>
-</TR>
-
-<TR>
-<TD>ipaddr</TD>
-
-<TD>&lt;&gt;</TD>
-
-<TD>ipaddr</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare addresses, if they are equal, compare prefixes,</TD>
-</TR>
-
-<TR>
-<TD>ipaddr</TD>
-
-<TD>@</TD>
-
-<TD>ipaddr</TD>
-
-<TD>boolean</TD>
-
-<TD>True if A1 is the part of network (subnetwork) A2 or if A1 = A2</TD>
-</TR>
-
-<TR>
-<TD>ipaddr</TD>
-
-<TD>+</TD>
-
-<TD>int4</TD>
-
-<TD>ipaddr</TD>
-
-<TD>Increase address A1 on A2 value (A2 is integer).</TD>
-</TR>
-
-<TR>
-<TD>ipaddr </TD>
-
-<TD>-</TD>
-
-<TD>int4</TD>
-
-<TD>ipaddr</TD>
-
-<TD>Decrease address A1 on A2.</TD>
-</TR>
-</TABLE>
-
-<H3>5. Functions.</H3>
-
-<P>There is a lot of functions defined for new ipaddr data type. Some of
-them are duplicated by operators described above, some are not. </P>
-
-<TABLE ALIGN=ABSCENTER BORDER=2 CELLSPACING=0 CELLPADDING=0 >
-<TR>
-<TD>Function(arguments)</TD>
-
-<TD>Function type</TD>
-
-<TD>Description</TD>
-
-<TD>Operator</TD>
-</TR>
-
-<TR>
-<TD>ipaddr_print(ipaddr, text)</TD>
-
-<TD>text</TD>
-
-<TD>Converts ipaddr to the text string by format from the second argument.
-Format can contain %A - address, %M - mask, %B - reversed mask, %P - prefix,
-and any other characters.</TD>
-
-<TD></TD>
-</TR>
-
-<TR>
-<TD>ipaddr_lt(ipaddr, ipaddr)</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare by '&lt;'</TD>
-
-<TD>&lt;</TD>
-</TR>
-
-<TR>
-<TD>ipaddr_le(ipaddr,ipaddr)</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare by '&lt;='</TD>
-
-<TD>&lt;=</TD>
-</TR>
-
-<TR>
-<TD>ipaddr_eq(ipaddr, ipaddr)</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare by '='</TD>
-
-<TD>=</TD>
-</TR>
-
-<TR>
-<TD>ipaddr_ne(ipaddr, ipaddr)</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare by '&lt;&gt;'</TD>
-
-<TD>&lt;&gt;</TD>
-</TR>
-
-<TR>
-<TD>ipaddr_ge(ipaddr, ipaddr)</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare by '&gt;='</TD>
-
-<TD>&gt;=</TD>
-</TR>
-
-<TR>
-<TD>ipaddr_gt(ipaddr, ipaddr)</TD>
-
-<TD>boolean</TD>
-
-<TD>Compare by '&gt;'</TD>
-
-<TD>&gt;</TD>
-</TR>
-
-<TR>
-<TD>ipaddr_in_net(ipaddr, ipaddr)</TD>
-
-<TD>boolean</TD>
-
-<TD><B>True</B> if fisrt argument is the host or subnetwork of the second
-argument (first address is equal or included into the second one)</TD>
-
-<TD>@</TD>
-</TR>
-
-<TR>
-<TD>ipaddr_net(ipaddr)</TD>
-
-<TD>ipaddr</TD>
-
-<TD>Return the network (with the 0 in host bits) for the argument; for
-example ipaddr_net('193.124.23.1/24') = '193.124.23.0';</TD>
-
-<TD></TD>
-</TR>
-
-<TR>
-<TD>ipaddr_bcast(ipaddr)</TD>
-
-<TD>ipaddr</TD>
-
-<TD>Return broadcast address (with the /32 prefix) for the network described
-by argument.</TD>
-
-<TD></TD>
-</TR>
-
-<TR>
-<TD>ipaddr_is_net(ipaddr)</TD>
-
-<TD>boolean</TD>
-
-<TD><B>True</B> if ipaddr is network address; <B>false</B> if its' the
-host in the network. For the /32 addresses, returns <B>false</B>.</TD>
-
-<TD></TD>
-</TR>
-
-<TR>
-<TD>ipaddr_mask(ipaddr)</TD>
-
-<TD>ipaddr</TD>
-
-<TD>Return netmask (with /32 prefix) for the network.</TD>
-
-<TD></TD>
-</TR>
-
-<TR>
-<TD>ipaddr_prefix(ipaddr)</TD>
-
-<TD>int4</TD>
-
-<TD>Return the prefix size (from 0 to 32).</TD>
-
-<TD></TD>
-</TR>
-
-<TR>
-<TD>ipaddr_len(ipaddr)</TD>
-
-<TD>int4</TD>
-
-<TD>Return the number of addresses in the particular network (for example,
-256 for /24 prefix).</TD>
-
-<TD></TD>
-</TR>
-
-<TR>
-<TD>ipaddr_integer(ipaddr)</TD>
-
-<TD>int4</TD>
-
-<TD>Return IP address (withouth the prefix) as integer.</TD>
-
-<TD></TD>
-</TR>
-
-<TR>
-<TD>ipaddr_compose(int4,int4)</TD>
-
-<TD>ipaddr</TD>
-
-<TD>Compose ipaddr object from ip address (first argument) and prefix lenght
-(second argument). ipaddr_compose(ipaddr_integer(a),ipaddr_prefix(a)) =
-a.</TD>
-
-<TD></TD>
-</TR>
-
-<TR>
-<TD>ipaddr_plus(ipaddr, int4)</TD>
-
-<TD>ipaddr</TD>
-
-<TD>Operator PLUS (addres increased, prefix does not changed)</TD>
-
-<TD>+</TD>
-</TR>
-
-<TR>
-<TD>ipaddr_minus(ipaddr, int4)</TD>
-
-<TD>ipaddr</TD>
-
-<TD>Operator MINUS (address decreased, prefix does not changed).</TD>
-
-<TD>-</TD>
-</TR>
-
-<TR>
-<TD>ipaddr_cmp(ipaddr, ipaddr)</TD>
-
-<TD>int4</TD>
-
-<TD>Compare it's arguments and return -1, 0 or +1.</TD>
-
-<TD></TD>
-</TR>
-</TABLE>
-
-<H3>5. Usage.</H3>
-
-<P>New type opens many interesting futures for the ip routing or ip accounting
-networks. For example, you can search all interfaces connected to the same
-phisical network by comparing ipaddr_net(interface_address) /if you store
-address as address/prefix pair in the single attribute, and so on.</P>
-
-<P>Unfortunately, I had not time (and was not too familiar with RTree ideas
-used in Postgres) to check if it's possible to use RTree indexing for the
-fast routing lookups by data base. It's important task because usial usage
-of this future is _determine the nearest network the particular address
-contain to, and link the accounting record to this network_. And so on.</P>
-
-<P>Write any questions or wishes to me by e-mail. This is BETA version
-of this package for now, because we are building our IP routing data base
-just now and did not tested all this fucntions under heavy conditions;
-through I hope this functions are too simple for the hidden bugs, and they
-was tested carefully at the simple tests.</P>
-
-<H3>6. Installation.</H3>
-
-<OL>
-<LI>Translate shared library ip.so:<BR>
-make</LI>
-
-<LI>Install shared library to the proper place (/usr/local/pgsql/contrib/ip_and_macs)<BR>
-make install<BR>
-(in case if your system is not FreeBSD, it can be nessesary modify 'Makefile'
-before).</LI>
-
-<LI>Public to the accessible place scripts ip.sql (installation of data
-type), ipi.sql (describing of this data type for the proper indexing),
-test1.sql, test2.sql, test.DATA (test and data). Modify test1.sql in accordance
-to real location of the data files.</LI>
-
-<LI>To add new data type into your data base, exec scripts in this data
-base:<BR>
-psql DATA_BASE<BR>
-\i ip.sql -- change this to the real location<BR>
-\i ipi.sql -- change this to the real location</LI>
-
-<LI>To test this data type, exec test1.sql and test2.sql SQL scripts.</LI>
-</OL>
-
-<H3>7. Download.</H3>
-
-<P>You can download this data type from <B>http://relcom.EU.net/ip_class.tar.gz</B></P>
-
-<H3><BR>
-</H3>
-
-<P>
-<HR WIDTH="100%"></P>
-
-<P>Aleksei Roudnev, The Network Operation Centre, Relcom Network; Moscow,
-Russia.</P>
-
-<UL><B></B></UL>
-
-<UL></UL>
-
-</BODY>
-</HTML>
diff --git a/contrib/ip_and_mac/ipi.sql b/contrib/ip_and_mac/ipi.sql
deleted file mode 100644 (file)
index 66dc1e3..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-begin;
-select pgam.oid from pg_am  pgam
-where amname = 'btree';
---
--- Temporary oper table
---
--- drop table tmp_op;
-create table tmp_op ( oprname name, opi int2);
---
--- Fill in this table
---
-insert into tmp_op values('<','1');
-insert into tmp_op values('<=','2');
-insert into tmp_op values('=','3');
-insert into tmp_op values('>=','4');
-insert into tmp_op values('>','5');
-select * from tmp_op;
---
--- Add record to the pg_opclass
---
-DELETE FROM pg_opclass WHERE opcname = 'ipaddr_ops';
-INSERT INTO pg_opclass (opcname,opcdeftype)
-select 'ipaddr_ops',oid from pg_type where typname = 'ipaddr';
---
--- And determine oid
---
-SELECT opc.oid,opc.opcname
- FROM pg_opclass opc
- WHERE opc.opcname = 'ipaddr_ops';
---
-SELECT o.oid AS opoid, o.oprname
-INTO TABLE ipaddr_tmp
-FROM pg_operator o, pg_type t
-WHERE o.oprleft = t.oid and o.oprright = t.oid and t.typname = 'ipaddr';
-SELECT * FROM ipaddr_tmp;
---
-INSERT INTO pg_amop (amopid, amopclaid, amopopr, amopstrategy, amopselect, amopnpages)
-SELECT am.oid,opcl.oid,c.opoid,t.opi,'btreesel'::regproc, 'btreenpage'::regproc
-FROM pg_am am, pg_opclass opcl, ipaddr_tmp c, tmp_op t
-WHERE t.oprname = c.oprname
-      and amname = 'btree'
-      and opcname = 'ipaddr_ops';
---
-SELECT prc.oid, prc.proname FROM pg_proc prc
-WHERE prc.proname = 'ipaddr_cmp';
---
-INSERT INTO pg_amproc (amid, amopclaid, amproc, amprocnum)
-SELECT pgam.oid, opc.oid,prc.oid,'1'::int2
-FROM  pg_am  pgam,
-      pg_opclass opc,
-      pg_proc prc
-WHERE prc.proname = 'ipaddr_cmp'
- and  pgam.amname = 'btree'
- and  opc.opcname = 'ipaddr_ops';
-
-drop table tmp_op;
-DROP TABLE ipaddr_tmp;
-COMMIT;
-
--- *****************************************************************
--- * Now you should test this by running   test1.sql and test2.sql *
--- * In test2, be sure the 'explain' operator show you             *
--- * search by index in the last line of output                    *
--- *****************************************************************
diff --git a/contrib/ip_and_mac/mac.c b/contrib/ip_and_mac/mac.c
deleted file mode 100644 (file)
index f4f5fff..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- *     PostgreSQL type definitions for MAC addresses.
- *
- *     $Id: mac.c,v 1.3 1998/02/26 04:27:44 momjian Exp $
- */
-
-#include <stdio.h>
-
-#include <postgres.h>
-#include <utils/palloc.h>
-
-#include "mac.h"
-
-/*
- *     This is the internal storage format for MAC addresses:
- */
-
-typedef struct macaddr
-{
-       unsigned char a;
-       unsigned char b;
-       unsigned char c;
-       unsigned char d;
-       unsigned char e;
-       unsigned char f;
-}                      macaddr;
-
-/*
- *     Various forward declarations:
- */
-
-macaddr    *macaddr_in(char *str);
-char      *macaddr_out(macaddr * addr);
-
-bool           macaddr_lt(macaddr * a1, macaddr * a2);
-bool           macaddr_le(macaddr * a1, macaddr * a2);
-bool           macaddr_eq(macaddr * a1, macaddr * a2);
-bool           macaddr_ge(macaddr * a1, macaddr * a2);
-bool           macaddr_gt(macaddr * a1, macaddr * a2);
-
-bool           macaddr_ne(macaddr * a1, macaddr * a2);
-
-int4           macaddr_cmp(macaddr * a1, macaddr * a2);
-
-text      *macaddr_manuf(macaddr * addr);
-
-/*
- *     Utility macros used for sorting and comparing:
- */
-
-#define hibits(addr) \
-  ((unsigned long)((addr->a<<16)|(addr->b<<8)|(addr->c)))
-
-#define lobits(addr) \
-  ((unsigned long)((addr->c<<16)|(addr->e<<8)|(addr->f)))
-
-/*
- *     MAC address reader.  Accepts several common notations.
- */
-
-macaddr    *
-macaddr_in(char *str)
-{
-       int                     a,
-                               b,
-                               c,
-                               d,
-                               e,
-                               f;
-       macaddr    *result;
-       int                     count;
-
-       if (strlen(str) > 0)
-       {
-
-               count = sscanf(str, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f);
-               if (count != 6)
-                       count = sscanf(str, "%x-%x-%x-%x-%x-%x", &a, &b, &c, &d, &e, &f);
-               if (count != 6)
-                       count = sscanf(str, "%2x%2x%2x:%2x%2x%2x", &a, &b, &c, &d, &e, &f);
-               if (count != 6)
-                       count = sscanf(str, "%2x%2x%2x-%2x%2x%2x", &a, &b, &c, &d, &e, &f);
-               if (count != 6)
-                       count = sscanf(str, "%2x%2x.%2x%2x.%2x%2x", &a, &b, &c, &d, &e, &f);
-
-               if (count != 6)
-               {
-                       elog(ERROR, "macaddr_in: error in parsing \"%s\"", str);
-                       return (NULL);
-               }
-
-               if ((a < 0) || (a > 255) || (b < 0) || (b > 255) ||
-                       (c < 0) || (c > 255) || (d < 0) || (d > 255) ||
-                       (e < 0) || (e > 255) || (f < 0) || (f > 255))
-               {
-                       elog(ERROR, "macaddr_in: illegal address \"%s\"", str);
-                       return (NULL);
-               }
-       }
-       else
-       {
-               a = b = c = d = e = f = 0;              /* special case for missing
-                                                                                * address */
-       }
-
-       result = (macaddr *) palloc(sizeof(macaddr));
-
-       result->a = a;
-       result->b = b;
-       result->c = c;
-       result->d = d;
-       result->e = e;
-       result->f = f;
-
-       return (result);
-}
-
-/*
- *     MAC address output function.  Fixed format.
- */
-
-char *
-macaddr_out(macaddr * addr)
-{
-       char       *result;
-
-       if (addr == NULL)
-               return (NULL);
-
-       result = (char *) palloc(32);
-
-       if ((hibits(addr) > 0) || (lobits(addr) > 0))
-       {
-               sprintf(result, "%02x:%02x:%02x:%02x:%02x:%02x",
-                               addr->a, addr->b, addr->c, addr->d, addr->e, addr->f);
-       }
-       else
-       {
-               result[0] = 0;                  /* special case for missing address */
-       }
-       return (result);
-}
-
-/*
- *     Boolean tests.
- */
-
-bool
-macaddr_lt(macaddr * a1, macaddr * a2)
-{
-       return ((hibits(a1) < hibits(a2)) ||
-                       ((hibits(a1) == hibits(a2)) && lobits(a1) < lobits(a2)));
-};
-
-bool
-macaddr_le(macaddr * a1, macaddr * a2)
-{
-       return ((hibits(a1) < hibits(a2)) ||
-                       ((hibits(a1) == hibits(a2)) && lobits(a1) <= lobits(a2)));
-};
-
-bool
-macaddr_eq(macaddr * a1, macaddr * a2)
-{
-       return ((hibits(a1) == hibits(a2)) && (lobits(a1) == lobits(a2)));
-};
-
-bool
-macaddr_ge(macaddr * a1, macaddr * a2)
-{
-       return ((hibits(a1) > hibits(a2)) ||
-                       ((hibits(a1) == hibits(a2)) && lobits(a1) >= lobits(a2)));
-};
-
-bool
-macaddr_gt(macaddr * a1, macaddr * a2)
-{
-       return ((hibits(a1) > hibits(a2)) ||
-                       ((hibits(a1) == hibits(a2)) && lobits(a1) > lobits(a2)));
-};
-
-bool
-macaddr_ne(macaddr * a1, macaddr * a2)
-{
-       return ((hibits(a1) != hibits(a2)) || (lobits(a1) != lobits(a2)));
-};
-
-/*
- *     Comparison function for sorting:
- */
-
-int4
-macaddr_cmp(macaddr * a1, macaddr * a2)
-{
-       if (hibits(a1) < hibits(a2))
-               return -1;
-       else if (hibits(a1) > hibits(a2))
-               return 1;
-       else if (lobits(a1) < lobits(a2))
-               return -1;
-       else if (lobits(a1) > lobits(a2))
-               return 1;
-       else
-               return 0;
-}
-
-/*
- *     The special manufacturer fetching function.  See "mac.h".
- */
-
-text *
-macaddr_manuf(macaddr * addr)
-{
-       manufacturer *manuf;
-       int                     length;
-       text       *result;
-
-       for (manuf = manufacturers; manuf->name != NULL; manuf++)
-       {
-               if ((manuf->a == addr->a) &&
-                       (manuf->b == addr->b) &&
-                       (manuf->c == addr->c))
-                       break;
-       }
-       if (manuf->name == NULL)
-       {
-               result = palloc(VARHDRSZ + 1);
-               memset(result, 0, VARHDRSZ + 1);
-               VARSIZE(result) = VARHDRSZ + 1;
-       }
-       else
-       {
-               length = strlen(manuf->name) + 1;
-               result = palloc(length + VARHDRSZ);
-               memset(result, 0, length + VARHDRSZ);
-               VARSIZE(result) = length + VARHDRSZ;
-               memcpy(VARDATA(result), manuf->name, length);
-       }
-       return result;
-}
-
-/*
- *     eof
- */
diff --git a/contrib/ip_and_mac/mac.h b/contrib/ip_and_mac/mac.h
deleted file mode 100644 (file)
index 954dc05..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- *     PostgreSQL type definitions for MAC addresses.
- *
- *     $Id: mac.h,v 1.3 1998/02/26 04:27:50 momjian Exp $
- */
-
-typedef struct manufacturer
-{
-       unsigned char a;
-       unsigned char b;
-       unsigned char c;
-       char       *name;
-}                      manufacturer;
-
-manufacturer manufacturers[] = {
-       {0x00, 0x00, 0x0C, "Cisco"},
-       {0x00, 0x00, 0x0E, "Fujitsu"},
-       {0x00, 0x00, 0x0F, "NeXT"},
-       {0x00, 0x00, 0x10, "Sytek"},
-       {0x00, 0x00, 0x1D, "Cabletron"},
-       {0x00, 0x00, 0x20, "DIAB"},
-       {0x00, 0x00, 0x22, "Visual Technology"},
-       {0x00, 0x00, 0x2A, "TRW"},
-       {0x00, 0x00, 0x32, "GPT Limited"},
-       {0x00, 0x00, 0x5A, "S & Koch"},
-       {0x00, 0x00, 0x5E, "IANA"},
-       {0x00, 0x00, 0x65, "Network General"},
-       {0x00, 0x00, 0x6B, "MIPS"},
-       {0x00, 0x00, 0x77, "MIPS"},
-       {0x00, 0x00, 0x7A, "Ardent"},
-       {0x00, 0x00, 0x89, "Cayman Systems"},
-       {0x00, 0x00, 0x93, "Proteon"},
-       {0x00, 0x00, 0x9F, "Ameristar Technology"},
-       {0x00, 0x00, 0xA2, "Wellfleet"},
-       {0x00, 0x00, 0xA3, "Network Application Technology"},
-       {0x00, 0x00, 0xA6, "Network General"},
-       {0x00, 0x00, 0xA7, "NCD"},
-       {0x00, 0x00, 0xA9, "Network Systems"},
-       {0x00, 0x00, 0xAA, "Xerox"},
-       {0x00, 0x00, 0xB3, "CIMLinc"},
-       {0x00, 0x00, 0xB7, "Dove Fastnet"},
-       {0x00, 0x00, 0xBC, "Allen-Bradley"},
-       {0x00, 0x00, 0xC0, "Western Digital"},
-       {0x00, 0x00, 0xC5, "Farallon"},
-       {0x00, 0x00, 0xC6, "Hewlett-Packard"},
-       {0x00, 0x00, 0xC8, "Altos"},
-       {0x00, 0x00, 0xC9, "Emulex"},
-       {0x00, 0x00, 0xD7, "Dartmouth College"},
-       {0x00, 0x00, 0xD8, "3Com (?)"},
-       {0x00, 0x00, 0xDD, "Gould"},
-       {0x00, 0x00, 0xDE, "Unigraph"},
-       {0x00, 0x00, 0xE2, "Acer Counterpoint"},
-       {0x00, 0x00, 0xEF, "Alantec"},
-       {0x00, 0x00, 0xFD, "High Level Hardware"},
-       {0x00, 0x01, 0x02, "BBN internal usage"},
-       {0x00, 0x20, 0xAF, "3Com"},
-       {0x00, 0x17, 0x00, "Kabel"},
-       {0x00, 0x80, 0x64, "Wyse Technology"},
-       {0x00, 0x80, 0x2B, "IMAC (?)"},
-       {0x00, 0x80, 0x2D, "Xylogics, Inc."},
-       {0x00, 0x80, 0x8C, "Frontier Software Development"},
-       {0x00, 0x80, 0xC2, "IEEE 802.1 Committee"},
-       {0x00, 0x80, 0xD3, "Shiva"},
-       {0x00, 0xAA, 0x00, "Intel"},
-       {0x00, 0xDD, 0x00, "Ungermann-Bass"},
-       {0x00, 0xDD, 0x01, "Ungermann-Bass"},
-       {0x02, 0x07, 0x01, "Racal InterLan"},
-       {0x02, 0x04, 0x06, "BBN internal usage"},
-       {0x02, 0x60, 0x86, "Satelcom MegaPac"},
-       {0x02, 0x60, 0x8C, "3Com"},
-       {0x02, 0xCF, 0x1F, "CMC"},
-       {0x08, 0x00, 0x02, "3Com"},
-       {0x08, 0x00, 0x03, "ACC"},
-       {0x08, 0x00, 0x05, "Symbolics"},
-       {0x08, 0x00, 0x08, "BBN"},
-       {0x08, 0x00, 0x09, "Hewlett-Packard"},
-       {0x08, 0x00, 0x0A, "Nestar Systems"},
-       {0x08, 0x00, 0x0B, "Unisys"},
-       {0x08, 0x00, 0x11, "Tektronix"},
-       {0x08, 0x00, 0x14, "Excelan"},
-       {0x08, 0x00, 0x17, "NSC"},
-       {0x08, 0x00, 0x1A, "Data General"},
-       {0x08, 0x00, 0x1B, "Data General"},
-       {0x08, 0x00, 0x1E, "Apollo"},
-       {0x08, 0x00, 0x20, "Sun"},
-       {0x08, 0x00, 0x22, "NBI"},
-       {0x08, 0x00, 0x25, "CDC"},
-       {0x08, 0x00, 0x26, "Norsk Data"},
-       {0x08, 0x00, 0x27, "PCS Computer Systems GmbH"},
-       {0x08, 0x00, 0x28, "Texas Instruments"},
-       {0x08, 0x00, 0x2B, "DEC"},
-       {0x08, 0x00, 0x2E, "Metaphor"},
-       {0x08, 0x00, 0x2F, "Prime Computer"},
-       {0x08, 0x00, 0x36, "Intergraph"},
-       {0x08, 0x00, 0x37, "Fujitsu-Xerox"},
-       {0x08, 0x00, 0x38, "Bull"},
-       {0x08, 0x00, 0x39, "Spider Systems"},
-       {0x08, 0x00, 0x41, "DCA Digital Comm. Assoc."},
-       {0x08, 0x00, 0x45, "Xylogics (?)"},
-       {0x08, 0x00, 0x46, "Sony"},
-       {0x08, 0x00, 0x47, "Sequent"},
-       {0x08, 0x00, 0x49, "Univation"},
-       {0x08, 0x00, 0x4C, "Encore"},
-       {0x08, 0x00, 0x4E, "BICC"},
-       {0x08, 0x00, 0x56, "Stanford University"},
-       {0x08, 0x00, 0x58, "DECsystem 20 (?)"},
-       {0x08, 0x00, 0x5A, "IBM"},
-       {0x08, 0x00, 0x67, "Comdesign"},
-       {0x08, 0x00, 0x68, "Ridge"},
-       {0x08, 0x00, 0x69, "Silicon Graphics"},
-       {0x08, 0x00, 0x6E, "Concurrent"},
-       {0x08, 0x00, 0x75, "DDE"},
-       {0x08, 0x00, 0x7C, "Vitalink"},
-       {0x08, 0x00, 0x80, "XIOS"},
-       {0x08, 0x00, 0x86, "Imagen/QMS"},
-       {0x08, 0x00, 0x87, "Xyplex"},
-       {0x08, 0x00, 0x89, "Kinetics"},
-       {0x08, 0x00, 0x8B, "Pyramid"},
-       {0x08, 0x00, 0x8D, "XyVision"},
-       {0x08, 0x00, 0x90, "Retix Inc"},
-       {0x48, 0x44, 0x53, "HDS (?)"},
-       {0x80, 0x00, 0x10, "AT&T"},
-       {0xAA, 0x00, 0x00, "DEC"},
-       {0xAA, 0x00, 0x01, "DEC"},
-       {0xAA, 0x00, 0x02, "DEC"},
-       {0xAA, 0x00, 0x03, "DEC"},
-       {0xAA, 0x00, 0x04, "DEC"},
-       {0x00, 0x00, 0x00, NULL}
-};
-
-/*
- *     eof
- */
diff --git a/contrib/ip_and_mac/mac.sql b/contrib/ip_and_mac/mac.sql
deleted file mode 100644 (file)
index e0f4d72..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
---
---     PostgreSQL code for MAC addresses.
---
---     $Id: mac.sql,v 1.4 1998/06/16 05:35:11 momjian Exp $
---
-
-load '/usr/local/pgsql/contrib/ip_and_macs/mac.so';
-
---
---     Input and output functions and the type itself:
---
-
-create function macaddr_in(opaque)
-       returns opaque
-       as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
-       language 'c';
-
-create function macaddr_out(opaque)
-       returns opaque
-       as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
-       language 'c';
-
-create type macaddr (
-       internallength = 6,
-       externallength = variable,
-       input = macaddr_in,
-       output = macaddr_out
-);
-
---
---     The boolean tests:
---
-
-create function macaddr_lt(macaddr, macaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
-       language 'c';
-
-create function macaddr_le(macaddr, macaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
-       language 'c';
-
-create function macaddr_eq(macaddr, macaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
-       language 'c';
-
-create function macaddr_ge(macaddr, macaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
-       language 'c';
-
-create function macaddr_gt(macaddr, macaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
-       language 'c';
-
-create function macaddr_ne(macaddr, macaddr)
-       returns bool
-       as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
-       language 'c';
-
---
---     Now the operators.  Note how some of the parameters to some
---     of the 'create operator' commands are commented out.  This
---     is because they reference as yet undefined operators, and
---     will be implicitly defined when those are, further down.
---
-
-create operator < (
-       leftarg = macaddr,
-       rightarg = macaddr,
---     negator = >=,
-       procedure = macaddr_lt
-);
-
-create operator <= (
-       leftarg = macaddr,
-       rightarg = macaddr,
---     negator = >,
-       procedure = macaddr_le
-);
-
-create operator = (
-       leftarg = macaddr,
-       rightarg = macaddr,
-       commutator = =,
---     negator = <>,
-       procedure = macaddr_eq
-);
-
-create operator >= (
-       leftarg = macaddr,
-       rightarg = macaddr,
-       negator = <,
-       procedure = macaddr_ge
-);
-
-create operator > (
-       leftarg = macaddr,
-       rightarg = macaddr,
-       negator = <=,
-       procedure = macaddr_gt
-);
-
-create operator <> (
-       leftarg = macaddr,
-       rightarg = macaddr,
-       negator = =,
-       procedure = macaddr_ne
-);
-
---
---     Finally, the special manufacurer matching function:
---
-
-create function macaddr_manuf(macaddr)
-       returns text
-       as '/usr/local/pgsql/contrib/ip_and_macs/mac.so'
-       language 'c';
-
---
---     eof
---
diff --git a/contrib/ip_and_mac/t1.sql b/contrib/ip_and_mac/t1.sql
deleted file mode 100644 (file)
index 0ded14f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-insert into xx values('193.124.23.2','host2');
-insert into xx values('193.124.23.3','host3');
-insert into xx values('193.124.22.1','host4');
-insert into xx values('193.124.22.2','host5');
-insert into xx values('193.124.22.3','host6');
diff --git a/contrib/ip_and_mac/test.DATA b/contrib/ip_and_mac/test.DATA
deleted file mode 100644 (file)
index 1bce53b..0000000
+++ /dev/null
@@ -1,999 +0,0 @@
-193.125.80.35 193.232.202.80 2 880
-193.125.80.35 194.87.0.22 2 574
-194.87.42.38 195.16.106.31 262 10696
-204.62.245.169 193.125.24.10 14 833
-193.125.80.35 195.24.128.65 3 180
-193.125.80.35 195.54.2.1 2 630
-193.125.80.35 195.54.192.33 7 448
-194.87.42.38 195.16.106.22 14 736
-193.125.80.35 195.210.140.7 3 1068
-194.87.41.131 195.46.160.46 10 681
-194.87.37.2 194.135.213.244 66 9088
-194.87.36.193 195.9.53.1 8 464
-194.87.36.193 194.135.2.7 8 464
-194.87.36.1 195.24.224.1 2 716
-194.87.34.44 195.16.96.2 2 164
-194.87.31.230 195.46.160.92 10 757
-194.87.24.93 195.46.160.46 9 664
-194.87.24.93 195.16.104.35 8 598
-194.87.23.28 195.210.155.149 22 1249
-194.87.22.107 195.46.160.34 76 3630
-194.87.18.152 195.90.162.2 15 666
-194.87.18.152 195.90.128.107 1 66
-193.125.80.35 62.76.114.44 2 880
-194.87.16.174 195.46.160.120 17 2276
-204.62.245.168 194.226.45.36 8 444
-194.87.16.78 195.16.104.35 8 720
-194.87.16.61 195.16.96.22 29 1248
-194.87.16.39 194.220.215.66 324 25148
-194.87.16.10 195.128.133.65 57 4301
-194.87.16.10 194.135.176.121 237 18379
-193.125.80.38 194.84.69.5 21 1929
-193.125.80.38 212.46.1.30 40 3758
-204.62.245.168 144.206.160.32 8 450
-193.125.80.44 195.151.199.4 45 2520
-194.87.15.158 195.46.160.46 2 112
-193.125.80.60 193.232.127.78 2 880
-193.125.80.60 193.232.202.80 2 864
-194.87.15.138 195.16.110.7 2 112
-193.125.80.60 195.96.65.2 2 864
-194.87.15.138 193.124.110.130 2 112
-194.87.15.1 195.90.130.133 3 84
-193.125.80.144 212.46.4.3 311 21140
-193.125.80.163 194.84.132.222 261 110114
-193.125.80.163 194.87.12.50 582 38097
-193.125.80.163 194.87.13.2 34 2499
-194.87.14.221 195.46.165.215 5 382
-193.125.81.139 195.34.34.70 107 7799
-193.125.81.140 194.67.115.130 5 220
-204.62.245.167 195.222.130.72 9 475
-204.62.245.167 193.125.242.225 2 88
-194.87.14.221 195.46.163.47 117 99564
-193.125.81.146 194.87.5.3 12 672
-193.125.81.146 194.87.12.50 4 224
-193.125.81.146 194.87.13.2 5 280
-194.87.14.221 195.46.162.91 137 21211
-193.125.81.146 195.161.0.34 2 112
-193.125.81.146 195.218.135.39 2 112
-194.87.14.221 195.12.32.8 131 132002
-194.87.14.221 193.124.252.73 530 214220
-193.125.81.148 194.67.146.145 201 8040
-193.125.81.148 194.87.5.3 49 3140
-193.125.81.148 194.87.12.50 230 12526
-193.125.81.148 194.87.13.2 31 2042
-194.87.14.216 195.210.154.154 68 32028
-193.125.81.148 194.190.218.2 8 611
-193.125.81.148 195.161.0.34 17 1473
-193.125.81.148 195.218.135.39 245 16647
-193.125.81.152 193.193.192.2 215 14797
-193.125.81.152 194.87.13.2 12 748
-193.125.81.152 195.24.128.65 27 1896
-193.125.81.152 195.54.192.118 53 3209
-194.87.14.216 195.210.154.152 83 81270
-193.125.84.12 195.46.160.45 47 2373
-193.125.84.154 195.90.128.107 1 62
-193.125.84.154 195.90.140.2 1 62
-194.87.14.203 195.210.130.62 6 821
-194.87.14.152 195.46.160.69 12 2172
-193.125.86.4 195.19.32.1 176 89133
-194.87.14.73 195.90.162.2 41 42955
-194.87.14.53 195.46.162.75 149 138236
-194.87.14.51 195.210.190.19 19 10290
-194.87.14.6 195.46.163.31 22 24836
-193.125.90.34 194.87.161.7 2 208
-193.125.90.34 194.87.161.229 13 8867
-193.125.90.34 195.54.17.33 644 81839
-194.87.14.5 193.124.97.131 53 12784
-193.125.90.130 194.58.95.62 82 7119
-194.87.13.26 212.248.36.8 14 7757
-194.87.13.26 195.98.162.111 80 39391
-194.87.13.26 195.98.161.25 70 76902
-194.87.13.26 195.46.165.196 30 14838
-194.87.13.26 195.46.161.219 47 39327
-193.125.95.121 193.124.1.131 248 101051
-194.87.13.26 194.85.149.13 28 24599
-194.87.13.21 195.98.162.9 32 16101
-194.87.13.21 195.90.136.148 84 93861
-193.125.95.121 194.186.254.26 79 5470
-194.87.13.21 195.46.162.244 10 400
-194.87.13.21 195.12.32.182 96 53171
-194.87.13.20 212.248.36.8 14 6798
-194.87.13.20 212.20.8.250 358 438254
-194.87.13.20 195.222.130.242 4 550
-194.87.13.20 195.222.130.77 8 6753
-193.125.95.124 192.124.176.69 4 538
-193.125.95.124 193.124.5.54 2 126
-194.87.13.20 195.210.143.145 4 168
-193.125.95.124 193.124.110.129 21 2181
-193.125.95.124 193.124.148.81 2 310
-194.87.13.20 195.210.136.25 4 626
-193.125.95.124 194.67.2.97 3 382
-193.125.95.124 194.84.222.2 3 382
-194.87.13.20 195.208.94.133 115 122276
-194.87.13.20 195.182.129.11 15 17177
-194.87.13.20 195.170.195.70 14 14313
-204.62.245.167 193.124.97.135 9 472
-194.87.13.20 195.144.198.159 90 40576
-194.87.13.20 195.144.192.198 79 91293
-193.125.95.124 195.222.130.67 9 745
-194.87.13.20 195.128.144.246 14 12816
-194.87.13.20 195.128.140.71 17 15901
-194.87.13.20 195.128.140.3 44 47802
-194.87.13.20 195.128.132.20 25 27119
-194.87.13.20 195.128.128.98 28 15369
-194.87.13.20 195.98.162.188 2 3000
-193.125.98.254 194.190.170.19 26 1456
-193.125.98.254 195.72.225.204 73 4088
-204.62.245.166 195.9.80.194 2 88
-204.62.245.161 193.124.182.40 2 138
-204.62.132.32 193.124.97.131 3 618
-193.125.103.137 195.46.163.141 7 372
-194.87.13.20 195.98.162.170 4 628
-193.125.121.1 193.124.22.22 2 136
-193.125.121.121 194.85.157.200 790 31921
-193.125.125.253 193.124.22.65 80 5411
-193.125.127.42 193.124.22.65 18 1368
-193.125.127.42 194.190.170.19 1227 63804
-194.87.13.20 195.98.162.155 73 70166
-194.87.13.20 195.98.162.9 323 163018
-194.87.13.20 195.98.161.32 10 9756
-194.87.13.20 195.98.161.25 4 1208
-194.87.13.20 195.90.180.25 3 568
-194.87.13.20 195.90.162.2 4 738
-194.87.13.20 195.54.8.139 42 53309
-194.87.13.20 195.54.5.129 27 13705
-194.87.13.20 195.46.164.25 11 12641
-194.87.13.20 195.46.164.16 62 74088
-194.87.13.20 195.46.163.158 35 37649
-194.87.13.20 195.46.163.89 52 57716
-194.87.13.20 195.46.163.15 11 12641
-193.125.132.129 193.124.215.71 26 4734
-193.125.132.129 193.124.222.161 5 220
-194.87.13.20 195.46.162.196 13 12813
-194.87.13.20 195.46.162.173 30 36193
-194.87.13.20 195.46.161.242 69 82486
-194.87.13.20 195.46.161.210 15 13392
-194.87.13.20 195.46.161.209 43 39183
-193.125.132.129 194.190.211.25 2 80
-194.87.13.20 195.46.161.111 85 93111
-194.87.13.20 195.46.161.100 41 8909
-194.87.13.20 195.16.102.4 5 3716
-194.87.13.20 195.16.101.109 17 20273
-194.87.13.20 195.16.101.101 93 112303
-194.87.13.20 195.16.98.99 152 171268
-194.87.13.20 195.9.103.3 11 12641
-194.87.13.20 194.220.53.195 303 100520
-194.87.13.20 194.190.56.83 8 1096
-194.87.13.20 194.85.149.18 43 48875
-194.87.13.20 194.85.137.152 30 34921
-194.87.13.20 194.58.169.23 5 590
-194.87.13.20 194.58.92.67 10 1044
-194.87.13.20 194.58.72.102 34 31635
-194.87.13.20 194.58.47.81 4 172
-194.87.13.20 193.124.241.239 53 51597
-193.125.142.40 195.54.3.15 7 500
-193.125.142.40 195.90.183.40 1 40
-193.125.143.130 195.90.128.103 13 11141
-193.125.143.135 195.46.160.46 45 2957
-204.62.129.195 195.19.1.132 10 4438
-193.125.148.150 193.124.22.65 12 912
-194.87.13.20 193.124.121.65 4 2216
-194.87.13.20 193.124.114.33 8 1084
-194.87.13.16 195.98.162.134 259 254892
-194.87.13.16 195.46.165.162 292 145058
-194.87.13.16 195.46.162.200 51 42010
-194.87.13.16 195.46.160.69 97 45411
-194.87.13.16 193.124.97.35 74 81434
-194.87.13.15 212.20.1.95 11 10485
-194.87.13.15 195.210.136.135 16 15786
-194.87.13.15 195.210.131.39 6 3168
-193.125.152.1 147.45.130.1 2 326
-194.87.13.15 195.98.162.153 136 143332
-194.87.13.15 195.98.162.9 308 168069
-194.87.13.15 195.46.165.185 1183 633028
-194.87.13.15 195.46.165.166 2 104
-194.87.13.15 195.46.164.44 70 53112
-194.87.13.15 195.46.163.156 159 113967
-194.87.13.15 195.46.162.241 64 20483
-194.87.13.15 195.46.162.30 120 95284
-194.87.13.15 195.16.101.67 115 82325
-194.87.13.15 195.9.90.85 7 600
-194.87.13.15 194.135.176.88 92 7543
-193.125.152.1 193.124.5.54 382 18328
-193.125.152.1 193.124.22.22 271 246786
-193.125.152.1 193.124.22.65 58 3504
-193.125.152.1 193.124.22.68 12 1443
-193.125.152.1 193.124.22.69 535 50134
-193.125.152.1 193.124.22.70 10 1187
-193.125.152.1 193.124.22.71 430 57506
-193.125.152.1 193.124.22.72 57 7236
-193.125.152.1 193.124.22.73 12 1443
-193.125.152.1 193.124.22.74 9 1059
-193.125.152.1 193.124.22.75 237 33658
-193.125.152.1 193.124.22.77 266 37279
-193.125.152.1 193.124.22.81 2265 522913
-193.125.152.1 193.124.22.83 739 88013
-193.125.152.1 193.124.36.45 1639 813217
-193.125.152.1 193.124.57.65 219 74665
-194.87.13.15 194.135.2.7 75 27476
-194.87.13.15 193.124.252.73 254 110171
-193.125.152.1 193.124.182.41 4 160
-193.125.152.1 193.124.241.3 15 2284
-193.125.152.1 193.124.241.14 1 244
-193.125.152.1 193.124.241.18 3 636
-193.125.152.1 193.124.241.29 19 3767
-193.125.152.1 193.124.241.40 13 3140
-193.125.152.1 193.124.241.53 32 7802
-193.125.152.1 193.124.241.58 2 420
-193.125.152.1 193.124.241.75 1 244
-193.125.152.1 193.124.241.84 4 670
-193.125.152.1 193.124.241.123 16 3574
-193.125.152.1 193.124.241.154 2 524
-193.125.152.1 193.124.241.158 44 10519
-193.125.152.1 193.124.241.229 1 200
-193.125.152.1 193.124.241.239 22 4490
-193.125.152.1 193.124.241.249 6 1748
-193.125.152.1 193.125.65.235 321 13793
-193.125.152.1 193.125.80.35 2 476
-194.87.13.15 193.124.241.39 512 271010
-194.87.13.15 193.124.32.49 1119 1170153
-194.87.13.14 195.210.136.135 188 193578
-193.125.152.1 193.232.0.205 24 1555
-193.125.152.1 193.232.21.26 17 1138
-193.125.152.1 193.232.21.31 24 2206
-193.125.152.1 193.232.69.159 8 1176
-193.125.152.1 193.232.88.17 19 1387
-193.125.152.1 193.232.119.131 783 31804
-193.125.152.1 193.232.202.12 2 818
-193.125.152.1 193.233.86.14 11 660
-193.125.152.1 193.233.86.33 11 660
-193.125.152.1 193.233.208.3 3 738
-194.87.13.12 212.248.36.8 5 1763
-194.87.13.12 212.20.8.250 49 37420
-194.87.13.12 195.210.182.31 50 3544
-194.87.13.12 195.210.179.4 37 33062
-193.125.152.1 194.58.169.17 357 155601
-193.125.152.1 194.58.201.193 6 774
-193.125.152.1 194.58.230.92 8 1576
-193.125.152.1 194.58.230.110 1 60
-193.125.152.1 194.67.2.97 10 2760
-193.125.152.1 194.67.90.1 8 448
-194.87.13.12 195.210.154.48 37 13937
-194.87.13.12 195.210.130.50 20 2117
-193.125.152.1 194.84.23.125 16 1168
-193.125.152.1 194.84.41.68 298 127287
-193.125.152.1 194.84.42.17 16 1325
-193.125.152.1 194.84.96.2 44 10261
-193.125.152.1 194.84.204.222 1 112
-193.125.152.1 194.84.242.126 10 2178
-193.125.152.1 194.85.80.238 18 1178
-193.125.152.1 194.85.128.10 25 1375
-193.125.152.1 194.85.137.89 8 440
-194.87.13.12 195.208.94.133 33 20968
-193.125.152.1 194.85.224.33 28 1708
-193.125.152.1 194.85.224.34 26 1586
-193.125.152.1 194.87.0.20 12 873
-193.125.152.1 194.87.5.3 8 448
-193.125.152.1 194.87.5.21 2 518
-193.125.152.1 194.87.13.2 4 224
-193.125.152.1 194.87.44.1 1 146
-193.125.152.1 194.87.210.41 2 402
-194.87.13.12 195.182.129.11 23 15865
-194.87.13.12 195.170.195.70 63 44135
-194.87.13.12 195.144.192.198 31 6314
-193.125.152.1 194.117.64.34 20 1271
-193.125.152.1 194.135.34.19 13 2470
-193.125.152.1 194.135.34.85 12 2254
-193.125.152.1 194.135.34.136 6 866
-193.125.152.1 194.135.34.150 2 488
-193.125.152.1 194.135.34.159 1 467
-193.125.152.1 194.135.34.212 11 2560
-193.125.152.1 194.135.34.229 2 337
-193.125.152.1 194.135.34.233 4 680
-193.125.152.1 194.135.102.10 2 414
-193.125.152.1 194.135.178.74 7 1162
-193.125.152.1 194.154.93.80 2 284
-194.87.13.12 195.128.140.3 14 872
-193.125.152.1 194.190.218.2 2 518
-194.87.13.12 195.128.130.2 4 352
-194.87.13.12 195.98.162.155 75 60095
-194.87.13.12 195.98.162.78 98 64468
-193.125.152.1 194.220.36.1 37 2850
-193.125.152.1 194.220.146.79 2 522
-194.87.13.12 195.98.162.9 62 13543
-194.87.13.12 195.98.161.59 7 476
-194.87.13.12 195.98.161.32 12 865
-204.62.128.51 195.19.1.132 43 38029
-204.62.128.48 193.124.97.153 9 3356
-204.59.144.222 194.85.149.1 2 266
-193.125.152.1 195.5.128.130 2 512
-194.87.13.12 195.98.161.25 8 3438
-193.125.152.1 195.16.104.35 5 280
-193.125.152.1 195.34.19.108 2 312
-193.125.152.1 195.34.32.11 2 476
-193.125.152.1 195.34.41.33 9 504
-194.87.13.12 195.90.136.148 32 3564
-194.87.13.12 195.90.136.143 10 890
-193.125.152.1 195.46.160.2 8 448
-193.125.152.1 195.46.160.34 2 630
-193.125.152.1 195.54.193.9 18 1405
-193.125.152.1 195.91.133.77 4 1212
-193.125.152.1 195.98.55.1 18 1405
-193.125.152.1 195.133.94.129 23 1485
-193.125.152.1 195.138.67.91 8 544
-193.125.152.1 195.138.80.33 19 1245
-193.125.152.1 195.138.80.34 20 1308
-193.125.152.1 195.146.64.131 4 472
-193.125.152.1 195.161.8.6 19 1445
-193.125.152.1 195.161.8.159 42 3569
-194.87.13.12 195.54.8.139 74 6178
-193.125.152.1 195.208.141.38 2 512
-193.125.152.1 195.209.37.18 2 670
-193.125.152.1 195.209.39.133 8 1698
-194.87.13.12 195.46.165.250 2 80
-193.125.152.1 195.218.133.114 24 1905
-194.87.13.12 195.46.165.196 9 3478
-193.125.152.1 195.230.64.66 101 4508
-193.125.152.1 195.239.88.50 37 1480
-193.125.152.1 195.239.193.64 2 476
-193.125.152.1 195.239.210.2 2 500
-194.87.13.12 195.46.164.25 69 4776
-194.87.13.12 195.46.164.17 28 16790
-194.87.13.12 195.46.163.158 30 6337
-194.87.13.12 195.46.163.89 56 28328
-194.87.13.12 195.46.163.15 8 336
-194.87.13.12 195.46.162.213 4 160
-194.87.13.12 195.46.162.206 41 25676
-194.87.13.12 195.46.162.196 54 38487
-194.87.13.12 195.46.162.173 63 40346
-194.87.13.12 195.46.162.55 7 657
-194.87.13.12 195.46.162.31 5 200
-194.87.13.12 195.46.161.242 67 20130
-194.87.13.12 195.46.161.219 5 1831
-194.87.13.12 195.46.161.210 12 13389
-194.87.13.12 195.46.161.209 64 26136
-194.87.13.12 195.46.161.111 47 3947
-194.87.13.12 195.16.101.109 31 2924
-194.87.13.12 195.16.101.101 42 3051
-194.87.13.12 195.16.98.99 13 903
-194.87.13.12 195.9.103.3 74 5122
-194.87.13.12 194.220.215.111 75 5304
-194.87.13.12 194.220.215.110 22 2367
-194.87.13.12 194.220.215.66 6 539
-194.87.13.12 194.190.82.40 14 1558
-194.87.13.12 193.125.19.101 23 2074
-194.87.13.12 193.124.241.239 10 4274
-194.87.13.12 193.124.114.33 42 13726
-193.125.152.1 62.76.114.44 9 2780
-194.87.13.8 212.20.8.250 110 87859
-194.87.13.8 195.222.130.242 4 527
-194.87.13.8 195.210.182.31 9 1222
-194.87.13.8 195.210.179.4 14 15689
-194.87.13.8 195.210.154.48 13 1602
-194.87.13.8 195.210.136.135 163 171207
-194.87.13.8 195.210.130.50 8 6213
-194.87.13.8 195.210.128.65 6 408
-194.87.13.8 195.208.94.133 63 43061
-194.87.13.8 195.208.76.33 5 355
-194.87.13.8 195.208.67.19 400 446069
-194.87.13.8 195.208.64.146 50 39549
-194.87.13.8 195.208.64.144 12 12685
-194.87.13.8 195.182.129.11 16 18647
-194.87.13.8 195.170.195.70 14 2119
-194.87.13.8 195.146.70.100 49 27151
-194.87.13.8 195.144.198.159 12 1336
-194.87.13.8 195.144.192.198 16 2213
-194.87.13.8 195.128.140.71 15 6105
-194.87.13.8 195.128.140.3 8 821
-194.87.13.8 195.98.162.170 5 699
-194.87.13.8 195.98.162.155 43 43382
-194.87.13.8 195.98.162.153 12 8634
-194.87.13.8 195.98.162.78 57 25228
-194.87.13.8 195.98.162.9 94 33009
-194.87.13.8 195.98.161.57 4 6000
-194.87.13.8 195.98.161.41 52 57725
-194.87.13.8 195.98.161.32 6 433
-194.87.13.8 195.96.174.178 17 20989
-194.87.13.8 195.96.163.66 13 8510
-194.87.13.8 195.90.188.105 169 68987
-194.87.13.8 195.90.188.98 13 13679
-194.87.13.8 195.90.185.38 100 23568
-194.87.13.8 195.90.162.2 26 9575
-194.87.13.8 195.90.136.148 25 3160
-194.87.13.8 195.90.136.143 4 2024
-194.87.13.8 195.90.132.57 4 1398
-194.87.13.8 195.54.8.139 33 10681
-194.87.13.8 195.54.5.129 4 735
-194.87.13.8 195.46.165.250 5 697
-194.87.13.8 195.46.165.215 23 10108
-194.87.13.8 195.46.164.25 25 2325
-194.87.13.8 195.46.164.17 16 11423
-194.87.13.8 195.46.164.16 9 6253
-194.87.13.8 195.46.163.171 50 24920
-194.87.13.8 195.46.163.158 19 6681
-194.87.13.8 195.46.163.156 18 19033
-194.87.13.8 195.46.163.123 11 10683
-194.87.13.8 195.46.163.89 69 36648
-194.87.13.8 195.46.163.15 4 353
-194.87.13.8 195.46.163.7 173 112297
-194.87.13.8 195.46.162.206 12 2050
-194.87.13.8 195.46.162.196 30 35369
-194.87.13.8 195.46.162.184 80 104089
-194.87.13.8 195.46.162.173 18 16346
-194.87.13.8 195.46.162.91 306 246711
-194.87.13.8 195.46.162.55 5 393
-194.87.13.8 195.46.162.31 9 557
-194.87.13.8 195.46.162.13 10 1014
-194.87.13.8 195.46.161.242 44 35502
-194.87.13.8 195.46.161.210 15 18274
-194.87.13.8 195.46.161.209 24 15531
-194.87.13.8 195.46.161.186 31 27219
-194.87.13.8 195.46.161.170 9 1482
-194.87.13.8 195.46.161.133 21 24725
-194.87.13.8 195.46.161.123 11 10683
-194.87.13.8 195.46.161.111 26 2791
-194.87.13.8 195.46.161.83 25 10320
-194.87.13.8 195.46.161.71 124 123406
-194.87.13.8 195.46.160.69 11 10785
-194.87.13.8 195.16.101.109 5 393
-193.125.152.3 158.250.39.28 2 126
-193.125.152.3 158.250.100.24 2 734
-193.125.152.3 159.93.17.7 4 234
-194.87.13.8 195.16.101.101 57 53033
-194.87.13.8 195.16.98.99 100 68835
-194.87.13.8 195.16.98.37 24 4428
-194.87.13.8 195.12.35.2 18 17726
-194.87.13.8 195.9.103.3 76 32081
-194.87.13.8 195.9.96.7 22 14498
-194.87.13.8 194.220.215.111 16 2352
-194.87.13.8 194.220.215.110 13 1554
-194.87.13.8 194.220.215.66 5 759
-194.87.13.8 194.220.53.195 7 797
-194.87.13.8 194.135.178.214 70 27886
-194.87.13.8 194.135.111.18 260 289019
-194.87.13.8 194.85.149.18 6 475
-194.87.13.8 194.58.72.102 5 703
-194.87.13.8 193.124.241.239 13 6926
-194.87.13.8 193.124.241.39 31 18403
-194.87.13.8 193.124.121.118 17 1675
-194.87.13.8 193.124.114.33 43 19148
-194.87.13.6 195.98.162.153 2 120
-194.87.13.2 212.20.8.250 16 3749
-194.87.13.2 212.20.8.246 5 1259
-194.87.13.2 212.20.1.95 33 7367
-194.87.13.2 195.238.68.234 9 2454
-194.87.13.2 195.222.138.108 7 1203
-194.87.13.2 195.222.130.242 21 5860
-194.87.13.2 195.210.190.19 19 4260
-194.87.13.2 195.210.189.1 5 1119
-194.87.13.2 195.210.182.31 35 26895
-194.87.13.2 195.210.176.170 4 1079
-194.87.13.2 195.210.174.6 5 1119
-194.87.13.2 195.210.164.25 5 1119
-194.87.13.2 195.210.154.164 9 2484
-194.87.13.2 195.210.154.152 8 1376
-193.125.152.3 192.188.189.3 2 136
-194.87.13.2 195.210.154.48 43 28721
-194.87.13.2 195.210.150.2 31 6855
-194.87.13.2 195.210.148.242 17 2910
-194.87.13.2 195.210.143.145 7 2110
-194.87.13.2 195.210.136.145 20 3862
-194.87.13.2 195.210.136.135 9 1423
-194.87.13.2 195.210.136.131 7 1353
-194.87.13.2 195.210.130.50 16 14690
-194.87.13.2 195.208.94.133 33 9913
-194.87.13.2 195.208.93.154 9 1411
-194.87.13.2 195.208.72.139 4 1079
-194.87.13.2 195.208.72.47 8 2154
-194.87.13.2 195.208.67.19 4 1079
-194.87.13.2 195.208.67.10 8 1376
-194.87.13.2 195.208.64.152 4 1079
-194.87.13.2 195.208.64.144 6 2066
-193.125.152.3 193.124.5.37 11 1336
-193.125.152.3 193.124.5.50 2 266
-193.125.152.3 193.124.5.54 4 692
-193.125.152.3 193.124.22.22 11 2138
-193.125.152.3 193.124.22.65 141 15806
-193.125.152.3 193.124.32.129 5 1116
-193.125.152.3 193.124.57.100 3 197
-193.125.152.3 193.124.76.86 1 278
-194.87.13.2 195.208.64.129 6 1167
-193.125.152.3 193.124.110.130 2 766
-193.125.152.3 193.124.134.19 4 548
-194.87.13.2 195.182.129.8 9 3525
-193.125.152.3 193.124.148.73 9 1408
-193.125.152.3 193.124.171.67 2 354
-193.125.152.3 193.124.182.40 2 144
-193.125.152.3 193.124.241.39 2 356
-193.125.152.3 193.124.241.83 4 866
-194.87.13.2 195.182.128.2 39 9020
-193.125.152.3 193.124.250.22 79 12968
-193.125.152.3 193.125.80.35 2 300
-194.87.13.2 195.170.195.70 55 42078
-194.87.13.2 195.146.71.226 5 1119
-194.87.13.2 195.146.71.178 53 11410
-194.87.13.2 195.146.70.100 6 2070
-194.87.13.2 195.146.70.97 7 1199
-194.87.13.2 195.144.198.159 44 14597
-194.87.13.2 195.144.192.198 17 4040
-194.87.13.2 195.128.144.142 7 2110
-194.87.13.2 195.128.144.133 6 2342
-194.87.13.2 195.128.140.71 19 16072
-194.87.13.2 195.128.140.3 22 5159
-194.87.13.2 195.128.139.110 13 2642
-194.87.13.2 195.128.139.94 18 6772
-193.125.152.3 193.193.193.100 2 132
-193.125.152.3 193.193.193.107 4 1148
-193.125.152.3 193.193.226.226 3 489
-194.87.13.2 195.128.138.136 6 1309
-194.87.13.2 195.128.136.186 20 4622
-193.125.152.3 193.232.8.20 5 323
-193.125.152.3 193.232.68.1 2 120
-193.125.152.3 193.232.88.17 44 4923
-193.125.152.3 193.232.88.125 2 388
-193.125.152.3 193.232.112.1 2 134
-193.125.152.3 193.232.127.78 20 4237
-193.125.152.3 193.232.212.12 9 1177
-193.125.152.3 193.232.232.66 4 1210
-193.125.152.3 193.233.48.9 7 447
-193.125.152.3 193.233.48.65 2 130
-193.125.152.3 193.233.56.200 2 294
-193.125.152.3 193.233.78.1 2 276
-193.125.152.3 193.233.86.14 4 240
-193.125.152.3 193.233.86.33 4 240
-193.125.152.3 193.233.192.19 2 118
-193.125.152.3 193.233.208.3 4 238
-193.125.152.3 193.233.224.1 4 800
-194.87.13.2 195.128.136.71 6 1159
-194.87.13.2 195.128.134.99 5 1264
-194.87.13.2 195.128.132.70 23 6787
-194.87.13.2 195.128.129.155 4 1079
-194.87.13.2 195.128.128.98 30 17304
-193.125.152.3 194.44.157.250 2 134
-194.87.13.2 195.128.128.70 5 2372
-194.87.13.2 195.128.128.66 8 2422
-193.125.152.3 194.58.101.95 12 2368
-193.125.152.3 194.58.124.24 2 320
-194.87.13.2 195.128.128.3 5 1187
-193.125.152.3 194.58.230.249 7 1050
-194.87.13.2 195.112.226.35 23 956
-193.125.152.3 194.67.1.154 9 1436
-193.125.152.3 194.67.2.97 11 1861
-193.125.152.3 194.67.2.98 12 973
-193.125.152.3 194.67.66.176 2 122
-193.125.152.3 194.67.82.228 2 552
-193.125.152.3 194.67.110.2 4 688
-193.125.152.3 194.67.114.81 3 198
-193.125.152.3 194.67.114.193 5 330
-193.125.152.3 194.67.115.35 5 330
-193.125.152.3 194.67.115.38 2 412
-193.125.152.3 194.67.128.130 2 330
-194.87.13.2 195.98.162.189 11 2282
-194.87.13.2 195.98.162.182 10 3433
-194.87.13.2 195.98.162.170 56 55418
-194.87.13.2 195.98.162.165 12 2318
-193.125.152.3 194.84.2.73 2 298
-193.125.152.3 194.84.17.34 17 2183
-193.125.152.3 194.84.21.18 6 1320
-193.125.152.3 194.84.23.125 21 1523
-193.125.152.3 194.84.31.233 11 5316
-193.125.152.3 194.84.32.67 2 138
-193.125.152.3 194.84.39.28 7 981
-193.125.152.3 194.84.48.11 2 130
-193.125.152.3 194.84.54.130 2 358
-193.125.152.3 194.84.86.6 1 58
-193.125.152.3 194.84.96.57 6 387
-193.125.152.3 194.84.122.1 20 1460
-193.125.152.3 194.84.132.2 8 2208
-193.125.152.3 194.84.167.1 2 146
-193.125.152.3 194.84.168.49 4 670
-193.125.152.3 194.84.204.131 2 146
-193.125.152.3 194.84.204.222 2 476
-193.125.152.3 194.84.206.3 5 305
-193.125.152.3 194.84.206.193 18 1098
-193.125.152.3 194.84.223.2 2 148
-193.125.152.3 194.84.243.71 2 300
-194.87.13.2 195.98.162.164 9 1287
-194.87.13.2 195.98.162.160 29 8361
-194.87.13.2 195.98.162.155 8 2174
-194.87.13.2 195.98.162.151 15 3499
-194.87.13.2 195.98.162.147 6 1300
-193.125.152.3 194.85.128.10 28 1552
-193.125.152.3 194.85.137.89 76 4180
-194.87.13.2 195.98.162.141 22 5639
-194.87.13.2 195.98.162.135 35 10480
-194.87.13.2 195.98.162.131 31 25682
-194.87.13.2 195.98.162.118 5 1262
-194.87.13.2 195.98.162.114 6 1159
-193.125.152.3 194.85.200.204 6 816
-193.125.152.3 194.85.224.33 68 4150
-193.125.152.3 194.85.224.34 64 3904
-193.125.152.3 194.87.0.8 4 294
-193.125.152.3 194.87.0.22 50 8498
-193.125.152.3 194.87.0.242 24 4272
-193.125.152.3 194.87.37.2 2 308
-193.125.152.3 194.87.43.111 2 114
-193.125.152.3 194.87.110.35 2 114
-193.125.152.3 194.87.157.34 2 318
-193.125.152.3 194.87.161.7 2 430
-193.125.152.3 194.87.162.120 2 308
-193.125.152.3 194.87.186.1 4 692
-193.125.152.3 194.87.210.41 2 112
-193.125.152.3 194.87.224.99 5 875
-193.125.152.3 194.87.233.66 2 238
-193.125.152.3 194.87.239.39 2 358
-194.87.13.2 195.98.162.111 5 1119
-194.87.13.2 195.98.162.102 7 1341
-194.87.13.2 195.98.162.97 5 2030
-194.87.13.2 195.98.162.94 13 2362
-194.87.13.2 195.98.162.78 134 104964
-194.87.13.2 195.98.162.77 6 1163
-194.87.13.2 195.98.162.73 15 5512
-194.87.13.2 195.98.162.72 26 5763
-194.87.13.2 195.98.162.66 4 1225
-194.87.13.2 195.98.162.9 231 74902
-194.87.13.2 195.98.161.71 13 3581
-193.125.152.3 194.135.2.131 16 3134
-193.125.152.3 194.135.34.42 3 733
-193.125.152.3 194.135.34.85 11 2042
-193.125.152.3 194.135.34.136 6 866
-194.87.13.2 195.98.161.67 10 2513
-193.125.152.3 194.135.102.10 8 1490
-193.125.152.3 194.135.161.11 13 1287
-193.125.152.3 194.154.82.67 2 304
-193.125.152.3 194.154.82.122 2 102
-194.87.13.2 195.98.161.59 20 4472
-193.125.152.3 194.186.38.34 2 298
-193.125.152.3 194.186.113.254 5 644
-193.125.152.3 194.186.170.253 2 476
-193.125.152.3 194.186.208.51 4 550
-193.125.152.3 194.186.212.137 2 336
-193.125.152.3 194.186.254.23 2 360
-194.87.13.2 195.98.161.57 28 6345
-193.125.152.3 194.190.105.2 2 232
-193.125.152.3 194.190.163.127 6 702
-193.125.152.3 194.190.195.66 4 268
-193.125.152.3 194.190.199.1 2 430
-193.125.152.3 194.190.215.113 10 1471
-193.125.152.3 194.190.216.124 2 448
-193.125.152.3 194.190.218.2 4 598
-194.87.13.2 195.98.161.46 8 1387
-194.87.13.2 195.98.161.40 11 3193
-194.87.13.2 195.98.161.33 13 3387
-194.87.13.2 195.98.160.174 5 1119
-194.87.13.2 195.98.160.148 11 1907
-194.87.13.2 195.98.160.146 8 428
-194.87.13.2 195.96.163.66 37 22436
-194.87.13.2 195.90.188.112 8 2150
-194.87.13.2 195.90.188.111 5 1237
-193.125.152.3 194.220.146.79 2 322
-194.87.13.2 195.90.188.105 27 7280
-193.125.152.3 194.226.167.195 14 1947
-194.87.13.2 195.90.188.101 1 1089
-194.87.13.2 195.90.186.228 7 1332
-194.87.13.2 195.90.185.38 20 3294
-194.87.13.2 195.90.183.122 12 3627
-194.87.13.2 195.90.180.25 22 18568
-204.58.155.18 144.206.2.1 3 173
-204.57.67.249 194.58.72.120 4 160
-204.57.67.150 195.146.67.100 5 200
-204.57.67.150 194.58.72.120 4 160
-204.57.67.146 195.146.67.100 5 200
-204.57.67.146 194.58.72.120 4 160
-194.87.13.2 195.90.180.12 4 1300
-194.87.13.2 195.90.162.2 53 15773
-193.125.152.3 195.5.128.130 4 814
-193.125.152.3 195.5.141.6 11 1500
-193.125.152.3 195.5.151.21 5 615
-194.87.13.2 195.90.158.23 3 1035
-194.87.13.2 195.90.152.133 3 124
-193.125.152.3 195.7.179.36 4 744
-194.87.13.2 195.90.146.80 4 1075
-194.87.13.2 195.90.145.35 6 2070
-193.125.152.3 195.9.90.65 66 14486
-193.125.152.3 195.9.90.70 3 615
-193.125.152.3 195.9.94.33 2 140
-193.125.152.3 195.12.66.1 4 250
-193.125.152.3 195.16.96.2 3 482
-193.125.152.3 195.16.101.2 2 126
-193.125.152.3 195.16.114.47 3 192
-194.87.13.2 195.90.145.1 3 1180
-193.125.152.3 195.19.160.1 6 1066
-193.125.152.3 195.19.188.66 4 248
-194.87.13.2 195.90.142.27 7 2280
-194.87.13.2 195.90.137.230 4 1075
-194.87.13.2 195.90.136.148 4 1276
-194.87.13.2 195.90.136.143 4 1260
-194.87.13.2 195.90.136.135 6 2066
-193.125.152.3 195.26.160.48 3 434
-193.125.152.3 195.34.0.1 4 618
-193.125.152.3 195.34.17.13 4 843
-193.125.152.3 195.34.32.11 2 352
-193.125.152.3 195.34.41.33 3 495
-193.125.152.3 195.46.160.4 7 1412
-193.125.152.3 195.46.163.120 42 9840
-193.125.152.3 195.54.2.1 9 1433
-193.125.152.3 195.54.192.33 20 2704
-193.125.152.3 195.54.193.30 2 230
-194.87.13.2 195.90.136.82 10 2230
-194.87.13.2 195.90.134.250 7 2387
-193.125.152.3 195.90.128.103 2 455
-193.125.152.3 195.90.128.107 3 197
-193.125.152.3 195.90.136.1 2 286
-193.125.152.3 195.90.158.139 6 318
-193.125.152.3 195.90.184.66 15 2690
-193.125.152.3 195.91.133.54 28 5845
-193.125.152.3 195.96.65.2 23 5249
-193.125.152.3 195.98.64.65 2 494
-193.125.152.3 195.98.162.10 2 520
-193.125.152.3 195.98.163.16 2 144
-194.87.13.2 195.90.132.67 7 1199
-194.87.13.2 195.90.132.57 9 2318
-193.125.152.3 195.128.128.1 18 1801
-193.125.152.3 195.133.0.8 6 420
-193.125.152.3 195.133.103.1 2 274
-194.87.13.2 195.90.132.10 7 2256
-193.125.152.3 195.146.64.42 5 736
-193.125.152.3 195.146.72.34 4 232
-194.87.13.2 195.90.132.3 9 2190
-194.87.13.2 195.90.128.103 27 7388
-193.125.152.3 195.151.16.12 2 288
-193.125.152.3 195.151.16.13 2 436
-193.125.152.3 195.151.35.66 9 1339
-193.125.152.3 195.151.108.130 2 280
-193.125.152.3 195.151.163.75 3 552
-193.125.152.3 195.161.0.135 6 543
-193.125.152.3 195.161.20.33 3 552
-193.125.152.3 195.161.21.2 3 186
-193.125.152.3 195.161.21.130 5 291
-193.125.152.3 195.178.199.130 2 104
-193.125.152.3 195.208.49.11 2 282
-193.125.152.3 195.208.72.3 3 363
-193.125.152.3 195.208.93.132 3 416
-194.87.13.2 195.72.224.74 16 3667
-194.87.13.2 195.54.8.139 28 17598
-193.125.152.3 195.208.248.36 2 512
-193.125.152.3 195.208.252.2 2 346
-193.125.152.3 195.208.252.180 2 118
-193.125.152.3 195.209.0.6 4 236
-193.125.152.3 195.209.63.161 2 446
-193.125.152.3 195.210.128.6 2 264
-194.87.13.2 195.54.6.67 5 1266
-194.87.13.2 195.54.5.129 60 27325
-193.125.152.3 195.218.218.37 4 264
-193.125.152.3 195.222.130.67 3 186
-193.125.152.3 195.239.46.189 2 706
-193.125.152.3 195.239.193.64 2 374
-193.125.152.3 195.239.210.2 1 51
-194.87.13.2 195.54.2.8 6 1438
-194.87.13.2 195.46.165.248 16 6178
-194.87.13.2 195.46.165.239 10 4284
-194.87.13.2 195.46.165.227 8 2254
-194.87.13.2 195.46.165.226 11 6825
-194.87.13.2 195.46.165.204 6 2070
-194.87.13.2 195.46.165.200 70 42657
-194.87.13.2 195.46.165.196 10 4963
-194.87.13.2 195.46.165.194 7 2110
-194.87.13.2 195.46.165.193 10 5874
-194.87.13.2 195.46.165.191 7 2400
-194.87.13.2 195.46.165.172 14 11492
-194.87.13.2 195.46.165.162 19 11262
-194.87.13.2 195.46.165.158 7 2382
-194.87.13.2 195.46.165.151 8 2254
-194.87.13.2 195.46.165.145 161 74887
-194.87.13.2 195.46.165.135 26 11996
-194.87.13.2 195.46.165.133 14 5629
-194.87.13.2 195.46.164.27 11 2278
-194.87.13.2 195.46.164.25 64 67188
-194.87.13.2 195.46.164.17 35 26017
-194.87.13.2 195.46.164.16 6 1300
-194.87.13.2 195.46.164.8 14 5798
-194.87.13.2 195.46.164.6 5 1254
-194.87.13.2 195.46.164.2 4 1079
-194.87.13.2 195.46.163.180 5 1187
-194.87.13.2 195.46.163.178 25 2053
-194.87.13.2 195.46.163.174 5 1119
-194.87.13.2 195.46.163.160 8 1365
-194.87.13.2 195.46.163.159 5 1119
-194.87.13.2 195.46.163.158 28 17225
-194.87.13.2 195.46.163.156 16 3397
-194.87.13.2 195.46.163.147 6 1163
-194.87.13.2 195.46.163.136 5 1119
-194.87.13.2 195.46.163.133 10 2370
-194.87.13.2 195.46.163.132 6 1284
-194.87.13.2 195.46.163.123 15 3503
-194.87.13.2 195.46.163.120 14 3613
-194.87.13.2 195.46.163.105 6 1294
-194.87.13.2 195.46.163.94 5 1119
-194.87.13.2 195.46.163.89 132 107364
-194.87.13.2 195.46.163.76 13 2646
-194.87.13.2 195.46.163.65 20 4627
-194.87.13.2 195.46.163.60 8 1239
-194.87.13.2 195.46.163.47 7 2110
-194.87.13.2 195.46.163.38 17 3593
-194.87.13.2 195.46.163.31 9 2378
-194.87.13.2 195.46.163.30 14 2506
-194.87.13.2 195.46.163.13 18 3681
-194.87.13.2 195.46.163.7 21 3885
-194.87.13.2 195.46.162.243 19 4865
-194.87.13.2 195.46.162.226 8 2440
-194.87.13.2 195.46.162.221 21 2981
-194.87.13.2 195.46.162.218 5 1265
-194.87.13.2 195.46.162.213 5 1257
-194.87.13.2 195.46.162.206 59 43287
-194.87.13.2 195.46.162.203 5 1119
-194.87.13.2 195.46.162.196 18 14883
-194.87.13.2 195.46.162.193 5 1119
-194.87.13.2 195.46.162.184 13 1455
-194.87.13.2 195.46.162.180 5 1119
-194.87.13.2 195.46.162.179 9 3109
-194.87.13.2 195.46.162.177 4 1079
-194.87.13.2 195.46.162.173 8 2499
-194.87.13.2 195.46.162.172 6 1159
-194.87.13.2 195.46.162.169 8 2420
-194.87.13.2 195.46.162.165 4 1079
-194.87.13.2 195.46.162.120 5 1119
-194.87.13.2 195.46.162.119 5 1262
-194.87.13.2 195.46.162.104 4 1079
-194.87.13.2 195.46.162.100 6 1290
-194.87.13.2 195.46.162.72 5 1119
-194.87.13.2 195.46.162.70 10 2373
-194.87.13.2 195.46.162.60 14 3601
-194.87.13.2 195.46.162.55 27 28360
-194.87.13.2 195.46.162.53 7 1203
-194.87.13.2 195.46.162.47 21 3887
-194.87.13.2 195.46.162.42 12 2624
-194.87.13.2 195.46.162.40 11 2420
-194.87.13.2 195.46.162.34 11 2411
-194.87.13.2 195.46.162.30 7 1207
-194.87.13.2 195.46.162.28 18 3603
-194.87.13.2 195.46.162.13 42 51477
-194.87.13.2 195.46.162.8 5 1119
-194.87.13.2 195.46.162.6 9 2452
-194.87.13.2 195.46.162.1 14 2562
-194.87.13.2 195.46.161.252 5 1119
-194.87.13.2 195.46.161.251 21 4943
-194.87.13.2 195.46.161.236 5 1260
-193.125.152.3 212.192.34.200 2 298
-193.125.152.3 212.248.39.3 3 174
-194.87.13.2 195.46.161.233 5 1262
-194.87.13.2 195.46.161.224 11 1508
-194.87.13.2 195.46.161.217 22 5891
-194.87.13.2 195.46.161.209 11 2619
-194.87.13.2 195.46.161.207 20 2351
-193.125.152.3 62.76.0.1 12 888
-193.125.152.3 62.76.114.44 4 861
-194.87.13.2 195.46.161.205 5 1119
-194.87.13.2 195.46.161.201 5 1262
-194.87.13.2 195.46.161.199 13 4623
-194.87.13.2 195.46.161.186 90 82991
-193.125.152.4 193.124.1.131 20 1742
-193.125.152.4 193.124.22.81 402 73761
-193.125.152.4 193.124.36.34 37 8132
-193.125.152.4 193.124.188.65 101 48405
-193.125.152.4 193.125.44.76 6 240
-193.125.152.4 193.125.80.35 37 3336
-193.125.152.4 193.233.208.3 4 240
-193.125.152.4 194.58.38.18 36 3384
-194.87.13.2 195.46.161.184 5 1119
-193.125.152.4 194.58.124.17 39 3399
-193.125.152.4 194.58.212.34 25 3742
-193.125.152.4 194.67.80.42 25 1795
-193.125.152.4 194.84.44.35 18 1638
-193.125.152.4 194.87.0.20 82 19845
-193.125.152.4 194.87.160.195 17 1150
-193.125.152.4 194.87.206.137 19 1690
-193.125.152.4 194.87.211.1 103 8898
-194.87.13.2 195.46.161.177 6 2360
-194.87.13.2 195.46.161.172 5 1259
-193.125.152.4 194.154.92.129 31 5655
-193.125.152.4 194.186.221.251 19 1238
-193.125.152.4 194.186.254.26 62 31955
-193.125.152.4 194.190.194.33 16 1534
-194.87.13.2 195.46.161.171 16 3685
-204.57.67.27 194.58.72.120 4 160
-193.125.152.4 195.9.16.2 23 1913
-193.125.152.4 195.12.66.81 16 1534
-194.87.13.2 195.46.161.170 32 7476
-193.125.152.4 195.54.2.7 17 1586
-193.125.152.4 195.58.1.145 35 7789
-193.125.152.4 195.90.136.21 94 11466
-193.125.152.4 195.222.130.67 17 1577
-193.125.152.4 195.239.88.50 21 1220
-194.87.13.2 195.46.161.164 7 2364
-194.87.13.2 195.46.161.156 12 2478
-194.87.13.2 195.46.161.155 6 1296
-194.87.13.2 195.46.161.154 11 2282
-194.87.13.2 195.46.161.153 5 1256
-194.87.13.2 195.46.161.146 6 252
-194.87.13.2 195.46.161.113 11 3596
-194.87.13.2 195.46.161.111 16 3598
-193.125.152.5 193.124.22.65 18 1368
-194.87.13.2 195.46.161.109 4 1079
-194.87.13.2 195.46.161.85 10 1383
-194.87.13.2 195.46.161.84 21 4799
-194.87.13.2 195.46.161.83 121 57225
-194.87.13.2 195.46.161.75 3 124
-193.125.152.6 193.124.22.22 2 88
-193.125.152.6 193.124.22.65 15 930
-193.125.152.6 193.232.119.131 2 80
-194.87.13.2 195.46.160.69 147 34960
-193.125.152.6 194.226.235.33 6 254
-194.87.13.2 195.38.160.38 10 1591
-194.87.13.2 195.16.108.139 10 9589
-193.125.152.6 195.91.161.2 4 176
-193.125.152.6 195.128.140.2 19 5145
-193.125.152.6 195.161.24.66 23 1283
-194.87.13.2 195.16.108.135 8 3272
-194.87.13.2 195.16.102.4 8 2154
-194.87.13.2 195.16.101.101 4 1280
-194.87.13.2 195.16.101.67 72 52581
-193.125.152.6 212.46.3.250 4 176
-193.125.152.8 193.124.22.65 4 224
-194.87.13.2 195.16.98.235 22 3020
-193.125.152.8 193.124.224.35 14 2571
-194.87.13.2 195.16.98.230 7 1330
-194.87.13.2 195.16.98.209 10 3463
-194.87.13.2 195.16.98.204 27 5394
-194.87.13.2 195.16.98.194 13 3269
-194.87.13.2 195.16.98.193 14 4507
-194.87.13.2 195.16.98.99 7 1400
-194.87.13.2 195.16.98.37 44 49756
-194.87.13.2 195.16.98.13 14 3317
-193.125.152.10 158.250.26.145 18 1368
-194.87.13.2 195.16.96.9 11 2554
-194.87.13.2 195.12.32.170 8 3451
-193.125.152.10 193.124.22.65 18 1368
-193.125.152.10 193.233.11.84 4 304
-193.125.152.10 194.67.64.33 18 1368
-193.125.152.10 194.67.65.17 18 1368
-193.125.152.10 194.67.65.18 18 1368
-193.125.152.10 194.67.65.130 18 1368
-193.125.152.10 194.67.106.209 20 1520
-193.125.152.10 194.84.127.22 12 912
-194.87.13.2 195.12.32.165 27 4363
-194.87.13.2 195.12.32.52 5 2138
-194.87.13.2 195.12.32.7 4 1219
-193.125.152.10 194.190.105.2 2 152
-193.125.152.10 194.190.105.4 1 76
-193.125.152.10 194.190.105.7 2 152
-193.125.152.10 195.5.128.42 18 1368
-193.125.152.10 195.5.138.6 18 1368
-193.125.152.10 195.5.138.44 16 1216
-193.125.152.10 195.26.160.48 15 1140
-193.125.152.10 195.26.160.50 18 1368
-193.125.152.10 195.54.192.1 2 152
-193.125.152.10 195.54.192.43 2 152
-193.125.152.10 195.133.94.129 4 336
-193.125.152.10 195.151.111.45 13 988
-194.87.13.2 195.9.176.153 18 5299
-194.87.13.2 195.9.103.3 184 183787
-194.87.13.2 195.9.96.7 96 66779
-193.125.152.12 193.124.22.65 2 152
-193.125.152.15 193.124.22.65 18 1368
-193.125.152.16 193.124.22.65 15 1140
-193.125.152.17 193.124.22.22 12 906
-193.125.152.17 193.124.22.65 12 912
-193.125.152.18 193.124.22.65 2 152
-204.57.67.9 195.146.67.100 5 200
-194.87.13.2 195.9.94.33 11 2544
-193.125.152.19 193.124.22.65 13 988
-194.87.13.2 195.9.90.85 139 61939
-194.87.13.2 195.9.67.45 18 3485
-193.125.152.23 193.124.22.65 4 246
-194.87.13.2 195.9.47.230 7 2488
-193.125.152.23 194.87.0.28 3783 538698
-193.125.152.23 194.186.254.26 6986 644105
-194.87.13.2 194.220.215.111 73 61702
-193.125.152.24 192.124.174.67 5717 2168144
-194.87.13.2 194.220.215.110 56 45039
-193.125.152.24 193.124.97.131 504 27627
-194.87.13.2 194.220.215.66 59 35775
-194.87.13.2 194.220.169.1 32 14343
-193.125.152.24 193.125.95.121 1040 572488
-194.87.13.2 194.220.140.106 6 1159
-194.87.13.2 194.190.105.4 40 8033
-194.87.13.2 194.190.82.40 34 24976
-193.125.152.24 194.58.72.102 2072 1038564
-193.125.152.24 194.58.110.33 649 310072
-194.87.13.2 194.190.56.83 11 1499
diff --git a/contrib/ip_and_mac/test.sql b/contrib/ip_and_mac/test.sql
deleted file mode 100644 (file)
index d1a99ac..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
---
---     A quick test of the IP address code
---
---     $Id: test.sql,v 1.2 1998/06/16 05:35:12 momjian Exp $
---      This is original test (it was written before my changes in this class). alex.
-
--- temporary table:
-create table addresses (address ipaddr);
-
--- sample data from two subnets:
-insert into addresses values ('158.37.96.15');
-insert into addresses values ('158.37.96.16');
-insert into addresses values ('158.37.96.17');
-insert into addresses values ('158.37.97.15');
-insert into addresses values ('158.37.97.16');
-insert into addresses values ('158.37.97.17');
-insert into addresses values ('158.37.98.15');
-insert into addresses values ('158.37.98.16');
-insert into addresses values ('158.37.98.17');
-insert into addresses values ('158.37.96.150');
-insert into addresses values ('158.37.96.160');
-insert into addresses values ('158.37.96.170');
-insert into addresses values ('158.37.97.150');
-insert into addresses values ('158.37.97.160');
-insert into addresses values ('158.37.97.170');
-insert into addresses values ('158.37.98.150');
-insert into addresses values ('158.37.98.160');
-insert into addresses values ('158.37.98.170');
-
--- show them all:
-select * from addresses;
-
--- select the ones in subnet 96:
-select * from addresses where ipaddr_in_net(address, '158.37.96.0/24');
-
--- select the ones not in subnet 96:
-select * from addresses where not ipaddr_in_net(address, '158.37.96.0/24');
-
--- select the ones in subnet 97:
-select * from addresses where ipaddr_in_net(address, '158.37.97.0/24');
-
--- select the ones not in subnet 97:
-select * from addresses where not ipaddr_in_net(address, '158.37.97.0/24');
-
--- select the ones in subnet 96 or 97, sorted:
-select * from addresses where ipaddr_in_net(address, '158.37.96.0/23')
-       order by address;
-
--- now some networks:
-create table networks (network ipaddr);
-
--- now the subnets mentioned above:
-insert into networks values ('158.37.96.0/24');
-insert into networks values ('158.37.97.0/24');
-insert into networks values ('158.37.98.0/24');
-
--- select the netmasks of the net containing each:
-select address, ipaddr_mask(network) from addresses, networks
-       where ipaddr_in_net(address, network);
-
--- select the broadcast address of the net containing each:
-select address, ipaddr_bcast(network) from addresses, networks
-       where ipaddr_in_net(address, network);
-
--- tidy up:
-drop table addresses;
-drop table networks;
-
---
---     eof
---
diff --git a/contrib/ip_and_mac/test1.sql b/contrib/ip_and_mac/test1.sql
deleted file mode 100644 (file)
index 372a084..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-drop table stat_t;
-create table stat_t(i1 ipaddr, i2 ipaddr, p int4, b int4);
-create index stat_i1 on stat_t using btree (i1 ipaddr_ops);
-create index stat_i2 on stat_t using btree (i2 ipaddr_ops);
-copy stat_t from '/v/noc/src/ip_class/test.DATA' using delimiters ' ';
---
--- Please, check if your test data are not in /v/noc/src/ip_class/test.DATA file,
--- edit test1.sql file and repeatr it.
---
--- If everything is OK, you should run test2.sql now
---
diff --git a/contrib/ip_and_mac/test2.sql b/contrib/ip_and_mac/test2.sql
deleted file mode 100644 (file)
index 3207aa2..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-vacuum verbose analyze stat_t (i1,i2);
---
---
-select i2,sum(b) as b
-into tmp
-from stat_t
-where i1 >= '144.206.0.0' and i1 <= '144.206.255.255'
-group by i2;
-insert into tmp
-select '0.0.0.0' as i2,sum(b) as k
-from tmp
-where b < 10 * 1024;
-delete from tmp
-where b < 10 * 1024 and i2 <> '0.0.0.0';
-select i2,b / 1024 as k from tmp
-order by k desc;
-select ipaddr_print(i2,'%A/%P'),b from tmp where i2 = '0.0.0.0';
-drop table tmp;
-explain  select i2,sum(b) as b
-into tmp
-from stat_t
-where i1 >= '144.206.0.0' and i1 <= '144.206.255.255'
-group by i2;
--- ********************************************************
--- * Now remove test table by 'drop table stat_t' command *
--- ********************************************************
diff --git a/doc/README.ipaddr b/doc/README.ipaddr
new file mode 100644 (file)
index 0000000..7e7883a
--- /dev/null
@@ -0,0 +1,74 @@
+PostgreSQL type extensions for IP and MAC addresses.
+---------------------------------------------------
+
+$Id: README.ipaddr,v 1.1 1998/10/03 05:40:41 momjian Exp $
+
+I needed to record IP and MAC level ethernet addresses in a data
+base, and I really didn't want to store them as plain strings, with
+no enforced error checking, so I put together the accompanying code
+as my first experiment with adding a data type to PostgreSQL.  I
+then thought that this might be useful to others, both directly and
+as a very simple example of how to do this sort of thing, so I
+submitted it to the PostgreSQL project for inclusion in the contrib
+directory.  Since then, that directory has been modified to contain
+Aleksei Roudnev's implementation, which is based on mine.
+
+For those who have seen my previous contribution of these types, note
+that much has changed: I've modified the IP address type to work the
+way Paul Vixie did with his CIDR type.  In fact, I've pretty much just
+stolen his solution, modifying it into my framework in such a way as
+to facilitate the addition of IPV6 handling code in the future.  I've
+pretty much ignored Aleksei's C code, but I've added his SQL code to
+enter the necessary operators into the various system tables needed to
+make the types indexable.
+
+IP addresses are implemented as a struct of fixed in-memory length,
+but variable on-disk storage size.  For IPV4, it contains the address
+family (AF_INET), the CIDR prefix length and four byte address.  For
+IPV6, the address family will be different, and the address longer.
+
+The external representation of an IP address generally looks like
+'158.37.96.15/32'.  This address happens to be part of a subnet where
+I work; '158.37.96.0/24', which itself is a part of the larger subnet
+allocated to our site, which is '158.37.96.0/21', which again, if you
+go by the old book, is part of the class "B" net '158.37.0.0/16'.
+
+Input and output functions are supplied, along with the "normal" <,
+<=, =, >=, > and <> operators, which all do what you expect.  In
+addition, there are operators to check for networks or addresses being
+subnets of or addresses contained within other networks.  << tests
+whether the left operand is contained within the right, <<= includes
+equality, >> and >>= do the same things the opposite way.
+
+The input and output functions use routines from Paul Vixie's BIND,
+and I've snarfed the source files inet_net_ntop.c and inet_net_pton.c
+directly from a recent distribution of that code.  They are included
+here to avoid the need to fetch and install the BIND libraries to be
+able to use this code.  IANAL, but it looks from the copyright
+messages in the files as if this should be acceptable.  Read the
+documentation in inet_net_pton.c to see the legal input formats.
+
+MAC level ethernet addresses are implemented as a 6 byte struct that
+contains the address as unsigned chars.  Several input forms are
+accepted; the following are all the same address: '08002b:010203',
+'08002b-010203', '0800.2b01.0203', '08-00-2b-01-02-03' and
+'08:00:2b:01:02:03'.  Upper and lower case is accepted for the digits
+'a' through 'f'.  Output is always in the latter of the given forms.
+
+As with IP addresses, input and output functions are supplied as well
+as the "normal" operators, which do what you expect.  As an extra
+feature, a function macaddr_manuf() is defined, which returns the name
+of the manufacturer as a string.  This is currently held in a
+hard-coded struct internal to the C module -- it might be smarter to
+put this information into an actual data base table, and look up the
+manufacturer there.
+
+Many thanks to Aleksei Roudnev and Paul Vixie for their fine work!
+
+I don't know what changes are needed to the Makefile for other systems
+than the one I'm running (NetBSD 1.3), but anyway: to install on a BSD
+system: fix the path names in the Makefile if you need to, then make,
+make install, slurp the SQL files into psql or whatever, and you're
+off.  Enjoy!
+
+Bergen, Norway, 1998-08-09, Tom Ivar Helbekkmo (tih@nhh.no).
index 770d47d6fedf96a5fdd28c9cc75caa36c8b9ac6e..76e80c6d7168d7cd4a549e5d21dde934ba20b520 100644 (file)
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.39 1998/09/30 05:48:25 thomas Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.40 1998/10/03 05:40:42 momjian Exp $
  *
  * HISTORY
  *       AUTHOR                        DATE                    MAJOR EVENT
@@ -344,7 +344,7 @@ typedef union
 
 
 
-#define        YYFINAL         1649
+#define        YYFINAL         1650
 #define        YYFLAG          -32768
 #define        YYNTBASE        229
 
@@ -483,18 +483,18 @@ static const short yyprhs[] = {     0,
   2574,  2578,  2582,  2584,  2588,  2592,  2596,  2598,  2600,  2605,
   2608,  2612,  2616,  2618,  2622,  2624,  2628,  2630,  2632,  2633,
   2635,  2637,  2639,  2641,  2643,  2645,  2647,  2649,  2651,  2653,
-  2655,  2657,  2659,  2661,  2664,  2666,  2668,  2670,  2672,  2674,
-  2676,  2678,  2680,  2682,  2684,  2686,  2688,  2690,  2692,  2694,
-  2696,  2698,  2700,  2702,  2704,  2706,  2708,  2710,  2712,  2714,
-  2716,  2718,  2720,  2722,  2724,  2726,  2728,  2730,  2732,  2734,
-  2736,  2738,  2740,  2742,  2744,  2746,  2748,  2750,  2752,  2754,
-  2756,  2758,  2760,  2762,  2764,  2766,  2768,  2770,  2772,  2774,
-  2776,  2778,  2780,  2782,  2784,  2786,  2788,  2790,  2792,  2794,
-  2796,  2798,  2800,  2802,  2804,  2806,  2808,  2810,  2812,  2814,
-  2816,  2818,  2820,  2822,  2824,  2826,  2828,  2830,  2832,  2834,
-  2836,  2838,  2840,  2842,  2844,  2846,  2848,  2850,  2852,  2854,
-  2856,  2858,  2860,  2862,  2864,  2866,  2868,  2870,  2872,  2874,
-  2876,  2878,  2880,  2882,  2884,  2886,  2888,  2890
+  2655,  2657,  2659,  2661,  2664,  2666,  2668,  2670,  2673,  2675,
+  2677,  2679,  2681,  2683,  2685,  2687,  2689,  2691,  2693,  2695,
+  2697,  2699,  2701,  2703,  2705,  2707,  2709,  2711,  2713,  2715,
+  2717,  2719,  2721,  2723,  2725,  2727,  2729,  2731,  2733,  2735,
+  2737,  2739,  2741,  2743,  2745,  2747,  2749,  2751,  2753,  2755,
+  2757,  2759,  2761,  2763,  2765,  2767,  2769,  2771,  2773,  2775,
+  2777,  2779,  2781,  2783,  2785,  2787,  2789,  2791,  2793,  2795,
+  2797,  2799,  2801,  2803,  2805,  2807,  2809,  2811,  2813,  2815,
+  2817,  2819,  2821,  2823,  2825,  2827,  2829,  2831,  2833,  2835,
+  2837,  2839,  2841,  2843,  2845,  2847,  2849,  2851,  2853,  2855,
+  2857,  2859,  2861,  2863,  2865,  2867,  2869,  2871,  2873,  2875,
+  2877,  2879,  2881,  2883,  2885,  2887,  2889,  2891
 };
 
 static const short yyrhs[] = {   230,
@@ -765,29 +765,29 @@ static const short yyrhs[] = {   230,
    486,     0,   204,     0,   486,     0,   486,     0,   486,     0,
    483,     0,   204,     0,   482,     0,   209,     0,   483,     0,
    421,   483,     0,   481,     0,   119,     0,    47,     0,   208,
-     0,   207,     0,   205,     0,   204,     0,   486,     0,   426,
-     0,   431,     0,   204,     0,   436,     0,     3,     0,     4,
-     0,   137,     0,   138,     0,   140,     0,   141,     0,   143,
-     0,   146,     0,   147,     0,   148,     0,   149,     0,   150,
-     0,    41,     0,   152,     0,   153,     0,   156,     0,   157,
-     0,   158,     0,   159,     0,   160,     0,   161,     0,    60,
-     0,   162,     0,   163,     0,    66,     0,    67,     0,   164,
-     0,   167,     0,    72,     0,   169,     0,   170,     0,    79,
-     0,   173,     0,   174,     0,   176,     0,   178,     0,    84,
-     0,   179,     0,    86,     0,   180,     0,    87,     0,   181,
-     0,    95,     0,    96,     0,   182,     0,    99,     0,   183,
-     0,   101,     0,   184,     0,   186,     0,   187,     0,   188,
-     0,   105,     0,   189,     0,   190,     0,   193,     0,   194,
-     0,   195,     0,   196,     0,   111,     0,   113,     0,   114,
-     0,   134,     0,   197,     0,   135,     0,   201,     0,   203,
-     0,   133,     0,   486,     0,   136,     0,   139,     0,   142,
-     0,   144,     0,    25,     0,   145,     0,    27,     0,    28,
-     0,   151,     0,   154,     0,   155,     0,    47,     0,    51,
-     0,    55,     0,   165,     0,   166,     0,   168,     0,   171,
-     0,   172,     0,   175,     0,    89,     0,    92,     0,    93,
-     0,   185,     0,   191,     0,   192,     0,   110,     0,   117,
-     0,   119,     0,   200,     0,   202,     0,    28,     0,   172,
-     0
+   449,     0,   207,     0,   205,     0,   204,     0,   486,     0,
+   426,     0,   431,     0,   204,     0,   436,     0,     3,     0,
+     4,     0,   137,     0,   138,     0,   140,     0,   141,     0,
+   143,     0,   146,     0,   147,     0,   148,     0,   149,     0,
+   150,     0,    41,     0,   152,     0,   153,     0,   156,     0,
+   157,     0,   158,     0,   159,     0,   160,     0,   161,     0,
+    60,     0,   162,     0,   163,     0,    66,     0,    67,     0,
+   164,     0,   167,     0,    72,     0,   169,     0,   170,     0,
+    79,     0,   173,     0,   174,     0,   176,     0,   178,     0,
+    84,     0,   179,     0,    86,     0,   180,     0,    87,     0,
+   181,     0,    95,     0,    96,     0,   182,     0,    99,     0,
+   183,     0,   101,     0,   184,     0,   186,     0,   187,     0,
+   188,     0,   105,     0,   189,     0,   190,     0,   193,     0,
+   194,     0,   195,     0,   196,     0,   111,     0,   113,     0,
+   114,     0,   134,     0,   197,     0,   135,     0,   201,     0,
+   203,     0,   133,     0,   486,     0,   136,     0,   139,     0,
+   142,     0,   144,     0,    25,     0,   145,     0,    27,     0,
+    28,     0,   151,     0,   154,     0,   155,     0,    47,     0,
+    51,     0,    55,     0,   165,     0,   166,     0,   168,     0,
+   171,     0,   172,     0,   175,     0,    89,     0,    92,     0,
+    93,     0,   185,     0,   191,     0,   192,     0,   110,     0,
+   117,     0,   119,     0,   200,     0,   202,     0,    28,     0,
+   172,     0
 };
 
 #endif
@@ -875,18 +875,18 @@ static const short yyrline[] = { 0,
   4376,  4384,  4394,  4396,  4398,  4409,  4411,  4413,  4428,  4435,
   4442,  4461,  4463,  4468,  4475,  4482,  4494,  4508,  4509,  4512,
   4517,  4529,  4530,  4531,  4532,  4533,  4539,  4540,  4542,  4543,
-  4548,  4555,  4562,  4569,  4577,  4579,  4589,  4601,  4608,  4609,
-  4610,  4617,  4619,  4621,  4632,  4633,  4634,  4635,  4636,  4637,
-  4638,  4639,  4640,  4641,  4642,  4643,  4644,  4645,  4646,  4647,
-  4648,  4649,  4650,  4651,  4652,  4653,  4654,  4655,  4656,  4657,
-  4658,  4659,  4660,  4661,  4662,  4663,  4664,  4665,  4666,  4667,
-  4668,  4669,  4670,  4671,  4672,  4673,  4674,  4675,  4676,  4677,
-  4678,  4679,  4680,  4681,  4682,  4683,  4684,  4685,  4686,  4687,
-  4688,  4689,  4690,  4691,  4692,  4693,  4694,  4695,  4696,  4697,
-  4698,  4699,  4700,  4701,  4714,  4715,  4716,  4717,  4718,  4719,
-  4720,  4721,  4722,  4723,  4724,  4725,  4726,  4727,  4728,  4729,
-  4730,  4731,  4732,  4733,  4734,  4735,  4736,  4737,  4738,  4739,
-  4740,  4741,  4742,  4743,  4744,  4745,  4748,  4755
+  4548,  4555,  4562,  4569,  4577,  4579,  4589,  4601,  4609,  4610,
+  4611,  4618,  4620,  4622,  4633,  4634,  4635,  4636,  4637,  4638,
+  4639,  4640,  4641,  4642,  4643,  4644,  4645,  4646,  4647,  4648,
+  4649,  4650,  4651,  4652,  4653,  4654,  4655,  4656,  4657,  4658,
+  4659,  4660,  4661,  4662,  4663,  4664,  4665,  4666,  4667,  4668,
+  4669,  4670,  4671,  4672,  4673,  4674,  4675,  4676,  4677,  4678,
+  4679,  4680,  4681,  4682,  4683,  4684,  4685,  4686,  4687,  4688,
+  4689,  4690,  4691,  4692,  4693,  4694,  4695,  4696,  4697,  4698,
+  4699,  4700,  4701,  4702,  4715,  4716,  4717,  4718,  4719,  4720,
+  4721,  4722,  4723,  4724,  4725,  4726,  4727,  4728,  4729,  4730,
+  4731,  4732,  4733,  4734,  4735,  4736,  4737,  4738,  4739,  4740,
+  4741,  4742,  4743,  4744,  4745,  4746,  4749,  4756
 };
 #endif
 
@@ -1144,7 +1144,7 @@ static const short yyr2[] = {     0,
      3,     3,     1,     3,     3,     3,     1,     1,     4,     2,
      3,     3,     1,     3,     1,     3,     1,     1,     0,     1,
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     2,     1,     1,     1,     1,     1,     1,
+     1,     1,     1,     2,     1,     1,     1,     2,     1,     1,
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -1193,7 +1193,7 @@ static const short yydefact[] = {     0,
    292,   302,     0,     0,   443,     0,     0,     0,   568,   568,
    640,   641,   643,   645,   559,   839,     0,     0,   817,   553,
    593,     0,   568,     0,   595,   556,     0,     0,   886,   584,
-     0,   816,   646,   564,   891,     0,   825,     0,   818,   812,
+     0,   816,   646,   564,   891,     0,   825,     0,   730,   812,
      0,   797,     0,     0,     0,     0,     0,   531,   538,   541,
    540,   536,   561,   539,   826,   795,   615,   594,   730,   469,
    793,     0,     0,   616,   815,   811,   813,   617,   417,    69,
@@ -1206,731 +1206,819 @@ static const short yydefact[] = {     0,
    563,   570,     0,     0,     0,   546,   545,     0,   735,     0,
    544,   579,   580,   581,   577,   585,   576,   568,   566,   695,
      0,     0,   547,   740,   765,     0,   574,     0,     0,   575,
-   543,   542,   537,   573,   635,   618,   628,   626,   627,     0,
-     0,     0,   594,   814,     0,   535,     0,     0,     0,     0,
-   665,     0,     0,     0,     0,   655,   657,   636,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   614,   471,     0,
-   500,     0,     0,     0,    73,    74,    68,    72,    71,    66,
-    70,    67,   788,   730,   500,   787,     0,     0,   730,   420,
-     0,     0,   335,   286,   428,   374,   374,   374,   374,    79,
-     0,    54,    55,    59,     0,     0,     0,     0,     0,     0,
-   101,   103,   104,   152,     0,   219,   220,     0,    59,   405,
-   247,   246,   248,     0,   243,     0,   412,   550,   839,   548,
-   551,   341,     0,   823,   824,   342,   822,   346,     0,     0,
-   225,     0,     0,     0,     0,   222,     0,     0,   276,     0,
-   273,     0,     0,   525,   493,   261,     0,     0,   366,   299,
-   298,     0,     0,   445,   730,     0,   477,     0,   438,     0,
-     0,     0,   572,     0,     0,     0,   477,     0,   737,   738,
-   736,     0,     0,     0,     0,     0,     0,     0,   565,     0,
+   543,   542,   537,   573,   635,     0,   818,   618,   628,   626,
+   627,     0,     0,     0,   594,   814,     0,   535,     0,     0,
+     0,     0,   665,     0,     0,     0,     0,   655,   657,   636,
+     0,     0,     0,     0,     0,     0,     0,     0,   614,   471,
+     0,   500,     0,     0,     0,    73,    74,    68,    72,    71,
+    66,    70,    67,   788,   730,   500,   787,     0,     0,   730,
+   420,     0,     0,   335,   286,   428,   374,   374,   374,   374,
+    79,     0,    54,    55,    59,     0,     0,     0,     0,     0,
+     0,   101,   103,   104,   152,     0,   219,   220,     0,    59,
+   405,   247,   246,   248,     0,   243,     0,   412,   550,   839,
+   548,   551,   341,     0,   823,   824,   342,   822,   346,     0,
+     0,   225,     0,     0,     0,     0,   222,     0,     0,   276,
+     0,   273,     0,     0,   525,   493,   261,     0,     0,   366,
+   299,   298,     0,     0,   445,   730,     0,   477,     0,   438,
+     0,     0,     0,   572,     0,     0,     0,   477,     0,   737,
+   738,   736,     0,     0,     0,     0,     0,     0,     0,   565,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   730,     0,   742,   755,   731,   767,     0,     0,     0,
-     0,     0,     0,   594,   772,     0,   631,     0,     0,   534,
-     0,     0,   900,   902,   903,   907,   908,   909,   916,   917,
-   918,   922,   923,   924,   896,   897,   898,   899,   901,   904,
-   905,   906,   910,   911,   912,   913,   914,   915,   919,   920,
-   921,   925,   926,   895,   794,   693,     0,   715,   716,   718,
-   720,     0,     0,     0,   721,     0,     0,     0,     0,     0,
-     0,     0,   730,     0,   697,   698,     0,   661,     0,   656,
-   659,   633,     0,   667,     0,   694,     0,     0,     0,   632,
-     0,     0,     0,   625,     0,     0,     0,   623,     0,     0,
-     0,   624,     0,     0,     0,   619,     0,     0,     0,   620,
-     0,     0,     0,   622,     0,     0,     0,   621,   629,     0,
-     0,   792,     0,   526,   796,   781,   783,   804,     0,   638,
-     0,   782,   790,     0,   526,     0,     0,    95,    89,    88,
-     0,     0,   422,   373,   102,    85,     0,     0,     0,   372,
-    52,    57,    58,    63,     0,     0,     0,     0,     0,     0,
-   214,     0,   216,   112,   108,   215,    63,     0,     0,   415,
-     0,   407,   549,     0,   340,   345,   339,     0,     0,     0,
-   224,   234,   226,   227,   228,   229,     0,     0,     0,     0,
-   272,   322,   477,     0,   356,     0,     0,   312,   316,   314,
-     0,   442,   446,   440,     0,     0,   317,     0,     0,     0,
-   562,   642,   644,     0,   558,     0,   647,   648,     0,   552,
-   587,   588,   589,   590,   591,   592,   586,     0,   555,     0,
-   740,   765,     0,   753,   743,   748,     0,   649,     0,   754,
-     0,     0,     0,     0,     0,   741,     0,     0,     0,     0,
-   769,   650,   583,     0,   771,     0,     0,     0,   654,     0,
-     0,   604,   606,   605,   607,   608,   609,   610,   611,     0,
-   601,     0,   529,   534,   560,     0,     0,     0,   740,   765,
-     0,   711,   699,   706,   704,   705,     0,     0,   712,     0,
-     0,     0,     0,     0,   696,     0,     0,   660,   658,   662,
-     0,     0,   634,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   730,     0,   742,   755,   731,   767,     0,     0,
+     0,     0,     0,     0,   594,   772,     0,     0,   631,     0,
+     0,   534,     0,     0,   900,   902,   903,   907,   908,   909,
+   916,   917,   918,   922,   923,   924,   896,   897,   898,   899,
+   901,   904,   905,   906,   910,   911,   912,   913,   914,   915,
+   919,   920,   921,   925,   926,   895,   794,   693,     0,   715,
+   716,   718,   720,     0,     0,     0,   721,     0,     0,     0,
+     0,     0,     0,     0,   730,     0,   697,   698,     0,   661,
+     0,   656,   659,   633,     0,   667,     0,   694,     0,     0,
+     0,   632,     0,     0,     0,   625,     0,     0,     0,   623,
+     0,     0,     0,   624,     0,     0,     0,   619,     0,     0,
+     0,   620,     0,     0,     0,   622,     0,     0,     0,   621,
+   629,     0,   792,     0,   526,   796,   781,   783,   804,     0,
+   638,     0,   782,   790,     0,   526,     0,     0,    95,    89,
+    88,     0,     0,   422,   373,   102,    85,     0,     0,     0,
+   372,    52,    57,    58,    63,     0,     0,     0,     0,     0,
+     0,   214,     0,   216,   112,   108,   215,    63,     0,     0,
+   415,     0,   407,   549,     0,   340,   345,   339,     0,     0,
+     0,   224,   234,   226,   227,   228,   229,     0,     0,     0,
+     0,   272,   322,   477,     0,   356,     0,     0,   312,   316,
+   314,     0,   442,   446,   440,     0,     0,   317,     0,     0,
+     0,   562,   642,   644,     0,   558,     0,   647,   648,     0,
+   552,   587,   588,   589,   590,   591,   592,   586,     0,   555,
+     0,   740,   765,     0,   753,   743,   748,     0,   649,     0,
+   754,     0,     0,     0,     0,     0,   741,     0,     0,     0,
+     0,   769,   650,   583,     0,   771,     0,     0,     0,   654,
+     0,   730,     0,     0,   604,   606,   605,   607,   608,   609,
+   610,   611,     0,   601,     0,   529,   534,   560,     0,     0,
+     0,   740,   765,     0,   711,   699,   706,   704,   705,     0,
+     0,   712,     0,     0,     0,     0,     0,   696,     0,     0,
+   660,   658,   662,     0,     0,   634,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   730,   468,
-     0,   499,   503,   506,   527,   495,     0,   637,   639,   786,
-   449,   791,     0,    91,    92,    98,    90,     0,   429,     0,
-     0,    80,     0,    82,     0,   371,     0,    65,     0,     0,
-   160,     0,     0,     0,     0,     0,     0,     0,     0,   159,
-   815,   161,   151,     0,     0,     0,   100,     0,    99,   218,
-   220,     0,   106,     0,     0,     0,     0,     0,     0,   119,
-   105,   107,   110,   114,    65,     0,   244,   414,   409,   413,
-   418,   343,     0,     0,   344,   390,   391,   388,   389,     0,
-   235,     0,     0,   232,   360,   280,   230,   231,   277,   279,
-   281,   278,   275,   274,     0,     0,     0,   368,   369,   367,
-   313,     0,   301,   444,   500,     0,     0,   569,   571,     0,
-   500,   734,     0,     0,     0,     0,     0,     0,     0,     0,
-   751,   739,   752,   744,   745,   747,   746,   749,   756,     0,
-   766,   733,   732,     0,   764,   651,   652,   653,   770,     0,
-     0,   613,   612,     0,     0,   534,     0,   530,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   709,   663,   710,
-   700,   701,   703,   702,   707,   713,     0,   773,     0,   774,
-   775,     0,     0,     0,     0,   669,     0,     0,   676,     0,
-     0,   674,     0,     0,   675,     0,     0,   670,     0,     0,
-   671,     0,     0,   673,     0,     0,   672,     0,   728,   514,
-     0,     0,     0,   505,   528,     0,   497,   785,   784,   789,
-     0,    87,     0,   427,    81,     0,     0,     0,     0,     0,
-    50,     0,   183,   184,   162,   172,   170,   171,     0,     0,
-     0,     0,     0,     0,     0,     0,   186,   188,   185,     0,
-     0,     0,     0,     0,     0,     0,     0,   153,     0,     0,
-     0,   154,     0,   111,     0,     0,     0,   144,   145,   147,
-   149,   116,   150,     0,     0,     0,     0,     0,     0,   117,
-     0,   124,   118,   120,   443,   109,    49,   251,     0,     0,
-   411,   338,     0,     0,     0,   282,   233,   803,   321,     0,
-   500,     0,   526,   439,   630,   557,   526,   554,     0,   758,
-   759,     0,     0,     0,   763,   757,   768,     0,     0,     0,
-     0,   603,     0,   532,   534,     0,   717,   719,   722,   723,
-     0,     0,     0,   727,   714,   666,     0,   664,   777,     0,
-   778,   779,   685,   677,   692,   684,   690,   682,   691,   683,
-   686,   678,   687,   679,   689,   681,   688,   680,   730,   516,
-   512,   516,   514,   511,   516,   513,     0,   501,     0,   504,
-     0,     0,   464,     0,   430,    84,     0,   370,    62,    61,
-     0,     0,   175,   181,     0,   200,     0,   191,     0,   187,
-   190,   179,     0,     0,     0,   182,   178,   167,   168,   169,
-   163,   164,   166,   165,   173,   176,     0,   158,     0,   155,
-     0,     0,   113,     0,     0,     0,   142,   125,   135,   133,
-   134,     0,   143,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   203,   250,     0,     0,   245,     0,   526,   387,
-   236,     0,   323,   324,   326,   331,     0,   804,   526,   315,
-   495,   495,     0,   760,   761,   762,   596,     0,   599,   600,
-     0,   533,     0,   724,   725,   726,   776,   668,     0,   729,
-   515,   508,   509,   507,   510,     0,   502,   494,   496,   473,
-   479,    97,    83,     0,    64,     0,     0,     0,   199,   193,
-   189,   192,     0,     0,   180,     0,   177,     0,   213,   115,
-     0,     0,     0,   138,   141,   130,   131,   132,   126,   127,
-   129,   128,   136,   139,     0,   123,     0,   206,   252,   253,
-   249,     0,     0,     0,     0,   339,     0,     0,     0,   334,
-     0,   495,   497,   497,   750,   597,   598,   708,   780,   519,
-   472,     0,     0,   461,    60,     0,   196,     0,   194,     0,
-     0,   157,   443,     0,   146,   148,     0,   140,   201,   202,
-     0,   121,   205,     0,   337,   393,   386,   318,   325,   330,
-   329,     0,   805,   328,   332,     0,   497,   464,   464,     0,
-     0,     0,   477,   463,   466,     0,   174,   198,   197,   195,
-   203,     0,   122,     0,     0,   204,   256,   392,     0,   333,
-   331,   464,   441,   462,     0,     0,   498,     0,   473,   478,
-   480,   488,   206,   137,   210,     0,     0,   207,   208,   260,
-   257,   258,     0,   254,   259,   377,     0,     0,   376,   378,
-   334,   479,     0,     0,   520,   524,   522,   500,     0,     0,
-   486,   487,     0,   482,   156,   209,   211,   212,     0,   240,
-     0,   381,   382,     0,   327,   457,   517,     0,   518,     0,
-   526,   465,   481,   483,   484,   485,   255,   379,   384,   385,
-   380,     0,   450,   521,   523,   495,   383,     0,     0,   456,
-   497,   458,     0,   459,   467,   460,     0,     0,     0
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   468,     0,   499,   503,   506,   527,   495,     0,   637,   639,
+   786,   449,   791,     0,    91,    92,    98,    90,     0,   429,
+     0,     0,    80,     0,    82,     0,   371,     0,    65,     0,
+     0,   160,     0,     0,     0,     0,     0,     0,     0,     0,
+   159,   815,   161,   151,     0,     0,     0,   100,     0,    99,
+   218,   220,     0,   106,     0,     0,     0,     0,     0,     0,
+   119,   105,   107,   110,   114,    65,     0,   244,   414,   409,
+   413,   418,   343,     0,     0,   344,   390,   391,   388,   389,
+     0,   235,     0,     0,   232,   360,   280,   230,   231,   277,
+   279,   281,   278,   275,   274,     0,     0,     0,   368,   369,
+   367,   313,     0,   301,   444,   500,     0,     0,   569,   571,
+     0,   500,   734,     0,     0,     0,     0,     0,     0,     0,
+     0,   751,   739,   752,   744,   745,   747,   746,   749,   756,
+     0,   766,   733,   732,     0,   764,   651,   652,   653,   770,
+     0,   728,     0,     0,   613,   612,     0,     0,   534,     0,
+   530,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   709,   663,   710,   700,   701,   703,   702,   707,   713,     0,
+   773,     0,   774,   775,     0,     0,     0,     0,   669,     0,
+     0,   676,     0,     0,   674,     0,     0,   675,     0,     0,
+   670,     0,     0,   671,     0,     0,   673,     0,     0,   672,
+   514,     0,     0,     0,   505,   528,     0,   497,   785,   784,
+   789,     0,    87,     0,   427,    81,     0,     0,     0,     0,
+     0,    50,     0,   183,   184,   162,   172,   170,   171,     0,
+     0,     0,     0,     0,     0,     0,     0,   186,   188,   185,
+     0,     0,     0,     0,     0,     0,     0,     0,   153,     0,
+     0,     0,   154,     0,   111,     0,     0,     0,   144,   145,
+   147,   149,   116,   150,     0,     0,     0,     0,     0,     0,
+   117,     0,   124,   118,   120,   443,   109,    49,   251,     0,
+     0,   411,   338,     0,     0,     0,   282,   233,   803,   321,
+     0,   500,     0,   526,   439,   630,   557,   526,   554,     0,
+   758,   759,     0,     0,     0,   763,   757,   768,   730,     0,
+     0,     0,     0,   603,     0,   532,   534,     0,   717,   719,
+   722,   723,     0,     0,     0,   727,   714,   666,     0,   664,
+   777,     0,   778,   779,   685,   677,   692,   684,   690,   682,
+   691,   683,   686,   678,   687,   679,   689,   681,   688,   680,
+   516,   512,   516,   514,   511,   516,   513,     0,   501,     0,
+   504,     0,     0,   464,     0,   430,    84,     0,   370,    62,
+    61,     0,     0,   175,   181,     0,   200,     0,   191,     0,
+   187,   190,   179,     0,     0,     0,   182,   178,   167,   168,
+   169,   163,   164,   166,   165,   173,   176,     0,   158,     0,
+   155,     0,     0,   113,     0,     0,     0,   142,   125,   135,
+   133,   134,     0,   143,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   203,   250,     0,     0,   245,     0,   526,
+   387,   236,     0,   323,   324,   326,   331,     0,   804,   526,
+   315,   495,   495,     0,   760,   761,   762,   729,   596,     0,
+   599,   600,     0,   533,     0,   724,   725,   726,   776,   668,
+     0,   515,   508,   509,   507,   510,     0,   502,   494,   496,
+   473,   479,    97,    83,     0,    64,     0,     0,     0,   199,
+   193,   189,   192,     0,     0,   180,     0,   177,     0,   213,
+   115,     0,     0,     0,   138,   141,   130,   131,   132,   126,
+   127,   129,   128,   136,   139,     0,   123,     0,   206,   252,
+   253,   249,     0,     0,     0,     0,   339,     0,     0,     0,
+   334,     0,   495,   497,   497,   750,   597,   598,   708,   780,
+   519,   472,     0,     0,   461,    60,     0,   196,     0,   194,
+     0,     0,   157,   443,     0,   146,   148,     0,   140,   201,
+   202,     0,   121,   205,     0,   337,   393,   386,   318,   325,
+   330,   329,     0,   805,   328,   332,     0,   497,   464,   464,
+     0,     0,     0,   477,   463,   466,     0,   174,   198,   197,
+   195,   203,     0,   122,     0,     0,   204,   256,   392,     0,
+   333,   331,   464,   441,   462,     0,     0,   498,     0,   473,
+   478,   480,   488,   206,   137,   210,     0,     0,   207,   208,
+   260,   257,   258,     0,   254,   259,   377,     0,     0,   376,
+   378,   334,   479,     0,     0,   520,   524,   522,   500,     0,
+     0,   486,   487,     0,   482,   156,   209,   211,   212,     0,
+   240,     0,   381,   382,     0,   327,   457,   517,     0,   518,
+     0,   526,   465,   481,   483,   484,   485,   255,   379,   384,
+   385,   380,     0,   450,   521,   523,   495,   383,     0,     0,
+   456,   497,   458,     0,   459,   467,   460,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1647,
-    33,    34,    35,    36,    37,   400,   544,   794,  1339,   998,
-  1191,    38,   520,   517,    39,    40,    41,   540,    42,    43,
-   781,   986,   235,   532,  1182,    44,   550,   551,   552,  1031,
-  1032,  1023,  1033,  1034,  1475,  1240,   553,   554,  1367,  1008,
-  1448,  1449,  1478,  1522,  1523,  1578,  1019,    45,   402,   555,
-   556,    46,   412,   586,  1056,  1057,  1058,    47,   181,    48,
-    49,   407,   564,   565,  1249,  1395,  1481,  1583,  1584,    50,
-    51,   279,   182,   589,   415,   590,   591,  1059,    52,    53,
-   207,   310,   432,    54,   214,   215,   216,   839,  1073,    55,
-    56,   183,  1066,  1402,  1403,  1404,  1405,  1490,  1534,    57,
-    58,    59,  1044,   410,   573,   817,   818,    60,   200,    61,
-   424,    62,    63,  1060,   281,   598,    64,   995,   787,    65,
-   579,  1589,  1611,  1612,  1399,  1050,  1559,    66,    67,    68,
-    69,    88,    70,    71,    72,   567,   812,  1039,   380,    73,
-    74,    75,   237,   395,   783,   988,    76,    77,    78,   609,
-   436,   603,   604,    79,    80,    81,    82,   287,  1633,  1640,
-  1644,    83,   618,  1441,  1544,  1545,   511,   244,  1502,   222,
-  1504,  1570,  1571,  1604,   398,   289,   290,  1177,  1333,   764,
-   972,   973,  1327,  1432,  1542,  1594,  1595,   420,   974,   486,
-   913,   357,   358,   359,   360,   361,   574,   451,   463,   446,
-   362,   363,   441,   613,   851,   364,   365,   467,   457,   646,
-   367,   481,   482,   910,  1115,   368,   717,   942,   712,   508,
-   655,   622,   623,   640,   641,   648,   891,  1105,   656,  1139,
-  1140,  1300,  1301,   369,   766,   525,   526,   370,   371,   165,
-   461,   262,  1259,   767,  1535,   232,   291,   373,   241,   304,
-   374,   375,   376,   377,   257,   576,   378,   695,   230
+static const short yydefgoto[] = {  1648,
+    33,    34,    35,    36,    37,   400,   545,   795,  1340,   999,
+  1192,    38,   521,   518,    39,    40,    41,   541,    42,    43,
+   782,   987,   235,   533,  1183,    44,   551,   552,   553,  1032,
+  1033,  1024,  1034,  1035,  1476,  1241,   554,   555,  1368,  1009,
+  1449,  1450,  1479,  1523,  1524,  1579,  1020,    45,   402,   556,
+   557,    46,   412,   587,  1057,  1058,  1059,    47,   181,    48,
+    49,   407,   565,   566,  1250,  1396,  1482,  1584,  1585,    50,
+    51,   279,   182,   590,   415,   591,   592,  1060,    52,    53,
+   207,   310,   432,    54,   214,   215,   216,   840,  1074,    55,
+    56,   183,  1067,  1403,  1404,  1405,  1406,  1491,  1535,    57,
+    58,    59,  1045,   410,   574,   818,   819,    60,   200,    61,
+   424,    62,    63,  1061,   281,   599,    64,   996,   788,    65,
+   580,  1590,  1612,  1613,  1400,  1051,  1560,    66,    67,    68,
+    69,    88,    70,    71,    72,   568,   813,  1040,   380,    73,
+    74,    75,   237,   395,   784,   989,    76,    77,    78,   610,
+   436,   604,   605,    79,    80,    81,    82,   287,  1634,  1641,
+  1645,    83,   619,  1442,  1545,  1546,   512,   244,  1503,   222,
+  1505,  1571,  1572,  1605,   398,   289,   290,  1178,  1334,   765,
+   973,   974,  1328,  1433,  1543,  1595,  1596,   420,   975,   488,
+   916,   357,   358,   359,   360,   361,   575,   451,   463,   446,
+   362,   363,   441,   614,   852,   364,   365,   467,   457,   647,
+   367,   483,   484,   913,  1118,   368,   719,   945,   714,   477,
+   656,   623,   624,   641,   642,   649,   892,  1106,   657,  1142,
+  1143,  1302,  1303,   369,   767,   526,   527,   370,   371,   165,
+   461,   262,  1260,   768,  1536,   232,   291,   373,   241,   304,
+   374,   375,   376,   377,   257,   577,   378,   697,   230
 };
 
-static const short yypact[] = { 14006,
-   192,   129, 13511,   129,  1933, 13511,    65,  2257,   129,   -58,
-    73,    49,    87,    49,   129,   243, 12870, 12568,   129, 13511,
-    61,    57,    91, 12568,    96,   156,    73, 12568, 13662, 13813,
- 12568,    57, 14006,   135,-32768,-32768,-32768,-32768,-32768,-32768,
+static const short yypact[] = { 13937,
+   246,   264, 13442,   264,  1338, 13442,    20,  4215,   264,   -92,
+    60,    55,    40,    55,   264,    80, 12801, 12499,   264, 13442,
+   -10,   -20,    63, 12499,    76,   163,    60, 12499, 13593, 13744,
+ 12499,   -20, 13937,   142,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768, 12499,   131,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768, 12568,   154,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768, 12499,-32768,   131,
+ 13442, 13442,-32768,-32768, 13442, 13442,-32768, 13442, 12499,-32768,
+   193, 10521,   225,    32,-32768, 12499, 13442,   131,-32768, 13442,
+-32768, 13442, 13442, 13442,-32768,  1013,   392,-32768, 13442, 13442,
+-32768,   239,-32768,-32768,-32768,-32768,    68,   371,-32768,-32768,
+-32768,-32768,-32768,   386,   276,-32768, 12499,   405,-32768,-32768,
+   418,  5123,    17,   383,   -63,-32768,-32768,   422,-32768,-32768,
+-32768,   441,-32768,-32768, 12499,-32768,   355, 13442,-32768,-32768,
+-32768,-32768,-32768, 12499,    68,-32768,   410,-32768,   413,-32768,
+-32768,   411,   334,-32768,   335,-32768,   439,   341,   439,   562,
+   152,   450,-32768,   358,-32768,   591,-32768,   543,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   390,
+-32768,-32768, 13442,   508,-32768,-32768,   589,   501,-32768,   412,
+-32768,-32768,   554, 10904,-32768,   358,-32768,   415,-32768,    76,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   436,   434,
+-32768,-32768, 13442,    24,   420, 13442, 13442,   423,   534,   534,
+-32768,   447,   469,-32768,   474,   594,   475,   485,-32768,   498,
+   626,   707,   534,  7826,-32768,   502,   517,   523,   104,   646,
+   552,-32768,-32768,-32768,   171,  1935,   203,  7826,   512,-32768,
+  7826,-32768,  7826,  7826,  7826,  7205,    76,   533,-32768,-32768,
+-32768,-32768,   574,-32768,   234,   794,-32768,  9875,   512,    26,
+-32768,   586,   583,-32768,   587,-32768,-32768,   -99,-32768,-32768,
+-32768,    12,    45,    45, 10716, 12499,   685,-32768,   501,-32768,
+   434,-32768,-32768,-32768, 12499,-32768,-32768,    52,   642,   182,
+ 12311,   814,   182,   722,-32768,-32768,   250,   664,  3076,   647,
+-32768,   456,    76, 10353,-32768,   752,-32768,   788,  7826,-32768,
+ 13442, 12499,-32768,-32768,-32768,-32768, 12952,-32768,-32768, 13442,
+ 13442,-32768,   725,-32768, 13442,    28,   789,-32768,  7826,-32768,
+-32768,   823,   436,   436,   436,-32768,-32768,   736,   833,   436,
+-32768,   729,   730,   745,   746,-32768,-32768,   534,-32768,  1547,
+   641,   436,-32768,  9056,  7205,   753,-32768,  4502,   594,-32768,
+-32768,-32768,-32768,-32768,   440,  7826,-32768,   645,   645,   645,
+   645,   638,   643,   649,  1949,-32768,   105,-32768,   436, 11928,
+  7826,  8033,-32768,    48,  7826,   123,  7826,-32768,-32768,  7412,
+  5342,  5549,  5756,  5963,  6170,  6377,  6584,  3331,-32768,   163,
+  5123,   820, 11055,  3479, 13442,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   512,    -8,-32768,   654,   587,   256,
+-32768,   704,    87,-32768,-32768,   659,    33,   865,   865,   865,
+-32768,   131,-32768,-32768,   186,   665, 13442,   821,   828,   669,
+   314,-32768,-32768,-32768,-32768,   395,-32768,  2994,   736,   186,
+-32768,-32768,-32768,-32768,   815,   817,   697,   757,-32768,   818,
+-32768,-32768,-32768,   401,-32768,-32768,-32768,-32768,   721,   829,
+    -4,-32768,    -4,    -4,    -4,    -4,-32768,   755,   706,   709,
+   438,-32768, 12499,   808,  9875,-32768,-32768,   692,   696,   699,
+-32768,-32768, 12650,   445,-32768,   512,   802,    80,   710,-32768,
+ 12650,  2435,   830,   914,   712,   713,   449,    80,   714,-32768,
+-32768,-32768,   715,   893,   723,   228,   197,   843,   876,-32768,
+ 13442,   460,   726,   728,   731,   732,  9056,  9056,  9056,  9056,
+   733,   367,   512,   735,-32768,   -99,-32768,    74,   738,   824,
+  6791,  7205,  6791,  6791,  2607,   -60,   739,  2243,-32768,   478,
+  7826,   741,   749,   742,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768, 12568,-32768,   154,
- 13511, 13511,-32768,-32768, 13511, 13511,-32768, 13511, 12568,-32768,
-   183, 10590,   220,    39,-32768, 12568, 13511,   154,-32768, 13511,
--32768, 13511, 13511, 13511,-32768,   688,   329,-32768, 13511, 13511,
--32768,   210,-32768,-32768,-32768,-32768,    29,   313,-32768,-32768,
--32768,-32768,-32768,   344,   197,-32768, 12568,   348,-32768,-32768,
-   357,  5028,    19,   310,   -82,-32768,-32768,   342,-32768,-32768,
--32768,   372,-32768,-32768, 12568,-32768,   109, 13511,-32768,-32768,
--32768,-32768,-32768, 12568,    29,-32768,   327,-32768,   347,-32768,
--32768,   349,   277,-32768,   278,-32768,   373,   275,   373,   505,
-   252,   398,-32768,   304,-32768,   525,-32768,   473,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   312,
--32768,-32768, 13511,   439,-32768,-32768,   515,   423,-32768,   346,
--32768,-32768,   490, 10973,-32768,   304,-32768,   354,-32768,    96,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   387,   271,
--32768,-32768, 13511,    97,   368, 13511, 13511,   378,   482,   482,
--32768,   388,   411,-32768,   414,   507,   417,   425,-32768,   436,
-   539,   595,   482,  7731,-32768,   446,   452,   456,  -103,   554,
-   474,-32768,-32768,-32768,   -13,   902,    53,  7731,-32768,-32768,
-  7731,-32768,  7731,  7731,  7731,  7110,    96,   465,-32768,-32768,
--32768,-32768,   491,-32768,    93,   717,-32768,  9962,   509,    16,
--32768,   523,   524,-32768,   528,-32768,-32768,   150,-32768,-32768,
--32768,    25,    22,    22, 10785, 12568,   622,-32768,   423,-32768,
-   271,-32768,-32768,-32768, 12568,-32768,-32768,    59,   573,   104,
- 12380,   745,   104,   649,-32768,-32768,    45,   590,  4219,   580,
--32768,   526,    96, 10422,-32768,   689,-32768,   726,  7731,-32768,
- 13511, 12568,-32768,-32768,-32768,-32768, 13021,-32768,-32768, 13511,
- 13511,-32768,   662,-32768, 13511,    36,   729,-32768,  7731,-32768,
--32768,   769,   387,   387,   387,-32768,-32768,   676,   999,   387,
--32768,   674,   675,   678,   680,-32768,-32768,   482,-32768,  1279,
-   569,   387,-32768,  8961,  7110,   687,-32768,  4407,   507,-32768,
--32768,-32768,-32768,-32768,   519,   576,   576,   576,   576,   574,
-   575,   578,  2320,-32768,    88,-32768,   387, 11997,  7731,  7938,
--32768,   200,  7731,    82,  7731,-32768,-32768,  7317,  5247,  5454,
-  5661,  5868,  6075,  6282,  6489,  1549,  7731,-32768,   156,  5028,
-   754, 11124,  3208, 13511,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   509,    -1,-32768,   585,   528,   152,-32768,
-   630,    34,-32768,-32768,   589,    38,   805,   805,   805,-32768,
-   154,-32768,-32768,   132,   603, 13511,   766,   770,   610,   118,
--32768,-32768,-32768,-32768,   162,-32768, 14255,   676,   132,-32768,
--32768,-32768,-32768,   755,   751,   632,   692,-32768,   748,-32768,
--32768,-32768,   246,-32768,-32768,-32768,-32768,   659,   768,   -93,
--32768,   -93,   -93,   -93,   -93,-32768,   693,   643,   644,   297,
--32768, 12568,   749,  9962,-32768,-32768,   631,   633,   634,-32768,
--32768, 12719,   393,-32768,   509,   734,   243,   636,-32768, 12719,
-  9780,   757,   844,   641,   642,   396,   243,   646,-32768,-32768,
--32768,   647,   820,   654,   191,    24,   780,   809,-32768, 13511,
-   400,   666,   670,   681,   682,  8961,  8961,  8961,  8961,   679,
-   376,   509,   690,-32768,   150,-32768,    -8,   686,   782,  6696,
-  7110,  6696,  6696,  2922,   -49,   696,-32768,   777,  7731,   697,
-   707,   704,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1547,   754,-32768,
+   762,   763,-32768,   764,   765,   766,-32768,  8033,  8033,  8033,
+  8033,  8033,  7826,    62,   512,   767,-32768,   -99,   768,-32768,
+   332,-32768,-32768,   910,  8033,-32768,  7826,   640,   770,   779,
+  6998,   440,   780,   782,  6998,   950,   783,   784,  6998,  2526,
+   790,   795,  6998,  2526,   803,   805,  6998,   115,   813,   816,
+  6998,   115,   819,   825,  6998,   645,   835,   836,  6998,   645,
+-32768, 12499,-32768,  9836,   501,-32768,   734,-32768,-32768,   751,
+-32768,   -34,   734,-32768, 11552,   501, 11206,   804,-32768,-32768,
+-32768,   245, 13442,-32768,-32768, 12311,-32768, 13442, 13442, 13442,
+ 13442,-32768,-32768,-32768,   958,  9446,   326,   837,   844, 13442,
+ 12311,   881, 13442,-32768,   931,   582,-32768,   958, 12499,   250,
+    51,   834,-32768,-32768, 12123,-32768,-32768,   919, 12123,    64,
+   436,-32768,-32768,-32768,-32768,-32768,-32768, 10521, 10158, 10158,
+ 10353,-32768,   936,    80, 13442,-32768, 13103, 13442,-32768,   939,
+-32768, 13442,-32768,-32768,-32768,  5123,  5123,-32768,  3331, 13442,
+ 13442,-32768,-32768,-32768,   436,-32768,  5123,-32768,-32768,  7826,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   436,-32768,
+  9056,  9056,  7205,  4709,   238,   847,   847,   381,-32768,  9056,
+  9251,  9056,  9056,  9056,  9056,  3331,-32768,  3686,  7205,  7826,
+  7205,  1024,-32768,-32768,   848,   -60,   849,   854,  7205,-32768,
+  7826,   512,   856,  1026,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,    37,  1980,   224,-32768,   741,-32768,  8033,   436,
+   436,  9056,  7205,  4916,   605,   860,   860,   860,   860,   890,
+  8033,  8240,  8033,  8033,  8033,  8033,  3331,-32768,  3893, 13978,
+-32768,-32768,-32768,   101,   859,   910,   736,   736,   862,   736,
+   736,   863,   736,   736,   866,   736,   736,   869,   736,   736,
+   870,   736,   736,   871,   736,   736,   872,   736,   736,   880,
+-32768, 12499,   861,  1065, 13291,   894,  1054, 11357,-32768,-32768,
+-32768,-32768,-32768,  7205,-32768,-32768,   988,-32768,   491,-32768,
+   525,  2994,-32768,    25,-32768,   999,-32768,  1066,   928,   903,
+  9446,-32768,  9446,  9446,  9446,  9446,  9446,  9446,  1342,   904,
+-32768,-32768,   905,-32768, 13442, 13442,   529,-32768,   911,-32768,
+-32768,-32768,  1071,-32768,   912, 13442,  8447,  1038,  1077, 13442,
+-32768,-32768,   582,-32768,-32768,   928,  1098,  1067,-32768,-32768,
+-32768,    17,-32768,   390,  1143,-32768,-32768,-32768,-32768,-32768,
+  1039,-32768,   993, 13442,-32768,   472,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   954,   932,  5123,-32768,-32768,
+-32768,-32768,  1114,-32768,-32768,    14,   536,   942,-32768,-32768,
+   944,    14,  9875,   945,   259,   946,   948,  6791,  6791,  6791,
+   949,-32768,   864,   238,   266,   266,   847,   847,-32768,-32768,
+   -18,   -60,  9875,-32768,  7205,-32768,-32768,-32768,-32768,   -60,
+  2504,-32768,   736,   951,-32768,-32768,  7619,   955,   741,   961,
+-32768,   361,   959,   960,   963,   968,  6791,  6791,  6791,   969,
+-32768,   935,   605,   289,   289,   860,   860,-32768,-32768,    46,
+-32768,   973,   979,-32768,  8033, 13978,   987,   990,-32768,   992,
+   994,-32768,  1011,  1014,-32768,  1015,  1016,-32768,  1017,  1018,
+-32768,  1019,  1021,-32768,  1022,  1027,-32768,  1029,  1032,-32768,
+   832, 12499,  1124, 11928,-32768,-32768,  1191,  1185,-32768,-32768,
+-32768,  1104,-32768, 13442,-32768,-32768,  1224,  1226, 13442,   131,
+  1072,-32768,  9446, 10398,   453,  1047,  1047,  1047,  1047,  1563,
+  9446, 14097,  1046,   255,  9446,   351,  9446,-32768,-32768,  9641,
+  9446,  9446,  9446,  9446,  9446,  9446,  9446,  3331,-32768,  4295,
+   537,   541,-32768, 13442,-32768,  9446,   660,  1048,-32768,  1050,
+  1052,-32768,-32768,-32768,  8654,  8654,  8654,  8654,  8654,  8654,
+   771,  1056,-32768,-32768,-32768,   420,-32768,-32768,  1122,  1236,
+   250,-32768,-32768,    76, 12499,    76,-32768,-32768,-32768,-32768,
+ 13442,    14,  1194,   501,-32768,-32768,-32768,   501,-32768,  3331,
+-32768,-32768,  1057,  1058,  1061,-32768,-32768,   -60,   512,  1068,
+   736,  1069,  1073,  9875,   736,-32768,   741,  3331,-32768,-32768,
+-32768,-32768,  1076,  1079,  1083,-32768,-32768,-32768, 14097,   935,
+-32768,  1084,  1074,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,  1279,   694,-32768,   706,   708,
--32768,   711,   712,   714,-32768,  7938,  7938,  7938,  7938,  7938,
-  7731,   134,   509,   715,-32768,   150,   718,-32768,    27,-32768,
--32768,   440,  7938,-32768,  7731, 10023,   719,   720,  6903,   519,
-   722,   723,  6903,  1108,   727,   730,  6903,  2017,   733,   735,
-  6903,  2017,   736,   738,  6903,   114,   740,   742,  6903,   114,
-   743,   746,  6903,   576,   752,   753,  6903,   576,-32768,  2902,
- 12568,-32768,  9741,   423,-32768,   731,-32768,-32768,   716,-32768,
-   -40,   731,-32768, 11621,   423, 11275,   750,-32768,-32768,-32768,
-   230, 13511,-32768,-32768, 12380,-32768, 13511, 13511, 13511, 13511,
--32768,-32768,-32768,   876,  9351,   270,   759,   760, 13511, 12380,
-   811, 13511,-32768,   884,   504,-32768,   876, 12568,    45,    23,
-   771,-32768,-32768, 12192,-32768,-32768,   851, 12192,    44,   387,
--32768,-32768,-32768,-32768,-32768,-32768, 10590, 10227, 10227, 10422,
--32768,   860,   243, 13511,-32768, 13172, 13511,-32768,   865,-32768,
- 13511,-32768,-32768,-32768,  5028,  5028,-32768,  1549, 13511, 13511,
--32768,-32768,-32768,   387,-32768,  5028,-32768,-32768,  7731,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   387,-32768,  8961,
-  8961,  7110,  4614,   461,   773,   773,   547,-32768,  8961,  9156,
-  8961,  8961,  8961,  8961,  1549,-32768,  3415,  7110,  7731,  7110,
-   946,-32768,-32768,   778,   -49,   779,   787,  7110,-32768,   783,
-   947,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    48,
-  2711,   119,-32768,   697,-32768,  7938,   387,   387,  8961,  7110,
-  4821,   604,   791,   791,   791,   791,  1360,  7938,  8145,  7938,
-  7938,  7938,  7938,  1549,-32768,  3622, 14047,-32768,-32768,-32768,
-   146,   790,   440,   676,   676,   799,   676,   676,   801,   676,
-   676,   802,   676,   676,   803,   676,   676,   807,   676,   676,
-   808,   676,   676,   816,   676,   676,   818,  7731,   509,-32768,
- 12568,   792,  1020, 13360,   832,   998, 11426,-32768,-32768,-32768,
--32768,-32768,  7110,-32768,-32768,   930,-32768,   403,-32768,   404,
- 14255,-32768,    77,-32768,   942,-32768,  1003,   863,   839,  9351,
--32768,  9351,  9351,  9351,  9351,  9351,  9351,  1522,   848,-32768,
--32768,   849,-32768, 13511, 13511,   421,-32768,   852,-32768,-32768,
--32768,  1014,-32768,   855, 13511,  8352,  1001,  1018, 13511,-32768,
--32768,   504,-32768,-32768,   863,  1036,  1000,-32768,-32768,-32768,
-    19,-32768,   312,  1080,-32768,-32768,-32768,-32768,-32768,   977,
--32768,   929, 13511,-32768,   257,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   898,   880,  5028,-32768,-32768,-32768,
--32768,  1049,-32768,-32768,     0,   422,   881,-32768,-32768,   883,
-     0,  9962,   888,   170,   889,   891,  6696,  6696,  6696,   892,
--32768,   853,   461,   153,   153,   773,   773,-32768,-32768,   -20,
-   -49,  9962,-32768,  7110,-32768,-32768,-32768,-32768,   -49,   676,
-   899,-32768,-32768,  7524,   900,   697,   904,-32768,   253,   906,
-   907,   909,   916,  6696,  6696,  6696,   931,-32768,   908,   604,
-   205,   205,   791,   791,-32768,-32768,   -17,-32768,   933,   882,
--32768,  7938, 14047,   934,   935,-32768,   937,   941,-32768,   943,
-   945,-32768,   948,   951,-32768,   953,   954,-32768,   955,   956,
--32768,   958,   959,-32768,   960,   962,-32768,  9899,-32768,   468,
- 12568,  1093, 11997,-32768,-32768,  1145,  1118,-32768,-32768,-32768,
-  1025,-32768, 13511,-32768,-32768,  1154,  1155, 13511,   154,   994,
--32768,  9351, 10467,   846,   969,   969,   969,   969,  2047,  9351,
- 14166,   968,   206,  9351,    90,  9351,-32768,-32768,  9546,  9351,
-  9351,  9351,  9351,  9351,  9351,  9351,  1549,-32768,  4024,   432,
-   433,-32768, 13511,-32768,  9351,   516,   971,-32768,   972,   973,
--32768,-32768,-32768,  8559,  8559,  8559,  8559,  8559,  8559,  1047,
-   975,-32768,-32768,-32768,   368,-32768,-32768,  1052,  1161,    45,
--32768,-32768,    96, 12568,    96,-32768,-32768,-32768,-32768, 13511,
-     0,  1127,   423,-32768,-32768,-32768,   423,-32768,  1549,-32768,
--32768,   987,   989,   990,-32768,-32768,   -49,   991,   676,   993,
-   995,  9962,   676,-32768,   697,  1549,-32768,-32768,-32768,-32768,
-   996,   997,  1002,-32768,-32768,-32768, 14166,   908,-32768,  1010,
-  1015,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   509,  1136,
--32768,  1136,   468,-32768,  1136,-32768,  1162,-32768, 12568,-32768,
-  7110,  7731,  1109,    96,-32768,-32768,  8559,-32768,  1016,-32768,
-  1038,  9940,-32768, 10467,  1236,-32768, 14166,-32768,    80,-32768,
--32768,   553, 14166,  1019,  9351, 10063,   846,  1655,  2130,  2130,
-   238,   238,   969,   969,-32768,-32768,   438, 10003,  1147,-32768,
-  1021,  2260,-32768,  8559,   387,   387,   932,  1023,  1023,  1023,
-  1023,   939,  8766,  8559,  8559,  8559,  8559,  8559,  8559,  8559,
-  1549,  3829,  1180,-32768,     6,  1158,-32768,  1189,   423,  1043,
--32768,  1039,  1040,-32768,-32768,     3,  1041,   849,   423,-32768,
-   998,   998,  1042,-32768,-32768,-32768,-32768,  1045,-32768,-32768,
-  1046,-32768,  1050,-32768,-32768,-32768,-32768,-32768, 14166,-32768,
--32768,-32768,-32768,-32768,-32768, 12568,-32768,   -49,  9962,  1263,
-  1186,-32768,  1047,   154,-32768,  1549, 14166,   444,-32768,-32768,
--32768,-32768,  1271, 14166,   553,  9351,-32768, 13511,-32768,-32768,
-   188,  1054,  1057,-32768,   932,  1047,   826,   826,   274,   274,
-  1023,  1023,-32768,-32768,   472,  1047,   202,  1204,-32768,-32768,
--32768, 13511,    96,  1142, 13511,   851, 13511,  1549,  1549,   -26,
- 13511,   998,  1118,  1118,-32768,-32768,-32768,-32768,-32768,    15,
--32768,  1188,  1281,-32768,-32768,  1069,-32768, 14166,-32768, 14166,
-   495, 10003,   368,  1549,-32768,-32768,  8559,-32768,-32768,-32768,
-    33,-32768,  1204,  1073,-32768,  1139,-32768,-32768,-32768,-32768,
--32768,  1099,-32768,-32768,-32768,   496,  1118,  1109,  1109,  1081,
-  1082,  1079,   243,  1190,-32768,  7731,-32768,-32768,-32768,-32768,
-  1180,  1085,  1047,    56,    56,-32768,   203,-32768,   379,-32768,
-     3,  1109,-32768,-32768,  7731, 11809,-32768,  5028,  1263,  1089,
--32768,  2880,  1204,-32768,-32768,  1312,    75,-32768,-32768,-32768,
--32768,-32768,   502,-32768,-32768,-32768,   109,   109,-32768,-32768,
-   -26,  1186,  2619,   521,-32768,-32768,  1095,     0,  1188,  7731,
--32768,-32768,   374,-32768,-32768,-32768,-32768,-32768,   203,-32768,
-  1103,   109,  1110,  1100,-32768,  1282,-32768, 11809,-32768, 13511,
-   423,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1111,-32768,
--32768,   195,-32768,-32768,-32768,   998,-32768,  1249,  1252,-32768,
-  1118,-32768, 13511,-32768,-32768,  1113,  1340,  1342,-32768
+  1223,-32768,  1223,   832,-32768,  1223,-32768,  1249,-32768, 12499,
+-32768,  7205,  7826,  1197,    76,-32768,-32768,  8654,-32768,  1092,
+-32768,  1117,  3275,-32768, 10398,  1313,-32768, 14097,-32768,   376,
+-32768,-32768,  1235, 14097,  1096,  9446, 10035,   453,  1053,  2621,
+  2621,   331,   331,  1047,  1047,-32768,-32768,   542,  9994,  1225,
+-32768,  1100,  1607,-32768,  8654,   436,   436,   978,  1099,  1099,
+  1099,  1099,   822,  8861,  8654,  8654,  8654,  8654,  8654,  8654,
+  8654,  3331,  4100,  1254,-32768,   223,  1232,-32768,  1263,   501,
+  1109,-32768,  1106,  1111,-32768,-32768,     0,  1105,   905,   501,
+-32768,  1054,  1054,  1112,-32768,-32768,-32768,-32768,-32768,  1113,
+-32768,-32768,  1115,-32768,  1118,-32768,-32768,-32768,-32768,-32768,
+ 14097,-32768,-32768,-32768,-32768,-32768, 12499,-32768,   -60,  9875,
+  1333,  1253,-32768,   771,   131,-32768,  3331, 14097,   545,-32768,
+-32768,-32768,-32768,  1336, 14097,  1235,  9446,-32768, 13442,-32768,
+-32768,   349,  1119,  1120,-32768,   978,   771,   842,   842,   354,
+   354,  1099,  1099,-32768,-32768,   549,   771,    43,  1260,-32768,
+-32768,-32768, 13442,    76,  1198, 13442,   919, 13442,  3331,  3331,
+   -55, 13442,  1054,  1185,  1185,-32768,-32768,-32768,-32768,-32768,
+   173,-32768,  1245,  1341,-32768,-32768,  1130,-32768, 14097,-32768,
+ 14097,   556,  9994,   420,  3331,-32768,-32768,  8654,-32768,-32768,
+-32768,    77,-32768,  1260,  1132,-32768,  1199,-32768,-32768,-32768,
+-32768,-32768,  1158,-32768,-32768,-32768,   564,  1185,  1197,  1197,
+  1139,  1140,  1141,    80,  1248,-32768,  7826,-32768,-32768,-32768,
+-32768,  1254,  1145,   771,    44,    44,-32768,   384,-32768,   258,
+-32768,     0,  1197,-32768,-32768,  7826, 11740,-32768,  5123,  1333,
+  1148,-32768,  2222,  1260,-32768,-32768,  1367,    31,-32768,-32768,
+-32768,-32768,-32768,   568,-32768,-32768,-32768,   355,   355,-32768,
+-32768,   -55,  1253,  1634,   579,-32768,-32768,  1153,    14,  1245,
+  7826,-32768,-32768,   399,-32768,-32768,-32768,-32768,-32768,   384,
+-32768,  1152,   355,  1157,  1150,-32768,  1329,-32768, 11740,-32768,
+ 13442,   501,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1160,
+-32768,-32768,   164,-32768,-32768,-32768,  1054,-32768,  1305,  1308,
+-32768,  1185,-32768, 13442,-32768,-32768,  1167,  1394,  1395,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,  1311,-32768,-32768,-32768,  1086,   950,   789,-32768,   544,
-   311,-32768,   970,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   570,   557,   571,-32768,
--32768,-32768,   330,   133,-32768,  -675,-32768,  -504,-32768,  -115,
-   -91, -1190,  -179,  -212,  -149,  -180,-32768,-32768,-32768,-32768,
-   577,-32768,-32768,-32768,-32768,-32768,   -15,-32768,-32768,-32768,
--32768,-32768,-32768,  -779,-32768,-32768,-32768,-32768,  -233,-32768,
--32768,-32768,-32768,  -176,   334,-32768,   548,   559,-32768,-32768,
-  1363,  1148,  1005,-32768,  1378,-32768,  1083,   784,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   -89,  -162,  -187,-32768,
--32768,-32768,   -81,  1114,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  1211,  -189,-32768,-32768,-32768,   -31,-32768,
--32768,-32768,  -177,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   338,-32768,-32768,-32768,-32768,-32768,-32768,   367,-32768,
--32768,-32768,  1377,-32768,-32768,-32768,-32768,  -221,-32768,-32768,
- -1214,  -794,   572,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1008,  1075, -1234,-32768,  -185,-32768,   910,  -154,  -595,
-  -175,-32768,  -184,-32768,-32768,  -195,   -71, -1369, -1424,  -524,
--32768, -1106,    98, -1014,-32768,-32768,  -196,  -344,  -963,-32768,
-  -904,  -469,  1077,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  -373,  -253,-32768,-32768,-32768,  1112,-32768,-32768,  -203,
--32768,   317,-32768,-32768,-32768,  1355,-32768,-32768,  -660,  -511,
-  -436,-32768,-32768,  -793,  -546,  -787,-32768,-32768,  -612,-32768,
--32768,-32768,-32768,  -190,   912,-32768,   653,  -822,   922,-32768,
-   110,  1241,-32768,  -938,   -97,  -101,    62,   764,-32768,-32768,
-  1815,  1424,    -6,   -16,  -168,  -703,    -3,   263,-32768
+-32768,  1363,-32768,-32768,-32768,  1138,   998,   845,-32768,   595,
+   366,-32768,  1020,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   621,   607,   623,-32768,
+-32768,-32768,   382,   187,-32768, -1160,-32768,  -498,-32768,  -863,
+   -46, -1166,  -136,  -157,  -106,  -137,-32768,-32768,-32768,-32768,
+   617,-32768,-32768,-32768,-32768,-32768,   130,-32768,-32768,-32768,
+-32768,-32768,-32768,  -787,-32768,-32768,-32768,-32768,  -189,-32768,
+-32768,-32768,-32768,  -176,   380,-32768,   596,   598,-32768,-32768,
+  1398,  1181,  1040,-32768,  1425,-32768,  1126,   831,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   -45,  -118,  -147,-32768,
+-32768,-32768,   -41,  1159,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,  1257,  -185,-32768,-32768,-32768,   -39,-32768,
+-32768,-32768,  -132,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   509,-32768,-32768,-32768,-32768,-32768,-32768,   416,-32768,
+-32768,-32768,  1431,-32768,-32768,-32768,-32768,  -224,-32768,-32768,
+ -1208,  -795,   625,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  1070,  -220, -1103,-32768,  -135,-32768,   965,  -101,  -600,
+  -123,-32768,  -130,-32768,-32768,  -195,   -15, -1371, -1387,  -524,
+-32768, -1125,   154, -1122,-32768,-32768,  -140,  -369,  -965,-32768,
+  -882,  -471,  1135,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  -377,  -216,-32768,-32768,-32768,  1116,-32768,-32768,  -206,
+-32768,   365,-32768,-32768,-32768,  1763,-32768,-32768,  -611,  -345,
+  -443,-32768,-32768,  -767,  -481,  -763,-32768,-32768,  -620,-32768,
+-32768,-32768,-32768,   798,   971,-32768,   716,  -817,   977,-32768,
+    27,  1291,-32768,  -966,   -43,  -119,    67,  1144,-32768,-32768,
+  2085,  1551,  -197,   -16,  -169,  -386,    -3,   318,-32768
 };
 
 
-#define        YYLAST          14459
+#define        YYLAST          14306
 
 
 static const short yytable[] = {   166,
-   775,   259,   185,   301,  1016,   280,   299,  1170,   242,  1118,
-  1345,   845,   773,   225,   229,   388,   233,   777,   366,   292,
-   229,   856,  1075,  1076,   229,   248,   250,   229,   647,  1037,
-  1393,   786,   383,  1081,   305,   575,   759,   894,  1179,   896,
-   897,  1493,  1494,   888,   533,   922,   923,   924,   925,   926,
-   763,   763,  1488,  1112,   208,   379,  1113,   545,   519,  1038,
-   784,   515,   941,   536,  1328,   537,   442,   184,  1538,  1539,
-  1554,  1575,   606,   938,   889,   203,   771,  1085,   509,   459,
-   229,  1046,   561,   889,  1086,   779,   209,   805,   547,   874,
-   875,   876,   877,   843,   723,   516,   864,  1532,   284,  1540,
-   538,  -575,  1353,   889,  1047,   562,   889,   306,   939,   210,
-  1042,  1607,  1562,   308,  1045,   889,   186,   433,  1186,  -575,
-   437,   820,  1537,   307,   202,  1122,  1450,   228,   384,   865,
-   886,   548,  1123,   239,   209,  1576,   389,   246,  1541,   724,
-   251,   928,   607,   285,     6,   940,     7,  1354,   780,   217,
-  1048,   725,   480,  1142,  1555,   211,  1608,   210,   549,  1355,
-   608,  1451,  1453,  1577,   229,  1049,   563,   185,   185,    13,
-   212,   263,   265,   204,   185,   229,   890,  1533,   282,  1269,
-   286,   416,   229,   185,  1187,   890,   185,   979,   185,   263,
-   265,  -543,  1479,   255,   524,   185,   185,  1514,  1452,  1480,
-   311,   935,   234,   211,   629,   890,   381,  1276,   890,  -543,
-  1295,  1284,   205,   229,   895,    16,  1645,   890,   212,  1220,
-  1221,  1489,  1437,   240,   774,   510,   240,   240,   206,   240,
-    18,   229,   260,   261,   233,   308,   213,  1067,   311,   266,
-   229,   510,   539,   309,  1261,    86,   718,   861,   220,   542,
-   238,   293,  1348,   294,  1519,  1119,  1507,  -542,   236,    87,
-  1090,   302,  1286,   862,   785,   243,  1641,  1129,  1130,  1131,
-  1132,  1133,  1134,   642,  1114,  -542,   543,   258,   792,   233,
-   719,   720,   221,   428,   213,    28,  1349,  1350,   267,   545,
-   185,  1013,  1520,  1638,   308,   288,   863,  -573,  1551,   713,
-   240,    84,   429,  1563,  1564,   793,   366,  1433,  1127,   185,
-  1435,   660,   185,   438,    85,  -573,  1639,  1548,   721,  1549,
-   547,  1406,   430,  1084,  1351,   308,   315,  1592,   431,   504,
-   505,   372,  1092,  1093,  1094,  1095,  1096,  1097,   506,   929,
-   484,   167,  1116,   800,   387,   801,   201,   930,   931,   932,
-   933,   929,   219,   390,   254,   425,   231,   256,   934,   930,
-   931,   932,   933,   548,   268,   518,   521,   521,   883,   884,
-   934,  -801,   791,  -801,   507,   880,  -808,   885,  1077,   283,
-  1422,   529,   229,   881,   882,   883,   884,   802,   405,   803,
-   549,   229,   406,  1383,   885,   300,   587,   557,  1384,  1385,
-  1386,  1387,  1388,  1389,  1390,   577,  1580,   240,   312,  1581,
-   282,  1582,  1391,   303,     6,  1098,     7,   185,   229,   976,
-   932,   933,   314,   185,   984,   985,   185,   185,   313,   934,
-   981,   605,   316,   879,   240,   647,   614,   615,   616,    13,
-   575,   317,   382,   624,   575,   642,   642,   642,   642,   385,
-  1100,  1101,   490,  1215,  1216,   631,   386,  1169,   929,   392,
-   645,  1109,  1217,   308,  1135,  1257,   930,   931,   932,   933,
-  1397,   814,  1500,   815,  1272,  1273,  1274,   934,   661,   393,
-   662,  1298,   595,   647,   694,    16,   716,   394,   599,  1389,
-  1390,   600,   601,   397,   527,   530,   396,   491,  1391,  1137,
-    18,   401,   399,   492,   535,   788,   789,   790,   768,-32768,
-   768,  1291,  1292,  1293,   404,   713,   713,   713,   713,   713,
-  1320,   805,   830,  1024,   831,   480,  1321,   408,  1025,   480,
-   409,   596,   713,   480,   411,  1024,  1322,   480,   414,   413,
-  1026,   480,   185,   417,  1323,   480,  1527,   418,  1406,   480,
-  1263,   419,  1026,   480,  1586,    28,  1267,  1324,  1377,  1378,
-  1379,  1380,  1381,  1382,   821,  1201,   823,   824,   825,   826,
-  1325,   421,   452,   822,   422,   822,   822,   822,   822,  1624,
-   427,   880,   492,   524,  1027,  1625,  1626,  1326,   229,   881,
-   882,   883,   884,   308,   435,   453,  1027,  1028,   840,   447,
-   885,  1587,   496,  1029,   439,  1588,   840,   796,   440,  1028,
-  1202,   454,    99,   458,   443,  1029,  1203,   497,   841,   372,
-   842,   854,-32768,   855,  1030,   868,   768,   869,  1183,   800,
-  1184,  1185,   645,   645,   645,   645,  1030,   444,   299,   299,
-   445,   366,   366,   448,   109,   498,   841,   510,  1222,  1264,
-  1052,   449,   366,   502,   503,   504,   505,   841,   841,  1369,
-  1370,  1443,   450,  1456,   506,  1457,-32768,  1277,   580,  1508,
-   455,  1509,   462,   581,   881,   882,   883,   884,   464,   642,
-   642,   496,   465,   466,   582,   885,  1103,   485,   642,   642,
-   642,   642,   642,   642,   583,   584,   497,  1517,  1461,  1518,
-   468,   832,   716,   716,   716,   716,   716,  1465,  1466,  1467,
-  1468,  1469,  1470,  1471,  1472,  1207,  1476,   487,   585,   716,
-  1508,   421,  1550,  1561,-32768,   713,   488,  1609,   642,  1610,
-  1208,   507,   502,   503,   504,   505,  1409,   713,   713,   713,
-   713,   713,   713,   506,   512,  1598,  1618,  1365,  1619,   514,
-   513,   531,   880,   541,   558,    16,   566,   229,  1209,   229,
-   881,   882,   883,   884,   987,   578,  1213,  1214,  1215,  1216,
-   529,   885,   768,   592,  1091,   593,   602,  1217,   185,  1180,
-   610,   991,   617,   991,   993,   994,   185,   612,   625,   626,
-   630,  1012,   627,  1040,   628,   605,   991,   649,  1021,  1413,
-   506,   657,   658,   659,   229,   763,   776,  1430,   778,-32768,
-   577,  1061,  1061,  1051,   577,   782,  1423,   930,   931,   932,
-   933,   822,   822,   282,  1062,  1062,   282,   784,   934,   795,
-   185,   797,   185,  1071,   900,   798,   799,   605,   809,   808,
-   813,  1553,   810,   989,   811,  1078,  1079,  1080,  1646,   816,
-   827,   996,   819,   828,   829,   833,   834,   901,   844,   836,
-   835,  1083,   846,   366,   849,   850,   645,   645,   852,   853,
-   970,   859,   975,   857,   858,   645,   645,   645,   645,   645,
-   645,   860,   867,   527,  1193,   866,  1194,  1195,  1196,  1197,
-  1198,  1199,   870,   297,  1438,  1068,   871,  1070,   272,   273,
-   274,   275,   276,   277,   278,  1117,   878,   872,   873,  1203,
-  1120,  1121,   716,   892,   893,   645,   887,  1036,  1411,   912,
-   916,  1473,  1412,   899,   716,   716,   716,   716,   716,   716,
-   914,   915,   917,   997,   918,    91,   325,   919,   920,   264,
-   921,   936,   469,   978,   937,   944,   945,  1568,   947,   948,
-   330,   713,   977,   950,   372,   372,   951,   296,    93,   953,
-   983,   954,   956,   331,   957,   372,   959,   229,   960,   962,
-  1174,  1018,   963,   768,    98,    99,  1506,  1022,   965,   966,
-  1043,  1041,   902,  1065,   336,  1014,  1015,   903,   904,   905,
-   906,   907,   908,   909,  1072,  1104,  1012,   885,  1012,  1012,
-  1012,  1012,  1012,  1012,  1111,  1106,  1107,   109,  1207,  1110,
-   605,   605,   470,   340,  1108,   934,  1143,  1171,  1530,  1531,
-  1340,   185,   265,  1208,   381,  1245,  1146,  1371,  1149,  1152,
-  1155,  1383,    91,   113,  1158,  1161,   471,-32768,-32768,  1387,
-  1388,  1389,  1390,  1164,  1552,  1167,  1172,  1175,  1051,  1256,
-  1391,-32768,  1176,  1181,  1484,    93,  1188,  1189,   880,  1213,
-  1214,  1215,  1216,  1190,  1492,  1192,   881,   882,   883,   884,
-  1217,    98,    99,  1621,  1219,  -808,  1342,   885,  1223,  1224,
-   975,  1225,  1243,  1244,  1344,  1248,  1226,  1250,  1352,  1253,
-  1356,  1254,  1255,  1357,  1358,  1359,  1360,  1361,  1362,  1363,
-  1364,  1258,  1262,  1368,   109,   472,  1260,  1297,  1265,  1372,
-  1266,   619,   620,   929,   164,  1268,  1270,   164,  1271,  1275,
-   490,   930,   931,   932,   933,  1279,  1283,  1285,   164,   164,
-   113,   164,   934,  1287,  1288,   164,  1289,-32768,   716,   164,
-   164,   164,   164,  1290,  1383,  1387,  1388,  1389,  1390,  1384,
-  1385,  1386,  1387,  1388,  1389,  1390,  1391,  1329,  1294,  1331,
-  1296,  1303,  1304,  1391,  1305,   491,  1464,   229,  1306,   694,
-  1307,   492,  1308,  1332,  1334,  1309,   372,   493,  1310,   185,
-  1311,  1312,  1313,  1314,   185,  1315,  1316,  1317,  1012,  1318,
-  1336,  1337,  1341,  1217,  1347,   164,  1012,  1374,  1375,  1376,
-  1012,  1392,  1012,  1394,  1396,  1012,  1012,  1012,  1012,  1012,
-  1012,  1012,  1012,  1410,  1414,  1012,  1415,  1416,  1417,   185,
-  1419,  1012,  1420,  1424,  1425,  1431,  1436,   643,  1440,  1426,
-   265,   265,   265,   265,   265,   265,  1398,  1428,  1401,  1455,
-  1429,  1444,  1445,  1447,  1335,  1454,  1458,  1391,  1459,  1338,
-   229,  1477,  1383,   714,  1482,  1483,  1408,  1384,  1385,  1386,
-  1387,  1388,  1389,  1390,  1485,  1487,  1486,  1491,  1501,  1495,
-   496,  1391,  1496,  1497,  1503,  1505,  1636,  1498,  1510,   164,
-   975,  1515,   164,   164,  1516,   497,   164,   164,  1521,   164,
-   164,   490,  1526,   164,  1543,  1546,  1547,   164,   164,  1557,
-  1558,   164,  1533,   164,   164,   164,  1567,  1565,  1566,  1569,
-   164,   164,  1574,   498,  1600,  1606,  1620,  1442,   499,   500,
-   501,   502,   503,   504,   505,   229,  1628,  1631,   164,  1630,
-  1637,  1632,   506,   265,  1642,  1643,   491,  1590,   841,  1648,
-  1512,  1649,   492,   253,   403,  1247,   164,   807,   493,   164,
-  1035,  1012,   559,   522,   990,   164,  1017,   992,  1373,   494,
-  1605,  1246,  1511,  1400,   366,  1613,  1613,   489,  1462,  1463,
-   265,  1573,   490,  1556,  1579,  1627,  1252,  1064,  1020,   265,
-   265,   265,   265,   265,   265,   265,   265,  1063,   265,   245,
-  1629,   218,   391,   847,   164,   534,   434,  1529,  1591,   643,
-   643,   643,   643,  1615,  1528,   164,   298,  1251,   252,   426,
-  1614,   560,  1074,  1622,  1599,  1623,  1616,   491,   761,  1536,
-  1434,  1634,   473,   492,   164,   772,   980,   164,   164,   493,
-  1281,   762,   229,   295,  1560,  1330,     0,     0,   975,     0,
-   494,   496,   456,     0,     0,     0,     0,   495,     0,     0,
-     0,     0,  1012,     0,  1513,     0,   497,   474,     0,     0,
-     0,     0,     0,     0,     0,     0,  1525,     0,     0,   714,
-   714,   714,   714,   714,     0,     0,     0,     0,   185,     0,
-     0,   768,     0,   768,   498,     0,   714,   185,     0,   499,
-   500,   501,   502,   503,   504,   505,   164,   164,     0,     0,
-     0,     0,     0,   506,     0,     0,   164,     0,     0,     0,
-     0,     0,   164,   265,     0,     0,     0,     0,     0,     0,
-   164,     0,   496,     0,     0,   164,     0,     0,     0,  1200,
-     0,     0,   164,   164,  1201,     0,     0,   497,   164,     0,
-  1585,   164,   164,  1524,     0,   975,   164,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,  1009,  1596,
-   621,     0,  1597,     0,     0,   498,   319,   320,     0,     0,
-   499,   500,   501,   502,   503,   504,   505,     0,     0,  1202,
-     0,     0,    91,   325,   506,  1203,     0,  1128,     0,   469,
-     0,  1204,  1585,     0,     0,     0,     0,   330,     0,   164,
-     0,     0,  1205,     0,     0,    93,     0,     0,     0,  1206,
-   331,  1596,     0,     0,  1597,     0,  1635,   474,     0,     0,
-     0,    98,    99,   164,   332,   164,   333,     0,     0,     0,
-     0,   336,   806,   643,   643,     0,     0,     0,     0,   605,
-     0,     0,   643,   643,   643,   643,   643,   643,     0,     0,
-     0,     0,     0,     0,   109,     0,     0,   164,     0,   470,
-   340,     0,     0,     0,     0,     0,     0,  1201,   474,     0,
-     0,     0,     0,     0,   344,     0,     0,   372,     0,   714,
-   113,     0,   643,   471,  1207,     0,     0,     0,   460,     0,
-     0,   714,   714,   714,   714,   714,   714,     0,     0,  1208,
-     0,     0,   475,   164,     0,   476,     0,   477,   478,   479,
-   483,     0,  1202,   164,     0,     0,     0,     0,  1203,     0,
-     0,   164,     0,     0,  1204,     0,     0,  1209,     0,     0,
-     0,     0,  1210,  1211,  1212,  1213,  1214,  1215,  1216,   346,
-     0,   164,     0,     0,     0,     0,  1217,     0,     0,  1218,
-     0,     0,   472,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,  1009,     0,  1009,  1009,  1009,  1009,  1009,
-  1009,     0,     0,   594,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  1241,
-     0,     0,     0,   611,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   946,     0,     0,     0,   949,   528,     0,
-     0,   952,     0,     0,     0,   955,     0,  1207,     0,   958,
-     0,     0,   654,   961,     0,     0,     0,   964,     0,     0,
-     0,   967,  1208,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   696,     0,     0,     0,   722,     0,   726,
-     0,     0,   730,   734,   738,   742,   746,   750,   754,   758,
-  1209,   760,     0,     0,     0,  1210,  1211,  1212,  1213,  1214,
-  1215,  1216,   164,     0,   164,     0,     0,     0,     0,  1217,
-     0,     0,     0,     0,     0,   164,     0,   164,     0,     0,
-     0,     0,     0,   164,     0,     0,   164,     0,   164,   164,
-   164,   164,     0,     0,     0,   714,     0,     0,     0,     0,
-   164,   164,     0,   164,     0,     0,     0,     0,     0,   164,
-     0,     0,     0,     0,     0,   164,     0,     0,     0,   164,
-     0,     0,     0,     0,     0,     0,     0,     0,   164,   164,
-   164,   164,     0,     0,     0,   164,     0,   164,   164,     0,
-     0,     0,   164,     0,     0,  1009,     0,     0,     0,   474,
-   164,   164,     0,  1009,     0,     0,     0,  1009,     0,  1009,
-     0,     0,  1009,  1009,  1009,  1009,  1009,  1009,  1009,  1009,
-     0,     0,  1009,     0,     0,     0,     0,     0,  1009,     0,
-     0,     0,     0,     0,     0,     0,   474,  1241,  1241,  1241,
-  1241,  1241,  1241,     0,   654,     0,   654,   654,     0,     0,
-     0,  1138,     0,   911,     0,     0,     0,     0,  1144,  1145,
-     0,  1147,  1148,  1407,  1150,  1151,     0,  1153,  1154,   490,
-  1156,  1157,     0,  1159,  1160,     0,  1162,  1163,     0,  1165,
-  1166,     0,   168,     0,     0,   474,     0,     0,   474,     0,
-     0,     0,     0,   169,  1200,   170,     0,     0,     0,  1201,
-   171,     0,     0,     0,     0,   927,   172,   173,     0,     0,
-   174,     0,     0,     0,   491,     0,     0,     0,     0,   943,
-   492,   175,   164,   483,     0,   164,   493,   483,   164,   176,
-     0,   483,  -320,     0,     0,   483,     0,     0,     0,   483,
-  1241,     0,   474,   483,  1202,     0,     0,   483,     0,     0,
-  1203,   483,   177,     0,     0,     0,  1204,     0,  1009,     0,
-   178,   179,     0,     0,     0,   164,   164,  1205,     0,   180,
-     0,     0,     0,     0,  1206,     0,   164,  1241,     0,     0,
-   164,     0,  1201,     0,     0,     0,  1241,  1241,  1241,  1241,
-  1241,  1241,  1241,  1241,     0,  1241,     0,     0,     0,     0,
-     0,     0,     0,     0,   164,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   496,
-     0,     0,     0,     0,  1278,     0,     0,  1202,  1280,     0,
-     0,     0,     0,  1203,   497,     0,     0,   528,     0,  1204,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  1207,
-     0,     0,     0,  1082,     0,     0,     0,  1299,  1011,  1009,
-     0,     0,   498,     0,  1208,     0,     0,   654,-32768,-32768,
-   502,   503,   504,   505,     0,     0,     0,     0,     0,     0,
-     0,   506,     0,  1102,     0,     0,     0,     0,     0,     0,
-     0,     0,  1209,     0,   474,     0,     0,  1210,  1211,  1212,
-  1213,  1214,  1215,  1216,     0,     0,     0,  1200,     0,     0,
-     0,  1217,  1201,     0,  1343,   654,     0,     0,   644,     0,
-  1241,     0,   164,     0,   164,     0,     0,     0,     0,     0,
-     0,     0,  1207,     0,   164,     0,     0,     0,     0,   164,
-     0,     0,     0,     0,   715,     0,     0,  1208,     0,     0,
-     0,     0,   474,     0,     0,     0,     0,  1202,     0,     0,
-     0,     0,  1168,  1203,     0,     0,     0,   489,   474,  1204,
-     0,     0,   490,     0,   164,  1209,     0,     0,     0,     0,
-  1205,-32768,-32768,  1213,  1214,  1215,  1216,  1206,     0,     0,
-     0,     0,     0,  1418,  1217,     0,     0,  1421,     0,     0,
-  1011,     0,     0,     0,     0,   164,   187,     0,     0,     0,
-     0,   164,     0,     0,     0,     0,     0,   491,     0,   188,
-   474,     0,     0,   492,   189,     0,     0,     0,     0,   493,
-   190,   191,     0,     0,   192,     0,     0,   474,     0,     0,
-   494,     0,     0,     0,     0,   193,     0,   495,   474,     0,
-     0,     0,     0,   194,     0,     0,   195,     0,     0,     0,
-     0,     0,  1207,  1011,     0,  1011,  1011,  1011,  1011,  1011,
-  1011,     0,     0,     0,     0,     0,   196,  1208,   197,     0,
-   164,   654,   654,   654,   198,   199,     0,     0,     0,  1011,
-   644,   644,   644,   644,     0,     0,     0,     0,   474,     0,
-     0,     0,     0,     0,   474,  1209,     0,     0,  1282,     0,
-  1210,  1211,  1212,  1213,  1214,  1215,  1216,     0,   654,   654,
-   654,     0,   496,     0,  1217,     0,     0,  1460,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   497,     0,     0,
-     0,     0,   474,     0,     0,     0,     0,     0,     0,     0,
+   259,   776,   185,   301,  1017,   280,  1171,   846,   242,   311,
+   299,  1180,   388,   225,   229,   366,   233,   857,   292,   534,
+   229,   648,  1038,   509,   229,   248,   250,   229,  1076,  1077,
+   895,   576,   897,   898,  1121,  1346,   761,  1394,   787,  1082,
+  1494,  1495,  1115,   764,   228,  1116,  1329,   311,   516,  1489,
+   239,   383,   546,   379,   246,   785,   537,   251,   538,  1576,
+   208,   209,   203,   890,   607,   764,  1187,  1608,  1533,   931,
+   772,   186,   184,   305,  1378,  1379,  1380,  1381,  1382,  1383,
+   229,   520,   517,   548,   210,   220,   806,  1039,   510,   890,
+   202,   284,   209,   539,   720,  1520,   925,   926,   927,   928,
+   929,  1047,   217,   442,  1086,   890,  1539,  1540,  1145,  1087,
+   255,   429,  1609,   944,  1555,   210,   459,   433,   389,   221,
+   437,  1538,  -801,  1577,  1048,   889,   549,  -808,   721,   722,
+   211,   234,  1188,  1521,   608,   725,   285,  1194,   780,  1195,
+  1196,  1197,  1198,  1199,  1200,   212,   306,   384,  1534,   482,
+  1563,  1578,   609,   550,  1125,   875,   876,   877,   878,  1126,
+   204,   211,   307,   416,   229,   891,   723,   185,   185,   890,
+  1049,   263,   265,   286,   185,   229,   212,  1444,   282,   774,
+   726,   236,   229,   185,   778,  1050,   185,  1454,   185,   263,
+   265,   891,   727,   980,   258,   185,   185,   890,  1556,   205,
+  1434,   781,   308,  1436,  1438,   267,   381,   891,   896,  1277,
+   821,   213,   288,   229,  1462,   206,   240,   775,  1490,  1221,
+  1222,   240,   238,  1466,  1467,  1468,  1469,  1470,  1471,  1472,
+  1473,   229,  1477,  1068,   233,   540,  1286,   260,   261,   511,
+   229,   630,   213,   315,   266,   615,   616,   617,   372,   240,
+  1262,   511,   625,  1091,  1646,   240,   293,  1541,   294,   786,
+   844,   387,  1639,  1117,   632,  1642,   302,   932,  1270,   865,
+   390,   891,   243,  1297,   308,   933,   934,   935,   936,   233,
+   240,  1508,   309,   428,   862,  1640,   937,   562,   405,   663,
+   185,   664,   406,     6,  1407,     7,  1542,   887,  1014,   891,
+   863,  1349,   866,  1130,   366,  1552,   932,  1122,  -575,   185,
+   563,   308,   185,   438,   933,   934,   935,   936,    13,  1132,
+  1133,  1134,  1135,  1136,  1137,   937,  -575,   543,   662,  1343,
+   506,   507,   793,   864,   256,  1350,  1351,  1345,   807,   508,
+   486,  1353,  1549,  1357,  1550,   546,  1358,  1359,  1360,  1361,
+  1362,  1363,  1364,  1365,   544,    84,  1369,  1554,  1515,   794,
+   425,   254,  1373,  1354,    16,   519,   522,   522,    85,   938,
+  1288,   564,   792,  1352,   268,  -543,   548,  1078,   941,    18,
+    86,   530,   229,   823,   283,   823,   823,   823,   823,  1085,
+     6,   229,     7,  -543,    87,   977,   588,   558,  1093,  1094,
+  1095,  1096,  1097,  1098,  1424,   578,   982,  -542,  1355,  1480,
+   282,   528,   531,   942,  1099,    13,  1481,   185,   229,   549,
+  1356,   536,  1451,   185,   880,  -542,   185,   185,  1043,   648,
+   308,   606,  1046,  1587,    28,  1564,  1565,   576,  -573,   985,
+   986,   576,   303,-32768,  1101,  1102,   550,  1119,   597,   240,
+   943,   882,   883,   884,   885,  1110,  -573,  1452,   300,  1593,
+   646,    16,   886,  1398,   881,  1138,   312,  1273,  1274,  1275,
+   313,  1501,   882,   883,   884,   885,    18,  -801,   476,   648,
+  1588,   884,   885,   886,  1589,   430,   696,   596,   718,   316,
+   886,   431,  1456,   600,  1453,  1140,   601,   602,   789,   790,
+   791,   314,   317,   494,   935,   936,  1293,  1294,  1295,   769,
+   949,   769,   167,   937,   952,   382,  1204,   201,   955,  1528,
+   806,  1407,   958,   219,   482,   386,   961,   231,   482,   385,
+   964,    28,   482,  1300,   967,   903,   482,   372,   970,   801,
+   482,   802,   392,   185,   482,   393,  1216,  1217,   482,   394,
+   397,  1264,   482,   396,  1384,  1218,  1112,  1268,   904,  1385,
+  1386,  1387,  1388,  1389,  1390,  1391,   932,   401,   399,  1390,
+  1391,   404,   881,  1392,   933,   934,   935,   936,  1392,   408,
+   882,   883,   884,   885,   409,   937,   881,  1581,   240,   229,
+  1582,   886,  1583,  1513,   882,   883,   884,   885,   581,   841,
+   411,  1025,   498,   582,  1625,   886,  1026,   841,  1092,   413,
+  1626,  1627,   417,   797,   583,  1208,   414,   499,  1027,   833,
+   803,   418,   804,  1052,   584,   585,   815,   769,   816,   419,
+  1209,   823,   823,   646,   646,   646,   646,   421,   422,   366,
+   366,   427,   308,   299,   299,-32768,   435,   491,   586,   439,
+   366,  1053,   492,   504,   505,   506,   507,  1081,-32768,   452,
+   440,  1278,  1028,   831,   508,   832,  1214,  1215,  1216,  1217,
+   842,  1084,   843,   443,   855,  1029,   856,  1218,   308,  1025,
+  1258,  1030,   453,   905,  1104,   869,   447,   870,   906,   907,
+   908,   909,   910,   911,   912,   444,  1027,   493,   454,    99,
+   445,   448,  1031,   494,   718,   718,   718,   718,   718,   495,
+   822,   449,   824,   825,   826,   827,  1184,  1120,  1185,  1141,
+   496,   718,  1123,  1124,   450,   458,  1147,  1148,   462,  1150,
+  1151,   109,  1153,  1154,   476,  1156,  1157,  1410,  1159,  1160,
+  1028,  1162,  1163,   464,  1165,  1166,  1366,  1168,  1169,   465,
+   801,  1599,  1186,  1029,   842,   487,  1223,   455,   229,  1030,
+   229,   511,   842,  1265,  1370,   988,   842,  1457,  1371,  1458,
+  1509,   530,  1510,   769,  1518,   466,  1519,  1181,   468,   185,
+  1031,  1509,   992,  1551,   992,   994,   995,   185,   971,   421,
+   976,  1562,  1013,  1610,  1041,  1611,   606,   992,  1414,  1022,
+   489,   528,   498,   490,  1619,   229,  1620,   513,   515,   514,
+-32768,   578,  1062,  1062,   532,   578,  1425,   499,   933,   934,
+   935,   936,   542,   559,   282,  1063,  1063,   282,    16,   937,
+   567,   185,   579,   185,  1072,  1037,   593,   594,   606,   603,
+   611,   613,   618,   626,   627,   500,  1079,  1080,  1647,   990,
+   501,   502,   503,   504,   505,   506,   507,   997,  1052,   628,
+   629,   366,   631,   650,   508,   659,    91,   646,   646,   508,
+   660,   764,   372,   372,   661,   777,   646,   646,   646,   646,
+   646,   646,   779,   372,  1321,   783,   798,   785,  1439,    93,
+  1322,   796,  1280,   799,  1412,   800,  1282,   491,  1413,   809,
+  1323,  1069,   492,  1071,   810,    98,    99,   811,  1324,   812,
+   814,   817,   828,   820,   834,   718,   829,   835,   646,   830,
+  1474,  1325,   492,   836,   837,  1301,   845,   718,   718,   718,
+   718,   718,   718,  1418,  1326,   851,   847,   850,   109,   853,
+   854,   858,   859,  1569,   860,   620,   621,   493,   867,   868,
+   861,  1327,   871,   494,   872,   978,   894,   873,   874,   495,
+   879,   888,   492,   915,   113,   893,   900,   493,   229,   918,
+   496,  1175,   917,   494,   769,  1507,  1384,   497,   979,-32768,
+   919,  1385,  1386,  1387,  1388,  1389,  1390,  1391,   920,   921,
+   922,   923,   924,   939,   940,  1392,   947,  1013,   976,  1013,
+  1013,  1013,  1013,  1013,  1013,   948,   950,   493,   951,   953,
+   954,   606,   606,   494,   984,   998,   956,  1531,  1532,   495,
+  1341,   957,   185,   265,  1023,   381,  1246,  1384,  1372,   959,
+  1485,   960,  1385,  1386,  1387,  1388,  1389,  1390,  1391,   962,
+  1493,  1019,   963,  1553,  1042,   965,  1392,  1384,  1044,  1465,
+  1257,   966,   498,-32768,-32768,  1388,  1389,  1390,  1391,  1066,
+  1420,   968,   969,  1015,  1423,  1202,  1392,   499,  1073,   881,
+  1016,   886,   498,  1105,  1622,  1107,  1108,   882,   883,   884,
+   885,  1109,  1113,  1114,   937,  1146,  1172,   499,   886,  1149,
+  1152,  1173,  1227,  1155,   372,   500,  1158,  1161,  1164,  1167,
+   501,   502,   503,   504,   505,   506,   507,  1170,  1177,  1176,
+  1203,  1182,   498,  1189,   508,   500,  1204,  1131,   164,  1244,
+  1190,   164,  1205,   504,   505,   506,   507,   499,  1191,  1193,
+  1220,  -808,   164,   164,   508,   164,  1225,  1224,  1226,   164,
+   932,   718,  1245,   164,   164,   164,   164,  1249,   933,   934,
+   935,   936,  1254,  1255,  1251,   500,  1256,  1259,  1261,   937,
+   501,   502,   503,   504,   505,   506,   507,  1263,   229,  1266,
+   696,  1267,  1269,  1271,   508,  1272,  1276,  1281,  1463,  1464,
+   185,  1285,   525,-32768,  1287,   185,  1289,  1290,  1330,  1013,
+  1291,  1388,  1389,  1390,  1391,  1292,  1296,  1013,   976,   164,
+  1298,  1013,  1392,  1013,  1299,  1332,  1013,  1013,  1013,  1013,
+  1013,  1013,  1013,  1013,  1305,  1208,  1013,  1306,   297,  1307,
+   185,  1308,  1013,   272,   273,   274,   275,   276,   277,   278,
+  1209,   265,   265,   265,   265,   265,   265,  1399,  1309,  1402,
+  1333,  1310,  1311,  1312,  1313,  1314,  1315,  1202,  1316,  1317,
+  1336,   229,  1637,  1335,  1318,  1339,  1319,  1409,  1210,  1320,
+  1337,   643,  1338,  1211,  1212,  1213,  1214,  1215,  1216,  1217,
+  1342,  1218,  1348,  1395,  1375,  1506,  1376,  1218,  1377,  1397,
+  1411,  1401,  1393,   164,  1415,  1416,   164,   164,  1417,   715,
+   164,   164,  1203,   164,   164,  1419,  1421,   164,  1204,  1431,
+  1422,   164,   164,  1426,-32768,   164,  1427,   164,   164,   164,
+  1428,  1430,  1432,  1437,   164,   164,  1441,  1445,  1443,   264,
+  1448,  1446,  1455,  1392,  1459,  1478,   229,  1460,  1483,  1484,
+  1486,  1492,   164,  1487,   265,  1591,  1488,   296,  1502,  1496,
+  1497,  1504,  1498,  1511,  1522,  1499,  1516,  1517,  1527,  1201,
+   164,  1544,  1013,   164,  1202,  1547,   976,  1548,  1558,   164,
+  1559,  1534,   366,  1614,  1614,  1566,  1567,  1570,  1568,  1597,
+  1607,   265,  1575,  1601,  1621,  1629,  1631,  1632,  1633,  1638,
+   265,   265,   265,   265,   265,   265,   265,   265,  1630,   265,
+  1643,  1644,   842,  1649,  1650,   253,   403,  1208,   164,  1203,
+   560,  1248,  1036,   523,   808,  1204,   991,  1018,  1512,   164,
+   993,  1205,  1209,  1374,  1247,  1574,  1606,  1557,  1580,  1021,
+  1628,  1597,  1206,  1253,   245,   391,  1065,  1064,   164,  1207,
+   535,   164,   164,   229,   643,   643,   643,   643,   218,   434,
+  1210,   848,  1530,  1592,  1616,  1529,   456,   168,  1214,  1215,
+  1216,  1217,   298,  1013,   426,  1514,  1615,  1252,   169,  1218,
+   170,   474,   252,   976,  1623,   171,  1075,  1526,  1600,  1617,
+  1624,   172,   173,   561,   762,   174,  1537,  1435,  1635,   185,
+   473,  1283,   769,   295,   769,   773,   175,   763,   185,  1561,
+   981,  1331,     0,     0,   176,     0,     0,  -320,     0,     0,
+   164,   164,     0,     0,  1208,   715,   715,   715,   715,   715,
+   164,     0,     0,     0,   265,     0,   164,   177,     0,  1209,
+     0,     0,   715,     0,   164,   178,   179,     0,     0,   164,
+     0,     0,     0,     0,   180,     0,   164,   164,     0,     0,
+     0,  1586,   164,     0,     0,   164,   164,  1210,     0,  1525,
+   164,     0,  1211,  1212,  1213,  1214,  1215,  1216,  1217,   492,
+     0,     0,     0,  1598,   622,     0,  1218,     0,     0,  1219,
+  1201,     0,   525,     0,     0,  1202,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   715,   715,   715,   715,   715,   498,     0,     0,     0,     0,
-   499,   500,   501,   502,   503,   504,   505,   715,     0,     0,
-   474,     0,     0,     0,   506,  -603,     0,   164,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   474,   474,     0,
-     0,     0,     0,     0,     0,   474,  1011,     0,     0,   164,
+     0,     0,     0,  1586,     0,   372,     0,     0,     0,     0,
+     0,     0,     0,     0,   493,   164,     0,   644,     0,     0,
+   494,     0,     0,     0,  1201,  1598,   495,  1636,     0,  1202,
+  1203,     0,     0,   474,     0,     0,  1204,   496,   164,     0,
+   164,     0,  1205,     0,     0,   716,     0,     0,     0,     0,
+   606,   491,     0,  1206,     0,     0,   492,     0,     0,     0,
+  1207,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   164,     0,  1203,     0,     0,     0,   643,   643,
+  1204,     0,     0,   474,     0,     0,  1205,   643,   643,   643,
+   643,   643,   643,     0,     0,     0,     0,  1206,     0,     0,
+     0,   493,     0,     0,  1207,     0,     0,   494,     0,     0,
+     0,     0,     0,   495,     0,     0,     0,     0,   164,   498,
+     0,     0,     0,     0,   496,     0,   715,     0,   164,   643,
+     0,   497,     0,     0,   499,  1208,   164,     0,   715,   715,
+   715,   715,   715,   715,     0,     0,     0,     0,     0,     0,
+  1209,     0,     0,     0,     0,     0,   164,     0,     0,     0,
+     0,     0,   500,     0,     0,     0,     0,   501,   502,   503,
+   504,   505,   506,   507,     0,     0,     0,     0,  1210,  1208,
+     0,   508,     0,  1211,  1212,  1213,  1214,  1215,  1216,  1217,
+   644,   644,   644,   644,  1209,     0,     0,  1218,     0,     0,
+  1344,     0,     0,     0,     0,     0,   498,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   499,  1210,     0,     0,     0,     0,  1211,  1212,  1213,
+  1214,  1215,  1216,  1217,     0,     0,     0,     0,     0,     0,
+     0,  1218,     0,     0,  1461,     0,     0,     0,     0,   500,
+     0,     0,     0,     0,   501,   502,   503,   504,   505,   506,
+   507,   716,   716,   716,   716,   716,     0,     0,   508,     0,
+     0,  1618,     0,     0,     0,     0,     0,     0,   716,     0,
+     0,     0,     0,     0,     0,     0,     0,   164,     0,   164,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   164,     0,     0,   164,     0,   164,   474,
-   474,     0,   164,     0,     0,     0,     0,     0,     0,  1010,
-     0,     0,     0,     0,     0,  1011,     0,     0,     0,   474,
-     0,   474,     0,  1011,  1011,   474,   489,  1011,     0,  1011,
-     0,   490,  1011,  1011,  1011,  1011,  1011,  1011,  1011,  1011,
-     0,     0,  1011,     0,     0,     0,     0,     0,  1011,     0,
-     0,     0,     0,     0,     0,     0,     0,  1011,  1011,  1011,
-  1011,  1011,  1011,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   491,   164,     0,     0,
-     0,     0,   492,     0,   644,   644,  1439,     0,   493,     0,
-     0,     0,     0,   644,   644,   644,   644,   644,   644,   494,
-     0,     0,     0,     0,     0,     0,   495,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   489,     0,
-  1011,     0,     0,   490,     0,     0,     0,     0,     0,   164,
-   715,   164,     0,   644,     0,     0,     0,     0,     0,     0,
-     0,     0,   715,   715,   715,   715,   715,   715,     0,     0,
-     0,  1141,     0,     0,   164,     0,     0,     0,     0,     0,
-  1011,     0,     0,     0,     0,     0,     0,     0,   491,     0,
-  1011,     0,     0,     0,   492,     0,  1011,     0,  1011,     0,
-   493,   496,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   494,     0,     0,     0,     0,   497,  1011,   495,     0,
-     0,     0,     0,     0,     0,     0,  1011,  1011,  1011,  1011,
-  1011,  1011,  1011,  1011,  1010,  1011,  1010,  1010,  1010,  1010,
-  1010,  1010,     0,     0,   498,     0,     0,     0,     0,   499,
-   500,   501,   502,   503,   504,   505,     0,     0,     0,     0,
-  1242,     0,     0,   506,     0,     0,  1617,     0,     0,     0,
-     0,     0,  1011,     0,     0,     0,     0,     0,     0,     0,
+   164,     0,   164,     0,     0,     0,     0,     0,   164,     0,
+     0,   164,     0,   164,   164,   164,   164,     0,     0,     0,
+     0,     0,     0,     0,     0,   164,   164,     0,   164,     0,
+     0,     0,     0,     0,   164,     0,     0,     0,     0,     0,
+   164,     0,     0,     0,   164,   529,     0,     0,     0,  1010,
+     0,     0,   715,   164,   164,   164,   164,     0,     0,     0,
+   164,     0,   164,   164,     0,     0,   491,   164,     0,     0,
+     0,   492,     0,     0,   474,   164,   164,     0,    91,   325,
+     0,     0,     0,     0,     0,   469,     0,     0,     0,     0,
+     0,     0,     0,   330,     0,     0,     0,   491,     0,     0,
+     0,    93,   492,     0,     0,     0,   331,     0,     0,     0,
+     0,   474,     0,     0,     0,     0,   493,    98,    99,     0,
+     0,     0,   494,     0,   644,   644,     0,   336,   495,     0,
+     0,     0,     0,   644,   644,   644,   644,   644,   644,   496,
+     0,     0,     0,     0,     0,     0,   497,   493,     0,     0,
+   109,     0,     0,   494,     0,   470,   340,     0,     0,   495,
+     0,     0,   474,     0,     0,   474,     0,     0,     0,     0,
+   496,     0,   716,     0,     0,   644,   113,   497,     0,   471,
+     0,     0,     0,     0,   716,   716,   716,   716,   716,   716,
+     0,     0,     0,     0,     0,     0,     0,   164,     0,     0,
+   164,     0,     0,   164,     0,     0,   460,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   474,     0,     0,
+   475,   498,     0,   478,     0,   479,   480,   481,   485,     0,
+     0,     0,     0,     0,     0,     0,   499,     0,     0,     0,
+   164,   164,     0,     0,     0,     0,     0,     0,   472,     0,
+     0,   164,   498,     0,  1010,   164,  1010,  1010,  1010,  1010,
+  1010,  1010,     0,     0,   500,     0,     0,   499,     0,   501,
+   502,   503,   504,   505,   506,   507,     0,     0,     0,   164,
+  1242,     0,     0,   508,  -603,     0,     0,     0,     0,     0,
+     0,   595,     0,     0,     0,   500,     0,     0,     0,     0,
+   501,   502,   503,   504,   505,   506,   507,     0,     0,     0,
+     0,   612,     0,     0,   508,  -602,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-  1011,     0,     0,   496,     0,     0,     0,  1011,     0,  1011,
-     0,     0,     0,     0,     0,     0,     0,   489,   497,     0,
-  1601,     0,   490,     0,     0,     0,     0,     0,     0,     0,
-  1572,     0,     0,     0,     0,     0,     0,     0,     0,   489,
-     0,     0,     0,     0,   490,     0,   498,     0,  1602,  1593,
-     0,   499,   500,   501,   502,   503,   504,   505,     0,   489,
-     0,  1011,     0,  1011,   490,   506,  -602,   491,     0,     0,
-  1011,     0,     0,   492,     0,     0,     0,     0,     0,   493,
-     0,     0,     0,     0,  1572,     0,   715,  1302,     0,   491,
-   494,     0,     0,     0,     0,   492,     0,   495,     0,     0,
-     0,   493,     0,   898,     0,     0,     0,     0,     0,   491,
-     0,     0,   494,     0,     0,   492,     0,     0,     0,   495,
-     0,   493,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   494,  1603,     0,     0,  1010,     0,     0,   495,
-     0,     0,     0,     0,  1010,  1346,     0,     0,  1010,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   491,
+   655,     0,  1602,     0,   492,     0,     0,     0,   658,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   491,     0,     0,   698,     0,   492,     0,   724,     0,   728,
+  1603,   474,   732,   736,   740,   744,   748,   752,   756,   760,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   493,
+     0,     0,     0,     0,     0,   494,     0,   164,   716,   164,
+     0,   495,     0,     0,     0,     0,     0,     0,     0,   164,
+   493,     0,   496,     0,   164,     0,   494,     0,     0,   497,
+     0,     0,   495,     0,     0,     0,     0,   474,     0,     0,
+     0,     0,     0,   496,     0,   529,     0,     0,     0,     0,
+   497,     0,     0,   474,     0,     0,  1010,     0,     0,   164,
+     0,     0,     0,     0,  1010,  1604,  1012,     0,  1010,     0,
   1010,     0,     0,  1010,  1010,  1010,  1010,  1010,  1010,  1010,
   1010,     0,     0,  1010,     0,     0,     0,     0,     0,  1010,
-     0,     0,   496,     0,     0,     0,     0,     0,  1242,  1242,
-  1242,  1242,  1242,  1242,     0,     0,     0,   497,     0,     0,
-     0,     0,     0,     0,   496,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   497,
-     0,     0,     0,     0,   496,   498,     0,     0,     0,     0,
-   499,   500,   501,   502,   503,   504,   505,     0,     0,   497,
-     0,     0,     0,     0,   506,     0,     0,   498,     0,     0,
-     0,  1427,   499,   500,   501,   502,   503,   504,   505,     0,
-   968,     0,     0,     0,     0,   969,   506,   498,     0,     0,
-     0,     0,   499,   500,   501,   502,   503,   504,   505,     0,
-     0,     0,     0,     0,     0,     0,   506,     0,     0,     0,
-     0,  1242,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,  1346,     0,     0,     0,     0,     0,  1346,     0,  1010,
+   164,     0,     0,     0,     0,     0,   164,     0,  1242,  1242,
+  1242,  1242,  1242,  1242,   498,   474,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   499,
+     0,     0,     0,   474,  1408,   498,     0,     0,     0,     0,
+     0,     0,     0,   655,   474,   655,   655,     0,     0,     0,
+   499,     0,     0,   914,     0,     0,     0,   500,     0,     0,
+     0,     0,   501,   502,   503,   504,   505,   506,   507,     0,
+     0,     0,   491,     0,   849,   164,   508,   492,   500,     0,
+     0,     0,     0,   501,   502,   503,   504,   505,   506,   507,
+     0,   901,     0,   474,     0,     0,   902,   508,     0,   474,
+     0,     0,     0,     0,     0,   930,     0,     0,     0,     0,
+     0,  1242,     0,     0,     0,     0,     0,     0,     0,   946,
+  1012,     0,   493,   485,     0,     0,     0,   485,   494,  1010,
+     0,   485,     0,     0,   495,   485,     0,   474,     0,   485,
+     0,   491,     0,   485,     0,   496,   492,   485,  1242,     0,
+     0,   485,   497,     0,     0,     0,     0,  1242,  1242,  1242,
+  1242,  1242,  1242,  1242,  1242,     0,  1242,     0,   492,     0,
+     0,     0,     0,     0,     0,     0,   474,     0,   645,     0,
+     0,  1012,   164,  1012,  1012,  1012,  1012,  1012,  1012,     0,
+     0,   493,   474,   474,     0,     0,     0,   494,     0,     0,
+   474,     0,     0,   495,   164,     0,   717,  1012,     0,     0,
+     0,     0,     0,   493,   496,     0,     0,     0,     0,   494,
+     0,   497,     0,     0,     0,   495,     0,   498,   164,     0,
+  1010,   164,     0,   164,   474,   474,     0,   164,     0,     0,
+     0,     0,   499,     0,   491,     0,     0,     0,     0,   492,
+     0,     0,  1083,     0,   474,     0,   474,     0,     0,     0,
+   474,     0,     0,  1202,     0,     0,   655,     0,     0,     0,
+   500,     0,     0,     0,     0,   501,   502,   503,   504,   505,
+   506,   507,  1103,     0,     0,     0,     0,     0,   899,   508,
+     0,  1242,     0,  1111,   493,     0,   498,     0,     0,     0,
+   494,     0,     0,     0,     0,     0,   495,     0,  1203,     0,
+     0,   499,   164,     0,  1204,     0,   655,   496,   498,     0,
+  1205,     0,     0,     0,   497,     0,  1012,     0,     0,     0,
+     0,     0,     0,   499,     0,     0,     0,     0,     0,   500,
+     0,     0,     0,     0,   501,   502,   503,   504,   505,   506,
+   507,   645,   645,   645,   645,     0,     0,  1279,   508,     0,
+     0,   500,     0,     0,   164,     0,   164,-32768,-32768,   504,
+   505,   506,   507,  1012,     0,     0,     0,     0,     0,     0,
+   508,  1012,  1012,     0,     0,  1012,     0,  1012,     0,   164,
+  1012,  1012,  1012,  1012,  1012,  1012,  1012,  1012,     0,   498,
+  1012,     0,     0,     0,     0,     0,  1012,     0,     0,     0,
+     0,     0,     0,  1208,   499,  1012,  1012,  1012,  1012,  1012,
+  1012,     0,   717,   717,   717,   717,   717,     0,  1209,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   717,
+     0,     0,   500,     0,     0,     0,     0,   501,   502,   503,
+   504,   505,   506,   507,     0,     0,  1210,     0,     0,     0,
+     0,   508,-32768,-32768,  1214,  1215,  1216,  1217,     0,     0,
+     0,     0,     0,     0,     0,  1218,     0,     0,     0,  1012,
+   655,   655,   655,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,  1242,     0,
-     0,     0,     0,     0,     0,     0,     0,  1242,  1242,  1242,
-  1242,  1242,  1242,  1242,  1242,     0,  1242,     0,     0,     0,
-    89,    90,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   318,   319,   320,     0,     0,     0,
-     0,     0,     0,     0,     0,   226,   321,   322,   323,   324,
-     0,    91,   325,  1499,     0,     0,     0,     0,   326,     0,
-     0,     0,   327,   328,   329,     0,   330,     0,     0,     0,
-     0,  1346,     0,     0,    93,     0,     0,    94,  1346,   331,
-  1010,     0,     0,    95,    96,     0,     0,     0,     0,    97,
-    98,    99,     0,   332,     0,   333,   100,     0,   334,   335,
-   336,   101,     0,   102,   103,     0,     0,     0,     0,   337,
-     0,     0,   104,   105,     0,     0,   106,     0,   107,     0,
-     0,     0,   108,   109,     0,     0,   338,     0,   339,   340,
-   111,   112,  1346,     0,  1346,   341,   342,     0,     0,     0,
-   343,  1242,     0,   344,     0,     0,     0,     0,     0,   113,
-   114,   115,   345,     0,   117,   118,     0,   119,   120,     0,
-   121,     0,     0,   122,   123,   124,   125,   126,     0,   127,
-   128,     0,     0,   129,   130,   131,   132,   133,   134,   135,
-   136,   137,     0,     0,   138,     0,   139,   140,     0,   227,
-   141,   142,     0,   143,     0,   144,   145,   146,   147,   148,
-   149,   150,     0,   151,   152,   153,   154,   155,   346,     0,
-   156,   157,   158,   159,   160,     0,     0,     0,   161,     0,
-   162,   347,   240,   348,   308,   349,   350,    89,    90,     0,
-     0,     0,   351,   769,     0,   353,   354,   355,     0,     0,
-     0,   318,   319,   320,   356,   770,     0,     0,     0,     0,
-     0,     0,   226,   321,   322,   323,   324,     0,    91,   325,
-     0,     0,     0,     0,     0,   326,     0,     0,     0,   327,
-   328,   329,     0,   330,     0,     0,     0,     0,     0,     0,
-     0,    93,     0,     0,    94,     0,   331,     0,     0,     0,
-    95,    96,     0,     0,     0,     0,    97,    98,    99,     0,
-   332,     0,   333,   100,     0,   334,   335,   336,   101,     0,
-   102,   103,     0,     0,     0,     0,   337,     0,     0,   104,
-   105,     0,     0,   106,     0,   107,     0,     0,     0,   108,
-   109,     0,     0,   338,     0,   339,   340,   111,   112,     0,
-     0,     0,   341,   342,     0,     0,     0,   343,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,  1284,
+  1011,     0,     0,     0,     0,     0,     0,     0,  1012,   655,
+   655,   655,     0,     0,     0,     0,     0,     0,  1012,     0,
+     0,     0,     0,     0,  1012,     0,  1012,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,  1012,     0,     0,     0,     0,
+     0,     0,     0,     0,  1012,  1012,  1012,  1012,  1012,  1012,
+  1012,  1012,     0,  1012,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   645,   645,     0,     0,     0,
+     0,     0,     0,     0,   645,   645,   645,   645,   645,   645,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,  1012,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,  1012,     0,
+     0,     0,     0,   717,     0,  1012,   645,  1012,     0,     0,
+     0,   319,   320,     0,     0,   717,   717,   717,   717,   717,
+   717,     0,     0,     0,  1144,     0,     0,    91,   325,     0,
+     0,     0,     0,     0,   469,     0,     0,     0,     0,     0,
+     0,     0,   330,     0,     0,     0,     0,     0,     0,     0,
+    93,     0,     0,     0,     0,   331,     0,     0,     0,  1012,
+     0,  1012,     0,     0,     0,     0,    98,    99,  1012,   332,
+     0,   333,     0,     0,     0,     0,   336,     0,    89,    90,
+     0,     0,     0,     0,     0,  1011,     0,  1011,  1011,  1011,
+  1011,  1011,  1011,   319,   320,  1440,     0,     0,     0,   109,
+     0,     0,     0,     0,   470,   340,     0,     0,     0,    91,
+   569,  1243,     0,     0,     0,     0,   570,     0,     0,   344,
+     0,     0,     0,     0,   571,   113,     0,     0,   471,     0,
+     0,     0,    93,     0,     0,    94,     0,     0,     0,     0,
+     0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
+     0,   332,     0,   333,   100,     0,     0,     0,   572,   101,
+     0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
+   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
+   108,   109,     0,   805,   346,     0,   110,     0,   111,   112,
+     0,     0,     0,     0,     0,     0,     0,   472,     0,     0,
+     0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
+   116,     0,   117,   118,     0,   119,   120,     0,   121,     0,
+     0,   122,   123,   124,   125,   126,     0,   127,   128,   717,
+  1304,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     0,     0,   138,     0,   139,   140,     0,     0,   141,   142,
+     0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
+     0,   151,   152,   153,   154,   155,     0,     0,   156,   157,
+   158,   159,   160,     0,     0,     0,   161,  1011,   162,   163,
+     0,     0,  1201,     0,  1447,  1011,  1347,  1202,     0,  1011,
+     0,  1011,     0,     0,  1011,  1011,  1011,  1011,  1011,  1011,
+  1011,  1011,     0,   573,  1011,     0,     0,     0,     0,  1573,
+  1011,     0,     0,     0,     0,     0,     0,     0,     0,  1243,
+  1243,  1243,  1243,  1243,  1243,     0,     0,     0,  1594,     0,
+     0,     0,  1203,     0,     0,     0,     0,     0,  1204,     0,
+     0,     0,     0,     0,  1205,     0,     0,     0,   319,   320,
+     0,     0,     0,     0,     0,  1206,     0,     0,     0,     0,
+     0,     0,  1207,  1573,    91,   325,     0,     0,     0,     0,
+     0,   469,     0,     0,     0,     0,     0,     0,     0,   330,
+     0,     0,     0,  1429,     0,     0,     0,    93,     0,     0,
+     0,     0,   331,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    98,    99,     0,   332,     0,   333,     0,
+     0,     0,     0,   336,     0,     0,     0,     0,     0,     0,
+     0,     0,  1243,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,  1347,     0,     0,     0,   109,  1208,  1347,     0,
+  1011,   470,   340,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,  1209,     0,     0,     0,   344,     0,     0,  1243,
+     0,     0,   113,     0,     0,   471,     0,     0,  1243,  1243,
+  1243,  1243,  1243,  1243,  1243,  1243,     0,  1243,     0,     0,
+  1210,    89,    90,     0,     0,  1211,  1212,  1213,  1214,  1215,
+  1216,  1217,     0,     0,     0,   318,   319,   320,     0,  1218,
+     0,     0,     0,     0,     0,     0,   226,   321,   322,   323,
+   324,     0,    91,   325,     0,  1500,     0,     0,     0,   326,
+     0,   346,     0,   327,   328,   329,     0,   330,     0,     0,
+     0,     0,  1347,     0,   472,    93,     0,     0,    94,  1347,
+   331,  1011,     0,     0,    95,    96,     0,     0,     0,     0,
+    97,    98,    99,     0,   332,     0,   333,   100,     0,   334,
+   335,   336,   101,     0,   102,   103,     0,     0,     0,     0,
+   337,     0,     0,   104,   105,     0,     0,   106,     0,   107,
+     0,     0,     0,   108,   109,     0,     0,   338,     0,   339,
+   340,   111,   112,  1347,     0,  1347,   341,   342,     0,     0,
+     0,   343,  1243,     0,   344,     0,     0,     0,     0,     0,
+   113,   114,   115,   345,     0,   117,   118,     0,   119,   120,
+     0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
+   127,   128,     0,     0,   129,   130,   131,   132,   133,   134,
+   135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
+   227,   141,   142,     0,   143,     0,   144,   145,   146,   147,
+   148,   149,   150,     0,   151,   152,   153,   154,   155,   346,
+     0,   156,   157,   158,   159,   160,     0,     0,     0,   161,
+     0,   162,   347,   240,   348,   308,   349,   350,    89,    90,
+     0,     0,     0,   351,   770,     0,   353,   354,   355,     0,
+     0,     0,   318,   319,   320,   356,   771,     0,     0,     0,
+     0,     0,     0,   226,   321,   322,   323,   324,     0,    91,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   327,   328,   329,     0,   330,     0,     0,     0,     0,     0,
+     0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
+     0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
+     0,   332,     0,   333,   100,     0,   334,   335,   336,   101,
+     0,   102,   103,     0,     0,     0,     0,   337,     0,     0,
+   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
+   108,   109,     0,     0,   338,     0,   339,   340,   111,   112,
+     0,     0,     0,   341,   342,     0,     0,     0,   343,     0,
+     0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
+   345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
+     0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
+     0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
+     0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
+     0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
+   158,   159,   160,     0,     0,     0,   161,     0,   162,   347,
+   240,   348,   308,   349,   350,    89,    90,     0,     0,     0,
+   351,     0,     0,   353,   354,   355,     0,     0,     0,   318,
+   319,   320,   356,  1100,     0,     0,     0,     0,     0,     0,
+   226,   321,   322,   323,   324,     0,    91,   325,     0,     0,
+     0,     0,     0,   326,     0,     0,     0,   327,   328,   329,
+     0,   330,     0,     0,     0,     0,     0,     0,     0,    93,
+     0,     0,    94,     0,   331,     0,     0,     0,    95,    96,
+     0,     0,     0,     0,    97,    98,    99,     0,   332,     0,
+   333,   100,     0,   334,   335,   336,   101,     0,   102,   103,
+     0,     0,     0,     0,   337,     0,     0,   104,   105,     0,
+     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
+     0,   338,     0,   339,   340,   111,   112,     0,     0,     0,
+   341,   342,     0,     0,     0,   343,     0,     0,   344,     0,
+     0,     0,     0,     0,   113,   114,   115,   345,     0,   117,
+   118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
+   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
+     0,   139,   140,     0,   227,   141,   142,     0,   143,     0,
+   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
+   153,   154,   155,   346,     0,   156,   157,   158,   159,   160,
+     0,     0,     0,   161,     0,   162,   347,   240,   348,   308,
+   349,   350,    89,    90,     0,     0,     0,   351,     0,     0,
+   353,   354,   355,     0,     0,     0,  1228,   319,   320,   356,
+  1139,     0,     0,     0,     0,     0,     0,     0,  1229,  1230,
+  1231,  1232,     0,    91,   325,     0,     0,     0,     0,     0,
+   326,     0,     0,     0,     0,     0,   329,     0,   330,     0,
+     0,     0,     0,     0,     0,     0,    93,     0,     0,    94,
+     0,   331,     0,     0,     0,    95,    96,     0,     0,     0,
+     0,    97,    98,    99,     0,   332,     0,   333,   100,     0,
+     0,     0,   336,   101,     0,   102,   103,     0,     0,     0,
+     0,     0,     0,     0,   104,   105,     0,     0,   106,     0,
+   107,     0,     0,     0,   108,   109,     0,     0,     0,     0,
+   339,   340,   111,   112,     0,     0,     0,     0,   342,     0,
+     0,     0,  1234,     0,     0,   344,     0,     0,     0,     0,
+     0,   113,   114,   115,   345,     0,   117,   118,     0,   119,
+   120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
+     0,   127,   128,     0,     0,   129,   130,   131,   132,   133,
+   134,   135,   136,   137,     0,     0,   138,     0,   139,   140,
+     0,     0,   141,   142,     0,   143,     0,   144,   145,   146,
+   147,   148,   149,   150,     0,   151,   152,   153,   154,   155,
+   346,     0,   156,   157,   158,   159,   160,    89,    90,     0,
+   161,     0,   162,   347,   240,  1235,   308,   349,   350,     0,
+     0,  1000,   319,   320,  1236,     0,     0,  1237,  1238,  1239,
+     0,     0,     0,     0,   187,     0,  1240,  1475,    91,   325,
+     0,     0,     0,     0,     0,   326,     0,   188,     0,     0,
+     0,   329,   189,   330,     0,     0,     0,     0,   190,   191,
+     0,    93,   192,     0,    94,     0,   331,     0,     0,     0,
+    95,    96,     0,   193,     0,     0,    97,    98,    99,     0,
+   332,   194,   333,   100,   195,  1001,  1002,   336,   101,     0,
+   102,   103,     0,     0,     0,     0,     0,     0,     0,   104,
+   105,     0,     0,   106,   196,   107,   197,     0,     0,   108,
+   109,     0,   198,   199,     0,   339,   340,   111,   112,     0,
+     0,     0,     0,   342,     0,     0,     0,     0,     0,     0,
    344,     0,     0,     0,     0,     0,   113,   114,   115,   345,
      0,   117,   118,     0,   119,   120,     0,   121,     0,     0,
    122,   123,   124,   125,   126,     0,   127,   128,     0,     0,
    129,   130,   131,   132,   133,   134,   135,   136,   137,     0,
-     0,   138,     0,   139,   140,     0,   227,   141,   142,     0,
+     0,   138,     0,   139,   140,     0,     0,   141,   142,     0,
    143,     0,   144,   145,   146,   147,   148,   149,   150,     0,
    151,   152,   153,   154,   155,   346,     0,   156,   157,   158,
    159,   160,     0,     0,     0,   161,     0,   162,   347,   240,
-   348,   308,   349,   350,    89,    90,     0,     0,     0,   351,
-     0,     0,   353,   354,   355,     0,     0,     0,   318,   319,
-   320,   356,  1099,     0,     0,     0,     0,     0,     0,   226,
+  1003,   308,   349,   350,    89,    90,     0,     0,     0,  1004,
+     0,     0,  1005,  1006,  1007,   651,     0,     0,   318,   319,
+   320,  1008,  1367,     0,     0,     0,     0,     0,     0,   226,
    321,   322,   323,   324,     0,    91,   325,     0,     0,     0,
      0,     0,   326,     0,     0,     0,   327,   328,   329,     0,
-   330,     0,     0,     0,     0,     0,     0,     0,    93,     0,
-     0,    94,     0,   331,     0,     0,     0,    95,    96,     0,
+   330,     0,     0,   652,     0,     0,     0,     0,    93,     0,
+     0,    94,     0,   331,     0,     0,     0,    95,    96,   653,
      0,     0,     0,    97,    98,    99,     0,   332,     0,   333,
    100,     0,   334,   335,   336,   101,     0,   102,   103,     0,
      0,     0,     0,   337,     0,     0,   104,   105,     0,     0,
    106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
-   338,     0,   339,   340,   111,   112,     0,     0,     0,   341,
+   338,     0,   339,   340,   111,   112,     0,   654,     0,   341,
    342,     0,     0,     0,   343,     0,     0,   344,     0,     0,
      0,     0,     0,   113,   114,   115,   345,     0,   117,   118,
      0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
@@ -1941,149 +2029,174 @@ static const short yytable[] = {   166,
    154,   155,   346,     0,   156,   157,   158,   159,   160,     0,
      0,     0,   161,     0,   162,   347,   240,   348,   308,   349,
    350,    89,    90,     0,     0,     0,   351,     0,     0,   353,
-   354,   355,     0,     0,     0,  1227,   319,   320,   356,  1136,
-     0,     0,     0,     0,     0,     0,     0,  1228,  1229,  1230,
-  1231,     0,    91,   325,     0,     0,     0,     0,     0,   326,
-     0,     0,     0,     0,     0,   329,     0,   330,     0,     0,
-     0,     0,     0,     0,     0,    93,     0,     0,    94,     0,
-   331,     0,     0,     0,    95,    96,     0,     0,     0,     0,
-    97,    98,    99,     0,   332,     0,   333,   100,     0,     0,
-     0,   336,   101,     0,   102,   103,     0,     0,     0,     0,
-     0,     0,     0,   104,   105,     0,     0,   106,     0,   107,
-     0,     0,     0,   108,   109,     0,     0,     0,     0,   339,
-   340,   111,   112,     0,     0,     0,     0,   342,     0,     0,
-     0,  1233,     0,     0,   344,     0,     0,     0,     0,     0,
+   354,   355,  1088,     0,     0,   318,   319,   320,   356,     0,
+     0,     0,     0,     0,     0,     0,   226,   321,   322,   323,
+   324,     0,    91,   325,     0,     0,     0,     0,     0,   326,
+     0,     0,     0,   327,   328,   329,     0,   330,     0,     0,
+   652,     0,     0,     0,     0,    93,     0,     0,    94,     0,
+   331,     0,     0,     0,    95,    96,  1089,     0,     0,     0,
+    97,    98,    99,     0,   332,     0,   333,   100,     0,   334,
+   335,   336,   101,     0,   102,   103,     0,     0,     0,     0,
+   337,     0,     0,   104,   105,     0,     0,   106,     0,   107,
+     0,     0,     0,   108,   109,     0,     0,   338,     0,   339,
+   340,   111,   112,     0,  1090,     0,   341,   342,     0,     0,
+     0,   343,     0,     0,   344,     0,     0,     0,     0,     0,
    113,   114,   115,   345,     0,   117,   118,     0,   119,   120,
      0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
    127,   128,     0,     0,   129,   130,   131,   132,   133,   134,
    135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
-     0,   141,   142,     0,   143,     0,   144,   145,   146,   147,
+   227,   141,   142,     0,   143,     0,   144,   145,   146,   147,
    148,   149,   150,     0,   151,   152,   153,   154,   155,   346,
-     0,   156,   157,   158,   159,   160,    89,    90,     0,   161,
-     0,   162,   347,   240,  1234,   308,   349,   350,     0,     0,
-   999,   319,   320,  1235,     0,     0,  1236,  1237,  1238,     0,
-     0,     0,     0,     0,     0,  1239,  1474,    91,   325,     0,
-     0,     0,     0,     0,   326,     0,     0,     0,     0,     0,
-   329,     0,   330,     0,     0,     0,     0,     0,     0,     0,
-    93,     0,     0,    94,     0,   331,     0,     0,     0,    95,
-    96,     0,     0,     0,     0,    97,    98,    99,     0,   332,
-     0,   333,   100,     0,  1000,  1001,   336,   101,     0,   102,
-   103,     0,     0,     0,     0,     0,     0,     0,   104,   105,
-     0,     0,   106,     0,   107,     0,     0,     0,   108,   109,
-     0,     0,     0,     0,   339,   340,   111,   112,     0,     0,
-     0,     0,   342,     0,     0,     0,     0,     0,     0,   344,
-     0,     0,     0,     0,     0,   113,   114,   115,   345,     0,
-   117,   118,     0,   119,   120,     0,   121,     0,     0,   122,
-   123,   124,   125,   126,     0,   127,   128,     0,     0,   129,
-   130,   131,   132,   133,   134,   135,   136,   137,     0,     0,
-   138,     0,   139,   140,     0,     0,   141,   142,     0,   143,
-     0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
-   152,   153,   154,   155,   346,     0,   156,   157,   158,   159,
-   160,    89,    90,     0,   161,     0,   162,   347,   240,  1002,
-   308,   349,   350,     0,     0,     0,   319,   320,  1003,     0,
-     0,  1004,  1005,  1006,     0,     0,     0,     0,     0,     0,
-  1007,  1366,    91,   568,     0,     0,     0,     0,     0,   569,
-     0,     0,     0,     0,     0,     0,     0,   570,     0,     0,
+     0,   156,   157,   158,   159,   160,     0,     0,     0,   161,
+     0,   162,   347,   240,   348,   308,   349,   350,    89,    90,
+     0,     0,     0,   351,     0,     0,   353,   354,   355,  1127,
+     0,     0,   318,   319,   320,   356,     0,     0,     0,     0,
+     0,     0,     0,   226,   321,   322,   323,   324,     0,    91,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   327,   328,   329,     0,   330,     0,     0,   652,     0,     0,
+     0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
+     0,    95,    96,  1128,     0,     0,     0,    97,    98,    99,
+     0,   332,     0,   333,   100,     0,   334,   335,   336,   101,
+     0,   102,   103,     0,     0,     0,     0,   337,     0,     0,
+   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
+   108,   109,     0,     0,   338,     0,   339,   340,   111,   112,
+     0,  1129,     0,   341,   342,     0,     0,     0,   343,     0,
+     0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
+   345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
+     0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
+     0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
+     0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
+     0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
+   158,   159,   160,     0,     0,     0,   161,     0,   162,   347,
+   240,   348,   308,   349,   350,    89,    90,     0,     0,     0,
+   351,     0,     0,   353,   354,   355,     0,     0,     0,   318,
+   319,   320,   356,     0,     0,     0,     0,     0,     0,     0,
+   226,   321,   322,   323,   324,     0,    91,   325,     0,     0,
+     0,     0,     0,   326,     0,     0,     0,   327,   328,   329,
+     0,   330,     0,     0,     0,     0,     0,     0,     0,    93,
+     0,     0,    94,     0,   331,     0,     0,     0,    95,    96,
+     0,     0,     0,     0,    97,    98,    99,     0,   332,     0,
+   333,   100,     0,   334,   335,   336,   101,     0,   102,   103,
+     0,     0,     0,     0,   337,     0,     0,   104,   105,     0,
+     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
+     0,   338,     0,   339,   340,   111,   112,     0,     0,     0,
+   341,   342,     0,     0,     0,   343,     0,     0,   344,     0,
+     0,     0,     0,     0,   113,   114,   115,   345,     0,   117,
+   118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
+   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
+     0,   139,   140,     0,   227,   141,   142,     0,   143,     0,
+   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
+   153,   154,   155,   346,     0,   156,   157,   158,   159,   160,
+     0,     0,     0,   161,     0,   162,   347,   240,   348,   308,
+   349,   350,     0,     0,     0,     0,     0,   351,   352,     0,
+   353,   354,   355,     0,    89,    90,     0,   733,     0,   356,
+   734,     0,     0,     0,     0,     0,     0,     0,   318,   319,
+   320,     0,     0,     0,     0,     0,     0,     0,     0,   226,
+   321,   322,   323,   324,     0,    91,   325,     0,     0,     0,
+     0,     0,   326,     0,     0,     0,   327,   328,   329,     0,
+   330,     0,     0,     0,     0,     0,     0,     0,    93,     0,
+     0,    94,     0,   331,     0,     0,     0,    95,    96,     0,
+     0,     0,     0,    97,    98,    99,     0,   332,     0,   333,
+   100,     0,   334,     0,   336,   101,     0,   102,   103,     0,
+     0,     0,     0,   337,     0,     0,   104,   105,     0,     0,
+   106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
+   338,     0,   339,   340,   111,   112,     0,     0,     0,   341,
+   342,     0,     0,     0,   343,     0,     0,   344,     0,     0,
+     0,     0,     0,   113,   114,   115,   345,     0,   117,   118,
+     0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
+   125,   126,     0,   127,   128,     0,     0,   129,   130,   131,
+   132,   133,   134,   135,   136,   137,     0,     0,   138,     0,
+   139,   140,     0,   227,   141,   142,     0,   143,     0,   144,
+   145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
+   154,   155,   346,     0,   156,   157,   158,   159,   160,     0,
+     0,     0,   161,     0,   162,   347,   240,   348,   308,   349,
+   350,    89,    90,     0,   737,     0,   351,   738,     0,   353,
+   354,   355,     0,     0,     0,   318,   319,   320,   735,     0,
+     0,     0,     0,     0,     0,     0,   226,   321,   322,   323,
+   324,     0,    91,   325,     0,     0,     0,     0,     0,   326,
+     0,     0,     0,   327,   328,   329,     0,   330,     0,     0,
      0,     0,     0,     0,     0,    93,     0,     0,    94,     0,
-     0,     0,     0,     0,    95,    96,     0,     0,     0,     0,
-    97,    98,    99,     0,   332,     0,   333,   100,     0,     0,
-     0,   571,   101,     0,   102,   103,     0,     0,     0,     0,
-     0,     0,     0,   104,   105,     0,     0,   106,     0,   107,
-     0,     0,     0,   108,   109,     0,     0,     0,     0,   110,
-     0,   111,   112,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   344,     0,     0,     0,     0,     0,
-   113,   114,   115,   116,     0,   117,   118,     0,   119,   120,
+   331,     0,     0,     0,    95,    96,     0,     0,     0,     0,
+    97,    98,    99,     0,   332,     0,   333,   100,     0,   334,
+     0,   336,   101,     0,   102,   103,     0,     0,     0,     0,
+   337,     0,     0,   104,   105,     0,     0,   106,     0,   107,
+     0,     0,     0,   108,   109,     0,     0,   338,     0,   339,
+   340,   111,   112,     0,     0,     0,   341,   342,     0,     0,
+     0,   343,     0,     0,   344,     0,     0,     0,     0,     0,
+   113,   114,   115,   345,     0,   117,   118,     0,   119,   120,
      0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
    127,   128,     0,     0,   129,   130,   131,   132,   133,   134,
    135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
-     0,   141,   142,     0,   143,     0,   144,   145,   146,   147,
-   148,   149,   150,     0,   151,   152,   153,   154,   155,    89,
-    90,   156,   157,   158,   159,   160,     0,     0,     0,   161,
-   650,   162,   163,   318,   319,   320,     0,     0,     0,     0,
-     0,     0,     0,     0,   226,   321,   322,   323,   324,     0,
-    91,   325,     0,     0,     0,     0,   572,   326,     0,     0,
-     0,   327,   328,   329,     0,   330,     0,     0,   651,     0,
-     0,     0,     0,    93,     0,     0,    94,     0,   331,     0,
-     0,     0,    95,    96,   652,     0,     0,     0,    97,    98,
-    99,     0,   332,     0,   333,   100,     0,   334,   335,   336,
-   101,     0,   102,   103,     0,     0,     0,     0,   337,     0,
-     0,   104,   105,     0,     0,   106,     0,   107,     0,     0,
-     0,   108,   109,     0,     0,   338,     0,   339,   340,   111,
-   112,     0,   653,     0,   341,   342,     0,     0,     0,   343,
-     0,     0,   344,     0,     0,     0,     0,     0,   113,   114,
-   115,   345,     0,   117,   118,     0,   119,   120,     0,   121,
-     0,     0,   122,   123,   124,   125,   126,     0,   127,   128,
-     0,     0,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,     0,     0,   138,     0,   139,   140,     0,   227,   141,
-   142,     0,   143,     0,   144,   145,   146,   147,   148,   149,
-   150,     0,   151,   152,   153,   154,   155,   346,     0,   156,
-   157,   158,   159,   160,     0,     0,     0,   161,     0,   162,
-   347,   240,   348,   308,   349,   350,    89,    90,     0,     0,
-     0,   351,     0,     0,   353,   354,   355,  1087,     0,     0,
-   318,   319,   320,   356,     0,     0,     0,     0,     0,     0,
-     0,   226,   321,   322,   323,   324,     0,    91,   325,     0,
-     0,     0,     0,     0,   326,     0,     0,     0,   327,   328,
-   329,     0,   330,     0,     0,   651,     0,     0,     0,     0,
-    93,     0,     0,    94,     0,   331,     0,     0,     0,    95,
-    96,  1088,     0,     0,     0,    97,    98,    99,     0,   332,
-     0,   333,   100,     0,   334,   335,   336,   101,     0,   102,
-   103,     0,     0,     0,     0,   337,     0,     0,   104,   105,
-     0,     0,   106,     0,   107,     0,     0,     0,   108,   109,
-     0,     0,   338,     0,   339,   340,   111,   112,     0,  1089,
-     0,   341,   342,     0,     0,     0,   343,     0,     0,   344,
-     0,     0,     0,     0,     0,   113,   114,   115,   345,     0,
-   117,   118,     0,   119,   120,     0,   121,     0,     0,   122,
-   123,   124,   125,   126,     0,   127,   128,     0,     0,   129,
-   130,   131,   132,   133,   134,   135,   136,   137,     0,     0,
-   138,     0,   139,   140,     0,   227,   141,   142,     0,   143,
-     0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
-   152,   153,   154,   155,   346,     0,   156,   157,   158,   159,
-   160,     0,     0,     0,   161,     0,   162,   347,   240,   348,
-   308,   349,   350,    89,    90,     0,     0,     0,   351,     0,
-     0,   353,   354,   355,  1124,     0,     0,   318,   319,   320,
-   356,     0,     0,     0,     0,     0,     0,     0,   226,   321,
-   322,   323,   324,     0,    91,   325,     0,     0,     0,     0,
-     0,   326,     0,     0,     0,   327,   328,   329,     0,   330,
-     0,     0,   651,     0,     0,     0,     0,    93,     0,     0,
-    94,     0,   331,     0,     0,     0,    95,    96,  1125,     0,
-     0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
-     0,   334,   335,   336,   101,     0,   102,   103,     0,     0,
-     0,     0,   337,     0,     0,   104,   105,     0,     0,   106,
-     0,   107,     0,     0,     0,   108,   109,     0,     0,   338,
-     0,   339,   340,   111,   112,     0,  1126,     0,   341,   342,
-     0,     0,     0,   343,     0,     0,   344,     0,     0,     0,
-     0,     0,   113,   114,   115,   345,     0,   117,   118,     0,
-   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
-   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
-   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
-   140,     0,   227,   141,   142,     0,   143,     0,   144,   145,
-   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
-   155,   346,     0,   156,   157,   158,   159,   160,     0,     0,
-     0,   161,     0,   162,   347,   240,   348,   308,   349,   350,
-    89,    90,     0,     0,     0,   351,     0,     0,   353,   354,
-   355,     0,     0,     0,   318,   319,   320,   356,     0,     0,
-     0,     0,     0,     0,     0,   226,   321,   322,   323,   324,
-     0,    91,   325,     0,     0,     0,     0,     0,   326,     0,
-     0,     0,   327,   328,   329,     0,   330,     0,     0,     0,
-     0,     0,     0,     0,    93,     0,     0,    94,     0,   331,
-     0,     0,     0,    95,    96,     0,     0,     0,     0,    97,
-    98,    99,     0,   332,     0,   333,   100,     0,   334,   335,
-   336,   101,     0,   102,   103,     0,     0,     0,     0,   337,
-     0,     0,   104,   105,     0,     0,   106,     0,   107,     0,
-     0,     0,   108,   109,     0,     0,   338,     0,   339,   340,
-   111,   112,     0,     0,     0,   341,   342,     0,     0,     0,
-   343,     0,     0,   344,     0,     0,     0,     0,     0,   113,
-   114,   115,   345,     0,   117,   118,     0,   119,   120,     0,
-   121,     0,     0,   122,   123,   124,   125,   126,     0,   127,
-   128,     0,     0,   129,   130,   131,   132,   133,   134,   135,
-   136,   137,     0,     0,   138,     0,   139,   140,     0,   227,
-   141,   142,     0,   143,     0,   144,   145,   146,   147,   148,
-   149,   150,     0,   151,   152,   153,   154,   155,   346,     0,
-   156,   157,   158,   159,   160,     0,     0,     0,   161,     0,
-   162,   347,   240,   348,   308,   349,   350,     0,     0,     0,
-     0,     0,   351,   352,     0,   353,   354,   355,     0,    89,
-    90,     0,   731,     0,   356,   732,     0,     0,     0,     0,
-     0,     0,     0,   318,   319,   320,     0,     0,     0,     0,
+   227,   141,   142,     0,   143,     0,   144,   145,   146,   147,
+   148,   149,   150,     0,   151,   152,   153,   154,   155,   346,
+     0,   156,   157,   158,   159,   160,     0,     0,     0,   161,
+     0,   162,   347,   240,   348,   308,   349,   350,    89,    90,
+     0,   741,     0,   351,   742,     0,   353,   354,   355,     0,
+     0,     0,   318,   319,   320,   739,     0,     0,     0,     0,
+     0,     0,     0,   226,   321,   322,   323,   324,     0,    91,
+   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+   327,   328,   329,     0,   330,     0,     0,     0,     0,     0,
+     0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
+     0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
+     0,   332,     0,   333,   100,     0,   334,     0,   336,   101,
+     0,   102,   103,     0,     0,     0,     0,   337,     0,     0,
+   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
+   108,   109,     0,     0,   338,     0,   339,   340,   111,   112,
+     0,     0,     0,   341,   342,     0,     0,     0,   343,     0,
+     0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
+   345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
+     0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
+     0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
+     0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
+     0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
+   158,   159,   160,     0,     0,     0,   161,     0,   162,   347,
+   240,   348,   308,   349,   350,    89,    90,     0,   745,     0,
+   351,   746,     0,   353,   354,   355,     0,     0,     0,   318,
+   319,   320,   743,     0,     0,     0,     0,     0,     0,     0,
+   226,   321,   322,   323,   324,     0,    91,   325,     0,     0,
+     0,     0,     0,   326,     0,     0,     0,   327,   328,   329,
+     0,   330,     0,     0,     0,     0,     0,     0,     0,    93,
+     0,     0,    94,     0,   331,     0,     0,     0,    95,    96,
+     0,     0,     0,     0,    97,    98,    99,     0,   332,     0,
+   333,   100,     0,   334,     0,   336,   101,     0,   102,   103,
+     0,     0,     0,     0,   337,     0,     0,   104,   105,     0,
+     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
+     0,   338,     0,   339,   340,   111,   112,     0,     0,     0,
+   341,   342,     0,     0,     0,   343,     0,     0,   344,     0,
+     0,     0,     0,     0,   113,   114,   115,   345,     0,   117,
+   118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
+   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
+     0,   139,   140,     0,   227,   141,   142,     0,   143,     0,
+   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
+   153,   154,   155,   346,     0,   156,   157,   158,   159,   160,
+     0,     0,     0,   161,     0,   162,   347,   240,   348,   308,
+   349,   350,    89,    90,     0,   749,     0,   351,   750,     0,
+   353,   354,   355,     0,     0,     0,   318,   319,   320,   747,
+     0,     0,     0,     0,     0,     0,     0,   226,   321,   322,
+   323,   324,     0,    91,   325,     0,     0,     0,     0,     0,
+   326,     0,     0,     0,   327,   328,   329,     0,   330,     0,
+     0,     0,     0,     0,     0,     0,    93,     0,     0,    94,
+     0,   331,     0,     0,     0,    95,    96,     0,     0,     0,
+     0,    97,    98,    99,     0,   332,     0,   333,   100,     0,
+   334,     0,   336,   101,     0,   102,   103,     0,     0,     0,
+     0,   337,     0,     0,   104,   105,     0,     0,   106,     0,
+   107,     0,     0,     0,   108,   109,     0,     0,   338,     0,
+   339,   340,   111,   112,     0,     0,     0,   341,   342,     0,
+     0,     0,   343,     0,     0,   344,     0,     0,     0,     0,
+     0,   113,   114,   115,   345,     0,   117,   118,     0,   119,
+   120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
+     0,   127,   128,     0,     0,   129,   130,   131,   132,   133,
+   134,   135,   136,   137,     0,     0,   138,     0,   139,   140,
+     0,   227,   141,   142,     0,   143,     0,   144,   145,   146,
+   147,   148,   149,   150,     0,   151,   152,   153,   154,   155,
+   346,     0,   156,   157,   158,   159,   160,     0,     0,     0,
+   161,     0,   162,   347,   240,   348,   308,   349,   350,    89,
+    90,     0,   753,     0,   351,   754,     0,   353,   354,   355,
+     0,     0,     0,   318,   319,   320,   751,     0,     0,     0,
      0,     0,     0,     0,   226,   321,   322,   323,   324,     0,
     91,   325,     0,     0,     0,     0,     0,   326,     0,     0,
      0,   327,   328,   329,     0,   330,     0,     0,     0,     0,
@@ -2102,9 +2215,9 @@ static const short yytable[] = {   166,
    142,     0,   143,     0,   144,   145,   146,   147,   148,   149,
    150,     0,   151,   152,   153,   154,   155,   346,     0,   156,
    157,   158,   159,   160,     0,     0,     0,   161,     0,   162,
-   347,   240,   348,   308,   349,   350,    89,    90,     0,   735,
-     0,   351,   736,     0,   353,   354,   355,     0,     0,     0,
-   318,   319,   320,   733,     0,     0,     0,     0,     0,     0,
+   347,   240,   348,   308,   349,   350,    89,    90,     0,   757,
+     0,   351,   758,     0,   353,   354,   355,     0,     0,     0,
+   318,   319,   320,   755,     0,     0,     0,     0,     0,     0,
      0,   226,   321,   322,   323,   324,     0,    91,   325,     0,
      0,     0,     0,     0,   326,     0,     0,     0,   327,   328,
    329,     0,   330,     0,     0,     0,     0,     0,     0,     0,
@@ -2123,15 +2236,15 @@ static const short yytable[] = {   166,
      0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
    152,   153,   154,   155,   346,     0,   156,   157,   158,   159,
    160,     0,     0,     0,   161,     0,   162,   347,   240,   348,
-   308,   349,   350,    89,    90,     0,   739,     0,   351,   740,
+   308,   349,   350,    89,    90,     0,     0,     0,   351,     0,
      0,   353,   354,   355,     0,     0,     0,   318,   319,   320,
-   737,     0,     0,     0,     0,     0,     0,     0,   226,   321,
+   759,     0,     0,     0,     0,     0,     0,     0,   226,   321,
    322,   323,   324,     0,    91,   325,     0,     0,     0,     0,
      0,   326,     0,     0,     0,   327,   328,   329,     0,   330,
-     0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
+     0,     0,   652,     0,     0,     0,     0,    93,     0,     0,
     94,     0,   331,     0,     0,     0,    95,    96,     0,     0,
      0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
-     0,   334,     0,   336,   101,     0,   102,   103,     0,     0,
+     0,   334,   335,   336,   101,     0,   102,   103,     0,     0,
      0,     0,   337,     0,     0,   104,   105,     0,     0,   106,
      0,   107,     0,     0,     0,   108,   109,     0,     0,   338,
      0,   339,   340,   111,   112,     0,     0,     0,   341,   342,
@@ -2144,17 +2257,17 @@ static const short yytable[] = {   166,
    146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
    155,   346,     0,   156,   157,   158,   159,   160,     0,     0,
      0,   161,     0,   162,   347,   240,   348,   308,   349,   350,
-    89,    90,     0,   743,     0,   351,   744,     0,   353,   354,
-   355,     0,     0,     0,   318,   319,   320,   741,     0,     0,
+    89,    90,     0,     0,     0,   351,     0,     0,   353,   354,
+   355,     0,     0,     0,   318,   319,   320,   356,     0,     0,
      0,     0,     0,     0,     0,   226,   321,   322,   323,   324,
      0,    91,   325,     0,     0,     0,     0,     0,   326,     0,
      0,     0,   327,   328,   329,     0,   330,     0,     0,     0,
      0,     0,     0,     0,    93,     0,     0,    94,     0,   331,
      0,     0,     0,    95,    96,     0,     0,     0,     0,    97,
-    98,    99,     0,   332,     0,   333,   100,     0,   334,     0,
+    98,    99,     0,   332,     0,   333,   100,     0,   334,   335,
    336,   101,     0,   102,   103,     0,     0,     0,     0,   337,
      0,     0,   104,   105,     0,     0,   106,     0,   107,     0,
-     0,     0,   108,   109,     0,     0,   338,     0,   339,   340,
+     0,     0,   108,   109,   618,     0,   338,     0,   339,   340,
    111,   112,     0,     0,     0,   341,   342,     0,     0,     0,
    343,     0,     0,   344,     0,     0,     0,     0,     0,   113,
    114,   115,   345,     0,   117,   118,     0,   119,   120,     0,
@@ -2165,14 +2278,14 @@ static const short yytable[] = {   166,
    149,   150,     0,   151,   152,   153,   154,   155,   346,     0,
    156,   157,   158,   159,   160,     0,     0,     0,   161,     0,
    162,   347,   240,   348,   308,   349,   350,    89,    90,     0,
-   747,     0,   351,   748,     0,   353,   354,   355,     0,     0,
-     0,   318,   319,   320,   745,     0,     0,     0,     0,     0,
+     0,     0,   351,     0,     0,   353,   354,   355,     0,     0,
+     0,   318,   319,   320,   356,     0,     0,     0,     0,     0,
      0,     0,   226,   321,   322,   323,   324,     0,    91,   325,
      0,     0,     0,     0,     0,   326,     0,     0,     0,   327,
    328,   329,     0,   330,     0,     0,     0,     0,     0,     0,
      0,    93,     0,     0,    94,     0,   331,     0,     0,     0,
     95,    96,     0,     0,     0,     0,    97,    98,    99,     0,
-   332,     0,   333,   100,     0,   334,     0,   336,   101,     0,
+   332,     0,   333,   100,     0,   334,   335,   336,   101,     0,
    102,   103,     0,     0,     0,     0,   337,     0,     0,   104,
    105,     0,     0,   106,     0,   107,     0,     0,     0,   108,
    109,     0,     0,   338,     0,   339,   340,   111,   112,     0,
@@ -2185,15 +2298,15 @@ static const short yytable[] = {   166,
    143,     0,   144,   145,   146,   147,   148,   149,   150,     0,
    151,   152,   153,   154,   155,   346,     0,   156,   157,   158,
    159,   160,     0,     0,     0,   161,     0,   162,   347,   240,
-   348,   308,   349,   350,    89,    90,     0,   751,     0,   351,
-   752,     0,   353,   354,   355,     0,     0,     0,   318,   319,
-   320,   749,     0,     0,     0,     0,     0,     0,     0,   226,
+   348,   308,   349,   350,    89,    90,     0,   729,     0,   351,
+   730,     0,   353,   354,   355,     0,     0,     0,   318,   319,
+   320,   356,     0,     0,     0,     0,     0,     0,     0,   226,
    321,   322,   323,   324,     0,    91,   325,     0,     0,     0,
      0,     0,   326,     0,     0,     0,   327,   328,   329,     0,
    330,     0,     0,     0,     0,     0,     0,     0,    93,     0,
      0,    94,     0,   331,     0,     0,     0,    95,    96,     0,
      0,     0,     0,    97,    98,    99,     0,   332,     0,   333,
-   100,     0,   334,     0,   336,   101,     0,   102,   103,     0,
+   100,     0,     0,     0,   336,   101,     0,   102,   103,     0,
      0,     0,     0,   337,     0,     0,   104,   105,     0,     0,
    106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
    338,     0,   339,   340,   111,   112,     0,     0,     0,   341,
@@ -2205,9 +2318,9 @@ static const short yytable[] = {   166,
    139,   140,     0,   227,   141,   142,     0,   143,     0,   144,
    145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
    154,   155,   346,     0,   156,   157,   158,   159,   160,     0,
-     0,     0,   161,     0,   162,   347,   240,   348,   308,   349,
-   350,    89,    90,     0,   755,     0,   351,   756,     0,   353,
-   354,   355,     0,     0,     0,   318,   319,   320,   753,     0,
+     0,     0,   161,     0,   162,   347,   240,-32768,   308,   349,
+   350,    89,    90,     0,     0,     0,   351,     0,     0,   353,
+   354,   355,     0,     0,     0,   318,   319,   320,   731,     0,
      0,     0,     0,     0,     0,     0,   226,   321,   322,   323,
    324,     0,    91,   325,     0,     0,     0,     0,     0,   326,
      0,     0,     0,   327,   328,   329,     0,   330,     0,     0,
@@ -2216,7 +2329,7 @@ static const short yytable[] = {   166,
     97,    98,    99,     0,   332,     0,   333,   100,     0,   334,
      0,   336,   101,     0,   102,   103,     0,     0,     0,     0,
    337,     0,     0,   104,   105,     0,     0,   106,     0,   107,
-     0,     0,     0,   108,   109,     0,     0,   338,     0,   339,
+     0,     0,     0,   108,   109,   618,     0,   338,     0,   339,
    340,   111,   112,     0,     0,     0,   341,   342,     0,     0,
      0,   343,     0,     0,   344,     0,     0,     0,     0,     0,
    113,   114,   115,   345,     0,   117,   118,     0,   119,   120,
@@ -2228,13 +2341,13 @@ static const short yytable[] = {   166,
      0,   156,   157,   158,   159,   160,     0,     0,     0,   161,
      0,   162,   347,   240,   348,   308,   349,   350,    89,    90,
      0,     0,     0,   351,     0,     0,   353,   354,   355,     0,
-     0,     0,   318,   319,   320,   757,     0,     0,     0,     0,
+     0,     0,   318,   319,   320,   356,     0,     0,     0,     0,
      0,     0,     0,   226,   321,   322,   323,   324,     0,    91,
    325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
-   327,   328,   329,     0,   330,     0,     0,   651,     0,     0,
+   327,   328,   329,     0,   330,     0,     0,     0,     0,     0,
      0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
      0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
-     0,   332,     0,   333,   100,     0,   334,   335,   336,   101,
+     0,   332,     0,   333,   100,     0,   334,     0,   336,   101,
      0,   102,   103,     0,     0,     0,     0,   337,     0,     0,
    104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
    108,   109,     0,     0,   338,     0,   339,   340,   111,   112,
@@ -2248,18 +2361,18 @@ static const short yytable[] = {   166,
      0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
    158,   159,   160,     0,     0,     0,   161,     0,   162,   347,
    240,   348,   308,   349,   350,    89,    90,     0,     0,     0,
-   351,     0,     0,   353,   354,   355,     0,     0,     0,   318,
+   351,     0,     0,   353,   354,   355,     0,     0,     0,   699,
    319,   320,   356,     0,     0,     0,     0,     0,     0,     0,
-   226,   321,   322,   323,   324,     0,    91,   325,     0,     0,
-     0,     0,     0,   326,     0,     0,     0,   327,   328,   329,
+   226,   700,   701,   702,   703,     0,    91,   325,     0,     0,
+     0,     0,     0,   326,     0,     0,     0,     0,     0,   329,
      0,   330,     0,     0,     0,     0,     0,     0,     0,    93,
      0,     0,    94,     0,   331,     0,     0,     0,    95,    96,
      0,     0,     0,     0,    97,    98,    99,     0,   332,     0,
-   333,   100,     0,   334,   335,   336,   101,     0,   102,   103,
-     0,     0,     0,     0,   337,     0,     0,   104,   105,     0,
-     0,   106,     0,   107,     0,     0,     0,   108,   109,   617,
-     0,   338,     0,   339,   340,   111,   112,     0,     0,     0,
-   341,   342,     0,     0,     0,   343,     0,     0,   344,     0,
+   333,   100,     0,     0,     0,   336,   101,     0,   102,   103,
+     0,     0,     0,     0,   704,     0,     0,   104,   105,     0,
+     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
+     0,   705,     0,   339,   340,   111,   112,     0,     0,     0,
+   706,   342,     0,     0,     0,   707,     0,     0,   344,     0,
      0,     0,     0,     0,   113,   114,   115,   345,     0,   117,
    118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
    124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
@@ -2267,20 +2380,20 @@ static const short yytable[] = {   166,
      0,   139,   140,     0,   227,   141,   142,     0,   143,     0,
    144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
    153,   154,   155,   346,     0,   156,   157,   158,   159,   160,
-     0,     0,     0,   161,     0,   162,   347,   240,   348,   308,
-   349,   350,    89,    90,     0,     0,     0,   351,     0,     0,
-   353,   354,   355,     0,     0,     0,   318,   319,   320,   356,
-     0,     0,     0,     0,     0,     0,     0,   226,   321,   322,
-   323,   324,     0,    91,   325,     0,     0,     0,     0,     0,
-   326,     0,     0,     0,   327,   328,   329,     0,   330,     0,
+     0,     0,     0,   161,     0,   162,   347,   240,   708,   308,
+   349,   350,    89,    90,     0,     0,     0,   709,     0,     0,
+   710,   711,   712,     0,     0,     0,   699,   319,   320,   713,
+     0,     0,     0,     0,     0,     0,     0,   226,   700,   701,
+   702,   703,     0,    91,   325,     0,     0,     0,     0,     0,
+   326,     0,     0,     0,     0,     0,   329,     0,   330,     0,
      0,     0,     0,     0,     0,     0,    93,     0,     0,    94,
      0,   331,     0,     0,     0,    95,    96,     0,     0,     0,
      0,    97,    98,    99,     0,   332,     0,   333,   100,     0,
-   334,   335,   336,   101,     0,   102,   103,     0,     0,     0,
-     0,   337,     0,     0,   104,   105,     0,     0,   106,     0,
-   107,     0,     0,     0,   108,   109,     0,     0,   338,     0,
-   339,   340,   111,   112,     0,     0,     0,   341,   342,     0,
-     0,     0,   343,     0,     0,   344,     0,     0,     0,     0,
+     0,     0,   336,   101,     0,   102,   103,     0,     0,     0,
+     0,   704,     0,     0,   104,   105,     0,     0,   106,     0,
+   107,     0,     0,     0,   108,   109,     0,     0,   705,     0,
+   339,   340,   111,   112,     0,     0,     0,   706,   342,     0,
+     0,     0,   707,     0,     0,   344,     0,     0,     0,     0,
      0,   113,   114,   115,   345,     0,   117,   118,     0,   119,
    120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
      0,   127,   128,     0,     0,   129,   130,   131,   132,   133,
@@ -2288,183 +2401,99 @@ static const short yytable[] = {   166,
      0,   227,   141,   142,     0,   143,     0,   144,   145,   146,
    147,   148,   149,   150,     0,   151,   152,   153,   154,   155,
    346,     0,   156,   157,   158,   159,   160,     0,     0,     0,
-   161,     0,   162,   347,   240,   348,   308,   349,   350,    89,
-    90,     0,   727,     0,   351,   728,     0,   353,   354,   355,
-     0,     0,     0,   318,   319,   320,   356,     0,     0,     0,
-     0,     0,     0,     0,   226,   321,   322,   323,   324,     0,
+   161,     0,   162,   347,   240,-32768,   308,   349,   350,    89,
+    90,     0,     0,     0,   709,     0,     0,   710,   711,   712,
+     0,     0,     0,  1228,   319,   320,   713,     0,     0,     0,
+     0,     0,     0,     0,     0,  1229,  1230,  1231,  1232,     0,
     91,   325,     0,     0,     0,     0,     0,   326,     0,     0,
-     0,   327,   328,   329,     0,   330,     0,     0,     0,     0,
+     0,     0,     0,   329,     0,   330,     0,     0,     0,     0,
      0,     0,     0,    93,     0,     0,    94,     0,   331,     0,
      0,     0,    95,    96,     0,     0,     0,     0,    97,    98,
-    99,     0,   332,     0,   333,   100,     0,     0,     0,   336,
-   101,     0,   102,   103,     0,     0,     0,     0,   337,     0,
+    99,     0,   332,     0,   333,   100,     0,     0,  1233,   336,
+   101,     0,   102,   103,     0,     0,     0,     0,     0,     0,
      0,   104,   105,     0,     0,   106,     0,   107,     0,     0,
-     0,   108,   109,     0,     0,   338,     0,   339,   340,   111,
-   112,     0,     0,     0,   341,   342,     0,     0,     0,   343,
+     0,   108,   109,     0,     0,     0,     0,   339,   340,   111,
+   112,     0,     0,     0,     0,   342,     0,     0,     0,  1234,
      0,     0,   344,     0,     0,     0,     0,     0,   113,   114,
    115,   345,     0,   117,   118,     0,   119,   120,     0,   121,
      0,     0,   122,   123,   124,   125,   126,     0,   127,   128,
      0,     0,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,     0,     0,   138,     0,   139,   140,     0,   227,   141,
+   137,     0,     0,   138,     0,   139,   140,     0,     0,   141,
    142,     0,   143,     0,   144,   145,   146,   147,   148,   149,
    150,     0,   151,   152,   153,   154,   155,   346,     0,   156,
    157,   158,   159,   160,     0,     0,     0,   161,     0,   162,
-   347,   240,-32768,   308,   349,   350,    89,    90,     0,     0,
-     0,   351,     0,     0,   353,   354,   355,     0,     0,     0,
-   318,   319,   320,   729,     0,     0,     0,     0,     0,     0,
-     0,   226,   321,   322,   323,   324,     0,    91,   325,     0,
-     0,     0,     0,     0,   326,     0,     0,     0,   327,   328,
+   347,   240,  1235,   308,   349,   350,    89,    90,     0,     0,
+     0,  1236,     0,     0,  1237,  1238,  1239,     0,     0,     0,
+  1228,   319,   320,  1240,     0,     0,     0,     0,     0,     0,
+     0,     0,  1229,  1230,  1231,  1232,     0,    91,   325,     0,
+     0,     0,     0,     0,   326,     0,     0,     0,     0,     0,
    329,     0,   330,     0,     0,     0,     0,     0,     0,     0,
     93,     0,     0,    94,     0,   331,     0,     0,     0,    95,
     96,     0,     0,     0,     0,    97,    98,    99,     0,   332,
-     0,   333,   100,     0,   334,     0,   336,   101,     0,   102,
-   103,     0,     0,     0,     0,   337,     0,     0,   104,   105,
+     0,   333,   100,     0,     0,     0,   336,   101,     0,   102,
+   103,     0,     0,     0,     0,     0,     0,     0,   104,   105,
      0,     0,   106,     0,   107,     0,     0,     0,   108,   109,
-   617,     0,   338,     0,   339,   340,   111,   112,     0,     0,
-     0,   341,   342,     0,     0,     0,   343,     0,     0,   344,
+     0,     0,     0,     0,   339,   340,   111,   112,     0,     0,
+     0,     0,   342,     0,     0,     0,  1234,     0,     0,   344,
      0,     0,     0,     0,     0,   113,   114,   115,   345,     0,
    117,   118,     0,   119,   120,     0,   121,     0,     0,   122,
    123,   124,   125,   126,     0,   127,   128,     0,     0,   129,
-   130,   131,   132,   133,   134,   135,   136,   137,     0,     0,
-   138,     0,   139,   140,     0,   227,   141,   142,     0,   143,
-     0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
-   152,   153,   154,   155,   346,     0,   156,   157,   158,   159,
-   160,     0,     0,     0,   161,     0,   162,   347,   240,   348,
-   308,   349,   350,    89,    90,     0,     0,     0,   351,     0,
-     0,   353,   354,   355,     0,     0,     0,   318,   319,   320,
-   356,     0,     0,     0,     0,     0,     0,     0,   226,   321,
-   322,   323,   324,     0,    91,   325,     0,     0,     0,     0,
-     0,   326,     0,     0,     0,   327,   328,   329,     0,   330,
-     0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
-    94,     0,   331,     0,     0,     0,    95,    96,     0,     0,
-     0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
-     0,   334,     0,   336,   101,     0,   102,   103,     0,     0,
-     0,     0,   337,     0,     0,   104,   105,     0,     0,   106,
-     0,   107,     0,     0,     0,   108,   109,     0,     0,   338,
-     0,   339,   340,   111,   112,     0,     0,     0,   341,   342,
-     0,     0,     0,   343,     0,     0,   344,     0,     0,     0,
-     0,     0,   113,   114,   115,   345,     0,   117,   118,     0,
-   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
-   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
-   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
-   140,     0,   227,   141,   142,     0,   143,     0,   144,   145,
-   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
-   155,   346,     0,   156,   157,   158,   159,   160,     0,     0,
-     0,   161,     0,   162,   347,   240,   348,   308,   349,   350,
-    89,    90,     0,     0,     0,   351,     0,     0,   353,   354,
-   355,     0,     0,     0,   697,   319,   320,   356,     0,     0,
-     0,     0,     0,     0,     0,   226,   698,   699,   700,   701,
-     0,    91,   325,     0,     0,     0,     0,     0,   326,     0,
-     0,     0,     0,     0,   329,     0,   330,     0,     0,     0,
-     0,     0,     0,     0,    93,     0,     0,    94,     0,   331,
-     0,     0,     0,    95,    96,     0,     0,     0,     0,    97,
-    98,    99,     0,   332,     0,   333,   100,     0,     0,     0,
-   336,   101,     0,   102,   103,     0,     0,     0,     0,   702,
-     0,     0,   104,   105,     0,     0,   106,     0,   107,     0,
-     0,     0,   108,   109,     0,     0,   703,     0,   339,   340,
-   111,   112,     0,     0,     0,   704,   342,     0,     0,     0,
-   705,     0,     0,   344,     0,     0,     0,     0,     0,   113,
-   114,   115,   345,     0,   117,   118,     0,   119,   120,     0,
-   121,     0,     0,   122,   123,   124,   125,   126,     0,   127,
-   128,     0,     0,   129,   130,   131,   132,   133,   134,   135,
-   136,   137,     0,     0,   138,     0,   139,   140,     0,   227,
-   141,   142,     0,   143,     0,   144,   145,   146,   147,   148,
-   149,   150,     0,   151,   152,   153,   154,   155,   346,     0,
-   156,   157,   158,   159,   160,     0,     0,     0,   161,     0,
-   162,   347,   240,   706,   308,   349,   350,    89,    90,     0,
-     0,     0,   707,     0,     0,   708,   709,   710,     0,     0,
-     0,   697,   319,   320,   711,     0,     0,     0,     0,     0,
-     0,     0,   226,   698,   699,   700,   701,     0,    91,   325,
-     0,     0,     0,     0,     0,   326,     0,     0,     0,     0,
-     0,   329,     0,   330,     0,     0,     0,     0,     0,     0,
-     0,    93,     0,     0,    94,     0,   331,     0,     0,     0,
-    95,    96,     0,     0,     0,     0,    97,    98,    99,     0,
-   332,     0,   333,   100,     0,     0,     0,   336,   101,     0,
-   102,   103,     0,     0,     0,     0,   702,     0,     0,   104,
-   105,     0,     0,   106,     0,   107,     0,     0,     0,   108,
-   109,     0,     0,   703,     0,   339,   340,   111,   112,     0,
-     0,     0,   704,   342,     0,     0,     0,   705,     0,     0,
-   344,     0,     0,     0,     0,     0,   113,   114,   115,   345,
-     0,   117,   118,     0,   119,   120,     0,   121,     0,     0,
-   122,   123,   124,   125,   126,     0,   127,   128,     0,     0,
-   129,   130,   131,   132,   133,   134,   135,   136,   137,     0,
-     0,   138,     0,   139,   140,     0,   227,   141,   142,     0,
-   143,     0,   144,   145,   146,   147,   148,   149,   150,     0,
-   151,   152,   153,   154,   155,   346,     0,   156,   157,   158,
-   159,   160,     0,     0,     0,   161,     0,   162,   347,   240,
--32768,   308,   349,   350,    89,    90,     0,     0,     0,   707,
-     0,     0,   708,   709,   710,     0,     0,     0,  1227,   319,
-   320,   711,     0,     0,     0,     0,     0,     0,     0,     0,
-  1228,  1229,  1230,  1231,     0,    91,   325,     0,     0,     0,
-     0,     0,   326,     0,     0,     0,     0,     0,   329,     0,
-   330,     0,     0,     0,     0,     0,     0,     0,    93,     0,
-     0,    94,     0,   331,     0,     0,     0,    95,    96,     0,
-     0,     0,     0,    97,    98,    99,     0,   332,     0,   333,
-   100,     0,     0,  1232,   336,   101,     0,   102,   103,     0,
-     0,     0,     0,     0,     0,     0,   104,   105,     0,     0,
-   106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
-     0,     0,   339,   340,   111,   112,     0,     0,     0,     0,
-   342,     0,     0,     0,  1233,     0,     0,   344,     0,     0,
-     0,     0,     0,   113,   114,   115,   345,     0,   117,   118,
-     0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
-   125,   126,     0,   127,   128,     0,     0,   129,   130,   131,
-   132,   133,   134,   135,   136,   137,     0,     0,   138,     0,
-   139,   140,     0,     0,   141,   142,     0,   143,     0,   144,
-   145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
-   154,   155,   346,     0,   156,   157,   158,   159,   160,     0,
-     0,     0,   161,     0,   162,   347,   240,  1234,   308,   349,
-   350,    89,    90,     0,     0,     0,  1235,     0,     0,  1236,
-  1237,  1238,     0,     0,     0,  1227,   319,   320,  1239,     0,
-     0,     0,     0,     0,     0,     0,     0,  1228,  1229,  1230,
-  1231,     0,    91,   325,     0,     0,     0,     0,     0,   326,
-     0,     0,     0,     0,     0,   329,     0,   330,     0,     0,
-     0,     0,     0,     0,     0,    93,     0,     0,    94,     0,
-   331,     0,     0,     0,    95,    96,     0,     0,     0,     0,
-    97,    98,    99,     0,   332,     0,   333,   100,     0,     0,
-     0,   336,   101,     0,   102,   103,     0,     0,     0,     0,
-     0,     0,     0,   104,   105,     0,     0,   106,     0,   107,
-     0,     0,     0,   108,   109,     0,     0,     0,     0,   339,
-   340,   111,   112,     0,     0,     0,     0,   342,     0,     0,
-     0,  1233,     0,     0,   344,     0,     0,     0,     0,     0,
-   113,   114,   115,   345,     0,   117,   118,     0,   119,   120,
-     0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
-   127,   128,     0,     0,   129,   130,   131,   132,   133,   134,
-   135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
-     0,   141,   142,     0,   143,     0,   144,   145,   146,   147,
-   148,   149,   150,     0,   151,   152,   153,   154,   155,   346,
-     0,   156,   157,   158,   159,   160,     0,     0,     0,   161,
-     0,   162,   347,   240,  1234,   308,   349,   350,    89,    90,
-     0,     0,     0,  1235,     0,     0,  1236,  1237,  1238,     0,
-     0,     0,  1227,   319,   320,  1239,     0,     0,     0,     0,
-     0,     0,     0,     0,  1228,  1229,  1230,  1231,     0,    91,
+   130,   131,   132,   133,   134,   135,   136,   137,     0,     0,
+   138,     0,   139,   140,     0,     0,   141,   142,     0,   143,
+     0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
+   152,   153,   154,   155,   346,     0,   156,   157,   158,   159,
+   160,     0,     0,     0,   161,     0,   162,   347,   240,  1235,
+   308,   349,   350,    89,    90,     0,     0,     0,  1236,     0,
+     0,  1237,  1238,  1239,     0,     0,     0,  1228,   319,   320,
+  1240,     0,     0,     0,     0,     0,     0,     0,     0,  1229,
+  1230,  1231,  1232,     0,    91,   325,     0,     0,     0,     0,
+     0,   326,     0,     0,     0,     0,     0,   329,     0,   330,
+     0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
+    94,     0,   331,     0,     0,     0,    95,    96,     0,     0,
+     0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
+     0,     0,     0,   336,   101,     0,   102,   103,     0,     0,
+     0,     0,     0,     0,     0,   104,   105,     0,     0,   106,
+     0,   107,     0,     0,     0,   108,   109,     0,     0,     0,
+     0,   339,   340,   111,   112,     0,     0,     0,     0,   342,
+     0,     0,     0,  1234,     0,     0,   344,     0,     0,     0,
+     0,     0,   113,   114,   115,   345,     0,   117,   118,     0,
+   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
+   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
+   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
+   140,     0,     0,   141,   142,     0,   143,     0,   144,   145,
+   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
+   155,   346,     0,   156,   157,   158,   159,   160,    89,    90,
+     0,   161,     0,   162,   347,   240,-32768,   308,   349,   350,
+     0,     0,   633,   319,   320,  1236,     0,     0,  1237,  1238,
+  1239,     0,     0,   226,     0,     0,     0,  1240,     0,    91,
    325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
      0,     0,   329,     0,   330,     0,     0,     0,     0,     0,
      0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
      0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
      0,   332,     0,   333,   100,     0,     0,     0,   336,   101,
-     0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
+     0,   102,   103,     0,     0,     0,     0,   634,     0,     0,
    104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
-   108,   109,     0,     0,     0,     0,   339,   340,   111,   112,
-     0,     0,     0,     0,   342,     0,     0,     0,  1233,     0,
+   108,   109,     0,     0,   635,     0,   339,   340,   111,   112,
+     0,     0,     0,   636,   342,     0,     0,     0,     0,     0,
      0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
    345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
      0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
      0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     0,     0,   138,     0,   139,   140,     0,     0,   141,   142,
+     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
      0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
      0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
    158,   159,   160,    89,    90,     0,   161,     0,   162,   347,
-   240,-32768,   308,   349,   350,     0,     0,   632,   319,   320,
-  1235,     0,     0,  1236,  1237,  1238,     0,     0,   226,     0,
-     0,     0,  1239,     0,    91,   325,     0,     0,     0,     0,
+   240,   637,   308,   349,   350,     0,     0,   633,   319,   320,
+   638,     0,     0,   639,     0,     0,     0,     0,   226,     0,
+     0,     0,   640,     0,    91,   325,     0,     0,     0,     0,
      0,   326,     0,     0,     0,     0,     0,   329,     0,   330,
      0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
     94,     0,   331,     0,     0,     0,    95,    96,     0,     0,
      0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
      0,     0,     0,   336,   101,     0,   102,   103,     0,     0,
-     0,     0,   633,     0,     0,   104,   105,     0,     0,   106,
-     0,   107,     0,     0,     0,   108,   109,     0,     0,   634,
-     0,   339,   340,   111,   112,     0,     0,     0,   635,   342,
+     0,     0,   634,     0,     0,   104,   105,     0,     0,   106,
+     0,   107,     0,     0,     0,   108,   109,     0,     0,   635,
+     0,   339,   340,   111,   112,     0,     0,     0,   636,   342,
      0,     0,     0,     0,     0,     0,   344,     0,     0,     0,
      0,     0,   113,   114,   115,   345,     0,   117,   118,     0,
    119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
@@ -2473,34 +2502,34 @@ static const short yytable[] = {   166,
    140,     0,   227,   141,   142,     0,   143,     0,   144,   145,
    146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
    155,   346,     0,   156,   157,   158,   159,   160,    89,    90,
-     0,   161,     0,   162,   347,   240,   636,   308,   349,   350,
-     0,     0,   632,   319,   320,   637,     0,     0,   638,     0,
-     0,     0,     0,   226,     0,     0,     0,   639,     0,    91,
+     0,   161,     0,   162,   347,   240,-32768,   308,   349,   350,
+     0,     0,  1000,   319,   320,   638,     0,     0,   639,     0,
+     0,     0,     0,     0,     0,     0,     0,   640,     0,    91,
    325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
      0,     0,   329,     0,   330,     0,     0,     0,     0,     0,
      0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
      0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
-     0,   332,     0,   333,   100,     0,     0,     0,   336,   101,
-     0,   102,   103,     0,     0,     0,     0,   633,     0,     0,
+     0,   332,     0,   333,   100,     0,  1001,  1002,   336,   101,
+     0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
    104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
-   108,   109,     0,     0,   634,     0,   339,   340,   111,   112,
-     0,     0,     0,   635,   342,     0,     0,     0,     0,     0,
+   108,   109,     0,     0,     0,     0,   339,   340,   111,   112,
+     0,     0,     0,     0,   342,     0,     0,     0,     0,     0,
      0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
    345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
      0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
      0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
+     0,     0,   138,     0,   139,   140,     0,     0,   141,   142,
      0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
      0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
    158,   159,   160,    89,    90,     0,   161,     0,   162,   347,
-   240,-32768,   308,   349,   350,     0,     0,   999,   319,   320,
-   637,     0,     0,   638,     0,     0,     0,     0,     0,     0,
-     0,     0,   639,     0,    91,   325,     0,     0,     0,     0,
+   240,  1003,   308,   349,   350,     0,     0,  1000,   319,   320,
+  1004,     0,     0,  1005,  1006,  1007,     0,     0,     0,     0,
+     0,     0,  1008,     0,    91,   325,     0,     0,     0,     0,
      0,   326,     0,     0,     0,     0,     0,   329,     0,   330,
      0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
     94,     0,   331,     0,     0,     0,    95,    96,     0,     0,
      0,     0,    97,    98,    99,     0,   332,     0,   333,   100,
-     0,  1000,  1001,   336,   101,     0,   102,   103,     0,     0,
+     0,     0,  1002,   336,   101,     0,   102,   103,     0,     0,
      0,     0,     0,     0,     0,   104,   105,     0,     0,   106,
      0,   107,     0,     0,     0,   108,   109,     0,     0,     0,
      0,   339,   340,   111,   112,     0,     0,     0,     0,   342,
@@ -2512,170 +2541,119 @@ static const short yytable[] = {   166,
    140,     0,     0,   141,   142,     0,   143,     0,   144,   145,
    146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
    155,   346,     0,   156,   157,   158,   159,   160,    89,    90,
-     0,   161,     0,   162,   347,   240,  1002,   308,   349,   350,
-     0,     0,   999,   319,   320,  1003,     0,     0,  1004,  1005,
-  1006,     0,     0,     0,     0,     0,     0,  1007,     0,    91,
-   325,     0,     0,     0,     0,     0,   326,     0,     0,     0,
-     0,     0,   329,     0,   330,     0,     0,     0,     0,     0,
-     0,     0,    93,     0,     0,    94,     0,   331,     0,     0,
+     0,   161,     0,   162,   347,   240,-32768,   308,   349,   350,
+     0,     0,     0,     0,     0,  1004,     0,     0,  1005,  1006,
+  1007,     0,     0,   226,     0,     0,     0,  1008,     0,    91,
+     0,     0,     0,     0,     0,     0,    92,     0,     0,     0,
+     0,     0,   491,     0,     0,     0,     0,   492,     0,     0,
+     0,     0,    93,     0,     0,    94,     0,     0,     0,     0,
      0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
-     0,   332,     0,   333,   100,     0,     0,  1001,   336,   101,
+     0,     0,     0,     0,   100,     0,     0,     0,     0,   101,
      0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
-   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
-   108,   109,     0,     0,     0,     0,   339,   340,   111,   112,
-     0,     0,     0,     0,   342,     0,     0,     0,     0,     0,
-     0,   344,     0,     0,     0,     0,     0,   113,   114,   115,
-   345,     0,   117,   118,     0,   119,   120,     0,   121,     0,
+   104,   105,   493,     0,   106,     0,   107,     0,   494,     0,
+   108,   109,     0,     0,   495,     0,   110,     0,   111,   112,
+     0,     0,     0,     0,     0,   496,     0,     0,     0,     0,
+     0,     0,   497,     0,     0,     0,     0,   113,   114,   115,
+   116,     0,   117,   118,     0,   119,   120,     0,   121,     0,
      0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
      0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     0,     0,   138,     0,   139,   140,     0,     0,   141,   142,
+     0,  1201,   138,     0,   139,   140,  1202,   227,   141,   142,
      0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
-     0,   151,   152,   153,   154,   155,   346,     0,   156,   157,
-   158,   159,   160,    89,    90,     0,   161,     0,   162,   347,
-   240,-32768,   308,   349,   350,     0,     0,     0,     0,     0,
-  1003,     0,     0,  1004,  1005,  1006,     0,     0,   226,     0,
-     0,     0,  1007,     0,    91,     0,     0,     0,     0,     0,
-     0,    92,     0,     0,     0,     0,     0,   489,     0,   848,
-     0,     0,   490,     0,     0,     0,     0,    93,     0,     0,
-    94,     0,     0,     0,     0,     0,    95,    96,     0,     0,
-     0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
-     0,     0,     0,     0,   101,     0,   102,   103,     0,     0,
-     0,     0,     0,     0,     0,   104,   105,   491,     0,   106,
-     0,   107,     0,   492,     0,   108,   109,     0,     0,   493,
-     0,   110,     0,   111,   112,     0,     0,     0,     0,     0,
-   494,     0,     0,     0,     0,     0,     0,   495,     0,     0,
-     0,     0,   113,   114,   115,   116,     0,   117,   118,     0,
-   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
-   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
-   133,   134,   135,   136,   137,     0,   489,   138,     0,   139,
-   140,   490,   227,   141,   142,     0,   143,     0,   144,   145,
-   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
-   155,     0,     0,   156,   157,   158,   159,   160,     0,     0,
-     0,   161,   496,   162,   163,     0,     0,  1200,     0,  1446,
-     0,     0,  1201,     0,     0,     0,   491,   497,     0,     0,
-     0,     0,   492,     0,     0,     0,     0,   971,   493,   489,
-     0,     0,     0,     0,   490,     0,     0,     0,     0,   494,
-     0,     0,     0,     0,     0,   498,   495,     0,     0,     0,
-   499,   500,   501,   502,   503,   504,   505,  1202,     0,     0,
-     0,     0,     0,  1203,   506,     0,     0,     0,     0,  1204,
-  1200,     0,     0,     0,     0,  1201,     0,     0,     0,   491,
-  1205,     0,     0,     0,     0,   492,     0,  1206,     0,     0,
-   489,   493,     0,     0,     0,   490,     0,     0,     0,     0,
-     0,     0,   494,     0,     0,     0,     0,     0,     0,   495,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-  1202,   496,     0,     0,     0,     0,  1203,     0,     0,     0,
-  1200,     0,  1204,     0,     0,  1201,   497,     0,     0,     0,
-   491,     0,     0,  1205,     0,     0,   492,     0,     0,     0,
-  1206,     0,   493,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,  1207,   494,   498,     0,     0,     0,     0,   499,
-   500,   501,   502,   503,   504,   505,     0,  1208,     0,     0,
-  1202,     0,  1319,   506,   496,     0,  1203,     0,     0,     0,
-     0,     0,  1204,     0,     0,     0,     0,     0,     0,   497,
-     0,     0,     0,  1205,     0,  1209,     0,     0,     0,     0,
-  1210,  1211,  1212,  1213,  1214,  1215,  1216,     0,     0,     0,
-     0,     0,     0,     0,  1217,  1207,     0,   498,     0,     0,
-     0,     0,   499,   500,   501,   502,   503,   504,   505,     0,
-  1208,     0,     0,     0,     0,   496,   506,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   497,     0,     0,     0,     0,     0,     0,     0,  1209,     0,
-     0,     0,     0,  1210,  1211,  1212,  1213,  1214,  1215,  1216,
-     0,     0,     0,     0,     0,  1207,     0,  1217,   498,    89,
-    90,     0,     0,   499,   500,   501,   502,   503,   504,   505,
-  1208,     0,     0,     0,     0,     0,     0,   506,     0,     0,
+     0,   151,   152,   153,   154,   155,     0,     0,   156,   157,
+   158,   159,   160,     0,     0,     0,   161,   498,   162,   163,
+     0,     0,  1201,     0,     0,     0,     0,  1202,     0,     0,
+     0,  1203,   499,     0,     0,     0,     0,  1204,     0,     0,
+     0,     0,   972,  1205,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,  1206,     0,     0,     0,     0,     0,
+   500,  1207,     0,     0,     0,   501,   502,   503,   504,   505,
+   506,   507,  1203,     0,     0,     0,     0,     0,  1204,   508,
+     0,     0,     0,     0,  1205,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,  1206,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    91,     0,     0,     0,     0,     0,     0,    92,  1209,     0,
-     0,     0,     0,  1210,  1211,  1212,  1213,  1214,  1215,  1216,
-     0,     0,     0,    93,     0,     0,    94,  1217,     0,     0,
-     0,     0,    95,    96,     0,     0,     0,     0,    97,    98,
-    99,     0,     0,     0,     0,   100,     0,     0,     0,     0,
-   101,     0,   102,   103,     0,     0,     0,     0,     0,     0,
-     0,   104,   105,     0,     0,   106,     0,   107,     0,     0,
-     0,   108,   109,     0,     0,     0,     0,   110,     0,   111,
-   112,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   113,   114,
-   115,   116,     0,   117,   118,     0,   119,   120,     0,   121,
-     0,     0,   122,   123,   124,   125,   126,     0,   127,   128,
-     0,     0,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,     0,     0,   138,     0,   139,   140,     0,     0,   141,
-   142,     0,   143,     0,   144,   145,   146,   147,   148,   149,
-   150,     0,   151,   152,   153,   154,   155,  1053,     0,   156,
-   157,   158,   159,   160,    89,    90,     0,   161,     0,   162,
-   163,   240,   297,   308,     0,  1054,     0,   272,   273,   274,
-   275,  1055,   277,   278,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    91,     0,     0,   588,     0,
-     0,     0,    92,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    93,  1201,
-     0,    94,     0,     0,     0,     0,   269,    95,    96,     0,
-     0,     0,     0,    97,    98,    99,     0,     0,     0,     0,
-   100,     0,     0,     0,     0,   101,     0,   102,   103,     0,
-     0,     0,     0,     0,     0,     0,   104,   105,   270,     0,
-   106,     0,   107,     0,  1202,     0,   108,   109,     0,     0,
-  1203,     0,   110,     0,   111,   112,  1204,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,  1205,     0,     0,
-     0,     0,     0,   113,   114,   115,   116,     0,   117,   118,
-     0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
-   125,   126,     0,   127,   128,     0,     0,   129,   130,   131,
-   132,   133,   134,   135,   136,   137,     0,     0,   138,     0,
-   139,   140,    89,    90,   141,   142,     0,   143,     0,   144,
-   145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
-   154,   155,     0,     0,   156,   157,   158,   159,   160,     0,
-     0,     0,   161,    91,   162,   163,     0,   271,     0,  1207,
-    92,     0,   272,   273,   274,   275,   276,   277,   278,     0,
-     0,     0,     0,     0,  1208,     0,    93,     0,     0,    94,
-     0,     0,     0,     0,   269,    95,    96,     0,     0,     0,
-     0,    97,    98,    99,     0,     0,     0,     0,   100,     0,
-     0,     0,  1209,   101,     0,   102,   103,  1210,  1211,  1212,
-  1213,  1214,  1215,  1216,   104,   105,   270,     0,   106,     0,
-   107,  1217,     0,     0,   108,   109,     0,     0,     0,     0,
-   110,     0,   111,   112,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   113,   114,   115,   116,     0,   117,   118,     0,   119,
-   120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
-     0,   127,   128,     0,     0,   129,   130,   131,   132,   133,
-   134,   135,   136,   137,     0,     0,   138,     0,   139,   140,
-     0,     0,   141,   142,     0,   143,     0,   144,   145,   146,
-   147,   148,   149,   150,     0,   151,   152,   153,   154,   155,
-     0,     0,   156,   157,   158,   159,   160,    89,    90,     0,
-   161,     0,   162,   163,     0,   271,     0,     0,     0,     0,
-   272,   273,   274,   275,   276,   277,   278,     0,     0,     0,
-     0,     0,   226,     0,     0,     0,     0,     0,    91,     0,
-     0,     0,     0,     0,     0,    92,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    93,     0,     0,    94,     0,     0,     0,     0,     0,
-    95,    96,     0,     0,     0,     0,    97,    98,    99,     0,
-     0,     0,     0,   100,     0,     0,     0,     0,   101,     0,
-   102,   103,     0,     0,     0,     0,     0,     0,     0,   104,
-   105,     0,     0,   106,     0,   107,     0,     0,     0,   108,
-   109,     0,     0,     0,     0,   110,     0,   111,   112,     0,
+     0,     0,     0,     0,     0,     0,  1208,     0,     0,     0,
+    89,    90,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,  1209,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   113,   114,   115,   116,
-     0,   117,   118,     0,   119,   120,     0,   121,     0,     0,
-   122,   123,   124,   125,   126,     0,   127,   128,     0,     0,
-   129,   130,   131,   132,   133,   134,   135,   136,   137,     0,
-     0,   138,     0,   139,   140,     0,   227,   141,   142,     0,
-   143,     0,   144,   145,   146,   147,   148,   149,   150,     0,
-   151,   152,   153,   154,   155,    89,    90,   156,   157,   158,
-   159,   160,     0,     0,     0,   161,     0,   162,   163,     0,
-     0,     0,   349,     0,     0,     0,     0,     0,     0,     0,
-   523,     0,     0,     0,     0,     0,    91,     0,     0,     0,
+     0,    91,     0,     0,     0,     0,     0,  1208,    92,  1210,
+     0,     0,     0,     0,  1211,  1212,  1213,  1214,  1215,  1216,
+  1217,     0,  1209,     0,    93,     0,     0,    94,  1218,     0,
+     0,     0,     0,    95,    96,     0,     0,     0,     0,    97,
+    98,    99,     0,     0,     0,     0,   100,     0,     0,     0,
+  1210,   101,     0,   102,   103,  1211,  1212,  1213,  1214,  1215,
+  1216,  1217,   104,   105,     0,     0,   106,     0,   107,  1218,
+     0,     0,   108,   109,     0,     0,     0,     0,   110,     0,
+   111,   112,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   113,
+   114,   115,   116,     0,   117,   118,     0,   119,   120,     0,
+   121,     0,     0,   122,   123,   124,   125,   126,     0,   127,
+   128,     0,     0,   129,   130,   131,   132,   133,   134,   135,
+   136,   137,     0,     0,   138,     0,   139,   140,     0,     0,
+   141,   142,     0,   143,     0,   144,   145,   146,   147,   148,
+   149,   150,     0,   151,   152,   153,   154,   155,  1054,     0,
+   156,   157,   158,   159,   160,    89,    90,     0,   161,     0,
+   162,   163,   240,   297,   308,     0,  1055,     0,   272,   273,
+   274,   275,  1056,   277,   278,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    91,     0,     0,   589,
      0,     0,     0,    92,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,    93,
-     0,     0,    94,     0,     0,     0,     0,     0,    95,    96,
+  1202,     0,    94,     0,     0,     0,     0,   269,    95,    96,
      0,     0,     0,     0,    97,    98,    99,     0,     0,     0,
      0,   100,     0,     0,     0,     0,   101,     0,   102,   103,
-     0,     0,     0,     0,     0,     0,     0,   104,   105,     0,
-     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
-     0,     0,     0,   110,     0,   111,   112,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   104,   105,   270,
+     0,   106,     0,   107,     0,  1203,     0,   108,   109,     0,
+     0,  1204,     0,   110,     0,   111,   112,  1205,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,  1206,     0,
      0,     0,     0,     0,   113,   114,   115,   116,     0,   117,
    118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
-   124,   125,   126,     0,   127,   128,    89,    90,   129,   130,
+   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
    131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
-     0,   139,   140,     0,     0,   141,   142,     0,   143,     0,
-   144,   145,   146,   147,   148,   149,   150,    91,   151,   152,
-   153,   154,   155,     0,    92,   156,   157,   158,   159,   160,
-     0,     0,     0,   161,     0,   162,   163,     0,     0,     0,
-    93,     0,     0,    94,     0,     0,     0,     0,   423,    95,
+     0,   139,   140,    89,    90,   141,   142,     0,   143,     0,
+   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
+   153,   154,   155,     0,     0,   156,   157,   158,   159,   160,
+     0,     0,     0,   161,    91,   162,   163,     0,   271,     0,
+  1208,    92,     0,   272,   273,   274,   275,   276,   277,   278,
+     0,     0,     0,     0,     0,  1209,     0,    93,     0,     0,
+    94,     0,     0,     0,     0,   269,    95,    96,     0,     0,
+     0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
+     0,     0,     0,  1210,   101,     0,   102,   103,  1211,  1212,
+  1213,  1214,  1215,  1216,  1217,   104,   105,   270,     0,   106,
+     0,   107,  1218,     0,     0,   108,   109,     0,     0,     0,
+     0,   110,     0,   111,   112,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   113,   114,   115,   116,     0,   117,   118,     0,
+   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
+   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
+   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
+   140,     0,     0,   141,   142,     0,   143,     0,   144,   145,
+   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
+   155,     0,     0,   156,   157,   158,   159,   160,    89,    90,
+     0,   161,     0,   162,   163,     0,   271,     0,     0,     0,
+     0,   272,   273,   274,   275,   276,   277,   278,     0,     0,
+     0,     0,     0,   226,     0,     0,     0,     0,     0,    91,
+     0,     0,     0,     0,     0,     0,    92,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    93,     0,     0,    94,     0,     0,     0,     0,
+     0,    95,    96,     0,     0,     0,     0,    97,    98,    99,
+     0,     0,     0,     0,   100,     0,     0,     0,     0,   101,
+     0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
+   104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
+   108,   109,     0,     0,     0,     0,   110,     0,   111,   112,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   113,   114,   115,
+   116,     0,   117,   118,     0,   119,   120,     0,   121,     0,
+     0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
+     0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     0,     0,   138,     0,   139,   140,     0,   227,   141,   142,
+     0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
+     0,   151,   152,   153,   154,   155,    89,    90,   156,   157,
+   158,   159,   160,     0,     0,     0,   161,     0,   162,   163,
+     0,     0,     0,   349,     0,     0,     0,     0,     0,     0,
+     0,   524,     0,     0,     0,     0,     0,    91,     0,     0,
+     0,     0,     0,     0,    92,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    93,     0,     0,    94,     0,     0,     0,     0,     0,    95,
     96,     0,     0,     0,     0,    97,    98,    99,     0,     0,
      0,     0,   100,     0,     0,     0,     0,   101,     0,   102,
    103,     0,     0,     0,     0,     0,     0,     0,   104,   105,
@@ -2690,7 +2668,7 @@ static const short yytable[] = {   166,
      0,   144,   145,   146,   147,   148,   149,   150,    91,   151,
    152,   153,   154,   155,     0,    92,   156,   157,   158,   159,
    160,     0,     0,     0,   161,     0,   162,   163,     0,     0,
-     0,    93,     0,     0,    94,     0,     0,     0,     0,   765,
+     0,    93,     0,     0,    94,     0,     0,     0,     0,   423,
     95,    96,     0,     0,     0,     0,    97,    98,    99,     0,
      0,     0,     0,   100,     0,     0,     0,     0,   101,     0,
    102,   103,     0,     0,     0,     0,     0,     0,     0,   104,
@@ -2706,7 +2684,7 @@ static const short yytable[] = {   166,
    151,   152,   153,   154,   155,     0,    92,   156,   157,   158,
    159,   160,     0,     0,     0,   161,     0,   162,   163,     0,
      0,     0,    93,     0,     0,    94,     0,     0,     0,     0,
-   982,    95,    96,     0,     0,     0,     0,    97,    98,    99,
+   766,    95,    96,     0,     0,     0,     0,    97,    98,    99,
      0,     0,     0,     0,   100,     0,     0,     0,     0,   101,
      0,   102,   103,     0,     0,     0,     0,     0,     0,     0,
    104,   105,     0,     0,   106,     0,   107,     0,     0,     0,
@@ -2714,100 +2692,58 @@ static const short yytable[] = {   166,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,   113,   114,   115,
    116,     0,   117,   118,     0,   119,   120,     0,   121,     0,
-     0,   122,   123,   124,   125,   126,     0,   127,   128,     0,
-     0,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     0,   122,   123,   124,   125,   126,     0,   127,   128,    89,
+    90,   129,   130,   131,   132,   133,   134,   135,   136,   137,
      0,     0,   138,     0,   139,   140,     0,     0,   141,   142,
      0,   143,     0,   144,   145,   146,   147,   148,   149,   150,
-     0,   151,   152,   153,   154,   155,     0,     0,   156,   157,
-   158,   159,   160,    89,    90,     0,   161,     0,   162,   163,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,  1178,     0,     0,     0,     0,     0,     0,   226,     0,
-     0,     0,     0,     0,    91,     0,     0,     0,     0,     0,
-     0,    92,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
-    94,     0,     0,     0,     0,     0,    95,    96,     0,     0,
-     0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
-     0,     0,     0,     0,   101,     0,   102,   103,     0,     0,
-     0,     0,     0,     0,     0,   104,   105,     0,     0,   106,
-     0,   107,     0,     0,     0,   108,   109,     0,     0,     0,
-     0,   110,     0,   111,   112,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   113,   114,   115,   116,     0,   117,   118,     0,
-   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
-   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
-   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
-   140,     0,   227,   141,   142,     0,   143,     0,   144,   145,
-   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
-   155,    89,    90,   156,   157,   158,   159,   160,     0,     0,
-     0,   161,     0,   162,   163,     0,     0,     0,   349,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    91,     0,     0,     0,     0,     0,     0,    92,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    93,     0,     0,    94,     0,
-     0,     0,     0,     0,    95,    96,     0,     0,     0,     0,
-    97,    98,    99,     0,     0,     0,     0,   100,     0,     0,
-     0,     0,   101,     0,   102,   103,     0,     0,     0,     0,
-     0,     0,     0,   104,   105,     0,     0,   106,     0,   107,
-     0,     0,     0,   108,   109,     0,     0,     0,     0,   110,
-     0,   111,   112,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   113,   114,   115,   116,     0,   117,   118,     0,   119,   120,
-     0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
-   127,   128,     0,     0,   129,   130,   131,   132,   133,   134,
-   135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
-     0,   141,   142,     0,   143,     0,   144,   145,   146,   147,
-   148,   149,   150,     0,   151,   152,   153,   154,   155,    89,
-    90,   156,   157,   158,   159,   160,     0,     0,     0,   161,
-     0,   162,   163,     0,     0,   308,     0,     0,     0,     0,
-     0,   663,     0,   664,   665,     0,     0,     0,     0,     0,
-    91,     0,     0,     0,     0,     0,     0,    92,     0,     0,
-     0,     0,     0,   666,     0,     0,     0,   667,     0,     0,
-     0,   668,     0,    93,     0,     0,    94,     0,     0,     0,
-     0,     0,    95,    96,     0,     0,     0,     0,    97,    98,
+    91,   151,   152,   153,   154,   155,     0,    92,   156,   157,
+   158,   159,   160,     0,     0,     0,   161,     0,   162,   163,
+     0,     0,     0,    93,     0,     0,    94,     0,     0,     0,
+     0,   983,    95,    96,     0,     0,     0,     0,    97,    98,
     99,     0,     0,     0,     0,   100,     0,     0,     0,     0,
-   101,     0,   102,   103,     0,   669,     0,     0,   670,   671,
+   101,     0,   102,   103,     0,     0,     0,     0,     0,     0,
      0,   104,   105,     0,     0,   106,     0,   107,     0,     0,
-     0,   108,   109,     0,     0,     0,   672,   110,     0,   111,
-   112,     0,     0,   673,     0,   674,     0,     0,     0,     0,
+     0,   108,   109,     0,     0,     0,     0,   110,     0,   111,
+   112,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,   113,   114,
-   115,   116,   675,   117,   118,   676,   119,   120,   677,   121,
-   678,   679,   122,   123,   124,   125,   126,   680,   127,   128,
-   681,   682,   129,   130,   131,   132,   133,   134,   135,   136,
-   137,   683,   684,   138,   685,   139,   140,   686,   687,   141,
-   142,   688,   143,     0,   144,   145,   146,   147,   148,   149,
-   150,   689,   151,   152,   153,   154,   155,   690,   691,   156,
-   157,   158,   159,   160,    89,    90,   692,   161,   693,   162,
-   163,     0,     0,     0,     0,     0,     0,     0,     0,   319,
-   320,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    91,   568,     0,     0,     0,
-     0,     0,   569,     0,     0,     0,     0,     0,     0,     0,
-   570,     0,     0,     0,     0,     0,     0,     0,    93,     0,
+   115,   116,     0,   117,   118,     0,   119,   120,     0,   121,
+     0,     0,   122,   123,   124,   125,   126,     0,   127,   128,
+     0,     0,   129,   130,   131,   132,   133,   134,   135,   136,
+   137,     0,     0,   138,     0,   139,   140,     0,     0,   141,
+   142,     0,   143,     0,   144,   145,   146,   147,   148,   149,
+   150,     0,   151,   152,   153,   154,   155,     0,     0,   156,
+   157,   158,   159,   160,    89,    90,     0,   161,     0,   162,
+   163,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,  1179,     0,     0,     0,     0,     0,     0,   226,
+     0,     0,     0,     0,     0,    91,     0,     0,     0,     0,
+     0,     0,    92,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    93,     0,
      0,    94,     0,     0,     0,     0,     0,    95,    96,     0,
-     0,     0,     0,    97,    98,    99,     0,   332,     0,   333,
-   100,     0,     0,     0,   571,   101,     0,   102,   103,     0,
+     0,     0,     0,    97,    98,    99,     0,     0,     0,     0,
+   100,     0,     0,     0,     0,   101,     0,   102,   103,     0,
      0,     0,     0,     0,     0,     0,   104,   105,     0,     0,
    106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
      0,     0,   110,     0,   111,   112,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   344,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,   113,   114,   115,   116,     0,   117,   118,
      0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
    125,   126,     0,   127,   128,     0,     0,   129,   130,   131,
    132,   133,   134,   135,   136,   137,     0,     0,   138,     0,
-   139,   140,     0,     0,   141,   142,     0,   143,     0,   144,
+   139,   140,     0,   227,   141,   142,     0,   143,     0,   144,
    145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
    154,   155,    89,    90,   156,   157,   158,   159,   160,     0,
-     0,     0,   161,     0,   162,   163,     0,     0,     0,   545,
-     0,     0,     0,     0,   546,     0,     0,     0,     0,     0,
+     0,     0,   161,     0,   162,   163,     0,     0,     0,   349,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    91,     0,     0,     0,     0,     0,     0,
     92,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   547,     0,     0,     0,     0,     0,    93,     0,     0,    94,
+     0,     0,     0,     0,     0,     0,    93,     0,     0,    94,
      0,     0,     0,     0,     0,    95,    96,     0,     0,     0,
      0,    97,    98,    99,     0,     0,     0,     0,   100,     0,
      0,     0,     0,   101,     0,   102,   103,     0,     0,     0,
-     0,     0,     0,   548,   104,   105,     0,     0,   106,     0,
+     0,     0,     0,     0,   104,   105,     0,     0,   106,     0,
    107,     0,     0,     0,   108,   109,     0,     0,     0,     0,
    110,     0,   111,   112,     0,     0,     0,     0,     0,     0,
-   549,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,   113,   114,   115,   116,     0,   117,   118,     0,   119,
    120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
      0,   127,   128,     0,     0,   129,   130,   131,   132,   133,
@@ -2815,30 +2751,72 @@ static const short yytable[] = {   166,
      0,     0,   141,   142,     0,   143,     0,   144,   145,   146,
    147,   148,   149,   150,     0,   151,   152,   153,   154,   155,
     89,    90,   156,   157,   158,   159,   160,     0,     0,     0,
-   161,     0,   162,   163,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   226,     0,     0,     0,     0,
+   161,     0,   162,   163,     0,     0,   308,     0,     0,     0,
+     0,     0,   665,     0,   666,   667,     0,     0,     0,     0,
      0,    91,     0,     0,     0,     0,     0,     0,    92,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    93,     0,     0,    94,     0,     0,
+     0,     0,     0,     0,   668,     0,     0,     0,   669,     0,
+     0,     0,   670,     0,    93,     0,     0,    94,     0,     0,
      0,     0,     0,    95,    96,     0,     0,     0,     0,    97,
     98,    99,     0,     0,     0,     0,   100,     0,     0,     0,
-     0,   101,     0,   102,   103,     0,     0,     0,     0,     0,
-     0,     0,   104,   105,     0,     0,   106,     0,   107,     0,
-     0,     0,   108,   109,     0,     0,     0,     0,   110,     0,
-   111,   112,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   101,     0,   102,   103,     0,   671,     0,     0,   672,
+   673,     0,   104,   105,     0,     0,   106,     0,   107,     0,
+     0,     0,   108,   109,     0,     0,     0,   674,   110,     0,
+   111,   112,     0,     0,   675,     0,   676,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,   113,
-   114,   115,   116,     0,   117,   118,     0,   119,   120,     0,
-   121,     0,     0,   122,   123,   124,   125,   126,     0,   127,
-   128,    89,    90,   129,   130,   131,   132,   133,   134,   135,
-   136,   137,     0,     0,   138,     0,   139,   140,     0,   227,
-   141,   142,     0,   143,     0,   144,   145,   146,   147,   148,
-   149,   150,    91,   151,   152,   153,   154,   155,     0,    92,
-   156,   157,   158,   159,   160,     0,     0,     0,   161,     0,
-   162,   163,     0,   837,     0,    93,     0,     0,    94,     0,
+   114,   115,   116,   677,   117,   118,   678,   119,   120,   679,
+   121,   680,   681,   122,   123,   124,   125,   126,   682,   127,
+   128,   683,   684,   129,   130,   131,   132,   133,   134,   135,
+   136,   137,   685,   686,   138,   687,   139,   140,   688,   689,
+   141,   142,   690,   143,     0,   144,   145,   146,   147,   148,
+   149,   150,   691,   151,   152,   153,   154,   155,   692,   693,
+   156,   157,   158,   159,   160,    89,    90,   694,   161,   695,
+   162,   163,     0,     0,     0,     0,     0,     0,     0,     0,
+   319,   320,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    91,   569,     0,     0,
+     0,     0,     0,   570,     0,     0,     0,     0,     0,     0,
+     0,   571,     0,     0,     0,     0,     0,     0,     0,    93,
+     0,     0,    94,     0,     0,     0,     0,     0,    95,    96,
+     0,     0,     0,     0,    97,    98,    99,     0,   332,     0,
+   333,   100,     0,     0,     0,   572,   101,     0,   102,   103,
+     0,     0,     0,     0,     0,     0,     0,   104,   105,     0,
+     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
+     0,     0,     0,   110,     0,   111,   112,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   344,     0,
+     0,     0,     0,     0,   113,   114,   115,   116,     0,   117,
+   118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
+   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
+     0,   139,   140,     0,     0,   141,   142,     0,   143,     0,
+   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
+   153,   154,   155,    89,    90,   156,   157,   158,   159,   160,
+     0,     0,     0,   161,     0,   162,   163,     0,     0,     0,
+   546,     0,     0,     0,     0,   547,     0,     0,     0,     0,
+     0,     0,     0,     0,    91,     0,     0,     0,     0,     0,
+     0,    92,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   548,     0,     0,     0,     0,     0,    93,     0,     0,
+    94,     0,     0,     0,     0,     0,    95,    96,     0,     0,
+     0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
+     0,     0,     0,     0,   101,     0,   102,   103,     0,     0,
+     0,     0,     0,     0,   549,   104,   105,     0,     0,   106,
+     0,   107,     0,     0,     0,   108,   109,     0,     0,     0,
+     0,   110,     0,   111,   112,     0,     0,     0,     0,     0,
+     0,   550,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   113,   114,   115,   116,     0,   117,   118,     0,
+   119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
+   126,     0,   127,   128,     0,     0,   129,   130,   131,   132,
+   133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
+   140,     0,     0,   141,   142,     0,   143,     0,   144,   145,
+   146,   147,   148,   149,   150,     0,   151,   152,   153,   154,
+   155,    89,    90,   156,   157,   158,   159,   160,     0,     0,
+     0,   161,     0,   162,   163,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   226,     0,     0,     0,
+     0,     0,    91,     0,     0,     0,     0,     0,     0,    92,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    93,     0,     0,    94,     0,
      0,     0,     0,     0,    95,    96,     0,     0,     0,     0,
     97,    98,    99,     0,     0,     0,     0,   100,     0,     0,
      0,     0,   101,     0,   102,   103,     0,     0,     0,     0,
-     0,     0,     0,   104,   105,     0,   838,   106,     0,   107,
+     0,     0,     0,   104,   105,     0,     0,   106,     0,   107,
      0,     0,     0,   108,   109,     0,     0,     0,     0,   110,
      0,   111,   112,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -2846,16 +2824,16 @@ static const short yytable[] = {   166,
      0,   121,     0,     0,   122,   123,   124,   125,   126,     0,
    127,   128,    89,    90,   129,   130,   131,   132,   133,   134,
    135,   136,   137,     0,     0,   138,     0,   139,   140,     0,
-     0,   141,   142,     0,   143,     0,   144,   145,   146,   147,
+   227,   141,   142,     0,   143,     0,   144,   145,   146,   147,
    148,   149,   150,    91,   151,   152,   153,   154,   155,     0,
     92,   156,   157,   158,   159,   160,     0,     0,     0,   161,
-     0,   162,   163,     0,     0,     0,    93,     0,     0,    94,
+     0,   162,   163,     0,   838,     0,    93,     0,     0,    94,
      0,     0,     0,     0,     0,    95,    96,     0,     0,     0,
-     0,    97,    98,    99,   223,     0,     0,     0,   100,     0,
+     0,    97,    98,    99,     0,     0,     0,     0,   100,     0,
      0,     0,     0,   101,     0,   102,   103,     0,     0,     0,
-     0,     0,     0,     0,   104,   105,     0,     0,   106,     0,
+     0,     0,     0,     0,   104,   105,     0,   839,   106,     0,
    107,     0,     0,     0,   108,   109,     0,     0,     0,     0,
-   224,     0,   111,   112,     0,     0,     0,     0,     0,     0,
+   110,     0,   111,   112,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,   113,   114,   115,   116,     0,   117,   118,     0,   119,
    120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
@@ -2866,17 +2844,17 @@ static const short yytable[] = {   166,
      0,    92,   156,   157,   158,   159,   160,     0,     0,     0,
    161,     0,   162,   163,     0,     0,     0,    93,     0,     0,
     94,     0,     0,     0,     0,     0,    95,    96,     0,     0,
-     0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
+     0,     0,    97,    98,    99,   223,     0,     0,     0,   100,
      0,     0,     0,     0,   101,     0,   102,   103,     0,     0,
      0,     0,     0,     0,     0,   104,   105,     0,     0,   106,
      0,   107,     0,     0,     0,   108,   109,     0,     0,     0,
-     0,   110,     0,   111,   112,     0,     0,     0,     0,     0,
+     0,   224,     0,   111,   112,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,   113,   114,   115,   116,     0,   117,   118,     0,
    119,   120,     0,   121,     0,     0,   122,   123,   124,   125,
    126,     0,   127,   128,    89,    90,   129,   130,   131,   132,
    133,   134,   135,   136,   137,     0,     0,   138,     0,   139,
-   140,     0,     0,   141,   142,   597,   143,     0,   144,   145,
+   140,     0,     0,   141,   142,     0,   143,     0,   144,   145,
    146,   147,   148,   149,   150,    91,   151,   152,   153,   154,
    155,     0,    92,   156,   157,   158,   159,   160,     0,     0,
      0,   161,     0,   162,   163,     0,     0,     0,    93,     0,
@@ -2889,31 +2867,31 @@ static const short yytable[] = {   166,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,   113,   114,   115,   116,     0,   117,   118,
      0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
-   125,   126,     0,   127,   128,     0,     0,   129,   130,   131,
+   125,   126,     0,   127,   128,    89,    90,   129,   130,   131,
    132,   133,   134,   135,   136,   137,     0,     0,   138,     0,
-   139,   140,     0,     0,   141,   142,  1069,   143,     0,   144,
-   145,   146,   147,   148,   149,   150,     0,   151,   152,   153,
-   154,   155,    89,    90,   156,   157,   158,   159,   160,  1173,
-     0,     0,   161,     0,   162,   163,     0,     0,     0,     0,
+   139,   140,     0,     0,   141,   142,   598,   143,     0,   144,
+   145,   146,   147,   148,   149,   150,    91,   151,   152,   153,
+   154,   155,     0,    92,   156,   157,   158,   159,   160,     0,
+     0,     0,   161,     0,   162,   163,     0,     0,     0,    93,
+     0,     0,    94,     0,     0,     0,     0,     0,    95,    96,
+     0,     0,     0,     0,    97,    98,    99,     0,     0,     0,
+     0,   100,     0,     0,     0,     0,   101,     0,   102,   103,
+     0,     0,     0,     0,     0,     0,     0,   104,   105,     0,
+     0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
+     0,     0,     0,   110,     0,   111,   112,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    91,     0,     0,     0,     0,     0,     0,
-    92,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    93,     0,     0,    94,
-     0,     0,     0,     0,     0,    95,    96,     0,     0,     0,
-     0,    97,    98,    99,     0,     0,     0,     0,   100,     0,
-     0,     0,     0,   101,     0,   102,   103,     0,     0,     0,
-     0,     0,     0,     0,   104,   105,     0,     0,   106,     0,
-   107,     0,     0,     0,   108,   109,     0,     0,     0,     0,
-   110,     0,   111,   112,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   113,   114,   115,   116,     0,   117,
+   118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
+   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
+   131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
+     0,   139,   140,     0,     0,   141,   142,  1070,   143,     0,
+   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
+   153,   154,   155,    89,    90,   156,   157,   158,   159,   160,
+  1174,     0,     0,   161,     0,   162,   163,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   113,   114,   115,   116,     0,   117,   118,     0,   119,
-   120,     0,   121,     0,     0,   122,   123,   124,   125,   126,
-     0,   127,   128,    89,    90,   129,   130,   131,   132,   133,
-   134,   135,   136,   137,     0,     0,   138,     0,   139,   140,
-     0,     0,   141,   142,     0,   143,     0,   144,   145,   146,
-   147,   148,   149,   150,    91,   151,   152,   153,   154,   155,
-     0,    92,   156,   157,   158,   159,   160,     0,     0,     0,
-   161,     0,   162,   163,     0,     0,     0,    93,     0,     0,
+     0,     0,     0,     0,    91,     0,     0,     0,     0,     0,
+     0,    92,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,    93,     0,     0,
     94,     0,     0,     0,     0,     0,    95,    96,     0,     0,
      0,     0,    97,    98,    99,     0,     0,     0,     0,   100,
      0,     0,     0,     0,   101,     0,   102,   103,     0,     0,
@@ -2934,7 +2912,7 @@ static const short yytable[] = {   166,
    100,     0,     0,     0,     0,   101,     0,   102,   103,     0,
      0,     0,     0,     0,     0,     0,   104,   105,     0,     0,
    106,     0,   107,     0,     0,     0,   108,   109,     0,     0,
-     0,     0,   247,     0,   111,   112,     0,     0,     0,     0,
+     0,     0,   110,     0,   111,   112,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,   113,   114,   115,   116,     0,   117,   118,
      0,   119,   120,     0,   121,     0,     0,   122,   123,   124,
@@ -2949,437 +2927,532 @@ static const short yytable[] = {   166,
      0,   100,     0,     0,     0,     0,   101,     0,   102,   103,
      0,     0,     0,     0,     0,     0,     0,   104,   105,     0,
      0,   106,     0,   107,     0,     0,     0,   108,   109,     0,
-     0,     0,     0,   249,     0,   111,   112,     0,     0,     0,
+     0,     0,     0,   247,     0,   111,   112,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,   113,   114,   115,   116,     0,   117,
    118,     0,   119,   120,     0,   121,     0,     0,   122,   123,
-   124,   125,   126,     0,   127,   128,     0,     0,   129,   130,
+   124,   125,   126,     0,   127,   128,    89,    90,   129,   130,
    131,   132,   133,   134,   135,   136,   137,     0,     0,   138,
      0,   139,   140,     0,     0,   141,   142,     0,   143,     0,
-   144,   145,   146,   147,   148,   149,   150,     0,   151,   152,
-   153,   154,   155,     0,     0,   156,   157,   158,   159,   160,
-     0,     0,     1,   161,     0,   162,   163,     2,     0,     0,
-     0,     0,     0,     0,     0,     0,     3,     0,     0,     4,
-     0,     5,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     6,     0,     7,     0,     0,     0,     8,     9,    10,
-     0,     0,     0,    11,     0,     0,     0,     0,     0,    12,
-     0,     0,     0,     0,   319,   320,    13,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    91,   325,     0,     0,     0,     0,     0,   469,     0,     0,
-     0,     0,     0,   329,     0,   330,     0,     0,     0,     0,
-     0,     0,     0,    93,     0,     0,     0,    14,   331,    15,
-     0,     0,    16,    17,     0,     0,     0,     0,     0,    98,
-    99,     0,   332,     0,   333,     0,     0,    18,     0,   336,
+   144,   145,   146,   147,   148,   149,   150,    91,   151,   152,
+   153,   154,   155,     0,    92,   156,   157,   158,   159,   160,
+     0,     0,     0,   161,     0,   162,   163,     0,     0,     0,
+    93,     0,     0,    94,     0,     0,     0,     0,     0,    95,
+    96,     0,     0,     0,     0,    97,    98,    99,     0,     0,
+     0,     0,   100,     0,     0,     0,     0,   101,     0,   102,
+   103,     0,     0,     0,     0,     0,     0,     0,   104,   105,
+     0,     0,   106,     0,   107,     0,     0,     0,   108,   109,
+     0,     0,     0,     0,   249,     0,   111,   112,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    19,     0,     0,     0,     0,     0,     0,     0,    20,
-    21,     0,   109,   617,     0,     0,     0,   470,   340,    22,
-    23,     0,     0,     0,     0,   342,     0,     0,     0,     0,
-    24,    25,   344,    26,     0,     0,    27,     0,   113,     0,
-     0,   471,    28,   319,   320,     0,     0,     0,     0,     0,
-    29,     0,     0,     0,     0,     0,     0,    30,     0,    91,
-   325,     0,     0,    31,     0,    32,   469,     0,     0,     0,
-     0,     0,   329,     0,   330,     0,     0,     0,     0,     0,
-     0,     0,    93,     0,     0,     0,     0,   331,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   346,    98,    99,
-     0,   332,     0,   333,     0,     0,     0,     0,   336,     0,
-   472,   240,     0,   308,   349,   350,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   113,   114,   115,   116,     0,
+   117,   118,     0,   119,   120,     0,   121,     0,     0,   122,
+   123,   124,   125,   126,     0,   127,   128,     0,     0,   129,
+   130,   131,   132,   133,   134,   135,   136,   137,     0,     0,
+   138,     0,   139,   140,     0,     0,   141,   142,     0,   143,
+     0,   144,   145,   146,   147,   148,   149,   150,     0,   151,
+   152,   153,   154,   155,     0,     0,   156,   157,   158,   159,
+   160,     0,     0,     1,   161,     0,   162,   163,     2,     0,
+     0,     0,     0,     0,     0,     0,     0,     3,     0,     0,
+     4,     0,     5,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     6,     0,     7,     0,     0,     0,     8,     9,
+    10,     0,     0,     0,    11,     0,     0,     0,     0,     0,
+    12,     0,     0,     0,     0,   319,   320,    13,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   109,   319,   320,     0,     0,   470,   340,     0,     0,
-     0,     0,     0,     0,   342,     0,     0,     0,    91,   325,
-     0,   344,     0,     0,     0,   469,     0,   113,     0,     0,
-   471,     0,     0,   330,     0,     0,     0,     0,     0,     0,
-     0,    93,     0,     0,     0,     0,   331,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    98,    99,     0,
-   332,     0,   333,     0,     0,     0,     0,   336,     0,     0,
+     0,    91,   325,     0,     0,     0,     0,     0,   469,     0,
+     0,     0,     0,     0,   329,     0,   330,     0,     0,     0,
+     0,     0,     0,     0,    93,     0,     0,     0,    14,   331,
+    15,     0,     0,    16,    17,     0,     0,     0,     0,     0,
+    98,    99,     0,   332,     0,   333,     0,     0,    18,     0,
+   336,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    19,     0,     0,     0,     0,     0,     0,     0,
+    20,    21,     0,   109,   618,     0,     0,     0,   470,   340,
+    22,    23,     0,     0,     0,     0,   342,     0,     0,     0,
+     0,    24,    25,   344,    26,     0,     0,    27,     0,   113,
+     0,     0,   471,    28,   319,   320,     0,     0,     0,     0,
+     0,    29,     0,     0,     0,     0,     0,     0,    30,     0,
+    91,   325,     0,     0,    31,     0,    32,   469,     0,     0,
+     0,     0,     0,   329,     0,   330,     0,     0,     0,     0,
+     0,     0,     0,    93,     0,     0,     0,     0,   331,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   346,    98,
+    99,     0,   332,     0,   333,     0,     0,     0,     0,   336,
+     0,   472,   240,     0,   308,   349,   350,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   346,     0,     0,     0,
-   109,     0,     0,     0,     0,   470,   340,     0,     0,   472,
-   240,     0,   308,   349,   350,     0,     0,     0,     0,     0,
-   344,     0,     0,     0,     0,     0,   113,     0,     0,   471,
+     0,     0,   109,     0,     0,     0,     0,   470,   340,     0,
+     0,     0,     0,     0,     0,   342,     0,     0,     0,     0,
+     0,     0,   344,     0,     0,     0,     0,     0,   113,     0,
+     0,   471,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   346,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   804,   346,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   472
+   472,   240,     0,   308,   349,   350
 };
 
 static const short yycheck[] = {     3,
-   525,   170,     6,   199,   799,   182,   196,   971,    25,   914,
-  1201,   607,   524,    17,    18,   237,    20,   529,   222,   188,
-    24,   617,   845,   846,    28,    29,    30,    31,   465,   809,
-  1245,   536,   115,   856,     6,   409,   506,   650,   977,   652,
-   653,  1411,  1412,    52,   389,   706,   707,   708,   709,   710,
-    52,    52,    50,     6,     6,    37,     9,    20,    37,    37,
-    23,    37,   723,     5,  1171,     7,   320,     6,  1493,  1494,
-    38,    16,    37,    47,   124,     3,   513,   871,    63,   333,
-    84,    38,    38,   124,   872,    52,    38,   557,    51,   636,
-   637,   638,   639,   605,    13,    71,    73,   124,    60,    85,
-    42,   205,    13,   124,    61,    61,   124,    79,    82,    61,
-   814,    37,  1537,   207,   818,   124,    52,   313,    42,   223,
-   316,   215,  1492,    95,   183,   919,    47,    18,   211,   106,
-   642,    94,   920,    24,    38,    80,   238,    28,   124,    58,
-    31,     8,   107,   105,    36,   119,    38,    58,   115,    63,
-   107,    70,   356,     8,   122,   107,    82,    61,   121,    70,
-   125,    82,  1353,   108,   168,   122,   122,   171,   172,    61,
-   122,   175,   176,   101,   178,   179,   226,   204,   182,    10,
-   142,   283,   186,   187,   108,   226,   190,   228,   192,   193,
-   194,   205,   187,    84,   385,   199,   200,    10,   119,   194,
-   207,   713,   142,   107,   458,   226,   223,   228,   226,   223,
-   228,  1116,   140,   217,   651,   107,  1641,   226,   122,  1014,
-  1015,   219,  1329,   205,   226,   226,   205,   205,   156,   205,
-   122,   235,   171,   172,   238,   207,   188,   833,   245,   178,
-   244,   226,   184,   215,  1067,   117,    47,    57,     6,   146,
-   160,   190,    47,   192,    53,   916,  1447,   205,   202,   131,
-   873,   200,    10,    73,   227,   110,  1636,   928,   929,   930,
-   931,   932,   933,   464,   227,   223,   173,   168,   147,   283,
-    81,    82,    40,   300,   188,   177,    81,    82,   179,    20,
-   294,   796,    91,    99,   207,   186,   106,   205,  1513,   490,
-   205,   110,   309,  1538,  1539,   174,   510,  1322,   921,   313,
-  1325,   224,   316,   317,   123,   223,   122,  1508,   119,  1510,
-    51,  1260,    52,   870,   119,   207,   217,  1562,    58,   216,
-   217,   222,   879,   880,   881,   882,   883,   884,   225,   206,
-   357,     4,   224,   226,   235,   228,     9,   214,   215,   216,
-   217,   206,    15,   244,   220,   294,    19,   204,   225,   214,
-   215,   216,   217,    94,   182,   382,   383,   384,   216,   217,
-   225,   222,   541,   222,   223,   206,   227,   225,   848,   160,
-  1285,   385,   386,   214,   215,   216,   217,   226,   137,   228,
-   121,   395,   141,   206,   225,    67,   413,   401,   211,   212,
-   213,   214,   215,   216,   217,   409,   204,   205,    96,   207,
-   414,   209,   225,   204,    36,   885,    38,   421,   422,   764,
-   216,   217,   226,   427,   195,   196,   430,   431,    85,   225,
-   775,   435,    85,    58,   205,   872,   443,   444,   445,    61,
-   814,    85,   133,   450,   818,   636,   637,   638,   639,   108,
-   887,   888,    13,   216,   217,   462,    85,   969,   206,   133,
-   464,   898,   225,   207,   934,   209,   214,   215,   216,   217,
-  1250,   226,  1436,   228,  1087,  1088,  1089,   225,   485,   133,
-   487,  1142,   421,   920,   488,   107,   490,   139,   427,   216,
-   217,   430,   431,   216,   385,   386,   220,    58,   225,   936,
-   122,   227,   130,    64,   395,   537,   538,   539,   512,    70,
-   514,  1124,  1125,  1126,    10,   706,   707,   708,   709,   710,
-    53,   991,   226,    20,   228,   729,    59,   130,    25,   733,
-   227,   422,   723,   737,    10,    20,    69,   741,   227,    67,
-    37,   745,   546,   105,    77,   749,  1485,    33,  1487,   753,
-  1075,   129,    37,   757,   176,   177,  1081,    90,  1234,  1235,
-  1236,  1237,  1238,  1239,   580,    13,   582,   583,   584,   585,
-   103,   226,    34,   580,    85,   582,   583,   584,   585,   206,
-   227,   206,    64,   774,    81,   212,   213,   120,   592,   214,
-   215,   216,   217,   207,   227,    57,    81,    94,   602,    93,
-   225,   223,   163,   100,   227,   227,   610,   546,   127,    94,
-    58,    73,    74,    19,   227,   100,    64,   178,   226,   510,
-   228,   226,    70,   228,   121,   226,   630,   228,   226,   226,
-   228,   228,   636,   637,   638,   639,   121,   227,   828,   829,
-   227,   845,   846,   227,   106,   206,   226,   226,   228,   228,
-   827,   227,   856,   214,   215,   216,   217,   226,   226,   228,
-   228,  1337,   227,   226,   225,   228,   206,  1104,   143,   226,
-   132,   228,   227,   148,   214,   215,   216,   217,   227,   870,
-   871,   163,   227,   130,   159,   225,   890,   223,   879,   880,
-   881,   882,   883,   884,   169,   170,   178,   226,  1374,   228,
-   227,   592,   706,   707,   708,   709,   710,  1383,  1384,  1385,
-  1386,  1387,  1388,  1389,  1390,   163,  1392,   227,   193,   723,
-   226,   226,   228,   228,   206,   916,    10,   226,   919,   228,
-   178,   223,   214,   215,   216,   217,  1261,   928,   929,   930,
-   931,   932,   933,   225,   222,  1568,   226,  1217,   228,   222,
-   227,   130,   206,   181,    10,   107,   167,   761,   206,   763,
-   214,   215,   216,   217,   781,   186,   214,   215,   216,   217,
-   774,   225,   776,    85,   228,    50,   115,   225,   782,   983,
-    52,   785,   107,   787,   788,   789,   790,    19,   115,   115,
-   222,   795,   115,   810,   115,   799,   800,   111,   802,  1269,
-   225,   228,   228,   226,   808,    52,   222,  1319,   179,   206,
-   814,   828,   829,   820,   818,   227,  1286,   214,   215,   216,
-   217,   828,   829,   827,   828,   829,   830,    23,   225,   227,
-   834,    66,   836,   837,    58,    66,   227,   841,    88,    85,
-    93,  1517,   211,   782,   153,   849,   850,   854,  1643,   191,
-   158,   790,    85,   211,   211,   107,   226,    81,   125,   226,
-   228,   868,   227,  1067,   108,    22,   870,   871,   228,   228,
-   761,    52,   763,   228,   228,   879,   880,   881,   882,   883,
-   884,   228,    74,   774,  1000,   106,  1002,  1003,  1004,  1005,
-  1006,  1007,   227,   206,  1331,   834,   227,   836,   211,   212,
-   213,   214,   215,   216,   217,   912,   228,   227,   227,    64,
-   917,   918,   916,   228,   133,   919,   227,   808,  1263,   223,
-   227,  1391,  1267,   228,   928,   929,   930,   931,   932,   933,
-   224,   228,   227,    58,   227,    34,    35,   227,   227,   176,
-   227,   227,    41,   228,   227,   227,   227,  1543,   227,   227,
-    49,  1142,   222,   227,   845,   846,   227,   194,    57,   227,
-   211,   227,   227,    62,   227,   856,   227,   971,   227,   227,
-   974,   161,   227,   977,    73,    74,  1446,    94,   227,   227,
-   130,   211,   206,   124,    83,   227,   227,   211,   212,   213,
-   214,   215,   216,   217,   130,    50,  1000,   225,  1002,  1003,
-  1004,  1005,  1006,  1007,    58,   228,   228,   106,   163,   227,
-  1014,  1015,   111,   112,   228,   225,   227,   226,  1488,  1489,
-  1189,  1025,  1026,   178,  1041,  1029,   228,  1223,   228,   228,
-   228,   206,    34,   132,   228,   228,   135,   212,   213,   214,
-   215,   216,   217,   228,  1514,   228,    27,   216,  1055,  1053,
-   225,   206,    55,   124,  1399,    57,   115,    55,   206,   214,
-   215,   216,   217,   201,  1409,   227,   214,   215,   216,   217,
-   225,    73,    74,  1598,   227,   227,  1192,   225,   227,    66,
-   971,   227,    82,    66,  1200,    50,  1025,    88,  1204,    10,
-  1206,   115,   164,  1209,  1210,  1211,  1212,  1213,  1214,  1215,
-  1216,   204,    54,  1219,   106,   204,   227,   226,   228,  1225,
-   228,   113,   114,   206,     3,   228,   228,     6,   228,   228,
-    13,   214,   215,   216,   217,   227,   227,   224,    17,    18,
-   132,    20,   225,   228,   228,    24,   228,   206,  1142,    28,
-    29,    30,    31,   228,   206,   214,   215,   216,   217,   211,
-   212,   213,   214,   215,   216,   217,   225,    65,   228,    15,
-   228,   228,   228,   225,   228,    58,   228,  1171,   228,  1173,
-   228,    64,   228,    56,   150,   228,  1067,    70,   228,  1183,
-   228,   228,   228,   228,  1188,   228,   228,   228,  1192,   228,
-    37,    37,   199,   225,   227,    84,  1200,   227,   227,   227,
-  1204,   227,  1206,   152,    44,  1209,  1210,  1211,  1212,  1213,
-  1214,  1215,  1216,    87,   228,  1219,   228,   228,   228,  1223,
-   228,  1225,   228,   228,   228,    90,    65,   464,   120,   228,
-  1234,  1235,  1236,  1237,  1238,  1239,  1253,   228,  1255,  1355,
-   226,   226,   205,     8,  1183,   227,   100,   225,   228,  1188,
-  1254,    72,   206,   490,    97,    67,  1260,   211,   212,   213,
-   214,   215,   216,   217,   222,   226,   228,   227,     6,   228,
-   163,   225,   228,   228,    89,  1444,  1621,   228,     8,   168,
-  1171,   228,   171,   172,   228,   178,   175,   176,    85,   178,
-   179,    13,   151,   182,   107,    15,   228,   186,   187,   227,
-   162,   190,   204,   192,   193,   194,   228,   227,   227,   120,
-   199,   200,   228,   206,   226,     4,   222,  1334,   211,   212,
-   213,   214,   215,   216,   217,  1329,   224,   228,   217,   220,
-   220,    50,   225,  1337,    86,    84,    58,  1559,   226,     0,
-  1456,     0,    64,    33,   259,  1035,   235,   559,    70,   238,
-   807,  1355,   403,   384,   785,   244,   800,   787,  1226,    81,
-  1573,  1032,  1454,  1254,  1568,  1587,  1588,     8,  1375,  1376,
-  1374,  1551,    13,  1523,  1555,  1609,  1043,   830,   802,  1383,
-  1384,  1385,  1386,  1387,  1388,  1389,  1390,   829,  1392,    27,
-  1612,    14,   245,   610,   283,   391,   314,  1487,  1561,   636,
-   637,   638,   639,  1591,  1486,   294,   196,  1041,    32,   296,
-  1588,   404,   841,  1599,  1569,  1600,  1592,    58,   509,  1491,
-  1323,  1618,   346,    64,   313,   514,   774,   316,   317,    70,
-  1114,   510,  1436,   193,  1532,  1173,    -1,    -1,  1329,    -1,
-    81,   163,   331,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-    -1,    -1,  1456,    -1,  1458,    -1,   178,   346,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1483,    -1,    -1,   706,
-   707,   708,   709,   710,    -1,    -1,    -1,    -1,  1482,    -1,
-    -1,  1485,    -1,  1487,   206,    -1,   723,  1491,    -1,   211,
-   212,   213,   214,   215,   216,   217,   385,   386,    -1,    -1,
-    -1,    -1,    -1,   225,    -1,    -1,   395,    -1,    -1,    -1,
-    -1,    -1,   401,  1517,    -1,    -1,    -1,    -1,    -1,    -1,
-   409,    -1,   163,    -1,    -1,   414,    -1,    -1,    -1,     8,
-    -1,    -1,   421,   422,    13,    -1,    -1,   178,   427,    -1,
-  1557,   430,   431,  1482,    -1,  1436,   435,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   795,  1566,
-   449,    -1,  1566,    -1,    -1,   206,    18,    19,    -1,    -1,
-   211,   212,   213,   214,   215,   216,   217,    -1,    -1,    58,
-    -1,    -1,    34,    35,   225,    64,    -1,   228,    -1,    41,
-    -1,    70,  1609,    -1,    -1,    -1,    -1,    49,    -1,   488,
-    -1,    -1,    81,    -1,    -1,    57,    -1,    -1,    -1,    88,
-    62,  1618,    -1,    -1,  1618,    -1,  1620,   506,    -1,    -1,
-    -1,    73,    74,   512,    76,   514,    78,    -1,    -1,    -1,
-    -1,    83,   558,   870,   871,    -1,    -1,    -1,    -1,  1643,
-    -1,    -1,   879,   880,   881,   882,   883,   884,    -1,    -1,
-    -1,    -1,    -1,    -1,   106,    -1,    -1,   546,    -1,   111,
-   112,    -1,    -1,    -1,    -1,    -1,    -1,    13,   557,    -1,
-    -1,    -1,    -1,    -1,   126,    -1,    -1,  1568,    -1,   916,
-   132,    -1,   919,   135,   163,    -1,    -1,    -1,   334,    -1,
-    -1,   928,   929,   930,   931,   932,   933,    -1,    -1,   178,
-    -1,    -1,   348,   592,    -1,   351,    -1,   353,   354,   355,
-   356,    -1,    58,   602,    -1,    -1,    -1,    -1,    64,    -1,
-    -1,   610,    -1,    -1,    70,    -1,    -1,   206,    -1,    -1,
-    -1,    -1,   211,   212,   213,   214,   215,   216,   217,   191,
-    -1,   630,    -1,    -1,    -1,    -1,   225,    -1,    -1,   228,
-    -1,    -1,   204,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,  1000,    -1,  1002,  1003,  1004,  1005,  1006,
-  1007,    -1,    -1,   419,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1026,
-    -1,    -1,    -1,   439,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   729,    -1,    -1,    -1,   733,   385,    -1,
-    -1,   737,    -1,    -1,    -1,   741,    -1,   163,    -1,   745,
-    -1,    -1,   468,   749,    -1,    -1,    -1,   753,    -1,    -1,
-    -1,   757,   178,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   489,    -1,    -1,    -1,   493,    -1,   495,
-    -1,    -1,   498,   499,   500,   501,   502,   503,   504,   505,
-   206,   507,    -1,    -1,    -1,   211,   212,   213,   214,   215,
-   216,   217,   761,    -1,   763,    -1,    -1,    -1,    -1,   225,
-    -1,    -1,    -1,    -1,    -1,   774,    -1,   776,    -1,    -1,
-    -1,    -1,    -1,   782,    -1,    -1,   785,    -1,   787,   788,
-   789,   790,    -1,    -1,    -1,  1142,    -1,    -1,    -1,    -1,
-   799,   800,    -1,   802,    -1,    -1,    -1,    -1,    -1,   808,
-    -1,    -1,    -1,    -1,    -1,   814,    -1,    -1,    -1,   818,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   827,   828,
-   829,   830,    -1,    -1,    -1,   834,    -1,   836,   837,    -1,
-    -1,    -1,   841,    -1,    -1,  1192,    -1,    -1,    -1,   848,
-   849,   850,    -1,  1200,    -1,    -1,    -1,  1204,    -1,  1206,
-    -1,    -1,  1209,  1210,  1211,  1212,  1213,  1214,  1215,  1216,
-    -1,    -1,  1219,    -1,    -1,    -1,    -1,    -1,  1225,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   885,  1234,  1235,  1236,
-  1237,  1238,  1239,    -1,   650,    -1,   652,   653,    -1,    -1,
-    -1,   937,    -1,   659,    -1,    -1,    -1,    -1,   944,   945,
-    -1,   947,   948,  1260,   950,   951,    -1,   953,   954,    13,
-   956,   957,    -1,   959,   960,    -1,   962,   963,    -1,   965,
-   966,    -1,   110,    -1,    -1,   934,    -1,    -1,   937,    -1,
-    -1,    -1,    -1,   121,     8,   123,    -1,    -1,    -1,    13,
-   128,    -1,    -1,    -1,    -1,   711,   134,   135,    -1,    -1,
-   138,    -1,    -1,    -1,    58,    -1,    -1,    -1,    -1,   725,
-    64,   149,   971,   729,    -1,   974,    70,   733,   977,   157,
-    -1,   737,   160,    -1,    -1,   741,    -1,    -1,    -1,   745,
-  1337,    -1,   991,   749,    58,    -1,    -1,   753,    -1,    -1,
-    64,   757,   180,    -1,    -1,    -1,    70,    -1,  1355,    -1,
-   188,   189,    -1,    -1,    -1,  1014,  1015,    81,    -1,   197,
-    -1,    -1,    -1,    -1,    88,    -1,  1025,  1374,    -1,    -1,
-  1029,    -1,    13,    -1,    -1,    -1,  1383,  1384,  1385,  1386,
-  1387,  1388,  1389,  1390,    -1,  1392,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,  1053,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   163,
-    -1,    -1,    -1,    -1,  1110,    -1,    -1,    58,  1114,    -1,
-    -1,    -1,    -1,    64,   178,    -1,    -1,   774,    -1,    70,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   163,
-    -1,    -1,    -1,   859,    -1,    -1,    -1,  1143,   795,  1456,
-    -1,    -1,   206,    -1,   178,    -1,    -1,   873,   212,   213,
-   214,   215,   216,   217,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   225,    -1,   889,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   206,    -1,  1143,    -1,    -1,   211,   212,   213,
-   214,   215,   216,   217,    -1,    -1,    -1,     8,    -1,    -1,
-    -1,   225,    13,    -1,   228,   921,    -1,    -1,   464,    -1,
-  1517,    -1,  1171,    -1,  1173,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   163,    -1,  1183,    -1,    -1,    -1,    -1,  1188,
-    -1,    -1,    -1,    -1,   490,    -1,    -1,   178,    -1,    -1,
-    -1,    -1,  1201,    -1,    -1,    -1,    -1,    58,    -1,    -1,
-    -1,    -1,   968,    64,    -1,    -1,    -1,     8,  1217,    70,
-    -1,    -1,    13,    -1,  1223,   206,    -1,    -1,    -1,    -1,
-    81,   212,   213,   214,   215,   216,   217,    88,    -1,    -1,
-    -1,    -1,    -1,  1279,   225,    -1,    -1,  1283,    -1,    -1,
-   937,    -1,    -1,    -1,    -1,  1254,   110,    -1,    -1,    -1,
-    -1,  1260,    -1,    -1,    -1,    -1,    -1,    58,    -1,   123,
-  1269,    -1,    -1,    64,   128,    -1,    -1,    -1,    -1,    70,
-   134,   135,    -1,    -1,   138,    -1,    -1,  1286,    -1,    -1,
-    81,    -1,    -1,    -1,    -1,   149,    -1,    88,  1297,    -1,
-    -1,    -1,    -1,   157,    -1,    -1,   160,    -1,    -1,    -1,
-    -1,    -1,   163,  1000,    -1,  1002,  1003,  1004,  1005,  1006,
-  1007,    -1,    -1,    -1,    -1,    -1,   180,   178,   182,    -1,
-  1329,  1087,  1088,  1089,   188,   189,    -1,    -1,    -1,  1026,
-   636,   637,   638,   639,    -1,    -1,    -1,    -1,  1347,    -1,
-    -1,    -1,    -1,    -1,  1353,   206,    -1,    -1,  1114,    -1,
-   211,   212,   213,   214,   215,   216,   217,    -1,  1124,  1125,
-  1126,    -1,   163,    -1,   225,    -1,    -1,   228,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   178,    -1,    -1,
-    -1,    -1,  1391,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   170,   526,     6,   199,   800,   182,   972,   608,    25,   207,
+   196,   978,   237,    17,    18,   222,    20,   618,   188,   389,
+    24,   465,   810,   369,    28,    29,    30,    31,   846,   847,
+   651,   409,   653,   654,   917,  1202,   508,  1246,   537,   857,
+  1412,  1413,     6,    52,    18,     9,  1172,   245,    37,    50,
+    24,   115,    20,    37,    28,    23,     5,    31,     7,    16,
+     6,    38,     3,   124,    37,    52,    42,    37,   124,     8,
+   514,    52,     6,     6,  1235,  1236,  1237,  1238,  1239,  1240,
+    84,    37,    71,    51,    61,     6,   558,    37,    63,   124,
+   183,    60,    38,    42,    47,    53,   708,   709,   710,   711,
+   712,    38,    63,   320,   872,   124,  1494,  1495,     8,   873,
+    84,   309,    82,   725,    38,    61,   333,   313,   238,    40,
+   316,  1493,   222,    80,    61,    52,    94,   227,    81,    82,
+   107,   142,   108,    91,   107,    13,   105,  1001,    52,  1003,
+  1004,  1005,  1006,  1007,  1008,   122,    79,   211,   204,   356,
+  1538,   108,   125,   121,   922,   637,   638,   639,   640,   923,
+   101,   107,    95,   283,   168,   226,   119,   171,   172,   124,
+   107,   175,   176,   142,   178,   179,   122,  1338,   182,   525,
+    58,   202,   186,   187,   530,   122,   190,  1354,   192,   193,
+   194,   226,    70,   228,   168,   199,   200,   124,   122,   140,
+  1323,   115,   207,  1326,  1330,   179,   223,   226,   652,   228,
+   215,   188,   186,   217,  1375,   156,   205,   226,   219,  1015,
+  1016,   205,   160,  1384,  1385,  1386,  1387,  1388,  1389,  1390,
+  1391,   235,  1393,   834,   238,   184,  1119,   171,   172,   226,
+   244,   458,   188,   217,   178,   443,   444,   445,   222,   205,
+  1068,   226,   450,   874,  1642,   205,   190,    85,   192,   227,
+   606,   235,    99,   227,   462,  1637,   200,   206,    10,    73,
+   244,   226,   110,   228,   207,   214,   215,   216,   217,   283,
+   205,  1448,   215,   300,    57,   122,   225,    38,   137,   487,
+   294,   489,   141,    36,  1261,    38,   124,   643,   797,   226,
+    73,    47,   106,   924,   511,  1514,   206,   919,   205,   313,
+    61,   207,   316,   317,   214,   215,   216,   217,    61,   931,
+   932,   933,   934,   935,   936,   225,   223,   146,   224,  1193,
+   216,   217,   147,   106,   204,    81,    82,  1201,   559,   225,
+   357,  1205,  1509,  1207,  1511,    20,  1210,  1211,  1212,  1213,
+  1214,  1215,  1216,  1217,   173,   110,  1220,  1518,    10,   174,
+   294,   220,  1226,    13,   107,   382,   383,   384,   123,   715,
+    10,   122,   542,   119,   182,   205,    51,   849,    47,   122,
+   117,   385,   386,   581,   160,   583,   584,   585,   586,   871,
+    36,   395,    38,   223,   131,   765,   413,   401,   880,   881,
+   882,   883,   884,   885,  1287,   409,   776,   205,    58,   187,
+   414,   385,   386,    82,   886,    61,   194,   421,   422,    94,
+    70,   395,    47,   427,    58,   223,   430,   431,   815,   873,
+   207,   435,   819,   176,   177,  1539,  1540,   815,   205,   195,
+   196,   819,   204,   206,   888,   889,   121,   224,   422,   205,
+   119,   214,   215,   216,   217,   899,   223,    82,    67,  1563,
+   464,   107,   225,  1251,   206,   937,    96,  1088,  1089,  1090,
+    85,  1437,   214,   215,   216,   217,   122,   222,   223,   923,
+   223,   216,   217,   225,   227,    52,   490,   421,   492,    85,
+   225,    58,  1356,   427,   119,   939,   430,   431,   538,   539,
+   540,   226,    85,    64,   216,   217,  1127,  1128,  1129,   513,
+   731,   515,     4,   225,   735,   133,    64,     9,   739,  1486,
+   992,  1488,   743,    15,   731,    85,   747,    19,   735,   108,
+   751,   177,   739,  1145,   755,    58,   743,   511,   759,   226,
+   747,   228,   133,   547,   751,   133,   216,   217,   755,   139,
+   216,  1076,   759,   220,   206,   225,   902,  1082,    81,   211,
+   212,   213,   214,   215,   216,   217,   206,   227,   130,   216,
+   217,    10,   206,   225,   214,   215,   216,   217,   225,   130,
+   214,   215,   216,   217,   227,   225,   206,   204,   205,   593,
+   207,   225,   209,  1457,   214,   215,   216,   217,   143,   603,
+    10,    20,   163,   148,   206,   225,    25,   611,   228,    67,
+   212,   213,   105,   547,   159,   163,   227,   178,    37,   593,
+   226,    33,   228,   821,   169,   170,   226,   631,   228,   129,
+   178,   829,   830,   637,   638,   639,   640,   226,    85,   846,
+   847,   227,   207,   829,   830,   206,   227,     8,   193,   227,
+   857,   828,    13,   214,   215,   216,   217,   855,   206,    34,
+   127,  1105,    81,   226,   225,   228,   214,   215,   216,   217,
+   226,   869,   228,   227,   226,    94,   228,   225,   207,    20,
+   209,   100,    57,   206,   891,   226,    93,   228,   211,   212,
+   213,   214,   215,   216,   217,   227,    37,    58,    73,    74,
+   227,   227,   121,    64,   708,   709,   710,   711,   712,    70,
+   581,   227,   583,   584,   585,   586,   226,   915,   228,   940,
+    81,   725,   920,   921,   227,    19,   947,   948,   227,   950,
+   951,   106,   953,   954,   223,   956,   957,  1262,   959,   960,
+    81,   962,   963,   227,   965,   966,  1218,   968,   969,   227,
+   226,  1569,   228,    94,   226,   223,   228,   132,   762,   100,
+   764,   226,   226,   228,   228,   782,   226,   226,   228,   228,
+   226,   775,   228,   777,   226,   130,   228,   984,   227,   783,
+   121,   226,   786,   228,   788,   789,   790,   791,   762,   226,
+   764,   228,   796,   226,   811,   228,   800,   801,  1270,   803,
+   227,   775,   163,    10,   226,   809,   228,   222,   222,   227,
+   206,   815,   829,   830,   130,   819,  1288,   178,   214,   215,
+   216,   217,   181,    10,   828,   829,   830,   831,   107,   225,
+   167,   835,   186,   837,   838,   809,    85,    50,   842,   115,
+    52,    19,   107,   115,   115,   206,   850,   851,  1644,   783,
+   211,   212,   213,   214,   215,   216,   217,   791,  1056,   115,
+   115,  1068,   222,   111,   225,   228,    34,   871,   872,   225,
+   228,    52,   846,   847,   226,   222,   880,   881,   882,   883,
+   884,   885,   179,   857,    53,   227,    66,    23,  1332,    57,
+    59,   227,  1113,    66,  1264,   227,  1117,     8,  1268,    85,
+    69,   835,    13,   837,    88,    73,    74,   211,    77,   153,
+    93,   191,   158,    85,   107,   919,   211,   226,   922,   211,
+  1392,    90,    13,   228,   226,  1146,   125,   931,   932,   933,
+   934,   935,   936,  1279,   103,    22,   227,   108,   106,   228,
+   228,   228,   228,  1544,    52,   113,   114,    58,   106,    74,
+   228,   120,   227,    64,   227,   222,   133,   227,   227,    70,
+   228,   227,    13,   223,   132,   228,   228,    58,   972,   228,
+    81,   975,   224,    64,   978,  1447,   206,    88,   228,    70,
+   227,   211,   212,   213,   214,   215,   216,   217,   227,   227,
+   227,   227,   227,   227,   227,   225,   227,  1001,   972,  1003,
+  1004,  1005,  1006,  1007,  1008,   227,   227,    58,   227,   227,
+   227,  1015,  1016,    64,   211,    58,   227,  1489,  1490,    70,
+  1190,   227,  1026,  1027,    94,  1042,  1030,   206,  1224,   227,
+  1400,   227,   211,   212,   213,   214,   215,   216,   217,   227,
+  1410,   161,   227,  1515,   211,   227,   225,   206,   130,   228,
+  1054,   227,   163,   212,   213,   214,   215,   216,   217,   124,
+  1281,   227,   227,   227,  1285,    13,   225,   178,   130,   206,
+   227,   225,   163,    50,  1599,   228,   228,   214,   215,   216,
+   217,   228,   227,    58,   225,   227,   226,   178,   225,   228,
+   228,    27,  1026,   228,  1068,   206,   228,   228,   228,   228,
+   211,   212,   213,   214,   215,   216,   217,   228,    55,   216,
+    58,   124,   163,   115,   225,   206,    64,   228,     3,    82,
+    55,     6,    70,   214,   215,   216,   217,   178,   201,   227,
+   227,   227,    17,    18,   225,    20,    66,   227,   227,    24,
+   206,  1145,    66,    28,    29,    30,    31,    50,   214,   215,
+   216,   217,    10,   115,    88,   206,   164,   204,   227,   225,
+   211,   212,   213,   214,   215,   216,   217,    54,  1172,   228,
+  1174,   228,   228,   228,   225,   228,   228,   227,  1376,  1377,
+  1184,   227,   385,   206,   224,  1189,   228,   228,    65,  1193,
+   228,   214,   215,   216,   217,   228,   228,  1201,  1172,    84,
+   228,  1205,   225,  1207,   226,    15,  1210,  1211,  1212,  1213,
+  1214,  1215,  1216,  1217,   228,   163,  1220,   228,   206,   228,
+  1224,   228,  1226,   211,   212,   213,   214,   215,   216,   217,
+   178,  1235,  1236,  1237,  1238,  1239,  1240,  1254,   228,  1256,
+    56,   228,   228,   228,   228,   228,   228,    13,   228,   228,
+  1184,  1255,  1622,   150,   228,  1189,   228,  1261,   206,   228,
+    37,   464,    37,   211,   212,   213,   214,   215,   216,   217,
+   199,   225,   227,   152,   227,  1445,   227,   225,   227,    44,
+    87,  1255,   227,   168,   228,   228,   171,   172,   228,   492,
+   175,   176,    58,   178,   179,   228,   228,   182,    64,   226,
+   228,   186,   187,   228,    70,   190,   228,   192,   193,   194,
+   228,   228,    90,    65,   199,   200,   120,   226,  1335,   176,
+     8,   205,   227,   225,   100,    72,  1330,   228,    97,    67,
+   222,   227,   217,   228,  1338,  1560,   226,   194,     6,   228,
+   228,    89,   228,     8,    85,   228,   228,   228,   151,     8,
+   235,   107,  1356,   238,    13,    15,  1330,   228,   227,   244,
+   162,   204,  1569,  1588,  1589,   227,   227,   120,   228,  1567,
+     4,  1375,   228,   226,   222,   224,   220,   228,    50,   220,
+  1384,  1385,  1386,  1387,  1388,  1389,  1390,  1391,  1613,  1393,
+    86,    84,   226,     0,     0,    33,   259,   163,   283,    58,
+   403,  1036,   808,   384,   560,    64,   786,   801,  1455,   294,
+   788,    70,   178,  1227,  1033,  1552,  1574,  1524,  1556,   803,
+  1610,  1619,    81,  1044,    27,   245,   831,   830,   313,    88,
+   391,   316,   317,  1437,   637,   638,   639,   640,    14,   314,
+   206,   611,  1488,  1562,  1592,  1487,   331,   110,   214,   215,
+   216,   217,   196,  1457,   296,  1459,  1589,  1042,   121,   225,
+   123,   346,    32,  1437,  1600,   128,   842,  1484,  1570,  1593,
+  1601,   134,   135,   404,   510,   138,  1492,  1324,  1619,  1483,
+   346,  1117,  1486,   193,  1488,   515,   149,   511,  1492,  1533,
+   775,  1174,    -1,    -1,   157,    -1,    -1,   160,    -1,    -1,
+   385,   386,    -1,    -1,   163,   708,   709,   710,   711,   712,
+   395,    -1,    -1,    -1,  1518,    -1,   401,   180,    -1,   178,
+    -1,    -1,   725,    -1,   409,   188,   189,    -1,    -1,   414,
+    -1,    -1,    -1,    -1,   197,    -1,   421,   422,    -1,    -1,
+    -1,  1558,   427,    -1,    -1,   430,   431,   206,    -1,  1483,
+   435,    -1,   211,   212,   213,   214,   215,   216,   217,    13,
+    -1,    -1,    -1,  1567,   449,    -1,   225,    -1,    -1,   228,
+     8,    -1,   775,    -1,    -1,    13,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   706,   707,   708,   709,   710,   206,    -1,    -1,    -1,    -1,
-   211,   212,   213,   214,   215,   216,   217,   723,    -1,    -1,
-  1429,    -1,    -1,    -1,   225,   226,    -1,  1436,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1446,  1447,    -1,
-    -1,    -1,    -1,    -1,    -1,  1454,  1143,    -1,    -1,  1458,
+    -1,    -1,    -1,  1610,    -1,  1569,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    58,   490,    -1,   464,    -1,    -1,
+    64,    -1,    -1,    -1,     8,  1619,    70,  1621,    -1,    13,
+    58,    -1,    -1,   508,    -1,    -1,    64,    81,   513,    -1,
+   515,    -1,    70,    -1,    -1,   492,    -1,    -1,    -1,    -1,
+  1644,     8,    -1,    81,    -1,    -1,    13,    -1,    -1,    -1,
+    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   547,    -1,    58,    -1,    -1,    -1,   871,   872,
+    64,    -1,    -1,   558,    -1,    -1,    70,   880,   881,   882,
+   883,   884,   885,    -1,    -1,    -1,    -1,    81,    -1,    -1,
+    -1,    58,    -1,    -1,    88,    -1,    -1,    64,    -1,    -1,
+    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,   593,   163,
+    -1,    -1,    -1,    -1,    81,    -1,   919,    -1,   603,   922,
+    -1,    88,    -1,    -1,   178,   163,   611,    -1,   931,   932,
+   933,   934,   935,   936,    -1,    -1,    -1,    -1,    -1,    -1,
+   178,    -1,    -1,    -1,    -1,    -1,   631,    -1,    -1,    -1,
+    -1,    -1,   206,    -1,    -1,    -1,    -1,   211,   212,   213,
+   214,   215,   216,   217,    -1,    -1,    -1,    -1,   206,   163,
+    -1,   225,    -1,   211,   212,   213,   214,   215,   216,   217,
+   637,   638,   639,   640,   178,    -1,    -1,   225,    -1,    -1,
+   228,    -1,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   178,   206,    -1,    -1,    -1,    -1,   211,   212,   213,
+   214,   215,   216,   217,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   225,    -1,    -1,   228,    -1,    -1,    -1,    -1,   206,
+    -1,    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,
+   217,   708,   709,   710,   711,   712,    -1,    -1,   225,    -1,
+    -1,   228,    -1,    -1,    -1,    -1,    -1,    -1,   725,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   762,    -1,   764,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   775,    -1,   777,    -1,    -1,    -1,    -1,    -1,   783,    -1,
+    -1,   786,    -1,   788,   789,   790,   791,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   800,   801,    -1,   803,    -1,
+    -1,    -1,    -1,    -1,   809,    -1,    -1,    -1,    -1,    -1,
+   815,    -1,    -1,    -1,   819,   385,    -1,    -1,    -1,   796,
+    -1,    -1,  1145,   828,   829,   830,   831,    -1,    -1,    -1,
+   835,    -1,   837,   838,    -1,    -1,     8,   842,    -1,    -1,
+    -1,    13,    -1,    -1,   849,   850,   851,    -1,    34,    35,
+    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    49,    -1,    -1,    -1,     8,    -1,    -1,
+    -1,    57,    13,    -1,    -1,    -1,    62,    -1,    -1,    -1,
+    -1,   886,    -1,    -1,    -1,    -1,    58,    73,    74,    -1,
+    -1,    -1,    64,    -1,   871,   872,    -1,    83,    70,    -1,
+    -1,    -1,    -1,   880,   881,   882,   883,   884,   885,    81,
+    -1,    -1,    -1,    -1,    -1,    -1,    88,    58,    -1,    -1,
+   106,    -1,    -1,    64,    -1,   111,   112,    -1,    -1,    70,
+    -1,    -1,   937,    -1,    -1,   940,    -1,    -1,    -1,    -1,
+    81,    -1,   919,    -1,    -1,   922,   132,    88,    -1,   135,
+    -1,    -1,    -1,    -1,   931,   932,   933,   934,   935,   936,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   972,    -1,    -1,
+   975,    -1,    -1,   978,    -1,    -1,   334,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   992,    -1,    -1,
+   348,   163,    -1,   351,    -1,   353,   354,   355,   356,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   178,    -1,    -1,    -1,
+  1015,  1016,    -1,    -1,    -1,    -1,    -1,    -1,   204,    -1,
+    -1,  1026,   163,    -1,  1001,  1030,  1003,  1004,  1005,  1006,
+  1007,  1008,    -1,    -1,   206,    -1,    -1,   178,    -1,   211,
+   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,  1054,
+  1027,    -1,    -1,   225,   226,    -1,    -1,    -1,    -1,    -1,
+    -1,   419,    -1,    -1,    -1,   206,    -1,    -1,    -1,    -1,
+   211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
+    -1,   439,    -1,    -1,   225,   226,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,  1482,    -1,    -1,  1485,    -1,  1487,  1488,
-  1489,    -1,  1491,    -1,    -1,    -1,    -1,    -1,    -1,   795,
-    -1,    -1,    -1,    -1,    -1,  1192,    -1,    -1,    -1,  1508,
-    -1,  1510,    -1,  1200,  1201,  1514,     8,  1204,    -1,  1206,
-    -1,    13,  1209,  1210,  1211,  1212,  1213,  1214,  1215,  1216,
-    -1,    -1,  1219,    -1,    -1,    -1,    -1,    -1,  1225,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1234,  1235,  1236,
-  1237,  1238,  1239,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    58,  1566,    -1,    -1,
-    -1,    -1,    64,    -1,   870,   871,  1332,    -1,    70,    -1,
-    -1,    -1,    -1,   879,   880,   881,   882,   883,   884,    81,
-    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,    -1,
-  1297,    -1,    -1,    13,    -1,    -1,    -1,    -1,    -1,  1618,
-   916,  1620,    -1,   919,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   928,   929,   930,   931,   932,   933,    -1,    -1,
-    -1,   937,    -1,    -1,  1643,    -1,    -1,    -1,    -1,    -1,
-  1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,    -1,
-  1347,    -1,    -1,    -1,    64,    -1,  1353,    -1,  1355,    -1,
-    70,   163,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    81,    -1,    -1,    -1,    -1,   178,  1374,    88,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1383,  1384,  1385,  1386,
-  1387,  1388,  1389,  1390,  1000,  1392,  1002,  1003,  1004,  1005,
-  1006,  1007,    -1,    -1,   206,    -1,    -1,    -1,    -1,   211,
-   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,    -1,
-  1026,    -1,    -1,   225,    -1,    -1,   228,    -1,    -1,    -1,
-    -1,    -1,  1429,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
+   468,    -1,    11,    -1,    13,    -1,    -1,    -1,   476,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-  1447,    -1,    -1,   163,    -1,    -1,    -1,  1454,    -1,  1456,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,   178,    -1,
-    11,    -1,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-  1546,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
-    -1,    -1,    -1,    -1,    13,    -1,   206,    -1,    39,  1565,
-    -1,   211,   212,   213,   214,   215,   216,   217,    -1,     8,
-    -1,  1508,    -1,  1510,    13,   225,   226,    58,    -1,    -1,
-  1517,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,    70,
-    -1,    -1,    -1,    -1,  1600,    -1,  1142,  1143,    -1,    58,
-    81,    -1,    -1,    -1,    -1,    64,    -1,    88,    -1,    -1,
-    -1,    70,    -1,    52,    -1,    -1,    -1,    -1,    -1,    58,
-    -1,    -1,    81,    -1,    -1,    64,    -1,    -1,    -1,    88,
-    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    81,   124,    -1,    -1,  1192,    -1,    -1,    88,
-    -1,    -1,    -1,    -1,  1200,  1201,    -1,    -1,  1204,    -1,
-  1206,    -1,    -1,  1209,  1210,  1211,  1212,  1213,  1214,  1215,
-  1216,    -1,    -1,  1219,    -1,    -1,    -1,    -1,    -1,  1225,
-    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,  1234,  1235,
-  1236,  1237,  1238,  1239,    -1,    -1,    -1,   178,    -1,    -1,
-    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,    -1,    -1,
+     8,    -1,    -1,   491,    -1,    13,    -1,   495,    -1,   497,
+    39,  1146,   500,   501,   502,   503,   504,   505,   506,   507,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,
+    -1,    -1,    -1,    -1,    -1,    64,    -1,  1172,  1145,  1174,
+    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1184,
+    58,    -1,    81,    -1,  1189,    -1,    64,    -1,    -1,    88,
+    -1,    -1,    70,    -1,    -1,    -1,    -1,  1202,    -1,    -1,
+    -1,    -1,    -1,    81,    -1,   775,    -1,    -1,    -1,    -1,
+    88,    -1,    -1,  1218,    -1,    -1,  1193,    -1,    -1,  1224,
+    -1,    -1,    -1,    -1,  1201,   124,   796,    -1,  1205,    -1,
+  1207,    -1,    -1,  1210,  1211,  1212,  1213,  1214,  1215,  1216,
+  1217,    -1,    -1,  1220,    -1,    -1,    -1,    -1,    -1,  1226,
+  1255,    -1,    -1,    -1,    -1,    -1,  1261,    -1,  1235,  1236,
+  1237,  1238,  1239,  1240,   163,  1270,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   178,
-    -1,    -1,    -1,    -1,   163,   206,    -1,    -1,    -1,    -1,
-   211,   212,   213,   214,   215,   216,   217,    -1,    -1,   178,
-    -1,    -1,    -1,    -1,   225,    -1,    -1,   206,    -1,    -1,
-    -1,  1297,   211,   212,   213,   214,   215,   216,   217,    -1,
-   219,    -1,    -1,    -1,    -1,   224,   225,   206,    -1,    -1,
+    -1,    -1,    -1,  1288,  1261,   163,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   651,  1299,   653,   654,    -1,    -1,    -1,
+   178,    -1,    -1,   661,    -1,    -1,    -1,   206,    -1,    -1,
     -1,    -1,   211,   212,   213,   214,   215,   216,   217,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   225,    -1,    -1,    -1,
-    -1,  1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,  1347,    -1,    -1,    -1,    -1,    -1,  1353,    -1,  1355,
+    -1,    -1,     8,    -1,    10,  1330,   225,    13,   206,    -1,
+    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,   217,
+    -1,   219,    -1,  1348,    -1,    -1,   224,   225,    -1,  1354,
+    -1,    -1,    -1,    -1,    -1,   713,    -1,    -1,    -1,    -1,
+    -1,  1338,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   727,
+   940,    -1,    58,   731,    -1,    -1,    -1,   735,    64,  1356,
+    -1,   739,    -1,    -1,    70,   743,    -1,  1392,    -1,   747,
+    -1,     8,    -1,   751,    -1,    81,    13,   755,  1375,    -1,
+    -1,   759,    88,    -1,    -1,    -1,    -1,  1384,  1385,  1386,
+  1387,  1388,  1389,  1390,  1391,    -1,  1393,    -1,    13,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1431,    -1,   464,    -1,
+    -1,  1001,  1437,  1003,  1004,  1005,  1006,  1007,  1008,    -1,
+    -1,    58,  1447,  1448,    -1,    -1,    -1,    64,    -1,    -1,
+  1455,    -1,    -1,    70,  1459,    -1,   492,  1027,    -1,    -1,
+    -1,    -1,    -1,    58,    81,    -1,    -1,    -1,    -1,    64,
+    -1,    88,    -1,    -1,    -1,    70,    -1,   163,  1483,    -1,
+  1457,  1486,    -1,  1488,  1489,  1490,    -1,  1492,    -1,    -1,
+    -1,    -1,   178,    -1,     8,    -1,    -1,    -1,    -1,    13,
+    -1,    -1,   860,    -1,  1509,    -1,  1511,    -1,    -1,    -1,
+  1515,    -1,    -1,    13,    -1,    -1,   874,    -1,    -1,    -1,
+   206,    -1,    -1,    -1,    -1,   211,   212,   213,   214,   215,
+   216,   217,   890,    -1,    -1,    -1,    -1,    -1,    52,   225,
+    -1,  1518,    -1,   901,    58,    -1,   163,    -1,    -1,    -1,
+    64,    -1,    -1,    -1,    -1,    -1,    70,    -1,    58,    -1,
+    -1,   178,  1567,    -1,    64,    -1,   924,    81,   163,    -1,
+    70,    -1,    -1,    -1,    88,    -1,  1146,    -1,    -1,    -1,
+    -1,    -1,    -1,   178,    -1,    -1,    -1,    -1,    -1,   206,
+    -1,    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,
+   217,   637,   638,   639,   640,    -1,    -1,   224,   225,    -1,
+    -1,   206,    -1,    -1,  1619,    -1,  1621,   212,   213,   214,
+   215,   216,   217,  1193,    -1,    -1,    -1,    -1,    -1,    -1,
+   225,  1201,  1202,    -1,    -1,  1205,    -1,  1207,    -1,  1644,
+  1210,  1211,  1212,  1213,  1214,  1215,  1216,  1217,    -1,   163,
+  1220,    -1,    -1,    -1,    -1,    -1,  1226,    -1,    -1,    -1,
+    -1,    -1,    -1,   163,   178,  1235,  1236,  1237,  1238,  1239,
+  1240,    -1,   708,   709,   710,   711,   712,    -1,   178,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   725,
+    -1,    -1,   206,    -1,    -1,    -1,    -1,   211,   212,   213,
+   214,   215,   216,   217,    -1,    -1,   206,    -1,    -1,    -1,
+    -1,   225,   212,   213,   214,   215,   216,   217,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   225,    -1,    -1,    -1,  1299,
+  1088,  1089,  1090,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1374,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1383,  1384,  1385,
-  1386,  1387,  1388,  1389,  1390,    -1,  1392,    -1,    -1,    -1,
-     3,     4,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    17,    18,    19,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
-    -1,    34,    35,  1429,    -1,    -1,    -1,    -1,    41,    -1,
-    -1,    -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,
-    -1,  1447,    -1,    -1,    57,    -1,    -1,    60,  1454,    62,
-  1456,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
-    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,    82,
-    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,
-    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
-    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,
-   113,   114,  1508,    -1,  1510,   118,   119,    -1,    -1,    -1,
-   123,  1517,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,
-   133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
-   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,
-   153,    -1,    -1,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,
-   173,   174,    -1,   176,    -1,   178,   179,   180,   181,   182,
-   183,   184,    -1,   186,   187,   188,   189,   190,   191,    -1,
-   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,
-   203,   204,   205,   206,   207,   208,   209,     3,     4,    -1,
-    -1,    -1,   215,   216,    -1,   218,   219,   220,    -1,    -1,
-    -1,    17,    18,    19,   227,   228,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
-    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,
-    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,
-    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,
-    76,    -1,    78,    79,    -1,    81,    82,    83,    84,    -1,
-    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,
-    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,
-   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,    -1,
-    -1,    -1,   118,   119,    -1,    -1,    -1,   123,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1117,
+   796,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1338,  1127,
+  1128,  1129,    -1,    -1,    -1,    -1,    -1,    -1,  1348,    -1,
+    -1,    -1,    -1,    -1,  1354,    -1,  1356,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1375,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,  1384,  1385,  1386,  1387,  1388,  1389,
+  1390,  1391,    -1,  1393,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   871,   872,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   880,   881,   882,   883,   884,   885,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,  1431,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1448,    -1,
+    -1,    -1,    -1,   919,    -1,  1455,   922,  1457,    -1,    -1,
+    -1,    18,    19,    -1,    -1,   931,   932,   933,   934,   935,
+   936,    -1,    -1,    -1,   940,    -1,    -1,    34,    35,    -1,
+    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    57,    -1,    -1,    -1,    -1,    62,    -1,    -1,    -1,  1509,
+    -1,  1511,    -1,    -1,    -1,    -1,    73,    74,  1518,    76,
+    -1,    78,    -1,    -1,    -1,    -1,    83,    -1,     3,     4,
+    -1,    -1,    -1,    -1,    -1,  1001,    -1,  1003,  1004,  1005,
+  1006,  1007,  1008,    18,    19,  1333,    -1,    -1,    -1,   106,
+    -1,    -1,    -1,    -1,   111,   112,    -1,    -1,    -1,    34,
+    35,  1027,    -1,    -1,    -1,    -1,    41,    -1,    -1,   126,
+    -1,    -1,    -1,    -1,    49,   132,    -1,    -1,   135,    -1,
+    -1,    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,
+    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
+    -1,    76,    -1,    78,    79,    -1,    -1,    -1,    83,    84,
+    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
+   105,   106,    -1,   190,   191,    -1,   111,    -1,   113,   114,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   204,    -1,    -1,
+    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
+   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
+    -1,   146,   147,   148,   149,   150,    -1,   152,   153,  1145,
+  1146,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,
+    -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
+    -1,   186,   187,   188,   189,   190,    -1,    -1,   193,   194,
+   195,   196,   197,    -1,    -1,    -1,   201,  1193,   203,   204,
+    -1,    -1,     8,    -1,    10,  1201,  1202,    13,    -1,  1205,
+    -1,  1207,    -1,    -1,  1210,  1211,  1212,  1213,  1214,  1215,
+  1216,  1217,    -1,   228,  1220,    -1,    -1,    -1,    -1,  1547,
+  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1235,
+  1236,  1237,  1238,  1239,  1240,    -1,    -1,    -1,  1566,    -1,
+    -1,    -1,    58,    -1,    -1,    -1,    -1,    -1,    64,    -1,
+    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    18,    19,
+    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,
+    -1,    -1,    88,  1601,    34,    35,    -1,    -1,    -1,    -1,
+    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,
+    -1,    -1,    -1,  1299,    -1,    -1,    -1,    57,    -1,    -1,
+    -1,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    73,    74,    -1,    76,    -1,    78,    -1,
+    -1,    -1,    -1,    83,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,  1338,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,  1348,    -1,    -1,    -1,   106,   163,  1354,    -1,
+  1356,   111,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   178,    -1,    -1,    -1,   126,    -1,    -1,  1375,
+    -1,    -1,   132,    -1,    -1,   135,    -1,    -1,  1384,  1385,
+  1386,  1387,  1388,  1389,  1390,  1391,    -1,  1393,    -1,    -1,
+   206,     3,     4,    -1,    -1,   211,   212,   213,   214,   215,
+   216,   217,    -1,    -1,    -1,    17,    18,    19,    -1,   225,
+    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
+    32,    -1,    34,    35,    -1,  1431,    -1,    -1,    -1,    41,
+    -1,   191,    -1,    45,    46,    47,    -1,    49,    -1,    -1,
+    -1,    -1,  1448,    -1,   204,    57,    -1,    -1,    60,  1455,
+    62,  1457,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
+    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,
+    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
+    92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
+    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,
+   112,   113,   114,  1509,    -1,  1511,   118,   119,    -1,    -1,
+    -1,   123,  1518,    -1,   126,    -1,    -1,    -1,    -1,    -1,
+   132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
+    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
+   152,   153,    -1,    -1,   156,   157,   158,   159,   160,   161,
+   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
+   172,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
+   182,   183,   184,    -1,   186,   187,   188,   189,   190,   191,
+    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
+    -1,   203,   204,   205,   206,   207,   208,   209,     3,     4,
+    -1,    -1,    -1,   215,   216,    -1,   218,   219,   220,    -1,
+    -1,    -1,    17,    18,    19,   227,   228,    -1,    -1,    -1,
+    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
+    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
+    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
+    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
+    -1,    76,    -1,    78,    79,    -1,    81,    82,    83,    84,
+    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
+    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
+   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
+    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,   123,    -1,
+    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
+   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
+    -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
+    -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
+    -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
+    -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
+   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,
+   205,   206,   207,   208,   209,     3,     4,    -1,    -1,    -1,
+   215,    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    17,
+    18,    19,   227,   228,    -1,    -1,    -1,    -1,    -1,    -1,
+    28,    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,
+    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,
+    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
+    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,
+    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,
+    78,    79,    -1,    81,    82,    83,    84,    -1,    86,    87,
+    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,
+    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
+    -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,
+   118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,
+    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
+   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
+   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
+   158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
+    -1,   169,   170,    -1,   172,   173,   174,    -1,   176,    -1,
+   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
+   188,   189,   190,   191,    -1,   193,   194,   195,   196,   197,
+    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,   207,
+   208,   209,     3,     4,    -1,    -1,    -1,   215,    -1,    -1,
+   218,   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,
+   228,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,
+    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,
+    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
+    -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
+    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,
+    -1,    -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
+   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,
+   111,   112,   113,   114,    -1,    -1,    -1,    -1,   119,    -1,
+    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,
+    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,   140,
+   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,
+    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,   160,
+   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,
+    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,
+   181,   182,   183,   184,    -1,   186,   187,   188,   189,   190,
+   191,    -1,   193,   194,   195,   196,   197,     3,     4,    -1,
+   201,    -1,   203,   204,   205,   206,   207,   208,   209,    -1,
+    -1,    17,    18,    19,   215,    -1,    -1,   218,   219,   220,
+    -1,    -1,    -1,    -1,   110,    -1,   227,   228,    34,    35,
+    -1,    -1,    -1,    -1,    -1,    41,    -1,   123,    -1,    -1,
+    -1,    47,   128,    49,    -1,    -1,    -1,    -1,   134,   135,
+    -1,    57,   138,    -1,    60,    -1,    62,    -1,    -1,    -1,
+    66,    67,    -1,   149,    -1,    -1,    72,    73,    74,    -1,
+    76,   157,    78,    79,   160,    81,    82,    83,    84,    -1,
+    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
+    96,    -1,    -1,    99,   180,   101,   182,    -1,    -1,   105,
+   106,    -1,   188,   189,    -1,   111,   112,   113,   114,    -1,
+    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,
    126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,
     -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,
    146,   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,
    156,   157,   158,   159,   160,   161,   162,   163,   164,    -1,
-    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,    -1,
+    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,    -1,
    176,    -1,   178,   179,   180,   181,   182,   183,   184,    -1,
    186,   187,   188,   189,   190,   191,    -1,   193,   194,   195,
    196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,   205,
    206,   207,   208,   209,     3,     4,    -1,    -1,    -1,   215,
-    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    17,    18,
+    -1,    -1,   218,   219,   220,    14,    -1,    -1,    17,    18,
     19,   227,   228,    -1,    -1,    -1,    -1,    -1,    -1,    28,
     29,    30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,
     -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,    -1,
-    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
-    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,
+    49,    -1,    -1,    52,    -1,    -1,    -1,    -1,    57,    -1,
+    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,    68,
     -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,
     79,    -1,    81,    82,    83,    84,    -1,    86,    87,    -1,
     -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,
     99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,
-   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,   118,
+   109,    -1,   111,   112,   113,   114,    -1,   116,    -1,   118,
    119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,
     -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
     -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
@@ -3390,149 +3463,174 @@ static const short yycheck[] = {     3,
    189,   190,   191,    -1,   193,   194,   195,   196,   197,    -1,
     -1,    -1,   201,    -1,   203,   204,   205,   206,   207,   208,
    209,     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,
-   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,   228,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
+   219,   220,    14,    -1,    -1,    17,    18,    19,   227,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
     32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
-    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
-    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    -1,
-    -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
-    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,
-   112,   113,   114,    -1,    -1,    -1,    -1,   119,    -1,    -1,
+    -1,    -1,    -1,    45,    46,    47,    -1,    49,    -1,    -1,
+    52,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
+    62,    -1,    -1,    -1,    66,    67,    68,    -1,    -1,    -1,
+    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,
+    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
+    92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
+    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,
+   112,   113,   114,    -1,   116,    -1,   118,   119,    -1,    -1,
     -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,
    132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
     -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
    152,   153,    -1,    -1,   156,   157,   158,   159,   160,   161,
    162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
-    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
+   172,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
    182,   183,   184,    -1,   186,   187,   188,   189,   190,   191,
-    -1,   193,   194,   195,   196,   197,     3,     4,    -1,   201,
-    -1,   203,   204,   205,   206,   207,   208,   209,    -1,    -1,
-    17,    18,    19,   215,    -1,    -1,   218,   219,   220,    -1,
-    -1,    -1,    -1,    -1,    -1,   227,   228,    34,    35,    -1,
-    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,
-    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,
-    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,
-    -1,    78,    79,    -1,    81,    82,    83,    84,    -1,    86,
-    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,
-    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,
-    -1,    -1,    -1,    -1,   111,   112,   113,   114,    -1,    -1,
-    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,   126,
-    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,
-   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,
-   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,
-   157,   158,   159,   160,   161,   162,   163,   164,    -1,    -1,
-   167,    -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,
-    -1,   178,   179,   180,   181,   182,   183,   184,    -1,   186,
-   187,   188,   189,   190,   191,    -1,   193,   194,   195,   196,
-   197,     3,     4,    -1,   201,    -1,   203,   204,   205,   206,
-   207,   208,   209,    -1,    -1,    -1,    18,    19,   215,    -1,
-    -1,   218,   219,   220,    -1,    -1,    -1,    -1,    -1,    -1,
-   227,   228,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,
+    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
+    -1,   203,   204,   205,   206,   207,   208,   209,     3,     4,
+    -1,    -1,    -1,   215,    -1,    -1,   218,   219,   220,    14,
+    -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
+    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
+    45,    46,    47,    -1,    49,    -1,    -1,    52,    -1,    -1,
+    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
+    -1,    66,    67,    68,    -1,    -1,    -1,    72,    73,    74,
+    -1,    76,    -1,    78,    79,    -1,    81,    82,    83,    84,
+    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
+    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
+   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
+    -1,   116,    -1,   118,   119,    -1,    -1,    -1,   123,    -1,
+    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
+   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
+    -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
+    -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
+    -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
+    -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
+   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,
+   205,   206,   207,   208,   209,     3,     4,    -1,    -1,    -1,
+   215,    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    17,
+    18,    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    28,    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,
+    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,
+    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
+    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,
+    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,
+    78,    79,    -1,    81,    82,    83,    84,    -1,    86,    87,
+    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,
+    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
+    -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,
+   118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,
+    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
+   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
+   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
+   158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
+    -1,   169,   170,    -1,   172,   173,   174,    -1,   176,    -1,
+   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
+   188,   189,   190,   191,    -1,   193,   194,   195,   196,   197,
+    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,   207,
+   208,   209,    -1,    -1,    -1,    -1,    -1,   215,   216,    -1,
+   218,   219,   220,    -1,     3,     4,    -1,     6,    -1,   227,
+     9,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    17,    18,
+    19,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
+    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,
+    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,    -1,
+    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
+    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,
+    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,
+    79,    -1,    81,    -1,    83,    84,    -1,    86,    87,    -1,
+    -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,
+    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,
+   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,   118,
+   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,
+    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
+    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
+   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,
+   159,   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,
+   169,   170,    -1,   172,   173,   174,    -1,   176,    -1,   178,
+   179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
+   189,   190,   191,    -1,   193,   194,   195,   196,   197,    -1,
+    -1,    -1,   201,    -1,   203,   204,   205,   206,   207,   208,
+   209,     3,     4,    -1,     6,    -1,   215,     9,    -1,   218,
+   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
+    32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,
+    -1,    -1,    -1,    45,    46,    47,    -1,    49,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
-    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
-    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    -1,
+    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
+    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,
     -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
-    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,
-    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,
+    92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
+    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,
+   112,   113,   114,    -1,    -1,    -1,   118,   119,    -1,    -1,
+    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,
    132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
     -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
    152,   153,    -1,    -1,   156,   157,   158,   159,   160,   161,
    162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
-    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
-   182,   183,   184,    -1,   186,   187,   188,   189,   190,     3,
-     4,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
-    14,   203,   204,    17,    18,    19,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,
-    34,    35,    -1,    -1,    -1,    -1,   228,    41,    -1,    -1,
-    -1,    45,    46,    47,    -1,    49,    -1,    -1,    52,    -1,
-    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,
-    -1,    -1,    66,    67,    68,    -1,    -1,    -1,    72,    73,
-    74,    -1,    76,    -1,    78,    79,    -1,    81,    82,    83,
-    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,
-    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,
-    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,
-   114,    -1,   116,    -1,   118,   119,    -1,    -1,    -1,   123,
-    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,
-   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,
-    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,   153,
-    -1,    -1,   156,   157,   158,   159,   160,   161,   162,   163,
-   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,
-   174,    -1,   176,    -1,   178,   179,   180,   181,   182,   183,
-   184,    -1,   186,   187,   188,   189,   190,   191,    -1,   193,
-   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,
-   204,   205,   206,   207,   208,   209,     3,     4,    -1,    -1,
-    -1,   215,    -1,    -1,   218,   219,   220,    14,    -1,    -1,
-    17,    18,    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    28,    29,    30,    31,    32,    -1,    34,    35,    -1,
-    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,
-    47,    -1,    49,    -1,    -1,    52,    -1,    -1,    -1,    -1,
-    57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,
-    67,    68,    -1,    -1,    -1,    72,    73,    74,    -1,    76,
-    -1,    78,    79,    -1,    81,    82,    83,    84,    -1,    86,
-    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,
-    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,
-    -1,    -1,   109,    -1,   111,   112,   113,   114,    -1,   116,
-    -1,   118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,
-    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,
-   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,
-   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,
-   157,   158,   159,   160,   161,   162,   163,   164,    -1,    -1,
-   167,    -1,   169,   170,    -1,   172,   173,   174,    -1,   176,
-    -1,   178,   179,   180,   181,   182,   183,   184,    -1,   186,
-   187,   188,   189,   190,   191,    -1,   193,   194,   195,   196,
-   197,    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,
-   207,   208,   209,     3,     4,    -1,    -1,    -1,   215,    -1,
-    -1,   218,   219,   220,    14,    -1,    -1,    17,    18,    19,
-   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
-    30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,
-    -1,    41,    -1,    -1,    -1,    45,    46,    47,    -1,    49,
-    -1,    -1,    52,    -1,    -1,    -1,    -1,    57,    -1,    -1,
-    60,    -1,    62,    -1,    -1,    -1,    66,    67,    68,    -1,
-    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,
-    -1,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
-    -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,    99,
-    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,   109,
-    -1,   111,   112,   113,   114,    -1,   116,    -1,   118,   119,
-    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,
-    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
-   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
-   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
-   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
-   170,    -1,   172,   173,   174,    -1,   176,    -1,   178,   179,
-   180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
-   190,   191,    -1,   193,   194,   195,   196,   197,    -1,    -1,
-    -1,   201,    -1,   203,   204,   205,   206,   207,   208,   209,
-     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,   219,
-   220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
-    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,
-    -1,    -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    62,
-    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
-    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,    82,
-    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,
-    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
-    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,
-   113,   114,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,
-   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,
-   133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
-   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,
-   153,    -1,    -1,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,
-   173,   174,    -1,   176,    -1,   178,   179,   180,   181,   182,
-   183,   184,    -1,   186,   187,   188,   189,   190,   191,    -1,
-   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,
-   203,   204,   205,   206,   207,   208,   209,    -1,    -1,    -1,
-    -1,    -1,   215,   216,    -1,   218,   219,   220,    -1,     3,
-     4,    -1,     6,    -1,   227,     9,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    17,    18,    19,    -1,    -1,    -1,    -1,
+   172,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
+   182,   183,   184,    -1,   186,   187,   188,   189,   190,   191,
+    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
+    -1,   203,   204,   205,   206,   207,   208,   209,     3,     4,
+    -1,     6,    -1,   215,     9,    -1,   218,   219,   220,    -1,
+    -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
+    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
+    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
+    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
+    -1,    76,    -1,    78,    79,    -1,    81,    -1,    83,    84,
+    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
+    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
+   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
+    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,   123,    -1,
+    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
+   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
+    -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
+    -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
+    -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
+    -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
+   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,
+   205,   206,   207,   208,   209,     3,     4,    -1,     6,    -1,
+   215,     9,    -1,   218,   219,   220,    -1,    -1,    -1,    17,
+    18,    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    28,    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,
+    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,
+    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
+    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,
+    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,
+    78,    79,    -1,    81,    -1,    83,    84,    -1,    86,    87,
+    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,
+    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
+    -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,
+   118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,
+    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
+   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
+   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
+   158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
+    -1,   169,   170,    -1,   172,   173,   174,    -1,   176,    -1,
+   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
+   188,   189,   190,   191,    -1,   193,   194,   195,   196,   197,
+    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,   207,
+   208,   209,     3,     4,    -1,     6,    -1,   215,     9,    -1,
+   218,   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
+    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,
+    41,    -1,    -1,    -1,    45,    46,    47,    -1,    49,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
+    -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
+    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,
+    81,    -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+    -1,    92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
+   101,    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,
+   111,   112,   113,   114,    -1,    -1,    -1,   118,   119,    -1,
+    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,
+    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,   140,
+   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,
+    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,   160,
+   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,
+    -1,   172,   173,   174,    -1,   176,    -1,   178,   179,   180,
+   181,   182,   183,   184,    -1,   186,   187,   188,   189,   190,
+   191,    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,
+   201,    -1,   203,   204,   205,   206,   207,   208,   209,     3,
+     4,    -1,     6,    -1,   215,     9,    -1,   218,   219,   220,
+    -1,    -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,
     34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,
     -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,
@@ -3572,15 +3670,15 @@ static const short yycheck[] = {     3,
     -1,   178,   179,   180,   181,   182,   183,   184,    -1,   186,
    187,   188,   189,   190,   191,    -1,   193,   194,   195,   196,
    197,    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,
-   207,   208,   209,     3,     4,    -1,     6,    -1,   215,     9,
+   207,   208,   209,     3,     4,    -1,    -1,    -1,   215,    -1,
     -1,   218,   219,   220,    -1,    -1,    -1,    17,    18,    19,
    227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
     30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,
     -1,    41,    -1,    -1,    -1,    45,    46,    47,    -1,    49,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
+    -1,    -1,    52,    -1,    -1,    -1,    -1,    57,    -1,    -1,
     60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,
     -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,
-    -1,    81,    -1,    83,    84,    -1,    86,    87,    -1,    -1,
+    -1,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
     -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,    99,
     -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,   109,
     -1,   111,   112,   113,   114,    -1,    -1,    -1,   118,   119,
@@ -3593,17 +3691,17 @@ static const short yycheck[] = {     3,
    180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
    190,   191,    -1,   193,   194,   195,   196,   197,    -1,    -1,
     -1,   201,    -1,   203,   204,   205,   206,   207,   208,   209,
-     3,     4,    -1,     6,    -1,   215,     9,    -1,   218,   219,
+     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,   219,
    220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
     -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,
     -1,    -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    62,
     -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
-    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,    -1,
+    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,    82,
     83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,
     -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
-    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,
+    -1,    -1,   105,   106,   107,    -1,   109,    -1,   111,   112,
    113,   114,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,
    123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,
    133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
@@ -3614,14 +3712,14 @@ static const short yycheck[] = {     3,
    183,   184,    -1,   186,   187,   188,   189,   190,   191,    -1,
    193,   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,
    203,   204,   205,   206,   207,   208,   209,     3,     4,    -1,
-     6,    -1,   215,     9,    -1,   218,   219,   220,    -1,    -1,
+    -1,    -1,   215,    -1,    -1,   218,   219,   220,    -1,    -1,
     -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
     -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,
     46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,
     66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,
-    76,    -1,    78,    79,    -1,    81,    -1,    83,    84,    -1,
+    76,    -1,    78,    79,    -1,    81,    82,    83,    84,    -1,
     86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,
     96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,
    106,    -1,    -1,   109,    -1,   111,   112,   113,   114,    -1,
@@ -3642,7 +3740,7 @@ static const short yycheck[] = {     3,
     49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
     -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,
     -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,
-    79,    -1,    81,    -1,    83,    84,    -1,    86,    87,    -1,
+    79,    -1,    -1,    -1,    83,    84,    -1,    86,    87,    -1,
     -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,
     99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,
    109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,   118,
@@ -3655,7 +3753,7 @@ static const short yycheck[] = {     3,
    179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
    189,   190,   191,    -1,   193,   194,   195,   196,   197,    -1,
     -1,    -1,   201,    -1,   203,   204,   205,   206,   207,   208,
-   209,     3,     4,    -1,     6,    -1,   215,     9,    -1,   218,
+   209,     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,
    219,   220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,
     32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,
@@ -3665,7 +3763,7 @@ static const short yycheck[] = {     3,
     72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    81,
     -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
     92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
-    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,
+    -1,    -1,    -1,   105,   106,   107,    -1,   109,    -1,   111,
    112,   113,   114,    -1,    -1,    -1,   118,   119,    -1,    -1,
     -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,
    132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
@@ -3680,10 +3778,10 @@ static const short yycheck[] = {     3,
     -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
     35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
-    45,    46,    47,    -1,    49,    -1,    -1,    52,    -1,    -1,
+    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
     -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
-    -1,    76,    -1,    78,    79,    -1,    81,    82,    83,    84,
+    -1,    76,    -1,    78,    79,    -1,    81,    -1,    83,    84,
     -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
     95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
    105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
@@ -3700,13 +3798,13 @@ static const short yycheck[] = {     3,
    215,    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    17,
     18,    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     28,    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,
-    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    47,
+    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    47,
     -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
     -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,
     -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,
-    78,    79,    -1,    81,    82,    83,    84,    -1,    86,    87,
+    78,    79,    -1,    -1,    -1,    83,    84,    -1,    86,    87,
     -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,    -1,
-    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,   107,
+    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
     -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,    -1,
    118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,
     -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
@@ -3721,11 +3819,11 @@ static const short yycheck[] = {     3,
    218,   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
     31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,
-    41,    -1,    -1,    -1,    45,    46,    47,    -1,    49,    -1,
+    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
     -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
     -1,    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,
-    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+    -1,    -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
     -1,    92,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
    101,    -1,    -1,    -1,   105,   106,    -1,    -1,   109,    -1,
    111,   112,   113,   114,    -1,    -1,    -1,   118,   119,    -1,
@@ -3738,173 +3836,89 @@ static const short yycheck[] = {     3,
    181,   182,   183,   184,    -1,   186,   187,   188,   189,   190,
    191,    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,
    201,    -1,   203,   204,   205,   206,   207,   208,   209,     3,
-     4,    -1,     6,    -1,   215,     9,    -1,   218,   219,   220,
+     4,    -1,    -1,    -1,   215,    -1,    -1,   218,   219,   220,
     -1,    -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,
+    -1,    -1,    -1,    -1,    -1,    29,    30,    31,    32,    -1,
     34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,
-    -1,    45,    46,    47,    -1,    49,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,
     -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,
-    74,    -1,    76,    -1,    78,    79,    -1,    -1,    -1,    83,
-    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,
+    74,    -1,    76,    -1,    78,    79,    -1,    -1,    82,    83,
+    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,
-    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,
-   114,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,   123,
+    -1,   105,   106,    -1,    -1,    -1,    -1,   111,   112,   113,
+   114,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,   123,
     -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,
    134,   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,
     -1,    -1,   146,   147,   148,   149,   150,    -1,   152,   153,
     -1,    -1,   156,   157,   158,   159,   160,   161,   162,   163,
-   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,
+   164,    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,
    174,    -1,   176,    -1,   178,   179,   180,   181,   182,   183,
    184,    -1,   186,   187,   188,   189,   190,   191,    -1,   193,
    194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,
    204,   205,   206,   207,   208,   209,     3,     4,    -1,    -1,
     -1,   215,    -1,    -1,   218,   219,   220,    -1,    -1,    -1,
     17,    18,    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    28,    29,    30,    31,    32,    -1,    34,    35,    -1,
-    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,
+    -1,    -1,    29,    30,    31,    32,    -1,    34,    35,    -1,
+    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,
     47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    66,
     67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,
-    -1,    78,    79,    -1,    81,    -1,    83,    84,    -1,    86,
-    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,    96,
+    -1,    78,    79,    -1,    -1,    -1,    83,    84,    -1,    86,
+    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,
     -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,
-   107,    -1,   109,    -1,   111,   112,   113,   114,    -1,    -1,
-    -1,   118,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,
+    -1,    -1,    -1,    -1,   111,   112,   113,   114,    -1,    -1,
+    -1,    -1,   119,    -1,    -1,    -1,   123,    -1,    -1,   126,
     -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,
    137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,
    147,   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,
    157,   158,   159,   160,   161,   162,   163,   164,    -1,    -1,
-   167,    -1,   169,   170,    -1,   172,   173,   174,    -1,   176,
+   167,    -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,
     -1,   178,   179,   180,   181,   182,   183,   184,    -1,   186,
    187,   188,   189,   190,   191,    -1,   193,   194,   195,   196,
    197,    -1,    -1,    -1,   201,    -1,   203,   204,   205,   206,
    207,   208,   209,     3,     4,    -1,    -1,    -1,   215,    -1,
     -1,   218,   219,   220,    -1,    -1,    -1,    17,    18,    19,
-   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
+   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,
     30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,
-    -1,    41,    -1,    -1,    -1,    45,    46,    47,    -1,    49,
+    -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
     60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,
     -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,
-    -1,    81,    -1,    83,    84,    -1,    86,    87,    -1,    -1,
-    -1,    -1,    92,    -1,    -1,    95,    96,    -1,    -1,    99,
-    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,   109,
-    -1,   111,   112,   113,   114,    -1,    -1,    -1,   118,   119,
+    -1,    -1,    -1,    83,    84,    -1,    86,    87,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,
+    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,
+    -1,   111,   112,   113,   114,    -1,    -1,    -1,    -1,   119,
     -1,    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,
     -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
    140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
    150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
    160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
-   170,    -1,   172,   173,   174,    -1,   176,    -1,   178,   179,
+   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,
    180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
-   190,   191,    -1,   193,   194,   195,   196,   197,    -1,    -1,
+   190,   191,    -1,   193,   194,   195,   196,   197,     3,     4,
     -1,   201,    -1,   203,   204,   205,   206,   207,   208,   209,
-     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,   219,
-   220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    31,    32,
-    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,
-    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    62,
-    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
-    73,    74,    -1,    76,    -1,    78,    79,    -1,    -1,    -1,
-    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    92,
-    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
-    -1,    -1,   105,   106,    -1,    -1,   109,    -1,   111,   112,
-   113,   114,    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,
-   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,
-   133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
-   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,
-   153,    -1,    -1,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,
-   173,   174,    -1,   176,    -1,   178,   179,   180,   181,   182,
-   183,   184,    -1,   186,   187,   188,   189,   190,   191,    -1,
-   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,
-   203,   204,   205,   206,   207,   208,   209,     3,     4,    -1,
-    -1,    -1,   215,    -1,    -1,   218,   219,   220,    -1,    -1,
-    -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
-    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,
-    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,
-    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,
-    76,    -1,    78,    79,    -1,    -1,    -1,    83,    84,    -1,
-    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,    95,
-    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,
-   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,    -1,
-    -1,    -1,   118,   119,    -1,    -1,    -1,   123,    -1,    -1,
-   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,
-    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,
-   146,   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,
-   156,   157,   158,   159,   160,   161,   162,   163,   164,    -1,
-    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,    -1,
-   176,    -1,   178,   179,   180,   181,   182,   183,   184,    -1,
-   186,   187,   188,   189,   190,   191,    -1,   193,   194,   195,
-   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,   205,
-   206,   207,   208,   209,     3,     4,    -1,    -1,    -1,   215,
-    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    17,    18,
-    19,   227,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    29,    30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,
-    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,
-    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
-    -1,    60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,
-    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,
-    79,    -1,    -1,    82,    83,    84,    -1,    86,    87,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,
-    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,
-    -1,    -1,   111,   112,   113,   114,    -1,    -1,    -1,    -1,
-   119,    -1,    -1,    -1,   123,    -1,    -1,   126,    -1,    -1,
-    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
-    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
-   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,
-   159,   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,
-   169,   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,
-   179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
-   189,   190,   191,    -1,   193,   194,   195,   196,   197,    -1,
-    -1,    -1,   201,    -1,   203,   204,   205,   206,   207,   208,
-   209,     3,     4,    -1,    -1,    -1,   215,    -1,    -1,   218,
-   219,   220,    -1,    -1,    -1,    17,    18,    19,   227,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    29,    30,    31,
-    32,    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
-    62,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
-    72,    73,    74,    -1,    76,    -1,    78,    79,    -1,    -1,
-    -1,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
-    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,
-   112,   113,   114,    -1,    -1,    -1,    -1,   119,    -1,    -1,
-    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,
-   132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
-    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
-   152,   153,    -1,    -1,   156,   157,   158,   159,   160,   161,
-   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
-    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
-   182,   183,   184,    -1,   186,   187,   188,   189,   190,   191,
-    -1,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
-    -1,   203,   204,   205,   206,   207,   208,   209,     3,     4,
-    -1,    -1,    -1,   215,    -1,    -1,   218,   219,   220,    -1,
-    -1,    -1,    17,    18,    19,   227,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    29,    30,    31,    32,    -1,    34,
+    -1,    -1,    17,    18,    19,   215,    -1,    -1,   218,   219,
+   220,    -1,    -1,    28,    -1,    -1,    -1,   227,    -1,    34,
     35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
     -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
     -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
     -1,    76,    -1,    78,    79,    -1,    -1,    -1,    83,    84,
-    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
     95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
-   105,   106,    -1,    -1,    -1,    -1,   111,   112,   113,   114,
-    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,   123,    -1,
+   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
+    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    -1,
     -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
    135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
     -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
     -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,
+    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
     -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
     -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
    195,   196,   197,     3,     4,    -1,   201,    -1,   203,   204,
    205,   206,   207,   208,   209,    -1,    -1,    17,    18,    19,
-   215,    -1,    -1,   218,   219,   220,    -1,    -1,    28,    -1,
+   215,    -1,    -1,   218,    -1,    -1,    -1,    -1,    28,    -1,
     -1,    -1,   227,    -1,    34,    35,    -1,    -1,    -1,    -1,
     -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
@@ -3924,32 +3938,32 @@ static const short yycheck[] = {     3,
    190,   191,    -1,   193,   194,   195,   196,   197,     3,     4,
     -1,   201,    -1,   203,   204,   205,   206,   207,   208,   209,
     -1,    -1,    17,    18,    19,   215,    -1,    -1,   218,    -1,
-    -1,    -1,    -1,    28,    -1,    -1,    -1,   227,    -1,    34,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   227,    -1,    34,
     35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
     -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
     -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
-    -1,    76,    -1,    78,    79,    -1,    -1,    -1,    83,    84,
-    -1,    86,    87,    -1,    -1,    -1,    -1,    92,    -1,    -1,
+    -1,    76,    -1,    78,    79,    -1,    81,    82,    83,    84,
+    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
-   105,   106,    -1,    -1,   109,    -1,   111,   112,   113,   114,
-    -1,    -1,    -1,   118,   119,    -1,    -1,    -1,    -1,    -1,
+   105,   106,    -1,    -1,    -1,    -1,   111,   112,   113,   114,
+    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
     -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
    135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
     -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
     -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
+    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,
     -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
     -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
    195,   196,   197,     3,     4,    -1,   201,    -1,   203,   204,
    205,   206,   207,   208,   209,    -1,    -1,    17,    18,    19,
-   215,    -1,    -1,   218,    -1,    -1,    -1,    -1,    -1,    -1,
+   215,    -1,    -1,   218,   219,   220,    -1,    -1,    -1,    -1,
     -1,    -1,   227,    -1,    34,    35,    -1,    -1,    -1,    -1,
     -1,    41,    -1,    -1,    -1,    -1,    -1,    47,    -1,    49,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
     60,    -1,    62,    -1,    -1,    -1,    66,    67,    -1,    -1,
     -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,    79,
-    -1,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
+    -1,    -1,    82,    83,    84,    -1,    86,    87,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,
     -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,
     -1,   111,   112,   113,   114,    -1,    -1,    -1,    -1,   119,
@@ -3962,169 +3976,118 @@ static const short yycheck[] = {     3,
    180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
    190,   191,    -1,   193,   194,   195,   196,   197,     3,     4,
     -1,   201,    -1,   203,   204,   205,   206,   207,   208,   209,
-    -1,    -1,    17,    18,    19,   215,    -1,    -1,   218,   219,
-   220,    -1,    -1,    -1,    -1,    -1,    -1,   227,    -1,    34,
-    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
-    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   215,    -1,    -1,   218,   219,
+   220,    -1,    -1,    28,    -1,    -1,    -1,   227,    -1,    34,
+    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
+    -1,    -1,     8,    -1,    -1,    -1,    -1,    13,    -1,    -1,
+    -1,    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,
     -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
-    -1,    76,    -1,    78,    79,    -1,    -1,    82,    83,    84,
+    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    84,
     -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
-   105,   106,    -1,    -1,    -1,    -1,   111,   112,   113,   114,
-    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
-    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
+    95,    96,    58,    -1,    99,    -1,   101,    -1,    64,    -1,
+   105,   106,    -1,    -1,    70,    -1,   111,    -1,   113,   114,
+    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,
+    -1,    -1,    88,    -1,    -1,    -1,    -1,   132,   133,   134,
    135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
     -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
     -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,
+    -1,     8,   167,    -1,   169,   170,    13,   172,   173,   174,
     -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
-    -1,   186,   187,   188,   189,   190,   191,    -1,   193,   194,
-   195,   196,   197,     3,     4,    -1,   201,    -1,   203,   204,
-   205,   206,   207,   208,   209,    -1,    -1,    -1,    -1,    -1,
-   215,    -1,    -1,   218,   219,   220,    -1,    -1,    28,    -1,
-    -1,    -1,   227,    -1,    34,    -1,    -1,    -1,    -1,    -1,
-    -1,    41,    -1,    -1,    -1,    -1,    -1,     8,    -1,    10,
-    -1,    -1,    13,    -1,    -1,    -1,    -1,    57,    -1,    -1,
-    60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
-    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
-    -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    95,    96,    58,    -1,    99,
-    -1,   101,    -1,    64,    -1,   105,   106,    -1,    -1,    70,
-    -1,   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,
-    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,
-    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
-   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
-   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
-   160,   161,   162,   163,   164,    -1,     8,   167,    -1,   169,
-   170,    13,   172,   173,   174,    -1,   176,    -1,   178,   179,
-   180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
-   190,    -1,    -1,   193,   194,   195,   196,   197,    -1,    -1,
-    -1,   201,   163,   203,   204,    -1,    -1,     8,    -1,    10,
-    -1,    -1,    13,    -1,    -1,    -1,    58,   178,    -1,    -1,
-    -1,    -1,    64,    -1,    -1,    -1,    -1,   227,    70,     8,
-    -1,    -1,    -1,    -1,    13,    -1,    -1,    -1,    -1,    81,
-    -1,    -1,    -1,    -1,    -1,   206,    88,    -1,    -1,    -1,
-   211,   212,   213,   214,   215,   216,   217,    58,    -1,    -1,
-    -1,    -1,    -1,    64,   225,    -1,    -1,    -1,    -1,    70,
-     8,    -1,    -1,    -1,    -1,    13,    -1,    -1,    -1,    58,
-    81,    -1,    -1,    -1,    -1,    64,    -1,    88,    -1,    -1,
-     8,    70,    -1,    -1,    -1,    13,    -1,    -1,    -1,    -1,
-    -1,    -1,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    58,   163,    -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,
-     8,    -1,    70,    -1,    -1,    13,   178,    -1,    -1,    -1,
-    58,    -1,    -1,    81,    -1,    -1,    64,    -1,    -1,    -1,
-    88,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   163,    81,   206,    -1,    -1,    -1,    -1,   211,
-   212,   213,   214,   215,   216,   217,    -1,   178,    -1,    -1,
-    58,    -1,   224,   225,   163,    -1,    64,    -1,    -1,    -1,
-    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,   178,
-    -1,    -1,    -1,    81,    -1,   206,    -1,    -1,    -1,    -1,
-   211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   225,   163,    -1,   206,    -1,    -1,
-    -1,    -1,   211,   212,   213,   214,   215,   216,   217,    -1,
-   178,    -1,    -1,    -1,    -1,   163,   225,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   178,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   206,    -1,
-    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,   217,
-    -1,    -1,    -1,    -1,    -1,   163,    -1,   225,   206,     3,
-     4,    -1,    -1,   211,   212,   213,   214,   215,   216,   217,
-   178,    -1,    -1,    -1,    -1,    -1,    -1,   225,    -1,    -1,
+    -1,   186,   187,   188,   189,   190,    -1,    -1,   193,   194,
+   195,   196,   197,    -1,    -1,    -1,   201,   163,   203,   204,
+    -1,    -1,     8,    -1,    -1,    -1,    -1,    13,    -1,    -1,
+    -1,    58,   178,    -1,    -1,    -1,    -1,    64,    -1,    -1,
+    -1,    -1,   227,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,    -1,
+   206,    88,    -1,    -1,    -1,   211,   212,   213,   214,   215,
+   216,   217,    58,    -1,    -1,    -1,    -1,    -1,    64,   225,
+    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,   206,    -1,
-    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,   217,
-    -1,    -1,    -1,    57,    -1,    -1,    60,   225,    -1,    -1,
-    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,
-    74,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
-    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,
-    -1,   105,   106,    -1,    -1,    -1,    -1,   111,    -1,   113,
-   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,
-   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,
-    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,   153,
-    -1,    -1,   156,   157,   158,   159,   160,   161,   162,   163,
-   164,    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,
-   174,    -1,   176,    -1,   178,   179,   180,   181,   182,   183,
-   184,    -1,   186,   187,   188,   189,   190,   191,    -1,   193,
-   194,   195,   196,   197,     3,     4,    -1,   201,    -1,   203,
-   204,   205,   206,   207,    -1,   209,    -1,   211,   212,   213,
-   214,   215,   216,   217,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,    37,    -1,
-    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    13,
-    -1,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    -1,
-    -1,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
-    79,    -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,    -1,
-    99,    -1,   101,    -1,    58,    -1,   105,   106,    -1,    -1,
-    64,    -1,   111,    -1,   113,   114,    70,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,
-    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
-    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
-   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,
-   159,   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,
-   169,   170,     3,     4,   173,   174,    -1,   176,    -1,   178,
-   179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
-   189,   190,    -1,    -1,   193,   194,   195,   196,   197,    -1,
-    -1,    -1,   201,    34,   203,   204,    -1,   206,    -1,   163,
-    41,    -1,   211,   212,   213,   214,   215,   216,   217,    -1,
-    -1,    -1,    -1,    -1,   178,    -1,    57,    -1,    -1,    60,
-    -1,    -1,    -1,    -1,    65,    66,    67,    -1,    -1,    -1,
-    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,
-    -1,    -1,   206,    84,    -1,    86,    87,   211,   212,   213,
-   214,   215,   216,   217,    95,    96,    97,    -1,    99,    -1,
-   101,   225,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,
-   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,   140,
-   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,
-    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,   160,
-   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,
-    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,
-   181,   182,   183,   184,    -1,   186,   187,   188,   189,   190,
-    -1,    -1,   193,   194,   195,   196,   197,     3,     4,    -1,
-   201,    -1,   203,   204,    -1,   206,    -1,    -1,    -1,    -1,
-   211,   212,   213,   214,   215,   216,   217,    -1,    -1,    -1,
-    -1,    -1,    28,    -1,    -1,    -1,    -1,    -1,    34,    -1,
-    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
-    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,
-    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    84,    -1,
-    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
-    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,
-   106,    -1,    -1,    -1,    -1,   111,    -1,   113,   114,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   163,    -1,    -1,    -1,
+     3,     4,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   178,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,
-    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,
-   146,   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,
-   156,   157,   158,   159,   160,   161,   162,   163,   164,    -1,
-    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,    -1,
-   176,    -1,   178,   179,   180,   181,   182,   183,   184,    -1,
-   186,   187,   188,   189,   190,     3,     4,   193,   194,   195,
-   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,    -1,
-    -1,    -1,   208,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   216,    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,
+    -1,    34,    -1,    -1,    -1,    -1,    -1,   163,    41,   206,
+    -1,    -1,    -1,    -1,   211,   212,   213,   214,   215,   216,
+   217,    -1,   178,    -1,    57,    -1,    -1,    60,   225,    -1,
+    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
+    73,    74,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
+   206,    84,    -1,    86,    87,   211,   212,   213,   214,   215,
+   216,   217,    95,    96,    -1,    -1,    99,    -1,   101,   225,
+    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,    -1,
+   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,
+   133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
+   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,
+   153,    -1,    -1,   156,   157,   158,   159,   160,   161,   162,
+   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,    -1,
+   173,   174,    -1,   176,    -1,   178,   179,   180,   181,   182,
+   183,   184,    -1,   186,   187,   188,   189,   190,   191,    -1,
+   193,   194,   195,   196,   197,     3,     4,    -1,   201,    -1,
+   203,   204,   205,   206,   207,    -1,   209,    -1,   211,   212,
+   213,   214,   215,   216,   217,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,    37,
     -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
-    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,
+    13,    -1,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
     -1,    -1,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
     -1,    79,    -1,    -1,    -1,    -1,    84,    -1,    86,    87,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,
-    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
-    -1,    -1,    -1,   111,    -1,   113,   114,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    97,
+    -1,    99,    -1,   101,    -1,    58,    -1,   105,   106,    -1,
+    -1,    64,    -1,   111,    -1,   113,   114,    70,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,
     -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
    138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
-   148,   149,   150,    -1,   152,   153,     3,     4,   156,   157,
+   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
    158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
-    -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,    -1,
-   178,   179,   180,   181,   182,   183,   184,    34,   186,   187,
-   188,   189,   190,    -1,    41,   193,   194,   195,   196,   197,
-    -1,    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,
-    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,   216,    66,
+    -1,   169,   170,     3,     4,   173,   174,    -1,   176,    -1,
+   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
+   188,   189,   190,    -1,    -1,   193,   194,   195,   196,   197,
+    -1,    -1,    -1,   201,    34,   203,   204,    -1,   206,    -1,
+   163,    41,    -1,   211,   212,   213,   214,   215,   216,   217,
+    -1,    -1,    -1,    -1,    -1,   178,    -1,    57,    -1,    -1,
+    60,    -1,    -1,    -1,    -1,    65,    66,    67,    -1,    -1,
+    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
+    -1,    -1,    -1,   206,    84,    -1,    86,    87,   211,   212,
+   213,   214,   215,   216,   217,    95,    96,    97,    -1,    99,
+    -1,   101,   225,    -1,    -1,   105,   106,    -1,    -1,    -1,
+    -1,   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
+   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
+   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
+   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
+   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,
+   180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
+   190,    -1,    -1,   193,   194,   195,   196,   197,     3,     4,
+    -1,   201,    -1,   203,   204,    -1,   206,    -1,    -1,    -1,
+    -1,   211,   212,   213,   214,   215,   216,   217,    -1,    -1,
+    -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,    -1,    34,
+    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,
+    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,    74,
+    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,    84,
+    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,
+   105,   106,    -1,    -1,    -1,    -1,   111,    -1,   113,   114,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
+   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
+    -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
+    -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+    -1,    -1,   167,    -1,   169,   170,    -1,   172,   173,   174,
+    -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
+    -1,   186,   187,   188,   189,   190,     3,     4,   193,   194,
+   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,
+    -1,    -1,    -1,   208,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   216,    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,
+    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,
     67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    -1,
     -1,    -1,    79,    -1,    -1,    -1,    -1,    84,    -1,    86,
     87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,
@@ -4163,100 +4126,58 @@ static const short yycheck[] = {     3,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,   134,
    135,    -1,   137,   138,    -1,   140,   141,    -1,   143,    -1,
-    -1,   146,   147,   148,   149,   150,    -1,   152,   153,    -1,
-    -1,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+    -1,   146,   147,   148,   149,   150,    -1,   152,   153,     3,
+     4,   156,   157,   158,   159,   160,   161,   162,   163,   164,
     -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,   174,
     -1,   176,    -1,   178,   179,   180,   181,   182,   183,   184,
-    -1,   186,   187,   188,   189,   190,    -1,    -1,   193,   194,
-   195,   196,   197,     3,     4,    -1,   201,    -1,   203,   204,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   216,    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,
-    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,
-    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
-    60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
-    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
-    -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,
-    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,
-    -1,   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
-   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
-   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
-   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
-   170,    -1,   172,   173,   174,    -1,   176,    -1,   178,   179,
-   180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
-   190,     3,     4,   193,   194,   195,   196,   197,    -1,    -1,
-    -1,   201,    -1,   203,   204,    -1,    -1,    -1,   208,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
-    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
-    72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,    -1,
-    -1,    -1,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
-    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,
-    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   132,   133,   134,   135,    -1,   137,   138,    -1,   140,   141,
-    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
-   152,   153,    -1,    -1,   156,   157,   158,   159,   160,   161,
-   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
-    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
-   182,   183,   184,    -1,   186,   187,   188,   189,   190,     3,
-     4,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
-    -1,   203,   204,    -1,    -1,   207,    -1,    -1,    -1,    -1,
-    -1,    25,    -1,    27,    28,    -1,    -1,    -1,    -1,    -1,
-    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,
-    -1,    -1,    -1,    47,    -1,    -1,    -1,    51,    -1,    -1,
-    -1,    55,    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,
-    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,    73,
+    34,   186,   187,   188,   189,   190,    -1,    41,   193,   194,
+   195,   196,   197,    -1,    -1,    -1,   201,    -1,   203,   204,
+    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    -1,    -1,
+    -1,   216,    66,    67,    -1,    -1,    -1,    -1,    72,    73,
     74,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,    -1,
-    84,    -1,    86,    87,    -1,    89,    -1,    -1,    92,    93,
+    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,    -1,
-    -1,   105,   106,    -1,    -1,    -1,   110,   111,    -1,   113,
-   114,    -1,    -1,   117,    -1,   119,    -1,    -1,    -1,    -1,
+    -1,   105,   106,    -1,    -1,    -1,    -1,   111,    -1,   113,
+   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,   133,
-   134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-   154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-   164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-   174,   175,   176,    -1,   178,   179,   180,   181,   182,   183,
-   184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-   194,   195,   196,   197,     3,     4,   200,   201,   202,   203,
-   204,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    18,
-    19,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    34,    35,    -1,    -1,    -1,
+   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,   143,
+    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,   153,
+    -1,    -1,   156,   157,   158,   159,   160,   161,   162,   163,
+   164,    -1,    -1,   167,    -1,   169,   170,    -1,    -1,   173,
+   174,    -1,   176,    -1,   178,   179,   180,   181,   182,   183,
+   184,    -1,   186,   187,   188,   189,   190,    -1,    -1,   193,
+   194,   195,   196,   197,     3,     4,    -1,   201,    -1,   203,
+   204,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   216,    -1,    -1,    -1,    -1,    -1,    -1,    28,
+    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,
     -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,
     -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,
-    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,    78,
-    79,    -1,    -1,    -1,    83,    84,    -1,    86,    87,    -1,
+    -1,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
+    79,    -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,
     99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,
     -1,    -1,   111,    -1,   113,   114,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
     -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
    149,   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,
    159,   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,
-   169,   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,
+   169,   170,    -1,   172,   173,   174,    -1,   176,    -1,   178,
    179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
    189,   190,     3,     4,   193,   194,   195,   196,   197,    -1,
-    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,    20,
-    -1,    -1,    -1,    -1,    25,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,   208,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
     41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    51,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
+    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
     -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
     -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,
     -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,    -1,
-    -1,    -1,    -1,    94,    95,    96,    -1,    -1,    99,    -1,
+    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
    101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,
    111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,
-   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,   132,   133,   134,   135,    -1,   137,   138,    -1,   140,
    141,    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,
     -1,   152,   153,    -1,    -1,   156,   157,   158,   159,   160,
@@ -4264,30 +4185,72 @@ static const short yycheck[] = {     3,
     -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,
    181,   182,   183,   184,    -1,   186,   187,   188,   189,   190,
      3,     4,   193,   194,   195,   196,   197,    -1,    -1,    -1,
-   201,    -1,   203,   204,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,    -1,
+   201,    -1,   203,   204,    -1,    -1,   207,    -1,    -1,    -1,
+    -1,    -1,    25,    -1,    27,    28,    -1,    -1,    -1,    -1,
     -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,    -1,
+    -1,    -1,    -1,    -1,    47,    -1,    -1,    -1,    51,    -1,
+    -1,    -1,    55,    -1,    57,    -1,    -1,    60,    -1,    -1,
     -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,    72,
     73,    74,    -1,    -1,    -1,    -1,    79,    -1,    -1,    -1,
-    -1,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
-    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,    -1,
-   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    84,    -1,    86,    87,    -1,    89,    -1,    -1,    92,
+    93,    -1,    95,    96,    -1,    -1,    99,    -1,   101,    -1,
+    -1,    -1,   105,   106,    -1,    -1,    -1,   110,   111,    -1,
+   113,   114,    -1,    -1,   117,    -1,   119,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   132,
-   133,   134,   135,    -1,   137,   138,    -1,   140,   141,    -1,
-   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,   152,
-   153,     3,     4,   156,   157,   158,   159,   160,   161,   162,
-   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,   172,
-   173,   174,    -1,   176,    -1,   178,   179,   180,   181,   182,
-   183,   184,    34,   186,   187,   188,   189,   190,    -1,    41,
-   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,    -1,
-   203,   204,    -1,    55,    -1,    57,    -1,    -1,    60,    -1,
+   133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+   153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+   163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+   173,   174,   175,   176,    -1,   178,   179,   180,   181,   182,
+   183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+   193,   194,   195,   196,   197,     3,     4,   200,   201,   202,
+   203,   204,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    18,    19,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    -1,    -1,
+    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,
+    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,
+    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    76,    -1,
+    78,    79,    -1,    -1,    -1,    83,    84,    -1,    86,    87,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,
+    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
+    -1,    -1,    -1,   111,    -1,   113,   114,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,    -1,
+    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
+   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
+   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
+   158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
+    -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,    -1,
+   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
+   188,   189,   190,     3,     4,   193,   194,   195,   196,   197,
+    -1,    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,
+    20,    -1,    -1,    -1,    -1,    25,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,
+    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    51,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
+    60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
+    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
+    -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,
+    -1,    -1,    -1,    -1,    94,    95,    96,    -1,    -1,    99,
+    -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,
+    -1,   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,
+    -1,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,
+   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
+   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,   159,
+   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
+   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,
+   180,   181,   182,   183,   184,    -1,   186,   187,   188,   189,
+   190,     3,     4,   193,   194,   195,   196,   197,    -1,    -1,
+    -1,   201,    -1,   203,   204,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    28,    -1,    -1,    -1,
+    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    41,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,    -1,
     -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1,
     72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,    -1,
     -1,    -1,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    95,    96,    -1,    98,    99,    -1,   101,
+    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,   101,
     -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,   111,
     -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -4295,14 +4258,14 @@ static const short yycheck[] = {     3,
     -1,   143,    -1,    -1,   146,   147,   148,   149,   150,    -1,
    152,   153,     3,     4,   156,   157,   158,   159,   160,   161,
    162,   163,   164,    -1,    -1,   167,    -1,   169,   170,    -1,
-    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
+   172,   173,   174,    -1,   176,    -1,   178,   179,   180,   181,
    182,   183,   184,    34,   186,   187,   188,   189,   190,    -1,
     41,   193,   194,   195,   196,   197,    -1,    -1,    -1,   201,
-    -1,   203,   204,    -1,    -1,    -1,    57,    -1,    -1,    60,
+    -1,   203,   204,    -1,    55,    -1,    57,    -1,    -1,    60,
     -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
-    -1,    72,    73,    74,    75,    -1,    -1,    -1,    79,    -1,
+    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,
     -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
+    -1,    -1,    -1,    -1,    95,    96,    -1,    98,    99,    -1,
    101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,
    111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -4315,7 +4278,7 @@ static const short yycheck[] = {     3,
     -1,    41,   193,   194,   195,   196,   197,    -1,    -1,    -1,
    201,    -1,   203,   204,    -1,    -1,    -1,    57,    -1,    -1,
     60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
-    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
+    -1,    -1,    72,    73,    74,    75,    -1,    -1,    -1,    79,
     -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,
     -1,   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,
@@ -4325,7 +4288,7 @@ static const short yycheck[] = {     3,
    140,   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,
    150,    -1,   152,   153,     3,     4,   156,   157,   158,   159,
    160,   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,
-   170,    -1,    -1,   173,   174,   175,   176,    -1,   178,   179,
+   170,    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,
    180,   181,   182,   183,   184,    34,   186,   187,   188,   189,
    190,    -1,    41,   193,   194,   195,   196,   197,    -1,    -1,
     -1,   201,    -1,   203,   204,    -1,    -1,    -1,    57,    -1,
@@ -4338,31 +4301,31 @@ static const short yycheck[] = {     3,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,   138,
     -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,   148,
-   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,   158,
+   149,   150,    -1,   152,   153,     3,     4,   156,   157,   158,
    159,   160,   161,   162,   163,   164,    -1,    -1,   167,    -1,
    169,   170,    -1,    -1,   173,   174,   175,   176,    -1,   178,
-   179,   180,   181,   182,   183,   184,    -1,   186,   187,   188,
-   189,   190,     3,     4,   193,   194,   195,   196,   197,    10,
-    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,    -1,
+   179,   180,   181,   182,   183,   184,    34,   186,   187,   188,
+   189,   190,    -1,    41,   193,   194,   195,   196,   197,    -1,
+    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,    57,
+    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,    67,
+    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
+    -1,    79,    -1,    -1,    -1,    -1,    84,    -1,    86,    87,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,
+    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,    -1,
+    -1,    -1,    -1,   111,    -1,   113,   114,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,
-    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,    60,
-    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,
-    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,    -1,
-    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,
-   101,    -1,    -1,    -1,   105,   106,    -1,    -1,    -1,    -1,
-   111,    -1,   113,   114,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
+   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
+   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
+   158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
+    -1,   169,   170,    -1,    -1,   173,   174,   175,   176,    -1,
+   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
+   188,   189,   190,     3,     4,   193,   194,   195,   196,   197,
+    10,    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   132,   133,   134,   135,    -1,   137,   138,    -1,   140,
-   141,    -1,   143,    -1,    -1,   146,   147,   148,   149,   150,
-    -1,   152,   153,     3,     4,   156,   157,   158,   159,   160,
-   161,   162,   163,   164,    -1,    -1,   167,    -1,   169,   170,
-    -1,    -1,   173,   174,    -1,   176,    -1,   178,   179,   180,
-   181,   182,   183,   184,    34,   186,   187,   188,   189,   190,
-    -1,    41,   193,   194,   195,   196,   197,    -1,    -1,    -1,
-   201,    -1,   203,   204,    -1,    -1,    -1,    57,    -1,    -1,
+    -1,    -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,
+    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,    -1,    -1,
     60,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,
     -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    79,
     -1,    -1,    -1,    -1,    84,    -1,    86,    87,    -1,    -1,
@@ -4402,59 +4365,66 @@ static const short yycheck[] = {     3,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,   137,
    138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,   147,
-   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,   157,
+   148,   149,   150,    -1,   152,   153,     3,     4,   156,   157,
    158,   159,   160,   161,   162,   163,   164,    -1,    -1,   167,
     -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,    -1,
-   178,   179,   180,   181,   182,   183,   184,    -1,   186,   187,
-   188,   189,   190,    -1,    -1,   193,   194,   195,   196,   197,
-    -1,    -1,     7,   201,    -1,   203,   204,    12,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    21,    -1,    -1,    24,
-    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    36,    -1,    38,    -1,    -1,    -1,    42,    43,    44,
-    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,
-    -1,    -1,    -1,    -1,    18,    19,    61,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,
-    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    57,    -1,    -1,    -1,   102,    62,   104,
-    -1,    -1,   107,   108,    -1,    -1,    -1,    -1,    -1,    73,
-    74,    -1,    76,    -1,    78,    -1,    -1,   122,    -1,    83,
+   178,   179,   180,   181,   182,   183,   184,    34,   186,   187,
+   188,   189,   190,    -1,    41,   193,   194,   195,   196,   197,
+    -1,    -1,    -1,   201,    -1,   203,   204,    -1,    -1,    -1,
+    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,    66,
+    67,    -1,    -1,    -1,    -1,    72,    73,    74,    -1,    -1,
+    -1,    -1,    79,    -1,    -1,    -1,    -1,    84,    -1,    86,
+    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,
+    -1,    -1,    99,    -1,   101,    -1,    -1,    -1,   105,   106,
+    -1,    -1,    -1,    -1,   111,    -1,   113,   114,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   144,
-   145,    -1,   106,   107,    -1,    -1,    -1,   111,   112,   154,
-   155,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
-   165,   166,   126,   168,    -1,    -1,   171,    -1,   132,    -1,
-    -1,   135,   177,    18,    19,    -1,    -1,    -1,    -1,    -1,
-   185,    -1,    -1,    -1,    -1,    -1,    -1,   192,    -1,    34,
-    35,    -1,    -1,   198,    -1,   200,    41,    -1,    -1,    -1,
-    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    57,    -1,    -1,    -1,    -1,    62,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   191,    73,    74,
-    -1,    76,    -1,    78,    -1,    -1,    -1,    -1,    83,    -1,
-   204,   205,    -1,   207,   208,   209,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   132,   133,   134,   135,    -1,
+   137,   138,    -1,   140,   141,    -1,   143,    -1,    -1,   146,
+   147,   148,   149,   150,    -1,   152,   153,    -1,    -1,   156,
+   157,   158,   159,   160,   161,   162,   163,   164,    -1,    -1,
+   167,    -1,   169,   170,    -1,    -1,   173,   174,    -1,   176,
+    -1,   178,   179,   180,   181,   182,   183,   184,    -1,   186,
+   187,   188,   189,   190,    -1,    -1,   193,   194,   195,   196,
+   197,    -1,    -1,     7,   201,    -1,   203,   204,    12,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    21,    -1,    -1,
+    24,    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    36,    -1,    38,    -1,    -1,    -1,    42,    43,
+    44,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+    54,    -1,    -1,    -1,    -1,    18,    19,    61,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   106,    18,    19,    -1,    -1,   111,   112,    -1,    -1,
-    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    34,    35,
-    -1,   126,    -1,    -1,    -1,    41,    -1,   132,    -1,    -1,
-   135,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    57,    -1,    -1,    -1,    -1,    62,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,
-    76,    -1,    78,    -1,    -1,    -1,    -1,    83,    -1,    -1,
+    -1,    34,    35,    -1,    -1,    -1,    -1,    -1,    41,    -1,
+    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    57,    -1,    -1,    -1,   102,    62,
+   104,    -1,    -1,   107,   108,    -1,    -1,    -1,    -1,    -1,
+    73,    74,    -1,    76,    -1,    78,    -1,    -1,   122,    -1,
+    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   144,   145,    -1,   106,   107,    -1,    -1,    -1,   111,   112,
+   154,   155,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,
+    -1,   165,   166,   126,   168,    -1,    -1,   171,    -1,   132,
+    -1,    -1,   135,   177,    18,    19,    -1,    -1,    -1,    -1,
+    -1,   185,    -1,    -1,    -1,    -1,    -1,    -1,   192,    -1,
+    34,    35,    -1,    -1,   198,    -1,   200,    41,    -1,    -1,
+    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    57,    -1,    -1,    -1,    -1,    62,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   191,    73,
+    74,    -1,    76,    -1,    78,    -1,    -1,    -1,    -1,    83,
+    -1,   204,   205,    -1,   207,   208,   209,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   191,    -1,    -1,    -1,
-   106,    -1,    -1,    -1,    -1,   111,   112,    -1,    -1,   204,
-   205,    -1,   207,   208,   209,    -1,    -1,    -1,    -1,    -1,
-   126,    -1,    -1,    -1,    -1,    -1,   132,    -1,    -1,   135,
+    -1,    -1,   106,    -1,    -1,    -1,    -1,   111,   112,    -1,
+    -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
+    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,   132,    -1,
+    -1,   135,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   191,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   190,   191,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   204
+   204,   205,    -1,   207,   208,   209
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/lib/bison.simple"
+#line 3 "/usr/local/bison/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -4647,7 +4617,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 \f
-#line 196 "/usr/lib/bison.simple"
+#line 196 "/usr/local/bison/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -9938,443 +9908,444 @@ case 818:
 #line 4602 "gram.y"
 {
                                        yyval.paramno = makeNode(ParamNo);
-                                       yyval.paramno->number = yyvsp[0].ival;
+                                       yyval.paramno->number = yyvsp[-1].ival;
+                                       yyval.paramno->indirection = yyvsp[0].list;
                                ;
     break;}
 case 819:
-#line 4608 "gram.y"
+#line 4609 "gram.y"
 { yyval.ival = yyvsp[0].ival; ;
     break;}
 case 820:
-#line 4609 "gram.y"
+#line 4610 "gram.y"
 { yyval.str = yyvsp[0].str; ;
     break;}
 case 821:
-#line 4610 "gram.y"
+#line 4611 "gram.y"
 { yyval.str = yyvsp[0].str; ;
     break;}
 case 822:
-#line 4618 "gram.y"
+#line 4619 "gram.y"
 {      yyval.str = xlateSqlType(yyvsp[0].str); ;
     break;}
 case 823:
-#line 4620 "gram.y"
+#line 4621 "gram.y"
 {      yyval.str = xlateSqlType(yyvsp[0].str); ;
     break;}
 case 824:
-#line 4622 "gram.y"
+#line 4623 "gram.y"
 {      yyval.str = xlateSqlType(yyvsp[0].str); ;
     break;}
 case 825:
-#line 4632 "gram.y"
+#line 4633 "gram.y"
 { yyval.str = yyvsp[0].str; ;
     break;}
 case 826:
-#line 4633 "gram.y"
+#line 4634 "gram.y"
 { yyval.str = yyvsp[0].str; ;
     break;}
 case 827:
-#line 4634 "gram.y"
+#line 4635 "gram.y"
 { yyval.str = "absolute"; ;
     break;}
 case 828:
-#line 4635 "gram.y"
+#line 4636 "gram.y"
 { yyval.str = "action"; ;
     break;}
 case 829:
-#line 4636 "gram.y"
+#line 4637 "gram.y"
 { yyval.str = "after"; ;
     break;}
 case 830:
-#line 4637 "gram.y"
+#line 4638 "gram.y"
 { yyval.str = "aggregate"; ;
     break;}
 case 831:
-#line 4638 "gram.y"
+#line 4639 "gram.y"
 { yyval.str = "backward"; ;
     break;}
 case 832:
-#line 4639 "gram.y"
+#line 4640 "gram.y"
 { yyval.str = "before"; ;
     break;}
 case 833:
-#line 4640 "gram.y"
+#line 4641 "gram.y"
 { yyval.str = "cache"; ;
     break;}
 case 834:
-#line 4641 "gram.y"
+#line 4642 "gram.y"
 { yyval.str = "createdb"; ;
     break;}
 case 835:
-#line 4642 "gram.y"
+#line 4643 "gram.y"
 { yyval.str = "createuser"; ;
     break;}
 case 836:
-#line 4643 "gram.y"
+#line 4644 "gram.y"
 { yyval.str = "cycle"; ;
     break;}
 case 837:
-#line 4644 "gram.y"
+#line 4645 "gram.y"
 { yyval.str = "database"; ;
     break;}
 case 838:
-#line 4645 "gram.y"
+#line 4646 "gram.y"
 { yyval.str = "delimiters"; ;
     break;}
 case 839:
-#line 4646 "gram.y"
+#line 4647 "gram.y"
 { yyval.str = "double"; ;
     break;}
 case 840:
-#line 4647 "gram.y"
+#line 4648 "gram.y"
 { yyval.str = "each"; ;
     break;}
 case 841:
-#line 4648 "gram.y"
+#line 4649 "gram.y"
 { yyval.str = "encoding"; ;
     break;}
 case 842:
-#line 4649 "gram.y"
+#line 4650 "gram.y"
 { yyval.str = "forward"; ;
     break;}
 case 843:
-#line 4650 "gram.y"
+#line 4651 "gram.y"
 { yyval.str = "function"; ;
     break;}
 case 844:
-#line 4651 "gram.y"
+#line 4652 "gram.y"
 { yyval.str = "handler"; ;
     break;}
 case 845:
-#line 4652 "gram.y"
+#line 4653 "gram.y"
 { yyval.str = "increment"; ;
     break;}
 case 846:
-#line 4653 "gram.y"
+#line 4654 "gram.y"
 { yyval.str = "index"; ;
     break;}
 case 847:
-#line 4654 "gram.y"
+#line 4655 "gram.y"
 { yyval.str = "inherits"; ;
     break;}
 case 848:
-#line 4655 "gram.y"
+#line 4656 "gram.y"
 { yyval.str = "insensitive"; ;
     break;}
 case 849:
-#line 4656 "gram.y"
+#line 4657 "gram.y"
 { yyval.str = "instead"; ;
     break;}
 case 850:
-#line 4657 "gram.y"
+#line 4658 "gram.y"
 { yyval.str = "isnull"; ;
     break;}
 case 851:
-#line 4658 "gram.y"
+#line 4659 "gram.y"
 { yyval.str = "key"; ;
     break;}
 case 852:
-#line 4659 "gram.y"
+#line 4660 "gram.y"
 { yyval.str = "language"; ;
     break;}
 case 853:
-#line 4660 "gram.y"
+#line 4661 "gram.y"
 { yyval.str = "lancompiler"; ;
     break;}
 case 854:
-#line 4661 "gram.y"
+#line 4662 "gram.y"
 { yyval.str = "location"; ;
     break;}
 case 855:
-#line 4662 "gram.y"
+#line 4663 "gram.y"
 { yyval.str = "match"; ;
     break;}
 case 856:
-#line 4663 "gram.y"
+#line 4664 "gram.y"
 { yyval.str = "maxvalue"; ;
     break;}
 case 857:
-#line 4664 "gram.y"
+#line 4665 "gram.y"
 { yyval.str = "minvalue"; ;
     break;}
 case 858:
-#line 4665 "gram.y"
+#line 4666 "gram.y"
 { yyval.str = "next"; ;
     break;}
 case 859:
-#line 4666 "gram.y"
+#line 4667 "gram.y"
 { yyval.str = "nocreatedb"; ;
     break;}
 case 860:
-#line 4667 "gram.y"
+#line 4668 "gram.y"
 { yyval.str = "nocreateuser"; ;
     break;}
 case 861:
-#line 4668 "gram.y"
+#line 4669 "gram.y"
 { yyval.str = "nothing"; ;
     break;}
 case 862:
-#line 4669 "gram.y"
+#line 4670 "gram.y"
 { yyval.str = "notnull"; ;
     break;}
 case 863:
-#line 4670 "gram.y"
+#line 4671 "gram.y"
 { yyval.str = "of"; ;
     break;}
 case 864:
-#line 4671 "gram.y"
+#line 4672 "gram.y"
 { yyval.str = "oids"; ;
     break;}
 case 865:
-#line 4672 "gram.y"
+#line 4673 "gram.y"
 { yyval.str = "only"; ;
     break;}
 case 866:
-#line 4673 "gram.y"
+#line 4674 "gram.y"
 { yyval.str = "operator"; ;
     break;}
 case 867:
-#line 4674 "gram.y"
+#line 4675 "gram.y"
 { yyval.str = "option"; ;
     break;}
 case 868:
-#line 4675 "gram.y"
+#line 4676 "gram.y"
 { yyval.str = "password"; ;
     break;}
 case 869:
-#line 4676 "gram.y"
+#line 4677 "gram.y"
 { yyval.str = "prior"; ;
     break;}
 case 870:
-#line 4677 "gram.y"
+#line 4678 "gram.y"
 { yyval.str = "privileges"; ;
     break;}
 case 871:
-#line 4678 "gram.y"
+#line 4679 "gram.y"
 { yyval.str = "procedural"; ;
     break;}
 case 872:
-#line 4679 "gram.y"
+#line 4680 "gram.y"
 { yyval.str = "read"; ;
     break;}
 case 873:
-#line 4680 "gram.y"
+#line 4681 "gram.y"
 { yyval.str = "recipe"; ;
     break;}
 case 874:
-#line 4681 "gram.y"
+#line 4682 "gram.y"
 { yyval.str = "relative"; ;
     break;}
 case 875:
-#line 4682 "gram.y"
+#line 4683 "gram.y"
 { yyval.str = "rename"; ;
     break;}
 case 876:
-#line 4683 "gram.y"
+#line 4684 "gram.y"
 { yyval.str = "returns"; ;
     break;}
 case 877:
-#line 4684 "gram.y"
+#line 4685 "gram.y"
 { yyval.str = "row"; ;
     break;}
 case 878:
-#line 4685 "gram.y"
+#line 4686 "gram.y"
 { yyval.str = "rule"; ;
     break;}
 case 879:
-#line 4686 "gram.y"
+#line 4687 "gram.y"
 { yyval.str = "scroll"; ;
     break;}
 case 880:
-#line 4687 "gram.y"
+#line 4688 "gram.y"
 { yyval.str = "sequence"; ;
     break;}
 case 881:
-#line 4688 "gram.y"
+#line 4689 "gram.y"
 { yyval.str = "serial"; ;
     break;}
 case 882:
-#line 4689 "gram.y"
+#line 4690 "gram.y"
 { yyval.str = "start"; ;
     break;}
 case 883:
-#line 4690 "gram.y"
+#line 4691 "gram.y"
 { yyval.str = "statement"; ;
     break;}
 case 884:
-#line 4691 "gram.y"
+#line 4692 "gram.y"
 { yyval.str = "stdin"; ;
     break;}
 case 885:
-#line 4692 "gram.y"
+#line 4693 "gram.y"
 { yyval.str = "stdout"; ;
     break;}
 case 886:
-#line 4693 "gram.y"
+#line 4694 "gram.y"
 { yyval.str = "time"; ;
     break;}
 case 887:
-#line 4694 "gram.y"
+#line 4695 "gram.y"
 { yyval.str = "timezone_hour"; ;
     break;}
 case 888:
-#line 4695 "gram.y"
+#line 4696 "gram.y"
 { yyval.str = "timezone_minute"; ;
     break;}
 case 889:
-#line 4696 "gram.y"
+#line 4697 "gram.y"
 { yyval.str = "trigger"; ;
     break;}
 case 890:
-#line 4697 "gram.y"
+#line 4698 "gram.y"
 { yyval.str = "trusted"; ;
     break;}
 case 891:
-#line 4698 "gram.y"
+#line 4699 "gram.y"
 { yyval.str = "type"; ;
     break;}
 case 892:
-#line 4699 "gram.y"
+#line 4700 "gram.y"
 { yyval.str = "valid"; ;
     break;}
 case 893:
-#line 4700 "gram.y"
+#line 4701 "gram.y"
 { yyval.str = "version"; ;
     break;}
 case 894:
-#line 4701 "gram.y"
+#line 4702 "gram.y"
 { yyval.str = "zone"; ;
     break;}
 case 895:
-#line 4714 "gram.y"
+#line 4715 "gram.y"
 { yyval.str = yyvsp[0].str; ;
     break;}
 case 896:
-#line 4715 "gram.y"
+#line 4716 "gram.y"
 { yyval.str = "abort"; ;
     break;}
 case 897:
-#line 4716 "gram.y"
+#line 4717 "gram.y"
 { yyval.str = "analyze"; ;
     break;}
 case 898:
-#line 4717 "gram.y"
+#line 4718 "gram.y"
 { yyval.str = "binary"; ;
     break;}
 case 899:
-#line 4718 "gram.y"
+#line 4719 "gram.y"
 { yyval.str = "cluster"; ;
     break;}
 case 900:
-#line 4719 "gram.y"
+#line 4720 "gram.y"
 { yyval.str = "constraint"; ;
     break;}
 case 901:
-#line 4720 "gram.y"
+#line 4721 "gram.y"
 { yyval.str = "copy"; ;
     break;}
 case 902:
-#line 4721 "gram.y"
+#line 4722 "gram.y"
 { yyval.str = "cross"; ;
     break;}
 case 903:
-#line 4722 "gram.y"
+#line 4723 "gram.y"
 { yyval.str = "current"; ;
     break;}
 case 904:
-#line 4723 "gram.y"
+#line 4724 "gram.y"
 { yyval.str = "do"; ;
     break;}
 case 905:
-#line 4724 "gram.y"
+#line 4725 "gram.y"
 { yyval.str = "explain"; ;
     break;}
 case 906:
-#line 4725 "gram.y"
+#line 4726 "gram.y"
 { yyval.str = "extend"; ;
     break;}
 case 907:
-#line 4726 "gram.y"
+#line 4727 "gram.y"
 { yyval.str = "false"; ;
     break;}
 case 908:
-#line 4727 "gram.y"
+#line 4728 "gram.y"
 { yyval.str = "foreign"; ;
     break;}
 case 909:
-#line 4728 "gram.y"
+#line 4729 "gram.y"
 { yyval.str = "group"; ;
     break;}
 case 910:
-#line 4729 "gram.y"
+#line 4730 "gram.y"
 { yyval.str = "listen"; ;
     break;}
 case 911:
-#line 4730 "gram.y"
+#line 4731 "gram.y"
 { yyval.str = "load"; ;
     break;}
 case 912:
-#line 4731 "gram.y"
+#line 4732 "gram.y"
 { yyval.str = "lock"; ;
     break;}
 case 913:
-#line 4732 "gram.y"
+#line 4733 "gram.y"
 { yyval.str = "move"; ;
     break;}
 case 914:
-#line 4733 "gram.y"
+#line 4734 "gram.y"
 { yyval.str = "new"; ;
     break;}
 case 915:
-#line 4734 "gram.y"
+#line 4735 "gram.y"
 { yyval.str = "none"; ;
     break;}
 case 916:
-#line 4735 "gram.y"
+#line 4736 "gram.y"
 { yyval.str = "order"; ;
     break;}
 case 917:
-#line 4736 "gram.y"
+#line 4737 "gram.y"
 { yyval.str = "position"; ;
     break;}
 case 918:
-#line 4737 "gram.y"
+#line 4738 "gram.y"
 { yyval.str = "precision"; ;
     break;}
 case 919:
-#line 4738 "gram.y"
+#line 4739 "gram.y"
 { yyval.str = "reset"; ;
     break;}
 case 920:
-#line 4739 "gram.y"
+#line 4740 "gram.y"
 { yyval.str = "setof"; ;
     break;}
 case 921:
-#line 4740 "gram.y"
+#line 4741 "gram.y"
 { yyval.str = "show"; ;
     break;}
 case 922:
-#line 4741 "gram.y"
+#line 4742 "gram.y"
 { yyval.str = "table"; ;
     break;}
 case 923:
-#line 4742 "gram.y"
+#line 4743 "gram.y"
 { yyval.str = "transaction"; ;
     break;}
 case 924:
-#line 4743 "gram.y"
+#line 4744 "gram.y"
 { yyval.str = "true"; ;
     break;}
 case 925:
-#line 4744 "gram.y"
+#line 4745 "gram.y"
 { yyval.str = "vacuum"; ;
     break;}
 case 926:
-#line 4745 "gram.y"
+#line 4746 "gram.y"
 { yyval.str = "verbose"; ;
     break;}
 case 927:
-#line 4749 "gram.y"
+#line 4750 "gram.y"
 {
                                        if (QueryIsRule)
                                                yyval.str = "*CURRENT*";
@@ -10383,7 +10354,7 @@ case 927:
                                ;
     break;}
 case 928:
-#line 4756 "gram.y"
+#line 4757 "gram.y"
 {
                                        if (QueryIsRule)
                                                yyval.str = "*NEW*";
@@ -10393,7 +10364,7 @@ case 928:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/lib/bison.simple"
+#line 498 "/usr/local/bison/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -10589,7 +10560,7 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 4764 "gram.y"
+#line 4765 "gram.y"
 
 
 static Node *
index d9812a52367e309f942e939949f80271ee0ac897..686a2d0e8ca96cedce219d0f007d1b5d9775aec5 100644 (file)
@@ -4,7 +4,7 @@
 #    Makefile for utils/adt
 #
 # IDENTIFICATION
-#    $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.17 1998/08/24 01:38:04 momjian Exp $
+#    $Header: /cvsroot/pgsql/src/backend/utils/adt/Makefile,v 1.18 1998/10/03 05:40:47 momjian Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -23,7 +23,8 @@ OBJS = acl.o arrayfuncs.o arrayutils.o bool.o cash.o char.o chunk.o \
        misc.o nabstime.o name.o not_in.o numutils.o \
        oid.o oracle_compat.o \
        regexp.o regproc.o ruleutils.o selfuncs.o sets.o \
-       tid.o timestamp.o varchar.o varlena.o version.o
+       tid.o timestamp.o varchar.o varlena.o version.o \
+       ip.o mac.o inet_net_ntop.o inet_net_pton.o
 
 all: SUBSYS.o
 
diff --git a/src/backend/utils/adt/inet_net_ntop.c b/src/backend/utils/adt/inet_net_ntop.c
new file mode 100644 (file)
index 0000000..655f8ba
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 1996 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.1 1998/10/03 05:40:48 momjian Exp $";
+
+#endif
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef SPRINTF_CHAR
+#define SPRINTF(x) strlen(sprintf/**/x)
+#else
+#define SPRINTF(x) ((size_t)sprintf x)
+#endif
+
+static char *inet_net_ntop_ipv4(const u_char *src, int bits,
+                                                               char *dst, size_t size);
+
+/*
+ * char *
+ * inet_net_ntop(af, src, bits, dst, size)
+ *     convert network number from network to presentation format.
+ *     generates CIDR style result always.
+ * return:
+ *     pointer to dst, or NULL if an error occurred (check errno).
+ * author:
+ *     Paul Vixie (ISC), July 1996
+ */
+char *
+inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size)
+{
+       switch (af)
+       {
+               case AF_INET:
+                       return (inet_net_ntop_ipv4(src, bits, dst, size));
+               default:
+                       errno = EAFNOSUPPORT;
+                       return (NULL);
+       }
+}
+
+/*
+ * static char *
+ * inet_net_ntop_ipv4(src, bits, dst, size)
+ *     convert IPv4 network number from network to presentation format.
+ *     generates CIDR style result always.
+ * return:
+ *     pointer to dst, or NULL if an error occurred (check errno).
+ * note:
+ *     network byte order assumed.  this means 192.5.5.240/28 has
+ *     0x11110000 in its fourth octet.
+ * author:
+ *     Paul Vixie (ISC), July 1996
+ */
+static char *
+inet_net_ntop_ipv4(const u_char *src, int bits, char *dst, size_t size)
+{
+       char       *odst = dst;
+       char       *t;
+       u_int           m;
+       int                     b;
+
+       if (bits < 0 || bits > 32)
+       {
+               errno = EINVAL;
+               return (NULL);
+       }
+       if (bits == 0)
+       {
+               if (size < sizeof "0")
+                       goto emsgsize;
+               *dst++ = '0';
+               *dst = '\0';
+       }
+
+       /* Format whole octets. */
+       for (b = bits / 8; b > 0; b--)
+       {
+               if (size < sizeof "255.")
+                       goto emsgsize;
+               t = dst;
+               dst += SPRINTF((dst, "%u", *src++));
+               if (b > 1)
+               {
+                       *dst++ = '.';
+                       *dst = '\0';
+               }
+               size -= (size_t) (dst - t);
+       }
+
+       /* Format partial octet. */
+       b = bits % 8;
+       if (b > 0)
+       {
+               if (size < sizeof ".255")
+                       goto emsgsize;
+               t = dst;
+               if (dst != odst)
+                       *dst++ = '.';
+               m = ((1 << b) - 1) << (8 - b);
+               dst += SPRINTF((dst, "%u", *src & m));
+               size -= (size_t) (dst - t);
+       }
+
+       /* Format CIDR /width. */
+       if (size < sizeof "/32")
+               goto emsgsize;
+       dst += SPRINTF((dst, "/%u", bits));
+       return (odst);
+
+emsgsize:
+       errno = EMSGSIZE;
+       return (NULL);
+}
diff --git a/src/backend/utils/adt/inet_net_pton.c b/src/backend/utils/adt/inet_net_pton.c
new file mode 100644 (file)
index 0000000..8b3ae41
--- /dev/null
@@ -0,0 +1,217 @@
+/*
+ * Copyright (c) 1996 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static const char rcsid[] = "$Id: inet_net_pton.c,v 1.1 1998/10/03 05:40:49 momjian Exp $";
+
+#endif
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef SPRINTF_CHAR
+#define SPRINTF(x) strlen(sprintf/**/x)
+#else
+#define SPRINTF(x) ((size_t)sprintf x)
+#endif
+
+static int     inet_net_pton_ipv4(const char *src, u_char *dst, size_t size);
+
+/*
+ * static int
+ * inet_net_pton(af, src, dst, size)
+ *     convert network number from presentation to network format.
+ *     accepts hex octets, hex strings, decimal octets, and /CIDR.
+ *     "size" is in bytes and describes "dst".
+ * return:
+ *     number of bits, either imputed classfully or specified with /CIDR,
+ *     or -1 if some failure occurred (check errno).  ENOENT means it was
+ *     not a valid network specification.
+ * author:
+ *     Paul Vixie (ISC), June 1996
+ */
+int
+inet_net_pton(int af, const char *src, void *dst, size_t size)
+{
+       switch (af)
+       {
+               case AF_INET:
+                       return (inet_net_pton_ipv4(src, dst, size));
+               default:
+                       errno = EAFNOSUPPORT;
+                       return (-1);
+       }
+}
+
+/*
+ * static int
+ * inet_net_pton_ipv4(src, dst, size)
+ *     convert IPv4 network number from presentation to network format.
+ *     accepts hex octets, hex strings, decimal octets, and /CIDR.
+ *     "size" is in bytes and describes "dst".
+ * return:
+ *     number of bits, either imputed classfully or specified with /CIDR,
+ *     or -1 if some failure occurred (check errno).  ENOENT means it was
+ *     not an IPv4 network specification.
+ * note:
+ *     network byte order assumed.  this means 192.5.5.240/28 has
+ *     0x11110000 in its fourth octet.
+ * author:
+ *     Paul Vixie (ISC), June 1996
+ */
+static int
+inet_net_pton_ipv4(const char *src, u_char *dst, size_t size)
+{
+       static const char
+                               xdigits[] = "0123456789abcdef",
+                               digits[] = "0123456789";
+       int                     n,
+                               ch,
+                               tmp,
+                               dirty,
+                               bits;
+       const u_char *odst = dst;
+
+       ch = *src++;
+       if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
+               && isascii(src[1]) && isxdigit(src[1]))
+       {
+               /* Hexadecimal: Eat nybble string. */
+               if (size <= 0)
+                       goto emsgsize;
+               *dst = 0, dirty = 0;
+               src++;                                  /* skip x or X. */
+               while ((ch = *src++) != '\0' &&
+                          isascii(ch) && isxdigit(ch))
+               {
+                       if (isupper(ch))
+                               ch = tolower(ch);
+                       n = strchr(xdigits, ch) - xdigits;
+                       assert(n >= 0 && n <= 15);
+                       *dst |= n;
+                       if (!dirty++)
+                               *dst <<= 4;
+                       else if (size-- > 0)
+                               *++dst = 0, dirty = 0;
+                       else
+                               goto emsgsize;
+               }
+               if (dirty)
+                       size--;
+       }
+       else if (isascii(ch) && isdigit(ch))
+       {
+               /* Decimal: eat dotted digit string. */
+               for (;;)
+               {
+                       tmp = 0;
+                       do
+                       {
+                               n = strchr(digits, ch) - digits;
+                               assert(n >= 0 && n <= 9);
+                               tmp *= 10;
+                               tmp += n;
+                               if (tmp > 255)
+                                       goto enoent;
+                       } while ((ch = *src++) != '\0' &&
+                                        isascii(ch) && isdigit(ch));
+                       if (size-- <= 0)
+                               goto emsgsize;
+                       *dst++ = (u_char) tmp;
+                       if (ch == '\0' || ch == '/')
+                               break;
+                       if (ch != '.')
+                               goto enoent;
+                       ch = *src++;
+                       if (!isascii(ch) || !isdigit(ch))
+                               goto enoent;
+               }
+       }
+       else
+               goto enoent;
+
+       bits = -1;
+       if (ch == '/' && isascii(src[0]) && isdigit(src[0]) && dst > odst)
+       {
+               /* CIDR width specifier.  Nothing can follow it. */
+               ch = *src++;                    /* Skip over the /. */
+               bits = 0;
+               do
+               {
+                       n = strchr(digits, ch) - digits;
+                       assert(n >= 0 && n <= 9);
+                       bits *= 10;
+                       bits += n;
+               } while ((ch = *src++) != '\0' &&
+                                isascii(ch) && isdigit(ch));
+               if (ch != '\0')
+                       goto enoent;
+               if (bits > 32)
+                       goto emsgsize;
+       }
+
+       /* Firey death and destruction unless we prefetched EOS. */
+       if (ch != '\0')
+               goto enoent;
+
+       /* If nothing was written to the destination, we found no address. */
+       if (dst == odst)
+               goto enoent;
+       /* If no CIDR spec was given, infer width from net class. */
+       if (bits == -1)
+       {
+               if (*odst >= 240)               /* Class E */
+                       bits = 32;
+               else if (*odst >= 224)  /* Class D */
+                       bits = 4;
+               else if (*odst >= 192)  /* Class C */
+                       bits = 24;
+               else if (*odst >= 128)  /* Class B */
+                       bits = 16;
+               else
+/* Class A */
+                       bits = 8;
+               /* If imputed mask is narrower than specified octets, widen. */
+               if (bits >= 8 && bits < ((dst - odst) * 8))
+                       bits = (dst - odst) * 8;
+       }
+       /* Extend network to cover the actual mask. */
+       while (bits > ((dst - odst) * 8))
+       {
+               if (size-- <= 0)
+                       goto emsgsize;
+               *dst++ = '\0';
+       }
+       return (bits);
+
+enoent:
+       errno = ENOENT;
+       return (-1);
+
+emsgsize:
+       errno = EMSGSIZE;
+       return (-1);
+}
diff --git a/src/backend/utils/adt/ip.c b/src/backend/utils/adt/ip.c
new file mode 100644 (file)
index 0000000..b293396
--- /dev/null
@@ -0,0 +1,283 @@
+/*
+ *     PostgreSQL type definitions for IP addresses.  This
+ *     is for IP V4 CIDR notation, but prepared for V6: just
+ *     add the necessary bits where the comments indicate.
+ *
+ *     $Id: ip.c,v 1.1 1998/10/03 05:40:49 momjian Exp $
+ */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <stdio.h>
+#include <errno.h>
+
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <postgres.h>
+#include <utils/palloc.h>
+#include <utils/mac.h>
+
+/*
+ *     Access macros.  Add IPV6 support.
+ */
+
+#define ip_addrsize(ipaddrptr) \
+       (((ipaddr_struct *)VARDATA(ipaddrptr))->family == AF_INET ? 4 : -1)
+
+#define ip_family(ipaddrptr) \
+       (((ipaddr_struct *)VARDATA(ipaddrptr))->family)
+
+#define ip_bits(ipaddrptr) \
+       (((ipaddr_struct *)VARDATA(ipaddrptr))->bits)
+
+#define ip_v4addr(ipaddrptr) \
+       (((ipaddr_struct *)VARDATA(ipaddrptr))->addr.ipv4_addr)
+
+/*
+ *     IP address reader.
+ */
+
+ipaddr *
+ipaddr_in(char *src)
+{
+       int                     bits;
+       ipaddr     *dst;
+
+       dst = palloc(VARHDRSZ + sizeof(ipaddr_struct));
+       if (dst == NULL)
+       {
+               elog(ERROR, "unable to allocate memory in ipaddr_in()");
+               return (NULL);
+       }
+       /* First, try for an IP V4 address: */
+       ip_family(dst) = AF_INET;
+       bits = inet_net_pton(ip_family(dst), src, &ip_v4addr(dst), ip_addrsize(dst));
+       if ((bits < 0) || (bits > 32))
+       {
+               /* Go for an IPV6 address here, before faulting out: */
+               elog(ERROR, "could not parse \"%s\"", src);
+               pfree(dst);
+               return (NULL);
+       }
+       VARSIZE(dst) = VARHDRSZ
+               + ((char *) &ip_v4addr(dst) - (char *) VARDATA(dst))
+               + ip_addrsize(dst);
+       ip_bits(dst) = bits;
+       return (dst);
+}
+
+/*
+ *     IP address output function.
+ */
+
+char *
+ipaddr_out(ipaddr *src)
+{
+       char       *dst,
+                               tmp[sizeof("255.255.255.255/32")];
+
+       if (ip_family(src) == AF_INET)
+       {
+               /* It's an IP V4 address: */
+               if (inet_net_ntop(AF_INET, &ip_v4addr(src), ip_bits(src),
+                                                 tmp, sizeof(tmp)) < 0)
+               {
+                       elog(ERROR, "unable to print address (%s)", strerror(errno));
+                       return (NULL);
+               }
+       }
+       else
+       {
+               /* Go for an IPV6 address here, before faulting out: */
+               elog(ERROR, "unknown address family (%d)", ip_family(src));
+               return (NULL);
+       }
+       dst = palloc(strlen(tmp) + 1);
+       if (dst == NULL)
+       {
+               elog(ERROR, "unable to allocate memory in ipaddr_out()");
+               return (NULL);
+       }
+       strcpy(dst, tmp);
+       return (dst);
+}
+
+/*
+ *     Boolean tests for magnitude.  Add V4/V6 testing!
+ */
+
+bool
+ipaddr_lt(ipaddr *a1, ipaddr *a2)
+{
+       if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
+       {
+               int                     order = v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2));
+
+               return ((order < 0) || ((order == 0) && (ip_bits(a1) < ip_bits(a2))));
+       }
+       else
+       {
+               /* Go for an IPV6 address here, before faulting out: */
+               elog(ERROR, "cannot compare address families %d and %d",
+                        ip_family(a1), ip_family(a2));
+               return (FALSE);
+       }
+}
+
+bool
+ipaddr_le(ipaddr *a1, ipaddr *a2)
+{
+       return (ipaddr_lt(a1, a2) || ipaddr_eq(a1, a2));
+}
+
+bool
+ipaddr_eq(ipaddr *a1, ipaddr *a2)
+{
+       if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
+       {
+               return ((ip_bits(a1) == ip_bits(a2))
+                && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a1)) == 0));
+       }
+       else
+       {
+               /* Go for an IPV6 address here, before faulting out: */
+               elog(ERROR, "cannot compare address families %d and %d",
+                        ip_family(a1), ip_family(a2));
+               return (FALSE);
+       }
+}
+
+bool
+ipaddr_ge(ipaddr *a1, ipaddr *a2)
+{
+       return (ipaddr_gt(a1, a2) || ipaddr_eq(a1, a2));
+}
+
+bool
+ipaddr_gt(ipaddr *a1, ipaddr *a2)
+{
+       if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
+       {
+               int                     order = v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2));
+
+               return ((order > 0) || ((order == 0) && (ip_bits(a1) > ip_bits(a2))));
+       }
+       else
+       {
+               /* Go for an IPV6 address here, before faulting out: */
+               elog(ERROR, "cannot compare address families %d and %d",
+                        ip_family(a1), ip_family(a2));
+               return (FALSE);
+       }
+}
+
+bool
+ipaddr_ne(ipaddr *a1, ipaddr *a2)
+{
+       return (!ipaddr_eq(a1, a2));
+}
+
+bool
+ipaddr_sub(ipaddr *a1, ipaddr *a2)
+{
+       if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
+       {
+               return ((ip_bits(a1) > ip_bits(a2))
+                && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2)) == 0));
+       }
+       else
+       {
+               /* Go for an IPV6 address here, before faulting out: */
+               elog(ERROR, "cannot compare address families %d and %d",
+                        ip_family(a1), ip_family(a2));
+               return (FALSE);
+       }
+}
+
+bool
+ipaddr_subeq(ipaddr *a1, ipaddr *a2)
+{
+       if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
+       {
+               return ((ip_bits(a1) >= ip_bits(a2))
+                && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2)) == 0));
+       }
+       else
+       {
+               /* Go for an IPV6 address here, before faulting out: */
+               elog(ERROR, "cannot compare address families %d and %d",
+                        ip_family(a1), ip_family(a2));
+               return (FALSE);
+       }
+}
+
+bool
+ipaddr_sup(ipaddr *a1, ipaddr *a2)
+{
+       if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
+       {
+               return ((ip_bits(a1) < ip_bits(a2))
+                && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a1)) == 0));
+       }
+       else
+       {
+               /* Go for an IPV6 address here, before faulting out: */
+               elog(ERROR, "cannot compare address families %d and %d",
+                        ip_family(a1), ip_family(a2));
+               return (FALSE);
+       }
+}
+
+bool
+ipaddr_supeq(ipaddr *a1, ipaddr *a2)
+{
+       if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
+       {
+               return ((ip_bits(a1) <= ip_bits(a2))
+                && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a1)) == 0));
+       }
+       else
+       {
+               /* Go for an IPV6 address here, before faulting out: */
+               elog(ERROR, "cannot compare address families %d and %d",
+                        ip_family(a1), ip_family(a2));
+               return (FALSE);
+       }
+}
+
+/*
+ *     Comparison function for sorting.  Add V4/V6 testing!
+ */
+
+int4
+ipaddr_cmp(ipaddr *a1, ipaddr *a2)
+{
+       if (ntohl(ip_v4addr(a1)) < ntohl(ip_v4addr(a2)))
+               return (-1);
+       else if (ntohl(ip_v4addr(a1)) > ntohl(ip_v4addr(a2)))
+               return (1);
+       return 0;
+}
+
+/*
+ *     Bitwise comparison for V4 addresses.  Add V6 implementation!
+ */
+
+int
+v4bitncmp(u_int32_t a1, u_int32_t a2, int bits)
+{
+       unsigned long mask = 0;
+       int                     i;
+
+       for (i = 0; i < bits; i++)
+               mask = (mask >> 1) | 0x80000000;
+       a1 = ntohl(a1);
+       a2 = ntohl(a2);
+       if ((a1 & mask) < (a2 & mask))
+               return (-1);
+       else if ((a1 & mask) > (a2 & mask))
+               return (1);
+       return (0);
+}
diff --git a/src/backend/utils/adt/mac.c b/src/backend/utils/adt/mac.c
new file mode 100644 (file)
index 0000000..8d09ea1
--- /dev/null
@@ -0,0 +1,323 @@
+/*
+ *     PostgreSQL type definitions for MAC addresses.
+ *
+ *     $Id: mac.c,v 1.1 1998/10/03 05:40:50 momjian Exp $
+ */
+
+#include <stdio.h>
+
+#include <postgres.h>
+#include <utils/palloc.h>
+
+#include <utils/mac.h>
+
+manufacturer manufacturers[] = {
+  {0x00, 0x00, 0x0C, "Cisco"},
+  {0x00, 0x00, 0x0E, "Fujitsu"},
+  {0x00, 0x00, 0x0F, "NeXT"},
+  {0x00, 0x00, 0x10, "Sytek"},
+  {0x00, 0x00, 0x1D, "Cabletron"},
+  {0x00, 0x00, 0x20, "DIAB"},
+  {0x00, 0x00, 0x22, "Visual Technology"},
+  {0x00, 0x00, 0x2A, "TRW"},
+  {0x00, 0x00, 0x32, "GPT Limited"},
+  {0x00, 0x00, 0x5A, "S & Koch"},
+  {0x00, 0x00, 0x5E, "IANA"},
+  {0x00, 0x00, 0x65, "Network General"},
+  {0x00, 0x00, 0x6B, "MIPS"},
+  {0x00, 0x00, 0x77, "MIPS"},
+  {0x00, 0x00, 0x7A, "Ardent"},
+  {0x00, 0x00, 0x89, "Cayman Systems"},
+  {0x00, 0x00, 0x93, "Proteon"},
+  {0x00, 0x00, 0x9F, "Ameristar Technology"},
+  {0x00, 0x00, 0xA2, "Wellfleet"},
+  {0x00, 0x00, 0xA3, "Network Application Technology"},
+  {0x00, 0x00, 0xA6, "Network General"},
+  {0x00, 0x00, 0xA7, "NCD"},
+  {0x00, 0x00, 0xA9, "Network Systems"},
+  {0x00, 0x00, 0xAA, "Xerox"},
+  {0x00, 0x00, 0xB3, "CIMLinc"},
+  {0x00, 0x00, 0xB7, "Dove Fastnet"},
+  {0x00, 0x00, 0xBC, "Allen-Bradley"},
+  {0x00, 0x00, 0xC0, "Western Digital"},
+  {0x00, 0x00, 0xC5, "Farallon"},
+  {0x00, 0x00, 0xC6, "Hewlett-Packard"},
+  {0x00, 0x00, 0xC8, "Altos"},
+  {0x00, 0x00, 0xC9, "Emulex"},
+  {0x00, 0x00, 0xD7, "Dartmouth College"},
+  {0x00, 0x00, 0xD8, "3Com (?)"},
+  {0x00, 0x00, 0xDD, "Gould"},
+  {0x00, 0x00, 0xDE, "Unigraph"},
+  {0x00, 0x00, 0xE2, "Acer Counterpoint"},
+  {0x00, 0x00, 0xEF, "Alantec"},
+  {0x00, 0x00, 0xFD, "High Level Hardware"},
+  {0x00, 0x01, 0x02, "BBN internal usage"},
+  {0x00, 0x20, 0xAF, "3Com"},
+  {0x00, 0x17, 0x00, "Kabel"},
+  {0x00, 0x80, 0x64, "Wyse Technology"},
+  {0x00, 0x80, 0x2B, "IMAC (?)"},
+  {0x00, 0x80, 0x2D, "Xylogics, Inc."},
+  {0x00, 0x80, 0x8C, "Frontier Software Development"},
+  {0x00, 0x80, 0xC2, "IEEE 802.1 Committee"},
+  {0x00, 0x80, 0xD3, "Shiva"},
+  {0x00, 0xAA, 0x00, "Intel"},
+  {0x00, 0xDD, 0x00, "Ungermann-Bass"},
+  {0x00, 0xDD, 0x01, "Ungermann-Bass"},
+  {0x02, 0x07, 0x01, "Racal InterLan"},
+  {0x02, 0x04, 0x06, "BBN internal usage"},
+  {0x02, 0x60, 0x86, "Satelcom MegaPac"},
+  {0x02, 0x60, 0x8C, "3Com"},
+  {0x02, 0xCF, 0x1F, "CMC"},
+  {0x08, 0x00, 0x02, "3Com"},
+  {0x08, 0x00, 0x03, "ACC"},
+  {0x08, 0x00, 0x05, "Symbolics"},
+  {0x08, 0x00, 0x08, "BBN"},
+  {0x08, 0x00, 0x09, "Hewlett-Packard"},
+  {0x08, 0x00, 0x0A, "Nestar Systems"},
+  {0x08, 0x00, 0x0B, "Unisys"},
+  {0x08, 0x00, 0x11, "Tektronix"},
+  {0x08, 0x00, 0x14, "Excelan"},
+  {0x08, 0x00, 0x17, "NSC"},
+  {0x08, 0x00, 0x1A, "Data General"},
+  {0x08, 0x00, 0x1B, "Data General"},
+  {0x08, 0x00, 0x1E, "Apollo"},
+  {0x08, 0x00, 0x20, "Sun"},
+  {0x08, 0x00, 0x22, "NBI"},
+  {0x08, 0x00, 0x25, "CDC"},
+  {0x08, 0x00, 0x26, "Norsk Data"},
+  {0x08, 0x00, 0x27, "PCS Computer Systems GmbH"},
+  {0x08, 0x00, 0x28, "Texas Instruments"},
+  {0x08, 0x00, 0x2B, "DEC"},
+  {0x08, 0x00, 0x2E, "Metaphor"},
+  {0x08, 0x00, 0x2F, "Prime Computer"},
+  {0x08, 0x00, 0x36, "Intergraph"},
+  {0x08, 0x00, 0x37, "Fujitsu-Xerox"},
+  {0x08, 0x00, 0x38, "Bull"},
+  {0x08, 0x00, 0x39, "Spider Systems"},
+  {0x08, 0x00, 0x41, "DCA Digital Comm. Assoc."},
+  {0x08, 0x00, 0x45, "Xylogics (?)"},
+  {0x08, 0x00, 0x46, "Sony"},
+  {0x08, 0x00, 0x47, "Sequent"},
+  {0x08, 0x00, 0x49, "Univation"},
+  {0x08, 0x00, 0x4C, "Encore"},
+  {0x08, 0x00, 0x4E, "BICC"},
+  {0x08, 0x00, 0x56, "Stanford University"},
+  {0x08, 0x00, 0x58, "DECsystem 20 (?)"},
+  {0x08, 0x00, 0x5A, "IBM"},
+  {0x08, 0x00, 0x67, "Comdesign"},
+  {0x08, 0x00, 0x68, "Ridge"},
+  {0x08, 0x00, 0x69, "Silicon Graphics"},
+  {0x08, 0x00, 0x6E, "Concurrent"},
+  {0x08, 0x00, 0x75, "DDE"},
+  {0x08, 0x00, 0x7C, "Vitalink"},
+  {0x08, 0x00, 0x80, "XIOS"},
+  {0x08, 0x00, 0x86, "Imagen/QMS"},
+  {0x08, 0x00, 0x87, "Xyplex"},
+  {0x08, 0x00, 0x89, "Kinetics"},
+  {0x08, 0x00, 0x8B, "Pyramid"},
+  {0x08, 0x00, 0x8D, "XyVision"},
+  {0x08, 0x00, 0x90, "Retix Inc"},
+  {0x48, 0x44, 0x53, "HDS (?)"},
+  {0x80, 0x00, 0x10, "AT&T"},
+  {0xAA, 0x00, 0x00, "DEC"},
+  {0xAA, 0x00, 0x01, "DEC"},
+  {0xAA, 0x00, 0x02, "DEC"},
+  {0xAA, 0x00, 0x03, "DEC"},
+  {0xAA, 0x00, 0x04, "DEC"},
+  {0x00, 0x00, 0x00, NULL}
+};
+
+/*
+ *     Utility macros used for sorting and comparing:
+ */
+
+#define hibits(addr) \
+  ((unsigned long)((addr->a<<16)|(addr->b<<8)|(addr->c)))
+
+#define lobits(addr) \
+  ((unsigned long)((addr->c<<16)|(addr->e<<8)|(addr->f)))
+
+/*
+ *     MAC address reader.  Accepts several common notations.
+ */
+
+macaddr    *
+macaddr_in(char *str)
+{
+       int                     a,
+                               b,
+                               c,
+                               d,
+                               e,
+                               f;
+       macaddr    *result;
+       int                     count;
+
+       if (strlen(str) > 0)
+       {
+
+               count = sscanf(str, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f);
+               if (count != 6)
+                       count = sscanf(str, "%x-%x-%x-%x-%x-%x", &a, &b, &c, &d, &e, &f);
+               if (count != 6)
+                       count = sscanf(str, "%2x%2x%2x:%2x%2x%2x", &a, &b, &c, &d, &e, &f);
+               if (count != 6)
+                       count = sscanf(str, "%2x%2x%2x-%2x%2x%2x", &a, &b, &c, &d, &e, &f);
+               if (count != 6)
+                       count = sscanf(str, "%2x%2x.%2x%2x.%2x%2x", &a, &b, &c, &d, &e, &f);
+
+               if (count != 6)
+               {
+                       elog(ERROR, "macaddr_in: error in parsing \"%s\"", str);
+                       return (NULL);
+               }
+
+               if ((a < 0) || (a > 255) || (b < 0) || (b > 255) ||
+                       (c < 0) || (c > 255) || (d < 0) || (d > 255) ||
+                       (e < 0) || (e > 255) || (f < 0) || (f > 255))
+               {
+                       elog(ERROR, "macaddr_in: illegal address \"%s\"", str);
+                       return (NULL);
+               }
+       }
+       else
+       {
+               a = b = c = d = e = f = 0;              /* special case for missing
+                                                                                * address */
+       }
+
+       result = (macaddr *) palloc(sizeof(macaddr));
+
+       result->a = a;
+       result->b = b;
+       result->c = c;
+       result->d = d;
+       result->e = e;
+       result->f = f;
+
+       return (result);
+}
+
+/*
+ *     MAC address output function.  Fixed format.
+ */
+
+char *
+macaddr_out(macaddr *addr)
+{
+       char       *result;
+
+       if (addr == NULL)
+               return (NULL);
+
+       result = (char *) palloc(32);
+
+       if ((hibits(addr) > 0) || (lobits(addr) > 0))
+       {
+               sprintf(result, "%02x:%02x:%02x:%02x:%02x:%02x",
+                               addr->a, addr->b, addr->c, addr->d, addr->e, addr->f);
+       }
+       else
+       {
+               result[0] = 0;                  /* special case for missing address */
+       }
+       return (result);
+}
+
+/*
+ *     Boolean tests.
+ */
+
+bool
+macaddr_lt(macaddr *a1, macaddr *a2)
+{
+       return ((hibits(a1) < hibits(a2)) ||
+                       ((hibits(a1) == hibits(a2)) && lobits(a1) < lobits(a2)));
+};
+
+bool
+macaddr_le(macaddr *a1, macaddr *a2)
+{
+       return ((hibits(a1) < hibits(a2)) ||
+                       ((hibits(a1) == hibits(a2)) && lobits(a1) <= lobits(a2)));
+};
+
+bool
+macaddr_eq(macaddr *a1, macaddr *a2)
+{
+       return ((hibits(a1) == hibits(a2)) && (lobits(a1) == lobits(a2)));
+};
+
+bool
+macaddr_ge(macaddr *a1, macaddr *a2)
+{
+       return ((hibits(a1) > hibits(a2)) ||
+                       ((hibits(a1) == hibits(a2)) && lobits(a1) >= lobits(a2)));
+};
+
+bool
+macaddr_gt(macaddr *a1, macaddr *a2)
+{
+       return ((hibits(a1) > hibits(a2)) ||
+                       ((hibits(a1) == hibits(a2)) && lobits(a1) > lobits(a2)));
+};
+
+bool
+macaddr_ne(macaddr *a1, macaddr *a2)
+{
+       return ((hibits(a1) != hibits(a2)) || (lobits(a1) != lobits(a2)));
+};
+
+/*
+ *     Comparison function for sorting:
+ */
+
+int4
+macaddr_cmp(macaddr *a1, macaddr *a2)
+{
+       if (hibits(a1) < hibits(a2))
+               return -1;
+       else if (hibits(a1) > hibits(a2))
+               return 1;
+       else if (lobits(a1) < lobits(a2))
+               return -1;
+       else if (lobits(a1) > lobits(a2))
+               return 1;
+       else
+               return 0;
+}
+
+/*
+ *     The special manufacturer fetching function.  See "mac.h".
+ */
+
+text *
+macaddr_manuf(macaddr *addr)
+{
+       manufacturer *manuf;
+       int                     length;
+       text       *result;
+
+       for (manuf = manufacturers; manuf->name != NULL; manuf++)
+       {
+               if ((manuf->a == addr->a) &&
+                       (manuf->b == addr->b) &&
+                       (manuf->c == addr->c))
+                       break;
+       }
+       if (manuf->name == NULL)
+       {
+               result = palloc(VARHDRSZ + 1);
+               memset(result, 0, VARHDRSZ + 1);
+               VARSIZE(result) = VARHDRSZ + 1;
+       }
+       else
+       {
+               length = strlen(manuf->name) + 1;
+               result = palloc(length + VARHDRSZ);
+               memset(result, 0, length + VARHDRSZ);
+               VARSIZE(result) = length + VARHDRSZ;
+               memcpy(VARDATA(result), manuf->name, length);
+       }
+       return result;
+}
index 40a112e642b046b3dd65e2b466535d5636fefd4e..140eaa3b39e9a77e801ae0a074b5025434288bb6 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_amop.h,v 1.15 1998/09/01 04:34:48 momjian Exp $
+ * $Id: pg_amop.h,v 1.16 1998/10/03 05:40:51 momjian Exp $
  *
  * NOTES
  *      the genbki.sh script reads this file and generates .bki
@@ -298,6 +298,26 @@ DATA(insert OID = 0 (  403 1313 1330 3 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 1313 1335 4 btreesel btreenpage ));
 DATA(insert OID = 0 (  403 1313 1334 5 btreesel btreenpage ));
 
+/*
+ *     nbtree macaddr
+ */
+
+DATA(insert OID = 0 (  403 810 1222 1 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 810 1223 2 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 810 1220 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 810 1225 4 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 810 1224 5 btreesel btreenpage ));
+
+/*
+ *     nbtree ip
+ */
+
+DATA(insert OID = 0 (  403 935 1203 1 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 935 1204 2 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 935 1201 3 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 935 1206 4 btreesel btreenpage ));
+DATA(insert OID = 0 (  403 935 1205 5 btreesel btreenpage ));
+
 /*
  *     hash table _ops
  */
index 4c12668d662e545332c423adb81ea7326151e148..fc9c526379a3f30b64b642a097556be22221afa6 100644 (file)
@@ -9,7 +9,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_amproc.h,v 1.10 1998/09/01 04:34:49 momjian Exp $
+ * $Id: pg_amproc.h,v 1.11 1998/10/03 05:40:52 momjian Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -99,6 +99,8 @@ DATA(insert OID = 0 (403 1115 1107 1));
 DATA(insert OID = 0 (403 1181  359 1));
 DATA(insert OID = 0 (403 1312 1314 1));
 DATA(insert OID = 0 (403 1313 1315 1));
+DATA(insert OID = 0 (403 810 836 1));
+DATA(insert OID = 0 (403 935 926 1));
 
 
 /* hash */
index 3f7814a11f71b5fc76e5c1f56bc0b964a1ef9b64..388f5986303167dfb954918505961211b9d815d4 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_opclass.h,v 1.11 1998/09/01 04:35:06 momjian Exp $
+ * $Id: pg_opclass.h,v 1.12 1998/10/03 05:40:54 momjian Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -107,5 +107,9 @@ DATA(insert OID = 1312 (    datetime_ops   1184   ));
 DESCR("");
 DATA(insert OID = 1313 (       timespan_ops   1186   ));
 DESCR("");
+DATA(insert OID = 810  (       macaddr_ops   829   ));
+DESCR("");
+DATA(insert OID = 935  (       ipaddr_ops   869   ));
+DESCR("");
 
 #endif  /* PG_OPCLASS_H */
index 4b223624181182a4674a25895241eb99eb8c64eb..4604ccd7a94596979b6090676ebca04cf3bf200e 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_operator.h,v 1.38 1998/09/14 01:14:48 momjian Exp $
+ * $Id: pg_operator.h,v 1.39 1998/10/03 05:40:55 momjian Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -466,7 +466,7 @@ DATA(insert OID = 1094 ( "<>"          PGUID 0 b t f  1082  1082   16 1094 1093  0 0 da
 DATA(insert OID = 1095 ( "<"      PGUID 0 b t f  1082  1082   16 1097 1098  0 0 date_lt intltsel intltjoinsel ));
 DATA(insert OID = 1096 ( "<="     PGUID 0 b t f  1082  1082   16 1098 1097  0 0 date_le intltsel intltjoinsel ));
 DATA(insert OID = 1097 ( ">"      PGUID 0 b t f  1082  1082   16 1095 1096  0 0 date_gt intltsel intltjoinsel ));
-DATA(insert OID = 1098 ( ">="     PGUID 0 b t f  1082  1082   16 1096 1065  0 0 date_ge intltsel intltjoinsel ));
+DATA(insert OID = 1098 ( ">="     PGUID 0 b t f  1082  1082   16 1096 1095  0 0 date_ge intltsel intltjoinsel ));
 DATA(insert OID = 1099 ( "-"      PGUID 0 b t f  1082  1082   23 0 0 0 0 date_mi - - ));
 DATA(insert OID = 1100 ( "+"      PGUID 0 b t f  1082    23 1082 0 0 0 0 date_pli - - ));
 DATA(insert OID = 1101 ( "-"      PGUID 0 b t f  1082    23 1082 0 0 0 0 date_mii - - ));
@@ -477,7 +477,7 @@ DATA(insert OID = 1109 ( "<>"          PGUID 0 b t f  1083  1083  16 1109 1108      0 0 time
 DATA(insert OID = 1110 ( "<"      PGUID 0 b t f  1083  1083  16 1112 1113      0 0 time_lt intltsel intltjoinsel ));
 DATA(insert OID = 1111 ( "<="     PGUID 0 b t f  1083  1083  16 1113 1112      0 0 time_le intltsel intltjoinsel ));
 DATA(insert OID = 1112 ( ">"      PGUID 0 b t f  1083  1083  16 1110 1111      0 0 time_gt intltsel intltjoinsel ));
-DATA(insert OID = 1113 ( ">="     PGUID 0 b t f  1083  1083  16 1111 1065      0 0 time_ge intltsel intltjoinsel ));
+DATA(insert OID = 1113 ( ">="     PGUID 0 b t f  1083  1083  16 1111 1110      0 0 time_ge intltsel intltjoinsel ));
 
 /* float48 operators */
 DATA(insert OID = 1116 (  "+"          PGUID 0 b t f 700 701 701 1116   0       0       0 float48pl - - ));
@@ -538,10 +538,10 @@ DATA(insert OID = 1305 (  ">="            PGUID 0 b t f  1296 1296 16 1304 1302 0 0 timest
 /* name, owner, prec, kind, isleft, canhash, left, right, result, com, negate, lsortop, rsortop, oprcode, operrest, oprjoin */
 DATA(insert OID = 1320 (  "="     PGUID 0 b t t 1184 1184       16 1320 1321 1322 1322 datetime_eq eqsel eqjoinsel ));
 DATA(insert OID = 1321 (  "<>"    PGUID 0 b t f 1184 1184       16 1321 1320 0 0 datetime_ne neqsel neqjoinsel ));
-DATA(insert OID = 1322 (  "<"     PGUID 0 b t f 1184 1184       16 1325 1325 0 0 datetime_lt intltsel intltjoinsel ));
-DATA(insert OID = 1323 (  "<="    PGUID 0 b t f 1184 1184       16 1324 1324 0 0 datetime_le intltsel intltjoinsel ));
-DATA(insert OID = 1324 (  ">"     PGUID 0 b t f 1184 1184       16 1323 1323 0 0 datetime_gt intltsel intltjoinsel ));
-DATA(insert OID = 1325 (  ">="    PGUID 0 b t f 1184 1184       16 1322 1322 0 0 datetime_ge intltsel intltjoinsel ));
+DATA(insert OID = 1322 (  "<"     PGUID 0 b t f 1184 1184       16 1324 1325 0 0 datetime_lt intltsel intltjoinsel ));
+DATA(insert OID = 1323 (  "<="    PGUID 0 b t f 1184 1184       16 1325 1324 0 0 datetime_le intltsel intltjoinsel ));
+DATA(insert OID = 1324 (  ">"     PGUID 0 b t f 1184 1184       16 1322 1323 0 0 datetime_gt intltsel intltjoinsel ));
+DATA(insert OID = 1325 (  ">="    PGUID 0 b t f 1184 1184       16 1323 1322 0 0 datetime_ge intltsel intltjoinsel ));
 
 DATA(insert OID = 1327 (  "+"     PGUID 0 b t f 1184 1186 1184 1327    0 0 0 datetime_pl_span - - ));
 DATA(insert OID = 1328 (  "-"     PGUID 0 b t f 1184 1184 1186    0    0 0 0 datetime_mi - - ));
@@ -550,10 +550,10 @@ DATA(insert OID = 1329 (  "-"        PGUID 0 b t f 1184 1186 1184    0    0 0 0 datetim
 /* timespan operators */
 DATA(insert OID = 1330 (  "="     PGUID 0 b t t 1186 1186       16 1330 1331 1332 1332 timespan_eq eqsel eqjoinsel ));
 DATA(insert OID = 1331 (  "<>"    PGUID 0 b t f 1186 1186       16 1331 1330 0 0 timespan_ne neqsel neqjoinsel ));
-DATA(insert OID = 1332 (  "<"     PGUID 0 b t f 1186 1186       16 1335 1335 0 0 timespan_lt intltsel intltjoinsel ));
-DATA(insert OID = 1333 (  "<="    PGUID 0 b t f 1186 1186       16 1334 1334 0 0 timespan_le intltsel intltjoinsel ));
-DATA(insert OID = 1334 (  ">"     PGUID 0 b t f 1186 1186       16 1333 1333 0 0 timespan_gt intltsel intltjoinsel ));
-DATA(insert OID = 1335 (  ">="    PGUID 0 b t f 1186 1186       16 1332 1332 0 0 timespan_ge intltsel intltjoinsel ));
+DATA(insert OID = 1332 (  "<"     PGUID 0 b t f 1186 1186       16 1334 1335 0 0 timespan_lt intltsel intltjoinsel ));
+DATA(insert OID = 1333 (  "<="    PGUID 0 b t f 1186 1186       16 1335 1334 0 0 timespan_le intltsel intltjoinsel ));
+DATA(insert OID = 1334 (  ">"     PGUID 0 b t f 1186 1186       16 1332 1333 0 0 timespan_gt intltsel intltjoinsel ));
+DATA(insert OID = 1335 (  ">="    PGUID 0 b t f 1186 1186       16 1333 1332 0 0 timespan_ge intltsel intltjoinsel ));
 
 DATA(insert OID = 1336 (  "-"     PGUID 0 l t f        0 1186 1186    0        0 0 0 timespan_um 0 0 ));
 DATA(insert OID = 1337 (  "+"     PGUID 0 b t f 1186 1186 1186 1337    0 0 0 timespan_pl - - ));
@@ -563,10 +563,10 @@ DATA(insert OID = 1338 (  "-"        PGUID 0 b t f 1186 1186 1186    0    0 0 0 timespa
 DATA(insert OID = 1420 (  "@@"   PGUID 0 l t f    0  718  600    0    0        0        0 circle_center - - ));
 DATA(insert OID = 1500 (  "="    PGUID 0 b t t  718  718       16 1500 1501 1502 1502 circle_eq eqsel eqjoinsel ));
 DATA(insert OID = 1501 (  "<>"   PGUID 0 b t f  718  718       16 1501 1500    0        0 circle_ne neqsel neqjoinsel ));
-DATA(insert OID = 1502 (  "<"    PGUID 0 b t f  718  718       16        0    0        0        0 circle_lt areasel areajoinsel ));
-DATA(insert OID = 1503 (  ">"    PGUID 0 b t f  718  718       16        0    0        0        0 circle_gt areasel areajoinsel ));
-DATA(insert OID = 1504 (  "<="   PGUID 0 b t f  718  718       16        0    0        0        0 circle_le areasel areajoinsel ));
-DATA(insert OID = 1505 (  ">="   PGUID 0 b t f  718  718       16        0    0        0        0 circle_ge areasel areajoinsel ));
+DATA(insert OID = 1502 (  "<"    PGUID 0 b t f  718  718       16 1503 1505    0        0 circle_lt areasel areajoinsel ));
+DATA(insert OID = 1503 (  ">"    PGUID 0 b t f  718  718       16 1502 1504    0        0 circle_gt areasel areajoinsel ));
+DATA(insert OID = 1504 (  "<="   PGUID 0 b t f  718  718       16 1505 1503    0        0 circle_le areasel areajoinsel ));
+DATA(insert OID = 1505 (  ">="   PGUID 0 b t f  718  718       16 1504 1502    0        0 circle_ge areasel areajoinsel ));
 
 DATA(insert OID = 1506 (  "<<"   PGUID 0 b t f  718  718       16        0    0        0        0 circle_left intltsel intltjoinsel ));
 DATA(insert OID = 1507 (  "&<"   PGUID 0 b t f  718  718       16        0    0        0        0 circle_overleft intltsel intltjoinsel ));
@@ -635,6 +635,27 @@ DATA(insert OID = 1615 (  "?|"       PGUID 0 l t f    0  628       16 1615  0 0 0 line_ver
 DATA(insert OID = 1616 (  "="    PGUID 0 b t f  628  628       16 1616  0 0 0 line_eq intltsel - ));
 DATA(insert OID = 1617 (  "#"    PGUID 0 b t f  628  628  600 1617  0 0 0 line_interpt - - ));
 
+/* MAC type */
+DATA(insert OID = 1220 (  "="     PGUID 0 b t t 829 829         16 1220 1221 0 0 macaddr_eq eqsel eqjoinsel ));
+DATA(insert OID = 1221 (  "<>"    PGUID 0 b t f 829 829         16 1221 1220 0 0 macaddr_ne neqsel neqjoinsel ));
+DATA(insert OID = 1222 (  "<"     PGUID 0 b t f 829 829         16 1224 1225 0 0 macaddr_lt intltsel intltjoinsel ));
+DATA(insert OID = 1223 (  "<="    PGUID 0 b t f 829 829         16 1225 1224 0 0 macaddr_le intltsel intltjoinsel ));
+DATA(insert OID = 1224 (  ">"     PGUID 0 b t f 829 829         16 1222 1223 0 0 macaddr_gt intltsel intltjoinsel ));
+DATA(insert OID = 1225 (  ">="    PGUID 0 b t f 829 829         16 1223 1222 0 0 macaddr_ge intltsel intltjoinsel ));
+
+/* IP type */
+DATA(insert OID = 1201 (  "="     PGUID 0 b t t 869 869         16 1201 1202 0 0 ipaddr_eq eqsel eqjoinsel ));
+DATA(insert OID = 1202 (  "<>"    PGUID 0 b t f 869 869         16 1202 1201 0 0 ipaddr_ne neqsel neqjoinsel ));
+DATA(insert OID = 1203 (  "<"     PGUID 0 b t f 869 869         16 1205 1206 0 0 ipaddr_lt intltsel intltjoinsel ));
+DATA(insert OID = 1204 (  "<="    PGUID 0 b t f 869 869         16 1206 1205 0 0 ipaddr_le intltsel intltjoinsel ));
+DATA(insert OID = 1205 (  ">"     PGUID 0 b t f 869 869         16 1203 1204 0 0 ipaddr_gt intltsel intltjoinsel ));
+DATA(insert OID = 1206 (  ">="    PGUID 0 b t f 869 869         16 1204 1203 0 0 ipaddr_ge intltsel intltjoinsel ));
+DATA(insert OID = 931  (  "<<"    PGUID 0 b t f 869 869     16 933  934  0 0 ipaddr_sub intltsel intltjoinsel ));
+DATA(insert OID = 932  (  "<<="           PGUID 0 b t f 869 869     16 934  933  0 0 ipaddr_subeq intltsel intltjoinsel ));
+DATA(insert OID = 933  (  ">>"    PGUID 0 b t f 869 869     16 931  932  0 0 ipaddr_sup intltsel intltjoinsel ));
+DATA(insert OID = 934  (  ">>="           PGUID 0 b t f 869 869     16 932  931  0 0 ipaddr_supeq intltsel intltjoinsel ));
+
+
 /*
  * function prototypes
  */
index 1f8ca515837227b5444a887f7f165ec2bba085f1..76f92f0e61282f01711e492cd1a8751b13f0fbbc 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.70 1998/10/02 16:27:55 momjian Exp $
+ * $Id: pg_proc.h,v 1.71 1998/10/03 05:40:56 momjian Exp $
  *
  * NOTES
  *       The script catalog/genbki.sh reads this file and generates .bki
@@ -2045,6 +2045,59 @@ DESCR("user name by UID (with fallback)");
 DATA(insert OID = 1643 (  pg_get_indexdef         PGUID 11 f t f 1 f 25 "26" 100 0 0 100  foo bar ));
 DESCR("index description");
 
+/* for mac type support */
+DATA(insert OID = 436 (  macaddr_in                    PGUID 11 f t f 1 f 829 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
+DATA(insert OID = 437 (  macaddr_out           PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
+
+DATA(insert OID = 830 (  macaddr_eq               PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
+DESCR("equal");
+DATA(insert OID = 831 (  macaddr_lt               PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
+DESCR("less-than");
+DATA(insert OID = 832 (  macaddr_le               PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
+DESCR("less-than-or-equal");
+DATA(insert OID = 833 (  macaddr_gt               PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
+DESCR("greater-than");
+DATA(insert OID = 834 (  macaddr_ge               PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
+DESCR("greater-than-or-equal");
+DATA(insert OID = 835 (  macaddr_ne               PGUID 11 f t f 2 f 16 "829 829" 100 0 0 100  foo bar ));
+DESCR("not equal");
+DATA(insert OID = 836 (  macaddr_cmp      PGUID 11 f t f 2 f 23 "829 829" 100 0 0 100  foo bar ));
+DESCR("less-equal-greater");
+DATA(insert OID = 837 (  macaddr_manuf    PGUID 11 f t f 1 f 25 "829" 100 0 0 100  foo bar ));
+DESCR("MAC manufacturer");
+
+/* for ip type support */
+DATA(insert OID = 910 (  ipaddr_in                     PGUID 11 f t f 1 f 869 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
+DATA(insert OID = 911 (  ipaddr_out                    PGUID 11 f t f 1 f 23 "0" 100 0 0 100  foo bar ));
+DESCR("(internal)");
+
+DATA(insert OID = 920 (  ipaddr_eq                PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
+DESCR("equal");
+DATA(insert OID = 921 (  ipaddr_lt                PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
+DESCR("less-than");
+DATA(insert OID = 922 (  ipaddr_le                PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
+DESCR("less-than-or-equal");
+DATA(insert OID = 923 (  ipaddr_gt                PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
+DESCR("greater-than");
+DATA(insert OID = 924 (  ipaddr_ge                PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
+DESCR("greater-than-or-equal");
+DATA(insert OID = 925 (  ipaddr_ne                PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
+DESCR("not equal");
+DATA(insert OID = 926 (  ipaddr_cmp               PGUID 11 f t f 2 f 23 "869 869" 100 0 0 100  foo bar ));
+DESCR("less-equal-greater");
+DATA(insert OID = 927 (  ipaddr_sub               PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
+DESCR("is-subnet");
+DATA(insert OID = 928 (  ipaddr_subeq             PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
+DESCR("is-subnet-or-equal");
+DATA(insert OID = 929 (  ipaddr_sup               PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
+DESCR("is-supernet");
+DATA(insert OID = 930 (  ipaddr_supeq             PGUID 11 f t f 2 f 16 "869 869" 100 0 0 100  foo bar ));
+DESCR("is-supernet-or-equal");
+
+
 /*
  * prototypes for functions pg_proc.c
  */
index 99d0de22dce1748dffed759f5438d2f0a68dc54c..3a675c1c337daceecd92cf736cb3a36bd26b6f89 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_type.h,v 1.47 1998/09/01 04:35:18 momjian Exp $
+ * $Id: pg_type.h,v 1.48 1998/10/03 05:40:58 momjian Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -298,6 +298,10 @@ DESCR("money '$d,ddd.cc'");
 DATA(insert OID = 791 (  _money    PGUID  -1 -1 f b t \054 0  790 array_in array_out array_in array_out i _null_ ));
 
 /* OIDS 800 - 899 */
+DATA(insert OID = 829 ( macaddr           PGUID  6 -1 f b t \054 0     0 macaddr_in macaddr_out macaddr_in macaddr_out i _null_ ));
+DESCR("MAC address");
+DATA(insert OID = 869 ( ipaddr    PGUID  -1 -1 f b t \054 0 0 ipaddr_in ipaddr_out ipaddr_in ipaddr_out i _null_ ));
+DESCR("IP address");
 
 /* OIDS 900 - 999 */
 
@@ -333,8 +337,9 @@ DATA(insert OID = 1027 (  _polygon   PGUID -1  -1 f b t \054 0 604 array_in array
 /* Note: the size of an aclitem needs to match sizeof(AclItem) in acl.h */
 DATA(insert OID = 1033 (  aclitem       PGUID 8   -1 f b t \054 0 0 aclitemin aclitemout aclitemin aclitemout i _null_ ));
 DESCR("access control list");
-DATA(insert OID = 1034 (  _aclitem      PGUID -1  -1 f b t \054 0 1033 array_in array_out array_in array_out i _null_ ));
-
+DATA(insert OID = 1034 (  _aclitem      PGUID -1 -1 f b t \054 0 1033 array_in array_out array_in array_out i _null_ ));
+DATA(insert OID = 1040 (  _macaddr   PGUID -1 -1 f b t \054 0  829 array_in array_out array_in array_out i _null_ ));
+DATA(insert OID = 1041 (  _ipaddr    PGUID -1 -1 f b t \054 0  869 array_in array_out array_in array_out i _null_ ));
 DATA(insert OID = 1042 ( bpchar                 PGUID -1  -1 f b t \054 0      18 bpcharin bpcharout bpcharin bpcharout i _null_ ));
 DESCR("blank-padded characters, length specifed when created");
 #define BPCHAROID              1042
index f0cfd5b988f058153b9f7abdf17474531901dfdb..fd6f50e944459e7fa312e987cc68628e27780aee 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: builtins.h,v 1.55 1998/09/22 20:28:13 momjian Exp $
+ * $Id: builtins.h,v 1.56 1998/10/03 05:40:59 momjian Exp $
  *
  * NOTES
  *       This should normally only be included by fmgr.h.
@@ -28,6 +28,7 @@
 #include <utils/nabstime.h>
 #include <utils/int8.h>
 #include <utils/cash.h>
+#include <utils/mac.h>
 #include <utils/rel.h>
 
 /*
@@ -511,4 +512,40 @@ extern text *translate(text *string, char from, char to);
 
 /* acl.c */
 
+/* inet_net_ntop.c */
+char *inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size);
+
+/* inet_net_pton.c */
+int inet_net_pton(int af, const char *src, void *dst, size_t size);
+
+/* ip.c */
+ipaddr    *ipaddr_in(char *str);
+char      *ipaddr_out(ipaddr * addr);
+bool           ipaddr_lt(ipaddr * a1, ipaddr * a2);
+bool           ipaddr_le(ipaddr * a1, ipaddr * a2);
+bool           ipaddr_eq(ipaddr * a1, ipaddr * a2);
+bool           ipaddr_ge(ipaddr * a1, ipaddr * a2);
+bool           ipaddr_gt(ipaddr * a1, ipaddr * a2);
+bool           ipaddr_ne(ipaddr * a1, ipaddr * a2);
+bool           ipaddr_sub(ipaddr * a1, ipaddr * a2);
+bool           ipaddr_subeq(ipaddr * a1, ipaddr * a2);
+bool           ipaddr_sup(ipaddr * a1, ipaddr * a2);
+bool           ipaddr_supeq(ipaddr * a1, ipaddr * a2);
+int4           ipaddr_cmp(ipaddr * a1, ipaddr * a2);
+int                    v4bitncmp(u_int32_t a1, u_int32_t a2, int bits);
+
+
+/* mac.c */
+macaddr    *macaddr_in(char *str);
+char      *macaddr_out(macaddr * addr);
+bool           macaddr_lt(macaddr * a1, macaddr * a2);
+bool           macaddr_le(macaddr * a1, macaddr * a2);
+bool           macaddr_eq(macaddr * a1, macaddr * a2);
+bool           macaddr_ge(macaddr * a1, macaddr * a2);
+bool           macaddr_gt(macaddr * a1, macaddr * a2);
+bool           macaddr_ne(macaddr * a1, macaddr * a2);
+int4           macaddr_cmp(macaddr * a1, macaddr * a2);
+text      *macaddr_manuf(macaddr * addr);
+
+
 #endif  /* BUILTINS_H */
diff --git a/src/include/utils/mac.h b/src/include/utils/mac.h
new file mode 100644 (file)
index 0000000..3ecb61c
--- /dev/null
@@ -0,0 +1,58 @@
+/*-------------------------------------------------------------------------
+ *
+ * builtins.h--
+ *       Declarations for operations on built-in types.
+ *
+ *
+ * Copyright (c) 1994, Regents of the University of California
+ *
+ * $Id: mac.h,v 1.1 1998/10/03 05:41:01 momjian Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef MAC_H
+#define MAC_H
+
+/*
+ *     This is the internal storage format for IP addresses:
+ */
+
+typedef struct
+{
+       unsigned char family;
+       unsigned char bits;
+       union
+       {
+               u_int32_t       ipv4_addr;      /* network byte order */
+               /* add IPV6 address type here */
+       }                       addr;
+}                      ipaddr_struct;
+
+typedef struct varlena ipaddr;
+
+/*
+ *     This is the internal storage format for MAC addresses:
+ */
+typedef struct macaddr
+{
+       unsigned char a;
+       unsigned char b;
+       unsigned char c;
+       unsigned char d;
+       unsigned char e;
+       unsigned char f;
+}                      macaddr;
+
+
+typedef struct manufacturer
+{
+       unsigned char a;
+       unsigned char b;
+       unsigned char c;
+       char       *name;
+} manufacturer;
+
+extern manufacturer manufacturers[];
+
+#endif  /* MAC_H */
+
index 40a9122a7657c1243c3f27f016951979fdb6f60a..5873ae27021a9256981526795d5d0dc8a36252a2 100755 (executable)
@@ -786,6 +786,8 @@ do
 -Tword8 \
 -Tyy_size_t \
 -Tyy_state_type \
+-Tipaddr \
+-Tmacaddr \
 /tmp/$$a >/tmp/$$ 2>&1
        if [ "$?" -ne 0 -o -s /tmp/$$ ]
        then    echo "$FILE"