[jasmin-sable] 01/01: Imported Upstream version 2.5.0

Emmanuel Bourg ebourg-guest at moszumanska.debian.org
Tue Feb 10 23:34:51 UTC 2015


This is an automated email from the git hooks/post-receive script.

ebourg-guest pushed a commit to annotated tag upstream/2.5.0
in repository jasmin-sable.

commit 6ae9e4e8a01ea39517aac7fce26b5b46d2963b3f
Author: Chris Lamb <lamby at debian.org>
Date:   Wed Jun 13 16:32:54 2012 +0100

    Imported Upstream version 2.5.0
---
 .classpath                                       |  13 +
 .project                                         |  17 +
 README                                           |   6 +-
 ant.settings                                     |   2 +-
 build.xml                                        |  16 +-
 changes                                          |   3 +
 examples/HelloWeb.j                              |   2 +-
 lib/jas/src/jas/ArrayElemValPair.java            |   4 +-
 lib/jas/src/jas/BootstrapMethodsAttribute.java   |  76 ++
 lib/jas/src/jas/ClassEnv.java                    |  38 +-
 lib/jas/src/jas/Insn.java                        |   3 +
 lib/jas/src/jas/InsnOperand.java                 |  20 +-
 lib/jas/src/jas/InvokeDynamicCP.java             |  50 ++
 lib/jas/src/jas/InvokedynamicInsn.java           |  19 +
 lib/jas/src/jas/MethodHandleCP.java              |  48 ++
 lib/jas/src/jas/Pair.java                        |  24 +
 lib/jas/src/jas/RuntimeConstants.java            |   8 +-
 lib/{jasminsrc-2.4.0.jar => jasminsrc-2.5.0.jar} | Bin 152579 -> 157736 bytes
 src/jasmin/ClassFile.java                        |  74 +-
 src/jasmin/InsnInfo.java                         |   1 +
 src/jasmin/Scanner.java                          |   5 +-
 src/jasmin/parser.cup                            |   5 +
 src/jasmin/parser.java                           | 976 ++++++++++++-----------
 src/jasmin/sym.java                              |   2 +-
 24 files changed, 907 insertions(+), 505 deletions(-)

diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..d4f2a42
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry excluding="scm/autogen/|scm/autogen/" kind="src" path="lib/jas/src"/>
+	<classpathentry kind="src" path="lib/jas/src/scm/autogen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/libs">
+		<accessrules>
+			<accessrule kind="nonaccessible" pattern="soot/**"/>
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/.project b/.project
new file mode 100644
index 0000000..044f644
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Jasmin</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/README b/README
index 5c1c1ae..d471343 100644
--- a/README
+++ b/README
@@ -1,12 +1,12 @@
-Jasmin README file			   May 28, 2004, Patrick Lam
+Jasmin README file			   Jan 22nd, 2012, Eric Bodden
 
-Welcome to Jasmin version sable-1.2.7.
+Welcome to Jasmin version sable-2.5.0.
 
 This is a specialized version of jasmin which is used as a back end for the
 Soot framework.  
 
 Note that with permission from Jonathan Meyer, this package is distributed
-under the GNU Library General Public License and so can be distributed with
+under the GNU Lesser General Public License and so can be distributed with
 Soot. 
 
 
diff --git a/ant.settings b/ant.settings
index 33ee28d..1a4d42a 100644
--- a/ant.settings
+++ b/ant.settings
@@ -6,4 +6,4 @@ java_cup.jar=../polyglot/lib/java_cup.jar
 release.loc=lib
 
 # Version of Jasmin for tagging tarballs
-jasmin.version=2.4.0
+jasmin.version=2.5.0
diff --git a/build.xml b/build.xml
index 3b8e077..3f4fddf 100644
--- a/build.xml
+++ b/build.xml
@@ -13,8 +13,8 @@
         <javac
             destdir="classes"
             classpath="classes:${java_cup.jar}"
-	    source="1.4"
-            target="1.4"
+	    source="1.5"
+            target="1.5"
             debug="true"
         >
             <src path="src"/>
@@ -40,8 +40,8 @@
             classpath="classes"
             debug="true"
             deprecation="true"
-	    source="1.4"
-            target="1.4"
+	    source="1.5"
+            target="1.5"
         >
             <src path="lib/jas/src/scm"/>
             <src path="generated/scm"/>
@@ -53,8 +53,8 @@
             destdir="classes"
             classpath="classes"
             debug="true"
-	    source="1.4"
-            target="1.4"
+	    source="1.5"
+            target="1.5"
         >
             <src path="lib/jas/src/scm/autogen/"/>
         </javac>
@@ -79,8 +79,8 @@
             destdir="classes"
             optimize="true"
             debug="true"
-	    source="1.4"
-            target="1.4"
+	    source="1.5"
+            target="1.5"
         >
             <src path="lib/jas/src/jas"/>
         </javac>
diff --git a/changes b/changes
index 26ed288..db08caa 100644
--- a/changes
+++ b/changes
@@ -1,5 +1,8 @@
 Jasmin Revision History                                 Sable Research Group
 
+Jan 22, 2012				[Eric Bodden]
+	added support for invokedynamic; see tutorial on the Soot webpage
+
 May 28, 2004                [Chris Pickett]
     added .no_super directive (for compiling java.lang.Object)
 
diff --git a/examples/HelloWeb.j b/examples/HelloWeb.j
index 06933bc..0cf48c0 100644
--- a/examples/HelloWeb.j
+++ b/examples/HelloWeb.j
@@ -29,7 +29,7 @@
 .class public HelloWeb
 .super java/applet/Applet
 
-.field private font Ljava/awt/Font;
+.field private "font" Ljava/awt/Font;
 
 
 ; my init() method - allocate a font and assign it to this.font.
diff --git a/lib/jas/src/jas/ArrayElemValPair.java b/lib/jas/src/jas/ArrayElemValPair.java
index 3c8c648..5fa1939 100644
--- a/lib/jas/src/jas/ArrayElemValPair.java
+++ b/lib/jas/src/jas/ArrayElemValPair.java
@@ -34,13 +34,15 @@ public class ArrayElemValPair extends ElemValPair {
     }
 
     public void setNoName(){
+        if(name.uniq.equals("default")) // check if the annotation has no name
+            super.setNoName();
         if (list == null) return;
         Iterator it = list.iterator();
         while (it.hasNext()){
             ((ElemValPair)it.next()).setNoName();
         }
     }
-
+    
     public ArrayElemValPair(String name, char kind) { //
         super(name, kind);
     }
diff --git a/lib/jas/src/jas/BootstrapMethodsAttribute.java b/lib/jas/src/jas/BootstrapMethodsAttribute.java
new file mode 100644
index 0000000..bda66c2
--- /dev/null
+++ b/lib/jas/src/jas/BootstrapMethodsAttribute.java
@@ -0,0 +1,76 @@
+package jas;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class BootstrapMethodsAttribute {
+	
+    static CP attr = new AsciiCP("BootstrapMethods");
+    short attr_length = 0;
+    short num = 0;
+    ArrayList<Pair<MethodHandleCP,CP[]>> list = new ArrayList<Pair<MethodHandleCP,CP[]>>();
+    
+    int addEntry(MethodHandleCP bsm, CP[] argCPs) {
+    	int i=0;
+    	//search for existing equal entry
+    	for (Pair<MethodHandleCP,CP[]> pair : list) {
+    		MethodHandleCP mh = pair.getO1();
+    		CP[] args = pair.getO2();
+    		if(mh.uniq.equals(bsm.uniq)) {
+    			boolean equal = true;
+    			for (int j = 0; j < args.length; j++) {
+					CP arg = args[j];
+					CP otherArg = argCPs[j];
+					if(!arg.uniq.equals(otherArg.uniq)) {
+						equal = false;
+						break;
+					}
+				}
+    			if(equal) return i;
+    		}
+    		i++;
+		}    	
+    	//none found
+    	
+    	//add to end
+    	list.add(new Pair<MethodHandleCP,CP[]>(bsm,argCPs));
+    	return list.size()-1;
+    }
+    
+    void resolve(ClassEnv e){
+        e.addCPItem(attr); 
+    }
+    
+    void write(ClassEnv e, DataOutputStream out)
+            throws IOException, jasError {
+        
+            out.writeShort(e.getCPIndex(attr)); //u2 name;
+            out.writeInt(size()); //u4 size;
+            out.writeShort(list.size()); //u2 bootstrap_method_count;
+            for (Pair<MethodHandleCP,CP[]> pair : list) {
+                out.writeShort(e.getCPIndex(pair.getO1())); //u2 bootstrap_method_ref;
+            	CP[] cps = pair.getO2(); 
+            	out.writeShort(cps.length);//u2 bootstrap_argument_count;
+            	for (CP cp : cps) {
+                    out.writeShort(e.getCPIndex(cp)); //u2 bootstrap_arguments[bootstrap_argument_count]; 
+				}
+            }
+    }
+    
+    int size() {
+//    	 u2 bootstrap_method_count;
+    	 int size = 2;
+    	
+    	 for (Pair<MethodHandleCP,CP[]> pair : list) {
+//    		   u2 bootstrap_method_ref;  // index to CONSTANT_MethodHandle
+//    		   u2 bootstrap_argument_count;
+    		   size+=4;
+    		   
+    		   size+= pair.getO2().length*2; //args
+    	 }
+    	 return size;
+    }
+
+
+}
diff --git a/lib/jas/src/jas/ClassEnv.java b/lib/jas/src/jas/ClassEnv.java
index b7abf62..7505e39 100644
--- a/lib/jas/src/jas/ClassEnv.java
+++ b/lib/jas/src/jas/ClassEnv.java
@@ -36,7 +36,7 @@ public class ClassEnv implements RuntimeConstants
   VisibilityAnnotationAttr visAnnotAttr = null;
   VisibilityAnnotationAttr invisAnnotAttr = null;
   EnclMethAttr encl_meth_attr;
-  boolean highVersion = false;   
+  BootstrapMethodsAttribute bsm_attr = null;
   
   public ClassEnv()
   {
@@ -51,13 +51,17 @@ public class ClassEnv implements RuntimeConstants
     vars = new Vector();
     methods = new Vector();
     generic = new Vector();
+    bsm_attr = null;
   }
 
-  public void setHighVersion(boolean b){
-    highVersion = b;
-    //System.out.println("setting high version number");
-    version_lo = (short) JAVA_MINOR_HIGH_VERSION;
-    version_hi = (short) JAVA_HIGH_VERSION;
+  public void requireJava1_4(){
+    version_lo = (short) Math.max(version_lo,(short) JAVA_MINOR_HIGH_VERSION);
+    version_hi = (short) Math.max(version_hi,(short) JAVA_HIGH_VERSION);
+  }
+  
+  public void requireJava7(){
+    version_lo = (short) JAVA7_MINOR_HIGH_VERSION;
+    version_hi = (short) JAVA7_HIGH_VERSION;
   }
   
   /**
@@ -154,7 +158,7 @@ public class ClassEnv implements RuntimeConstants
 			needAnno = true;
 	}
 		  
-	if(needAnno) setHighVersion(true);
+	if(needAnno) requireJava1_4();
 	
 	// Headers
     out.writeInt(magic);
@@ -238,6 +242,9 @@ public class ClassEnv implements RuntimeConstants
     if (encl_meth_attr != null){
         numExtra++;
     }
+    if (bsm_attr != null){
+        numExtra++;
+    }
     
     out.writeShort(numExtra);
     if (source != null)
@@ -279,6 +286,10 @@ public class ClassEnv implements RuntimeConstants
     if (inner_class_attr != null){
         inner_class_attr.write(this, out);
     }
+    // bootstrap method table attribute
+    if (bsm_attr != null){
+        bsm_attr.write(this, out);
+    }
     out.flush();
   }
 
@@ -423,4 +434,17 @@ public class ClassEnv implements RuntimeConstants
       throw new jasError("Item " + cp + " not in the class");
     return (idx.intValue());
   }
+
+	public int addBootstrapMethod(MethodHandleCP bsm, CP[] argCPs) {	
+		addCPItem(bsm);
+		for (CP cp : argCPs) {
+			addCPItem(cp);
+		}
+		if(bsm_attr==null) {
+		    bsm_attr = new BootstrapMethodsAttribute();
+		    bsm_attr.resolve(this);
+		}
+		requireJava7();
+		return bsm_attr.addEntry(bsm, argCPs);
+	}
 }
diff --git a/lib/jas/src/jas/Insn.java b/lib/jas/src/jas/Insn.java
index d74fa3c..bc0cc29 100644
--- a/lib/jas/src/jas/Insn.java
+++ b/lib/jas/src/jas/Insn.java
@@ -196,6 +196,9 @@ public class Insn implements RuntimeConstants
       case opc_putfield:
         operand = new CPOperand(arg);
         break;
+      case opc_invokedynamic:
+          operand = new PaddedCPOperand(arg);
+          break;
       case opc_ldc2_w:
       case opc_ldc_w:
         //System.out.println("ldc_w: arg: "+arg);
diff --git a/lib/jas/src/jas/InsnOperand.java b/lib/jas/src/jas/InsnOperand.java
index 2190a5c..c0c184f 100644
--- a/lib/jas/src/jas/InsnOperand.java
+++ b/lib/jas/src/jas/InsnOperand.java
@@ -145,6 +145,24 @@ class CPOperand extends InsnOperand
   }
 }
 
+class PaddedCPOperand extends CPOperand {
+
+	PaddedCPOperand(CP cpe) {
+		super(cpe);
+	}
+	
+	void write(ClassEnv e, CodeAttr ce, DataOutputStream out)
+			throws IOException, jasError {
+		super.write(e, ce, out);
+		//add padding ("reserved for future use")
+		out.writeShort(0);
+	}
+	
+	int size(ClassEnv ce, CodeAttr code) {		
+		return super.size(ce, code) + 2 /*2 bytes padding*/;
+	}
+}
+
                                 // these are unique enough that
                                 // they need a separate handler for their
                                 // args
@@ -180,7 +198,7 @@ class LdcOperand extends InsnOperand implements RuntimeConstants
   void resolve(ClassEnv e)
   { e.addCPItem(cpe);
       if (cpe instanceof ClassCP){
-        e.setHighVersion(true);
+        e.requireJava1_4();
       }
   }
 
diff --git a/lib/jas/src/jas/InvokeDynamicCP.java b/lib/jas/src/jas/InvokeDynamicCP.java
new file mode 100644
index 0000000..86708ca
--- /dev/null
+++ b/lib/jas/src/jas/InvokeDynamicCP.java
@@ -0,0 +1,50 @@
+/**
+ * Models a CONSTANT_InvokeDynamic entry
+ *
+ * @author Eric Bodden
+ */
+
+package jas;
+import java.io.*;
+
+
+public class InvokeDynamicCP extends CP implements RuntimeConstants
+{
+  MethodHandleCP bsm;
+  NameTypeCP method;
+  int bsmTableIndex;
+
+  /**
+   * @param bsmClassName name of class holding the boostrap method
+   * @param bsmName name of bootstrap method
+   * @param bsmSig Signature of bootstrap method
+   * @param bsmName uninterpreted name of called method
+   * @param bsmSig Signature of calledmethod
+   * @param bsmTableIndex index to the entry for the related bootstrap method in the BootstrapMethods attribute table
+   */
+  public InvokeDynamicCP(String bsmClassName, String bsmName, String bsmSig, String methodName, String methodSig, int bsmTableIndex)
+  {
+    this.bsmTableIndex = bsmTableIndex;
+	uniq = (bsmClassName + "fv0�" + bsmName + "&%$91&" + bsmSig+ "*(012$" + methodName + "dfg8932" + methodSig).intern();
+    bsm = new MethodHandleCP(
+    		MethodHandleCP.STATIC_METHOD_KIND, //bootstrap methods are always static methods 
+    		bsmClassName, 
+    		bsmName, 
+    		bsmSig);
+    method = new NameTypeCP(methodName, methodSig);
+  }
+
+  void resolve(ClassEnv e)
+  {
+    e.addCPItem(bsm);
+    e.addCPItem(method);
+  }
+
+  void write(ClassEnv e, DataOutputStream out)
+    throws IOException, jasError
+  {
+    out.writeByte(CONSTANT_INVOKE_DYNAMIC);
+    out.writeShort(bsmTableIndex);
+    out.writeShort(e.getCPIndex(method));
+  }
+}
diff --git a/lib/jas/src/jas/InvokedynamicInsn.java b/lib/jas/src/jas/InvokedynamicInsn.java
new file mode 100644
index 0000000..c9107b2
--- /dev/null
+++ b/lib/jas/src/jas/InvokedynamicInsn.java
@@ -0,0 +1,19 @@
+/**
+ * Some instructions are perniticky enough that its simpler
+ * to write them separately instead of smushing them with
+ * all the rest. the invokedynamic instruction is one of them.
+ * @author Eric Bodden
+ */
+
+package jas;
+
+
+
+public class InvokedynamicInsn extends Insn implements RuntimeConstants
+{
+  public InvokedynamicInsn(CP cpe, int nargs)
+  {
+    opc = opc_invokeinterface;
+    operand = new InvokeinterfaceOperand(cpe, nargs);
+  }
+}
diff --git a/lib/jas/src/jas/MethodHandleCP.java b/lib/jas/src/jas/MethodHandleCP.java
new file mode 100644
index 0000000..f67972b
--- /dev/null
+++ b/lib/jas/src/jas/MethodHandleCP.java
@@ -0,0 +1,48 @@
+/**
+ * Models a CONSTANT_MethodHandle entry
+ *
+ * @author Eric Bodden
+ */
+
+package jas;
+import java.io.*;
+
+
+public class MethodHandleCP extends CP implements RuntimeConstants
+{
+	public final static int STATIC_METHOD_KIND = 6;
+
+	
+  int kind;
+  CP fieldOrMethod;
+
+  /**
+   * @param cname Class in which method exists
+   * @param ownerName name of class owning the method or field
+   * @param fieldOrMethodName name of field or method
+   * @param sig Signature of field r method
+   */
+  public MethodHandleCP(int kind, String ownerName, String fieldOrMethodName, String sig)
+  {
+	uniq = kind + "$gfd�" + ownerName + "&%$91&" + fieldOrMethodName + "*(012$" + sig;
+    if(kind<5) { //first for kinds refer to fields
+    	fieldOrMethod = new FieldCP(ownerName, fieldOrMethodName, sig);
+    } else {
+    	fieldOrMethod = new MethodCP(ownerName, fieldOrMethodName, sig);
+    }
+    this.kind = kind;
+  }
+
+  void resolve(ClassEnv e)
+  {
+    e.addCPItem(fieldOrMethod);
+  }
+
+  void write(ClassEnv e, DataOutputStream out)
+    throws IOException, jasError
+  {
+    out.writeByte(CONSTANT_METHOD_HANDLE);
+    out.writeByte(kind);
+    out.writeShort(e.getCPIndex(fieldOrMethod));
+  }
+}
diff --git a/lib/jas/src/jas/Pair.java b/lib/jas/src/jas/Pair.java
new file mode 100644
index 0000000..e521b1e
--- /dev/null
+++ b/lib/jas/src/jas/Pair.java
@@ -0,0 +1,24 @@
+package jas;
+
+public class Pair<T, U>
+{
+	protected T o1;
+	protected U o2;
+	public Pair() { o1 = null; o2 = null; }
+    public Pair( T o1, U o2 ) { this.o1 = o1; this.o2 = o2; }
+    public int hashCode() {
+        return o1.hashCode() + o2.hashCode();
+    }
+    public boolean equals( Object other ) {
+        if( other instanceof Pair) {
+            Pair p = (Pair) other;
+            return o1.equals( p.o1 ) && o2.equals( p.o2 );
+        } else return false;
+    }
+
+    public String toString() {
+        return "<"+o1+","+o2+">";
+    }
+    public T getO1() { return o1; }
+    public U getO2() { return o2; }
+}
\ No newline at end of file
diff --git a/lib/jas/src/jas/RuntimeConstants.java b/lib/jas/src/jas/RuntimeConstants.java
index a35f521..e182208 100644
--- a/lib/jas/src/jas/RuntimeConstants.java
+++ b/lib/jas/src/jas/RuntimeConstants.java
@@ -11,6 +11,8 @@ public interface RuntimeConstants {
     public static final int JAVA_MINOR_VERSION = 0;
     public static final int JAVA_HIGH_VERSION = 49;
     public static final int JAVA_MINOR_HIGH_VERSION = 0;
+    public static final int JAVA7_HIGH_VERSION = 51;
+    public static final int JAVA7_MINOR_HIGH_VERSION = 0;
 
     // constant pool entry types
     public static final int CONSTANT_UTF8 = 1;
@@ -25,6 +27,8 @@ public interface RuntimeConstants {
     public static final int CONSTANT_METHOD = 10;
     public static final int CONSTANT_INTERFACEMETHOD = 11;
     public static final int CONSTANT_NAMEANDTYPE = 12;
+    public static final int CONSTANT_METHOD_HANDLE = 15;
+    public static final int CONSTANT_INVOKE_DYNAMIC = 18;
 
     // access flags
     public static final int ACC_PUBLIC = 1;
@@ -244,7 +248,7 @@ public interface RuntimeConstants {
     public static final int opc_invokespecial = 183;
     public static final int opc_invokestatic = 184;
     public static final int opc_invokeinterface = 185;
-    public static final int opc_xxxunusedxxx = 186;
+    public static final int opc_invokedynamic = 186;
     public static final int opc_new = 187;
     public static final int opc_newarray = 188;
     public static final int opc_anewarray = 189;
@@ -311,7 +315,7 @@ public interface RuntimeConstants {
         "opc_freturn", "opc_dreturn", "opc_areturn", "opc_return",
         "opc_getstatic", "opc_putstatic", "opc_getfield", "opc_putfield",
         "opc_invokevirtual", "opc_invokespecial", "opc_invokestatic",
-        "opc_invokeinterface", "opc_xxxunusedxxx", "opc_new", "opc_newarray",
+        "opc_invokeinterface", "opc_invokedynamic", "opc_new", "opc_newarray",
         "opc_anewarray", "opc_arraylength", "opc_athrow", "opc_checkcast",
         "opc_instanceof", "opc_monitorenter", "opc_monitorexit", "opc_wide",
         "opc_multianewarray", "opc_ifnull", "opc_ifnonnull", "opc_goto_w",
diff --git a/lib/jasminsrc-2.4.0.jar b/lib/jasminsrc-2.5.0.jar
similarity index 53%
rename from lib/jasminsrc-2.4.0.jar
rename to lib/jasminsrc-2.5.0.jar
index f21b795..a1241be 100644
Binary files a/lib/jasminsrc-2.4.0.jar and b/lib/jasminsrc-2.5.0.jar differ
diff --git a/src/jasmin/ClassFile.java b/src/jasmin/ClassFile.java
index 460bc76..d4fc67c 100644
--- a/src/jasmin/ClassFile.java
+++ b/src/jasmin/ClassFile.java
@@ -16,7 +16,9 @@ package jasmin;
 
 
 
+import static jas.MethodHandleCP.STATIC_METHOD_KIND;
 import jas.*;
+
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.DataOutputStream;
@@ -558,7 +560,8 @@ public class ClassFile {
             String split[] = ScannerUtils.splitClassMethodSignature(val);
             inst = new Insn(insn.opcode,
                          new MethodCP(split[0], split[1], split[2]));
-        } else if (insn.args.equals("constant")) {
+        } 
+        else if (insn.args.equals("constant")) {
             //System.out.println("constant");
             inst = new Insn(insn.opcode, new ClassCP(val));
         } else if (insn.args.equals("atype")) {
@@ -611,13 +614,80 @@ public class ClassFile {
             String split[] = ScannerUtils.splitClassField(v1);
             inst = new Insn(info.opcode,
 			    new FieldCP(split[0], split[1], v2));
-        } else {
+        }
+        else {
             throw new jasError("Bad arguments for instruction " + name);
         }
 
 	code.addInsn(inst);
 
     }
+    
+    
+    /*
+     * used for invokedynamic instructions 
+     */
+    void plant(String name, String v1, String v2, String v3)
+    throws jasError
+		{
+		InsnInfo info = InsnInfo.get(name);
+		CodeAttr code = _getCode();
+		autoNumber();
+		Insn inst = null;
+		if (name.equals("invokedynamic")) {
+				class_env.requireJava7();
+				
+		    	String utf8MethodName = v1;
+		    	String methodSig = v2;
+		    	String bsmNameAndSig = v3.substring(0,v3.indexOf("Ljava/lang/invoke/CallSite;(")+"Ljava/lang/invoke/CallSite;".length());
+		    	String bsmName = bsmNameAndSig.substring(0,bsmNameAndSig.indexOf("("));
+		    	String bsmClassName = bsmName.substring(0,bsmName.lastIndexOf("/"));
+		    	String bsmMethodName = bsmName.substring(bsmName.lastIndexOf("/")+1);
+		    	String bsmSig = bsmNameAndSig.substring(bsmNameAndSig.indexOf("("));
+		    	String bsmArgs = v3.substring(v3.indexOf("Ljava/lang/invoke/CallSite;(")+"Ljava/lang/invoke/CallSite;(".length(),v3.length()-1);
+		    	String bsmArgsList[] = bsmArgs.split(",");		    	
+		    	
+		    	CP[] argCPs;
+		    	if(!bsmArgs.isEmpty()) {
+					argCPs = new CP[bsmArgsList.length];		    	
+			    	for (int i = 0; i < bsmArgsList.length; i++) {
+			    		String sig = bsmArgsList[i].substring(1,bsmArgsList[i].indexOf(")"));
+			    		String val = bsmArgsList[i].substring(bsmArgsList[i].indexOf(")")+1);
+			    		CP cp = null;
+			            if (sig.equals("I")||sig.equals("Z")||sig.equals("C")||sig.equals("B")||sig.equals("S")) {
+			                cp = new IntegerCP(Integer.parseInt(val));
+			            } else if (sig.equals("F")) {
+			                cp = new FloatCP(Float.parseFloat(val));
+			            } else if (sig.equals("D")) {
+			                cp = new DoubleCP(Double.parseDouble(val));
+			            } else if (sig.equals("J")) {
+			                cp = new LongCP(Long.parseLong(val));
+			            } else if (sig.equals("Ljava/lang/String;")) {
+			               cp = new StringCP(val);
+			            } else if (sig.equals("Ljava/lang/Class;")) {
+				               cp = new ClassCP(val);
+			            } else {
+			            	throw new UnsupportedOperationException("static argument type not currently supported: "+sig);
+			            }
+			            argCPs[i] = cp;
+					}
+		    	} else {
+		    		argCPs = new CP[0];
+		    	}
+		    	
+		    	//maintain BootstrapMethods attribute
+		    	int index = class_env.addBootstrapMethod(new MethodHandleCP(
+		    			STATIC_METHOD_KIND, //bootstrap methods are always static methods
+		    			bsmClassName, bsmMethodName, bsmSig),argCPs);
+		    	
+		    	inst = new Insn(info.opcode, new InvokeDynamicCP(bsmClassName,bsmMethodName,bsmSig,utf8MethodName,methodSig,index));
+		} else {
+		    throw new jasError("Bad arguments for instruction " + name);
+		}
+		
+		code.addInsn(inst);
+		
+		}
 
     //
     // Lookupswitch instruction
diff --git a/src/jasmin/InsnInfo.java b/src/jasmin/InsnInfo.java
index cbcb50f..674a8d6 100644
--- a/src/jasmin/InsnInfo.java
+++ b/src/jasmin/InsnInfo.java
@@ -191,6 +191,7 @@ class InsnInfo {
         addInfo("invokespecial", RuntimeConstants.opc_invokenonvirtual, "method");
         addInfo("invokestatic", RuntimeConstants.opc_invokestatic, "method");
         addInfo("invokevirtual", RuntimeConstants.opc_invokevirtual, "method");
+        addInfo("invokedynamic", RuntimeConstants.opc_invokedynamic, "invokedynamic");
         addInfo("ior", RuntimeConstants.opc_ior, "");
         addInfo("irem", RuntimeConstants.opc_irem, "");
         addInfo("ireturn", RuntimeConstants.opc_ireturn, "");
diff --git a/src/jasmin/Scanner.java b/src/jasmin/Scanner.java
index df3be28..cd0cc68 100644
--- a/src/jasmin/Scanner.java
+++ b/src/jasmin/Scanner.java
@@ -23,9 +23,10 @@ import jas.*;
 import java_cup.runtime.*;
 import java.util.*;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 
 class Scanner implements java_cup.runtime.Scanner {
-    InputStream inp;
+    InputStreamReader inp;
 
     // single lookahead character
     int next_char;
@@ -94,7 +95,7 @@ class Scanner implements java_cup.runtime.Scanner {
     final static int BIGNUM=65000;
     public Scanner(InputStream i) throws java.io.IOException
     {
-	inp = i;
+	inp = new InputStreamReader(i);
         line_num = 1;
         char_num = 0;
         line = new StringBuffer();
diff --git a/src/jasmin/parser.cup b/src/jasmin/parser.cup
index 262af65..90892a3 100644
--- a/src/jasmin/parser.cup
+++ b/src/jasmin/parser.cup
@@ -603,6 +603,11 @@ simple_instruction ::=
             classFile.plant(i, n1, n2);
         :}
     |
+    Insn:i Str:n1 Word:n2 Word:n3
+        {:
+            classFile.plant(i, n1, n2, n3);
+        :}
+    |
     Insn:i Str:n
         {:
             classFile.plantString(i, n);
diff --git a/src/jasmin/parser.java b/src/jasmin/parser.java
index e2072fe..db8775e 100644
--- a/src/jasmin/parser.java
+++ b/src/jasmin/parser.java
@@ -1,7 +1,7 @@
 
 //----------------------------------------------------
 // The following code was generated by CUP v0.10k
-// Sat Jan 23 10:58:59 CET 2010
+// Thu Jan 05 19:36:41 CET 2012
 //----------------------------------------------------
 
 package jasmin;
@@ -13,7 +13,7 @@ import java.io.*;
 import java.util.Hashtable;
 
 /** CUP v0.10k generated parser.
-  * @version Sat Jan 23 10:58:59 CET 2010
+  * @version Thu Jan 05 19:36:41 CET 2012
   */
 public class parser
  extends java_cup.runtime.lr_parser
@@ -27,7 +27,7 @@ public class parser
   /** Production table. */
   protected static final short _production_table[][] = 
     unpackFromStrings(new String[] {
-    "\000\276\000\002\030\017\000\002\002\004\000\002\046" +
+    "\000\277\000\002\030\017\000\002\002\004\000\002\046" +
     "\005\000\002\046\002\000\002\014\006\000\002\014\006" +
     "\000\002\003\003\000\002\133\002\000\002\132\004\000" +
     "\002\012\003\000\002\012\002\000\002\011\004\000\002" +
@@ -62,30 +62,30 @@ public class parser
     "\044\004\000\002\044\004\000\002\024\003\000\002\024" +
     "\003\000\002\045\003\000\002\045\005\000\002\045\004" +
     "\000\002\045\004\000\002\045\004\000\002\045\005\000" +
-    "\002\045\005\000\002\045\004\000\002\015\004\000\002" +
-    "\015\004\000\002\033\005\000\002\034\003\000\002\037" +
-    "\002\000\002\037\003\000\002\040\004\000\002\040\003" +
-    "\000\002\036\006\000\002\035\005\000\002\053\005\000" +
-    "\002\054\004\000\002\054\005\000\002\060\002\000\002" +
-    "\060\003\000\002\061\004\000\002\061\003\000\002\057" +
-    "\004\000\002\056\005\000\002\065\003\000\002\065\002" +
-    "\000\002\066\004\000\002\066\003\000\002\067\006\000" +
-    "\002\071\003\000\002\072\004\000\002\072\003\000\002" +
-    "\073\006\000\002\075\003\000\002\076\004\000\002\076" +
-    "\003\000\002\077\006\000\002\100\006\000\002\100\002" +
-    "\000\002\101\004\000\002\101\003\000\002\102\012\000" +
-    "\002\103\005\000\002\104\004\000\002\104\002\000\002" +
-    "\105\007\000\002\105\002\000\002\006\004\000\002\006" +
-    "\002\000\002\007\005\000\002\007\002\000\002\113\003" +
-    "\000\002\113\003\000\002\126\003\000\002\126\003\000" +
-    "\002\127\003\000\002\127\002\000\002\114\010\000\002" +
-    "\130\003\000\002\130\002\000\002\115\004\000\002\115" +
-    "\003\000\002\116\011\000\002\131\003\000\002\131\002" +
-    "\000\002\117\004\000\002\117\003\000\002\122\007\000" +
+    "\002\045\005\000\002\045\006\000\002\045\004\000\002" +
+    "\015\004\000\002\015\004\000\002\033\005\000\002\034" +
+    "\003\000\002\037\002\000\002\037\003\000\002\040\004" +
+    "\000\002\040\003\000\002\036\006\000\002\035\005\000" +
+    "\002\053\005\000\002\054\004\000\002\054\005\000\002" +
+    "\060\002\000\002\060\003\000\002\061\004\000\002\061" +
+    "\003\000\002\057\004\000\002\056\005\000\002\065\003" +
+    "\000\002\065\002\000\002\066\004\000\002\066\003\000" +
+    "\002\067\006\000\002\071\003\000\002\072\004\000\002" +
+    "\072\003\000\002\073\006\000\002\075\003\000\002\076" +
+    "\004\000\002\076\003\000\002\077\006\000\002\100\006" +
+    "\000\002\100\002\000\002\101\004\000\002\101\003\000" +
+    "\002\102\012\000\002\103\005\000\002\104\004\000\002" +
+    "\104\002\000\002\105\007\000\002\105\002\000\002\006" +
+    "\004\000\002\006\002\000\002\007\005\000\002\007\002" +
+    "\000\002\113\003\000\002\113\003\000\002\126\003\000" +
+    "\002\126\003\000\002\127\003\000\002\127\002\000\002" +
+    "\114\010\000\002\130\003\000\002\130\002\000\002\115" +
+    "\004\000\002\115\003\000\002\116\011\000\002\131\003" +
+    "\000\002\131\002\000\002\117\004\000\002\117\003\000" +
     "\002\122\007\000\002\122\007\000\002\122\007\000\002" +
     "\122\007\000\002\122\007\000\002\122\007\000\002\122" +
-    "\007\000\002\122\007\000\002\122\010\000\002\122\007" +
-    "\000\002\122\012\000\002\122\012" });
+    "\007\000\002\122\007\000\002\122\007\000\002\122\010" +
+    "\000\002\122\007\000\002\122\012\000\002\122\012" });
 
   /** Access to production table. */
   public short[][] production_table() {return _production_table;}
@@ -93,8 +93,8 @@ public class parser
   /** Parse-action table. */
   protected static final short[][] _action_table = 
     unpackFromStrings(new String[] {
-    "\000\u0167\000\010\005\ufffe\016\004\022\ufffe\001\002\000" +
-    "\004\117\u0168\001\002\000\006\005\011\022\010\001\002" +
+    "\000\u0169\000\010\005\ufffe\016\004\022\ufffe\001\002\000" +
+    "\004\117\u016a\001\002\000\006\005\011\022\010\001\002" +
     "\000\004\002\007\001\002\000\004\002\000\001\002\000" +
     "\040\072\ufffa\073\ufffa\074\ufffa\075\ufffa\076\ufffa\077\ufffa" +
     "\100\ufffa\101\ufffa\102\ufffa\103\ufffa\104\ufffa\105\ufffa\106" +
@@ -115,293 +115,294 @@ public class parser
     "\uffe1\036\uffe1\001\002\000\004\117\016\001\002\000\032" +
     "\002\uffe4\007\uffe4\012\uffe4\021\023\024\uffe4\027\uffe4\031" +
     "\uffe4\032\uffe4\033\uffe4\034\uffe4\035\uffe4\036\uffe4\001\002" +
-    "\000\030\002\uff7a\007\uff7a\012\uff7a\024\030\027\uff7a\031" +
-    "\uff7a\032\uff7a\033\uff7a\034\uff7a\035\uff7a\036\uff7a\001\002" +
-    "\000\026\002\uff67\007\uff67\012\uff67\027\uff67\031\036\032" +
-    "\uff67\033\uff67\034\uff67\035\uff67\036\uff67\001\002\000\030" +
-    "\002\uff7b\007\uff7b\012\uff7b\024\030\027\uff7b\031\uff7b\032" +
-    "\uff7b\033\uff7b\034\uff7b\035\uff7b\036\uff7b\001\002\000\004" +
-    "\117\032\001\002\000\030\002\uff78\007\uff78\012\uff78\024" +
-    "\uff78\027\uff78\031\uff78\032\uff78\033\uff78\034\uff78\035\uff78" +
-    "\036\uff78\001\002\000\004\116\033\001\002\000\004\114" +
-    "\034\001\002\000\030\002\uff77\007\uff77\012\uff77\024\uff77" +
-    "\027\uff77\031\uff77\032\uff77\033\uff77\034\uff77\035\uff77\036" +
-    "\uff77\001\002\000\030\002\uff79\007\uff79\012\uff79\024\uff79" +
-    "\027\uff79\031\uff79\032\uff79\033\uff79\034\uff79\035\uff79\036" +
-    "\uff79\001\002\000\004\114\u015e\001\002\000\024\002\uff6d" +
-    "\007\uff6d\012\uff6d\027\040\032\uff6d\033\uff6d\034\uff6d\035" +
-    "\uff6d\036\uff6d\001\002\000\004\114\u014e\001\002\000\022" +
-    "\002\uff65\007\uff65\012\uff65\032\042\033\uff65\034\uff65\035" +
-    "\uff65\036\uff65\001\002\000\004\116\u014a\001\002\000\020" +
-    "\002\uff63\007\uff63\012\uff63\033\044\034\uff63\035\uff63\036" +
-    "\uff63\001\002\000\004\114\u0149\001\002\000\016\002\uffdf" +
-    "\007\uffdf\012\uffdf\034\uffdf\035\uffdf\036\uffdf\001\002\000" +
-    "\016\002\uff61\007\uff61\012\uff61\034\051\035\uff61\036\uff61" +
-    "\001\002\000\014\002\uffde\007\uffde\012\uffde\035\uffde\036" +
-    "\uffde\001\002\000\014\002\uff5b\007\uff5b\012\uff5b\035\056" +
-    "\036\061\001\002\000\004\116\052\001\002\000\004\114" +
-    "\053\001\002\000\016\002\uff62\007\uff62\012\uff62\025\uff62" +
-    "\035\uff62\036\uff62\001\002\000\004\114\u0143\001\002\000" +
-    "\010\002\uffdd\007\uffdd\012\uffdd\001\002\000\004\114\uff60" +
-    "\001\002\000\014\002\uff5c\007\uff5c\012\uff5c\035\056\036" +
-    "\061\001\002\000\010\002\uffda\007\064\012\uffda\001\002" +
-    "\000\004\114\uff5f\001\002\000\006\002\uffcb\012\152\001" +
-    "\002\000\012\002\uffd6\007\uffd6\012\uffd6\025\143\001\002" +
-    "\000\040\072\ufffa\073\ufffa\074\ufffa\075\ufffa\076\ufffa\077" +
-    "\ufffa\100\ufffa\101\ufffa\102\ufffa\103\ufffa\104\ufffa\105\ufffa" +
-    "\106\ufffa\107\ufffa\116\ufffa\001\002\000\010\002\uffd8\007" +
-    "\uffd8\012\uffd8\001\002\000\010\002\uffdb\007\064\012\uffdb" +
-    "\001\002\000\010\002\uffd9\007\uffd9\012\uffd9\001\002\000" +
-    "\004\116\114\001\002\000\044\006\ufff7\072\073\073\110" +
-    "\074\105\075\077\076\106\077\100\100\075\101\074\102" +
-    "\107\103\104\104\103\105\101\106\102\107\072\116\ufff7" +
-    "\117\ufff7\001\002\000\044\006\uffe7\072\uffe7\073\uffe7\074" +
-    "\uffe7\075\uffe7\076\uffe7\077\uffe7\100\uffe7\101\uffe7\102\uffe7" +
-    "\103\uffe7\104\uffe7\105\uffe7\106\uffe7\107\uffe7\116\uffe7\117" +
-    "\uffe7\001\002\000\044\006\uffea\072\uffea\073\uffea\074\uffea" +
-    "\075\uffea\076\uffea\077\uffea\100\uffea\101\uffea\102\uffea\103" +
-    "\uffea\104\uffea\105\uffea\106\uffea\107\uffea\116\uffea\117\uffea" +
-    "\001\002\000\044\006\ufff1\072\ufff1\073\ufff1\074\ufff1\075" +
-    "\ufff1\076\ufff1\077\ufff1\100\ufff1\101\ufff1\102\ufff1\103\ufff1" +
-    "\104\ufff1\105\ufff1\106\ufff1\107\ufff1\116\ufff1\117\ufff1\001" +
-    "\002\000\044\006\ufff4\072\ufff4\073\ufff4\074\ufff4\075\ufff4" +
-    "\076\ufff4\077\ufff4\100\ufff4\101\ufff4\102\ufff4\103\ufff4\104" +
-    "\ufff4\105\ufff4\106\ufff4\107\ufff4\116\ufff4\117\ufff4\001\002" +
-    "\000\044\006\ufff5\072\ufff5\073\ufff5\074\ufff5\075\ufff5\076" +
-    "\ufff5\077\ufff5\100\ufff5\101\ufff5\102\ufff5\103\ufff5\104\ufff5" +
-    "\105\ufff5\106\ufff5\107\ufff5\116\ufff5\117\ufff5\001\002\000" +
-    "\044\006\uffec\072\uffec\073\uffec\074\uffec\075\uffec\076\uffec" +
-    "\077\uffec\100\uffec\101\uffec\102\uffec\103\uffec\104\uffec\105" +
-    "\uffec\106\uffec\107\uffec\116\uffec\117\uffec\001\002\000\044" +
-    "\006\ufff2\072\ufff2\073\ufff2\074\ufff2\075\ufff2\076\ufff2\077" +
-    "\ufff2\100\ufff2\101\ufff2\102\ufff2\103\ufff2\104\ufff2\105\ufff2" +
-    "\106\ufff2\107\ufff2\116\ufff2\117\ufff2\001\002\000\044\006" +
-    "\uffe9\072\uffe9\073\uffe9\074\uffe9\075\uffe9\076\uffe9\077\uffe9" +
-    "\100\uffe9\101\uffe9\102\uffe9\103\uffe9\104\uffe9\105\uffe9\106" +
-    "\uffe9\107\uffe9\116\uffe9\117\uffe9\001\002\000\044\006\uffe8" +
-    "\072\uffe8\073\uffe8\074\uffe8\075\uffe8\076\uffe8\077\uffe8\100" +
-    "\uffe8\101\uffe8\102\uffe8\103\uffe8\104\uffe8\105\uffe8\106\uffe8" +
-    "\107\uffe8\116\uffe8\117\uffe8\001\002\000\044\006\uffee\072" +
-    "\uffee\073\uffee\074\uffee\075\uffee\076\uffee\077\uffee\100\uffee" +
-    "\101\uffee\102\uffee\103\uffee\104\uffee\105\uffee\106\uffee\107" +
-    "\uffee\116\uffee\117\uffee\001\002\000\044\006\uffed\072\uffed" +
-    "\073\uffed\074\uffed\075\uffed\076\uffed\077\uffed\100\uffed\101" +
-    "\uffed\102\uffed\103\uffed\104\uffed\105\uffed\106\uffed\107\uffed" +
-    "\116\uffed\117\uffed\001\002\000\044\006\uffeb\072\uffeb\073" +
-    "\uffeb\074\uffeb\075\uffeb\076\uffeb\077\uffeb\100\uffeb\101\uffeb" +
-    "\102\uffeb\103\uffeb\104\uffeb\105\uffeb\106\uffeb\107\uffeb\116" +
-    "\uffeb\117\uffeb\001\002\000\044\006\ufff3\072\ufff3\073\ufff3" +
-    "\074\ufff3\075\ufff3\076\ufff3\077\ufff3\100\ufff3\101\ufff3\102" +
-    "\ufff3\103\ufff3\104\ufff3\105\ufff3\106\ufff3\107\ufff3\116\ufff3" +
-    "\117\ufff3\001\002\000\044\006\uffef\072\uffef\073\uffef\074" +
-    "\uffef\075\uffef\076\uffef\077\uffef\100\uffef\101\uffef\102\uffef" +
-    "\103\uffef\104\uffef\105\uffef\106\uffef\107\uffef\116\uffef\117" +
-    "\uffef\001\002\000\044\006\ufff0\072\ufff0\073\ufff0\074\ufff0" +
-    "\075\ufff0\076\ufff0\077\ufff0\100\ufff0\101\ufff0\102\ufff0\103" +
-    "\ufff0\104\ufff0\105\ufff0\106\ufff0\107\ufff0\116\ufff0\117\ufff0" +
-    "\001\002\000\044\006\ufff8\072\073\073\110\074\105\075" +
-    "\077\076\106\077\100\100\075\101\074\102\107\103\104" +
-    "\104\103\105\101\106\102\107\072\116\ufff8\117\ufff8\001" +
-    "\002\000\010\006\ufff9\116\ufff9\117\ufff9\001\002\000\044" +
-    "\006\ufff6\072\ufff6\073\ufff6\074\ufff6\075\ufff6\076\ufff6\077" +
-    "\ufff6\100\ufff6\101\ufff6\102\ufff6\103\ufff6\104\ufff6\105\ufff6" +
-    "\106\ufff6\107\ufff6\116\ufff6\117\ufff6\001\002\000\004\117" +
-    "\115\001\002\000\010\031\uffd0\113\116\114\uffd0\001\002" +
-    "\000\010\116\135\121\137\122\140\001\002\000\006\031" +
-    "\121\114\120\001\002\000\022\002\uff63\007\uff63\012\uff63" +
-    "\025\uff63\033\044\034\uff63\035\uff63\036\uff63\001\002\000" +
-    "\004\114\122\001\002\000\022\002\uff63\007\uff63\012\uff63" +
-    "\025\uff63\033\044\034\uff63\035\uff63\036\uff63\001\002\000" +
-    "\020\002\uff61\007\uff61\012\uff61\025\uff61\034\051\035\uff61" +
-    "\036\uff61\001\002\000\016\002\uff5b\007\uff5b\012\uff5b\025" +
-    "\uff5b\035\056\036\061\001\002\000\012\002\uffd4\007\uffd4" +
-    "\012\uffd4\025\uffd4\001\002\000\016\002\uff5c\007\uff5c\012" +
-    "\uff5c\025\uff5c\035\056\036\061\001\002\000\012\002\uffd2" +
-    "\007\uffd2\012\uffd2\025\uffd2\001\002\000\020\002\uff61\007" +
-    "\uff61\012\uff61\025\uff61\034\051\035\uff61\036\uff61\001\002" +
-    "\000\016\002\uff5b\007\uff5b\012\uff5b\025\uff5b\035\056\036" +
-    "\061\001\002\000\012\002\uffd5\007\uffd5\012\uffd5\025\uffd5" +
-    "\001\002\000\016\002\uff5c\007\uff5c\012\uff5c\025\uff5c\035" +
-    "\056\036\061\001\002\000\012\002\uffd3\007\uffd3\012\uffd3" +
-    "\025\uffd3\001\002\000\006\031\uffcd\114\uffcd\001\002\000" +
-    "\006\031\uffd1\114\uffd1\001\002\000\006\031\uffcf\114\uffcf" +
-    "\001\002\000\006\031\uffce\114\uffce\001\002\000\010\002" +
-    "\uffd7\007\uffd7\012\uffd7\001\002\000\012\002\uff70\007\uff70" +
-    "\012\uff70\025\uff70\001\002\000\004\117\146\001\002\000" +
-    "\012\002\uff72\007\uff72\012\uff72\025\143\001\002\000\012" +
-    "\002\uff71\007\uff71\012\uff71\025\uff71\001\002\000\004\116" +
-    "\147\001\002\000\004\114\150\001\002\000\012\002\uff6f" +
-    "\007\uff6f\012\uff6f\025\uff6f\001\002\000\004\002\001\001" +
-    "\002\000\040\072\ufffa\073\ufffa\074\ufffa\075\ufffa\076\ufffa" +
-    "\077\ufffa\100\ufffa\101\ufffa\102\ufffa\103\ufffa\104\ufffa\105" +
-    "\ufffa\106\ufffa\107\ufffa\117\ufffa\001\002\000\010\002\uffc7" +
-    "\012\uffc7\026\u0139\001\002\000\054\003\uffc0\004\uffc0\006" +
-    "\162\010\uffc0\011\uffc0\013\uffc0\017\uffc0\020\uffc0\023\uffc0" +
-    "\031\uffc0\033\uffc0\034\uffc0\035\uffc0\036\uffc0\063\uffc0\064" +
-    "\uffc0\110\uffc0\111\uffc0\114\uffc0\117\uffc0\120\uffc0\001\002" +
-    "\000\006\002\uffc9\012\uffc9\001\002\000\006\002\uffcc\012" +
-    "\152\001\002\000\006\002\uffca\012\uffca\001\002\000\052" +
-    "\003\212\004\177\010\175\011\214\013\215\017\225\020" +
-    "\173\023\203\031\223\033\221\034\174\035\056\036\061" +
-    "\063\226\064\220\110\211\111\206\114\uffba\117\171\120" +
-    "\205\001\002\000\054\003\uffc0\004\uffc0\006\162\010\uffc0" +
+    "\000\030\002\uff79\007\uff79\012\uff79\024\031\027\uff79\031" +
+    "\uff79\032\uff79\033\uff79\034\uff79\035\uff79\036\uff79\001\002" +
+    "\000\026\002\uff66\007\uff66\012\uff66\027\uff66\031\036\032" +
+    "\uff66\033\uff66\034\uff66\035\uff66\036\uff66\001\002\000\030" +
+    "\002\uff7a\007\uff7a\012\uff7a\024\031\027\uff7a\031\uff7a\032" +
+    "\uff7a\033\uff7a\034\uff7a\035\uff7a\036\uff7a\001\002\000\030" +
+    "\002\uff77\007\uff77\012\uff77\024\uff77\027\uff77\031\uff77\032" +
+    "\uff77\033\uff77\034\uff77\035\uff77\036\uff77\001\002\000\004" +
+    "\117\032\001\002\000\004\116\033\001\002\000\004\114" +
+    "\034\001\002\000\030\002\uff76\007\uff76\012\uff76\024\uff76" +
+    "\027\uff76\031\uff76\032\uff76\033\uff76\034\uff76\035\uff76\036" +
+    "\uff76\001\002\000\030\002\uff78\007\uff78\012\uff78\024\uff78" +
+    "\027\uff78\031\uff78\032\uff78\033\uff78\034\uff78\035\uff78\036" +
+    "\uff78\001\002\000\004\114\u0160\001\002\000\024\002\uff6c" +
+    "\007\uff6c\012\uff6c\027\040\032\uff6c\033\uff6c\034\uff6c\035" +
+    "\uff6c\036\uff6c\001\002\000\004\114\u0150\001\002\000\022" +
+    "\002\uff64\007\uff64\012\uff64\032\043\033\uff64\034\uff64\035" +
+    "\uff64\036\uff64\001\002\000\020\002\uff62\007\uff62\012\uff62" +
+    "\033\051\034\uff62\035\uff62\036\uff62\001\002\000\004\116" +
+    "\044\001\002\000\004\116\045\001\002\000\004\116\046" +
+    "\001\002\000\004\114\047\001\002\000\020\002\uff65\007" +
+    "\uff65\012\uff65\033\uff65\034\uff65\035\uff65\036\uff65\001\002" +
+    "\000\016\002\uffdf\007\uffdf\012\uffdf\034\uffdf\035\uffdf\036" +
+    "\uffdf\001\002\000\004\114\u014f\001\002\000\016\002\uff60" +
+    "\007\uff60\012\uff60\034\055\035\uff60\036\uff60\001\002\000" +
+    "\014\002\uffde\007\uffde\012\uffde\035\uffde\036\uffde\001\002" +
+    "\000\014\002\uff5a\007\uff5a\012\uff5a\035\062\036\065\001" +
+    "\002\000\004\116\056\001\002\000\004\114\057\001\002" +
+    "\000\016\002\uff61\007\uff61\012\uff61\025\uff61\035\uff61\036" +
+    "\uff61\001\002\000\004\114\u0149\001\002\000\010\002\uffdd" +
+    "\007\uffdd\012\uffdd\001\002\000\004\114\uff5f\001\002\000" +
+    "\014\002\uff5b\007\uff5b\012\uff5b\035\062\036\065\001\002" +
+    "\000\010\002\uffda\007\070\012\uffda\001\002\000\004\114" +
+    "\uff5e\001\002\000\006\002\uffcb\012\156\001\002\000\012" +
+    "\002\uffd6\007\uffd6\012\uffd6\025\147\001\002\000\040\072" +
+    "\ufffa\073\ufffa\074\ufffa\075\ufffa\076\ufffa\077\ufffa\100\ufffa" +
+    "\101\ufffa\102\ufffa\103\ufffa\104\ufffa\105\ufffa\106\ufffa\107" +
+    "\ufffa\116\ufffa\001\002\000\010\002\uffd8\007\uffd8\012\uffd8" +
+    "\001\002\000\010\002\uffdb\007\070\012\uffdb\001\002\000" +
+    "\010\002\uffd9\007\uffd9\012\uffd9\001\002\000\004\116\120" +
+    "\001\002\000\044\006\ufff7\072\077\073\114\074\111\075" +
+    "\103\076\112\077\104\100\101\101\100\102\113\103\110" +
+    "\104\107\105\105\106\106\107\076\116\ufff7\117\ufff7\001" +
+    "\002\000\044\006\uffe7\072\uffe7\073\uffe7\074\uffe7\075\uffe7" +
+    "\076\uffe7\077\uffe7\100\uffe7\101\uffe7\102\uffe7\103\uffe7\104" +
+    "\uffe7\105\uffe7\106\uffe7\107\uffe7\116\uffe7\117\uffe7\001\002" +
+    "\000\044\006\uffea\072\uffea\073\uffea\074\uffea\075\uffea\076" +
+    "\uffea\077\uffea\100\uffea\101\uffea\102\uffea\103\uffea\104\uffea" +
+    "\105\uffea\106\uffea\107\uffea\116\uffea\117\uffea\001\002\000" +
+    "\044\006\ufff1\072\ufff1\073\ufff1\074\ufff1\075\ufff1\076\ufff1" +
+    "\077\ufff1\100\ufff1\101\ufff1\102\ufff1\103\ufff1\104\ufff1\105" +
+    "\ufff1\106\ufff1\107\ufff1\116\ufff1\117\ufff1\001\002\000\044" +
+    "\006\ufff4\072\ufff4\073\ufff4\074\ufff4\075\ufff4\076\ufff4\077" +
+    "\ufff4\100\ufff4\101\ufff4\102\ufff4\103\ufff4\104\ufff4\105\ufff4" +
+    "\106\ufff4\107\ufff4\116\ufff4\117\ufff4\001\002\000\044\006" +
+    "\ufff5\072\ufff5\073\ufff5\074\ufff5\075\ufff5\076\ufff5\077\ufff5" +
+    "\100\ufff5\101\ufff5\102\ufff5\103\ufff5\104\ufff5\105\ufff5\106" +
+    "\ufff5\107\ufff5\116\ufff5\117\ufff5\001\002\000\044\006\uffec" +
+    "\072\uffec\073\uffec\074\uffec\075\uffec\076\uffec\077\uffec\100" +
+    "\uffec\101\uffec\102\uffec\103\uffec\104\uffec\105\uffec\106\uffec" +
+    "\107\uffec\116\uffec\117\uffec\001\002\000\044\006\ufff2\072" +
+    "\ufff2\073\ufff2\074\ufff2\075\ufff2\076\ufff2\077\ufff2\100\ufff2" +
+    "\101\ufff2\102\ufff2\103\ufff2\104\ufff2\105\ufff2\106\ufff2\107" +
+    "\ufff2\116\ufff2\117\ufff2\001\002\000\044\006\uffe9\072\uffe9" +
+    "\073\uffe9\074\uffe9\075\uffe9\076\uffe9\077\uffe9\100\uffe9\101" +
+    "\uffe9\102\uffe9\103\uffe9\104\uffe9\105\uffe9\106\uffe9\107\uffe9" +
+    "\116\uffe9\117\uffe9\001\002\000\044\006\uffe8\072\uffe8\073" +
+    "\uffe8\074\uffe8\075\uffe8\076\uffe8\077\uffe8\100\uffe8\101\uffe8" +
+    "\102\uffe8\103\uffe8\104\uffe8\105\uffe8\106\uffe8\107\uffe8\116" +
+    "\uffe8\117\uffe8\001\002\000\044\006\uffee\072\uffee\073\uffee" +
+    "\074\uffee\075\uffee\076\uffee\077\uffee\100\uffee\101\uffee\102" +
+    "\uffee\103\uffee\104\uffee\105\uffee\106\uffee\107\uffee\116\uffee" +
+    "\117\uffee\001\002\000\044\006\uffed\072\uffed\073\uffed\074" +
+    "\uffed\075\uffed\076\uffed\077\uffed\100\uffed\101\uffed\102\uffed" +
+    "\103\uffed\104\uffed\105\uffed\106\uffed\107\uffed\116\uffed\117" +
+    "\uffed\001\002\000\044\006\uffeb\072\uffeb\073\uffeb\074\uffeb" +
+    "\075\uffeb\076\uffeb\077\uffeb\100\uffeb\101\uffeb\102\uffeb\103" +
+    "\uffeb\104\uffeb\105\uffeb\106\uffeb\107\uffeb\116\uffeb\117\uffeb" +
+    "\001\002\000\044\006\ufff3\072\ufff3\073\ufff3\074\ufff3\075" +
+    "\ufff3\076\ufff3\077\ufff3\100\ufff3\101\ufff3\102\ufff3\103\ufff3" +
+    "\104\ufff3\105\ufff3\106\ufff3\107\ufff3\116\ufff3\117\ufff3\001" +
+    "\002\000\044\006\uffef\072\uffef\073\uffef\074\uffef\075\uffef" +
+    "\076\uffef\077\uffef\100\uffef\101\uffef\102\uffef\103\uffef\104" +
+    "\uffef\105\uffef\106\uffef\107\uffef\116\uffef\117\uffef\001\002" +
+    "\000\044\006\ufff0\072\ufff0\073\ufff0\074\ufff0\075\ufff0\076" +
+    "\ufff0\077\ufff0\100\ufff0\101\ufff0\102\ufff0\103\ufff0\104\ufff0" +
+    "\105\ufff0\106\ufff0\107\ufff0\116\ufff0\117\ufff0\001\002\000" +
+    "\044\006\ufff8\072\077\073\114\074\111\075\103\076\112" +
+    "\077\104\100\101\101\100\102\113\103\110\104\107\105" +
+    "\105\106\106\107\076\116\ufff8\117\ufff8\001\002\000\010" +
+    "\006\ufff9\116\ufff9\117\ufff9\001\002\000\044\006\ufff6\072" +
+    "\ufff6\073\ufff6\074\ufff6\075\ufff6\076\ufff6\077\ufff6\100\ufff6" +
+    "\101\ufff6\102\ufff6\103\ufff6\104\ufff6\105\ufff6\106\ufff6\107" +
+    "\ufff6\116\ufff6\117\ufff6\001\002\000\004\117\121\001\002" +
+    "\000\010\031\uffd0\113\122\114\uffd0\001\002\000\010\116" +
+    "\141\121\143\122\144\001\002\000\006\031\125\114\124" +
+    "\001\002\000\022\002\uff62\007\uff62\012\uff62\025\uff62\033" +
+    "\051\034\uff62\035\uff62\036\uff62\001\002\000\004\114\126" +
+    "\001\002\000\022\002\uff62\007\uff62\012\uff62\025\uff62\033" +
+    "\051\034\uff62\035\uff62\036\uff62\001\002\000\020\002\uff60" +
+    "\007\uff60\012\uff60\025\uff60\034\055\035\uff60\036\uff60\001" +
+    "\002\000\016\002\uff5a\007\uff5a\012\uff5a\025\uff5a\035\062" +
+    "\036\065\001\002\000\012\002\uffd4\007\uffd4\012\uffd4\025" +
+    "\uffd4\001\002\000\016\002\uff5b\007\uff5b\012\uff5b\025\uff5b" +
+    "\035\062\036\065\001\002\000\012\002\uffd2\007\uffd2\012" +
+    "\uffd2\025\uffd2\001\002\000\020\002\uff60\007\uff60\012\uff60" +
+    "\025\uff60\034\055\035\uff60\036\uff60\001\002\000\016\002" +
+    "\uff5a\007\uff5a\012\uff5a\025\uff5a\035\062\036\065\001\002" +
+    "\000\012\002\uffd5\007\uffd5\012\uffd5\025\uffd5\001\002\000" +
+    "\016\002\uff5b\007\uff5b\012\uff5b\025\uff5b\035\062\036\065" +
+    "\001\002\000\012\002\uffd3\007\uffd3\012\uffd3\025\uffd3\001" +
+    "\002\000\006\031\uffcd\114\uffcd\001\002\000\006\031\uffd1" +
+    "\114\uffd1\001\002\000\006\031\uffcf\114\uffcf\001\002\000" +
+    "\006\031\uffce\114\uffce\001\002\000\010\002\uffd7\007\uffd7" +
+    "\012\uffd7\001\002\000\012\002\uff6f\007\uff6f\012\uff6f\025" +
+    "\uff6f\001\002\000\004\117\152\001\002\000\012\002\uff71" +
+    "\007\uff71\012\uff71\025\147\001\002\000\012\002\uff70\007" +
+    "\uff70\012\uff70\025\uff70\001\002\000\004\116\153\001\002" +
+    "\000\004\114\154\001\002\000\012\002\uff6e\007\uff6e\012" +
+    "\uff6e\025\uff6e\001\002\000\004\002\001\001\002\000\040" +
+    "\072\ufffa\073\ufffa\074\ufffa\075\ufffa\076\ufffa\077\ufffa\100" +
+    "\ufffa\101\ufffa\102\ufffa\103\ufffa\104\ufffa\105\ufffa\106\ufffa" +
+    "\107\ufffa\117\ufffa\001\002\000\010\002\uffc7\012\uffc7\026" +
+    "\u013f\001\002\000\054\003\uffc0\004\uffc0\006\166\010\uffc0" +
     "\011\uffc0\013\uffc0\017\uffc0\020\uffc0\023\uffc0\031\uffc0\033" +
     "\uffc0\034\uffc0\035\uffc0\036\uffc0\063\uffc0\064\uffc0\110\uffc0" +
-    "\111\uffc0\114\uffc0\117\uffc0\120\uffc0\001\002\000\004\071" +
-    "\165\001\002\000\054\003\uffc1\004\uffc1\006\uffc1\010\uffc1" +
-    "\011\uffc1\013\uffc1\017\uffc1\020\uffc1\023\uffc1\031\uffc1\033" +
-    "\uffc1\034\uffc1\035\uffc1\036\uffc1\063\uffc1\064\uffc1\110\uffc1" +
-    "\111\uffc1\114\uffc1\117\uffc1\120\uffc1\001\002\000\010\002" +
-    "\uffc5\012\uffc5\026\uffc5\001\002\000\004\114\166\001\002" +
-    "\000\010\002\uffc3\012\uffc3\026\uffc3\001\002\000\054\003" +
-    "\uffc2\004\uffc2\006\uffc2\010\uffc2\011\uffc2\013\uffc2\017\uffc2" +
-    "\020\uffc2\023\uffc2\031\uffc2\033\uffc2\034\uffc2\035\uffc2\036" +
-    "\uffc2\063\uffc2\064\uffc2\110\uffc2\111\uffc2\114\uffc2\117\uffc2" +
-    "\120\uffc2\001\002\000\010\002\uffc6\012\uffc6\026\uffc6\001" +
-    "\002\000\004\115\u0136\001\002\000\004\114\uffac\001\002" +
-    "\000\004\121\u012e\001\002\000\004\116\u012c\001\002\000" +
-    "\004\117\u012a\001\002\000\004\114\uffbb\001\002\000\004" +
-    "\117\016\001\002\000\004\114\u011b\001\002\000\004\114" +
-    "\uffbd\001\002\000\004\114\u011a\001\002\000\004\117\u0117" +
-    "\001\002\000\004\114\uffad\001\002\000\014\114\uff96\116" +
-    "\u0110\117\u0111\121\u0112\122\u0113\001\002\000\004\121\u0102" +
-    "\001\002\000\004\114\uffae\001\002\000\004\114\uffb1\001" +
-    "\002\000\004\114\361\001\002\000\004\114\uffbc\001\002" +
-    "\000\004\114\uffaf\001\002\000\004\121\360\001\002\000" +
-    "\004\117\352\001\002\000\004\114\uffbe\001\002\000\004" +
-    "\114\uff98\001\002\000\006\035\056\036\061\001\002\000" +
-    "\004\114\uffaa\001\002\000\004\114\uff97\001\002\000\004" +
-    "\114\uffab\001\002\000\004\114\uffb0\001\002\000\004\117" +
-    "\016\001\002\000\004\062\227\001\002\000\034\043\247" +
-    "\044\234\045\242\046\233\047\240\050\244\051\236\052" +
-    "\235\053\245\054\243\055\241\056\237\057\246\001\002" +
-    "\000\004\006\231\001\002\000\004\063\232\001\002\000" +
-    "\004\114\uffa4\001\002\000\004\116\335\001\002\000\004" +
-    "\116\332\001\002\000\004\116\327\001\002\000\004\116" +
-    "\324\001\002\000\004\116\321\001\002\000\004\116\316" +
-    "\001\002\000\004\116\312\001\002\000\004\116\307\001" +
-    "\002\000\004\116\272\001\002\000\004\116\267\001\002" +
-    "\000\004\116\256\001\002\000\004\116\253\001\002\000" +
-    "\004\116\250\001\002\000\004\121\251\001\002\000\004" +
-    "\114\252\001\002\000\006\006\uff50\062\uff50\001\002\000" +
-    "\004\116\254\001\002\000\004\114\255\001\002\000\006" +
-    "\006\uff48\062\uff48\001\002\000\004\114\257\001\002\000" +
-    "\006\006\uff53\062\227\001\002\000\004\006\264\001\002" +
-    "\000\006\006\uff54\062\227\001\002\000\006\006\uff51\062" +
-    "\uff51\001\002\000\006\006\uff52\062\uff52\001\002\000\004" +
-    "\060\265\001\002\000\004\114\266\001\002\000\006\006" +
-    "\uff45\062\uff45\001\002\000\010\116\135\121\137\122\140" +
-    "\001\002\000\004\114\271\001\002\000\006\006\uff4b\062" +
-    "\uff4b\001\002\000\004\114\273\001\002\000\004\042\275" +
-    "\001\002\000\004\006\304\001\002\000\004\116\276\001" +
-    "\002\000\004\114\277\001\002\000\006\006\uff53\062\227" +
-    "\001\002\000\004\006\301\001\002\000\004\042\302\001" +
-    "\002\000\004\114\303\001\002\000\006\006\uff55\042\uff55" +
-    "\001\002\000\004\061\305\001\002\000\004\114\306\001" +
-    "\002\000\006\006\uff44\062\uff44\001\002\000\004\121\310" +
-    "\001\002\000\004\114\311\001\002\000\006\006\uff4d\062" +
-    "\uff4d\001\002\000\004\116\313\001\002\000\004\116\314" +
-    "\001\002\000\004\114\315\001\002\000\006\006\uff47\062" +
-    "\uff47\001\002\000\004\121\317\001\002\000\004\114\320" +
-    "\001\002\000\006\006\uff4c\062\uff4c\001\002\000\004\116" +
-    "\322\001\002\000\004\114\323\001\002\000\006\006\uff46" +
-    "\062\uff46\001\002\000\010\116\135\121\137\122\140\001" +
-    "\002\000\004\114\326\001\002\000\006\006\uff49\062\uff49" +
-    "\001\002\000\010\116\135\121\137\122\140\001\002\000" +
-    "\004\114\331\001\002\000\006\006\uff4a\062\uff4a\001\002" +
-    "\000\004\121\333\001\002\000\004\114\334\001\002\000" +
-    "\006\006\uff4e\062\uff4e\001\002\000\004\121\336\001\002" +
-    "\000\004\114\337\001\002\000\006\006\uff4f\062\uff4f\001" +
-    "\002\000\004\114\uff9e\001\002\000\004\114\uffb5\001\002" +
-    "\000\004\114\343\001\002\000\006\035\056\036\061\001" +
-    "\002\000\010\006\uffa5\035\uffa5\036\uffa5\001\002\000\010" +
-    "\006\346\035\056\036\061\001\002\000\004\064\350\001" +
-    "\002\000\010\006\uffa6\035\uffa6\036\uffa6\001\002\000\004" +
-    "\114\uffa7\001\002\000\004\114\uffb3\001\002\000\012\116" +
-    "\354\117\353\121\355\122\356\001\002\000\004\114\uff9b" +
-    "\001\002\000\004\114\uff99\001\002\000\004\114\uff9c\001" +
-    "\002\000\004\114\uff9a\001\002\000\004\114\uffb6\001\002" +
-    "\000\004\114\uff9f\001\002\000\006\112\uff8b\121\uff8b\001" +
-    "\002\000\006\112\uff8a\121\367\001\002\000\004\114\uff8e" +
-    "\001\002\000\004\112\374\001\002\000\006\112\uff87\121" +
-    "\uff87\001\002\000\006\112\uff89\121\367\001\002\000\004" +
-    "\115\370\001\002\000\004\117\371\001\002\000\004\114" +
-    "\372\001\002\000\006\112\uff86\121\uff86\001\002\000\006" +
-    "\112\uff88\121\uff88\001\002\000\004\115\376\001\002\000" +
-    "\004\114\uff8c\001\002\000\004\117\377\001\002\000\004" +
-    "\114\uff85\001\002\000\006\112\uff81\117\u0107\001\002\000" +
-    "\004\114\uff8d\001\002\000\006\114\u0103\121\u0104\001\002" +
-    "\000\006\112\uff83\117\uff83\001\002\000\004\114\u0105\001" +
-    "\002\000\006\112\uff82\117\uff82\001\002\000\004\112\u010c" +
-    "\001\002\000\004\114\u010b\001\002\000\006\112\uff80\117" +
-    "\u0107\001\002\000\006\112\uff7e\117\uff7e\001\002\000\006" +
-    "\112\uff7f\117\uff7f\001\002\000\006\112\uff7d\117\uff7d\001" +
-    "\002\000\004\115\u010e\001\002\000\004\114\uff84\001\002" +
-    "\000\004\117\u010f\001\002\000\004\114\uff7c\001\002\000" +
-    "\004\114\uff8f\001\002\000\010\114\uff92\117\u0115\121\u0116" +
-    "\001\002\000\006\114\uff94\121\u0114\001\002\000\004\114" +
-    "\uff93\001\002\000\004\114\uff95\001\002\000\004\114\uff90" +
-    "\001\002\000\004\114\uff91\001\002\000\004\116\u0119\001" +
-    "\002\000\004\114\uffb2\001\002\000\004\114\uffa3\001\002" +
-    "\000\054\003\uffbf\004\uffbf\006\uffbf\010\uffbf\011\uffbf\013" +
-    "\uffbf\017\uffbf\020\uffbf\023\uffbf\031\uffbf\033\uffbf\034\uffbf" +
-    "\035\uffbf\036\uffbf\063\uffbf\064\uffbf\110\uffbf\111\uffbf\114" +
-    "\uffbf\117\uffbf\120\uffbf\001\002\000\004\042\275\001\002" +
-    "\000\006\006\uff56\042\uff56\001\002\000\006\006\u011f\042" +
-    "\275\001\002\000\006\006\uff57\042\uff57\001\002\000\004" +
-    "\041\u0120\001\002\000\004\114\uffa8\001\002\000\004\114" +
-    "\uffb4\001\002\000\004\070\u0123\001\002\000\004\117\u0124" +
-    "\001\002\000\004\065\u0125\001\002\000\004\117\u0126\001" +
-    "\002\000\004\066\u0127\001\002\000\004\117\u0128\001\002" +
-    "\000\004\114\uff9d\001\002\000\004\114\uffb7\001\002\000" +
-    "\004\121\u012b\001\002\000\004\114\uffa0\001\002\000\004" +
-    "\114\uffa9\001\002\000\004\114\uffb8\001\002\000\004\067" +
-    "\u012f\001\002\000\004\117\u0130\001\002\000\004\117\u0131" +
-    "\001\002\000\006\070\u0132\114\uffa1\001\002\000\004\117" +
-    "\u0133\001\002\000\004\065\u0134\001\002\000\004\117\u0135" +
-    "\001\002\000\004\114\uffa2\001\002\000\004\114\uffb9\001" +
-    "\002\000\006\002\uffc8\012\uffc8\001\002\000\010\002\uff74" +
-    "\012\uff74\026\uff74\001\002\000\004\117\u013c\001\002\000" +
-    "\010\002\uff76\012\uff76\026\u0139\001\002\000\010\002\uff75" +
-    "\012\uff75\026\uff75\001\002\000\004\116\u013d\001\002\000" +
-    "\004\114\u013e\001\002\000\010\002\uff73\012\uff73\026\uff73" +
-    "\001\002\000\004\117\u0140\001\002\000\004\114\u0141\001" +
-    "\002\000\054\003\uffc4\004\uffc4\006\uffc4\010\uffc4\011\uffc4" +
-    "\013\uffc4\017\uffc4\020\uffc4\023\uffc4\031\uffc4\033\uffc4\034" +
-    "\uffc4\035\uffc4\036\uffc4\063\uffc4\064\uffc4\110\uffc4\111\uffc4" +
-    "\114\uffc4\117\uffc4\120\uffc4\001\002\000\010\002\uffdc\007" +
-    "\uffdc\012\uffdc\001\002\000\006\006\uff58\042\275\001\002" +
-    "\000\006\006\uff59\042\275\001\002\000\004\006\u0146\001" +
-    "\002\000\004\041\u0147\001\002\000\004\114\u0148\001\002" +
-    "\000\020\002\uff5a\006\uff5a\007\uff5a\012\uff5a\025\uff5a\035" +
-    "\uff5a\036\uff5a\001\002\000\020\002\uff64\007\uff64\012\uff64" +
-    "\025\uff64\034\uff64\035\uff64\036\uff64\001\002\000\004\116" +
-    "\u014b\001\002\000\004\116\u014c\001\002\000\004\114\u014d" +
-    "\001\002\000\020\002\uff66\007\uff66\012\uff66\033\uff66\034" +
-    "\uff66\035\uff66\036\uff66\001\002\000\004\030\u0150\001\002" +
-    "\000\006\006\uff6b\030\uff6b\001\002\000\004\116\u0157\001" +
-    "\002\000\006\006\u0153\030\u0150\001\002\000\006\006\uff6c" +
-    "\030\uff6c\001\002\000\004\027\u0155\001\002\000\022\002" +
-    "\uff6e\007\uff6e\012\uff6e\032\uff6e\033\uff6e\034\uff6e\035\uff6e" +
-    "\036\uff6e\001\002\000\004\114\u0156\001\002\000\022\002" +
-    "\uff69\007\uff69\012\uff69\032\uff69\033\uff69\034\uff69\035\uff69" +
-    "\036\uff69\001\002\000\004\116\u0158\001\002\000\004\116" +
-    "\u0159\001\002\000\040\006\ufffa\072\ufffa\073\ufffa\074\ufffa" +
-    "\075\ufffa\076\ufffa\077\ufffa\100\ufffa\101\ufffa\102\ufffa\103" +
-    "\ufffa\104\ufffa\105\ufffa\106\ufffa\107\ufffa\001\002\000\004" +
-    "\006\u015b\001\002\000\004\030\u015c\001\002\000\004\114" +
-    "\u015d\001\002\000\006\006\uff6a\030\uff6a\001\002\000\024" +
-    "\002\uff68\007\uff68\012\uff68\027\uff68\032\uff68\033\uff68\034" +
-    "\uff68\035\uff68\036\uff68\001\002\000\032\002\uffe2\007\uffe2" +
-    "\012\uffe2\021\uffe2\024\uffe2\027\uffe2\031\uffe2\032\uffe2\033" +
-    "\uffe2\034\uffe2\035\uffe2\036\uffe2\001\002\000\004\114\u0161" +
-    "\001\002\000\032\002\uffe0\007\uffe0\012\uffe0\021\uffe0\024" +
-    "\uffe0\027\uffe0\031\uffe0\032\uffe0\033\uffe0\034\uffe0\035\uffe0" +
-    "\036\uffe0\001\002\000\004\117\016\001\002\000\004\114" +
-    "\u0164\001\002\000\006\014\ufffd\015\ufffd\001\002\000\004" +
-    "\117\016\001\002\000\004\114\u0167\001\002\000\006\014" +
-    "\ufffc\015\ufffc\001\002\000\004\114\u0169\001\002\000\006" +
-    "\005\uffff\022\uffff\001\002" });
+    "\111\uffc0\114\uffc0\117\uffc0\120\uffc0\001\002\000\006\002" +
+    "\uffc9\012\uffc9\001\002\000\006\002\uffcc\012\156\001\002" +
+    "\000\006\002\uffca\012\uffca\001\002\000\052\003\216\004" +
+    "\203\010\201\011\220\013\221\017\231\020\177\023\207" +
+    "\031\227\033\225\034\200\035\062\036\065\063\232\064" +
+    "\224\110\215\111\212\114\uffba\117\175\120\211\001\002" +
+    "\000\054\003\uffc0\004\uffc0\006\166\010\uffc0\011\uffc0\013" +
+    "\uffc0\017\uffc0\020\uffc0\023\uffc0\031\uffc0\033\uffc0\034\uffc0" +
+    "\035\uffc0\036\uffc0\063\uffc0\064\uffc0\110\uffc0\111\uffc0\114" +
+    "\uffc0\117\uffc0\120\uffc0\001\002\000\004\071\171\001\002" +
+    "\000\054\003\uffc1\004\uffc1\006\uffc1\010\uffc1\011\uffc1\013" +
+    "\uffc1\017\uffc1\020\uffc1\023\uffc1\031\uffc1\033\uffc1\034\uffc1" +
+    "\035\uffc1\036\uffc1\063\uffc1\064\uffc1\110\uffc1\111\uffc1\114" +
+    "\uffc1\117\uffc1\120\uffc1\001\002\000\010\002\uffc5\012\uffc5" +
+    "\026\uffc5\001\002\000\004\114\172\001\002\000\010\002" +
+    "\uffc3\012\uffc3\026\uffc3\001\002\000\054\003\uffc2\004\uffc2" +
+    "\006\uffc2\010\uffc2\011\uffc2\013\uffc2\017\uffc2\020\uffc2\023" +
+    "\uffc2\031\uffc2\033\uffc2\034\uffc2\035\uffc2\036\uffc2\063\uffc2" +
+    "\064\uffc2\110\uffc2\111\uffc2\114\uffc2\117\uffc2\120\uffc2\001" +
+    "\002\000\010\002\uffc6\012\uffc6\026\uffc6\001\002\000\004" +
+    "\115\u013c\001\002\000\004\114\uffac\001\002\000\004\121" +
+    "\u0134\001\002\000\004\116\u0132\001\002\000\004\117\u0130" +
+    "\001\002\000\004\114\uffbb\001\002\000\004\117\016\001" +
+    "\002\000\004\114\u0121\001\002\000\004\114\uffbd\001\002" +
+    "\000\004\114\u0120\001\002\000\004\117\u011d\001\002\000" +
+    "\004\114\uffad\001\002\000\014\114\uff96\116\u0115\117\u0114" +
+    "\121\u0116\122\u0117\001\002\000\004\121\u0106\001\002\000" +
+    "\004\114\uffae\001\002\000\004\114\uffb1\001\002\000\004" +
+    "\114\365\001\002\000\004\114\uffbc\001\002\000\004\114" +
+    "\uffaf\001\002\000\004\121\364\001\002\000\004\117\356" +
+    "\001\002\000\004\114\uffbe\001\002\000\004\114\uff98\001" +
+    "\002\000\006\035\062\036\065\001\002\000\004\114\uffaa" +
+    "\001\002\000\004\114\uff97\001\002\000\004\114\uffab\001" +
+    "\002\000\004\114\uffb0\001\002\000\004\117\016\001\002" +
+    "\000\004\062\233\001\002\000\034\043\253\044\240\045" +
+    "\244\046\237\047\246\050\250\051\242\052\241\053\251" +
+    "\054\247\055\245\056\243\057\252\001\002\000\004\006" +
+    "\235\001\002\000\004\063\236\001\002\000\004\114\uffa4" +
+    "\001\002\000\004\116\341\001\002\000\004\116\336\001" +
+    "\002\000\004\116\333\001\002\000\004\116\330\001\002" +
+    "\000\004\116\325\001\002\000\004\116\322\001\002\000" +
+    "\004\116\316\001\002\000\004\116\313\001\002\000\004" +
+    "\116\276\001\002\000\004\116\273\001\002\000\004\116" +
+    "\262\001\002\000\004\116\257\001\002\000\004\116\254" +
+    "\001\002\000\004\121\255\001\002\000\004\114\256\001" +
+    "\002\000\006\006\uff4f\062\uff4f\001\002\000\004\116\260" +
+    "\001\002\000\004\114\261\001\002\000\006\006\uff47\062" +
+    "\uff47\001\002\000\004\114\263\001\002\000\006\006\uff52" +
+    "\062\233\001\002\000\004\006\270\001\002\000\006\006" +
+    "\uff53\062\233\001\002\000\006\006\uff50\062\uff50\001\002" +
+    "\000\006\006\uff51\062\uff51\001\002\000\004\060\271\001" +
+    "\002\000\004\114\272\001\002\000\006\006\uff44\062\uff44" +
+    "\001\002\000\010\116\141\121\143\122\144\001\002\000" +
+    "\004\114\275\001\002\000\006\006\uff4a\062\uff4a\001\002" +
+    "\000\004\114\277\001\002\000\004\042\301\001\002\000" +
+    "\004\006\310\001\002\000\004\116\302\001\002\000\004" +
+    "\114\303\001\002\000\006\006\uff52\062\233\001\002\000" +
+    "\004\006\305\001\002\000\004\042\306\001\002\000\004" +
+    "\114\307\001\002\000\006\006\uff54\042\uff54\001\002\000" +
+    "\004\061\311\001\002\000\004\114\312\001\002\000\006" +
+    "\006\uff43\062\uff43\001\002\000\004\121\314\001\002\000" +
+    "\004\114\315\001\002\000\006\006\uff4b\062\uff4b\001\002" +
+    "\000\004\116\317\001\002\000\004\116\320\001\002\000" +
+    "\004\114\321\001\002\000\006\006\uff46\062\uff46\001\002" +
+    "\000\004\121\323\001\002\000\004\114\324\001\002\000" +
+    "\006\006\uff4c\062\uff4c\001\002\000\004\116\326\001\002" +
+    "\000\004\114\327\001\002\000\006\006\uff45\062\uff45\001" +
+    "\002\000\010\116\141\121\143\122\144\001\002\000\004" +
+    "\114\332\001\002\000\006\006\uff48\062\uff48\001\002\000" +
+    "\010\116\141\121\143\122\144\001\002\000\004\114\335" +
+    "\001\002\000\006\006\uff49\062\uff49\001\002\000\004\121" +
+    "\337\001\002\000\004\114\340\001\002\000\006\006\uff4d" +
+    "\062\uff4d\001\002\000\004\121\342\001\002\000\004\114" +
+    "\343\001\002\000\006\006\uff4e\062\uff4e\001\002\000\004" +
+    "\114\uff9e\001\002\000\004\114\uffb5\001\002\000\004\114" +
+    "\347\001\002\000\006\035\062\036\065\001\002\000\010" +
+    "\006\uffa5\035\uffa5\036\uffa5\001\002\000\010\006\352\035" +
+    "\062\036\065\001\002\000\004\064\354\001\002\000\010" +
+    "\006\uffa6\035\uffa6\036\uffa6\001\002\000\004\114\uffa7\001" +
+    "\002\000\004\114\uffb3\001\002\000\012\116\360\117\357" +
+    "\121\361\122\362\001\002\000\004\114\uff9b\001\002\000" +
+    "\004\114\uff99\001\002\000\004\114\uff9c\001\002\000\004" +
+    "\114\uff9a\001\002\000\004\114\uffb6\001\002\000\004\114" +
+    "\uff9f\001\002\000\006\112\uff8a\121\uff8a\001\002\000\006" +
+    "\112\uff89\121\372\001\002\000\004\114\uff8d\001\002\000" +
+    "\004\112\u0101\001\002\000\006\112\uff86\121\uff86\001\002" +
+    "\000\004\115\375\001\002\000\006\112\uff88\121\372\001" +
+    "\002\000\006\112\uff87\121\uff87\001\002\000\004\117\376" +
+    "\001\002\000\004\114\377\001\002\000\006\112\uff85\121" +
+    "\uff85\001\002\000\004\114\uff8b\001\002\000\004\115\u0102" +
+    "\001\002\000\004\117\u0103\001\002\000\004\114\uff84\001" +
+    "\002\000\006\112\uff80\117\u010b\001\002\000\004\114\uff8c" +
+    "\001\002\000\006\114\u0107\121\u0108\001\002\000\006\112" +
+    "\uff82\117\uff82\001\002\000\004\114\u0109\001\002\000\006" +
+    "\112\uff81\117\uff81\001\002\000\004\112\u0110\001\002\000" +
+    "\004\114\u010f\001\002\000\006\112\uff7f\117\u010b\001\002" +
+    "\000\006\112\uff7d\117\uff7d\001\002\000\006\112\uff7e\117" +
+    "\uff7e\001\002\000\006\112\uff7c\117\uff7c\001\002\000\004" +
+    "\115\u0112\001\002\000\004\114\uff83\001\002\000\004\117" +
+    "\u0113\001\002\000\004\114\uff7b\001\002\000\010\114\uff92" +
+    "\117\u011b\121\u011c\001\002\000\006\114\uff8e\117\u0119\001" +
+    "\002\000\006\114\uff94\121\u0118\001\002\000\004\114\uff93" +
+    "\001\002\000\004\114\uff95\001\002\000\004\117\u011a\001" +
+    "\002\000\004\114\uff8f\001\002\000\004\114\uff90\001\002" +
+    "\000\004\114\uff91\001\002\000\004\116\u011f\001\002\000" +
+    "\004\114\uffb2\001\002\000\004\114\uffa3\001\002\000\054" +
+    "\003\uffbf\004\uffbf\006\uffbf\010\uffbf\011\uffbf\013\uffbf\017" +
+    "\uffbf\020\uffbf\023\uffbf\031\uffbf\033\uffbf\034\uffbf\035\uffbf" +
+    "\036\uffbf\063\uffbf\064\uffbf\110\uffbf\111\uffbf\114\uffbf\117" +
+    "\uffbf\120\uffbf\001\002\000\004\042\301\001\002\000\006" +
+    "\006\u0125\042\301\001\002\000\006\006\uff55\042\uff55\001" +
+    "\002\000\006\006\uff56\042\uff56\001\002\000\004\041\u0126" +
+    "\001\002\000\004\114\uffa8\001\002\000\004\114\uffb4\001" +
+    "\002\000\004\070\u0129\001\002\000\004\117\u012a\001\002" +
+    "\000\004\065\u012b\001\002\000\004\117\u012c\001\002\000" +
+    "\004\066\u012d\001\002\000\004\117\u012e\001\002\000\004" +
+    "\114\uff9d\001\002\000\004\114\uffb7\001\002\000\004\121" +
+    "\u0131\001\002\000\004\114\uffa0\001\002\000\004\114\uffa9" +
+    "\001\002\000\004\114\uffb8\001\002\000\004\067\u0135\001" +
+    "\002\000\004\117\u0136\001\002\000\004\117\u0137\001\002" +
+    "\000\006\070\u0138\114\uffa1\001\002\000\004\117\u0139\001" +
+    "\002\000\004\065\u013a\001\002\000\004\117\u013b\001\002" +
+    "\000\004\114\uffa2\001\002\000\004\114\uffb9\001\002\000" +
+    "\006\002\uffc8\012\uffc8\001\002\000\010\002\uff73\012\uff73" +
+    "\026\uff73\001\002\000\004\117\u0142\001\002\000\010\002" +
+    "\uff75\012\uff75\026\u013f\001\002\000\010\002\uff74\012\uff74" +
+    "\026\uff74\001\002\000\004\116\u0143\001\002\000\004\114" +
+    "\u0144\001\002\000\010\002\uff72\012\uff72\026\uff72\001\002" +
+    "\000\004\117\u0146\001\002\000\004\114\u0147\001\002\000" +
+    "\054\003\uffc4\004\uffc4\006\uffc4\010\uffc4\011\uffc4\013\uffc4" +
+    "\017\uffc4\020\uffc4\023\uffc4\031\uffc4\033\uffc4\034\uffc4\035" +
+    "\uffc4\036\uffc4\063\uffc4\064\uffc4\110\uffc4\111\uffc4\114\uffc4" +
+    "\117\uffc4\120\uffc4\001\002\000\010\002\uffdc\007\uffdc\012" +
+    "\uffdc\001\002\000\006\006\uff57\042\301\001\002\000\006" +
+    "\006\uff58\042\301\001\002\000\004\006\u014c\001\002\000" +
+    "\004\041\u014d\001\002\000\004\114\u014e\001\002\000\020" +
+    "\002\uff59\006\uff59\007\uff59\012\uff59\025\uff59\035\uff59\036" +
+    "\uff59\001\002\000\020\002\uff63\007\uff63\012\uff63\025\uff63" +
+    "\034\uff63\035\uff63\036\uff63\001\002\000\004\030\u0152\001" +
+    "\002\000\006\006\uff6a\030\uff6a\001\002\000\004\116\u0159" +
+    "\001\002\000\006\006\u0155\030\u0152\001\002\000\006\006" +
+    "\uff6b\030\uff6b\001\002\000\004\027\u0157\001\002\000\022" +
+    "\002\uff6d\007\uff6d\012\uff6d\032\uff6d\033\uff6d\034\uff6d\035" +
+    "\uff6d\036\uff6d\001\002\000\004\114\u0158\001\002\000\022" +
+    "\002\uff68\007\uff68\012\uff68\032\uff68\033\uff68\034\uff68\035" +
+    "\uff68\036\uff68\001\002\000\004\116\u015a\001\002\000\004" +
+    "\116\u015b\001\002\000\040\006\ufffa\072\ufffa\073\ufffa\074" +
+    "\ufffa\075\ufffa\076\ufffa\077\ufffa\100\ufffa\101\ufffa\102\ufffa" +
+    "\103\ufffa\104\ufffa\105\ufffa\106\ufffa\107\ufffa\001\002\000" +
+    "\004\006\u015d\001\002\000\004\030\u015e\001\002\000\004" +
+    "\114\u015f\001\002\000\006\006\uff69\030\uff69\001\002\000" +
+    "\024\002\uff67\007\uff67\012\uff67\027\uff67\032\uff67\033\uff67" +
+    "\034\uff67\035\uff67\036\uff67\001\002\000\032\002\uffe2\007" +
+    "\uffe2\012\uffe2\021\uffe2\024\uffe2\027\uffe2\031\uffe2\032\uffe2" +
+    "\033\uffe2\034\uffe2\035\uffe2\036\uffe2\001\002\000\004\114" +
+    "\u0163\001\002\000\032\002\uffe0\007\uffe0\012\uffe0\021\uffe0" +
+    "\024\uffe0\027\uffe0\031\uffe0\032\uffe0\033\uffe0\034\uffe0\035" +
+    "\uffe0\036\uffe0\001\002\000\004\117\016\001\002\000\004" +
+    "\114\u0166\001\002\000\006\014\ufffd\015\ufffd\001\002\000" +
+    "\004\117\016\001\002\000\004\114\u0169\001\002\000\006" +
+    "\014\ufffc\015\ufffc\001\002\000\004\114\u016b\001\002\000" +
+    "\006\005\uffff\022\uffff\001\002" });
 
   /** Access to parse-action table. */
   public short[][] action_table() {return _action_table;}
@@ -409,141 +410,141 @@ public class parser
   /** <code>reduce_goto</code> table. */
   protected static final short[][] _reduce_table = 
     unpackFromStrings(new String[] {
-    "\000\u0167\000\006\030\005\046\004\001\001\000\002\001" +
+    "\000\u0169\000\006\030\005\046\004\001\001\000\002\001" +
     "\001\000\004\014\011\001\001\000\002\001\001\000\002" +
-    "\001\001\000\006\132\u0164\133\070\001\001\000\006\132" +
-    "\u0161\133\070\001\001\000\004\052\012\001\001\000\010" +
+    "\001\001\000\006\132\u0166\133\074\001\001\000\006\132" +
+    "\u0163\133\074\001\001\000\004\052\012\001\001\000\010" +
     "\025\024\026\023\027\021\001\001\000\002\001\001\000" +
     "\004\003\016\001\001\000\002\001\001\000\002\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
-    "\004\003\u015f\001\001\000\004\027\u015e\001\001\000\010" +
-    "\065\025\066\026\067\030\001\001\000\004\104\036\001" +
+    "\004\003\u0161\001\001\000\004\027\u0160\001\001\000\010" +
+    "\065\025\066\026\067\027\001\001\000\004\104\036\001" +
     "\001\000\004\067\034\001\001\000\002\001\001\000\002" +
     "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\004\100\040" +
-    "\001\001\000\002\001\001\000\004\105\042\001\001\000" +
-    "\002\001\001\000\006\006\044\111\045\001\001\000\002" +
-    "\001\001\000\002\001\001\000\006\007\046\112\047\001" +
-    "\001\000\002\001\001\000\012\113\053\114\056\121\057" +
-    "\127\054\001\001\000\002\001\001\000\002\001\001\000" +
-    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
-    "\001\001\000\006\113\053\114\u0141\001\001\000\012\021" +
-    "\065\022\062\023\061\074\064\001\001\000\002\001\001" +
-    "\000\014\016\153\041\155\042\152\043\150\070\154\001" +
-    "\001\000\010\075\140\076\143\077\141\001\001\000\006" +
-    "\132\067\133\070\001\001\000\002\001\001\000\006\022" +
-    "\062\074\066\001\001\000\002\001\001\000\002\001\001" +
-    "\000\010\010\075\011\110\012\111\001\001\000\002\001" +
-    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\001\001\000\002\001\001\000\004\105\041\001\001\000" +
+    "\006\006\047\111\051\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\006\007\052" +
+    "\112\053\001\001\000\002\001\001\000\012\113\057\114" +
+    "\062\121\063\127\060\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\006\113\057\114\u0147\001\001" +
+    "\000\012\021\071\022\066\023\065\074\070\001\001\000" +
+    "\002\001\001\000\014\016\157\041\161\042\156\043\154" +
+    "\070\160\001\001\000\010\075\144\076\147\077\145\001" +
+    "\001\000\006\132\073\133\074\001\001\000\002\001\001" +
+    "\000\006\022\066\074\072\001\001\000\002\001\001\000" +
+    "\002\001\001\000\010\010\101\011\114\012\115\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
     "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
     "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
-    "\001\000\002\001\001\000\004\010\112\001\001\000\002" +
-    "\001\001\000\002\001\001\000\002\001\001\000\004\004" +
-    "\116\001\001\000\004\005\135\001\001\000\002\001\001" +
-    "\000\004\006\127\001\001\000\002\001\001\000\004\006" +
-    "\122\001\001\000\004\007\123\001\001\000\010\113\053" +
-    "\114\125\127\124\001\001\000\002\001\001\000\006\113" +
-    "\053\114\126\001\001\000\002\001\001\000\004\007\130" +
-    "\001\001\000\010\113\053\114\132\127\131\001\001\000" +
-    "\002\001\001\000\006\113\053\114\133\001\001\000\002" +
-    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
-    "\000\002\001\001\000\004\077\144\001\001\000\002\001" +
+    "\000\002\001\001\000\002\001\001\000\004\010\116\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
-    "\000\002\001\001\000\006\132\u013e\133\070\001\001\000" +
-    "\010\071\u0136\072\u0139\073\u0137\001\001\000\012\020\163" +
-    "\047\162\050\160\134\157\001\001\000\002\001\001\000" +
-    "\010\016\153\042\152\070\156\001\001\000\002\001\001" +
-    "\000\034\015\221\017\200\024\215\031\175\045\216\051" +
-    "\201\106\207\107\223\110\212\113\177\120\206\123\203" +
-    "\124\171\001\001\000\010\020\167\047\166\134\157\001" +
+    "\000\004\004\122\001\001\000\004\005\141\001\001\000" +
+    "\002\001\001\000\004\006\133\001\001\000\002\001\001" +
+    "\000\004\006\126\001\001\000\004\007\127\001\001\000" +
+    "\010\113\057\114\131\127\130\001\001\000\002\001\001" +
+    "\000\006\113\057\114\132\001\001\000\002\001\001\000" +
+    "\004\007\134\001\001\000\010\113\057\114\136\127\135" +
+    "\001\001\000\002\001\001\000\006\113\057\114\137\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
-    "\002\001\001\000\002\001\001\000\002\001\001\000\004" +
-    "\063\u012c\001\001\000\002\001\001\000\004\032\u0128\001" +
-    "\001\000\002\001\001\000\006\003\u0121\013\u0120\001\001" +
+    "\002\001\001\000\002\001\001\000\004\077\150\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
-    "\004\064\u0117\001\001\000\002\001\001\000\002\001\001" +
-    "\000\006\053\u0100\054\377\001\001\000\002\001\001\000" +
-    "\002\001\001\000\006\033\362\034\361\001\001\000\002" +
-    "\001\001\000\002\001\001\000\004\055\356\001\001\000" +
-    "\004\044\350\001\001\000\002\001\001\000\002\001\001" +
-    "\000\004\113\341\001\001\000\002\001\001\000\002\001" +
-    "\001\000\002\001\001\000\002\001\001\000\006\003\337" +
-    "\062\340\001\001\000\004\122\227\001\001\000\002\001" +
-    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\002\001\001\000\002\001\001\000\006\132\u0144\133\074" +
+    "\001\001\000\010\071\u013c\072\u013f\073\u013d\001\001\000" +
+    "\012\020\167\047\166\050\164\134\163\001\001\000\002" +
+    "\001\001\000\010\016\157\042\156\070\162\001\001\000" +
+    "\002\001\001\000\034\015\225\017\204\024\221\031\201" +
+    "\045\222\051\205\106\213\107\227\110\216\113\203\120" +
+    "\212\123\207\124\175\001\001\000\010\020\173\047\172" +
+    "\134\163\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\004\063\u0132\001\001\000\002\001\001\000\004" +
+    "\032\u012e\001\001\000\002\001\001\000\006\003\u0127\013" +
+    "\u0126\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\004\064\u011d\001\001\000\002\001\001\000" +
+    "\002\001\001\000\006\053\u0104\054\u0103\001\001\000\002" +
+    "\001\001\000\002\001\001\000\006\033\366\034\365\001" +
+    "\001\000\002\001\001\000\002\001\001\000\004\055\362" +
+    "\001\001\000\004\044\354\001\001\000\002\001\001\000" +
+    "\002\001\001\000\004\113\345\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\006\003\343\062\344\001\001\000\004\122\233\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
     "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
     "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
     "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
-    "\001\001\000\010\117\260\122\261\131\257\001\001\000" +
-    "\002\001\001\000\004\122\262\001\001\000\002\001\001" +
-    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
-    "\002\001\001\000\004\005\267\001\001\000\002\001\001" +
-    "\000\002\001\001\000\002\001\001\000\004\116\273\001" +
-    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
-    "\000\010\117\260\122\261\131\277\001\001\000\002\001" +
-    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\010\117\264\122\265\131\263" +
+    "\001\001\000\002\001\001\000\004\122\266\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\004\005\273\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\004" +
+    "\116\277\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\010\117\264\122\265\131\303\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
     "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
     "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
-    "\004\005\324\001\001\000\002\001\001\000\002\001\001" +
-    "\000\004\005\327\001\001\000\002\001\001\000\002\001" +
-    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\004\005\330\001\001\000\002\001\001\000" +
+    "\002\001\001\000\004\005\333\001\001\000\002\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
-    "\002\001\001\000\002\001\001\000\002\001\001\000\010" +
-    "\113\053\114\343\125\344\001\001\000\002\001\001\000" +
-    "\006\113\053\114\346\001\001\000\002\001\001\000\002" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
     "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\001\000\010\113\057\114\347\125\350\001\001\000\002" +
+    "\001\001\000\006\113\057\114\352\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
-    "\002\001\001\000\010\036\364\037\363\040\365\001\001" +
-    "\000\002\001\001\000\004\035\374\001\001\000\002\001" +
-    "\001\000\004\036\372\001\001\000\002\001\001\000\002" +
-    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
-    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
-    "\000\002\001\001\000\010\057\u0108\060\u0105\061\u0107\001" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\010\036\370\037\367\040" +
+    "\372\001\001\000\002\001\001\000\004\035\377\001\001" +
+    "\000\002\001\001\000\002\001\001\000\004\036\373\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
-    "\000\002\001\001\000\002\001\001\000\004\056\u010c\001" +
-    "\001\000\002\001\001\000\004\057\u0109\001\001\000\002" +
-    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\010\057\u010c\060\u0109" +
+    "\061\u010b\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\004" +
+    "\056\u0110\001\001\000\002\001\001\000\004\057\u010d\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
     "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
     "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
-    "\001\000\002\001\001\000\006\115\u011c\116\u011b\001\001" +
-    "\000\002\001\001\000\004\116\u011d\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\006\115\u0121\116\u0122\001\001\000\004" +
+    "\116\u0123\001\001\000\002\001\001\000\002\001\001\000" +
     "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
     "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
     "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
     "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
-    "\001\000\002\001\001\000\004\073\u013a\001\001\000\002" +
-    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
-    "\000\002\001\001\000\010\115\u0143\116\u011b\130\u0144\001" +
-    "\001\000\004\116\u011d\001\001\000\002\001\001\000\002" +
-    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\004\073\u0140\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\010\115\u0149\116\u0122\130\u014a\001\001\000" +
+    "\004\116\u0123\001\001\000\002\001\001\000\002\001\001" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\006\101\u0152\102\u0150\001\001\000\002\001\001\000\002" +
+    "\001\001\000\006\102\u0153\103\u0155\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
-    "\000\002\001\001\000\006\101\u0150\102\u014e\001\001\000" +
-    "\002\001\001\000\002\001\001\000\006\102\u0151\103\u0153" +
+    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
+    "\006\132\u015b\133\074\001\001\000\002\001\001\000\002" +
     "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
-    "\000\002\001\001\000\006\132\u0159\133\070\001\001\000" +
-    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
-    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
-    "\001\000\002\001\001\000\004\003\u0162\001\001\000\002" +
-    "\001\001\000\002\001\001\000\004\003\u0165\001\001\000" +
-    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
-    "\001\001" });
+    "\000\004\003\u0164\001\001\000\002\001\001\000\002\001" +
+    "\001\000\004\003\u0167\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001" });
 
   /** Access to <code>reduce_goto</code> table. */
   public short[][] reduce_table() {return _reduce_table;}
@@ -654,7 +655,7 @@ class CUP$parser$actions {
       switch (CUP$parser$act_num)
         {
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 189: // elem_val_pair ::= DELEM ANN_KIND Str SEP annotation DEND DANNOT_ELEM SEP 
+          case 190: // elem_val_pair ::= DELEM ANN_KIND Str SEP annotation DEND DANNOT_ELEM SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left;
@@ -671,7 +672,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 188: // elem_val_pair ::= DELEM ARR_KIND Str SEP elem_val_pair_list_opt DEND DARR_ELEM SEP 
+          case 189: // elem_val_pair ::= DELEM ARR_KIND Str SEP elem_val_pair_list_opt DEND DARR_ELEM SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left;
@@ -688,7 +689,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 187: // elem_val_pair ::= DELEM CLS_KIND Str Str SEP 
+          case 188: // elem_val_pair ::= DELEM CLS_KIND Str Str SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -705,7 +706,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 186: // elem_val_pair ::= DELEM ENUM_KIND Str Str Str SEP 
+          case 187: // elem_val_pair ::= DELEM ENUM_KIND Str Str Str SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left;
@@ -725,7 +726,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 185: // elem_val_pair ::= DELEM STR_KIND Str Str SEP 
+          case 186: // elem_val_pair ::= DELEM STR_KIND Str Str SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -742,7 +743,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 184: // elem_val_pair ::= DELEM DOUB_KIND Str item SEP 
+          case 185: // elem_val_pair ::= DELEM DOUB_KIND Str item SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -759,7 +760,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 183: // elem_val_pair ::= DELEM FLOAT_KIND Str item SEP 
+          case 184: // elem_val_pair ::= DELEM FLOAT_KIND Str item SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -776,7 +777,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 182: // elem_val_pair ::= DELEM LONG_KIND Str item SEP 
+          case 183: // elem_val_pair ::= DELEM LONG_KIND Str item SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -793,7 +794,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 181: // elem_val_pair ::= DELEM BOOL_KIND Str Int SEP 
+          case 182: // elem_val_pair ::= DELEM BOOL_KIND Str Int SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -810,7 +811,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 180: // elem_val_pair ::= DELEM CHAR_KIND Str Int SEP 
+          case 181: // elem_val_pair ::= DELEM CHAR_KIND Str Int SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -827,7 +828,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 179: // elem_val_pair ::= DELEM BYTE_KIND Str Int SEP 
+          case 180: // elem_val_pair ::= DELEM BYTE_KIND Str Int SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -844,7 +845,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 178: // elem_val_pair ::= DELEM SHORT_KIND Str Int SEP 
+          case 179: // elem_val_pair ::= DELEM SHORT_KIND Str Int SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -861,7 +862,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 177: // elem_val_pair ::= DELEM INT_KIND Str Int SEP 
+          case 178: // elem_val_pair ::= DELEM INT_KIND Str Int SEP 
             {
               Object RESULT = null;
 		int nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -878,7 +879,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 176: // elem_val_pair_list ::= elem_val_pair 
+          case 177: // elem_val_pair_list ::= elem_val_pair 
             {
               Object RESULT = null;
 		int elemleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
@@ -892,7 +893,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 175: // elem_val_pair_list ::= elem_val_pair_list elem_val_pair 
+          case 176: // elem_val_pair_list ::= elem_val_pair_list elem_val_pair 
             {
               Object RESULT = null;
 		int listleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left;
@@ -909,7 +910,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 174: // elem_val_pair_list_opt ::= 
+          case 175: // elem_val_pair_list_opt ::= 
             {
               Object RESULT = null;
 		
@@ -920,7 +921,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 173: // elem_val_pair_list_opt ::= elem_val_pair_list 
+          case 174: // elem_val_pair_list_opt ::= elem_val_pair_list 
             {
               Object RESULT = null;
 		int listleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
@@ -934,7 +935,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 172: // annotation ::= DANNOTATION Str SEP elem_val_pair_list_opt DEND DANNOTATION SEP 
+          case 173: // annotation ::= DANNOTATION Str SEP elem_val_pair_list_opt DEND DANNOTATION SEP 
             {
               Object RESULT = null;
 		int annotation_typeleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left;
@@ -951,7 +952,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 171: // annotation_list ::= annotation 
+          case 172: // annotation_list ::= annotation 
             {
               Object RESULT = null;
 		int elemleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
@@ -965,7 +966,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 170: // annotation_list ::= annotation_list annotation 
+          case 171: // annotation_list ::= annotation_list annotation 
             {
               Object RESULT = null;
 		int listleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left;
@@ -982,7 +983,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 169: // annotation_list_opt ::= 
+          case 170: // annotation_list_opt ::= 
             {
               Object RESULT = null;
 		
@@ -993,7 +994,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 168: // annotation_list_opt ::= annotation_list 
+          case 169: // annotation_list_opt ::= annotation_list 
             {
               Object RESULT = null;
 		int listleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
@@ -1007,7 +1008,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 167: // annotation_attr ::= visibility_type SEP annotation_list_opt DEND DANNOTATION_ATTR SEP 
+          case 168: // annotation_attr ::= visibility_type SEP annotation_list_opt DEND DANNOTATION_ATTR SEP 
             {
               Object RESULT = null;
 		int tvalleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-5)).left;
@@ -1024,7 +1025,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 166: // annotation_attr_opt ::= 
+          case 167: // annotation_attr_opt ::= 
             {
               Object RESULT = null;
 		
@@ -1035,7 +1036,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 165: // annotation_attr_opt ::= annotation_attr 
+          case 166: // annotation_attr_opt ::= annotation_attr 
             {
               Object RESULT = null;
 		int attrleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
@@ -1049,7 +1050,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 164: // param_visibility_type ::= DRUNTIME_PARAM_INVISIBLE 
+          case 165: // param_visibility_type ::= DRUNTIME_PARAM_INVISIBLE 
             {
               Object RESULT = null;
 		 RESULT = "RuntimeInvisibleParameter"; 
@@ -1058,7 +1059,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 163: // param_visibility_type ::= DRUNTIME_PARAM_VISIBLE 
+          case 164: // param_visibility_type ::= DRUNTIME_PARAM_VISIBLE 
             {
               Object RESULT = null;
 		 RESULT = "RuntimeVisibleParameter"; 
@@ -1067,7 +1068,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 162: // visibility_type ::= DRUNTIME_INVISIBLE 
+          case 163: // visibility_type ::= DRUNTIME_INVISIBLE 
             {
               Object RESULT = null;
 		 RESULT = "RuntimeInvisible"; 
@@ -1076,7 +1077,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 161: // visibility_type ::= DRUNTIME_VISIBLE 
+          case 162: // visibility_type ::= DRUNTIME_VISIBLE 
             {
               Object RESULT = null;
 		 RESULT = "RuntimeVisible"; 
@@ -1085,7 +1086,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 160: // signature_attr ::= 
+          case 161: // signature_attr ::= 
             {
               Object RESULT = null;
 		
@@ -1096,7 +1097,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 159: // signature_attr ::= DSIG_ATTR Str SEP 
+          case 160: // signature_attr ::= DSIG_ATTR Str SEP 
             {
               Object RESULT = null;
 		int sigleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left;
@@ -1110,7 +1111,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 158: // deprecated_attr ::= 
+          case 159: // deprecated_attr ::= 
             {
               Object RESULT = null;
 		
@@ -1121,7 +1122,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 157: // deprecated_attr ::= DDEPRECATED SEP 
+          case 158: // deprecated_attr ::= DDEPRECATED SEP 
             {
               Object RESULT = null;
 		
@@ -1132,7 +1133,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 156: // encl_meth_attr ::= 
+          case 157: // encl_meth_attr ::= 
             {
               Object RESULT = null;
 
@@ -1141,7 +1142,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 155: // encl_meth_attr ::= DENCLOSING_METH Str Str Str SEP 
+          case 156: // encl_meth_attr ::= DENCLOSING_METH Str Str Str SEP 
             {
               Object RESULT = null;
 		int cleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left;
@@ -1161,7 +1162,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 154: // synth_attr ::= 
+          case 155: // synth_attr ::= 
             {
               Object RESULT = null;
 
@@ -1170,7 +1171,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 153: // synth_attr ::= DSYNTHETIC SEP 
+          case 154: // synth_attr ::= DSYNTHETIC SEP 
             {
               Object RESULT = null;
 		
@@ -1181,7 +1182,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 152: // end_inner_class_attr ::= DEND DINNER_CLASS_ATTR SEP 
+          case 153: // end_inner_class_attr ::= DEND DINNER_CLASS_ATTR SEP 
             {
               Object RESULT = null;
 		
@@ -1192,7 +1193,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 151: // inner_class_attr_spec ::= DINNER_CLASS_SPEC_ATTR Str Str Str access DEND DINNER_CLASS_SPEC_ATTR SEP 
+          case 152: // inner_class_attr_spec ::= DINNER_CLASS_SPEC_ATTR Str Str Str access DEND DINNER_CLASS_SPEC_ATTR SEP 
             {
               Object RESULT = null;
 		int aleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-6)).left;
@@ -1215,7 +1216,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 150: // inner_class_attr_list ::= inner_class_attr_spec 
+          case 151: // inner_class_attr_list ::= inner_class_attr_spec 
             {
               Object RESULT = null;
 
@@ -1224,7 +1225,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 149: // inner_class_attr_list ::= inner_class_attr_list inner_class_attr_spec 
+          case 150: // inner_class_attr_list ::= inner_class_attr_list inner_class_attr_spec 
             {
               Object RESULT = null;
 
@@ -1233,7 +1234,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 148: // inner_class_attr ::= 
+          case 149: // inner_class_attr ::= 
             {
               Object RESULT = null;
 
@@ -1242,7 +1243,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 147: // inner_class_attr ::= DINNER_CLASS_ATTR SEP inner_class_attr_list end_inner_class_attr 
+          case 148: // inner_class_attr ::= DINNER_CLASS_ATTR SEP inner_class_attr_list end_inner_class_attr 
             {
               Object RESULT = null;
 		
@@ -1253,7 +1254,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 146: // field_attr_spec ::= DFIELD_ATTR Word Str SEP 
+          case 147: // field_attr_spec ::= DFIELD_ATTR Word Str SEP 
             {
               Object RESULT = null;
 		int wleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -1271,7 +1272,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 145: // field_attr_list ::= field_attr_spec 
+          case 146: // field_attr_list ::= field_attr_spec 
             {
               Object RESULT = null;
 
@@ -1280,7 +1281,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 144: // field_attr_list ::= field_attr_list field_attr_spec 
+          case 145: // field_attr_list ::= field_attr_list field_attr_spec 
             {
               Object RESULT = null;
 
@@ -1289,7 +1290,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 143: // field_attrs ::= field_attr_list 
+          case 144: // field_attrs ::= field_attr_list 
             {
               Object RESULT = null;
 
@@ -1298,7 +1299,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 142: // method_attr_spec ::= DMETHOD_ATTR Word Str SEP 
+          case 143: // method_attr_spec ::= DMETHOD_ATTR Word Str SEP 
             {
               Object RESULT = null;
 		int wleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -1316,7 +1317,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 141: // method_attr_list ::= method_attr_spec 
+          case 142: // method_attr_list ::= method_attr_spec 
             {
               Object RESULT = null;
 
@@ -1325,7 +1326,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 140: // method_attr_list ::= method_attr_list method_attr_spec 
+          case 141: // method_attr_list ::= method_attr_list method_attr_spec 
             {
               Object RESULT = null;
 
@@ -1334,7 +1335,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 139: // method_attrs ::= method_attr_list 
+          case 140: // method_attrs ::= method_attr_list 
             {
               Object RESULT = null;
 
@@ -1343,7 +1344,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 138: // class_attr_spec ::= DCLASS_ATTR Word Str SEP 
+          case 139: // class_attr_spec ::= DCLASS_ATTR Word Str SEP 
             {
               Object RESULT = null;
 		int wleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -1361,7 +1362,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 137: // class_attr_list ::= class_attr_spec 
+          case 138: // class_attr_list ::= class_attr_spec 
             {
               Object RESULT = null;
 
@@ -1370,7 +1371,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 136: // class_attr_list ::= class_attr_list class_attr_spec 
+          case 137: // class_attr_list ::= class_attr_list class_attr_spec 
             {
               Object RESULT = null;
 
@@ -1379,7 +1380,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 135: // class_attrs ::= 
+          case 136: // class_attrs ::= 
             {
               Object RESULT = null;
 
@@ -1388,7 +1389,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 134: // class_attrs ::= class_attr_list 
+          case 135: // class_attrs ::= class_attr_list 
             {
               Object RESULT = null;
 
@@ -1397,7 +1398,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 133: // table_default ::= DEFAULT COLON Word 
+          case 134: // table_default ::= DEFAULT COLON Word 
             {
               Object RESULT = null;
 		int wleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
@@ -1411,7 +1412,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 132: // table_entry ::= Word SEP 
+          case 133: // table_entry ::= Word SEP 
             {
               Object RESULT = null;
 		int wleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left;
@@ -1425,7 +1426,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 131: // table_list ::= table_entry 
+          case 132: // table_list ::= table_entry 
             {
               Object RESULT = null;
 
@@ -1434,7 +1435,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 130: // table_list ::= table_list table_entry 
+          case 131: // table_list ::= table_list table_entry 
             {
               Object RESULT = null;
 
@@ -1443,7 +1444,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 129: // table_list_t ::= table_list 
+          case 130: // table_list_t ::= table_list 
             {
               Object RESULT = null;
 
@@ -1452,7 +1453,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 128: // table_list_t ::= 
+          case 129: // table_list_t ::= 
             {
               Object RESULT = null;
 
@@ -1461,7 +1462,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 127: // table_args ::= Int Int SEP 
+          case 128: // table_args ::= Int Int SEP 
             {
               Object RESULT = null;
 		int lowleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
@@ -1478,7 +1479,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 126: // table_args ::= Int SEP 
+          case 127: // table_args ::= Int SEP 
             {
               Object RESULT = null;
 		int lowleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left;
@@ -1492,7 +1493,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 125: // table ::= table_args table_list_t table_default 
+          case 126: // table ::= table_args table_list_t table_default 
             {
               Object RESULT = null;
 
@@ -1501,7 +1502,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 124: // lookup_default ::= DEFAULT COLON Word 
+          case 125: // lookup_default ::= DEFAULT COLON Word 
             {
               Object RESULT = null;
 		int wleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
@@ -1513,7 +1514,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 123: // lookup_entry ::= Int COLON Word SEP 
+          case 124: // lookup_entry ::= Int COLON Word SEP 
             {
               Object RESULT = null;
 		int ileft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left;
@@ -1530,7 +1531,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 122: // lookup_list ::= lookup_entry 
+          case 123: // lookup_list ::= lookup_entry 
             {
               Object RESULT = null;
 
@@ -1539,7 +1540,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 121: // lookup_list ::= lookup_list lookup_entry 
+          case 122: // lookup_list ::= lookup_list lookup_entry 
             {
               Object RESULT = null;
 
@@ -1548,7 +1549,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 120: // lookup_list_t ::= lookup_list 
+          case 121: // lookup_list_t ::= lookup_list 
             {
               Object RESULT = null;
 
@@ -1557,7 +1558,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 119: // lookup_list_t ::= 
+          case 120: // lookup_list_t ::= 
             {
               Object RESULT = null;
 
@@ -1566,7 +1567,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 118: // lookup_args ::= SEP 
+          case 119: // lookup_args ::= SEP 
             {
               Object RESULT = null;
 		 classFile.newLookupswitch(); 
@@ -1575,7 +1576,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 117: // lookup ::= lookup_args lookup_list_t lookup_default 
+          case 118: // lookup ::= lookup_args lookup_list_t lookup_default 
             {
               Object RESULT = null;
 
@@ -1584,7 +1585,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 116: // complex_instruction ::= TABLESWITCH table 
+          case 117: // complex_instruction ::= TABLESWITCH table 
             {
               Object RESULT = null;
 
@@ -1593,7 +1594,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 115: // complex_instruction ::= LOOKUPSWITCH lookup 
+          case 116: // complex_instruction ::= LOOKUPSWITCH lookup 
             {
               Object RESULT = null;
 
@@ -1602,7 +1603,7 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 114: // simple_instruction ::= Insn Str 
+          case 115: // simple_instruction ::= Insn Str 
             {
               Object RESULT = null;
 		int ileft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left;
@@ -1619,6 +1620,29 @@ class CUP$parser$actions {
           return CUP$parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
+          case 114: // simple_instruction ::= Insn Str Word Word 
+            {
+              Object RESULT = null;
+		int ileft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left;
+		int iright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).right;
+		String i = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value;
+		int n1left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left;
+		int n1right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).right;
+		String n1 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-2)).value;
+		int n2left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left;
+		int n2right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).right;
+		String n2 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value;
+		int n3left = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
+		int n3right = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
+		String n3 = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
+		
+            classFile.plant(i, n1, n2, n3);
+        
+              CUP$parser$result = new java_cup.runtime.Symbol(35/*simple_instruction*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
+            }
+          return CUP$parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
           case 113: // simple_instruction ::= Insn Word Word 
             {
               Object RESULT = null;
diff --git a/src/jasmin/sym.java b/src/jasmin/sym.java
index 331a5c2..9e541e3 100644
--- a/src/jasmin/sym.java
+++ b/src/jasmin/sym.java
@@ -1,7 +1,7 @@
 
 //----------------------------------------------------
 // The following code was generated by CUP v0.10k
-// Sat Jan 23 10:58:59 CET 2010
+// Thu Jan 05 19:36:41 CET 2012
 //----------------------------------------------------
 
 package jasmin;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jasmin-sable.git



More information about the pkg-java-commits mailing list